Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
281aa0e
docs(qa): re-point automation.setup-packaged-automation-board to the …
claude Nov 2, 2026
a6314d0
docs(qa): re-point automation.packaged-flow-clone-contract to new sim…
claude Nov 2, 2026
7b8e9a9
docs(qa): mark the switched-off sentence's Setup › Packaged automatio…
claude Nov 2, 2026
94c3f6f
docs(qa): flow-node-type-matrix makes its writable copy through Studi…
claude Nov 2, 2026
4fd3557
docs(qa): re-point studio-authoring.packaged-automation-studio-lock t…
claude Nov 2, 2026
5639aa0
docs(qa): access-permission-set-lifecycle — New on a read-only packag…
claude Nov 2, 2026
9b1c044
docs(qa): home-admin-cluster-links — 8 Administration targets, legacy…
claude Nov 2, 2026
9301386
docs(qa): write-feedback drives Studio discard on the All metadata it…
claude Nov 2, 2026
8ecf948
docs(qa): object-designer-roundtrip — the live spec's F2–F4 now open …
claude Nov 2, 2026
0e3e0da
docs(qa): authoring-validation-not-persisted drives the Source tab on…
claude Nov 2, 2026
e37bf7f
docs(qa): mark the package-less overlay items transitional after the …
claude Nov 2, 2026
7036179
docs(qa): object-designer-roundtrip names the All metadata designer a…
claude Nov 2, 2026
1fb71f6
docs(qa): FOLLOW-UPS §13 — the slice-1 re-point, what is transitional…
claude Nov 2, 2026
83f32ea
Merge remote-tracking branch 'origin/main' into claude/issue-28579-ch…
claude Nov 2, 2026
9e8f852
docs(qa): the board's strip citation follows StudioRefusalStrip.tsx a…
claude Nov 2, 2026
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
40 changes: 40 additions & 0 deletions docs/qa/platform-checklist/FOLLOW-UPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -779,3 +779,43 @@ non-numeric fields) and `expression-editors` knownGaps[4] (the RLS editor reads
CEL' on a formula-field predicate). These three were read from source, not measured.
`app-and-nav-properties` scores acceptance[5]'s `requiresObject` cell as not judged:
neither Studio nor Setup edits that key, and no ruling says Studio must.

## 13. Scoped re-point 2026-11-02 — the Setup-designer items to the Studio door (#28579 slice 1, ADR-0146 N-29)

**Not a sweep, and no new items.** Sixteen named items were re-measured against `main`
(`dfbe34d887`) after N-28 (#28818, with #28785) and N-30 (#29264), using the measured notes
on #28579 (QA runs #28981, #29002, #29124) as inputs. Each changed item's `history` row says
what moved and why. Left untouched, with the reason in the slice's report:
`integration-system.external-datasource-federated-read` and `external-schema-browser-ui`
(the datasource is the one metadata type ADR-0146 D1 keeps in Setup, and its routes still
render there) and `platform-core.packaged-object-extend-only` (API-only; both write doors
answer as before).

### 13a. Transitional, and why

- **`studio-authoring.packaged-display-class-direct-edit`** carries `blocked`
(`dependency`, #28579 slice 2), and **`studio-authoring.org-override-registry-gate`**
scores acceptance[1] and [4] `blocked(dependency)`: both prove a package-less overlay on a
packaged view or dashboard, which #28850 closed (403 `NOT_OVERRIDABLE` naming the
`.custom` pair). The replacement — Customize as a declared override in the pair, and
Restore package original — is slice 2's new items.
- **The switched-off sentence's remedy** in `api-backend.packaged-action-disabled-dispatch`
and `automation.packaged-flow-disable-durable`: see 13b. The clauses keep the served text.

### 13b. Product finding — reported, not filed here

- `describeTurnedOffPackagedItem` (`packages/types/src/packaged-item-turned-off.ts`), the one
sentence the `ACTION_DISABLED` and `FLOW_DISABLED` 409s read, still tells the end user an
administrator can turn the item on again "under Setup › Packaged automation" (and, for a
flow, "copy it there under a new name"). That page is retired (ADR-0146 D4/D11): an
action's switch is Setup › Packaged actions, and a flow's switch and New similar are on the
flow in Studio. The finding is in the slice's report for the seat to card.

### 13c. Other items still naming a retired Setup door (outside this slice's list)

`platform-core.metadata-authoring-roundtrip` steps[7] and `studio-authoring.record-page-roundtrip`
steps[0]/[3] (`/apps/showcase_app/metadata/page/…`), `studio-authoring.permission-matrix-editor-ux`
steps[0] (`/apps/com.objectstack.setup/metadata/permission/…`) and
`automation.packaged-flow-subflow-disable-refusal` steps[7] (the retired Setup
packaged-automation page as the UI half). Those Setup URLs redirect to Studio since #28818,
so the items still reach a page; their text was not re-measured here.
11 changes: 9 additions & 2 deletions docs/qa/platform-checklist/areas/api-backend.json
Original file line number Diff line number Diff line change
Expand Up @@ -1678,7 +1678,7 @@
"title": "A disabled packaged action is refused 409 ACTION_DISABLED at BOTH dispatch doors — after the capability gate (a 403 is never an oracle for the switch), before the param contract and the record load, durable across restart",
"since": "v17",
"status": "active",
"revision": 11,
"revision": 12,
"priority": "P0",
"surface": "api",
"personas": [
Expand All @@ -1695,7 +1695,8 @@
],
"knownGaps": [
"The MCP door cannot be driven live with showcase_mark_done: the bridge's AI-exposure gate (actionAiExposureError, fail-closed on ai.exposed !== true) sits AHEAD of the activation consult, so a non-exposed action answers the exposure refusal regardless of its switch. showcase_portfolio_snapshot is the only stock ai.exposed action. The MCP transport IS drivable live on a stock boot: the boot banner prints `MCP: http://localhost:<port>/api/v1/mcp`, and QA run #21056 drove POST /api/v1/mcp tools/call run_action against showcase_portfolio_snapshot (disabled → isError carrying code ACTION_DISABLED, status 409; re-enabled → ok). Score the MCP clause live. Where the endpoint is not mounted, record acceptance[4] blocked(environment), with the unit pin cited beside it: action-activation-dispatch.test.ts 'door 2' calls invokeBusinessAction in-process over a stubbed engine and metadata service, with no MCP transport and no HTTP, so it is evidence of that layer only, never the clause's pass (RUNNER rule 6, a pin scores only the layer it drives).",
"The record-load half of the ordering proof is scored from the DISABLED traces: code order plus the absence of any read/side effect. An enabled control on the same nonexistent recordId answers 404 RECORD_NOT_FOUND, because every door refuses a subject the caller-scope load did not deliver (refuseDeniedSubjectLoad, packages/runtime/src/action-execution.ts — the script/body door, the flow door and the declarative branch Mark Done now takes all call it; measured on a dogfood boot of #25468: enabled 404, disabled 409, same id). That 404 corroborates the order but is not the leg's evidence. The load itself is still caught (loadActionSubjectRecord), so a new-record or object-less action, which attempts no load, never 404s."
"The record-load half of the ordering proof is scored from the DISABLED traces: code order plus the absence of any read/side effect. An enabled control on the same nonexistent recordId answers 404 RECORD_NOT_FOUND, because every door refuses a subject the caller-scope load did not deliver (refuseDeniedSubjectLoad, packages/runtime/src/action-execution.ts — the script/body door, the flow door and the declarative branch Mark Done now takes all call it; measured on a dogfood boot of #25468: enabled 404, disabled 409, same id). That 404 corroborates the order but is not the leg's evidence. The load itself is still caught (loadActionSubjectRecord), so a new-record or object-less action, which attempts no load, never 404s.",
"TRANSITIONAL — the remedy half of acceptance[0] and acceptance[6] (ADR-0146 D4/D11): the ACTION_DISABLED sentence still says an administrator can turn the action on again 'under Setup › Packaged automation' (describeTurnedOffPackagedItem('action'), packages/types/src/packaged-item-turned-off.ts). That page is retired: an action's switch is now Setup › Packaged actions (nav_packaged_actions, componentRef 'automation:packaged-actions'), and the old page's bookmark opens Studio (#28785, #28818). Both doors, the 409, the code and every ordering leg are unchanged, and the clauses keep the sentence as served at dfbe34d887, so a run still scores them on that text. The remedy naming a page that no longer exists is a product defect of the sentence's producer, carried in the #28579 slice-1 report's out_of_scope_findings; when the producer names Setup › Packaged actions, the 'Setup › Packaged automation remedy' spelling in acceptance[0] and [6] is re-pointed in the same change"
]
},
"steps": [
Expand Down Expand Up @@ -1849,6 +1850,12 @@
"date": "2026-11-01",
"change": "QA run #28545 (W3-C1R) finding: acceptance[6] (clause and verify) expected ACTION_DISABLED 'naming showcase_bulk_reassign', but since #27842 the sentence names no action (action-activation.ts describeDisabled returns describeTurnedOffPackagedItem('action'), and packaged-action-disabled-dispatch-live.dogfood.test.ts expectDisabledSentence ignores its action argument). The clause now asks 409 ACTION_DISABLED with the turned-off sentence on the /actions/showcase_task/showcase_bulk_reassign route, and the target flow untouched. The status, the code and the own-switch ordering are kept; only the expectation that could never hold is replaced. Read from source at base 6b9c1ca991. Wave anchor #27377, wave-3 accuracy slice S9 (#28641); finding parked in anchor comment 6554042054",
"ref": "#28545"
},
{
"revision": 12,
"date": "2026-11-02",
"change": "Re-measured against main after N-28/N-30 (#28818, #29264), at base dfbe34d887: the REST and MCP doors, the 409 ACTION_DISABLED, the D4 → activation → params → record order and the restart leg are all unchanged, so steps and clauses stand. fixtures.knownGaps[2] (new) marks the remedy half of acceptance[0] and [6] TRANSITIONAL: the served sentence (describeTurnedOffPackagedItem('action'), @objectstack/types) still names 'Setup › Packaged automation', which ADR-0146 D4/D11 retired; the action switch is Setup › Packaged actions. No clause is weakened: the sentence is still pinned as served. The wrong place is reported as a product defect for its own card, not fixed here",
"ref": "#28579"
}
]
},
Expand Down
Loading
Loading