Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions docs/qa/platform-checklist/areas/records-forms.json
Original file line number Diff line number Diff line change
Expand Up @@ -1547,7 +1547,7 @@
"title": "Action buttons surface at exactly their declared locations — list toolbar, list row, record header/more/related/section — and each dispatches for real",
"since": "v15",
"status": "active",
"revision": 8,
"revision": 9,
"priority": "P1",
"surface": "browser",
"personas": [
Expand All @@ -1561,7 +1561,7 @@
],
"knownGaps": [
"AUTOMATION IS PINNED IN THE objectui REPO, NOT HERE — `automated.ref` names objectui specs exclusively, so from this checkout the item is neither runnable nor pin-evidenced (no console bundle is built here and none of those specs exist here). Drive it by hand in the browser and score it as a manual run, OR run the pin in an objectui checkout and cite the output naming the revision (17.1.0 sweep subject: 9a3daf8d37ad). ⛔ Never score it as covered on the strength of the `automated` field alone — an unrun pin is a claim, not evidence. Full protocol: RUNNER.md, the objectui-pinned-automation standing fact.",
"the showcase hosts NO surface for three of the six locations on showcase_task (#21782 VF4; measured at objectui 2e818d0b51ec, re-read at 9dfaca6543). task-detail.page.ts is kind 'full' with no record:header node, and an authored page gets no injected header actions (objectui#7298 ruling), so record_header and record_more have no surface. project-detail.page.ts overrides the tabs slot with an inline record:line_items grid in place of the synthesized related strip, and project (a master-detail) is showcase_task's only parent relation, so record_related has no surface either. The console's renderer half is landed in the pin (objectui#11270, RelatedRecordActionsBridge). Hosting the three needs a showcase_task page that composes a record header and a parent record page that renders the synthesized Tasks related list, which is a showcase fixture change outside this checklist. Until it lands, score record_header / record_more / record_related blocked(fixture), never a missing placement. That showcase change is carded as #22030 (#21797's breach B-1, filed from #22017 row 7, QA run #21782's A3 url / api gap): record_header / record_more / record_related and A3's url / api legs park on #22030"
"[CLOSED by #22030 (PR #22036, 60ccda5a24), lifted by #22039 — the gap text is rewritten to say where each location now lives] a stock showcase boot hosts all six locations on showcase_task, including the three this gap used to block. record_header and record_more: Task Detail (showcase_task_detail, the record page the console opens for any task), whose first node is a page:header. That header renders the action ids it lists, each placed by its own locations, followed by the host's Edit / Share / Delete. Inline (record_header) on a desktop viewport, where the header's default inline budget is 3 (1 on mobile; a record_header action past the budget folds into ⋯): showcase_mark_done (script, shown only while the task is not done), showcase_log_time (form) and showcase_archive_task (script, disabled until the task is done). Under the ⋯ overflow (record_more without record_header): showcase_open_docs (url), showcase_recalc_estimate (api) and showcase_recalc_selection (api). record_related: Project Detail (showcase_project_detail, the record page for any project) → the Related tab (?tab=related), which holds the Tasks related list, a record:related_list for showcase_task through its project FK; open a project that has tasks. It is an authored node, not the synthesizer's strip: the page's tabs override still replaces that strip, and this 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 beside it is the record:line_items grid, which hosts no record_related action. An expected action missing from one of these hosts is a missing placement, never blocked(fixture). The hosts were read from objectui source at pin a58626c88dc8 and from the served metadata, not from a browser render, so the first run against them is their first browser evidence"
]
},
"variants": [
Expand All @@ -1575,7 +1575,7 @@
],
"steps": [
"boot the showcase isolated; sign in as admin; open the showcase_task list view",
"for each location variant, navigate to its surface (list header / row menu / a not-done task's detail title bar / its ⋯ menu / a related-list section / the Task Detail quick-actions bar), screenshot AFTER render settles, then read the rendered action buttons from the DOM. A location with no hosting surface at this fixture (record_header / record_more / record_related — fixtures.knownGaps) is recorded blocked(fixture)",
"for each location variant, navigate to its surface (list header / row menu / a not-done task's Task Detail title bar / that title bar's ⋯ menu / the rows of the Tasks related list on a project's Project Detail Related tab, not the Tasks tab's line-items grid / the Task Detail quick-actions bar; fixtures.knownGaps names each record host), screenshot AFTER render settles, then read the rendered action buttons from the DOM",
"record for every fixture action WHERE it rendered — building the full placement matrix (rendered locations vs declared locations)",
"dispatch one action per location with a ref-targeted click: bulk_reassign (screen-flow wizard opens), quick_view (modal opens), mark_done (script executes), log_time (form dialog opens on showcase_task.form), open_docs (url navigation), recalc_selection from the ⋯ menu (api POST); capture each network trace",
"verify the state-changing dispatches server-side: mark_done flips the task's done flag (API re-read), recalc_selection's per-record branch recomputes the estimate",
Expand All @@ -1584,9 +1584,9 @@
],
"acceptance": [
{
"clause": "Per variant, every location the fixture actually HOSTS renders ≥1 action declared for it; record_header/record_more require a showcase_task page that composes a record header and record_related a parent record page that renders the synthesized Tasks related list (fixture must provide both).",
"clause": "Per variant, every location the fixture actually HOSTS renders ≥1 action declared for it; record_header/record_more require a showcase_task page that composes a record header and record_related a parent record page that renders the Tasks related list (fixture must provide both).",
"oracle": "dom",
"verify": "after each hosted surface's screenshot confirms render, the DOM read lists the expected action names in that slot; matrix compiled per variant. At this fixture record_header, record_more and record_related are not hosted (fixtures.knownGaps): record those three blocked(fixture), never as missing placements",
"verify": "after each hosted surface's screenshot confirms render, the DOM read lists the expected action names in that slot; matrix compiled per variant. The stock fixture hosts all six (fixtures.knownGaps names the page and tab for record_header, record_more and record_related): an expected action absent from its host is a missing placement, never blocked(fixture)",
"evidence": "per-location screenshots + the placement matrix"
},
{
Expand All @@ -1596,7 +1596,7 @@
"evidence": "the same matrix, extra-placement columns"
},
{
"clause": "each HOSTED location's sampled action DISPATCHES for real — flow wizard opens and resumes, modal opens, script executes, form opens the declared edit form view, url navigates, api POSTs — and state-changing ones round-trip server-side (mark_done flips done; recalc updates the estimate). 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",
"clause": "each HOSTED location's sampled action DISPATCHES for real — flow wizard opens and resumes, modal opens, script executes, form opens the declared edit form view, url navigates, api POSTs — and state-changing ones round-trip server-side (mark_done flips done; recalc updates the estimate). The url (open_docs) and api (recalc_selection) legs live on record_more, under the ⋯ overflow of the Task Detail title bar",
"oracle": "network",
"verify": "one captured dispatch per location + API re-reads for the two state changes",
"evidence": "the six traces + the two re-reads"
Expand Down Expand Up @@ -1683,6 +1683,12 @@
"date": "2026-10-06",
"change": "partial-coverage gap of QA run #21782 parked on #22017 (row 7). A3's url / api dispatch legs were blocked(fixture): the fixture hosts no ⋯ surface. Revision 7 (#21797) already scores them blocked(fixture) with record_more. Disposition: recorded knownGap. The leg needs an examples/app-showcase fixture change, carded as #22030, and the knownGap now parks the three record_* variants and A3's url / api legs on #22030. No clause changed",
"ref": "#22017"
},
{
"revision": 9,
"date": "2026-10-06",
"change": "lifted the row-7 fixture knownGap (#22039): #22030 (PR #22036, 60ccda5a24) hosts record_header, record_more and record_related for showcase_task on stock showcase pages. knownGaps[1] is rewritten from 'no surface' to where each location lives: 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 rather than the synthesizer's strip). The lines revision 7 added for the gap are re-pointed. Step 2 names each host and drops its blocked(fixture) sentence. Clause 1 drops 'synthesized', and its verify scores an absent action as a missing placement. Clause 3 no longer parks the url / api legs. knownGaps[0] is unchanged",
"ref": "#22039"
}
],
"enumSource": {
Expand Down
Loading