Skip to content

record page read mode: inline edit exists only as an invisible "双击编辑" affordance, and each section's "显示 N 个空字段" toggle is separate and forgets its state on reload #25883

Closed

Description

@os-steve

Filing gate ① a user-visible defect with a named landing site (two read-mode affordances on the same page; split if triage prefers). Batch-of: 2026-10-25 browser pass on @objectstack/* 18.1.0 (second batch, 8 cards). Filed by the maintainer's account (os-steve) from the HotCRM pass driven in session session_01AwpXhq2nFKU6J7GmbCEmZu; ⛔ not a claim. Grade and routing are objectui triage's.

What is seen (HotCRM on @objectstack/console 18.1.0)

  1. Inline edit is undiscoverable. On an account record the DOM carries a 双击编辑 button per field (the pass counted 11 on Acme Corporation), but nothing on screen says so: no pencil on hover, no hint in the section header, no cursor change. A user who wants to change the phone number opens 编辑 and the whole five-tab form. The one visible pencil is on the Markdown description (the rich-text widget draws its own). 50-account-tall.png.
  2. Empty-field toggles are per section and volatile. An opportunity page shows 「显示 2 个空字段」, 「显示 9 个空字段」, 「显示 5 个空字段」 in three sections; a user who wants to see the whole record clicks three times, and after a reload (or opening the next opportunity) all three are folded again. 51-opportunity-tall.png.

reach: the public UI, measured once as the dev admin; every record page shows both.

Expected

  • A visible inline-edit cue: a pencil on field hover (and focus), or a one-line hint under the tab bar the first time; the double-click stays.
  • One page-level 「显示空字段」 control (or the section toggles) remembered per user and object in the sys_user_preference ui.* keys the list page already uses (Gate the entry-nameability invariant across every public spec entry #12418).

Dedupe

MCP search_issues objectui "inline edit double click to edit has no visible affordance pencil hover on record details" → 24 hits, none about the affordance (#13292 save-bar label, objectstack-ai/objectui#12303 save feedback, objectstack-ai/objectui#12933, objectstack-ai/objectui#12642 …); "show N empty fields toggle per section resets on reload remember" → 4 hits (#12618, objectstack-ai/objectui#7064, objectstack-ai/objectui#8376, objectstack-ai/objectui#10291) about what counts as empty, not about remembering the toggle. Report: REPORT.md.

Activity

  1. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    bugSomething isn't working
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — bug · priority:p3 · domain:ui · area:records · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T14:56Z

    ⛔ Not a claim, ⛔ not a dispatch.

    • Make inline edit discoverable (a visible affordance on hover/focus), and remember the empty-field toggle per record type.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Transferred 2026-10-26T02:41Z from objectstack-ai/objectui#13534, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. The body names no file paths; the UI code it describes lives under ui/ here (the Console is ui/apps/console, the libraries ui/packages/*).

    References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#7064, objectstack-ai/objectui#8376, objectstack-ai/objectui#10291, objectstack-ai/objectui#12303, objectstack-ai/objectui#12418, objectstack-ai/objectui#12618, objectstack-ai/objectui#12642, objectstack-ai/objectui#12933, objectstack-ai/objectui#13292.

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Premise · domain:ui seat 2 · 2026-10-26T14:44Z · read at origin/main 365fe5e

    Verdict: corrected. Not claimed yet; stays pm:queue.

    1. "Inline edit is invisible" is mostly false on main for desktop read mode. ui/packages/plugin-detail/src/DetailSection.tsx already shows a hover pencil (:743-764, opacity-0 group-hover:opacity-100), a row hover background and cursor-pointer (:726), a title hint (:738) and double-click to edit (:729). The "双击编辑" the pass saw is the pencil's aria-label (detail.editInlineHint). The real gaps are smaller:
      • A keyboard tab stop lands on an invisible pencil, because there is no group-focus-within / focus-visible reveal.
      • The mobile read row (:654-672) has no inline-edit path at all.
      • The highlights strip (HeaderHighlight.tsx:371, :452) has the same hover-only pencil.
    2. "The empty-field toggle is forgotten" holds. showEmptyOverride (DetailSection.tsx:197) and EmptySectionsFold.tsx:86 revealed are plain useState. plugin-detail has no persistence seam, and app-shell has no ui.record.* key.

    Seat plan:

    Evidence: premise report at origin/main 365fe5e (the #25998 merge d98d3e2 touched only read-mode value rendering here).

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 5 · 2026-10-26T19:01Z · item 1 of 2 (Part of #25883)
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-25883-pencil-focus-reveal
    Worktree: objectstack-issue-25883
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/plugin-detail/src/DetailSection.tsx (the read-mode row's hover-only pencil) and ui/packages/plugin-detail/src/HeaderHighlight.tsx (the highlights strip's same pencil), tests beside them, root .changeset/, scripts/sdui-manifest.sources/plugin-detail.json (re-record under the lock). ⛔ DetailView.tsx, renderers/record-related-list.tsx (#26277), RecordActivityTimeline.tsx / recordActivityFeed.ts (#26055), locale packs (reuse detail.editInlineHint), the mobile read row's missing edit path, item 2 (the empty-toggle persistence), 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 onto an invisible inline-edit pencil | the record page's existing hover pencil and double-click edit | every keyboard or screen-magnifier user on a record page
    Thread-read: 6418926906
    Premise: corrected 2026-10-26T14:44Z, re-read at origin/main 2409c9c8d7. Desktop read mode already has a hover pencil, row hover, title hint and double-click edit. The gap for item 1 is that the pencil is opacity-0 group-hover:opacity-100 with no focus reveal, so a Tab stop lands on an invisible control, in DetailSection.tsx and in HeaderHighlight.tsx. Item 2 (remember the empty-field toggle) has an open storage-key choice and stays on the card.
    Serial constraints cleared: plugin-detail line #26053 ✓ → #26060 ✓ → #26055 → #26277 (seat 1, #26182) → this. Neither touches DetailSection.tsx or HeaderHighlight.tsx. This PR develops now and enqueues after #26277 merges.
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Ruling section: the seat's premise 6418926906 (item 1, S).
    • Seat's route:
      • The pencil shows on keyboard focus as well as on hover (group-focus-within / focus-visible), with a visible focus ring, in both places. The hover behaviour is unchanged.
      • Pin red-first: focusing the pencil makes it visible, hover still reveals it, and double-click still edits.
      • Part of #25883 (item 2 stays on the card).
  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report
    {
    "issue": 25883,
    "status": "done",
    "branch": "claude/issue-25883-pencil-focus-reveal",
    "pr": "#26325",
    "head": "76d5a63f2a2008d6275af354ead7fb8114f0329d",
    "session": "session_01SMps7wq7rBTk53e8KTSEup",
    "premise_still_valid": true,
    "summary": "Item 1 only (Part of #25883; item 2 stays on the card). The read-mode inline-edit pencil in DetailSection.tsx (details body) and HeaderHighlight.tsx (highlights strip) was opacity-0 group-hover:opacity-100, so a Tab stop landed on an invisible button. Both now also carry group-focus-within:opacity-100 focus-visible:opacity-100, the spelling RowActionMenu and data-table already use. The shared Button's focus-visible ring is now visible on it. Hover, the title hint, double-click, the accessible name and the locale packs are unchanged. Premise re-verified at origin/main 2409c9c: the pencil is focusable there and has no focus reveal (the red leg below). The card's assignee was os-steve and was not touched. The PR assignee mirrors it.",
    "files_changed": [
    "ui/packages/plugin-detail/src/DetailSection.tsx",
    "ui/packages/plugin-detail/src/HeaderHighlight.tsx",
    "ui/packages/plugin-detail/src/tests/inlineEditPencil.focusReveal-25883.test.tsx",
    ".changeset/25883-pencil-focus-reveal.md",
    "scripts/sdui-manifest.sources/plugin-detail.json"
    ],
    "line_budget": "228 changed lines (+225/-3) across 5 files, under the 3000 human-merge threshold (dispatch-gates count vs merge base)",
    "tests": "New test file inlineEditPencil.focusReveal-25883.test.tsx, 8 tests. jsdom has no layout or CSS engine, so it pins the focus-reveal contract rather than measuring visibility: the pencil is an enabled, focusable button; it carries focus-visible:opacity-100 and group-focus-within:opacity-100 beside the unchanged opacity-0 group-hover:opacity-100; focus-visible:ring-2 survives the className merge; its nearest .group is its own field. Activation, double-click and no pencil on computed or non-editable fields are behavioural. RED at base 2409c9c with the fix absent (cwd ui/, under os-verify-lock): Tests 2 failed | 6 passed (8), both at the focus-visible:opacity-100 assertion (DetailSection, HeaderHighlight). GREEN at head 76d5a63 (fix plus origin/main 6633075 merged): pnpm exec vitest run packages/plugin-detail --maxWorkers=2 gave Test Files 305 passed | 1 skipped (306), Tests 2833 passed | 18 skipped (2851). 306 equals the test files on disk, so the new file ran. The lock VERDICT was command-exit 0. The same counts were read at pre-merge head 55fe5e1. pnpm --filter @object-ui/plugin-detail run type-check (tsc --noEmit and tsc -p tsconfig.test.json) exited 0 at 76d5a63. Ablation: none; the new pins are class and behaviour assertions on source vitest resolves directly, and the red leg is the base-tree run.",
    "gates": "Local, at head 76d5a63, derived by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 45 commands. 44 ran, each exit 0, captured before any pipe; they include check-sdui-manifest.mjs, check:nul-bytes, check:cross-package-test-inputs, check:test-source-alias, check:type-check-coverage and the changeset gates. check:query-options-erasure first hit a 300s cap, then ran uncapped: exit 0. NOT-MEASURED: pnpm check:type-check-debt. Its re-measure queues on the shared verify lock for a closure build and then runs tsc over every package; it was still waiting at a 300s cap on a contended box, so it is left to CI Lint and Repo Gates. --ran reconciliation exit 0: 45 derived famil(ies) accounted for, 44 run, 1 NOT-MEASURED. SDUI: node scripts/gen-sdui-manifest-node.mjs under the lock re-recorded only plugin-detail.json and left the artefact unchanged; node scripts/check-sdui-manifest.mjs exit 0 before and after the merge. CI check-runs: in_progress at report time, not awaited.",
    "dogfood_battery": "n/a: no ! in the PR title and Clause-2 is no with no (narrowing) arm",
    "mcp_calls": "0: no GitHub MCP calls",
    "api_writes": "2 relay strokes: (1) fleet-write dispatch POST /repos/objectstack-ai/objectstack/dispatches carrying pr_create, which the relay executed as POST /repos/objectstack-ai/objectstack/pulls (draft) plus POST /repos//issues/26325/assignees; read-back byte-identical (5367 bytes). (2) This os-dev-report comment, via scripts/pm/post-stamped.mjs to POST /repos//issues/25883/comments. git push is not counted (not a REST write).",
    "deviations": [
    "Merged origin/main (6633075) into the branch before opening the PR, per AGENTS.md multi-agent section 10. The merge was clean: upstream touched only a plugin-detail test and three other packages' sdui records. The suite, type-check and sdui check were re-run on the merged head 76d5a63. The merge commit carries git's default message without the trailer pair; the pre-push hook accepted it.",
    "Standard order items 2 and 8 (telling the seat-2 thread the branch and messaging it at the end) were skipped, per the card delta: do not wait for or message the seat.",
    "Standard order item 5 (the single record.json) was superseded by the delta. Only scripts/sdui-manifest.sources/plugin-detail.json moved and was committed.",
    "check:type-check-debt is NOT-MEASURED locally (reason above); CI carries it.",
    "Commit trailers use the AGENTS.md model-free pair (Claude-Session plus Co-authored-by: Claude), not the harness-suggested trailer that names a model."
    ],
    "open_questions": [
    {
    "question": "The pencil's accessible name and its tooltip (which Radix opens on keyboard focus) read detail.editInlineHint, Double-click to edit. A keyboard user activates the pencil with Enter or Space. Should the pencil get its own label?",
    "options": [
    "A: leave it; the row's title hint is about double-click and the pencil is self-evident",
    "B: a follow-up gives the pencil a distinct key (for example detail.editField) in every locale pack, keeping editInlineHint for the row title"
    ],
    "recommendation": "B as a small follow-up card, because the hint text is wrong for the control that now shows on keyboard focus; locale packs are outside this claim."
    },
    {
    "question": "Touch: the pencil is still not revealed on a coarse pointer on desktop-width layouts. RowActionMenu adds pointer-coarse:opacity-100 for this. Should it be in scope?",
    "options": [
    "A: no; the mobile read row's edit path is a separate, already-noted gap",
    "B: add pointer-coarse:opacity-100 to both pencils in a follow-up"
    ],
    "recommendation": "A for this PR; fold B into whatever card picks up the mobile read row's edit path."
    }
    ],
    "out_of_scope_findings": [
    "class: a · reach: public UI, record page in desktop read mode: on a read-only field whose value can be copied, the copy button in DetailSection.tsx (the copyOffered branch, className opacity-0 group-hover:opacity-100) is a Tab stop that stays transparent, the same hover-only defect this PR fixes for the pencil. It sits after the row, which is itself role=button and tabIndex 0. Not fixed here: the claim scopes this PR to the pencils. A one-line fix uses the same two utilities. · dedupe words: copy to clipboard button hover only keyboard focus invisible record detail",
    "carrier: none · noted in PR Acceptance notes, not filed: the pencil tooltip text on keyboard focus, and the coarse-pointer reveal (both in open_questions)"
    ]
    }


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    Contributor

    Landed (item 1) · seat 2 · 2026-10-27T04:18Z

    probe reading
    PR #26325 MERGED 2026-10-27T03:41Z, merge commit 411fc00f, head 0438bd13 (+224/−2, seat record on #26325)
    origin/main contains it (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26325-*: none left (consumed)
    card stays open: the PR said Part of #25883

    Status: item 1 is done. The record page's inline-edit pencil now shows on keyboard focus, in the details body and the highlights strip. Item 2 (remember the empty-field toggle) is not started. Its storage-key choice is an implementation choice for the next dev, who must name it in the PR. The card returns to the queue for item 2: pm:dispatched → pm:queue. The copy button beside the pencil is #26329.

  8. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 15 · 2026-10-27T06:25Z
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-25883-empty-fields-remembered
    Worktree: objectstack-issue-25883c
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/plugin-detail/src/DetailSection.tsx (the empty-field toggle state, ~:197 / ~:873), the record page's preference read/write seam (reuse the sys_user_preference ui.* mechanism the list page uses, ui/packages/app-shell/src/context/ListPreferencesProvider.tsx, read-only reference unless a shared hook must be exported), tests beside them, root .changeset/. ⛔ HeaderHighlight.tsx and renderers/record-highlights.tsx (#26417), RelatedList.tsx (#26344 / #26415), locale packs (reuse existing toggle strings), ui/.github/**, root ci.yml.
    Container & model: M, mode:subagent, model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: a user reading every field of a record across reloads and sibling records | sys_user_preference ui.* keys (#12418) | every record page with folded empty fields
    Thread-read: none
    Premise: holds 2026-10-27T06:25Z at origin/main b7f2b0c290: DetailSection.tsx:197 keeps showEmptyOverride in component state (React.useState(false)), so each section's 「显示 N 个空字段」 toggle resets on reload and on the next record.
    Serial constraints cleared: #26329 (PR #26487, same file) MERGED 2026-10-27T05:36Z; item 1 (PR #26325) merged earlier. No open PR touches DetailSection.tsx.
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Seat's route: item 2 only. Remember "show empty fields" per user and object in a sys_user_preference ui.* key, through the same mechanism the list page uses. Name the key in the PR; that is the storage-key choice the card left open. One choice applies to every section of that object's record page: toggling any section's control sets it for all. No preference service (anonymous, offline) keeps today's per-section, in-memory behaviour. Pin red-first: toggle, remount, still shown; another object unaffected. Fixes #25883 (item 1 landed in fix(plugin-detail): reveal the inline-edit pencil on keyboard focus #26325).
  9. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    Contributor

    os-dev-report
    {
    "issue": 25883,
    "status": "done",
    "branch": "claude/issue-25883-empty-fields-remembered",
    "pr": "#26560",
    "head": "2646abdc78be4d82390f5ebd54c461d1a5cffdf3",
    "session": "session_01SMps7wq7rBTk53e8KTSEup",
    "premise_still_valid": true,
    "summary": "Item 2 (item 1 landed in #26325). The record page's empty-field toggle is now one remembered choice per user and object. Storage key: ui.record.OBJECT, a new sys_user_preference key family. The value is { showEmptyFields: boolean }. It uses the same mechanism as the list page's ui.list.OBJECT: createObjectStackUserPreferenceFamily, attached by ConsoleShell's UserStateBridge, loaded by prefix in the one shared preference read, one row per object. The seam to plugin-detail is a new @object-ui/react context, RecordPagePreferencesProvider / useRecordPagePreferences, the same pattern as HostNavigationContext and HostMapStyleContext. No package dependency was added and plugin-detail does not import app-shell. app-shell's new RecordPreferencesProvider supplies the context. With no family attached (anonymous, or a host without the bridge) it supplies null, and DetailSection keeps today's per-section useState. One choice applies to every section of the object. The authored hideEmpty: true all-empty hide still applies under the choice. Premise re-read at origin/main b7f2b0c: DetailSection.tsx:197 showEmptyOverride was React.useState(false).",
    "files_changed": [
    "ui/packages/react/src/context/RecordPagePreferencesContext.tsx",
    "ui/packages/react/src/context/index.ts",
    "ui/packages/plugin-detail/src/DetailSection.tsx",
    "ui/packages/plugin-detail/src/tests/DetailSection.emptyFieldsRemembered-25883.test.tsx",
    "ui/packages/app-shell/src/context/RecordPreferencesProvider.tsx",
    "ui/packages/app-shell/src/context/UserStateAdapters.tsx",
    "ui/packages/app-shell/src/context/tests/RecordPreferencesProvider-25883.test.tsx",
    "ui/packages/app-shell/src/console/ConsoleShell.tsx",
    "ui/packages/app-shell/src/console/tests/consoleUserPreferenceBudget.test.tsx",
    ".changeset/25883-empty-fields-remembered.md"
    ],
    "line_budget": "820 changed lines (+770/-50) across 10 files (dispatch-gates count vs merge base b7f2b0c), under the 3000 human-merge threshold. About 70 of them are a two-space re-indent in ConsoleShell.tsx, from nesting the new provider.",
    "tests": "RED at 1b03405 (the seam and the plugin-detail pin committed, DetailSection unchanged), run in a detached worktree from cwd ui/: pnpm exec vitest run --maxWorkers=1 packages/plugin-detail/src/tests/DetailSection.emptyFieldsRemembered-25883.test.tsx gave Tests 4 failed | 2 passed (6). The failures were remount still shown, all sections plus other object, store write, and stored choice opens shown. The two passing were the no-store and no-objectName cases, which are the old behaviour. GREEN at 2646abd, under os-verify-lock, VERDICT command-exit 0 (held 1754s, waited 270s, shared box): the closure build pnpm --filter '@object-ui/plugin-detail^...' --filter '@object-ui/app-shell^...' build exited 0. pnpm exec vitest run --maxWorkers=2 packages/plugin-detail gave Test Files 310 passed | 1 skipped (311) and Tests 2876 passed | 18 skipped (2894); 311 equals the test files on disk. The 25 app-shell test files that import or read ConsoleShell, UserStateAdapters or the new provider (not the full suite) gave Test Files 25 passed (25) and Tests 201 passed (201). That includes the new RecordPreferencesProvider-25883 (5 tests, the real DetailSection under the real provider) and the extended consoleUserPreferenceBudget: still one GET, both prefixes, its own ui.record.account row read and written, and a user switch. The type-checks for @object-ui/plugin-detail, @object-ui/react and @object-ui/app-shell (each tsc --noEmit plus tsc -p tsconfig.test.json) all exited 0. The plugin-detail pin ends at 7 tests, including the hideEmpty regression guard added after the red leg. Ablation: none. The pins run against source through vitest's alias, and the red leg is the pre-fix tree.",
    "gates": "At 2646abd, node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 34 commands. Each exit code was captured before any pipe. 32 exited 0, including check-sdui-manifest.mjs (106 components, intact), check:nul-bytes, check:cross-package-test-inputs, check:test-source-alias, check:type-check-coverage, check:undeclared-dep-imports, check:published-files, the adr-0087 / changeset-no-major / empty-changeset gates and their self-tests. pnpm --dir ui exec vitest run scripts/ exited 1: 5094 passed and 3 failed, all on the 15s test timeout on a contended box (check-hand-rolled-comment-mask, check-vi-mock-inherit, js-comment-mask-returns-interpolation-9424). Those three files re-run alone gave Tests 113 passed (113). A second full run hit a 590s cap (exit 124) under heavier contention. pnpm check:type-check-debt is NOT-MEASURED: gate exit 3 PREREQUISITE NOT MET, because its closure build lost the lock queue, and a locked re-run then timed out in the queue (exit 99). CI Lint and Repo Gates carries it. --ran reconciliation exit 0: 34 derived, 33 run, 1 NOT-MEASURED, 0 UNRUN. No sdui.manifest.json regeneration, because no registry component contract changed. CI check-runs were not awaited.",
    "dogfood_battery": "n/a: no ! in the PR title and Clause-2 is no with no (narrowing) arm",
    "mcp_calls": "0: no GitHub MCP calls",
    "api_writes": "2 relay strokes: (1) fleet-write dispatch POST /repos/objectstack-ai/objectstack/dispatches carrying pr_create. The relay executed it as POST /repos/objectstack-ai/objectstack/pulls (draft #26560) plus POST /repos//issues/26560/assignees (os-steve). Read-back was byte-identical (9542 bytes). (2) This os-dev-report comment, via scripts/pm/post-stamped.mjs to POST /repos//issues/25883/comments. git push is not counted.",
    "deviations": [
    "File surface: the seam needed two files outside the claim's named paths: ui/packages/react/src/context/RecordPagePreferencesContext.tsx plus one export line in its index.ts, and in app-shell UserStateAdapters.tsx and ConsoleShell.tsx (the bridge and provider mount). The claim named the preference read/write seam without paths. ListPreferencesProvider.tsx stayed read-only.",
    "The red leg ran without the verify lock (one test file, --maxWorkers=1) after three 540s queue timeouts on a contended lock. It ran in a throwaway worktree at 1b03405, with the backend packages' built dist copied from the same base; the 1b03405 diff touches only ui/. The worktree was removed afterwards.",
    "The red leg's test file is the first version (6 tests). The seventh test, the hideEmpty guard, was added with its fix in 2646abd and is a regression guard, not a red-first pin.",
    "check:type-check-debt is NOT-MEASURED locally (reason in gates); CI carries it.",
    "Commit trailers use the AGENTS.md model-free pair (Claude-Session plus Co-authored-by: Claude), not the harness-suggested trailer that names a model."
    ],
    "open_questions": [
    {
    "question": "Should the tab-level fold (EmptySectionsFold, shown when every section of a body is empty) read the same remembered choice?",
    "options": [
    "A: leave it in-memory; under a remembered show, revealing it already draws the sections with their empty fields shown",
    "B: a follow-up makes it read and write the same RecordPagePreferencesStore entry, so an all-empty record opens revealed too"
    ],
    "recommendation": "B as a small follow-up if the seat wants one control for the page. It was outside this claim's file surface."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted in PR Acceptance notes, not filed: EmptySectionsFold keeps its own reveal (open_questions); a section draws folded until the boot's preference read answers"
    ]
    }


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    Contributor

    Landed · seat 2 · 2026-10-27T09:23Z

    probe reading
    PR #26560 (item 2) MERGED 2026-10-27T09:15Z, merge commit 7990fb05, head 2646abdc (+770/−50, seat record on #26560)
    origin/main contains it (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26560-*: none left (consumed)
    card closed (completed) by Fixes #25883 on #26560; item 1 landed earlier in #26325

    Status: both items are on main. The inline-edit pencil shows on keyboard focus (item 1), and "Show N empty fields" is one remembered choice per user and object across every section, record and reload (item 2, sys_user_preference ui.record.OBJECT). pm:dispatched removed.

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uipriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions