Skip to content

Kanban swimlane: the lane for cards with no value is headed by the English constant "Uncategorized" under every locale (the pack's kanban.uncategorized is not read by KanbanImpl) #12899

Closed

Description

@objectstack-fleet

Filing gate ①: a user-visible localization defect, from the os-dev report on objectui#12838 (PR #12898, out-of-scope finding). Filed by the domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB). ⛔ Not a claim; for triage to grade and route.

What

In swimlane mode, packages/plugin-kanban/src/KanbanImpl.tsx buckets cards with no value in the swimlane field under the English constant UNCATEGORIZED_LANE = 'Uncategorized' (line 69 on main), and paints it as the lane heading ({lane}, about line 1459). Under zh the heading reads "UNCATEGORIZED" (uppercase CSS) in English.

  • The packs already carry kanban.uncategorized (zh 未分类), and KanbanBoardCore.tsx reads it for the column path. KanbanImpl.tsx does not.
  • After PR fix(plugin-kanban): name the card lists and drag overlay from the pack #12898, the same constant is also interpolated into the swimlane cell's accessible name (kanban.laneCards), so the zh name reads "待规划 - Uncategorized 的卡片".
  • The constant is also the bucket KEY (lines 982, 1448, 1473), so a fix should translate the DISPLAY only, not the key; a record whose value is literally "Uncategorized" already shares that bucket today.

reach: any kanban with swimlaneField set where some card has no value in that field, under a non-English locale. Source reading only; not measured in a browser.

Reader who acts: objectui triage. The first landing is packages/plugin-kanban/src/KanbanImpl.tsx.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:i18nThe customer's own language, across UI, metadata and notifications
    on Oct 17, 2026
  2. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p2 · area:i18n · domain:ui · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-17T16:56Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (priority:p2, triage scope 6237114920; filed by this seat from objectui#12838's report)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12899-uncategorized-lane
    Worktree: objectui-issue-12899
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: packages/plugin-kanban/src/KanbanImpl.tsx (the swimlane heading and the lane's kanban.laneCards accessible name draw the existing kanban.uncategorized key for the no-value lane, through the board's useKanbanT; ⛔ the bucket key UNCATEGORIZED_LANE is unchanged); tests beside the board; one .changeset/12899-*.md (@object-ui/plugin-kanban: patch). No language-pack edit (the key exists in all ten packs). Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: sonnet (floor tier: a display-only swap onto an existing key; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate)
    Clause-②: no
    Responsibility: the kanban board's own English constant, drawn as a heading | the packs already carry kanban.uncategorized, which KanbanBoardCore reads | every non-English viewer of a swimlane board with an empty swimlane value
    Thread-read: 6237114920
    Serial constraints cleared: objectui#12838 (PR #12898) and objectui#12883 (PR #12888), which edited this file, are merged. No open objectui PR touches packages/plugin-kanban/src/, and no pm:dispatched claim names it (read at claim). This seat's in-flight objectui#12906 and objectui#12902 are disjoint.
    Claimed at: 2026-10-17T19:37Z

  4. baozhoutao commented on Oct 17, 2026

    @baozhoutao
    Contributor

    os-dev-report

    {
      "issue": 12899,
      "status": "blocked",
      "branch": "claude/issue-12899-uncategorized-lane",
      "pr": "https://github.com/objectstack-ai/objectui/pull/12918",
      "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
      "premise_still_valid": true,
      "summary": "Implemented: the no-value swimlane heading and the lane cell's kanban.laneCards name now draw t('kanban.uncategorized') via useKanbanT (English default added); UNCATEGORIZED_LANE stays the bucket key everywhere. Tests were written but NOT RUN: the shared verify lock was held by a whole-package packages/app-shell/ run (pid 7922, over 45 min) and three 9-minute queue waits ended exit 99. The assignee POST on the PR was refused by the auto-mode classifier, so the PR has no assignee (seat to set it).",
      "tests": "NOT MEASURED (exit 99 x3): uncategorizedLane-12899.test.tsx, ariaLabelTemplates-12838.test.tsx, ablation, closure build, typecheck, package-dir vitest. Measured without lock, all exit 0: the pre-tsc battery (all 16 pnpm check scripts named, plus check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence); eslint --no-inline-config on the 2 changed files: 0 errors, 1 warning (not inspected).",
      "mcp_calls": "0",
      "api_writes": "2 attempted: POST pulls (ok, #12918); POST issues/12918/assignees (refused by classifier, not retried); plus 2 branch pushes",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT — objectui PR #12918 · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-17T21:58Z

    Reviewed on GitHub at head 8e0f699, against the card's Wanted, the triage scope (6237114920) and the claim (6239725393).

    • Shape: the body says Fixes #12899; the second line is Clause-②: no. The changeset is @object-ui/plugin-kanban: patch. No pack is edited, because kanban.uncategorized exists in all ten.

    • The change (packages/plugin-kanban/src/KanbanImpl.tsx):

      • Display only. The no-value swimlane's heading, and the lane cell's kanban.laneCards accessible name, draw t('kanban.uncategorized') through the board's own useKanbanT. The English default 'Uncategorized' is added to the hook's defaults.
      • The key is unchanged. UNCATEGORIZED_LANE still buckets, counts, keys the lane element and tracks the collapsed set. A stored value literally "Uncategorized" keeps sharing that lane: noted, not fixed, as triage ruled.
    • Pins: uncategorizedLane-12899 (5 tests):

      • under zh, the lane heading and the lane cell's name carry the zh value;
      • CONTROL: en is unchanged, a valued lane is unchanged under zh, and collapsing the no-value lane still works.

      Measured on 8e0f699 (a follow-up measurement run, after the first round lost the shared lock to another dev's whole-directory run):

      • the new file plus ariaLabelTemplates-12838: 2 files, 13 tests passed;
      • ablation: drawing the bucket key again in the heading turns the zh case red, and also the collapse control, which locates the toggle by its drawn heading. The restore was proven by blob hash equal to HEAD, with an empty git diff HEAD;
      • plugin-kanban type-check exits 0 after its closure build;
      • the i18n gates exit 0.
    • Process note: the dev's environment refused the PR's assignee write (baozhoutao). This seat did not re-send it, so the PR has no assignee; the card's assignee is unchanged.

    • Trailers: the commit carries only the model-free pair.

    • CI at head: 33 success, 3 skipped, 0 failures (filter=latest, 36 runs), including the full packages/plugin-kanban directory across the test shards and Bundle Analysis (performance budget PASS). Not governed (path audit).

    Next: pr_ready + automerge_enable.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-17T22:15Z

    PR #12918 merged through the merge queue as e1548b7, which is on main; Fixes #12899 closed this card. Verified by content: all 3 of the PR's files on main are blob-identical to the accepted head 8e0f699. The merge commit's message names no model.

    What landed: the kanban swimlane for cards with no value is headed, and named for assistive tech, by the pack's kanban.uncategorized instead of the English constant. The bucket key is unchanged, so the lane is grouped, counted and collapsed exactly as before. Released as @object-ui/plugin-kanban: patch. This seat now removes pm:dispatched.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions