Repository navigation
docs(qa): author the v18 line's capabilities into the platform checklist (48 since:v18 items) - #23901
Conversation
48 `since: "v18"` items across 14 area files, grouped from the 714 consumed changesets under .changeset/pre/, the ADR-0087 step-18 registries and the landed ADR-0131 stages. Each item carries its permanent pins in automated.ref and the live steps that drive the capability against a booted showcase. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8
Driving the new items on a fresh showcase boot showed four authoring errors in them: a view name is dotted OBJECT.NAME, the /meta version token is served on the ?state=draft read only, stock self-registration is closed so the member is created by the admin (and lands held), and the dispatcher /ui domain is not mounted over HonoServer. The grant window clause now asserts the rule's own violation, not any 400. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8
…v18 items Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8
…8-checklist-items
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8
维护者速读改了什么:测试清单( 为什么改:您的原话「v18 新能力在测试清单里一项都没有。 这个也应该派卡处理」(#23879)。 风险与代价(含回滚):零运行时影响,纯 QA 数据。风险是测试项本身写错,以后会把对的判成错;所以这批项已经实跑过一遍(1 PASS / 45 PARTIAL / 2 FAIL),dev 在实跑中自己修正了 4 处写错的细节。两个 FAIL 是真产品缺陷,已立卡 #23909、#23910。回滚 = revert 本 PR。 席位意见:ACCEPT。门禁全绿,232 个测试 pin 文件全部存在, 你要做的:批准(或直接合并)本 PR。 席位核对 · ACCEPTSeat
Generated by Claude Code |
|
Maintainer's word on the PR line · director seat (summon #43 continuation 2,
Generated by Claude Code |
Fixes #23879
Clause-②: no
What this does
The platform checklist carried no
since: "v18"item, sonode scripts/checklist-select.mjs since:v18resolved to nothing and a v18 release sweep re-ran only the P0 smoke. This PR authors 48since: "v18"items across 14 area files — QA data only, no package touched.Premise re-measured before writing: on origin/main
94114c1f,since:v18 --jsonreturned[](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):
MAJOR_18_CONVERSIONS72,RETIRED_KEYS_BY_MAJOR[18]239,RETIRED_DEFS_BY_MAJOR[18]170, 38918.*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 inautomated.refplus 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).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:
packages/spec/src/ui/element-flat-binding-retirement.test.tspermissionsstring list:packages/spec/src/kernel/manifest-permissions-string-list.test.tspackages/qa/dogfood/test/wall-catalog-refusal.dogfood.test.tssys_view_definition:packages/metadata-protocol/src/plugin.metadata-objects-retired.test.tssys_approval_tokengeneric door:packages/plugins/plugin-approvals/src/sys-approval-token-generic-door.integration.test.tscategory/isSystem:packages/spec/src/system/email-template-category-is-system-retirement.test.tsprovider: 'api':packages/spec/src/ui/view-data-api-provider-retirement.test.tspackages/spec/src/data/document-schemas-retirement.test.tsallowOrgOverride→allowEnvironmentOverlay:packages/spec/src/kernel/metadata-type-registry-allow-org-override-retirement.test.tsOBJECTSTACK_METADATA_WRITABLE:packages/rest/src/rest-meta-managed-seal-hatch.test.tspublic(also asserted live inattachments-storage.upload-limits-scope-and-ownership):packages/services/service-storage/src/upload-scope-vocabulary.test.tssys_comment.reactionscolumn (also live inrecords-forms.comment-reactions-and-edit-stamps):packages/plugins/plugin-audit/src/sys-comment-reactions-door.integration.test.tsexternalSharingModel, guest recipient, the i18n plugin's own routes, bareunique: trueon an index, and the 23421 / 23487 / 23488 / 23543 retirements: pins listed per row in the dev report on qa(checklist): no ledger item carriessince: "v18"— author the v18 line's new and changed capabilities into the platform checklist, then run them #23879.The rest of the 72 step-18 conversions are covered generically by
api-backend.enforce-or-remove-authoring-gates/api-backend.retired-def-refusaland the fixture replay inpackages/spec/src/conversions/conversions.test.ts.Run —
checklist-test since:v18on this branchSubject: 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 theqa-runrecord and the defect cards from it.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 underOS_TEST_TIERS=nightlyand which passes there, 2 tests).access-security.anonymous-floor-v18-doors— anonymousGET /api/v1/keysanswers 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 thevalidity_window_orderrule's own message (twice).pnpm objectui:buildfails at the pinned.objectui-shadaeb77fc:[MISSING_EXPORT] "checkPageComponentViewData" is not exported by packages/spec/dist/ui/index.mjs— the export was deleted in a35f7a6 (feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #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/metaversion token is served only on the?state=draftread; stock self-registration is closed, so the member is created by the admin and lands held; the dispatcher/uidomain is not mounted over HonoServer).Gates
Local, on head
2d410efa, fromnode 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.--ranreconciliation: 13 derived, 13 run, 0 NOT-MEASURED (a derived zero).Changeset: none —
docs/qa/**sits outside every package's publishedfiles, 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
all, 272 items) and extract every new failure into its own card #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--writeexists (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 unlessOS_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 404RECORD_NOT_FOUND, not 403;approvals.approver-resolution-matrix—admin_rescuenow opens on the org administrators;records-forms.validation-rule-type-matrix— warning hits now come back inwarnings[];cli.scaffold-first-run— skills now sync from@objectstack/skills;automation.trigger-type-matrixalso 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.records-forms.concurrent-edit-conflictcitespackages/rest/src/approvals-routes.ts#mappingforCONCURRENT_UPDATE→ 409, but that map has noCONCURRENT_UPDATErow (the mapping lives inrest-server.ts);access-security's record-shares source text says the family is "registered inline, under no registrar of its own", whilepackages/rest/src/sharing-routes.tsdocuments and serves it underRestServer#registerSharingEndpoints.SqlDriverapplyTenantScopestill carries.orWhereNull(field). The ADR puts that removal on the v18 line after C7, which has landed.POST /api/v1/keysdrops an unrecognised body key without a word (a camelCaseexpiresAt400 days out mints a 90-day key and answers 201); the response echoes the realexpires_at, and the drop is in the safe direction.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