Skip to content

docs(qa): lift action-location-matrix's no-surface knownGap now that the showcase hosts record_header / record_more / record_related - #22040

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-22039-lift-action-location-knowngap
Oct 6, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-22039-lift-action-location-knowngap

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #22039
Clause-②: no

The showcase change carded as #22030 landed as PR #22036 (60ccda5a24). It hosts record_header, record_more and record_related for showcase_task on stock showcase pages. This PR lifts the row-7 fixture knownGap on records-forms.action-location-matrix that parked those three locations, and A3's url / api dispatch legs, on that card. It is a checklist-only diff: one item in docs/qa/platform-checklist/areas/records-forms.json, no other item, no code.

What changed (item records-forms.action-location-matrix, revision 8 to 9)

Key Before After
revision 8 9
fixtures.knownGaps[1] "the showcase hosts NO surface for three of the six locations on showcase_task …"; score them blocked(fixture); park on #22030 Opens with a closed marker citing #22030 / PR #22036 / 60ccda5a24 and this card, then says where each location now lives on a stock boot (below)
steps[1] surfaces listed as "a not-done task's detail title bar / its ⋯ menu / a related-list section", plus "A location with no hosting surface at this fixture (record_header / record_more / record_related) is recorded blocked(fixture)" Names each host: the Task Detail title bar, that title bar's ⋯ menu, and the rows of the Tasks related list on Project Detail's Related tab, "not the Tasks tab's line-items grid". The blocked(fixture) sentence is gone
acceptance[0].clause "… a parent record page that renders the synthesized Tasks related list …" "… renders the Tasks related list …" (one word dropped)
acceptance[0].verify "At this fixture record_header, record_more and record_related are not hosted: record those three blocked(fixture), never as missing placements" "The stock fixture hosts all six (fixtures.knownGaps names the page and tab …): an expected action absent from its host is a missing placement, never blocked(fixture)"
acceptance[2].clause "The url (open_docs) and api (recalc_selection) legs live on record_more and share its fixture gap: record them blocked(fixture) with it, never as dispatch failures" "The url (open_docs) and api (recalc_selection) legs live on record_more, under the ⋯ overflow of the Task Detail title bar"
history 8 entries plus one: revision 9, 2026-10-06, ref #22039, citing #22030 / PR #22036

fixtures.knownGaps[0] (the objectui-pinned automation) is byte-identical. No other key and no other item changed. A structural diff of all 43 items against 60ccda5a24 shows exactly one changed item.

The rewritten knownGap: where each location lives

  • record_header / record_more: Task Detail (showcase_task_detail, the record page the console opens for any task). Its first node is a page:header. The header renders the action ids it lists, each placed by its own locations, and the host's Edit / Share / Delete come after them.
    • Inline on a desktop viewport: showcase_mark_done (script, shown only while the task is not done), showcase_log_time (form) and showcase_archive_task (script, disabled until done).
    • Under the ⋯ overflow: showcase_open_docs (url), showcase_recalc_estimate (api) and showcase_recalc_selection (api).
    • The default inline budget is 3 (1 on mobile), and a record_header action past it folds into ⋯. Read from the page:header renderer at the objectui pin a58626c88dc8. The knownGap names this so that a runner on a narrow viewport does not score a folded action as an extra record_more placement.
  • record_related: Project Detail (showcase_project_detail), on the Related tab (?tab=related). The tab holds the Tasks related list, a record:related_list for showcase_task through its project FK. As PR feat(example-showcase): host record_header / record_more / record_related for showcase_task #22036 noted, this is an authored node, not the synthesizer's strip. The page's tabs override still replaces that strip, and the tab puts the list back with no actions key, so its rows carry showcase_log_time beside the task's list_item actions. The Tasks tab next to it is the record:line_items grid, which hosts no record_related action.
  • A missing action on any of these hosts is now a missing placement, not blocked(fixture). The knownGap says the hosts were read from objectui source and served metadata, not from a browser render, because PR feat(example-showcase): host record_header / record_more / record_related for showcase_task #22036 left the browser render NOT MEASURED. The first run against these hosts will be their first browser evidence.

Scope reading, declared

The dispatch scopes edits to fixtures.requires, steps and acceptance verify lines that still send the runner to a surface that does not host the leg. Two of the lines above are acceptance clause texts, not verify lines. Revision 7 added the gap's blocked(fixture) instructions in five places: knownGaps[1], step 2, clause 1, clause 1's verify, and clause 3. The item diff between ff29410ed2 and 18c7dfd2e6 shows them. Clause 3's last sentence parks the url / api legs by itself, so leaving it would keep A3 parked after the lift. Clause 1's "synthesized" sends a runner to look for a strip that the page's tabs override removes. The edit to each clause is the minimum that undoes revision 7's gap text. Nothing else in either clause changed. fixtures.requires is unchanged: it describes the fleet and does not point the runner at any surface.

