Repository navigation
QA run · platform-core.activation-ledger-row-contract (1/1) · fb82f9b1 · 2026-10-16 · 1 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23999
Description
Run record for the re-run #23950 asks for, after its six stale clauses were re-pointed. Runner: an os-dev subagent dispatched by the domain:devx seat 2 PM (session session_016PVjjuVPte5XEJvaQx1E4t). Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md. Executed sequentially (no subagent tool in this runner).
Environment fingerprint
- framework:
fb82f9b180bcc6af04ce8d36153fd52d2eb6845c, the tip of branchclaude/issue-23950-checklist-stale-clausesat run time. Its product tree isorigin/main022c6e799; the branch addsdocs/qa/platform-checklist/areas/*.jsononly. Built withpnpm install --frozen-lockfile && pnpm build(75/75 tasks green). .objectui-sha:daeb77fc84dd824e74c95b87cdede85afdb248e7(API-only item).- boot:
OS_PORT=47313 objectstack dev --ui --seed-admin -p 47313 -d file:(run dir)/ledger/data.dbfromexamples/app-showcase. The run stopped that server for the direct-DB legs (better-sqlite3 on the same file) and restarted it on the same DB. - persona: the seeded dev admin.
- timestamps: 2026-10-16, 16:39Z to 16:41Z.
Scope
Selector platform-core.activation-ledger-row-contract resolves to 1 runnable item: platform-core.activation-ledger-row-contract at revision 3, P2, surface api. The item text was read at branch head c4bf2ba4e.
Tier 1 pins (RUNNER rule 6), each green:
pnpm --filter @objectstack/objectql exec vitest run --maxWorkers=2 src/action-activation.test.ts: 18 passed.pnpm --filter @objectstack/service-automation exec vitest run --maxWorkers=2 src/flow-activation-ledger.test.ts: 47 passed.pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=1 test/packaged-activation-ledger-reach.dogfood.test.ts: 11 passed.
Writer list re-derived first, as the knownGap asks. The METADATA_TYPE literals are 'flow' (service-automation flow-activation-store.ts) and 'action' (objectql action-activation.ts). The one new ObjectStoreMetadataActivationStore( call site is runtime catalog-activation.ts, its :type closed to position / permission. No other insert or update into sys_metadata_activation exists outside the shared store in core/src/utils/metadata-activation-store.ts. Three writer sites write four values, as revision 3 states.
Per-clause verdicts
| item | # | clause (short) | verdict | evidence |
|---|---|---|---|---|
| platform-core.activation-ledger-row-contract | 0 | reads open, generic writes refused | pass | GET /api/v1/data/sys_metadata_activation 200; data-API POST, PATCH /ID, DELETE /ID each 405 OBJECT_API_METHOD_NOT_ALLOWED, naming the operation with allowed: [get, list, aggregate, search, export]; the re-read equals the pre-probe read |
| platform-core.activation-ledger-row-contract | 1 | one row per (metadata_type, name); duplicates refused | pass | index CREATE UNIQUE INDEX uniq_sys_metadata_activation_metadata_type_name on sys_metadata_activation (metadata_type, name); a direct INSERT of a second (position, legal) row is refused: UNIQUE constraint failed: sys_metadata_activation.metadata_type, sys_metadata_activation.name |
| platform-core.activation-ledger-row-contract | 2 | no tenant column; a row naming one cannot land | pass | API row key set active, created_at, created_by, id, metadata_type, name, package_id, updated_at, updated_by, with no organization_id key; PRAGMA table_info gives id, created_at, updated_at, created_by, updated_by, metadata_type, name, package_id, active, __search, nothing tenant-shaped (__search is the search column); INSERT naming organization_id is refused: table sys_metadata_activation has no column named organization_id; the control INSERT without it lands (changes=1) and is deleted; the table is byte-identical before and after the probes (4 rows) |
| platform-core.activation-ledger-row-contract | 3 | re-enable updates, never deletes | pass | after all four switches went back on: the same 4 ids, the same count, every row active: true |
| platform-core.activation-ledger-row-contract | 4 | scope wall: flow, action, position, permission only | pass | the four OFF switches each answered 200: flow toggle showcase_task_completed, action _activation/showcase_task/showcase_mark_done, security/_activation/position/legal, security/_activation/permission/showcase_auditor. That left 4 rows, distinct metadata_type = {action, flow, permission, position}. Door probes: POST /api/v1/security/_activation/capability/showcase.export_data {"enabled": false} 400 VALIDATION_ERROR Path must be /security/_activation/:type/:name, with :type one of position, permission; …/position/everyone 400 Position 'everyone' is an audience anchor: … not switchable through this door (ADR-0090 D5/D9). Row count unchanged after both |
| platform-core.activation-ledger-row-contract | 5 | durable: rows survive restart; absence reads as active | pass | the ledger was empty on the fresh boot while every switch served as active; after the stop, the direct-DB probes and a restart on the same DB, the 4 rows read back byte-identical (JSON compare) to the pre-stop read |
Derived item verdict
platform-core.activation-ledger-row-contract r3: pass (6 of 6 clauses).
Timing: about 2 minutes of legs, on the build shared across this re-run's five records.
Checklist-accuracy findings, if any, close out on the wave anchor #23878.
Activity
objectstack-fleet commentedon Oct 17, 2026
Close-out (
domain:devxseat 2): every clause PASS; nothing to extract. The re-pointed item landed with #24000 (e18b23fac5), Fixes #23950.Generated by Claude Code