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
record page: the read-only field copy button is a Tab stop that stays invisible (hover-only reveal), like the inline-edit pencil before #25883 #26329
Filing class: ① a user-visible defect (class a, public door: any record page in desktop read mode). It was found by the #25883 item 1 developer (os-dev-report 6427401124 on #25883) and is outside that claim's file surface.
What
In ui/packages/plugin-detail/src/DetailSection.tsx, the copy-to-clipboard button on a read-only, copyable field (around :772 on main) has opacity-0 group-hover:opacity-100 and nothing else. It is a real, focusable button, so a keyboard user's Tab stop lands on a control they cannot see. The inline-edit pencil a few lines up had the same defect; PR #26325 (Part of #25883) fixes it by adding group-focus-within:opacity-100 focus-visible:opacity-100, the classes RowActionMenu and data-table already use.
Expected
The copy button is revealed on keyboard focus as well as on hover, in the same way. Pin it the way #26325 pins the pencil (focusable, carries the focus-reveal classes, its .group is its own field), since jsdom has no layout.
The pencil's aria-label and tooltip read "Double-click to edit", which does not match keyboard activation. Fixing that needs a new key in every locale pack.
On touch screens neither control is ever revealed (pointer-coarse:opacity-100). That belongs with the mobile read row's edit path.
Claim: PM loop round 9 · 2026-10-27T04:19Z
Session: session_01SMps7wq7rBTk53e8KTSEup
Account: os-steve
Branch: claude/issue-26329-copy-focus-reveal
Worktree: objectstack-issue-26329
Domain: domain:ui
Seat: domain:ui#2
File surface: ui/packages/plugin-detail/src/DetailSection.tsx (the copy button's className only), a new pin beside the #25883 pin in ui/packages/plugin-detail/src/__tests__/, root .changeset/. ⛔ the pencil (done in #26325), HeaderHighlight.tsx, locale packs, ui/.github/**, root ci.yml.
Container & model: M, mode:subagent, model: default tier, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: a keyboard user tabbing through a record's read-only fields | DetailSection copy affordance (no spec key) | every record page in desktop read mode
Thread-read: none
Premise: holds 2026-10-27T04:19Z at origin/main6746140361: the copy button in DetailSection.tsx carries opacity-0 group-hover:opacity-100 with no focus reveal, while the pencil beside it now has group-focus-within:opacity-100 focus-visible:opacity-100 (#26325).
Serial constraints cleared: #25883 item 1 (PR #26325, same file) MERGED 2026-10-27T03:41Z. No open PR touches DetailSection.tsx. #25883 item 2 is back in the queue and is held behind this card on the same file.
Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.
Seat's route: add group-focus-within:opacity-100 focus-visible:opacity-100 to the copy button, exactly as fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325 did for the pencil. Pin it the same way: it is focusable, it carries the focus-reveal classes beside the unchanged hover reveal, and its nearest .group is its own field. Red first. Fixes #26329.
{
"issue": 26329,
"status": "done",
"branch": "claude/issue-26329-copy-focus-reveal",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26487",
"head": "2f49b3e0edce2d0950081519c3a6adfa03b3cfe6",
"session": "session_01SMps7wq7rBTk53e8KTSEup",
"premise_still_valid": true,
"summary": "The read-mode copy-to-clipboard button in ui/packages/plugin-detail/src/DetailSection.tsx (copyOffered branch, ~:775) now carries group-focus-within:opacity-100 focus-visible:opacity-100 beside the unchanged opacity-0 group-hover:opacity-100, the same spelling PR #26325 gave the pencil. Premise held at base 6746140361: the copy button had the hover reveal only. A new pin, copyButton.focusReveal-26329.test.tsx (4 tests), was committed red first. Patch changeset for @object-ui/plugin-detail. Draft PR opened via the relay op pr_create, assignee os-steve, no labels.",
"tests": "Red at df130cf0 (pin only): `Tests 1 failed | 3 passed (4)`, failing at the focus-visible:opacity-100 assertion after focusability and hover asserts passed. Green at 2f49b3e0 under os-verify-lock from ui/: `pnpm exec vitest run packages/plugin-detail --maxWorkers=2` gives Test Files 307 passed | 1 skipped (308), Tests 2857 passed | 18 skipped (2875); new file alone Tests 4 passed (4); `pnpm --filter @object-ui/plugin-detail run type-check` (tsc --noEmit and tsc -p tsconfig.test.json) exit 0; lock VERDICT command-exit 0. Closure built first: `pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-detail^...' build`, VERDICT command-exit 0. No ablation beyond the red-first run: the diff is a className and the red run is the mutation leg (fix absent).",
"gates": "Derived at 2f49b3e0 with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`: 34 commands, all run locally, each exit 0 captured before any pipe, including node scripts/check-sdui-manifest.mjs (+ --self-test), pnpm check:nul-bytes, check:cross-package-test-inputs, check:test-source-alias, check:type-check-coverage, check:type-check-debt (re-measure under the lock, 0 raw tsc errors), `pnpm --dir ui exec vitest run scripts/` (Tests 5097 passed | 2 skipped, under the lock), and the changeset gates. `--ran` with exit codes: 34 derived, 34 run, 0 NOT-MEASURED (a DERIVED zero), 0 UNRUN, exit 0. CI families (lint, type-check lanes, Build and E2E UI): in_progress at report time, not re-run locally.",
"dogfood_battery": "n/a — no ! in the PR title and Clause-②: no has no (narrowing) arm",
"line_budget": "165 changed lines (+164 / -1) across 3 files, under the 3000 human-merge threshold",
"files_changed": [
"ui/packages/plugin-detail/src/DetailSection.tsx",
"ui/packages/plugin-detail/src/__tests__/copyButton.focusReveal-26329.test.tsx",
".changeset/26329-copy-button-focus-reveal.md"
],
"deviations": [
"The first local commit carried the harness's model-named Co-Authored-By trailer; it was amended to the model-free pair (Claude-Session + Co-authored-by: Claude) before any push, so no landed commit carries it.",
"test:repo not run locally: the diff touches no repo-project test and the derived list does not name it; Test Core in CI covers it."
],
"mcp_calls": "0",
"api_writes": "2 relay strokes: (1) pr_create gives POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/26487/assignees, run 40452625752, body read back byte-identical (5637 bytes); (2) this os-dev-report comment gives POST /repos/objectstack-ai/objectstack/issues/26329/comments via post-stamped.mjs. git push (3) not counted as REST writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: #25883 · the pencil tooltip/aria text 'Double-click to edit' does not describe keyboard activation; needs a new key in every locale pack · noted, not filed",
"carrier: none (承接者:无) · neither the copy button nor the pencil is revealed on a coarse pointer (no pointer-coarse:opacity-100); belongs with the mobile read row's edit path · Acceptance notes only"
]
}
Status: the read-only copy button on a record page is revealed on keyboard focus as well as hover, like the inline-edit pencil beside it. pm:dispatched removed.
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: audit line · triage seat ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T01:59Z⛔ Not a claim, ⛔ not a dispatch. This card was in
pm:queuewithout its own triage line, which keeps execution seats from claiming it (#26387).ui/packages/plugin-detail/src/DetailSection.tsx+ a pin; rationale: p3, the copy button's twin of fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325's pencil fix: the same focus-reveal classes, pinned the same way. Same file as fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325, so claim it after fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325 lands (the landing line in the body).Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 9 · 2026-10-27T04:19Z
Session:
session_01SMps7wq7rBTk53e8KTSEupAccount:
os-steveBranch:
claude/issue-26329-copy-focus-revealWorktree:
objectstack-issue-26329Domain:
domain:uiSeat:
domain:ui#2File surface:
ui/packages/plugin-detail/src/DetailSection.tsx(the copy button's className only), a new pin beside the #25883 pin inui/packages/plugin-detail/src/__tests__/, root.changeset/. ⛔ the pencil (done in #26325),HeaderHighlight.tsx, locale packs,ui/.github/**, rootci.yml.Container & model:
M,mode:subagent,model: default tier,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
a keyboard user tabbing through a record's read-only fields|DetailSection copy affordance (no spec key)|every record page in desktop read modeThread-read: none
Premise: holds 2026-10-27T04:19Z at
origin/main6746140361: the copy button inDetailSection.tsxcarriesopacity-0 group-hover:opacity-100with no focus reveal, while the pencil beside it now hasgroup-focus-within:opacity-100 focus-visible:opacity-100(#26325).Serial constraints cleared: #25883 item 1 (PR #26325, same file) MERGED 2026-10-27T03:41Z. No open PR touches
DetailSection.tsx. #25883 item 2 is back in the queue and is held behind this card on the same file.Writes: PR only via the relay op
pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.group-focus-within:opacity-100 focus-visible:opacity-100to the copy button, exactly as fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325 did for the pencil. Pin it the same way: it is focusable, it carries the focus-reveal classes beside the unchanged hover reveal, and its nearest.groupis its own field. Red first.Fixes #26329.objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26329, "status": "done", "branch": "claude/issue-26329-copy-focus-reveal", "pr": "https://github.com/objectstack-ai/objectstack/pull/26487", "head": "2f49b3e0edce2d0950081519c3a6adfa03b3cfe6", "session": "session_01SMps7wq7rBTk53e8KTSEup", "premise_still_valid": true, "summary": "The read-mode copy-to-clipboard button in ui/packages/plugin-detail/src/DetailSection.tsx (copyOffered branch, ~:775) now carries group-focus-within:opacity-100 focus-visible:opacity-100 beside the unchanged opacity-0 group-hover:opacity-100, the same spelling PR #26325 gave the pencil. Premise held at base 6746140361: the copy button had the hover reveal only. A new pin, copyButton.focusReveal-26329.test.tsx (4 tests), was committed red first. Patch changeset for @object-ui/plugin-detail. Draft PR opened via the relay op pr_create, assignee os-steve, no labels.", "tests": "Red at df130cf0 (pin only): `Tests 1 failed | 3 passed (4)`, failing at the focus-visible:opacity-100 assertion after focusability and hover asserts passed. Green at 2f49b3e0 under os-verify-lock from ui/: `pnpm exec vitest run packages/plugin-detail --maxWorkers=2` gives Test Files 307 passed | 1 skipped (308), Tests 2857 passed | 18 skipped (2875); new file alone Tests 4 passed (4); `pnpm --filter @object-ui/plugin-detail run type-check` (tsc --noEmit and tsc -p tsconfig.test.json) exit 0; lock VERDICT command-exit 0. Closure built first: `pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-detail^...' build`, VERDICT command-exit 0. No ablation beyond the red-first run: the diff is a className and the red run is the mutation leg (fix absent).", "gates": "Derived at 2f49b3e0 with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`: 34 commands, all run locally, each exit 0 captured before any pipe, including node scripts/check-sdui-manifest.mjs (+ --self-test), pnpm check:nul-bytes, check:cross-package-test-inputs, check:test-source-alias, check:type-check-coverage, check:type-check-debt (re-measure under the lock, 0 raw tsc errors), `pnpm --dir ui exec vitest run scripts/` (Tests 5097 passed | 2 skipped, under the lock), and the changeset gates. `--ran` with exit codes: 34 derived, 34 run, 0 NOT-MEASURED (a DERIVED zero), 0 UNRUN, exit 0. CI families (lint, type-check lanes, Build and E2E UI): in_progress at report time, not re-run locally.", "dogfood_battery": "n/a — no ! in the PR title and Clause-②: no has no (narrowing) arm", "line_budget": "165 changed lines (+164 / -1) across 3 files, under the 3000 human-merge threshold", "files_changed": [ "ui/packages/plugin-detail/src/DetailSection.tsx", "ui/packages/plugin-detail/src/__tests__/copyButton.focusReveal-26329.test.tsx", ".changeset/26329-copy-button-focus-reveal.md" ], "deviations": [ "The first local commit carried the harness's model-named Co-Authored-By trailer; it was amended to the model-free pair (Claude-Session + Co-authored-by: Claude) before any push, so no landed commit carries it.", "test:repo not run locally: the diff touches no repo-project test and the derived list does not name it; Test Core in CI covers it." ], "mcp_calls": "0", "api_writes": "2 relay strokes: (1) pr_create gives POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/26487/assignees, run 40452625752, body read back byte-identical (5637 bytes); (2) this os-dev-report comment gives POST /repos/objectstack-ai/objectstack/issues/26329/comments via post-stamped.mjs. git push (3) not counted as REST writes.", "open_questions": [], "out_of_scope_findings": [ "carrier: #25883 · the pencil tooltip/aria text 'Double-click to edit' does not describe keyboard activation; needs a new key in every locale pack · noted, not filed", "carrier: none (承接者:无) · neither the copy button nor the pencil is revealed on a coarse pointer (no pointer-coarse:opacity-100); belongs with the mobile read row's edit path · Acceptance notes only" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed · seat 2 · 2026-10-27T06:23Z
b53322d5, head2f49b3e0(+164/−1, seat record on #26487)origin/maingit merge-base --is-ancestorexit 0)gh-readonly-queue/main/pr-26487-*: none left (consumed)Fixes #26329on #26487Status: the read-only copy button on a record page is revealed on keyboard focus as well as hover, like the inline-edit pencil beside it.
pm:dispatchedremoved.