Repository navigation
Commit d97b665
docs(qa): author the v18 line's capabilities into the platform checklist (48 since:v18 items) (#23901)
Fixes #23879
Clause-②: no
## What this does
The platform checklist carried no `since: "v18"` item, so `node
scripts/checklist-select.mjs since:v18` resolved to nothing and a v18
release sweep re-ran only the P0 smoke. This PR authors **48 `since:
"v18"` items across 14 area files** — QA data only, no package touched.
Premise re-measured before writing: on origin/main `94114c1f`,
`since:v18 --json` returned `[]` (exit 1, "nothing matched"), and
`.changeset/pre/` held 714 consumed changesets (29 major, 363 minor, 322
patch). On this head the same selector resolves **48 runnable items**.
### How the delta was enumerated
Six independent read-only passes (SWEEP.md method, scoped to the v18
delta rather than a whole-ledger re-sweep):
- four over the 392 major/minor changesets (about 150 capability rows,
grouped);
- one over the 322 patch changesets (82 that add or change
runner-observable behaviour; the other ~240 are fixes of existing
behaviour or text);
- one over the ADR-0087 step-18 registries (`MAJOR_18_CONVERSIONS` 72,
`RETIRED_KEYS_BY_MAJOR[18]` 239, `RETIRED_DEFS_BY_MAJOR[18]` 170, 389
`18.*` semantic entries) and the landed ADR-0131 stages.
Rows were grouped into one item per capability family (each item lists
its contributing changesets in `source`). Every item carries its
permanent pins in `automated.ref` plus live steps against a booted
showcase. Every pin path and cited source file was checked to exist; all
87 new symbol anchors resolve (`symbol anchors: 822/832`, the 10 being
the existing named residual).
| area | new items |
|---|---|
| access-security | 9 |
| identity-auth | 5 |
| automation · cli | 5 each |
| api-backend · platform-core · records-forms | 4 each |
| studio-authoring | 3 |
| approvals · attachments-storage · integration-system | 2 each |
| ai · dashboards · i18n | 1 each |
P0: `identity-auth.default-organization-boot-invariant`,
`access-security.walled-environment-metadata-operator-only`,
`platform-core.v18-boot-refusals`, `cli.organization-ownership-ceremony`
(the 17 → 18 upgrade end to end — nothing in the ledger exercised it
before).
### No item — pure retirements already pinned
A retirement is refused at parse with its tombstone, so its honest
answer is the pin, not an item:
- element flat data-binding keys:
`packages/spec/src/ui/element-flat-binding-retirement.test.ts`
- manifest `permissions` string list:
`packages/spec/src/kernel/manifest-permissions-string-list.test.ts`
- the four catalog row objects:
`packages/qa/dogfood/test/wall-catalog-refusal.dogfood.test.ts`
- `sys_view_definition`:
`packages/metadata-protocol/src/plugin.metadata-objects-retired.test.ts`
- `sys_approval_token` generic door:
`packages/plugins/plugin-approvals/src/sys-approval-token-generic-door.integration.test.ts`
- email template `category` / `isSystem`:
`packages/spec/src/system/email-template-category-is-system-retirement.test.ts`
- view `provider: 'api'`:
`packages/spec/src/ui/view-data-api-provider-retirement.test.ts`
- document-family schemas:
`packages/spec/src/data/document-schemas-retirement.test.ts`
- `allowOrgOverride` → `allowEnvironmentOverlay`:
`packages/spec/src/kernel/metadata-type-registry-allow-org-override-retirement.test.ts`
- legacy `OBJECTSTACK_METADATA_WRITABLE`:
`packages/rest/src/rest-meta-managed-seal-hatch.test.ts`
- storage scope `public` (also asserted live in
`attachments-storage.upload-limits-scope-and-ownership`):
`packages/services/service-storage/src/upload-scope-vocabulary.test.ts`
- `sys_comment.reactions` column (also live in
`records-forms.comment-reactions-and-edit-stamps`):
`packages/plugins/plugin-audit/src/sys-comment-reactions-door.integration.test.ts`
- `externalSharingModel`, guest recipient, the i18n plugin's own routes,
bare `unique: true` on an index, and the 23421 / 23487 / 23488 / 23543
retirements: pins listed per row in the dev report on #23879.
The rest of the 72 step-18 conversions are covered generically by
`api-backend.enforce-or-remove-authoring-gates` /
`api-backend.retired-def-refusal` and the fixture replay in
`packages/spec/src/conversions/conversions.test.ts`.
## Run — `checklist-test since:v18` on this branch
Subject: framework `94114c1f` (the code is origin/main; this branch
changes ledger data only), fresh showcase boot on its own port and
ephemeral DB, `Tenancy: single`. Run sequentially by one runner; the
per-item verdict table is in the dev report on #23879, and the seat
files the `qa-run` record and the defect cards from it.
- **Tier 1 — every pin in `automated.ref`, 228 files across 32 packages:
all pass** (e.g. spec 24 files / 1546 tests, runtime 34 / 590, rest 20 /
802, objectql 23 / 402, qa/dogfood 15 / 181, cli 25 / 330 plus its one
`*.e2e.test.ts`, which packages/cli collects only under
`OS_TEST_TIERS=nightly` and which passes there, 2 tests).
- **Tier 2 — live API legs**: 1 item PASS, 45 PARTIAL (pins pass, live
legs not all driven, or walled / scratch-app / console legs not
provisioned this round), **2 FAIL**:
- `access-security.anonymous-floor-v18-doors` — anonymous `GET
/api/v1/keys` answers 405, not the 401 the 23225 contract states (twice,
fresh calls).
- `access-security.grant-table-write-contract` — an inverted validity
window is refused as an unevaluable predicate (`Unknown variable:
previous`), never with the `validity_window_order` rule's own message
(twice).
- **Console legs: blocked(environment).** `pnpm objectui:build` fails at
the pinned `.objectui-sha` `daeb77fc`: `[MISSING_EXPORT]
"checkPageComponentViewData" is not exported by
packages/spec/dist/ui/index.mjs` — the export was deleted in a35f7a6
(#23784) while the pinned objectui still imports it.
The first live pass also disproved four things in my own first draft of
the items; those were corrected before any record pinned their revision
(a view name is dotted `OBJECT.NAME`; the `/meta` version token is
served only on the `?state=draft` read; stock self-registration is
closed, so the member is created by the admin and lands held; the
dispatcher `/ui` domain is not mounted over HonoServer).
## Gates
Local, on head `2d410efa`, from `node scripts/pm/dispatch-gates.mjs
--commands --repo objectstack-ai/objectstack` (exit codes captured
before any pipe): all 13 exit 0 — `check-ci-filter-parity`,
`check-closing-keyword-parity` (+ `--self-test`),
`check-comment-mask-corpus`, `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` reconciliation: 13 derived, 13 run,
0 NOT-MEASURED (a derived zero).
**Changeset:** none — `docs/qa/**` sits outside every package's
published `files`, so nothing publishes (`skip-changeset`).
**Size:** 3,532 changed lines (all additions, all JSON), over the
3,000-line threshold, so this lands by an authorized review or a human
merge, not the queue on green alone.
## Acceptance notes
- **Stale existing items — not edited here** (#23878 is running the
existing items at the same time, and a revision bump mid-run would
orphan its pinned revisions). Each contradicts v18 behaviour:
- `cli.migrate-meta-codemod` — still asserts that no `--write` exists
(it ships, `packages/cli/test/migrate-meta-write.test.ts`), and still
names protocol major 17;
- `access-security.capability-declaration-lifecycle` — "bootstraps into
sys_capability" (retired);
- `automation.trigger-type-matrix`, `automation.time-relative-trigger`,
`platform-core.notification-center` — assume scheduled work fires on a
stock boot; on v18 it is off unless
`OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true` (this run's boot log says
so);
- `attachments-storage.attach-requires-parent-edit` — an outsider who
cannot read the parent now gets 404 `RECORD_NOT_FOUND`, not 403;
- `approvals.approver-resolution-matrix` — `admin_rescue` now opens on
the org administrators;
- `records-forms.validation-rule-type-matrix` — warning hits now come
back in `warnings[]`;
- `cli.scaffold-first-run` — skills now sync from `@objectstack/skills`;
- `automation.trigger-type-matrix` also defers the body-only hook
refusal that has since landed;
- `platform-core.shell-nav-personalization` — drag reorder of the app
menu was removed (probably stale; not checked against its steps);
- `api-backend.date-range-preset-matrix` — rolling presets now end on
today.
- **Readings carried from the seat post, verified, not touched** (my
edits do not reach those items):
`records-forms.concurrent-edit-conflict` cites
`packages/rest/src/approvals-routes.ts#mapping` for `CONCURRENT_UPDATE`
→ 409, but that map has no `CONCURRENT_UPDATE` row (the mapping lives in
`rest-server.ts`); `access-security`'s record-shares source text says
the family is "registered inline, under no registrar of its own", while
`packages/rest/src/sharing-routes.ts` documents and serves it under
`RestServer#registerSharingEndpoints`.
- ADR-0131 C8 has not landed: `SqlDriver` `applyTenantScope` still
carries `.orWhereNull(field)`. The ADR puts that removal on the v18 line
after C7, which has landed.
- `POST /api/v1/keys` drops an unrecognised body key without a word (a
camelCase `expiresAt` 400 days out mints a 90-day key and answers 201);
the response echoes the real `expires_at`, and the drop is in the safe
direction.
- Pins by registry id: 12 of the 72 step-18 conversions and 297 of the
389 `18.*` semantic entries are named by no test (excluding the 169-id
guidance roster); two retirements have no pin found at all (the
discard-overlay route, `os meta resync`).
Not in this PR: running the existing items (#23878); fixing what the run
found (one card each, filed by the seat from the dev report).
---
_Generated by [Claude
Code](https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent cf07168 commit d97b665
14 files changed
Lines changed: 3535 additions & 0 deletions
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
792 | 792 | | |
793 | 793 | | |
794 | 794 | | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
795 | 863 | | |
796 | 864 | | |
797 | 865 | | |
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1447 | 1447 | | |
1448 | 1448 | | |
1449 | 1449 | | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
| 1530 | + | |
| 1531 | + | |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
| 1536 | + | |
| 1537 | + | |
| 1538 | + | |
| 1539 | + | |
| 1540 | + | |
| 1541 | + | |
| 1542 | + | |
| 1543 | + | |
| 1544 | + | |
| 1545 | + | |
| 1546 | + | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
| 1556 | + | |
| 1557 | + | |
| 1558 | + | |
| 1559 | + | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
| 1572 | + | |
| 1573 | + | |
| 1574 | + | |
| 1575 | + | |
| 1576 | + | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
| 1590 | + | |
| 1591 | + | |
| 1592 | + | |
| 1593 | + | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
1450 | 1597 | | |
1451 | 1598 | | |
1452 | 1599 | | |
0 commit comments