Repository navigation
Description
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).
Part of #27377 (wave 4, W4-C2a)
Selector release-18.3.0-w4-c2a: Tier 1 half A of the 18.3.0 release-candidate sweep, wave 4 — the 63 pinned, non-P0 items in access-security, ai, api-backend, approvals, attachments-storage, automation and cli, as listed by the wave-4 brief (computed from the ledger at the subject). Release-candidate rerun (SKILL §5 trigger 1). Every item has a verdict: 21 PASS / 40 PARTIAL / 2 FAIL / 0 BLOCKED / 0 NOT-RUN. No item is planned.
Coverage mode: this card ran the pins, not the live legs. The wave-4 brief scopes C2a to "build closure only; run each item's automated.ref in per-area vitest batches". So a clause whose oracle sits on a live or browser leg that no pin drives is skipped here, and a pin that stops below its clause's oracle layer scores that clause partial (RUNNER rule 6). Wave 3 (#27409) drove those live legs, so most PASS→PARTIAL deltas below are this coverage mode, not regressions. The two FAILs are real disagreements between a pin's measured answer and the clause text.
Environment fingerprint
- Subject: framework
7fa9873f38f7a0158e3ce17338dcc0f446b113e3(detached, never followed main or the Version PR chore: version packages #26517).ui/is in the same tree; the console Vite dev server ran from it. - Build:
npm_config_nodedir=/opt/node22 pnpm install --frozen-lockfile(30 s), thenpnpm exec turbo run build --concurrency=2underscripts/pm/os-verify-lock.sh: 118/118 tasks, 0 cached, 15m15s.check-dev-prereqs: 106 package artifacts present. - Node v22.23.4, pnpm 10.31.0, Playwright chromium from
/opt/pw-browsers. 4 CPUs, ~15 GB. - Pins: one vitest invocation per package, files deduplicated across areas,
--maxWorkers=1(ui jsdom suites from theui/root at 2), JSON reporter per package; cli*.e2e.test.*in its own invocation underOS_TEST_TIERS=nightly. Two lanes in parallel (dogfood | every other package). - Live boot (for the two live Playwright pins and the off-clause probes):
OS_PORT=41421 OS_STORAGE_LOCAL_ROOT=/tmp/w4c2a/e2e/uploads setsid pnpm -C examples/app-showcase exec objectstack dev --ui --seed-admin -p 41421 -d file:/tmp/w4c2a/e2e/data.db; console dev serverDEV_PROXY_TARGET=http://localhost:41421 vite --port 41496(proxy mode,VITE_SERVER_URLunset — see the probe section). - Scaffold replay (cli.scaffold-first-run): the
scaffold-localjob of.github/workflows/scaffold-e2e.ymlreplayed in/tmp/w4c2a/scaffold, server on 48080. - Seed:
--seed-admin(admin@objectos.ai) and the showcase demo personas (phone.demo, password showcase123). - Times: 2026-11-02 03:35Z to 04:20Z.
- Execution: one runner session ran every pin, spec and replay itself. Four scoring subagents (effort high) then mapped the captured test output to clauses per area, reading each pin's harness for its layer; their verdicts were checked against the evidence before this record was written (the two FAILs and one blocked set were re-derived by the runner, see below).
Scope: selector and the revision each verdict is valid for
- access-security (17): record-access-explain r4, fls-mask-and-strip r8, public-form-withdrawal-layers r5, activation-write-operator-gate r12, platform-owner-email-anchor r13, me-permissions-aggregation-parity r4, record-view-read-audit r7, share-link-landing-page r6, anonymous-floor-v18-doors r5, meta-authoring-trail-and-audience-gates r4, security-catalog-activation-and-clone-doors r3, security-catalog-one-holder-and-boot-report r4, grant-table-write-contract r8, parent-and-organization-write-guards r7, deployment-tables-platform-only r4, share-link-combined-gates r5, org-admin-assignment-boundary r2
- ai (5): mcp-http-surface r8, mcp-validate-expression r6, skill-instructions-mcp-prompts r4, mcp-oauth-private-host-transport r6, mcp-coded-refusals-and-runtime-exposure r4
- api-backend (11): bulk-write-contract r6, declarative-endpoint-execution r6, action-activation-door-contract r7, rest-crud-config-contract r6, rest-batch-config-contract r6, rest-metadata-config-contract r8, rest-route-generation-tombstones r4, second-object-exposure-and-internal-fields r3, data-request-shape-and-query-arity r4, meta-read-doors-v18 r4, error-sentences-and-unique-violation-wire-code r5
- approvals (4): email-action-token-door r10, status-mirror-field r6, request-page-reply-and-reader-visibility r5, act-door-and-admin-rescue-slate r5
- attachments-storage (10): presigned-upload-roundtrip r3, download-authz-both-sides r10, read-inherits-parent-rls r9, attach-requires-parent-edit r9, sys-file-status-pipeline r5, orphan-tombstone-reap r4, upload-session-abort r8, inline-grid-receipt-cells r5, upload-limits-scope-and-ownership r4, chunked-upload-integrity r8
- automation (10): trigger-type-matrix r10, screen-flow-roundtrip r7, durable-suspend-restart r4, paused-run-trigger-record-masked r5, setup-packaged-automation-board r10, flow-registration-verdict-on-read r2, flow-authoring-refusals-v18 r5, flow-run-semantics-v18 r3, inbound-hook-timestamped-signature r2, scheduled-work-opt-in r2
- cli (6): scaffold-first-run r7, dev-automigrate-policy r8, migrate-meta-write-stored-and-all r3, meta-package-flags-and-explain r3, validate-v18-authoring-verdicts r2, verify-derived-proof-families r3
Tier 1 pins
236 distinct test files across 32 packages: 6749 passed, 0 failed, 1 skipped. Every file a ref names (after resolving bare basenames to their package path) exists at the subject and collected tests, except the three automation.setup-packaged-automation-board files retired by #28785 (below). The one skip is by design: attachments-permission-matrix case (g), cross-tenant isolation, on a single-organization boot.
| area | packages | file runs | passed | skipped |
|---|---|---|---|---|
| access-security | 19 | 76 | 1991 | 0 |
| ai | 6 | 16 | 283 | 0 |
| api-backend | 7 | 46 | 1582 | 0 |
| approvals | 5 | 18 | 573 | 0 |
| attachments-storage | 6 | 27 | 714 | 1 |
| automation | 11 | 29 | 1047 | 0 |
| cli | 7 | 28 | 682 | 0 |
(Per-area rows count a file shared by two areas twice; the 236 / 6749 total counts it once.)
Live Playwright pins (from ui/, playwright.live.config.ts, against the boot above):
ui/e2e/live/screen-flow.spec.ts: 1 passed, twice (23.8 s, 15.8 s), with the dev server in proxy mode. Four earlier runs withVITE_SERVER_URLalso set failed; that was the topology, not the product (probe section).ui/e2e/live/grid-file-upload.spec.ts: 1 passed, twice (17.2 s, 15.1 s).
cli.scaffold-first-run (automated.kind: ci, ref .github/workflows/scaffold-e2e.yml): the scheduled Scaffold E2E run at the subject (actions run 41383199590, success) is the registry canary only — it scaffolds the published create-objectstack@latest — so it is not subject evidence. The repo-dist job was replayed locally instead: scaffold from the subject's create-objectstack exit 0; npm install exit 0 (registry @objectstack/* 18.2.0, no fallback branch); validate 0; build 0; npm test 0; os start --artifact healthy on the 4th probe, /api/v1/health 200 and /api/v1/ready 200; skills probe set-equal to the curated skills/ (11 names) and the repo-root listing "Found 11 skills" with no dogfood-verification. Not replayed: the pinned-shape (full install) step and the docker steps. Because the project installs the published 18.2.0 runtime, A0–A3 score partial: they judged the subject's scaffolder over the published runtime, not the subject's runtime.
Per RUNNER rule 6 each clause row names the layer its pin drives. HTTP-in-process (a booted showcase or stack answering through Hono app.request) counts as the HTTP layer, as in wave 3.
Reproduction rules
1. api-backend.rest-metadata-config-contract · A2 · FAIL (product defect)
The metadata.endpoints.item switch now unmounts thirteen routes; its published describe() and the clause enumerate twelve. The thirteenth is GET /api/v1/meta/app/:appId/bundle, added by #28287 (8441a01, part of #27627).
- At the subject,
cd packages/rest && pnpm exec vitest run src/rest-config-mount-table.pin.test.ts→ passes. Itsmetadata.endpoints.itemrow (the "[Seam: one request opens a record — a record-page payload (record + related counts and first rows + field access + lock) and an app-scoped metadata bundle, so a record open is 2–3 requests instead of 23–45 serialized in three stages #27627] Thirteen" comment) asserts the per-switch route-table diff against the all-true baseline is exactly 13 routes, includingGET {prefix}/app/:appId/bundle. The pin builds a real RestServer route table. - Read
packages/spec/src/api/rest-server.zod.ts,metadata.endpoints.item: itsdescribe()lists GET/PUT/DELETE/meta/:type/:name,/references,/layers, the six history routes andGET /meta/book/:name/tree— twelve — and no bundle route. The same file's header says thedescribe()strings are exhaustive and a moved radius moves the table and the declaration in the same PR.
- Expected (clause A2 verify): the measured diff equals the declared radius; "a diff that disagrees with them is a defect in the code or in the declaration".
- Actual: measured 13, declared 12. The code is consistent with the switch's meaning (the bundle is the item read's own answer, per the pin comment), so the defect is in the declaration. The clause's "twelve mounts" is stale the same way (accuracy line for [sweep] v18.3.0 release test sweep #27377).
- Reproduced twice at the subject: the pin lane run and a second standalone run of the file, both passing with the 13-route assertion.
2. api-backend.error-sentences-and-unique-violation-wire-code · A1 · FAIL (stale spec)
The clause pins the pre-ruling shape of an undeclared hook refusal.
cd packages/qa/dogfood && pnpm exec vitest run test/error-sentences-live.dogfood.test.ts→ passes. Its acceptance[1] cases drivePOST /data/errsent_budgetand/createMany(in-process HTTP, scratch app with a sandboxed refusingbeforeInserthook) and assert 400, the hook sentence verbatim, nothing written, andbody.code === 'HOOK_ABORTED'("the hook declared no code, so the /data door answers the ruled HOOK_ABORTED").cd packages/rest && pnpm exec vitest run src/rest-write-route-hook-refusal-sentence.ledger.test.ts→ passes; the nested-envelope rows (sharing rules, suggested bindings, approvals) answerHOOK_ABORTED_400 = { status: 400, code: 'HOOK_ABORTED' }, "the floor's VALIDATION_ERROR before".
- Expected (clause A1, r5): on a /data door the envelope carries no
code; the nested rows answer 400 VALIDATION_ERROR. - Actual:
code: HOOK_ABORTEDon both, by error codes: an undeclared hookonErrorabort answers the data door with a code-less 400; give it a ledgered ADR-0112 code (#27508 code half) #27597 (an undeclared hook abort gets a ledgered ADR-0112 code, the code half of rest: a hook onError abort answers the data door with a 400 that carries no error code, and the server logs it as an unhandled SandboxError #27508) and rest/runtime: an undeclared hook abort still answers VALIDATION_ERROR on the doors that resolve through resolveThrownHttpError (package publish, /actions) after HOOK_ABORTED lands #27672 (the resolveThrownHttpError doors). The product and both pins follow those closed cards; the clause and its verify were not re-pointed. Status and sentence still hold. - Reproduced twice at the subject: the pin lane run and a second standalone run of both files, both passing with the HOOK_ABORTED assertions.
Derived item verdicts
- PASS (21): access-security.public-form-withdrawal-layers, access-security.activation-write-operator-gate, access-security.platform-owner-email-anchor, access-security.record-view-read-audit, access-security.anonymous-floor-v18-doors, access-security.meta-authoring-trail-and-audience-gates, access-security.security-catalog-activation-and-clone-doors, access-security.security-catalog-one-holder-and-boot-report, access-security.parent-and-organization-write-guards, access-security.deployment-tables-platform-only, access-security.share-link-combined-gates, access-security.org-admin-assignment-boundary, api-backend.declarative-endpoint-execution, api-backend.rest-crud-config-contract, api-backend.rest-batch-config-contract, api-backend.rest-route-generation-tombstones, api-backend.second-object-exposure-and-internal-fields, api-backend.data-request-shape-and-query-arity, api-backend.meta-read-doors-v18, attachments-storage.chunked-upload-integrity, cli.meta-package-flags-and-explain.
- FAIL (2): api-backend.rest-metadata-config-contract (A2, product defect); api-backend.error-sentences-and-unique-violation-wire-code (A1, stale spec).
- PARTIAL (40), each with what kept it below PASS:
- access-security.record-access-explain: A1 pass-below-oracle (engine, no HTTP door); A0, A2, A3, A4 skipped (live/browser legs)
- access-security.fls-mask-and-strip: A4 pass-below-oracle (scratch set, budget only, no browser leg); A3 skipped (browser)
- access-security.me-permissions-aggregation-parity: A2/A3/A5/A6 pass-below-oracle (unit or member-half only); A0/A1/A4 skipped (manual live parity)
- access-security.share-link-landing-page: A0 pass-below-oracle (ui-unit fold only); A1-A4 skipped (browser legs)
- access-security.grant-table-write-contract: A4 pass-below-oracle (engine pin; walled HTTP door not driven)
- ai.mcp-http-surface: A0,A1,A3,A4,A5 rest on dispatcher units / fake-service sockets or partial assertions; served-door legs not driven (pins-only card)
- ai.mcp-validate-expression: A0,A1,A3 plugin-unit only (served MCP door not driven); A2 live-only
- ai.skill-instructions-mcp-prompts: A0–A3 network oracles carried by a plugin unit only; A3 non-projected half and N1 unpinned
- ai.mcp-oauth-private-host-transport: every clause is a booted server's discovery answer or boot log; both pins are plugin units (ref says neither scores a clause)
- ai.mcp-coded-refusals-and-runtime-exposure: A1–A3 api oracles reached only at plugin-unit / engine (stdio); HTTP door legs not driven
- api-backend.bulk-write-contract: A0/A3 below oracle; A1,A2,A4,A5 live-only
- api-backend.action-activation-door-contract: A4: metadata-plane 503 arm has no stock door and no pin (knownGaps)
- approvals.email-action-token-door: A0,A1,A3,A4 pinned in part (each verify names its unpinned half); A5 blocked(fixture)
- approvals.status-mirror-field: A0,A1 below api (unit/engine only); A2 SLA half unit-only; A3,A4 live legs not driven
- approvals.request-page-reply-and-reader-visibility: A1-A3 pinned below the api door only; A4 browser leg not driven
- approvals.act-door-and-admin-rescue-slate: A1 self-hosted PUT 404 arm (os dev boot) is a live leg no pin holds
- attachments-storage.presigned-upload-roundtrip: A0,A2,A4 pinned in half; A1,A3 hand-driven legs not driven
- attachments-storage.download-authz-both-sides: A2 uploader-bypass + bytes legs unpinned; A4 component-only (browser leg not driven)
- attachments-storage.read-inherits-parent-rls: A3 probe half pinned only at engine/unit (knownGaps[2])
- attachments-storage.attach-requires-parent-edit: A2 uploader leg unpinned; A5 engine-only (REST PATCH not driven)
- attachments-storage.sys-file-status-pipeline: A0 pending read unpinned; A1,A2,A5 route-handler/unit only
- attachments-storage.orphan-tombstone-reap: A1 failure leg unit-only
- attachments-storage.upload-session-abort: A0 live leg not driven; A3 warn text unasserted; A4,A5 route-handler unit only
- attachments-storage.inline-grid-receipt-cells: A2 upload trace and A3 sys_file stamp/batch-success unasserted by the pin
- attachments-storage.upload-limits-scope-and-ownership: A1 no sys_file count; A2 route-handler only; A5 engine only
- automation.trigger-type-matrix: A0-A3 skipped (live trigger runs); A4 network half only, run reads not pinned
- automation.screen-flow-roundtrip: A1, A4, A6 skipped; A0, A3 network half only; A5 engine only (HTTP 400 missing)
- automation.durable-suspend-restart: A2, A3 skipped; A0/A1/A4 generic fixture half only, A1 cold boot is in-process not a spawned server
- automation.paused-run-trigger-record-masked: A0, A1 member persona not driven; A3 in-process cold boot
- automation.setup-packaged-automation-board: item describes the retired Packaged automation page (feat(setup): retire Packaged automation's flows half; Packaged actions is its own Setup entry #28785); only component-layer actions analogues for A3/A4
- automation.flow-registration-verdict-on-read: A1, A2 pinned at engine/protocol, HTTP door missing
- automation.flow-authoring-refusals-v18: A1-A3 need CLI + boot legs
- automation.flow-run-semantics-v18: A1 skipped (live read-back)
- automation.inbound-hook-timestamped-signature: A1 below the booted door; A2 live only
- automation.scheduled-work-opt-in: A1, A2 need served boots
- cli.scaffold-first-run: runtime half measured on registry 18.2.0 not subject; scaffolder's own skills install and docker steps not replayed
- cli.dev-automigrate-policy: A0-A3 below the boot-log/schema-dump oracle (driver or partial-scope CLI pins)
- cli.migrate-meta-write-stored-and-all: A3 at formatter unit, A4 at library layer
- cli.validate-v18-authoring-verdicts: A1, A2 need CLI legs
- cli.verify-derived-proof-families: A1 skipped (showcase run)
Delta against wave 3 (#27409, at c4c515a)
- PASS→PASS: 21 · PARTIAL→PARTIAL: 11 · PASS→PARTIAL: 29 · PASS→FAIL: 2. No PARTIAL→PASS.
- PASS→FAIL (2): the two reproduction rules above. Both moved after wave 3's subject: feat(rest): one request loads an app's metadata — GET /meta/app/{appId}/bundle, per caller, with an ETag #28287 landed 2026-10-31, error codes: an undeclared hook
onErrorabort answers the data door with a code-less 400; give it a ledgered ADR-0112 code (#27508 code half) #27597/rest/runtime: an undeclared hook abort still answers VALIDATION_ERROR on the doors that resolve through resolveThrownHttpError (package publish, /actions) after HOOK_ABORTED lands #27672 after 10-29. - PASS→PARTIAL (29): coverage mode — wave 3 scored these from live or browser legs this pins-only card did not drive. No pin regressed: 0 failed tests. Items: access-security.record-access-explain, access-security.fls-mask-and-strip, access-security.me-permissions-aggregation-parity, access-security.share-link-landing-page, access-security.grant-table-write-contract, ai.mcp-http-surface, ai.mcp-validate-expression, ai.skill-instructions-mcp-prompts, ai.mcp-coded-refusals-and-runtime-exposure, api-backend.bulk-write-contract, approvals.act-door-and-admin-rescue-slate, attachments-storage.presigned-upload-roundtrip, attachments-storage.download-authz-both-sides, attachments-storage.attach-requires-parent-edit, attachments-storage.inline-grid-receipt-cells, attachments-storage.upload-limits-scope-and-ownership, automation.trigger-type-matrix, automation.screen-flow-roundtrip, automation.durable-suspend-restart, automation.flow-registration-verdict-on-read, automation.flow-authoring-refusals-v18, automation.flow-run-semantics-v18, automation.inbound-hook-timestamped-signature, automation.scheduled-work-opt-in, cli.scaffold-first-run, cli.dev-automigrate-policy, cli.migrate-meta-write-stored-and-all, cli.validate-v18-authoring-verdicts, cli.verify-derived-proof-families.
- Changed cause, same verdict: automation.setup-packaged-automation-board stays PARTIAL, but its Setup board was retired at the subject by feat(setup): retire Packaged automation's flows half; Packaged actions is its own Setup entry #28785 (ADR-0146 D11: the flows half moved to Studio,
nav_packaged_automationbecamenav_packaged_actions); five clauses areblocked(dependency, #28785), only the actions-section component pins (A3, A4) still run. - Not compared: the ten wave-3 items not in this card's list (now P0, unpinned, or in another card per the brief).
Off-clause probes (RUNNER rule 8)
About 10 min on the live boot, after the pins had run. Doors: POST /security/explain, POST /actions/showcase_task/:action, POST /automation/:flow/trigger, /automation/:flow/runs/:id/resume and the run read, POST /storage/upload/presigned, GET /data/showcase_task with $top. Personas: admin, and the demo member phone.demo. Boundary classes: empty strings, unknown ids, an unknown operation, a negative and a non-numeric $top, a negative size, and a member resuming and reading the admin's suspended screen-flow run.
- Every answer was a coded 4xx naming the problem (400 VALIDATION_FAILED / VALIDATION_ERROR / INVALID_REQUEST, 404 RECORD_NOT_FOUND / OBJECT_NOT_FOUND / RESOURCE_NOT_FOUND / RUN_NOT_FOUND, 403 PERMISSION_DENIED for the member's explain-of-another-user, resume and run read). No product defect found.
- One environment finding: with
VITE_SERVER_URLset to the API origin (as the dogfood-verification skill §2 prescribes for the HMR console), every action and flow click POSTs to that off-origin URL throughcreateAuthenticatedFetch({ sameOriginOnly: true })without the bearer, and answers 401 UNAUTHENTICATED; screen-flow.spec.ts failed 4/4 that way. That is ruled behaviour (objectui#5702, maintainer ruling 2026-08-22, app-shell CHANGELOG "split-host setups"), so it is not extracted; the skill's line is an accuracy finding for [sweep] v18.3.0 release test sweep #27377.
Time: environment prep vs testing
- Environment prep: install 30 s + full build 15m15s (03:35Z–03:51Z), plus about 3 min of boots (showcase, Vite).
- Testing: pin lanes 03:51Z–04:05Z (14 min wall; dogfood 53 files in 525 s), live specs and the scaffold replay about 6 min, probes about 10 min, clause scoring about 7 min wall (four scorers in parallel, ~24 agent-minutes).
- Ratio about 1 to 2. Wall clock about 45 min to verdicts.
Per-clause verdicts
One row per acceptance clause, with the layer and one line of text evidence. partial = the pin passed below the clause's oracle layer; skipped = a live/browser leg outside this pins-only card. Each negative[] entry was checked under the clause it guards. The tables are in the comments below, one per area group.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner
session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).Per-clause verdicts (1/4): access-security.
access-security
Derived: record-access-explain PARTIAL · fls-mask-and-strip PARTIAL · public-form-withdrawal-layers PASS · activation-write-operator-gate PASS · platform-owner-email-anchor PASS · me-permissions-aggregation-parity PARTIAL · record-view-read-audit PASS · share-link-landing-page PARTIAL · anonymous-floor-v18-doors PASS · meta-authoring-trail-and-audience-gates PASS · security-catalog-activation-and-clone-doors PASS · security-catalog-one-holder-and-boot-report PASS · grant-table-write-contract PARTIAL · parent-and-organization-write-guards PASS · deployment-tables-platform-only PASS · share-link-combined-gates PASS · org-admin-assignment-boundary PASS
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner
session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).Per-clause verdicts (2/4): ai, api-backend.
ai
Derived: mcp-http-surface PARTIAL · mcp-validate-expression PARTIAL · skill-instructions-mcp-prompts PARTIAL · mcp-oauth-private-host-transport PARTIAL · mcp-coded-refusals-and-runtime-exposure PARTIAL
api-backend
Derived: bulk-write-contract PARTIAL · declarative-endpoint-execution PASS · action-activation-door-contract PARTIAL · rest-crud-config-contract PASS · rest-batch-config-contract PASS · rest-metadata-config-contract FAIL · rest-route-generation-tombstones PASS · second-object-exposure-and-internal-fields PASS · data-request-shape-and-query-arity PASS · meta-read-doors-v18 PASS · error-sentences-and-unique-violation-wire-code FAIL
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner
session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).Per-clause verdicts (3/4): approvals, attachments-storage.
approvals
Derived: email-action-token-door PARTIAL · status-mirror-field PARTIAL · request-page-reply-and-reader-visibility PARTIAL · act-door-and-admin-rescue-slate PARTIAL
attachments-storage
pendingrefused — only the tombstone limb widened' (mock HTTP server, fake engine) — verify: never scores this api clauseDerived: presigned-upload-roundtrip PARTIAL · download-authz-both-sides PARTIAL · read-inherits-parent-rls PARTIAL · attach-requires-parent-edit PARTIAL · sys-file-status-pipeline PARTIAL · orphan-tombstone-reap PARTIAL · upload-session-abort PARTIAL · inline-grid-receipt-cells PARTIAL · upload-limits-scope-and-ownership PARTIAL · chunked-upload-integrity PASS
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner
session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).Per-clause verdicts (4/4): automation, cli.
automation
Derived: trigger-type-matrix PARTIAL · screen-flow-roundtrip PARTIAL · durable-suspend-restart PARTIAL · paused-run-trigger-record-masked PARTIAL · setup-packaged-automation-board PARTIAL · flow-registration-verdict-on-read PARTIAL · flow-authoring-refusals-v18 PARTIAL · flow-run-semantics-v18 PARTIAL · inbound-hook-timestamped-signature PARTIAL · scheduled-work-opt-in PARTIAL
cli
Derived: scaffold-first-run PARTIAL · dev-automigrate-policy PARTIAL · migrate-meta-write-stored-and-all PARTIAL · meta-package-flags-and-explain PASS · validate-v18-authoring-verdicts PARTIAL · verify-derived-proof-families PARTIAL
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbWBtYWqaV8NhvUrShB
Filed by the dispatching PM seat session for the W4-C2a runner
session_01JQwxbYA4iFU41N3PukeHhD, whose own write was refused by its session permissions (RUNNER rule 2: staged text, posted verbatim through the same door).Close-out for this record (SKILL §5).
Extracted: #28934 · api-backend.rest-metadata-config-contract · acceptance[2]
Extracted: #28936 · api-backend.error-sentences-and-unique-violation-wire-code · acceptance[1]
Parked-on: #27377 · 40 PARTIAL items: coverage-mode, fixture and pin gaps, and 18 checklist-accuracy findings (anchor comment 6569185240)
Four-way disposition of the two clause FAILs:
metadata.endpoints.itemdescribe() lists twelve per-item routes, but the switch unmounts thirteen —GET /meta/app/:appId/bundle(#28287) is missing from the declaration #28934 (fix lands in packages/spec; the clause text "twelve" moves with it).onErrorabort answers the data door with a code-less 400; give it a ledgered ADR-0112 code (#27508 code half) #27597 and rest/runtime: an undeclared hook abort still answers VALIDATION_ERROR on the doors that resolve through resolveThrownHttpError (package publish, /actions) after HOOK_ABORTED lands #27672 replaced with HOOK_ABORTED. Re-point card checklist: re-pointapi-backend.error-sentences-and-unique-violation-wire-codeacceptance[1] to HOOK_ABORTED — it still pins the code-less /data refusal and the VALIDATION_ERROR nested rows that #27597 and #27672 replaced #28936.No product defect came from the off-clause probes. The VITE_SERVER_URL 401 is ruled behaviour (objectui#5702) and is parked on #27377 as a skill accuracy line, not extracted. No security finding.
Generated by Claude Code