You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
tree / Org Chart: cells render raw values (a boolean shows as true) #11686
Path: ② the capabilities an end user meets in the app — tree views | 缺项 | P2
Split by the triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U from objectui#11672 (the 2026-10-06 console dogfood sweep, showcase, framework ce577ec4), item 14. Re-read on objectui main (848ba0e12f) before filing: still live, with no open duplicate. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in packages/plugin-tree/src/ObjectTree.tsx (String(value), about :598) ⇒ domain:ui; rationale: the tree stringifies values instead of using the field display faces.
What happens
Setup → Business Units (Org Chart view) renders the boolean "Active" column as the text true.
Done when
Tree cells render through the same field display faces as list cells: booleans, options, dates.
Pin: the Active column renders the boolean face, localized.
Claim: PM loop round 1
Session: session_01DrKzdPdyLLBW3qpZ4vtk7z
Account: huangyiirene
Branch: claude/issue-11686-tree-cell-display-faces
Worktree: objectui-issue-11686
Domain: domain:ui
Seat: domain:ui#1
File surface: packages/plugin-tree/src/ — ObjectTree.tsx's cell value formatter (the return String(value); tail, about :598, and the call sites that print its result) and the tests beside it; packages/plugin-tree/package.json only if a workspace dependency on the package that owns the list cell faces must be added; and .changeset/11686-*.md (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: opus (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; default tier)
Clause-②: no
Thread-read: none
Serial constraints cleared: none. No open objectui PR touches packages/plugin-tree/** (objectui#11718, #11069 and the release PR objectui#11600 were read); seat 2's in-flight objectui#11680, #11682 and #11684 are on components, core and plugin-detail files. Queued sibling objectui#11689 owns the read-only boolean WORDS (packages/fields/src/widgets/BooleanField.tsx "Yes"/"No"); this card does not edit that file, and is not folded with it (fold gate ①: different defect — a missing face vs. untranslated words in an existing face). Read 2026-10-06T13:50Z.
Why Clause-②: no: tree cells start rendering through the faces list cells already use. That widens no accepted input and adds no export, prop, type member or i18n key to anything a package entry reaches.
{
"issue": 11686,
"status": "done",
"branch": "claude/issue-11686-tree-cell-display-faces",
"pr": "https://github.com/objectstack-ai/objectui/pull/11721",
"session": "session_01DrKzdPdyLLBW3qpZ4vtk7z — the dispatching PM seat's session (subagent run, so the parent's id)",
"premise_still_valid": true,
"summary": "The Org Chart tab is sys_business_unit's org_chart list view (type tree), which ListView's case 'tree' hands to object-tree, i.e. plugin-tree's ObjectTree; its formatCellValue ended in return String(value), so the boolean active column printed true (H1 confirmed). New renderTreeCell draws every cell whose column has a DECLARED type through @object-ui/fields' published two-step getCellRenderer(resolveCellRendererType(field)), the resolution grid, kanban, gallery and report use (H2), handing the face the column key as name, the renderer key as type, translateOptions-translated options and the header's translated label; untyped columns keep the old string and the overlay plain fallback is unchanged (H3: the string fed display only). H4: the boolean face draws a checkbox for true and, for false on a status-named field, a FIELD-LABEL — Off badge whose label is now localized; the word Off and the Completed / Not completed accessible names are hard-coded English in BooleanCellRenderer (packages/fields/src/index.tsx), a file objectui#11689 does NOT list, so they are named below for folding into that family rather than riding it as the order assumed. plugin-tree now declares @object-ui/fields (workspace:*): no cycle, and it already reached fields at runtime through plugin-detail's built entry.",
"tests": {
"union_head": "142121e",
"gates": [
"bash os-verify-lock.sh -c \"pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-tree^...' build\" → 0 → os-verify-lock: VERDICT command-exit 0 (Scope: 13 of 47 workspace projects, @object-ui/fields built; closure packages untouched by the diff)",
"pnpm --filter @object-ui/plugin-tree build → 0 → os-verify-lock: VERDICT command-exit 0 (dts built; @object-ui/fields stays external in dist/index.js)",
"pnpm --filter @object-ui/plugin-tree test @142121e → 0 → Test Files 24 passed (24) · Tests 178 passed (178) · os-verify-lock: VERDICT command-exit 0",
"pnpm --filter @object-ui/plugin-tree type-check @142121e (script name echoed: type-check → tsc --noEmit && tsc -p tsconfig.test.json; tsc --listFiles shows the new test in tsconfig.test.json) → 0 → os-verify-lock: VERDICT command-exit 0",
"vitest run ObjectTree.cellFaces-11686 + ObjectTree.fieldFormatting (verbose) → 0 → Tests 11 passed (11): 5 new pins + the 6 objectui#6014 pins",
"pnpm check:control-bytes @142121e → 0 → check-control-bytes: OK (scanned 7664 tracked text file(s); skipped 85 binary)",
"pnpm check:new-line-citations @142121e → 0 → VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0",
"pnpm check:changeset-claims @142121e → 0 → No pending changeset names a file this change touches.",
"pnpm check:pending-changeset-literals @142121e → 0 → No test source names a pending changeset.",
"pnpm check:phantom-deps @142121e → 0 → Every in-scope import is declared by the package that publishes it.",
"pnpm check:unused-deps @142121e → 0 → Every gated declaration has a consumer in the package that declares it.",
"pnpm check:lockfile-integrity @142121e → 0 → VERDICT clean — no @objectstack/* identity moved backward and no package gained a copy.",
"ADDED pnpm check:lockfile-dedupe @142121e (lockfile touched) → 0 → VERDICT deduped — pnpm dedupe would collapse nothing in this lockfile.",
"ADDED pnpm check:test-path-roots @142121e (new test file) → 0 → check-test-path-roots: OK",
"ADDED node scripts/check-changeset-presence.mjs @142121e (changeset) → 0 → 2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)",
"ADDED node scripts/check-changeset-no-major.mjs @142121e (changeset) → 0 → No changeset declares a major bump.",
"node scripts/check-governed-queue-guard.mjs --test (the 5 paths) → 0 → NOT GOVERNED — 5 path(s) checked against 5 governed surface(s); none matched.",
"eslint --no-inline-config --format json on the 2 touched source files → 0 → 2 files, 0 errors; ObjectTree.tsx 24 warnings = base 24 (measured on the c910630 blob); test file 0. Invariance: flat config has empty parserOptions (no project / projectService), no import/* rules, no object-ui/* rule reads fs or type services, so the diff cannot move an untouched file's verdict. Repo-wide pnpm lint left to CI.",
"ablation (from committed 506a6e5, objectstack scripts/ablation-replace.mjs wrap mode, under the lock): renderTreeCell forced to the old string; anchor x1→x0, blob 9a76f60b→b395115b; result Tests 4 failed | 7 passed — each face pin red at its own assertion (expected 'true' not to contain 'true'; expected 'false' not to contain 'false'; expected '2024-03-05' not to be '2024-03-05'; zh pin 'true'), untyped-bound pin + 6 objectui#6014 pins green; restore: blob after restore 9a76f60b == HEAD, git diff HEAD empty. No dist in the path: subject imported as ./ObjectTree (src) and @object-ui/fields aliased to src by vitest.config.mts, so no rebuild leg applies."
],
"not_measured": [
"NOT MEASURED: check:eager-closure, reason: needs a full console vite build (CI Bundle Analysis); stated instead: plugin-tree already imports @object-ui/plugin-detail statically and plugin-detail's dist entry imports @object-ui/fields statically, so the new edge adds no module to any closure",
"NOT MEASURED: live console run of the Org Chart tab, reason: not required by the card; the ListView mount shape is pinned in unit tests"
],
"deviations": [
"pnpm-lock.yaml is outside the claim's named file surface: it changed only as the mechanical consequence of the allowed package.json dependency (a 3-line importer entry; lockfile-integrity and lockfile-dedupe green)",
"first ablation run (at 6a5fa29) was not evidence: all 5 new pins went red at a shared wait-for-checkbox helper; the helper now waits on a schema-arrival signal the old code also produced (506a6e5) and the ablation was rerun from committed state",
"union full suite: three lock windows ended queue-timeout exit 99 (holder pid 23576, pnpm exec vitest run --maxWorkers=2 packages/app-shell/, held at least 1785s, then finished on its own), so the PR body declares a narrowing citing the suite at 506a6e5; a fourth attempt acquired and measured the suite directly at 142121e (24/178 green). The PR body's 'Declared narrowing' paragraph is therefore superseded; dev did not PATCH it (seat may replace it with: full suite 24 files / 178 tests and type-check green at 142121e under the lock)",
"conflict named: the harness attribution reminder asks for a model-bearing Co-Authored-By trailer and a different PR footer; the os-dev definition and objectui AGENTS.md govern, so commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) and the PR ends with the session-URL footer"
],
"files_changed": [
".changeset/11686-tree-cell-display-faces.md",
"packages/plugin-tree/package.json",
"packages/plugin-tree/src/ObjectTree.cellFaces-11686.test.tsx",
"packages/plugin-tree/src/ObjectTree.tsx",
"pnpm-lock.yaml"
]
},
"mcp_calls": "0 — none",
"api_writes": "3 REST writes, each a POST /repos/objectstack-ai/objectstack/dispatches relayed as objectstack-fleet[bot]: (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (#11721, draft, body read back identical 10031/10031 bytes); (2) label-write --assign huangyiirene → PR #11721 assignees (read back MATCHES; zero label writes); (3) this os-dev-report → POST /repos/objectstack-ai/objectui/issues/11686/comments. Plus git push of the one branch (4 pushes: empty probe + 3 commits; not REST). Otherwise REST reads only (card, its comments, objectui#11689, PR read-back).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: objectui#11689 (family fold, not a separate card) · BooleanCellRenderer in packages/fields/src/index.tsx hard-codes the badge word Off (FIELD-LABEL — Off) and the completion indicator accessible names Completed / Not completed, drawn on every list surface and now the tree; objectui#11689 lists BooleanField.tsx, FormulaField.tsx, lookupColumnDisplay.tsx and HomePage.tsx only · evidence: the zh pin in ObjectTree.cellFaces-11686.test.tsx renders the badge with 启用 beside the English word Off · dedupe words: BooleanCellRenderer Off badge, Completed aria-label, boolean cell i18n, hard-coded English boolean · noted, not filed",
"carrier: objectui#11689 implementer · ObjectGrid hands its cell face fieldMeta.label = the authored fieldDef.label while its header uses resolveFieldLabel, so under a non-en pack the grid's Off badge names the column in the authored language; after objectui#11721 the tree's names it like its header · noted, not filed",
"carrier: 承接者:无 · packages/plugin-tree/vite.config.ts names no UMD output.globals for @object-ui/fields (new), @object-ui/plugin-detail, @object-ui/permissions, react/jsx-runtime, so the build warns MISSING_GLOBAL_NAME and guesses; ESM output unaffected · Acceptance notes only, noted, not filed"
]
}
domain:ui seat 1 · session_01DrKzdPdyLLBW3qpZ4vtk7z · reviewed against the PR diff and check runs, read 2026-10-06T15:00Z. Report: os-dev-report on this card.
Shape: draft → main; body line 1 Fixes #11686; Clause-②: no at line start; PR assignee huangyiirene (= card).
Scope: 5 files. The 4 in the claim's surface, plus pnpm-lock.yaml (+3, the importer entry for the new @object-ui/fields workspace dependency, which the claim allowed; declared in deviations). Nothing under content/docs/releases/. Governed guard: NOT GOVERNED. +332/−3.
Clause-② re-read on the diff:renderTreeCell and CellFormatContext are module-private. No export, prop, type member or locale key is added to the @object-ui/plugin-tree entry ⇒ no holds and no contract review is owed.
Mechanism checked on the diff: the label cell and every other cell now go through getCellRenderer(resolveCellRendererType({type, format})). Untyped columns keep formatCellValue, and the overlay fallback is unchanged. Options are translated through translateOptions as before (objectui#6014's pins green). The face's label is the header's own fieldLabel(field).
Changeset (@object-ui/plugin-tree patch; the package is published, private unset). Sentences checked against the diff:
"Each tree cell whose column the object defines now draws through the field package's cell display…": matches renderTreeCell's declared-type guard.
"A column the object does not define keeps the plain text": matches the !declaredType arm.
"…it uses the column label the tree's header shows, so it reads in the session's language": true of the label. The badge's own word Off stays English; that is carried to objectui#11689 below.
"Nothing is added to the package entry": matches.
Tests: 5 new pins in ObjectTree.cellFaces-11686.test.tsx, including the card's zh pin. Ablation from committed state turned the 4 face pins red at their own assertions while the untyped-bound pin and the 6 objectui#6014 pins stayed green; the restore was proven by the blob hash. Local union at 142121e: 24 files / 178 tests, plus type-check (script name echoed).
CI at 142121e: 44 check runs. Not yet converged at this read: Type Check and test shards 1–4 and 6–8 are in_progress; every completed run is success or an expected skip. Enqueue waits for every check to be green.
Deviation the seat corrects: the PR body's "Declared narrowing" paragraph predates the dev's fourth lock attempt, which measured the full suite at 142121e. The seat rewrites that paragraph; nothing else in the body changes.
Out-of-scope findings:
BooleanCellRenderer's hard-coded Off / Completed / Not completed (packages/fields/src/index.tsx): folded into objectui#11689, the boolean-words card, as an enumerated extra site (comment there). Not a new card.
The grid's fieldMeta.label comes from the authored label while its header is translated (packages/plugin-grid/src/ObjectGrid.tsx): folded into objectui#11689, same family, same comment.
plugin-tree's UMD output.globals gaps: Acceptance notes only. ESM is unaffected and nothing reads the UMD globals.
Next: once every check on the head is green, the seat flips the PR to ready and enables auto-merge (merge queue).
Activity
objectstack-fleet commentedon Oct 6, 2026
Claim: PM loop round 1
Session:
session_01DrKzdPdyLLBW3qpZ4vtk7zAccount:
huangyiireneBranch:
claude/issue-11686-tree-cell-display-facesWorktree:
objectui-issue-11686Domain:
domain:uiSeat:
domain:ui#1File surface:
packages/plugin-tree/src/—ObjectTree.tsx's cell value formatter (thereturn String(value);tail, about:598, and the call sites that print its result) and the tests beside it;packages/plugin-tree/package.jsononly if a workspace dependency on the package that owns the list cell faces must be added; and.changeset/11686-*.md(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus(dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; default tier)Clause-②: no
Thread-read: none
Serial constraints cleared:
none. No open objectui PR touchespackages/plugin-tree/**(objectui#11718, #11069 and the release PR objectui#11600 were read); seat 2's in-flight objectui#11680, #11682 and #11684 are oncomponents,coreandplugin-detailfiles. Queued sibling objectui#11689 owns the read-only boolean WORDS (packages/fields/src/widgets/BooleanField.tsx"Yes"/"No"); this card does not edit that file, and is not folded with it (fold gate ①: different defect — a missing face vs. untranslated words in an existing face). Read 2026-10-06T13:50Z.Why
Clause-②: no: tree cells start rendering through the faces list cells already use. That widens no accepted input and adds no export, prop, type member or i18n key to anything a package entry reaches.objectstack-fleet commentedon Oct 6, 2026
os-dev-report
{ "issue": 11686, "status": "done", "branch": "claude/issue-11686-tree-cell-display-faces", "pr": "https://github.com/objectstack-ai/objectui/pull/11721", "session": "session_01DrKzdPdyLLBW3qpZ4vtk7z — the dispatching PM seat's session (subagent run, so the parent's id)", "premise_still_valid": true, "summary": "The Org Chart tab is sys_business_unit's org_chart list view (type tree), which ListView's case 'tree' hands to object-tree, i.e. plugin-tree's ObjectTree; its formatCellValue ended in return String(value), so the boolean active column printed true (H1 confirmed). New renderTreeCell draws every cell whose column has a DECLARED type through @object-ui/fields' published two-step getCellRenderer(resolveCellRendererType(field)), the resolution grid, kanban, gallery and report use (H2), handing the face the column key as name, the renderer key as type, translateOptions-translated options and the header's translated label; untyped columns keep the old string and the overlay plain fallback is unchanged (H3: the string fed display only). H4: the boolean face draws a checkbox for true and, for false on a status-named field, a FIELD-LABEL — Off badge whose label is now localized; the word Off and the Completed / Not completed accessible names are hard-coded English in BooleanCellRenderer (packages/fields/src/index.tsx), a file objectui#11689 does NOT list, so they are named below for folding into that family rather than riding it as the order assumed. plugin-tree now declares @object-ui/fields (workspace:*): no cycle, and it already reached fields at runtime through plugin-detail's built entry.", "tests": { "union_head": "142121e", "gates": [ "bash os-verify-lock.sh -c \"pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-tree^...' build\" → 0 → os-verify-lock: VERDICT command-exit 0 (Scope: 13 of 47 workspace projects, @object-ui/fields built; closure packages untouched by the diff)", "pnpm --filter @object-ui/plugin-tree build → 0 → os-verify-lock: VERDICT command-exit 0 (dts built; @object-ui/fields stays external in dist/index.js)", "pnpm --filter @object-ui/plugin-tree test @142121e → 0 → Test Files 24 passed (24) · Tests 178 passed (178) · os-verify-lock: VERDICT command-exit 0", "pnpm --filter @object-ui/plugin-tree type-check @142121e (script name echoed: type-check → tsc --noEmit && tsc -p tsconfig.test.json; tsc --listFiles shows the new test in tsconfig.test.json) → 0 → os-verify-lock: VERDICT command-exit 0", "vitest run ObjectTree.cellFaces-11686 + ObjectTree.fieldFormatting (verbose) → 0 → Tests 11 passed (11): 5 new pins + the 6 objectui#6014 pins", "pnpm check:control-bytes @142121e → 0 → check-control-bytes: OK (scanned 7664 tracked text file(s); skipped 85 binary)", "pnpm check:new-line-citations @142121e → 0 → VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0", "pnpm check:changeset-claims @142121e → 0 → No pending changeset names a file this change touches.", "pnpm check:pending-changeset-literals @142121e → 0 → No test source names a pending changeset.", "pnpm check:phantom-deps @142121e → 0 → Every in-scope import is declared by the package that publishes it.", "pnpm check:unused-deps @142121e → 0 → Every gated declaration has a consumer in the package that declares it.", "pnpm check:lockfile-integrity @142121e → 0 → VERDICT clean — no @objectstack/* identity moved backward and no package gained a copy.", "ADDED pnpm check:lockfile-dedupe @142121e (lockfile touched) → 0 → VERDICT deduped — pnpm dedupe would collapse nothing in this lockfile.", "ADDED pnpm check:test-path-roots @142121e (new test file) → 0 → check-test-path-roots: OK", "ADDED node scripts/check-changeset-presence.mjs @142121e (changeset) → 0 → 2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)", "ADDED node scripts/check-changeset-no-major.mjs @142121e (changeset) → 0 → No changeset declares a major bump.", "node scripts/check-governed-queue-guard.mjs --test (the 5 paths) → 0 → NOT GOVERNED — 5 path(s) checked against 5 governed surface(s); none matched.", "eslint --no-inline-config --format json on the 2 touched source files → 0 → 2 files, 0 errors; ObjectTree.tsx 24 warnings = base 24 (measured on the c910630 blob); test file 0. Invariance: flat config has empty parserOptions (no project / projectService), no import/* rules, no object-ui/* rule reads fs or type services, so the diff cannot move an untouched file's verdict. Repo-wide pnpm lint left to CI.", "ablation (from committed 506a6e5, objectstack scripts/ablation-replace.mjs wrap mode, under the lock): renderTreeCell forced to the old string; anchor x1→x0, blob 9a76f60b→b395115b; result Tests 4 failed | 7 passed — each face pin red at its own assertion (expected 'true' not to contain 'true'; expected 'false' not to contain 'false'; expected '2024-03-05' not to be '2024-03-05'; zh pin 'true'), untyped-bound pin + 6 objectui#6014 pins green; restore: blob after restore 9a76f60b == HEAD, git diff HEAD empty. No dist in the path: subject imported as ./ObjectTree (src) and @object-ui/fields aliased to src by vitest.config.mts, so no rebuild leg applies." ], "not_measured": [ "NOT MEASURED: check:eager-closure, reason: needs a full console vite build (CI Bundle Analysis); stated instead: plugin-tree already imports @object-ui/plugin-detail statically and plugin-detail's dist entry imports @object-ui/fields statically, so the new edge adds no module to any closure", "NOT MEASURED: live console run of the Org Chart tab, reason: not required by the card; the ListView mount shape is pinned in unit tests" ], "deviations": [ "pnpm-lock.yaml is outside the claim's named file surface: it changed only as the mechanical consequence of the allowed package.json dependency (a 3-line importer entry; lockfile-integrity and lockfile-dedupe green)", "first ablation run (at 6a5fa29) was not evidence: all 5 new pins went red at a shared wait-for-checkbox helper; the helper now waits on a schema-arrival signal the old code also produced (506a6e5) and the ablation was rerun from committed state", "union full suite: three lock windows ended queue-timeout exit 99 (holder pid 23576, pnpm exec vitest run --maxWorkers=2 packages/app-shell/, held at least 1785s, then finished on its own), so the PR body declares a narrowing citing the suite at 506a6e5; a fourth attempt acquired and measured the suite directly at 142121e (24/178 green). The PR body's 'Declared narrowing' paragraph is therefore superseded; dev did not PATCH it (seat may replace it with: full suite 24 files / 178 tests and type-check green at 142121e under the lock)", "conflict named: the harness attribution reminder asks for a model-bearing Co-Authored-By trailer and a different PR footer; the os-dev definition and objectui AGENTS.md govern, so commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) and the PR ends with the session-URL footer" ], "files_changed": [ ".changeset/11686-tree-cell-display-faces.md", "packages/plugin-tree/package.json", "packages/plugin-tree/src/ObjectTree.cellFaces-11686.test.tsx", "packages/plugin-tree/src/ObjectTree.tsx", "pnpm-lock.yaml" ] }, "mcp_calls": "0 — none", "api_writes": "3 REST writes, each a POST /repos/objectstack-ai/objectstack/dispatches relayed as objectstack-fleet[bot]: (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (#11721, draft, body read back identical 10031/10031 bytes); (2) label-write --assign huangyiirene → PR #11721 assignees (read back MATCHES; zero label writes); (3) this os-dev-report → POST /repos/objectstack-ai/objectui/issues/11686/comments. Plus git push of the one branch (4 pushes: empty probe + 3 commits; not REST). Otherwise REST reads only (card, its comments, objectui#11689, PR read-back).", "open_questions": [], "out_of_scope_findings": [ "carrier: objectui#11689 (family fold, not a separate card) · BooleanCellRenderer in packages/fields/src/index.tsx hard-codes the badge word Off (FIELD-LABEL — Off) and the completion indicator accessible names Completed / Not completed, drawn on every list surface and now the tree; objectui#11689 lists BooleanField.tsx, FormulaField.tsx, lookupColumnDisplay.tsx and HomePage.tsx only · evidence: the zh pin in ObjectTree.cellFaces-11686.test.tsx renders the badge with 启用 beside the English word Off · dedupe words: BooleanCellRenderer Off badge, Completed aria-label, boolean cell i18n, hard-coded English boolean · noted, not filed", "carrier: objectui#11689 implementer · ObjectGrid hands its cell face fieldMeta.label = the authored fieldDef.label while its header uses resolveFieldLabel, so under a non-en pack the grid's Off badge names the column in the authored language; after objectui#11721 the tree's names it like its header · noted, not filed", "carrier: 承接者:无 · packages/plugin-tree/vite.config.ts names no UMD output.globals for @object-ui/fields (new), @object-ui/plugin-detail, @object-ui/permissions, react/jsx-runtime, so the build warns MISSING_GLOBAL_NAME and guesses; ESM output unaffected · Acceptance notes only, noted, not filed" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
Review: ACCEPT — PR objectui#11721 (head
142121e)domain:uiseat 1 ·session_01DrKzdPdyLLBW3qpZ4vtk7z· reviewed against the PR diff and check runs, read 2026-10-06T15:00Z. Report:os-dev-reporton this card.main; body line 1Fixes #11686;Clause-②: noat line start; PR assigneehuangyiirene(= card).pnpm-lock.yaml(+3, the importer entry for the new@object-ui/fieldsworkspace dependency, which the claim allowed; declared indeviations). Nothing undercontent/docs/releases/. Governed guard: NOT GOVERNED. +332/−3.renderTreeCellandCellFormatContextare module-private. No export, prop, type member or locale key is added to the@object-ui/plugin-treeentry ⇒noholds and no contract review is owed.getCellRenderer(resolveCellRendererType({type, format})). Untyped columns keepformatCellValue, and the overlay fallback is unchanged. Options are translated throughtranslateOptionsas before (objectui#6014's pins green). The face'slabelis the header's ownfieldLabel(field).@object-ui/plugin-treepatch; the package is published,privateunset). Sentences checked against the diff:renderTreeCell's declared-type guard.!declaredTypearm.Offstays English; that is carried to objectui#11689 below.ObjectTree.cellFaces-11686.test.tsx, including the card's zh pin. Ablation from committed state turned the 4 face pins red at their own assertions while the untyped-bound pin and the 6 objectui#6014 pins stayed green; the restore was proven by the blob hash. Local union at142121e: 24 files / 178 tests, plustype-check(script name echoed).142121e: 44 check runs. Not yet converged at this read:Type Checkand test shards 1–4 and 6–8 arein_progress; every completed run issuccessor an expected skip. Enqueue waits for every check to be green.142121e. The seat rewrites that paragraph; nothing else in the body changes.BooleanCellRenderer's hard-codedOff/Completed/Not completed(packages/fields/src/index.tsx): folded into objectui#11689, the boolean-words card, as an enumerated extra site (comment there). Not a new card.fieldMeta.labelcomes from the authored label while its header is translated (packages/plugin-grid/src/ObjectGrid.tsx): folded into objectui#11689, same family, same comment.output.globalsgaps: Acceptance notes only. ESM is unaffected and nothing reads the UMD globals.Next: once every check on the head is green, the seat flips the PR to ready and enables auto-merge (merge queue).
Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
Landed: PR objectui#11721 →
maina58626cdomain:uiseat 1 ·session_01DrKzdPdyLLBW3qpZ4vtk7z· verified 2026-10-06T15:26Z.a58626cis one squash commit on parent7300fca. It changes 5 files, +332/−3, the same as the PR.git diff 142121e a58626cover those 5 paths is 0 bytes: the landed bytes are the reviewed head's bytes.main:renderTreeCellhitsObjectTree.tsx, and@object-ui/fieldsis declared inpackages/plugin-tree/package.json.completedby the PR'sFixes.pm:dispatchedwas removed and read back. The assignee is kept.6019099345).Generated by Claude Code
fix(plugin-tree): tree cells draw the list cell faces, so a boolean n…