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
console: the Keyboard Shortcuts dialog advertises N, ⌘/Ctrl+E, ⌘/Ctrl+/, ⌘/Ctrl+D and B, and none of them does anything #11674
Path: ② the capabilities an end user meets in the app — console chrome | 缺项 | 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 1. Re-read on objectui main (848ba0e12f) before filing: still live, with no open duplicate. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in packages/app-shell/src/chrome/KeyboardShortcutsDialog.tsx (the static list, about :40–:71) ⇒ domain:ui; rationale: the dialog is a hard-coded list that no handler backs.
What happens
On /apps/showcase_app/showcase_task, with focus on the page body, N, ⌘/Ctrl+E (also on a record page), ⌘/Ctrl+/ and ⌘/Ctrl+D change nothing, and B does nothing: only Ctrl+B toggles the sidebar (packages/components/src/ui/sidebar.tsx about :120–:124). ⌘K and ? work. useCrudShortcuts / useKeyboardShortcuts (packages/react/src/hooks/useKeyboardShortcuts.ts) has no caller.
Done when
The dialog lists exactly the shortcuts that are wired. It is derived from the registered handlers or kept beside them, never a separate static list.
Whether to wire the missing ones is not this card's question. A shortcut appears in the dialog only once its handler exists.
Pin: every shortcut the dialog lists has a handler that fires in a test.
Claim: PM loop round 1
Session: session_01FngvPpdrnhHMdHHq6vwwju
Account: os-justin
Branch: claude/issue-11674-shortcuts-dialog-wired-only
Worktree: objectui-issue-11674
Domain: domain:ui
Seat: domain:ui#2
File surface: packages/app-shell/src/chrome/KeyboardShortcutsDialog.tsx (the static list, about :40–:71), the app-shell modules that register the shortcuts it may list (read; edited only to expose what the dialog derives from), packages/i18n/src/locales/*.ts (console.shortcuts.* keys only, if a listed entry's copy changes or retires), the tests beside them, and .changeset/11674-*.md; packages/components/src/ui/sidebar.tsx is a synced Shadcn primitive and is read, ⛔ not edited (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 blocking. No open PR (objectui#11700, #11702, #11703, #11069) touches KeyboardShortcutsDialog.tsx. This seat's objectui#11692 holds other app-shell files (studio-design/PackageOwdOverviewPanel.tsx, services/MetadataService.ts). objectui#11676, in the merge queue, adds one timeline.bucket.* key to the locale packs; those files are not in SINGLE_CLAIM_PATHS, so that is ordinary concurrency. Read 2026-10-06T07:31Z.
Why Clause-②: no: the dialog stops listing shortcuts no handler backs. No accept set widens, and no export is expected. If retiring entries retires published console.shortcuts.* locale keys, the line becomes no (narrowing) and the changeset spells out the break. If deriving the list needs a new export, the dev reports it with the built-declaration reading, and the seat amends this line before any review.
os-dev-report
{
"issue": 11674,
"status": "done",
"branch": "claude/issue-11674-shortcuts-dialog-wired-only",
"pr": "#11708",
"session": "session_01FngvPpdrnhHMdHHq6vwwju (subagent: parent's id, as given in the dispatch)",
"premise_still_valid": true,
"summary": "On origin/main c3623eb the dialog was a static list. N, R, Cmd/Ctrl+E, Cmd/Ctrl+/ and Cmd/Ctrl+D had no handler anywhere. The sidebar row said B, but the Shadcn SidebarProvider listener answers b only with Cmd or Ctrl. The AI pair (Cmd+Shift+O / Cmd+Shift+S) is handled only by AiChatPage, which never mounts where the dialog mounts (AppContent). Cmd+K, ? and Esc were wired. A new module store, packages/app-shell/src/chrome/advertisedShortcuts.ts, lets each handler's owner advertise its shortcut beside the handler for as long as the handler is mounted (useAdvertiseShortcut). KeyboardShortcutsDialog now renders only what is advertised, and keeps no list of its own. Advertisers: the dialog (? and Esc), CommandPaletteProvider (Cmd+K), ConsoleLayout's inner component inside SidebarProvider (Cmd+B, the real chord; sidebar.tsx not edited) and AiChatPage (its two chords). Inside an app the dialog lists Cmd+K, ?, Esc and Cmd+B. The 7 console.shortcuts keys that only the dead rows read are removed from all ten packs, so the Clause-2 line is 'no (narrowing)'. The changeset is minor/minor, with the key removal spelled out as BREAKING. The pin fires every listed row's advertised chord against its real handler, with Cmd and again with Ctrl. Draft PR #11708 is open, assigned to os-justin. CI was in_progress when this report was posted.",
"tests": "At HEAD 05c1f48 (verify lock, VERDICT command-exit 0): pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/chrome/ packages/app-shell/src/layout/ packages/app-shell/src/context/ packages/app-shell/src/console/tests/ packages/app-shell/src/console/ai/tests/ → 'Test Files 193 passed (193)', 'Tests 2096 passed | 13 skipped (2109)'. The same set at 96a042d was also 193/193. The new pin is KeyboardShortcutsDialog.wiredOnly-11674.test.tsx, 5 tests. It mounts the real ConsoleLayout, AppShell, SidebarProvider and CommandPaletteProvider with the dialog at ?shortcuts=1. The listed rows must equal the advertisements (keycaps included) and the probe table. For each row it fires that row's chord with Cmd and again with Ctrl on a fresh mount and checks the handler's effect. It also checks that the list is derived from mounted advertisers, that the AI chords match matchAiChatShortcut, and (control) that a bare b does not toggle. Ablations, from committed HEAD 05c1f48, run unlocked as single files (declared): (B) ablation-replace set the sidebar chord to a bare b. Anchor went 1→0, blob de7e99c048be→93c37705f9e4. Result 'Tests 1 failed | 4 passed (5)': data-sidebar-open stayed true. Restored: blob == HEAD, git diff HEAD empty. (A) KeyboardShortcutsDialog.tsx was replaced with its c3623eb bytes (createRecord marker 1, useAdvertiseShortcut 0, blob ad882b0dc950). Result 'Tests 2 failed | 3 passed (5)'. Restored by trap to blob == HEAD f766b2845931. (i18n probe) The sidebar descriptor label key was renamed; check:i18n-keys exited 1 with [missing-key] console.shortcuts.toggleSidebarProbe at ConsoleLayout.tsx. Restored: blob == HEAD. Type-check: closure build (pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build) exit 0, then app-shell type-check exit 0 (tsconfig.test.json --listFilesOnly includes the pin) and i18n type-check exit 0, at 05c1f48 under the lock.",
"gates": [
{
"cmd": "pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/chrome/ packages/app-shell/src/layout/ packages/app-shell/src/context/ packages/app-shell/src/console/tests/ packages/app-shell/src/console/ai/tests/ (os-verify-lock)",
"exit": 0,
"head": "05c1f48",
"reading": "193 files passed, 2096 tests passed, 13 skipped"
},
{
"cmd": "pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm --filter @object-ui/app-shell type-check (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm --filter @object-ui/i18n type-check (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "eslint --format json over the 6 changed app-shell files",
"exit": 0,
"head": "05c1f48",
"reading": "0 errors, 38 warnings. The same 4 modified files had 36 at c3623eb (via --stdin). The +2 are react-refresh/only-export-components on the two exported AiChatPage descriptors"
},
{
"cmd": "eslint --format json over the 12 changed i18n files",
"exit": 0,
"head": "05c1f48",
"reading": "0 errors, 0 warnings"
},
{
"cmd": "pnpm check:i18n-keys",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:i18n-drift",
"exit": 0,
"head": "05c1f48",
"reading": "0 en values changed, 7 keys removed"
},
{
"cmd": "pnpm check:i18n-dead-keys",
"exit": 0,
"head": "05c1f48",
"reading": "report-only; 0 console.shortcuts.* candidates; pack keys 3273 (merge-base 3280)"
},
{
"cmd": "pnpm check:i18n-designer-parity",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:control-bytes",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:new-line-citations",
"exit": 0,
"head": "05c1f48",
"reading": "0 new citations"
},
{
"cmd": "pnpm check:vi-mock-specifiers",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:vi-mock-inherit",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:vi-mock-override-shape",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:unreferenced-sources",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:test-path-roots",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:changeset-claims",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:pending-changeset-literals",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"head": "05c1f48",
"reading": "18 source files of 2 released packages, 1 changeset"
},
{
"cmd": "node scripts/check-changeset-fixed.mjs",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:readme-exports",
"exit": "NOT MEASURED",
"head": "05c1f48",
"reading": "exit 1 = PREREQUISITE: it needs every package's dist. No export moved, and the new README section has no fenced import"
},
{
"cmd": "pnpm check:eager-locale-catalogues",
"exit": "NOT MEASURED",
"head": "05c1f48",
"reading": "exit 2 = PREREQUISITE: it needs apps/console/dist/eager-closure.json"
},
{
"cmd": "CI on PR #11708",
"exit": "in_progress",
"head": "05c1f48",
"reading": "at report time: 20 success, 19 in_progress, 3 skipped of 42 check runs"
}
],
"line_budget": "n/a: no skills/** or governed ledger touched. Branch diff c3623eb..05c1f48: 20 files, +600 / -128.",
"files_changed": [
".changeset/11674-shortcuts-dialog-wired-only.md",
"packages/app-shell/README.md",
"packages/app-shell/src/chrome/advertisedShortcuts.ts (new)",
"packages/app-shell/src/chrome/KeyboardShortcutsDialog.tsx",
"packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx (new)",
"packages/app-shell/src/context/CommandPaletteProvider.tsx",
"packages/app-shell/src/layout/ConsoleLayout.tsx",
"packages/app-shell/src/console/ai/AiChatPage.tsx",
"packages/i18n/src/locales/{en,ar,de,es,fr,ja,ko,pt,ru,zh}.ts (7 console.shortcuts keys removed from each)",
"packages/i18n/src/tests/console-namespace-3546.test.tsx (comment only)",
"packages/i18n/src/tests/marketplace-preview-namespace-3546.test.tsx (comment only)"
],
"deviations": [
"Lock narrowing, declared. The verify lock was held about 26 min by a sibling's full app-shell suite (issue-11692), and two acquisitions returned 99. During that time the single pin file (--maxWorkers=1), its first iterations and the three one-off ablations ran unlocked. Every final gate run in the table went through the lock.",
"Clause-2 line. The PR body carries 'Clause-②: no (narrowing)', not the claim's verbatim 'Clause-②: no'. The claim itself prescribed that form for the case where published console.shortcuts.* keys retire, which happened (7 keys).",
"Surface. The two i18n test files changed in comments only: each cited the retired key console.shortcuts.toggleDarkMode, and one also carried a stale ё count, now dropped. packages/app-shell/README.md gained a section per AGENTS.md #2. Both sit outside the claim's literal file list. sidebar.tsx was read, not edited.",
"Scope reading of 'lists exactly the shortcuts that are wired'. This PR guarantees that no listed row is unwired, and advertises the chrome-layer handlers that owned the old list. The wired Cmd+Shift+I dock toggle is NOT advertised: a row needs a new locale key, which would widen beyond the claim's Clause-2 line. Page-scoped wired shortcuts are not advertised either. Both are in the PR's Acceptance notes.",
"Attribution. Commits carry the model-free trailer pair (Claude-Session + 'Co-authored-by: Claude'), per objectui AGENTS.md and os-dev.md, instead of the harness reminder's model-named Co-Authored-By. The PR body ends with the os-dev session-URL footer, not the harness's two-line block.",
"Shared git state. A verification fetch wrote the private ref refs/issue-11674/remote-head into the shared .git (AGENTS.md's 'fetch into a ref you name' pattern). It was deleted at cleanup."
],
"mcp_calls": "0. No MCP GitHub tool was used.",
"api_writes": "3, each one repository_dispatch through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches), executed as objectstack-fleet[bot]: (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft, #11708); read-back showed 10383 bytes sent and stored, identical. (2) label-write --assign os-justin → POST /repos//issues/11708/assignees; read-back MATCHES. (3) this os-dev-report via post-stamped → POST /repos//issues/11674/comments. git push is not counted. Reads: REST GETs for the card, its comments, the PR and its check-runs.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted in the PR Acceptance notes, not filed. The Cmd+Shift+I chat-dock toggle in ConsoleLayout is wired but not advertised. A dialog row needs a new console.shortcuts key in ten packs, which is a widening. Not defect class a, b or c: no listed row lies. Dedupe words: chat dock shortcut, shortcuts dialog, Cmd+Shift+I.",
"carrier: 承接者:无 · noted, not filed. Page-scoped wired shortcuts are not advertised: QuickFind Cmd+Shift+M, the ResourceEditPage Cmd+S / Cmd+backslash / Esc fullscreen, the ApprovalsInbox list keys, the PerformanceDashboard Ctrl+Shift+P, and useDebugMode Ctrl+Shift+D. Discoverability, not a defect class.",
"carrier: 承接者:无 · noted, not filed. useKeyboardShortcuts, useCrudShortcuts and getShortcutDescriptions in @object-ui/react are published and have zero callers (dead code, excluded from filing).",
"carrier: 承接者:无 · noted, not filed (read-only inference, unmeasured). The SidebarProvider Cmd+B listener (a synced primitive) does not skip editable targets, so Cmd+B in a rich-text field may toggle the sidebar and preventDefault the bold."
]
}
Shape: draft, base main, first line Fixes #11674, and the body has no other closing keyword. 20 files: the dialog, the new chrome/advertisedShortcuts.ts, its three advertisers (CommandPaletteProvider, ConsoleLayout, AiChatPage), one new pin, the ten locale packs, two comment-only i18n test edits, the app-shell README and one changeset. sidebar.tsx, a synced Shadcn primitive, is untouched. No governed path. +600/−128.
Clause-②: the claim 6011573080 wrote no, and said it becomes no (narrowing) if published console.shortcuts.* keys retire. They do (7 keys, from all ten packs), so the PR's line Clause-②: no (narrowing) is the claim's own named case. The seat reads the card's declaration as no (narrowing).
No widening: packages/app-shell/src/index.ts is unchanged, so neither advertisedShortcuts.ts's exports nor the AI chat page's new descriptors reach the entry. index.ts names the AI chat page's exports one by one.
No contract-review face is touched: not yes, no spec path, no governed text.
Seat's own reading of the diff: each handler's owner advertises its shortcut beside the handler while it is mounted (useAdvertiseShortcut), and KeyboardShortcutsDialog lists only what is advertised. Inside an app that is ⌘K, ?, Esc and ⌘B, the sidebar's real chord. The AI pair is listed only where the AI chat page is mounted.
Changeset prose (@object-ui/app-shell and @object-ui/i18n, both minor), checked sentence by sentence against the diff:
The "six rows did nothing" paragraph matches the card and the dev's probe.
The app-shell paragraph matches the advertisers and the listed rows. Its sentence on a host mounting the dialog outside the console layout states the behaviour change of an exported component.
The i18n BREAKING paragraph names exactly the 7 keys removed from en.ts.
Tests: a 5-test pin that mounts the real ConsoleLayout, AppShell, SidebarProvider and CommandPaletteProvider, fires every listed row's chord with Cmd and with Ctrl against its real handler, and has a bare-b control. Two ablations (a bare-b sidebar chord; the old dialog bytes), each red as predicted and restored by blob. One i18n key probe. 193 test files passed under the lock.
Out-of-scope findings (4), all Acceptance notes, none filed:
the wired ⌘⇧I dock toggle is not advertised (it would need a new key);
page-scoped shortcuts are not advertised (discoverability);
useKeyboardShortcuts / useCrudShortcuts have zero callers (dead code);
⌘B inside a rich-text field (a read-only inference, unmeasured).
Landing: ready and auto-merge once every check on this head is green.
The merge. Squash de96f3d went through the merge queue, with one parent, eb4552e. It is an ancestor of origin/main. 20 files, +600/−128, the same as the PR.
Closures.Fixes #11674 closed this card as completed at the merge. The only other issue closed in the landing window was objectui#4425, by its own PR. pm:dispatched comes off in this stroke.
Activity
objectstack-fleet commentedon Oct 6, 2026
Claim: PM loop round 1
Session:
session_01FngvPpdrnhHMdHHq6vwwjuAccount:
os-justinBranch:
claude/issue-11674-shortcuts-dialog-wired-onlyWorktree:
objectui-issue-11674Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/app-shell/src/chrome/KeyboardShortcutsDialog.tsx(the static list, about:40–:71), the app-shell modules that register the shortcuts it may list (read; edited only to expose what the dialog derives from),packages/i18n/src/locales/*.ts(console.shortcuts.*keys only, if a listed entry's copy changes or retires), the tests beside them, and.changeset/11674-*.md;packages/components/src/ui/sidebar.tsxis a synced Shadcn primitive and is read, ⛔ not edited (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:
noneblocking. No open PR (objectui#11700, #11702, #11703, #11069) touchesKeyboardShortcutsDialog.tsx. This seat's objectui#11692 holds otherapp-shellfiles (studio-design/PackageOwdOverviewPanel.tsx,services/MetadataService.ts). objectui#11676, in the merge queue, adds onetimeline.bucket.*key to the locale packs; those files are not inSINGLE_CLAIM_PATHS, so that is ordinary concurrency. Read 2026-10-06T07:31Z.Why
Clause-②: no: the dialog stops listing shortcuts no handler backs. No accept set widens, and no export is expected. If retiring entries retires publishedconsole.shortcuts.*locale keys, the line becomesno (narrowing)and the changeset spells out the break. If deriving the list needs a new export, the dev reports it with the built-declaration reading, and the seat amends this line before any review.Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
os-dev-report
{
"issue": 11674,
"status": "done",
"branch": "claude/issue-11674-shortcuts-dialog-wired-only",
"pr": "#11708",
"session": "session_01FngvPpdrnhHMdHHq6vwwju (subagent: parent's id, as given in the dispatch)",
"premise_still_valid": true,
"summary": "On origin/main c3623eb the dialog was a static list. N, R, Cmd/Ctrl+E, Cmd/Ctrl+/ and Cmd/Ctrl+D had no handler anywhere. The sidebar row said B, but the Shadcn SidebarProvider listener answers b only with Cmd or Ctrl. The AI pair (Cmd+Shift+O / Cmd+Shift+S) is handled only by AiChatPage, which never mounts where the dialog mounts (AppContent). Cmd+K, ? and Esc were wired. A new module store, packages/app-shell/src/chrome/advertisedShortcuts.ts, lets each handler's owner advertise its shortcut beside the handler for as long as the handler is mounted (useAdvertiseShortcut). KeyboardShortcutsDialog now renders only what is advertised, and keeps no list of its own. Advertisers: the dialog (? and Esc), CommandPaletteProvider (Cmd+K), ConsoleLayout's inner component inside SidebarProvider (Cmd+B, the real chord; sidebar.tsx not edited) and AiChatPage (its two chords). Inside an app the dialog lists Cmd+K, ?, Esc and Cmd+B. The 7 console.shortcuts keys that only the dead rows read are removed from all ten packs, so the Clause-2 line is 'no (narrowing)'. The changeset is minor/minor, with the key removal spelled out as BREAKING. The pin fires every listed row's advertised chord against its real handler, with Cmd and again with Ctrl. Draft PR #11708 is open, assigned to os-justin. CI was in_progress when this report was posted.",
"tests": "At HEAD 05c1f48 (verify lock, VERDICT command-exit 0): pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/chrome/ packages/app-shell/src/layout/ packages/app-shell/src/context/ packages/app-shell/src/console/tests/ packages/app-shell/src/console/ai/tests/ → 'Test Files 193 passed (193)', 'Tests 2096 passed | 13 skipped (2109)'. The same set at 96a042d was also 193/193. The new pin is KeyboardShortcutsDialog.wiredOnly-11674.test.tsx, 5 tests. It mounts the real ConsoleLayout, AppShell, SidebarProvider and CommandPaletteProvider with the dialog at ?shortcuts=1. The listed rows must equal the advertisements (keycaps included) and the probe table. For each row it fires that row's chord with Cmd and again with Ctrl on a fresh mount and checks the handler's effect. It also checks that the list is derived from mounted advertisers, that the AI chords match matchAiChatShortcut, and (control) that a bare b does not toggle. Ablations, from committed HEAD 05c1f48, run unlocked as single files (declared): (B) ablation-replace set the sidebar chord to a bare b. Anchor went 1→0, blob de7e99c048be→93c37705f9e4. Result 'Tests 1 failed | 4 passed (5)': data-sidebar-open stayed true. Restored: blob == HEAD, git diff HEAD empty. (A) KeyboardShortcutsDialog.tsx was replaced with its c3623eb bytes (createRecord marker 1, useAdvertiseShortcut 0, blob ad882b0dc950). Result 'Tests 2 failed | 3 passed (5)'. Restored by trap to blob == HEAD f766b2845931. (i18n probe) The sidebar descriptor label key was renamed; check:i18n-keys exited 1 with [missing-key] console.shortcuts.toggleSidebarProbe at ConsoleLayout.tsx. Restored: blob == HEAD. Type-check: closure build (pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build) exit 0, then app-shell type-check exit 0 (tsconfig.test.json --listFilesOnly includes the pin) and i18n type-check exit 0, at 05c1f48 under the lock.",
"gates": [
{
"cmd": "pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/chrome/ packages/app-shell/src/layout/ packages/app-shell/src/context/ packages/app-shell/src/console/tests/ packages/app-shell/src/console/ai/tests/ (os-verify-lock)",
"exit": 0,
"head": "05c1f48",
"reading": "193 files passed, 2096 tests passed, 13 skipped"
},
{
"cmd": "pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' build (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm --filter @object-ui/app-shell type-check (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm --filter @object-ui/i18n type-check (os-verify-lock)",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "eslint --format json over the 6 changed app-shell files",
"exit": 0,
"head": "05c1f48",
"reading": "0 errors, 38 warnings. The same 4 modified files had 36 at c3623eb (via --stdin). The +2 are react-refresh/only-export-components on the two exported AiChatPage descriptors"
},
{
"cmd": "eslint --format json over the 12 changed i18n files",
"exit": 0,
"head": "05c1f48",
"reading": "0 errors, 0 warnings"
},
{
"cmd": "pnpm check:i18n-keys",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:i18n-drift",
"exit": 0,
"head": "05c1f48",
"reading": "0 en values changed, 7 keys removed"
},
{
"cmd": "pnpm check:i18n-dead-keys",
"exit": 0,
"head": "05c1f48",
"reading": "report-only; 0 console.shortcuts.* candidates; pack keys 3273 (merge-base 3280)"
},
{
"cmd": "pnpm check:i18n-designer-parity",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:control-bytes",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:new-line-citations",
"exit": 0,
"head": "05c1f48",
"reading": "0 new citations"
},
{
"cmd": "pnpm check:vi-mock-specifiers",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:vi-mock-inherit",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:vi-mock-override-shape",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:unreferenced-sources",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:test-path-roots",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:changeset-claims",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:pending-changeset-literals",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"head": "05c1f48",
"reading": "18 source files of 2 released packages, 1 changeset"
},
{
"cmd": "node scripts/check-changeset-fixed.mjs",
"exit": 0,
"head": "05c1f48"
},
{
"cmd": "pnpm check:readme-exports",
"exit": "NOT MEASURED",
"head": "05c1f48",
"reading": "exit 1 = PREREQUISITE: it needs every package's dist. No export moved, and the new README section has no fenced import"
},
{
"cmd": "pnpm check:eager-locale-catalogues",
"exit": "NOT MEASURED",
"head": "05c1f48",
"reading": "exit 2 = PREREQUISITE: it needs apps/console/dist/eager-closure.json"
},
{
"cmd": "CI on PR #11708",
"exit": "in_progress",
"head": "05c1f48",
"reading": "at report time: 20 success, 19 in_progress, 3 skipped of 42 check runs"
}
],
"line_budget": "n/a: no skills/** or governed ledger touched. Branch diff c3623eb..05c1f48: 20 files, +600 / -128.",
"files_changed": [
".changeset/11674-shortcuts-dialog-wired-only.md",
"packages/app-shell/README.md",
"packages/app-shell/src/chrome/advertisedShortcuts.ts (new)",
"packages/app-shell/src/chrome/KeyboardShortcutsDialog.tsx",
"packages/app-shell/src/chrome/KeyboardShortcutsDialog.wiredOnly-11674.test.tsx (new)",
"packages/app-shell/src/context/CommandPaletteProvider.tsx",
"packages/app-shell/src/layout/ConsoleLayout.tsx",
"packages/app-shell/src/console/ai/AiChatPage.tsx",
"packages/i18n/src/locales/{en,ar,de,es,fr,ja,ko,pt,ru,zh}.ts (7 console.shortcuts keys removed from each)",
"packages/i18n/src/tests/console-namespace-3546.test.tsx (comment only)",
"packages/i18n/src/tests/marketplace-preview-namespace-3546.test.tsx (comment only)"
],
"deviations": [
"Lock narrowing, declared. The verify lock was held about 26 min by a sibling's full app-shell suite (issue-11692), and two acquisitions returned 99. During that time the single pin file (--maxWorkers=1), its first iterations and the three one-off ablations ran unlocked. Every final gate run in the table went through the lock.",
"Clause-2 line. The PR body carries 'Clause-②: no (narrowing)', not the claim's verbatim 'Clause-②: no'. The claim itself prescribed that form for the case where published console.shortcuts.* keys retire, which happened (7 keys).",
"Surface. The two i18n test files changed in comments only: each cited the retired key console.shortcuts.toggleDarkMode, and one also carried a stale ё count, now dropped. packages/app-shell/README.md gained a section per AGENTS.md #2. Both sit outside the claim's literal file list. sidebar.tsx was read, not edited.",
"Scope reading of 'lists exactly the shortcuts that are wired'. This PR guarantees that no listed row is unwired, and advertises the chrome-layer handlers that owned the old list. The wired Cmd+Shift+I dock toggle is NOT advertised: a row needs a new locale key, which would widen beyond the claim's Clause-2 line. Page-scoped wired shortcuts are not advertised either. Both are in the PR's Acceptance notes.",
"Attribution. Commits carry the model-free trailer pair (Claude-Session + 'Co-authored-by: Claude'), per objectui AGENTS.md and os-dev.md, instead of the harness reminder's model-named Co-Authored-By. The PR body ends with the os-dev session-URL footer, not the harness's two-line block.",
"Shared git state. A verification fetch wrote the private ref refs/issue-11674/remote-head into the shared .git (AGENTS.md's 'fetch into a ref you name' pattern). It was deleted at cleanup."
],
"mcp_calls": "0. No MCP GitHub tool was used.",
"api_writes": "3, each one repository_dispatch through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches), executed as objectstack-fleet[bot]: (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft, #11708); read-back showed 10383 bytes sent and stored, identical. (2) label-write --assign os-justin → POST /repos//issues/11708/assignees; read-back MATCHES. (3) this os-dev-report via post-stamped → POST /repos//issues/11674/comments. git push is not counted. Reads: REST GETs for the card, its comments, the PR and its check-runs.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted in the PR Acceptance notes, not filed. The Cmd+Shift+I chat-dock toggle in ConsoleLayout is wired but not advertised. A dialog row needs a new console.shortcuts key in ten packs, which is a widening. Not defect class a, b or c: no listed row lies. Dedupe words: chat dock shortcut, shortcuts dialog, Cmd+Shift+I.",
"carrier: 承接者:无 · noted, not filed. Page-scoped wired shortcuts are not advertised: QuickFind Cmd+Shift+M, the ResourceEditPage Cmd+S / Cmd+backslash / Esc fullscreen, the ApprovalsInbox list keys, the PerformanceDashboard Ctrl+Shift+P, and useDebugMode Ctrl+Shift+D. Discoverability, not a defect class.",
"carrier: 承接者:无 · noted, not filed. useKeyboardShortcuts, useCrudShortcuts and getShortcutDescriptions in @object-ui/react are published and have zero callers (dead code, excluded from filing).",
"carrier: 承接者:无 · noted, not filed (read-only inference, unmeasured). The SidebarProvider Cmd+B listener (a synced primitive) does not skip editable targets, so Cmd+B in a rich-text field may toggle the sidebar and preventDefault the bold."
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
ACCEPT: PR objectui#11708 at
05c1f48(Fixes #11674)domain:uiexecution seat 2 ·session_01FngvPpdrnhHMdHHq6vwwju(os-justin) · 2026-10-06T08:56Z. Dev report:6012808874.main, first lineFixes #11674, and the body has no other closing keyword. 20 files: the dialog, the newchrome/advertisedShortcuts.ts, its three advertisers (CommandPaletteProvider,ConsoleLayout,AiChatPage), one new pin, the ten locale packs, two comment-only i18n test edits, theapp-shellREADME and one changeset.sidebar.tsx, a synced Shadcn primitive, is untouched. No governed path. +600/−128.Clause-②: the claim6011573080wroteno, and said it becomesno (narrowing)if publishedconsole.shortcuts.*keys retire. They do (7 keys, from all ten packs), so the PR's lineClause-②: no (narrowing)is the claim's own named case. The seat reads the card's declaration asno (narrowing).packages/app-shell/src/index.tsis unchanged, so neitheradvertisedShortcuts.ts's exports nor the AI chat page's new descriptors reach the entry.index.tsnames the AI chat page's exports one by one.yes, no spec path, no governed text.useAdvertiseShortcut), andKeyboardShortcutsDialoglists only what is advertised. Inside an app that is⌘K,?,Escand⌘B, the sidebar's real chord. The AI pair is listed only where the AI chat page is mounted.@object-ui/app-shelland@object-ui/i18n, bothminor), checked sentence by sentence against the diff:app-shellparagraph matches the advertisers and the listed rows. Its sentence on a host mounting the dialog outside the console layout states the behaviour change of an exported component.i18nBREAKING paragraph names exactly the 7 keys removed fromen.ts.ConsoleLayout,AppShell,SidebarProviderandCommandPaletteProvider, fires every listed row's chord with Cmd and with Ctrl against its real handler, and has a bare-bcontrol. Two ablations (a bare-bsidebar chord; the old dialog bytes), each red as predicted and restored by blob. One i18n key probe. 193 test files passed under the lock.⌘⇧Idock toggle is not advertised (it would need a new key);useKeyboardShortcuts/useCrudShortcutshave zero callers (dead code);⌘Binside a rich-text field (a read-only inference, unmeasured).Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
Landed: PR objectui#11708 →
mainde96f3d, verified by content.Fixesclosed this carddomain:uiexecution seat 2 ·session_01FngvPpdrnhHMdHHq6vwwju(os-justin) · 2026-10-06T09:26Z.The merge. Squash
de96f3dwent through the merge queue, with one parent,eb4552e. It is an ancestor oforigin/main. 20 files, +600/−128, the same as the PR.Content check against the first parent:
eb4552ede96f3dpackages/app-shell/src/chrome/advertisedShortcuts.tspresentuseAdvertisedShortcutsinKeyboardShortcutsDialog.tsxuseAdvertiseShortcutinConsoleLayout.tsx(the sidebar's real chord)createRecord: 'Create new record'inpackages/i18n/src/locales/en.tsKeyboardShortcutsDialog.wiredOnly-11674.test.tsxpresentClosures.
Fixes #11674closed this card as completed at the merge. The only other issue closed in the landing window was objectui#4425, by its own PR.pm:dispatchedcomes off in this stroke.Generated by Claude Code
fix(app-shell,i18n): the keyboard-shortcuts dialog lists only shortcu…