Repository navigation
Commit e18b23f
docs(qa): re-point six stale platform-checklist clauses across five items to the shapes their rulings shipped (#24000)
Fixes #23950
Clause-②: no
Six platform-checklist clauses across five items pinned shapes that
rulings and PRs have since moved. Each was red in a QA run against a
product that is right. This PR re-points each clause to the shape that
shipped. Each item's `revision` is bumped and a `history` row names
#23950 and the ruling or PR that moved the shape. No clause is loosened
past its ruling: each one still fails if the product broke the ruled
behaviour. The diff is
`docs/qa/platform-checklist/areas/{ai,cli,approvals,platform-core}.json`
only (+110 / −64, four files). No product code changes.
All five items were re-run against a real showcase boot built from this
tree's product sources (`fb82f9b1`, whose product tree is `origin/main`
`022c6e799`). One record per item: #23995, #23996, #23997, #23998,
#23999. The six re-pointed clauses all pass. One item,
`platform-core.shell-nav-personalization`, fails on a different clause
(0, icon-mode navigation) because of a console defect this run found.
That clause is not one this card touches (see Acceptance notes).
## Per clause
**1. `ai.mcp-stdio-fail-closed` clause 6** (r4 → r5; from record #23915)
- Old pin: the generic error text `MCP stdio identity is no longer valid
(key revoked or expired)`, scored from a log line.
- New clause: revocation is honored on the next call and fails closed.
The post-revoke call serves no row and is a tool error whose envelope
carries code `API_KEY_REVOKED` and status 403. A pre-revoke read on the
same session is the control. The oracle is the tool result (api). The
message's wording is not pinned: the code is what a client branches on,
and #23944 is rewording that text.
- Cites: `packages/mcp/src/plugin.ts` `resolvePrincipal` (#23367; it
raises `ApiKeyLifecycleRefusalError`),
`packages/core/src/security/api-key.ts#lifecycleRefusalOf`, and
`packages/mcp/src/mcp-http-tools.ts#errorResultWithCode`.
- Re-run (#23995): **pass**. Before the revoke, 1 row. After `PATCH
/api/v1/data/sys_api_key/KEY_ID {"revoked": true}` (200), the next
`query_records` returns isError with `{"error": {"code":
"API_KEY_REVOKED", "status": 403, …}}` and no `records` key.
**2. `cli.migrate-meta-codemod` clause 7** (r4 → r5; from record #23921)
- Old pin: a restart condition, "`--help` lists exactly
from/to/step/out/stored/database-url/apply/yes/force/type/json, with no
in-place rewrite flag".
- New clause: the item's own restart trigger fired (#9591 is done:
`--write` landed in PR #22108, and PR #22142 named it in the house
sentence). As revision 3 prescribed, the rewrite assertions come back
rather than the clause being deleted. `--write` rewrites in place
exactly the mechanical edits it can trace to one literal in one project
file. It lists every other edit with a closed-set refusal kind and
writes no semantic advisory. Every byte outside a written site is
unchanged. The write is held to a re-run of the chain (`restored`, exit
1, on disagreement). A second `--write` writes nothing.
- Cites: `packages/cli/src/commands/migrate/meta.ts#printWriteOutcome`
and `MigrateMeta.writeSources`,
`packages/cli/src/utils/authored-source-codemod.ts#CodemodRefusalKind`,
and the `packages/cli/test/migrate-meta-write.test.ts` pin.
- Re-run (#23996): **pass**. `Wrote 7 of 7 mechanical change(s) into 4
file(s)`. `Re-ran the chain over the written sources: no mechanical
change remains.` `diff -r` touches only the 7 listed sites. The second
`--write` prints the no-change line. `--write --json`: `write.status`
`written`. A helper-built plant was refused as `[helper]`, which the
item's knownGap names as the contract working.
**3. `approvals.approver-resolution-matrix` clauses 4 and 5** (r2 → r3;
from record #23926)
- Old pin: under the default `admin_rescue`, the request opened on the
literal `type:value` slot (`position:qa_nobody`, `queue:support`) and
waited for the #3424 override.
- New clauses: since the #22824 ruling (PR #22850), an empty slate opens
on the request organization's administrators as ordinary approvers. The
abandoned literal and its reason are recorded in
`node_config_json.__resolvedFrom` (`admin_rescue:abandoned`,
`admin_rescue:reason`). A routed-to-administrators system comment lands
on the request, a WARN names the routing, and the request stays pending.
The queue clause keeps its #3508 warn and its never-a-fake-approval
property. The fail, auto_approve and fallback legs are unchanged. A new
negative fails the retired nameless request.
- Cites:
`packages/plugins/plugin-approvals/src/approval-service.ts#organizationAdministrators`
and `emptySlateReason`, and the
`admin-rescue-named-slate.integration.test.ts` pin (11/11 green on this
tree).
- Re-run (#23997): **pass**. The administrators are the members whose
resolved sets hold `organization_admin(_no_bypass)`: here, only the org
owner. admin_rescue and queue requests open on [the owner], with the
abandoned literal in `__resolvedFrom` and the comment `Routed to this
organization's administrators because the approver slate named no one:
…`. auto_approve's `review.autoApproved` reads `true` on the approve
edge.
**4. `platform-core.shell-nav-personalization` clause 5** (r2 → r3; from
record #23939)
- Old pin: app/section/record breadcrumbs on a record route, each crumb
navigable.
- New clause: the header's crumbs follow the route. A report draws one
crumb, its label, with no 「Reports」 type crumb. A `system/*` route draws
`System` then its section. An object route (list, view, record) draws no
crumb after the PREVIEW chip. Crumbs are plain text and rebuild on
reload. "Each crumb navigates" is withdrawn by that contract, not
relaxed. The clause still fails if a crumb returns on an object route,
if a report or system route loses its crumb, or if a type crumb comes
back.
- Cites: objectui `packages/app-shell/src/layout/AppHeader.tsx`
(objectui#12461, objectui#12526, objectui#12273). It was read at the
run's pin `daeb77fc` and again at `f8267df9`, the pin `main` moved to
during this work (#23973). objectui#12605 there only adds the product
mark before the pill.
- Re-run (#23998): **pass**. Report: one crumb, `Hours by Status
(Summary)`. `system/settings`: `System`, `Settings`. Record: none, with
the page heading `Fabrikam`. 0 links after the chip. Identical after
reload.
**5. `platform-core.activation-ledger-row-contract` clause 4** (r2 → r3;
from record #23939)
- Old pin: the scope wall `{flow, action}`, and "a permission/position
row is a FAIL" on the 2026-08-26 #12159 ruling.
- New clause: the wall is the four values the shipped doors write: flow,
action, position, permission. ADR-0131 D3 moved the position and
permission-set switch into this ledger (regime C as ADR-0131 D6 amends
ADR-0126 §3), superseding #12159. The clause gains a door-side leg: a
`:type` outside the two (capability) and an audience anchor (`everyone`)
answer 400 and leave no row. It still fails on a fifth type or an anchor
row. The item's own knownGap asked for exactly this revision when a
third writer shipped.
- Cites:
`packages/runtime/src/domains/catalog-activation.ts#handleCatalogActivationWrite`
and
`packages/core/src/security/resolve-authz-context.ts#readDisabledCatalogNames`.
- Re-run (#23999): **pass**. Four OFF switches return 200 and leave
distinct `metadata_type` {action, flow, permission, position}. The
capability probe answers 400 (`:type one of position, permission`) and
the `everyone` probe answers 400 (audience anchor); the row count is
unchanged after both.
## Other edits inside the same revisions, each re-measured on the re-run
- `ai.mcp-stdio-fail-closed` clause 1: same ruling, same item. The
up-front admission refuses a lifecycle-refused key with `[MCP]
OS_MCP_STDIO_API_KEY is refused (API_KEY_REVOKED): …`, not the
did-not-resolve text. The clause now names both refusals, and a new step
restarts with the just-revoked key. Measured: exit 1 with that line.
Neither clause pins the lifecycle message's wording.
- `cli.migrate-meta-codemod`: the title, fixtures, third knownGap, step
2 (the current house sentence), clause 1 (scoped to runs without
`--write`) and the mutation negative follow #9591. Measured on the
re-run and corrected in the same revision:
- Step 8 called the stock tree canonical for `--from 17`, but it lists 3
`flow-decision-mode-inclusive-explicit` edits. The canonical source is
now the tree the write leg wrote, and the identical-run diff normalizes
the `(Nms)` stamp.
- Step 8's parenthetical said the runtime was at PROTOCOL_MAJOR 17. It
is 18 since #22215, which the run's `Chain:` line prints.
- `approvals.approver-resolution-matrix` fixtures: the data API refuses
`sys_team` writes (measured 405) and `sys_user.manager_id` (measured
403). The fixtures name the doors that work instead: `POST
/api/v1/auth/organization/create-team` and `add-team-member`, and `POST
/api/v1/auth/admin/set-user-manager`.
- `platform-core.activation-ledger-row-contract`: steps 1 and 5 flip and
re-enable all four switches (clause 3 follows). The variants, the
knownGap's writer list, the title, a negative and the sources follow,
and the #12159 citation is marked superseded.
## Verification (final head `c4bf2ba4e`)
Gate list derived with `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack`. It reports 13 commands, and each
exited 0 with its exit captured before any pipe:
- `check-ci-filter-parity`
- `check-closing-keyword-parity` and its `--self-test`
- `check-comment-mask-corpus`
- `@objectstack/lint check:doc-formula-expressions`
- `check:cross-package-test-inputs`
- `check:doc-authoring`
- `check:driver-memory-census`
- `check:gitlink-declared`
- `check:nul-bytes`
- `check:platform-checklist`
- `check:refd-timer-probe`
- `check:watch-hint-literal`
`--ran` with exit codes: `13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN`.
`check-governed-merges --branch`: NOT governed, 174 changed lines. Tier
1 pins on the run tree: mcp `plugin.test.ts` 17/17, objectql
`action-activation.test.ts` 18/18, service-automation
`flow-activation-ledger.test.ts` 47/47, dogfood
`packaged-activation-ledger-reach` 11/11. Supporting suites: cli
`migrate-meta-write.test.ts` 23/23 and plugin-approvals
`admin-rescue-named-slate` 11/11.
`docs/qa/**` ships in no package, so no changeset.
## Acceptance notes
- The re-run found three product defects outside this card. They are
handed to the dispatching seat for their own cards (the runner files
none):
- objectui sidebar, icon mode: the invisible group label
(`SidebarGroupLabel`: `-mt-8` and `opacity-0`, with pointer events still
on) covers the lower half of the item above it. On stock showcase the
Page Authoring icon does not route on a centre click. This is
`platform-core.shell-nav-personalization` clause 0's fail in #23998,
with a full reproduction there.
- `os start` used as an MCP stdio host: a client that writes
`initialize` at spawn has that line read as `serve`'s positional
`config` argument. The boot falls back to the artifact on the default
host, and the `initialize` goes unanswered.
- The showcase flow `showcase_approver_bindings` is `status: 'draft'`
and its docblock says that keeps it out of the runtime, but draft flows
fire their triggers. Every `showcase_field_zoo` update opens an
admin_rescue approval request.
- Harness observation, not filed: the nav scripts restore a saved
browser state per script. Replaying a stale `objectui-favorites` cache
brought an unpinned entry back. That is this harness replaying old
state, noted in #23998.
- The interrupted first run of this dispatch left
`examples/app-showcase/objectstack.config.bundled_*.mjs` (gitignored) in
the worktree. It was removed before the re-run.
- The console bundle the browser item ran on was a `vite build` of an
objectui checkout at the pin. It carries no `sdui.manifest.json`, which
only the boot's page-source warning reads.
---
_Generated by [Claude
Code](https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 4ffdebe commit e18b23f
4 files changed
Lines changed: 110 additions & 64 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
202 | 202 | | |
203 | 203 | | |
204 | 204 | | |
205 | | - | |
| 205 | + | |
206 | 206 | | |
207 | 207 | | |
208 | 208 | | |
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
| 229 | + | |
| 230 | + | |
230 | 231 | | |
231 | 232 | | |
232 | 233 | | |
| |||
237 | 238 | | |
238 | 239 | | |
239 | 240 | | |
240 | | - | |
| 241 | + | |
241 | 242 | | |
242 | | - | |
243 | | - | |
| 243 | + | |
| 244 | + | |
244 | 245 | | |
245 | 246 | | |
246 | 247 | | |
| |||
267 | 268 | | |
268 | 269 | | |
269 | 270 | | |
270 | | - | |
271 | | - | |
272 | | - | |
273 | | - | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
274 | 275 | | |
275 | 276 | | |
276 | 277 | | |
| |||
283 | 284 | | |
284 | 285 | | |
285 | 286 | | |
286 | | - | |
| 287 | + | |
| 288 | + | |
287 | 289 | | |
288 | 290 | | |
289 | 291 | | |
290 | 292 | | |
291 | 293 | | |
| 294 | + | |
| 295 | + | |
292 | 296 | | |
293 | 297 | | |
294 | 298 | | |
| |||
305 | 309 | | |
306 | 310 | | |
307 | 311 | | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
308 | 318 | | |
309 | 319 | | |
310 | 320 | | |
| |||
0 commit comments