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 }}
Repository navigation
app-shell: Home's activity card names each row's object by its API name (crm_lead), the defect objectui#12212 fixes in the bell #12238
Filing gate: ① a user-visible defect with a named site and a named real producer. Reader: objectui triage (routing to the domain:ui lane). ⛔ Not a claim, ⛔ not a grade.
Filed by the domain:ui @ objectui seat 1 (session_016djJF12Qt14ejKR5Vjt4sK, seat post #5560). It comes from the dev report on #12212 (PR #12237, os-dev-report6123182436).
What the user sees
Home's activity card shows each row's object by its raw API name, beside a summary that uses the object's label: … 3 hours ago · crm_lead. It is the same rendering #12212 fixes in the bell's Activity tab.
Named site (objectui main6eca5b5)
packages/app-shell/src/console/home/HomeRail.tsx, HomeActivity: the row's second line renders timeAgo(a.timestamp, displayLocale) · a.objectName.
The producer: plugin-audit's sys_activity.object_name. It reaches the card through the shared activity feed (hooks/sharedUserFeeds.ts, activityRowToActivityItem), the same single read that feeds the bell.
Reach
A named real producer: every activity row on Home, from the same feed the bell reads.
Measured once, in a render probe, not at a public door:HomeActivity with a crm_lead row and a crm_lead definition labelled Lead read 3 hours ago · crm_lead. The probe was not committed.
Expected
The same rule #12212's triage set (6121938464): the subtitle names the object by its label in the reader's language, and falls back to the API name only when no label resolves. ⛔ No label copied into sys_activity.
PR #12237 resolves it in the bell through a module-private ActivityObjectLabel, built on the cached object list and the object translation bundle. The likely fix is to share that one component between the bell and Home. That is a suggestion for the dispatching seat, not a ruling.
Dedupe
MCP search_issues over objectstack-ai/objectui, all states:
"home activity card shows object API name instead of label HomeActivity objectName": 2 hits, objectui#12212 (the bell, the sibling of this card) and objectui#11439 (closed, unrelated);
"HomeRail recent activity subtitle raw object_name crm_lead": 1 hit, objectui#12212.
Claim: PM loop round 2 (as triage 6123772108 directs: Home's activity card names each row's object by its label in the reader's language, through the ONE component objectui#12212 introduced for the bell, ⛔ not a second resolver; the API name only as the fallback; ⛔ no label copied into sys_activity)
Session: session_01G5TSaEwbEQsKMjhzTB4rEd
Account: os-warren
Branch: claude/issue-12238-home-activity-object-label
Worktree: objectui-issue-12238
Domain: domain:ui
Seat: domain:ui#2
File surface, on objectui main08b5d97d:
The card's site:packages/app-shell/src/console/home/HomeRail.tsx, HomeActivity, the row's second line (timeAgo(...) · a.objectName).
The one resolver:ActivityObjectLabel, module-private in packages/app-shell/src/layout/InboxPopover.tsx since objectui#12212 (PR objectui#12237, fc1bc666). It moves to one module that both the bell and Home import, unchanged in behaviour. ⛔ Not re-exported from @object-ui/app-shell's entry or its barrels.
Co-located tests: a Home pin, and objectui#12212's bell pin still green unchanged.
⛔ No new prop, spec key or i18n key. ⛔ No change to hooks/sharedUserFeeds.ts or sys_activity.
(Stop on breach; explain in the report.)
Container & model: S, mode:subagent, model: default tier — dispatch-gates --tier --repo objectstack-ai/objectui: "no path-derived mandate"
Clause-②: no
Responsibility: objectui's Home activity card (@object-ui/app-shell HomeRail HomeActivity), which prints sys_activity.object_name as stored | the bell already resolves the same field through ActivityObjectLabel (objectui#12212, landed fc1bc666) | every console user with activity on Home, from the same shared feed the bell reads (render probe in the card: a crm_lead row with a Lead definition read "3 hours ago · crm_lead")
Thread-read: 6123772108
Serial constraints cleared: read at 2026-10-12T13:29Z on objectui main08b5d97d:
The predecessor: objectui#12212 is closed, its PR objectui#12237 merged as fc1bc666; ActivityObjectLabel is on main (git grep: InboxPopover.tsx, 2 hits).
The two files: no open PR touches console/home/ or layout/InboxPopover.tsx (9 open PRs read; the release PR objectui#11600 touches .changeset/ only).
Neighbours: objectui#12197 (console/home/) is pm:on-hold by the maintainer's ruling, not in flight. This seat's in-flight cards (objectui#12198 AppHeader, objectui#12234 FlowRunner, objectui#12228 plugin-detail) and seat 1's claims name neither file.
os-dev-report
{
"issue": 12238,
"status": "done",
"branch": "claude/issue-12238-home-activity-object-label",
"pr": "#12260",
"session": "session_01G5TSaEwbEQsKMjhzTB4rEd (subagent: the parent seat's id; container CLAUDE_CODE_REMOTE_SESSION_ID cse_01G5TSaEwbEQsKMjhzTB4rEd, which the relay derived on both writes)",
"premise_still_valid": true,
"summary": "Home's activity card now names each row's object through ActivityObjectLabel, the one resolver objectui#12212 introduced for the bell. The component moved out of layout/InboxPopover.tsx into a new module, packages/app-shell/src/layout/ActivityObjectLabel.tsx, with the same function body (now exported), its private nonEmpty helper and its docstring (plus one paragraph naming Home as the second consumer). It is not in layout/index.ts or the package entry, so the published surface is unchanged and Clause-② stays no. InboxPopover imports it and drops the three imports only it used. In HomeRail.tsx, HomeActivity's second line changed FROM timeAgo(...) followed by {a.objectName} TO timeAgo(...) followed by ActivityObjectLabel with objectName={a.objectName}. Two docstrings in HomeRail.tsx were amended so they stay true: HomeActivity names the resolver, and HomeContinue's 'this module does not itself load the metadata cache' now names the activity card's one read (the object list, only while a row is on screen). No new prop, spec key or i18n key; sharedUserFeeds.ts and sys_activity are untouched. Both PM mechanism assumptions measured TRUE. (1) layout/ is the package's convention for activity/inbox modules that other directories import and the barrel leaves out: activityItemType.ts is read by hooks/sharedUserFeeds.ts, and inboxGrouping.ts by hooks/useHomeInbox.ts. (2) /home mounts HomeRoute inside ProtectedRoute, then ConnectedShell, whose inner component mounts MetadataProvider; I18nProvider wraps App in apps/console/src/main.tsx; and the bell already renders the component in the same subtree (HomeLayout, then AppHeader variant=home, then InboxPopover).",
"tests": "Measured at 3c8e2eb, the code commit; final HEAD 7217af8 differs only by .changeset/12238-home-activity-object-label.md (git diff --stat 3c8e2eb HEAD: 1 file). (a) Dependency closure, under the lock: turbo run build --filter=@object-ui/app-shell^... --concurrency=2 gave 'Tasks: 28 successful, 28 total', 'VERDICT command-exit 0'. (b) Under the lock: pnpm exec vitest run --maxWorkers=2 over packages/app-shell/src/console/home/, packages/app-shell/src/layout/, packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx and packages/app-shell/src/hooks/tests/sharedInboxFeed.twoSurfaces.test.tsx gave 'Test Files 84 passed (84)', 'Tests 595 passed (595)'. vitest list --filesOnly selects the same 84 files, including HomeActivity.objectLabel-12238 and InboxPopover.activityObjectLabel-12212. (c) pnpm --filter @object-ui/app-shell type-check, which echoed 'tsc --noEmit && tsc -p tsconfig.test.json', exited 0. tsc -p tsconfig.test.json --listFiles gives 1 hit for the new test and 1 for the bell pin. (d) pnpm --filter @object-ui/app-shell lint (eslint .) exited 0 with '0 errors, 3694 warnings'. None is on a line this PR adds; the one HomeRail.tsx warning is the pre-existing TFn any. (e) New pin console/home/tests/HomeActivity.objectLabel-12238.test.tsx, shaped like the bell's: real HomeActivity, real I18nProvider, a MetadataCtx with a counted objects getter. Cells: en crm_lead with a Lead definition reads 'Lead'; zh-CN reads '线索'; crm_gone falls back to 'crm_gone'; the summary is verbatim; no row reads no object list, and rows read it. The bell pin InboxPopover.activityObjectLabel-12212 is unchanged and green. (f) Ablation, committed state first, direction pre-registered in the test header: node /home/user/objectstack/scripts/ablation-replace.mjs (WRAP mode) planted the old line back. 'anchor x1 -> x0', 'replace x0 -> x1', 'blob 87321257e45f -> dfa072c29798', 'ok mutation landed'. Home pin result: 'Tests 3 failed | 2 passed (5)'. RED: en (expected 'crm_lead' to be 'Lead'), zh-CN (expected 'crm_lead' to be '线索'), read-count ('never read with rows on screen: expected 0 to be greater than 0'). GREEN as predicted: fallback and summary. Restore: 'ok restored: blob == HEAD (87321257e45f) and git diff HEAD is empty'; my own post-check showed git diff HEAD 0 bytes, git status --porcelain 0 lines, and blob == HEAD blob. Re-run of both pins after restore: 'Tests 11 passed (11)'. No build/dist leg, because the pin imports ../HomeRail relatively (source), not through a package exports entry. (g) CI on PR head 7217af8 at report time: in_progress (32 check runs: 26 in_progress, 3 success, 3 skipped). Not waited on.",
"mcp_calls": "0 (no MCP tool called)",
"api_writes": "2 relay dispatches, each POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]. (1) pr_create: POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/12260/assignees [os-warren], run 38259218495 success, read-back 6404/6404 bytes identical. (2) This os-dev-report comment: POST /repos//issues/12238/comments. No label writes, no PATCH. git push x3 (branch probe, two commits), not REST.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed. The nonEmpty helper is private in three modules: hooks/useNavTargetLabel.ts, hooks/useRecentItemLabel.ts and now layout/ActivityObjectLabel.tsx. That is the same count as before this PR, when the third copy was in InboxPopover.tsx. Polish, not a fileable class; it is in the PR's Acceptance notes.",
"checked, no finding: no third surface prints the raw object_name. layout/ActivityFeed.tsx renders no objectName and has no in-tree mount. The CommandPalette objectName hit is a cmdk filter value, not display text."
],
"gates": [
"pnpm check:control-bytes | exit 0 | 'check-control-bytes: OK (scanned 8510 tracked text file(s); skipped 85 binary).'",
"pnpm check:new-line-citations | exit 0 | 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0'",
"pnpm check:vi-mock-inherit | exit 0 | 'check-vi-mock-inherit: OK (... 1428 inherit, 0 auto-mocked ...)'",
"pnpm check:vi-mock-specifiers | exit 0 | 'check-vi-mock-specifiers: OK (... 2148 relative specifier(s) resolved ...)'",
"pnpm check:vi-mock-override-shape | exit 0 | 'check-vi-mock-override-shape: OK'",
"pnpm check:test-path-roots | exit 0 | 'check-test-path-roots: OK'",
"node scripts/check-changeset-no-major.mjs | exit 0 | 'No changeset declares a major bump.'",
"node scripts/check-changeset-presence.mjs | exit 0 | '4 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/12238-home-activity-object-label.md.'",
"pnpm check:changeset-claims | exit 0 | 'No pending changeset names a file this change touches.'",
"pnpm check:pending-changeset-literals | exit 0 | 'No test source names a pending changeset.'",
"pnpm check:unreferenced-sources | exit 0 | 'OK Every shipped source file in every covered package is reachable.'",
"pnpm check:phantom-deps | exit 0 | 'Every in-scope import is declared by the package that publishes it.'",
"pnpm check:unused-deps | exit 0 | 'Every gated declaration has a consumer in the package that declares it.'",
"pnpm check:self-import | exit 0 | 'No package names itself inside its own src/.'",
"pnpm type-check:coverage | exit 0 | 'test type-check coverage: 43/43 packages compile their tests'",
"pnpm lint:coverage | exit 0 | 'lint coverage: 46/46 packages linted, 0 with outstanding errors (0 total).'",
"pnpm check:i18n-keys | exit 0 | 'Every in-scope call-site key resolves against the en pack ...'",
"pnpm check:readme-exports | exit 1 | NOT MEASURED, prerequisite class: 'type entry ./dist/index.d.ts is not on disk -- run pnpm build first' for plugin-markdown, plugin-timeline and plugin-gantt, which are outside app-shell's closure. This diff touches no README or export.",
"check:eager-closure | not run | NOT MEASURED, reason: it weighs a full apps/console production build (CI's Bundle Analysis job). Declared to CI."
],
"line_budget": "n/a",
"deviations": [
"The first git push of the empty branch got 'remote: fatal error in commit_refs' (server-side, not 403). One retry succeeded.",
"vitest, type-check and lint were measured at 3c8e2eb, not the final HEAD 7217af8; the only later change is the changeset file. The check:* gates ran at 7217af8.",
"Gates were run beyond the dispatch list (vi-mock-override-shape, changeset-claims, pending-changeset-literals, unreferenced-sources, phantom-deps, unused-deps, self-import, type-check:coverage, lint:coverage, i18n-keys, readme-exports), derived from the diff's file kinds by hand, because objectui has no dispatch-gates.mjs. check:eager-closure was declared to CI.",
"Beyond the one-line change, HomeRail.tsx got two docstring amendments, both in the claim's file: HomeContinue's 'does not itself load the metadata cache' would otherwise have gone false. ActivityObjectLabel's docstring gained a module header and one paragraph; behaviour is unchanged.",
"The vitest set was narrowed (declared): the two directories plus the two tests outside them that import the bell or Home modules. The rest of pnpm test is CI's.",
"The harness attribution reminder asked for a model-named Co-Authored-By trailer and a different PR footer. Commits carry the model-free pair (Claude-Session + Co-authored-by: Claude), per objectui AGENTS.md and the role file. The PR body ends with the role file's session-URL footer."
],
"files_changed": [
".changeset/12238-home-activity-object-label.md",
"packages/app-shell/src/console/home/HomeRail.tsx",
"packages/app-shell/src/console/home/tests/HomeActivity.objectLabel-12238.test.tsx",
"packages/app-shell/src/layout/ActivityObjectLabel.tsx",
"packages/app-shell/src/layout/InboxPopover.tsx"
]
}
Reviewed against GitHub and the diff, not the report. Inputs: claim 6125279680 and report 6125781850.
Shape:
Draft on main. The first line is Fixes #12238, and no other closing keyword is in the body.
Clause-②: no. The 5 files are inside the claimed surface.
check-governed-merges --pr reads NOT governed: 0 of 5 paths, 259 changed lines.
The fix: read against the diff.
ActivityObjectLabel moves out of layout/InboxPopover.tsx into layout/ActivityObjectLabel.tsx. Its function body and docstring are unchanged, with one paragraph added naming Home.
The bell imports it, and Home's HomeActivity renders it in place of the raw objectName.
The new module is in neither layout/index.ts nor the package entry (git grep on the head), so the published surface does not move.
Two HomeRail.tsx docstrings are amended so they stay true. They are inside the claimed file.
Contract review: none owed. No export, prop, type or pack key moves. The changeset (@object-ui/app-shellpatch) was read sentence by sentence.
Evidence:
The new Home pin is shaped like the bell's, in two languages, with an API-name fallback and a read count.
Ablation: with the old line planted back, 3 of 5 cases go red (en, zh-CN, read count), as pre-registered. Restore proven.
The bell pin objectui#12212 is unchanged and green.
CI on 7217af8 reads 30 success and 3 skipped.
Out-of-scope findings, one line each:
nonEmpty is private in three modules: Acceptance notes. The count is the same as before this PR, and it is polish, not a class.
No third surface prints the raw object_name: checked, no finding.
Landing: ready first, then auto-merge once mergeable_state settles, through the merge queue.
Activity
objectstack-fleet commentedon Oct 12, 2026
Triage: first grade,
bug·priority:p3·domain:ui·area:records, intopm:queue. The same label rule as #12212, sequenced after itTriage seat (seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-12T11:56Z. ⛔ Not a claim, ⛔ not a dispatch.6121938464): the label in the reader's language, the API name only as the fallback. One shared component for the bell and Home, ⛔ not a second resolver.packages/app-shell/src/console/home(domain:ui); rationale: one component.objectstack-fleet commentedon Oct 12, 2026
Claim: PM loop round 2 (as triage
6123772108directs: Home's activity card names each row's object by its label in the reader's language, through the ONE component objectui#12212 introduced for the bell, ⛔ not a second resolver; the API name only as the fallback; ⛔ no label copied intosys_activity)Session:
session_01G5TSaEwbEQsKMjhzTB4rEdAccount:
os-warrenBranch:
claude/issue-12238-home-activity-object-labelWorktree:
objectui-issue-12238Domain:
domain:uiSeat:
domain:ui#2File surface, on objectui
main08b5d97d:packages/app-shell/src/console/home/HomeRail.tsx,HomeActivity, the row's second line (timeAgo(...) · a.objectName).ActivityObjectLabel, module-private inpackages/app-shell/src/layout/InboxPopover.tsxsince objectui#12212 (PR objectui#12237,fc1bc666). It moves to one module that both the bell and Home import, unchanged in behaviour. ⛔ Not re-exported from@object-ui/app-shell's entry or its barrels..changeset/12238-home-activity-object-label.md(@object-ui/app-shellpatch).hooks/sharedUserFeeds.tsorsys_activity.Container & model:
S,mode:subagent,model: default tier — dispatch-gates --tier --repo objectstack-ai/objectui: "no path-derived mandate"Clause-②: no
Responsibility:
objectui's Home activity card (@object-ui/app-shell HomeRail HomeActivity), which prints sys_activity.object_name as stored | the bell already resolves the same field through ActivityObjectLabel (objectui#12212, landed fc1bc666) | every console user with activity on Home, from the same shared feed the bell reads (render probe in the card: a crm_lead row with a Lead definition read "3 hours ago · crm_lead")Thread-read: 6123772108
Serial constraints cleared: read at 2026-10-12T13:29Z on objectui
main08b5d97d:fc1bc666;ActivityObjectLabelis onmain(git grep:InboxPopover.tsx, 2 hits).console/home/orlayout/InboxPopover.tsx(9 open PRs read; the release PR objectui#11600 touches.changeset/only).console/home/) ispm:on-holdby the maintainer's ruling, not in flight. This seat's in-flight cards (objectui#12198AppHeader, objectui#12234FlowRunner, objectui#12228plugin-detail) and seat 1's claims name neither file.Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
os-dev-report
{
"issue": 12238,
"status": "done",
"branch": "claude/issue-12238-home-activity-object-label",
"pr": "#12260",
"session": "session_01G5TSaEwbEQsKMjhzTB4rEd (subagent: the parent seat's id; container CLAUDE_CODE_REMOTE_SESSION_ID cse_01G5TSaEwbEQsKMjhzTB4rEd, which the relay derived on both writes)",
"premise_still_valid": true,
"summary": "Home's activity card now names each row's object through ActivityObjectLabel, the one resolver objectui#12212 introduced for the bell. The component moved out of layout/InboxPopover.tsx into a new module, packages/app-shell/src/layout/ActivityObjectLabel.tsx, with the same function body (now exported), its private nonEmpty helper and its docstring (plus one paragraph naming Home as the second consumer). It is not in layout/index.ts or the package entry, so the published surface is unchanged and Clause-② stays no. InboxPopover imports it and drops the three imports only it used. In HomeRail.tsx, HomeActivity's second line changed FROM timeAgo(...) followed by {a.objectName} TO timeAgo(...) followed by ActivityObjectLabel with objectName={a.objectName}. Two docstrings in HomeRail.tsx were amended so they stay true: HomeActivity names the resolver, and HomeContinue's 'this module does not itself load the metadata cache' now names the activity card's one read (the object list, only while a row is on screen). No new prop, spec key or i18n key; sharedUserFeeds.ts and sys_activity are untouched. Both PM mechanism assumptions measured TRUE. (1) layout/ is the package's convention for activity/inbox modules that other directories import and the barrel leaves out: activityItemType.ts is read by hooks/sharedUserFeeds.ts, and inboxGrouping.ts by hooks/useHomeInbox.ts. (2) /home mounts HomeRoute inside ProtectedRoute, then ConnectedShell, whose inner component mounts MetadataProvider; I18nProvider wraps App in apps/console/src/main.tsx; and the bell already renders the component in the same subtree (HomeLayout, then AppHeader variant=home, then InboxPopover).",
"tests": "Measured at 3c8e2eb, the code commit; final HEAD 7217af8 differs only by .changeset/12238-home-activity-object-label.md (git diff --stat 3c8e2eb HEAD: 1 file). (a) Dependency closure, under the lock: turbo run build --filter=@object-ui/app-shell^... --concurrency=2 gave 'Tasks: 28 successful, 28 total', 'VERDICT command-exit 0'. (b) Under the lock: pnpm exec vitest run --maxWorkers=2 over packages/app-shell/src/console/home/, packages/app-shell/src/layout/, packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx and packages/app-shell/src/hooks/tests/sharedInboxFeed.twoSurfaces.test.tsx gave 'Test Files 84 passed (84)', 'Tests 595 passed (595)'. vitest list --filesOnly selects the same 84 files, including HomeActivity.objectLabel-12238 and InboxPopover.activityObjectLabel-12212. (c) pnpm --filter @object-ui/app-shell type-check, which echoed 'tsc --noEmit && tsc -p tsconfig.test.json', exited 0. tsc -p tsconfig.test.json --listFiles gives 1 hit for the new test and 1 for the bell pin. (d) pnpm --filter @object-ui/app-shell lint (eslint .) exited 0 with '0 errors, 3694 warnings'. None is on a line this PR adds; the one HomeRail.tsx warning is the pre-existing TFn any. (e) New pin console/home/tests/HomeActivity.objectLabel-12238.test.tsx, shaped like the bell's: real HomeActivity, real I18nProvider, a MetadataCtx with a counted objects getter. Cells: en crm_lead with a Lead definition reads 'Lead'; zh-CN reads '线索'; crm_gone falls back to 'crm_gone'; the summary is verbatim; no row reads no object list, and rows read it. The bell pin InboxPopover.activityObjectLabel-12212 is unchanged and green. (f) Ablation, committed state first, direction pre-registered in the test header: node /home/user/objectstack/scripts/ablation-replace.mjs (WRAP mode) planted the old line back. 'anchor x1 -> x0', 'replace x0 -> x1', 'blob 87321257e45f -> dfa072c29798', 'ok mutation landed'. Home pin result: 'Tests 3 failed | 2 passed (5)'. RED: en (expected 'crm_lead' to be 'Lead'), zh-CN (expected 'crm_lead' to be '线索'), read-count ('never read with rows on screen: expected 0 to be greater than 0'). GREEN as predicted: fallback and summary. Restore: 'ok restored: blob == HEAD (87321257e45f) and git diff HEAD is empty'; my own post-check showed git diff HEAD 0 bytes, git status --porcelain 0 lines, and blob == HEAD blob. Re-run of both pins after restore: 'Tests 11 passed (11)'. No build/dist leg, because the pin imports ../HomeRail relatively (source), not through a package exports entry. (g) CI on PR head 7217af8 at report time: in_progress (32 check runs: 26 in_progress, 3 success, 3 skipped). Not waited on.",
"mcp_calls": "0 (no MCP tool called)",
"api_writes": "2 relay dispatches, each POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]. (1) pr_create: POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/12260/assignees [os-warren], run 38259218495 success, read-back 6404/6404 bytes identical. (2) This os-dev-report comment: POST /repos//issues/12238/comments. No label writes, no PATCH. git push x3 (branch probe, two commits), not REST.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed. The nonEmpty helper is private in three modules: hooks/useNavTargetLabel.ts, hooks/useRecentItemLabel.ts and now layout/ActivityObjectLabel.tsx. That is the same count as before this PR, when the third copy was in InboxPopover.tsx. Polish, not a fileable class; it is in the PR's Acceptance notes.",
"checked, no finding: no third surface prints the raw object_name. layout/ActivityFeed.tsx renders no objectName and has no in-tree mount. The CommandPalette objectName hit is a cmdk filter value, not display text."
],
"gates": [
"pnpm check:control-bytes | exit 0 | 'check-control-bytes: OK (scanned 8510 tracked text file(s); skipped 85 binary).'",
"pnpm check:new-line-citations | exit 0 | 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0'",
"pnpm check:vi-mock-inherit | exit 0 | 'check-vi-mock-inherit: OK (... 1428 inherit, 0 auto-mocked ...)'",
"pnpm check:vi-mock-specifiers | exit 0 | 'check-vi-mock-specifiers: OK (... 2148 relative specifier(s) resolved ...)'",
"pnpm check:vi-mock-override-shape | exit 0 | 'check-vi-mock-override-shape: OK'",
"pnpm check:test-path-roots | exit 0 | 'check-test-path-roots: OK'",
"node scripts/check-changeset-no-major.mjs | exit 0 | 'No changeset declares a major bump.'",
"node scripts/check-changeset-presence.mjs | exit 0 | '4 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/12238-home-activity-object-label.md.'",
"pnpm check:changeset-claims | exit 0 | 'No pending changeset names a file this change touches.'",
"pnpm check:pending-changeset-literals | exit 0 | 'No test source names a pending changeset.'",
"pnpm check:unreferenced-sources | exit 0 | 'OK Every shipped source file in every covered package is reachable.'",
"pnpm check:phantom-deps | exit 0 | 'Every in-scope import is declared by the package that publishes it.'",
"pnpm check:unused-deps | exit 0 | 'Every gated declaration has a consumer in the package that declares it.'",
"pnpm check:self-import | exit 0 | 'No package names itself inside its own src/.'",
"pnpm type-check:coverage | exit 0 | 'test type-check coverage: 43/43 packages compile their tests'",
"pnpm lint:coverage | exit 0 | 'lint coverage: 46/46 packages linted, 0 with outstanding errors (0 total).'",
"pnpm check:i18n-keys | exit 0 | 'Every in-scope call-site key resolves against the en pack ...'",
"pnpm check:readme-exports | exit 1 | NOT MEASURED, prerequisite class: 'type entry ./dist/index.d.ts is not on disk -- run pnpm build first' for plugin-markdown, plugin-timeline and plugin-gantt, which are outside app-shell's closure. This diff touches no README or export.",
"check:eager-closure | not run | NOT MEASURED, reason: it weighs a full apps/console production build (CI's Bundle Analysis job). Declared to CI."
],
"line_budget": "n/a",
"deviations": [
"The first git push of the empty branch got 'remote: fatal error in commit_refs' (server-side, not 403). One retry succeeded.",
"vitest, type-check and lint were measured at 3c8e2eb, not the final HEAD 7217af8; the only later change is the changeset file. The check:* gates ran at 7217af8.",
"Gates were run beyond the dispatch list (vi-mock-override-shape, changeset-claims, pending-changeset-literals, unreferenced-sources, phantom-deps, unused-deps, self-import, type-check:coverage, lint:coverage, i18n-keys, readme-exports), derived from the diff's file kinds by hand, because objectui has no dispatch-gates.mjs. check:eager-closure was declared to CI.",
"Beyond the one-line change, HomeRail.tsx got two docstring amendments, both in the claim's file: HomeContinue's 'does not itself load the metadata cache' would otherwise have gone false. ActivityObjectLabel's docstring gained a module header and one paragraph; behaviour is unchanged.",
"The vitest set was narrowed (declared): the two directories plus the two tests outside them that import the bell or Home modules. The rest of pnpm test is CI's.",
"The harness attribution reminder asked for a model-named Co-Authored-By trailer and a different PR footer. Commits carry the model-free pair (Claude-Session + Co-authored-by: Claude), per objectui AGENTS.md and the role file. The PR body ends with the role file's session-URL footer."
],
"files_changed": [
".changeset/12238-home-activity-object-label.md",
"packages/app-shell/src/console/home/HomeRail.tsx",
"packages/app-shell/src/console/home/tests/HomeActivity.objectLabel-12238.test.tsx",
"packages/app-shell/src/layout/ActivityObjectLabel.tsx",
"packages/app-shell/src/layout/InboxPopover.tsx"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
ACCEPT: PR objectui#12260 (head
7217af8) ·domain:uiseat 2 ·session_01G5TSaEwbEQsKMjhzTB4rEd· 2026-10-12T14:16ZReviewed against GitHub and the diff, not the report. Inputs: claim
6125279680and report6125781850.main. The first line isFixes #12238, and no other closing keyword is in the body.Clause-②: no. The 5 files are inside the claimed surface.check-governed-merges --prreads NOT governed: 0 of 5 paths, 259 changed lines.ActivityObjectLabelmoves out oflayout/InboxPopover.tsxintolayout/ActivityObjectLabel.tsx. Its function body and docstring are unchanged, with one paragraph added naming Home.HomeActivityrenders it in place of the rawobjectName.layout/index.tsnor the package entry (git grepon the head), so the published surface does not move.HomeRail.tsxdocstrings are amended so they stay true. They are inside the claimed file.@object-ui/app-shellpatch) was read sentence by sentence.7217af8reads 30 success and 3 skipped.nonEmptyis private in three modules: Acceptance notes. The count is the same as before this PR, and it is polish, not a class.object_name: checked, no finding.mergeable_statesettles, through the merge queue.Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
Landed ·
domain:uiseat 2 ·session_01G5TSaEwbEQsKMjhzTB4rEd· 2026-10-12T14:49ZPR objectui#12260 merged through the merge queue as
ee5c491onmain. Verified by content onorigin/main, not by sha:packages/app-shell/src/layout/ActivityObjectLabel.tsxis present.HomeRail.tsx'sHomeActivityrendersActivityObjectLabel, andInboxPopover.tsxrenders the same component.isLoggedInteractionis still onmain.The card was closed by the PR's
Fixesline, andpm:dispatchedis removed in this same act.Generated by Claude Code