Verification (head d99f1f57ee, after the final commit)

  • Derived gates: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on the actual diff derived 13 commands. The list is the same at both commits. Each was run with its exit code recorded before any pipe, and all 13 exited 0. --ran: "13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero — all 13 recorded an exit code and none of them is 3)".
    • check:platform-checklist: "OK — 15 areas, 276 items (272 active, 2 planned) …".
    • check:doc-authoring, check:cross-package-test-inputs and check:nul-bytes are green.
    • On the first commit, check:doc-formula-expressions answered PREREQUISITE NOT MET (exit 3: @objectstack/formula and @objectstack/lint were unbuilt). Both were then built under os-verify-lock.sh (VERDICT command-exit 0), and the gate ran green at both commits.
  • The two checklist-reading package tests run on the final head. These are the only tests declared as reading these files: scripts/cross-package-test-inputs.mjs names docs/qa/platform-checklist/areas/*.json for plugin-auth and docs/** for rest, and nothing else.
    • pnpm --filter @objectstack/plugin-auth exec vitest run --maxWorkers=2 src/checklist-refusal-envelope-consistency.test.ts: exit 0, 1 file / 5 tests passed.
    • pnpm --filter @objectstack/rest exec vitest run --maxWorkers=2 src/meta-state-route-doc-spelling.test.ts: exit 0, 1 file / 8 tests passed.
  • Lint: eslint --no-inline-config --format json on the changed file returns 1 file and 0 errors. The one message is "File ignored because no matching configuration was supplied". No block in eslint.config.mjs covers .json under docs/, so this diff cannot move any lint verdict. The full pnpm lint run is CI's.
  • Changeset: 69 published workspace manifests. None has a files[] entry naming docs/qa or the checklist (0 hits). Positive control: all 69 name dist (69 hits). The path is outside every package directory, so this diff publishes nothing. Hence skip-changeset.
  • Typecheck / package tests: no package source changed, so neither is owed locally. CI's Test Core reruns plugin-auth and rest because their declared inputs moved.

Acceptance notes

  • The empty-locations probe cannot discriminate on two authored-list surfaces. The Task Detail page:header renders only the ids it lists (objectui containers.tsx, resolvedHeaderActions). The record:quick_actions bar is also an explicit actionNames list. So the step-7 probe action, and showcase_new_task, are absent from the record header, the ⋯ overflow and the quick-actions bar because those lists leave them out. That absence is decided before any locations predicate runs. The probe's verdict therefore rests on the list toolbar, the row menu and the related-list rows. The quick-actions half predates this card. The header half is new, because before PR feat(example-showcase): host record_header / record_more / record_related for showcase_task #22036 the header did not exist. Not filed: this is an item-design observation, not a runtime defect, a contract violation or an authoring trap. Carrier: none.
  • fixtures.requires[0] and clause 4 spell mark_done's predicate as '!record.done'. The fixture's actual predicate is has(record.done) && record.done != true. requires[0] also leaves out showcase_recalc_estimate and showcase_archive_task, which the header now carries. Neither points the runner at a wrong surface, so both are outside this card's edit rule and are left as they are. Carrier: none.
  • NOT MEASURED: the browser render of the new hosts, as in PR feat(example-showcase): host record_header / record_more / record_related for showcase_task #22036. No console bundle is built in this checkout. The knownGap says so.

Labels

skip-changeset: checklist-only diff, measured above.


Generated by Claude Code

claude added 2 commits October 6, 2026 21:32
…the showcase hosts the three record locations

records-forms.action-location-matrix revision 8 -> 9. The showcase change
that hosts record_header / record_more / record_related for showcase_task
landed as 60ccda5, so knownGaps[1] is rewritten from "no surface" to
where each location lives on a stock boot: Task Detail's page:header
(record_header inline, record_more's url / api / api under the overflow)
and Project Detail's Related tab (the Tasks related list, an authored
record:related_list). Step 2, clause 1 and clause 3 drop the
blocked(fixture) lines revision 7 added for the gap. knownGaps[0] and
every other item are unchanged.

Claude-Session: https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw
Co-authored-by: Claude <noreply@anthropic.com>
…n knownGap

The header renders three record_header actions inline on a desktop
viewport (one on mobile) and folds the rest into the overflow, so a
runner on a narrow viewport does not score a folded record_header action
as an extra record_more placement. Read from the page:header renderer at
the objectui pin a58626c88dc8.

Claude-Session: https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the size/s label Oct 6, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 6, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 6, 2026 22:05
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 6, 2026
Merged via the queue into main with commit b220e09 Oct 6, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-22039-lift-action-location-knowngap branch October 6, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants