Skip to content

[sweep] v18.2.0 release test sweep #25807

Open

Description

@objectstack-fleet

Filing gate: ③ a maintainer-directed task — the maintainer ordered the 18.2.0 release test wave in the Claude project thread on 2026-10-25, verbatim: 「18.2 准备发版本,评估一下哪些checklist需要运行」, then 「你应该按照相关的技能,派发 thread 测试卡」.
Business reason: 18.2.0 ships through the Version Packages PR #25640; the checklist runs are the release's evidence that the standing smoke and the 18.x line's capabilities still hold at the release head, before it merges.
Reader: the lane owning docs/qa/platform-checklist/** (domain:devx) — each checklist-accuracy row below is a ledger edit (revise the item, bump revision, append history citing the run record, keep pnpm check:platform-checklist green); the release decision reads the wave table in §0.
Dedupe (open AND closed): "[sweep] v18.2.0 release test sweep" → 19 hits; "v18.2 release sweep anchor qa checklist" → 59 hits. No 18.2 anchor exists; the nearest anchor is #24579 (18.0 wave, closed) and the nearest record #25479 (18.1.0 manual set, a single record, no anchor).

This card is the wave anchor for the 18.2.0 release test sweep (subject: framework main at or after 6679644a1a, console pin .objectui-sha = b41ed7f68956). Under RUNNER's extraction obligation (docs/qa/platform-checklist/RUNNER.md), checklist-accuracy findings, fixture gaps, partial coverage gaps and not-run handovers close out here; product defects are extracted as their own cards and listed in §5. Run records are qa-run issues and hang off this card by number.

0. The wave at a glance

record selector judged PASS PARTIAL FAIL BLOCKED NOT-RUN
#25812 priority:P0 23/23 19 4 0 0 0
#25815 release-18.2.0-tier1 131/156 6 123 0 2 25

Further records of this wave are added as they are filed. #25812 supersedes the 18.1.0 P0 record #25478. No P0 product failure; no auth/authz finding. #25815 (Tier 1): no pin red, no clause failed; its accuracy findings and gaps are in the comments below.

1. Re-point — red rows this anchor owns

None yet.

2. Checklist-accuracy findings

From #25812 (priority:P0) — each is a ledger edit for the lane owning the checklist:

  • RUNNER environment facts: (1) the walled-boot entry is stale — examples/app-showcase/package.json now declares @objectstack/organizations, so a walled run boots from the tree with three env vars, no scratch copy; (2) the Playwright entry is stale — /opt/pw-browsers now holds chromium 1243 and the alias resolves there (the alias advice still works).
  • platform-core.boot-health c2: deployment-policy unbound flows print as ℹ lines, not ⚠; the clause still describes ⚠.
  • platform-core.nav-surfaces-render: the console-added "All reports" sidebar destination is outside both meta/app nav and SURFACES, so the served-vs-SURFACES diff cannot see it; step 1's test:smoke also collects two other specs beside the pin.
  • platform-core.builtin-apps-nav-render: marketplace knownGap names "Forbidden", the screen reads "HTTP 502 · fetch failed" (MARKETPLACE_PROXY_FAILED); step 6 names sys_approval_request/my_pending for Account Approvals, the served entry is component/approvals/inbox; no clause covers a member opening Setup's url-type entries (they render inside the Showcase shell while the server refuses every namespace 403).
  • approvals.account-app-entry: "drawer" wording in steps 6–7 and acc[1], acc[3], acc[4] is stale — objectui removed the side sheet (objectui#12484); a row click or ?request= now opens /apps/APP/sys_approval_request/record/ID; the account app answers on two URL segments (account and com.objectstack.account), which matters for acc[5].
  • records-forms.crud-roundtrip: the owner half of acc[6] says "not yet run" — it was replayed this run.
  • integration-system.datasource-credential-refusal-matrix step 2: an schemaMode: 'external' datasource needs an external: {} block or it answers 400, easy to misread as a refusal.
  • automation.packaged-flow-disable-durable: steps 2/8/10 task POST needs project; step 4's "reads are open" holds only at the apiMethods layer (a contributor gets 403 on sys_metadata_activation).
  • identity-auth.default-organization-boot-invariant: step 3 filters organization = default, the column is organization_id and takes the org id; fixtures.requires says --fresh but c1 needs --log-level info and a readable file DB; acc[0] prescribes --maxWorkers=2 against RUNNER's memory fact.
  • platform-core.seed-integrity: the Specimen diff should name the canonical time form ("14:30" → "14:30:00"); step 2's baseline lists 9 of the 19 seeded datasets.
  • access-security.crud-permission-matrix knownGaps[1]: a plain member reads the whole org sys_user directory, not a self-scoped row (sys_account / sys_session are the self-scoped ones); the pin header says 6 delegate × sys_* rows, the matrix has 4.
  • access-security.walled-environment-metadata-operator-only: steps name showcase objects while the wall-* dogfood pins boot the CRM app — worth stating in the item.
  • cli.organization-ownership-ceremony: planning a raw v17 DB before any v18 boot blocks the apply at the rewrite step (resumable after one boot) — put the refused boot before the plan; apply needs OS_AUTH_SECRET (or --dev) or it blocks at authored-conversion; on a real 17.x DB the drop gate's first refusal is refused_comment_reactions_unconverted, so os migrate comment-reactions --apply --yes (step 4, which also lacks --yes) must come before step 3; acc[0] prescribes --maxWorkers=2; c5 knownGaps should say a published prerelease CLI is no substitute.
  • platform-core.v18-boot-refusals step 1: production os serve --preset minimal is refused earlier ("This stack mounts no auth…"); os serve --dev --no-server is the spelling that reaches the SecurityPlugin refusal.
  • ai.mcp-stdio-fail-closed steps 2 and 9: the INFO lines need --log-level info on os start; query_records caps limit at 50.

3. Fixture gaps, partial coverage and not-run handover

From #25812 (priority:P0); no not-run items.

  • access-security.rls-both-sides acceptance[5] — blocked(dependency): the D11 judgement needs the private write-up the item's knownGaps names.
  • access-security.crud-permission-matrix acceptance[5] — blocked(fixture): guest anchor ships unbound (the item's knownGaps[2]).
  • access-security.walled-environment-metadata-operator-only acceptance[1], negative[0] — blocked(fixture): the walled boot comes up, but the org owner's org-scoped manage_metadata grant cannot be placed through any HTTP door (operator insert 403 outside organization scope; owner self-grant 403 under ADR-0090 D12 condition (c)). A seed or a system-write fixture for that grant would close it.
  • cli.organization-ownership-ceremony acceptance[5] — blocked(fixture): needs a showcase DB born under an 18.0.0-next build; a published prerelease CLI resolves 18.1.0 dependencies, so knownGaps should say it is no substitute.
  • platform-core.builtin-apps-nav-render — marketplace catalog content needs egress to cloud.objectos.ai (the named error state was scored).
  • platform-core.nav-surfaces-render acceptance[3] — no fixture throws inside a route, so the ErrorBoundary fallback stands on "none encountered".

4. Retest list (SKILL §5 trigger 2)

None yet — a seat accepting a QA-extracted fix card appends the affected items here.

5. Extracted elsewhere (not repeated here)

None yet.


Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    priority:p1High: required for production / M2
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    From #25815 (release-18.2.0-tier1, 156 items) — §2 checklist-accuracy findings, part 1/2 (areas: access-security, ai, api-backend, approvals, attachments-storage, automation, cli, i18n, identity-auth, integration-system, platform-core). Each line is a ledger edit for the lane owning docs/qa/platform-checklist/**: revise the item, bump revision, append history citing #25815. Clause labels: aK = acceptance[K], nK = negative[K].

    Highlights (each is also in the list below): stale clause text — records-forms.field-unique-enforcement a4 still says org-less rows fold to ONE bucket while both pins assert they are exempt (ADR-0131 D1); cli.dev-automigrate-policy a4/n2 name two ADR-0120 D4 tightening cases that no longer exist (the file now asserts "no tightening proposed", ADR-0131 D1); records-forms.conditional-rules-header a2 claims a client lock on tax_rate the spec asserts the opposite of (objectui#13436). Refs that miss their own pins: e.g. access-security.no-active-org-session-semantics (two HTTP dogfood suites would cover a1–a3, n0, n1), attachments-storage.upload-session-abort, ai.mcp-coded-refusals-and-runtime-exposure, integration-system.email-template-render a3/a5, identity-auth.auth-method-matrix a3/a6/a9. Parser-hostile spellings: refs naming dropped files in prose (records-forms.conditional-rules-grid, records-forms.action-param-widgets, records-forms.adhoc-filter-sort-builder, records-forms.master-detail-atomic-save, records-forms.concurrent-edit-conflict), a brace glob in records-forms.bulk-select-all-matching, a source file named as a pin in access-security.rls-both-sides.

    access-security

    • access-security.activation-write-operator-gate a0/n2: ref claims the 'full posture x identity matrix' but automation-activation-posture-gate.test.ts has no caller-without-manage_metadata case; FLOW_ENABLEMENT_DENY_MESSAGE is asserted by no test in the repo
    • access-security.activation-write-operator-gate a1: action-activation-posture-gate.test.ts › REFUSES a caller without manage_metadata, in every posture asserts only toContain('manage_metadata') at the unit layer — not the 'functionally equivalent to deleting it' rationale nor 'a packaged action' subject, and it runs only single
    • access-security.activation-write-operator-gate a3: packages/qa/dogfood/test/packaged-activation-ledger-reach.dogfood.test.ts (not in ref) asserts one deployment-level row with no tenant column over HTTP, but as the dev admin, not a manage_metadata-without-platform_admin persona
    • access-security.activation-write-operator-gate a5: boot-log restart re-hydration corroboration is not covered by any pin (test half only)
    • access-security.anonymous-deny-surfaces a4: pin's /meta member contrast is .not.toBe(401), clause demands 200
    • access-security.anonymous-deny-surfaces a5: ref lists seven families but not the public-forms both-sides contrast; no pin covers it
    • access-security.anonymous-deny-surfaces n0: ref does not cover the post-DELETE authed GET /automation/showcase_reassign_wizard 200 read-back
    • access-security.anonymous-floor-v18-doors a1: the sweep's EVERYTHING_ELSE expectation checks status 401 + an error envelope, never error.code; UNAUTHENTICATED is asserted only in the unit pins (i18n, settings, api-description), none for /notifications, /keys, /share-links
    • access-security.anonymous-floor-v18-doors a3: DOOR_CLASSES[1] (share-link token face) uses REFUSED_WITHOUT_A_SUBJECT, which accepts 401 — the clause's 'not 401' is not asserted by any pin
    • access-security.anonymous-floor-v18-doors a2: rest-docs-viewer-retired.pin asserts no registration on RestServer/route manager; no pin compares GET /api/v1/docs to the never-served control path, anonymous and admin
    • access-security.anonymous-floor-v18-doors a4: the dogfood submit asserts 2xx and keys ['id'] on the showcase (step 4's forged owner_id/status not sent); exact 201 is asserted only by the Hono-transport pin over a protocol double
    • access-security.crud-permission-matrix ref: packages/verify/src/verify.ts / rls.ts (objectstack verify --rls) are a CLI proof, not test files — no pin here drives them; the object-level RLS half is unscored by the dogfood pins.
    • access-security.crud-permission-matrix a3: ref says the pin reaches clause 3; it probes only showcase_private_note (inquiry/invoice/invoice_line VAMA reads not asserted).
    • access-security.crud-permission-matrix a6: verify text says '45 rows × 4 verbs at revision 6'; the pin judges 41 rows (164 cells) and explicitly excludes the 4 sys_* rows, so clause 6 cannot be pinned whole.
    • access-security.crud-permission-matrix ref says 'showcase-permission-zoo pins on both sides' the delegate subtree gate: its out-of-subtree case asserts only non-2xx, not 403 PERMISSION_DENIED as the ref states.
    • access-security.crud-permission-matrix ref header comment in the pin says '6 showcase_field_ops_delegate × sys_* rows'; the ref and the pin's own assertion say 4 (2 retired).
    • access-security.deployment-tables-platform-only a0: packages/plugins/plugin-security/src/authz-identity-objects-boot-refusal.test.ts asserts SecurityPlugin's boot refusal when sys_user/sys_member/sys_organization are missing — nothing about the seven deployment tables or manage_platform_settings
    • access-security.deployment-tables-platform-only a1/a2: no pin drives either door over HTTP; both remain live-run clauses
    • access-security.fls-mask-and-strip a2: admin-side budget write (both sides of the lock) is asserted by neither pin, and the ref's STILL MANUAL list does not name it
    • access-security.fls-mask-and-strip a0: zoo FLS case asserts the name PATCH status only; the clause's 're-reads changed' leg is unpinned
    • access-security.grant-table-write-contract a1/a3/a4: api-oracle clauses are pinned only at the engine layer (real ObjectQL + SqlDriver, errors mapped by resolveThrownHttpError); no pin in the ref drives the /data door over HTTP for them
    • access-security.grant-table-write-contract a2: permission-set-assignment-window.dogfood.test.ts › 'the door refuses a window whose end is not after its start…' asserts [400, VALIDATION_FAILED] and fields [[valid_until, rule_violation]] only; the authored message, constraint absent/not 'unevaluable' and the valid-window 201 control are not asserted over HTTP
    • access-security.me-permissions-aggregation-parity a2: me-apps-and-everyone-baseline pin asserts only the member side (no gated app); the admin-sees-gated-app half is unpinned.
    • access-security.me-permissions-aggregation-parity a3: the anonymous trio's 200 shapes are pinned only in hono-current-user-endpoints.test.ts on a bare HonoServerPlugin with no auth service or auth gate — the 401-floor regression the clause guards is not reachable there; the dogfood anonymous /me/apps case asserts body.apps ?? [] only, never the status.
    • access-security.me-permissions-aggregation-parity a5: packages/plugins/plugin-hono-server/src/current-user-endpoints-localization.test.ts asserts the locale/timezone floors (unit) and is not in the ref.
    • access-security.meta-authoring-trail-and-audience-gates a2: meta-view-dashboard-audience-gate.test.ts drives RestServer with a mock server/protocol (unit) and covers list pruning + by-name refusal only — no /published, /layers or ?state=draft door, and no /history case for a studio.access holder lacking the view's requiredPermissions
    • access-security.meta-authoring-trail-and-audience-gates n0: the 304 assertion ('a caller who no longer holds the capability is never answered a 304…') exists only at the unit layer
    • access-security.no-active-org-session-semantics ref prose is stale: it describes a group CONTROL 'a NON-EMPTY membership set lands, even with no active organization'; on this tree that case is 'a NON-EMPTY membership set with NO active organization: an insert has nowhere to land, and is refused the same way' (asserts refusal)
    • access-security.no-active-org-session-semantics a1/a2/n1: packages/qa/dogfood/test/no-active-organization-write-refusal.dogfood.test.ts (HTTP 403 naming the missing org + nothing written) exists and is not in the ref
    • access-security.no-active-org-session-semantics a3/n0: packages/qa/dogfood/test/sharing-rule-org-less-caller.dogfood.test.ts (plugin-sharing: a manage_sharing holder whose session has no ACTIVE organization reads every tenant's sharing rules (adminOrgScope falls open) #8158 org-scoped manage_sharing holder over HTTP) exists and is not in the ref
    • access-security.no-active-org-session-semantics a7 (group, engine layer): packages/plugins/plugin-security/src/no-active-organization-insert-union-scope.test.ts (real ObjectQL + SqlDriver, group refusal and nothing stored) exists and is not in the ref; still in-process, not the live walled boot a7 requires
    • access-security.no-active-org-session-semantics ref says the pin 'pins every clause of this item at unit level' — a3, a4, a5, a6 have no case in it at any level
    • access-security.org-admin-assignment-boundary n2: the three-posture posture file only exercises admin_full_access out-of-boundary; the full set list (adminScope, platform-capability, org-admin sets, mcp agent ceilings) is asserted only by the unit gate in delegated-admin-gate.test.ts, not per posture
    • access-security.owd-sharing-matrix a0: verify's admin re-read of the denied PATCH is not asserted by showcase-private-owd (status only); clause text otherwise pinned; by-id GET asserted as not-200 rather than non-2xx
    • access-security.owd-sharing-matrix a2/a3/a5: ref implies all four OWD models pinned, but no pin covers modifyAllRecords bypass, public_read_write, or auditor VAMA
    • access-security.owd-sharing-matrix a4: showcase-invoice-cbp boots a test-local fallback set (showcase_cbp_member), not the showcase C1/C2 personas, and asserts no list exclusion; controlled-by-parent.dogfood.test.ts uses a synthetic cbp_account/cbp_note fixture, not showcase_invoice_line
    • access-security.parent-and-organization-write-guards a1/a2/n0: the walled organization-removal refusal and the unreadable-header parity are pinned only in-process (engine + SecurityPlugin over SQL drivers, thrown statusCode / resolveThrownHttpError) — the api-oracle legs have no HTTP pin; precedent QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 scored them PASS (rev 4) before the layer rule.
    • access-security.platform-owner-email-anchor n0: admin-standing-surface.test.ts never asserts ADMIN_STANDING_NON_TABLE_INPUTS (the OS_PLATFORM_OWNER_EMAIL non-table declaration n0 cites); the declaration is unpinned
    • access-security.platform-owner-email-anchor a0-a3: ref correctly records these as STILL MANUAL live-HTTP arms; unit pins do not score them
    • access-security.public-form-withdrawal-layers a0: ref concedes the no-organization read of step 4 has no end-to-end pin, so a0 cannot score from pins alone (the save 200 /env-wide/ and both doors 404 FORM_NOT_FOUND, landed 0, are pinned)
    • access-security.public-form-withdrawal-layers a2-a5: the rest pin is a unit (RestServer over a mocked protocol), the protocol pin an in-process protocol over a stub registry; both fit the [test] oracle
    • access-security.record-access-explain a1: ref 'explain vama_bypass case' asserts vama_bypass via in-process security.explain() (isSystem context), not the POST /api/v1/security/explain door the oracle names
    • access-security.record-access-explain a2/a3/n0: pin has no plain-member (deny-side) explain call; only the GET denial half is pinned
    • access-security.record-view-read-audit n0: the item says the ledger failure is 'reported once per process'; read-audit.test.ts '[finding] plugin-audit: a THIRD copy of both #15166 defects lives in read-audit.ts — process-wide boolean plus an unconditional datasource remedy #18247' cases pin once per CAUSE (a second distinct cause reports again at error) — item text is stale.
    • access-security.record-view-read-audit a4: verify cites sys_job as the excluded name; the pin probes sys_audit_log / sys_session, and no pin observes the AuditPlugin install line ('record-view auditing installed on N object(s)').
    • access-security.rls-both-sides a4: ref names packages/verify/src/rls.ts, a source file, not a test; no pin runs runRlsProofs over the showcase (rls-fixture/rls-multitenant dogfood run it on purpose-built fixtures only)
    • access-security.rls-both-sides a2/n0: the pin's foreign PATCH asserts only status >=300; the row-unchanged re-read the clause requires is pinned for a fixture object in packages/qa/dogfood/test/rls-fixture.dogfood.test.ts, not for showcase_private_note
    • access-security.security-catalog-activation-and-clone-doors a2: the audience-anchor 400 (everyone/guest) is asserted only in packages/runtime/src/domains/catalog-activation-door.test.ts (handler with fakes); the dogfood pin drives the 404 arm only
    • access-security.security-catalog-activation-and-clone-doors a3: dogfood clone pin drives 200 + dropped keys, 409 (another set's name), 404, bad-name 400, 403; anonymous 401, the source's own name 409 and the closed-body 400 are unit-only
    • access-security.security-catalog-one-holder-and-boot-report a1: packages/cloud-connection/src/marketplace-install-local-catalog-name-collision.test.ts (not in ref) asserts 422 PLUGIN_REGISTER_FAILED + nothing registered on POST /marketplace/install-local (in-process plugin, stubbed cloud fetch) — the ref's pins only reach manifest.register / boot refusal
    • access-security.security-catalog-one-holder-and-boot-report a2: permission-set-owner-registration.test.ts proves VALIDATION_ERROR/400 at registerApp, not on a permission-set save door; no HTTP pin for the save
    • access-security.security-catalog-one-holder-and-boot-report a3: CLI is run via MigrateSecurityCatalogOverlays.run in-process (oclif), not a spawned process — acceptable for the build oracle
    • access-security.security-catalog-one-holder-and-boot-report a4: catalog-reference-report.test.ts asserts the [security] error/info lines on a vi.fn logger; the ≤50-names cap is not visibly asserted
    • access-security.share-link-combined-gates a1/a2: packages/runtime/src/domains/share-links-refusal-order.test.ts asserts the anonymous no-password-oracle and email-audience identical-refusal rows but is not in the ref (in-process layer, would not score the api clause either)
    • access-security.share-link-combined-gates a3: ref names share-links-messages-audience.test.ts for acceptance[3]; its harness is in-process route entries (no Hono/HTTP), so it scores a0 only, not the api oracle
    • access-security.walled-environment-metadata-operator-only a2: single-posture leg is pinned as a manage_metadata holder below the operator (stronger than 'admin'); no case drives the seeded admin specifically on single
    • access-security.write-path-guards a4/a6: ref names owner-anchor-and-bulk-writes for bulk writes, but its bulk cases are engine-direct ql.update/ql.delete owner scoping — no createMany stamping, no per-row validation
    • access-security.write-path-guards a5: showcase-readonly-when-parent asserts single-row PATCH strips + header X-ObjectStack-Dropped-Fields; the mixed updateMany results[i].droppedFields leg and the line's product field are unpinned
    • access-security.write-path-guards a0: showcase-static-readonly asserts no droppedFields on the INSERT strip (verify names droppedFields)
    • access-security.write-path-guards n1: objectql pins use a recording/fake driver (real engine) and other objects, not showcase lead_score

    ai

    • ai.mcp-coded-refusals-and-runtime-exposure a1: packages/mcp/src/mcp-coded-refusal.test.ts ('<tool>: RECORD_NOT_FOUND from <member> answers code, message and status') asserts the clause at unit layer but is not in the ref
    • ai.mcp-coded-refusals-and-runtime-exposure a2: no pin drives query_records on an apiEnabled:false runtime object across a restart; plugin-runtime-object-metadata-copy asserts the metadata copy/listing only
    • ai.mcp-http-surface a3: the pin asserts status 401 only; the 'Unauthorized: a valid API key is required' wording and the OAuth WWW-Authenticate form are unasserted
    • ai.mcp-http-surface a4: the pin's tool-discovery case uses a session bearer token (not an API key), skips initialize, and checks two tool names, not the documented 12
    • ai.mcp-http-surface ref is bare (one file) while the item has six acceptance clauses: a0–a2 and a5 have no pin at any layer
    • ai.mcp-oauth-private-host-transport a0-a4: item is api/log-oracle throughout but the only pin (auth-manager.mcp-oauth.test.ts) is a unit test of isOAuthEligibleBaseUrl / AuthManager getters — no booted server, no log capture; it corroborates the rule but scores no clause
    • ai.mcp-oauth-private-host-transport a4: '… is reachable by no configuration key and no environment variable' (unit) covers the predicate half only
    • ai.mcp-stdio-fail-closed a0: the pin regex /OS_MCP_STDIO_API_KEY/ checks the var name only, not the remedy text nor 'the process does not serve'; scored from the verify's own oracle (plugin.start throws).
    • ai.mcp-stdio-fail-closed a1/a6/n4: no test in packages/mcp asserts the API_KEY_REVOKED arm ([Decision] API key 的生命周期与存放:到期上限与不活动失效取多长,key 继续放自有 sys_api_key 还是迁到 @better-auth/api-key(#23287 裁决 C′ 的留项) #23367) — grep for 'REVOKED' over packages/mcp tests finds none; ref is a single unit file for an item whose clauses are mostly live api/log.
    • ai.mcp-validate-expression a2: pin never runs the SAME expression under both sites (flow_condition case uses a different expression than the formula bare-field case)
    • ai.mcp-validate-expression a0/a1/a3: pin harness is a fake describeObject bridge, not the served MCP door the api oracle names
    • ai.skill-instructions-mcp-prompts a3: verify cites skill-prompts.test.ts as the pin, but it drives only an unknown name ('no_such_skill') through a stub bridge; a non-projected (inactive or instruction-less) name on prompts/get is not asserted
    • ai.skill-instructions-mcp-prompts n1: no pin asserts prompts/get refuses an inactive skill (only prompts/list omission is asserted)

    api-backend

    • api-backend.action-activation-door-contract a6: ref/verify says 'both owners named'; the ambiguity case asserts only messageOf(res) toContain('crm_account')
    • api-backend.action-activation-door-contract a5: ledger-reach asserts the key set via rows.find, never that exactly one row exists, and does not read the 200 body {name, objectName, enabled}
    • api-backend.action-activation-door-contract a2: ref claims 'unknown-key/non-boolean 400s' — pin asserts code VALIDATION_FAILED only, not fields[0] unknown_field/invalid_type or the non-object-body arm
    • api-backend.bulk-write-contract ref '(bulk halves)' overclaims: the pin's bulk cases call ql.update/ql.delete({multi:true}) on the engine with a resolved authz context; none of the createMany/updateMany/deleteMany HTTP doors the clauses name is driven, so no clause a0-a5/n0 is asserted
    • api-backend.bulk-write-contract a3: packages/rest/src/rest-batch-size-cap.test.ts pins BATCH_TOO_LARGE at the unit layer (mock protocol) and is not in this item's ref; it still would not score an api oracle
    • api-backend.data-request-shape-and-query-arity a1-a4: every pin invokes RestServer route handlers / HttpDispatcher.dispatch directly (real ObjectQL+SqlDriver for data-write-request-gate, data-delete-expected-version, data-conflict-caller-visibility; stubs for the arity files) — none boots the Hono adapter, so the api-oracle clauses stay a live leg
    • api-backend.data-request-shape-and-query-arity a1: the empty-version-token leg is in data-delete-expected-version.test.ts (DELETE), while the clause speaks of PATCH bodies + an empty version token — check the clause intends DELETE for the token
    • api-backend.declarative-endpoint-execution a1: no pin asserts the 401 body's code (UNAUTHENTICATED); showcase case checks success:false only, policy case status only
    • api-backend.declarative-endpoint-execution a2: spec gate (a) asserts the fix sentence but not that the message names the endpoint; the api 注册表条目声明 allowRuntimeCreate: true,但运行时创建的端点匹配器永远看不见 —— 声明的能力运行时不兑现(真实 boot 实测) #5488 runtime-authoring withdrawal is unasserted; the build oracle's os validate/os build run is not a pin
    • api-backend.error-sentences-and-unique-violation-wire-code a1: the verify names rest-hook-script-fault-envelope.test.ts for the 'live /data door' — that file imports mapDataError only, so the live leg is unit, not the door
    • api-backend.error-sentences-and-unique-violation-wire-code a2: dispatcher-unique-violation-wire-code.test.ts uses a real engine + SqlDriver behind HttpDispatcher; no Hono adapter, so the wire body is the dispatcher's result, not an HTTP answer
    • api-backend.meta-read-doors-v18 a4: no ref pin asserts the data-sort 403 on F (the 'two agree' half); showcase-fls-read-mask-strip.dogfood.test.ts has a sort-403 case but is not in this ref
    • api-backend.meta-read-doors-v18 a1-a3: precedent QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 carried these as pass from QA run · surface:api (116/130) · 580fd4ed · 2026-10-20 · 62 PASS / 54 PARTIAL / 0 FAIL / 0 BLOCKED / 14 NOT-RUN #24779; on this tree every ref pin drives route handlers with a stub server/response (no Hono adapter), so they score a0 only
    • api-backend.packaged-action-disabled-dispatch a0: dogfood asserts status 409 and text toMatch(/ACTION_DISABLED|is disabled/) — neither the exact code nor the describeDisabledAction sentence, and no task re-read for side effects; the exact sentence is unit-only (action-activation-dispatch.test.ts › the shared guard itself › answers 409 ACTION_DISABLED with the ENGINE's own sentence)
    • api-backend.packaged-action-disabled-dispatch a3/a6/n1: ref credits action-activation-dispatch.test.ts for the 403-not-an-oracle, flow-type and absence-means-active legs, but it is a unit HttpDispatcher over fakes — it stops above the HTTP layer the api oracle needs
    • api-backend.packaged-action-disabled-dispatch a5: ref correctly says the restart leg stays manual
    • api-backend.query-contract-matrix a4: engine.test.ts '[Security: $expand bypasses RLS/FLS on the referenced object (data leak on lookups) #2850] routes the expand sub-read through the middleware … tagged __expandRead' proves the sub-read is routed through middleware on a mock driver — not that a contributor's expand withholds the contact over HTTP; under rule 6 it cannot score a4 (round 4 QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 scored it pass)
    • api-backend.query-contract-matrix n0: request-schema-gate.conformance.test.ts drives RestServer with a mocked protocol — the ref says so itself
    • api-backend.query-contract-matrix whole item: Tier 1 in name only — no clause has a pin at its oracle's layer
    • api-backend.rest-batch-config-contract a5: rest-sub-config-parse-not-cast.test.ts §E › 'refuses batch.operations.upsertMany and batch.defaultAtomic' asserts the key and /never built/ resp. /options.atomic/; it does not assert that the messages name BatchEndpointsConfigSchema, nor the upsert replacement (an operation type of the generic batch door)
    • api-backend.rest-crud-config-contract a3: packages/rest/src/discovery-services-route-follows-mount.test.ts ('[finding] discovery contradicts itself under a non-default crud.dataPrefix: routes.data follows the key, services.data.route stays hard-coded at /api/v1/data #16674 — a moved crud.dataPrefix moves BOTH halves of the document') pins the discovery-advertisement half at a non-default prefix and is not in the ref; the moved-route-table half has no pin.
    • api-backend.rest-crud-config-contract a4: ref says §E pins acceptance[4]; the case asserts 'crud.patterns' + 'CrudEndpointsConfigSchema' + /was removed in @objectstack/spec 17/ only — the declarative-api-endpoint prescription is never matched, and the objectParamStyle refusal is checked for its key and /was removed/ only.
    • api-backend.rest-metadata-config-contract a1: ref says §D 'pins prefix … survival' — true, but no pin mounts at prefix '/metadata' or reads the discovery body's routes.metadata; the clause's move-together claim is unpinned
    • api-backend.rest-metadata-config-contract a5: §E's cacheTtl case asserts the key, MetadataEndpointsConfigSchema and /was removed/; the endpoints.schema case asserts the key and /does not exist/ only — neither asserts the replacement named in the verify
    • api-backend.rest-metadata-config-contract a3: only the normalizeConfig half is pinned; ref concedes the masking-effect half has no pin
    • api-backend.rest-route-generation-tombstones a0: §E › 'refuses every routes.* key' asserts routes.&lt;key>, RouteGenerationConfigSchema and /was removed/ — not the clause's 'was removed in @objectstack/spec 17'; nameTransform driven with 'none' only (ref concedes)

    approvals

    • approvals.decision-only-via-service all clauses: the ref (kind 'test') is packages/services/service-automation/src/resume-authority-gate.test.ts, an AutomationEngine + InMemorySuspendedRunStore unit — every clause's oracle is the api (route status, run/actions reads); precedent QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 scored rev 1 PASS from it before the layer rule. Needs an HTTP pin (generic resume route + approvals API) to be Tier 1.
    • approvals.email-action-token-door a0: clause's live at-rest sys_notification read stays a run leg; FORBIDDEN arm is exercised with 'stranger' (not an approver at all) rather than a non-pending approver
    • approvals.email-action-token-door a1: pin asserts status pending + no decisions, not byte-identity of the actions timeline / token consumed_at
    • approvals.email-action-token-door a3: 'a decide that fails still burns it' (consume-first under a failing decide) is not asserted by any named pin
    • approvals.request-page-reply-and-reader-visibility a1: no pin asserts the approval_comment reply landing in the timeline, or the pending-approver/submitter-only restriction on replying
    • approvals.request-page-reply-and-reader-visibility a2: ref says request-read-gate covers acceptance[2]; it drives ObjectQL/protocol in-process, never /data/sys_approval_request over HTTP
    • approvals.status-mirror-field a2: the clause names the SLA auto-decision as a second user-less machine transition; the pin drives only the dead-run sweep (the verify asks only for the sweep)
    • approvals.status-mirror-field a0/a1/a3/a4: the ref is the only pin and covers a2/n2 alone; the api/log clauses have no automation

    attachments-storage

    • attachments-storage.attach-requires-parent-edit a2: the uploader legs of '(a) granted member: uploader may delete…' are an admin (who edits everything) and memberA on att_case (public_read_write, so memberA edits it); 'the uploader succeeds even without parent edit' is not driven
    • attachments-storage.attach-requires-parent-edit n1: none of the refused-attach cases ((b), (item 3), ([objectui/framework] enable.files: generic Attachments related-list (Salesforce Notes & Attachments parity) #2727)) re-reads sys_attachment for a row the refusal left
    • attachments-storage.chunked-upload-integrity a1: the clause names details.missingChunks [1] (chunk 1 not sent); the dogfood pin withholds chunk 0 and asserts [0] — same behaviour, the clause's literal does not match the pin's fixture.
    • attachments-storage.download-authz-both-sides a2: ref claims 'the uploader/entitled 200' covers clause 2; the owner case is the admin, who also owns/reads the parent, so the uploader-bypass-against-unreadable-parent leg and the 'url serves the bytes' leg are unasserted
    • attachments-storage.inline-grid-receipt-cells a2: the spec does not capture the /api/v1/storage/* upload requests; storage routing is inferred from the file door returning the uploaded bytes
    • attachments-storage.inline-grid-receipt-cells a3: the spec never reads the sys_file row (status 'committed', ref_object/ref_id/ref_field, acl 'private') nor asserts the batch response succeeded — only the request payload and GET /storage/files/:id
    • attachments-storage.inline-grid-receipt-cells n1: a data: URL would satisfy typeof==='string' && !contains('receipt.png'); the n1 guard rests on the follow-up storage GET answering 200 with the PNG bytes
    • attachments-storage.orphan-tombstone-reap a1: the dogfood sweep is lifecycle.sweep() called in-process after HTTP-driven setup (no door exists for it); the failed-byte-delete-leaves-the-row leg and its warn log are pinned only in attachment-lifecycle.test.ts with a fake engine.
    • attachments-storage.presigned-upload-roundtrip ref is bare: attachments-permission-matrix is a permission-matrix file whose uploadFile helper drives presign/PUT/complete but asserts only statuses; a0–a3's field, pending→committed, byte-equality and 302 halves are unpinned
    • attachments-storage.presigned-upload-roundtrip a4: the anonymous case asserts 401 + AUTH_REQUIRED but never counts sys_file rows around the attempt
    • attachments-storage.read-inherits-parent-rls a3: the probe half (D5 classes, warning text, probe-failure deny) is in-process/unit only; the item states it is unreachable from a run, so scoring it from those pins follows the item's own verify — note the warning's exact '[storage] attachment read visibility' text is asserted only at unit
    • attachments-storage.sys-file-status-pipeline a2: the live-holder half is scored, as the item directs, from tombstone-download-live-reference.test.ts, a unit test (mock HTTP server + fake engine); the live holder-less 404 FILE_NOT_FOUND and the post-re-attach /url 200 legs have no pin.
    • attachments-storage.sys-file-status-pipeline a1: tombstone-download-live-reference.test.ts 'leaves pending refused — only the tombstone limb widened' is a unit route test; the api-oracle 404 FILE_NOT_FOUND has no HTTP pin.
    • attachments-storage.upload-limits-scope-and-ownership a1–a3: storage-limits, upload-scope-vocabulary and upload-door-ownership call registered RouteHandlers with hand-built IHttpRequest/IHttpResponse — no HTTP adapter; a1's 'takes effect without restart' is at the plugin/kernel, not a served request
    • attachments-storage.upload-limits-scope-and-ownership a5: both hydrate pins are engine-level; no pin reads a copied file id over /data
    • attachments-storage.upload-session-abort a2/a3/n0/n1: packages/services/service-storage/src/attachment-lifecycle.test.ts › createUploadSessionReapGuard ('does NOT abort a completed session', 'reaps a session with no backend_upload_id without calling abort', 'VETOES on abort failure...', 'reaps the row when the adapter cannot abort at all') asserts these at unit layer but is not in the ref
    • attachments-storage.upload-session-abort a5: packages/services/service-storage/src/storage-routes.test.ts ('stamps expired and 410s a chunk PUT / a completion past the session deadline', 'does not expire a session still inside its deadline') asserts the 410 at route-handler unit layer, not in the ref (would not score the api oracle)
    • attachments-storage.upload-session-abort bare ref names only the dogfood matrix file; it scores a1 alone

    automation

    • automation.durable-suspend-restart a0/a1/a4: the pin drives its own fixture (flow_durable_suspend, a screen-node pause) — not the showcase showcase_task_follow_up timer or the showcase_project_closure → showcase_closure_signoff nested pair the steps name; the generic persistence/consumption assertions hold, the per-kind rows are not observed
    • automation.durable-suspend-restart a1: the pin's 'cold boot' is a second bootStack kernel over the same file inside one test process, not a separately spawned server process
    • automation.flow-authoring-refusals-v18 ref is accurate: it scopes the nine unit files to acceptance[0] only and says a1-a3 are manual; all nine files exist with ≥1 test
    • automation.flow-run-semantics-v18 a2/n0: the ref's two elevated-door pins (packages/runtime/src/{action,endpoint}-flow-elevated-door.test.ts) are unit door pins over a scripted automation service and never drive the trigger door the step names (POST /automation/:name/trigger); the wire pins that do — packages/verify/src/automation-trigger-elevated-door.test.ts (HTTP injection, 403 PERMISSION_DENIED, runs 0 by listRuns) and packages/qa/dogfood/test/flow-door-elevated-start.dogfood.test.ts — are not in the ref (the runtime file's own header names them as the wire half)
    • automation.flow-run-semantics-v18 a1: no pin in the ref reads back a field a record-triggered run stamped over HTTP; flow-cel-current-user.test.ts drives the engine only
    • automation.inbound-hook-timestamped-signature a2: no pin byte-compares the refusal arms' bodies against each other; rows assert code + typeof message only (member-vs-mount parity is per row, not across arms)
    • automation.paused-run-trigger-record-masked a0: the column parse is an engine (isSystem) read of sys_automation_run, plus an HTTP data-door read that checks only variables_json.record; 'null where unset' is not exercised
    • automation.paused-run-trigger-record-masked a3: the 'second process' is a second bootStack over the same SQLite file inside the same vitest process, not a spawned server
    • automation.paused-run-trigger-record-masked n0: every reader in the pin is the dev admin token; 'whichever persona reads it' is not driven across personas
    • automation.scheduled-work-opt-in a1/a2: both pins assert that flows are ARMED (or not) and the refusal sentence on a LiteKernel; neither observes a served boot log line or run rows after intervals
    • automation.screen-flow-roundtrip a4: the spec's final assertion is page.getByText(assignee) on the grid — exactly the 'not just the refreshed grid cell' the clause excludes
    • automation.screen-flow-roundtrip a0/a3: the spec never reads the run (status paused/completed); only request capture and UI toast
    • automation.setup-packaged-automation-board a0: the objectui ref→URL half names PackagedAutomationPage.navContribution.test.tsx (exists at the pin) in the clause's verify but not in automated.ref; it is component-layer and scores nothing either way.
    • automation.trigger-type-matrix n0: names packages/qa/dogfood/test/showcase-anonymous-deny-surfaces.dogfood.test.ts › 'anonymous POST /automation/:name/trigger is denied (401)' (exists, line 587) but the file is not in automated.ref, so a ref-driven run never executes it

    cli

    • cli.dev-automigrate-policy a4/n2: ref names cases 'auto-tightens at boot under autoMigrate: safe when the probe is clean' and 'BLOCKS the tightening on duplicate NULL-organization rows — old index kept, rows reported' in a describe 'bare-composite tightening + duplicate pre-flight (ADR-0120 D4)' — none exist in sql-driver-unique-tenancy.test.ts on this tree; the file now has 'bare composite from a pre-18 database — no tightening proposed (ADR-0131 D1)' asserting zero drift and 'duplicate NULL-organization rows are no longer a blocker — no op proposed, rows and index kept'. The clause text (D4 tighten, blocked report) is stale against ADR-0131 D1
    • cli.dev-automigrate-policy a4: a BLOCKED unique create_index is still pinned elsewhere (packages/drivers/driver-sql/src/sql-driver-25031-blocked-unique-apply-limit.test.ts), not in the ref — if a4 is rewritten around it, add it
    • cli.dev-automigrate-policy a2: the production case asserts the warning prefix only; the 'Run os migrate deliberately' remedy is unasserted (the ref says so)
    • cli.meta-package-flags-and-explain a1: verify names 'server log' as evidence; the pin observes the wire (?package= on the PUT) and the door's parsed request instead — equivalent, but no server log is read
    • cli.migrate-meta-write-stored-and-all a4: canonicalize-stored-flow.test.ts and refused-shapes.test.ts pin the TODO sink (canonicalizeStoredFlow todos / refused-shape onTodo); no file in the ref runs os migrate meta --stored and reads the printed TODO lines
    • cli.organization-ownership-ceremony a1: occupancy pin's plan run mocks boot; no pin compares a DB checksum before/after a bare plan run
    • cli.organization-ownership-ceremony a2: organization-ownership-apply.generation-1.test.ts › runs every step in order, certifies, and records this release's shape generation in the checkpoint calls apply() over a fake ledger — the CLI's --apply --plan-file --backup-taken exit 0 is not asserted
    • cli.organization-ownership-ceremony a3: organization-ownership-boot-guard.test.ts asserts assertOrganizationOwnershipMigrated's error code/message directly; the served-boot error line and the migrated boot's ready line need a live boot
    • cli.organization-ownership-ceremony a4: 'checksums before/after' approximated by columnsOf() still containing organization_id and applied: []
    • cli.scaffold-first-run ref .github/workflows/scaffold-e2e.yml exists but is a CI workflow, not a vitest/Playwright file: a Tier 1 pin run collects nothing for this item (scores via the workflow's own CI run only)

    i18n

    • i18n.flow-copy-translation-and-host-override a2: no file in the ref touches os i18n extract; the extraction of refusal, screen, option and toast keys is pinned in packages/cli/test/i18n-flow-{refusal,screen,toast-option}-coverage.test.ts (extractTranslations, the function the command runs — not the command's file write), none of them in the ref
    • i18n.flow-copy-translation-and-host-override a3: translation.test.ts › 'refuses a single-brace {token} in a translated title, through the one text-slot judge (i18n(flows): a translated screen title is not judged by the text-slot judge, so a single-brace {name} in a translated heading renders literally while the description and refusal message beside it are refused #22627)' pins the schema rule and its {{ name }} remedy; nothing in the ref runs os validate for the exit code
    • i18n.surface-matrix a5: ref is accurate that the two objectui component pins cover only the confirm half (plus successMessage→toast props); they render under a mocked ActionRunner/I18nProvider with no server round-trip, so the network-oracle clause stays the run's
    • i18n.surface-matrix a6/a7/a9: the i18n routes have HTTP coverage elsewhere (e.g. showcase-anonymous-deny-surfaces' I18N_FACES member 200 control) but nothing asserts the locale set, group vocabulary or zz-ZZ empty-map shape named here

    identity-auth

    • identity-auth.admin-lifecycle-operations a4: verify says the 'target's next PROTECTED request still 2xx' is pinned by admin-platform-admin-standing.dogfood.test.ts; that file asserts the 403 + code only, no protected request as the target
    • identity-auth.admin-lifecycle-operations a0/n1: C0 case asserts sys_user.banned/ban_reason and unban; no sign-in by the banned user is attempted, so the enforcement half is unpinned
    • identity-auth.admin-lifecycle-operations ref-parse: packages/plugins/plugin-auth/src/remove-user-atomicity.test.ts is named in the ref only as a contrast ('deliberately does NOT copy'), not as a pin; the parent's pins list includes it — it scores no clause
    • identity-auth.api-key-expiry-lifecycle a2: the dogfood case asserts 400 API_KEY_EXPIRY_TOO_LONG but not that the key count is unchanged; 'nothing is stored' is asserted only in packages/runtime/src/api-key-lifecycle.pin.test.ts over a fake objectql
    • identity-auth.api-key-expiry-lifecycle a3: the three 403 codes are pinned only at unit layer (rest-api-key-lifecycle.pin.test.ts over HTTP_STUB + fake ql; runtime dispatcher over a fake kernel); the dogfood file drives no revoked or expired key
    • identity-auth.auth-gate-held-session-raw-host-families a2: held-session-vendor-admin-doors arms PASSWORD_RESET_REQUIRED by a system write of must_change_password + auth.noteMustChangePasswordIssued() (simulating the forced-reset route), not by driving the admin's forced-reset door
    • identity-auth.auth-gate-held-session-raw-host-families a3: rest-api-key-account-posture.pin drives RestServer.enforceAuth with a hand-built req/res and a fake auth; http-dispatcher.api-key-account-posture drives HttpDispatcher with fakes — neither answers an HTTP x-api-key call
    • identity-auth.auth-gate-held-session-raw-host-families a1: 'raw-host families' are proven at mixed layers: storage, settings, share-link and cloud-connection pins call registered handlers with fake IHttpRequest/IHttpResponse
    • identity-auth.auth-method-matrix a3: verify names packages/plugins/plugin-auth/src/phone-otp-no-sms-service-refusal.test.ts as the pin — it exists but is not in automated.ref, and it drives AuthManager (unit), not the NODE_ENV=production boot's send-otp door.
    • identity-auth.auth-method-matrix a6: verify names packages/qa/dogfood/test/two-factor-lockout.dogfood.test.ts as the end-to-end pin for the 2FA gate — exists, not in automated.ref.
    • identity-auth.auth-method-matrix a9: verify names packages/plugins/plugin-auth/src/change-email-delete-user-wiring.test.ts ('auth-method-matrix: change-email and delete-user are booked as mounted in auth-route-ledger.ts but plugin-auth never configures better-auth's user.changeEmail / user.deleteUser — no switch to enable them #7735 — POST /delete-user stays unwired') — exists, not in automated.ref; AuthManager unit layer.
    • identity-auth.auth-method-matrix ref: a single OIDC pin (a7) for a 10-clause, 5-negative mixed item; kind 'e2e' over-implies coverage.
    • identity-auth.cookie-session-renewal-in-process a1: the runtime pin's DOORS are GET /data/:object, /auth/me/permissions and /i18n/locales — the clause's 'meta reads' leg has no door in it
    • identity-auth.implicit-account-linking-ownership a0-a3: the ref's 'end to end' cases drive the real better-auth handler (AuthManager.handleRequest) but over a hand-rolled in-memory data engine and with sys_account read off that fake, not an admin read through a booted server — they assert each clause's facts at the unit layer only
    • identity-auth.import-invitation-and-sso-domain-answers a1: the ref's admin-import-users-invite-link.test.ts asserts the auth.account_invitation template id on the import but never the 'self-requested reset still uses password_reset' half; packages/plugins/plugin-auth/src/admin-import-users-account-invitation.test.ts (cases ① and ②) asserts both and is not in the ref
    • identity-auth.import-invitation-and-sso-domain-answers a3: sso-domain-verification-unknown-provider.pin.test.ts mounts the real AuthPlugin on Hono but over createMemoryEngine (a hand-rolled engine fake), so it scores the doors at unit layer only
    • identity-auth.invitation-scope-gates a0: ref states its pending half is scored live — consistent
    • identity-auth.invitation-scope-gates n1: server-side denial of the forged request is pinned; the UI-hidden half is a5/a4 browser work

    integration-system

    • integration-system.connector-auth-kind-application a2: verify says 'pinned by connector-materialization.test.ts (fails boot loudly when credentialRef does not resolve)'; that case asserts /credentialRef 'MISSING' did not resolve/ only — not the connector, provider or the two remedies the clause requires, and it is an in-process kernel boot, not a boot log
    • integration-system.connector-auth-kind-application a3/n1: packages/spec/src/integration/connector-provider.test.ts ('rejects inline authentication secrets on a catalog descriptor / on a provider-bound instance (§3)') pins the [security] sys_metadata.metadata is a general cleartext sink: any authored artefact whose schema permits an inline credential lands it there (datasource config.password, connector authentication) #7990 half at schema level but is not in the ref; no pin found for the oauth2 discriminator refusal (spec/src/integration/connector.test.ts still parses oauth2 under AuthConfigSchema)
    • integration-system.connector-declarative-boot n1 says 'any of the four malformed-entry builds' while a3 lists three rejections — the counts disagree
    • integration-system.connector-declarative-boot ref's self-description matches the pin on this tree (two cases; halves only for a0–a2)
    • integration-system.connector-descriptor-audit a2: plugin.ts calls auditDeclaredConnectors on both the boot and the reload path; connector-descriptor-audit.test.ts drives only kernel:ready, so the reload half has no pin
    • integration-system.connector-descriptor-audit a1(c)/n1: no case in the ref feeds a provider-bound connector instance to findInertDeclaredConnectors or the kernel audit
    • integration-system.connector-stdio-default-deny ref is accurate: it scopes mcp-provider.test.ts to negative[0] at the provider unit and says a0-a2 are evidence-only, a3/n1 need the run
    • integration-system.datasource-admin-lifecycle a8: the ledger half names packages/services/service-datasource/src/datasource-route-ledger.conformance.test.ts as citable evidence, but it is not in automated.ref; the 404 half is pinned over a stubbed service only
    • integration-system.email-template-render a5: packages/qa/dogfood/test/email-template-overlay-survives-boot.dogfood.test.ts ('after a cold boot the metadata door and the rendered mail both carry the admin's wording') pins the redeploy-survival half and is not in the ref.
    • integration-system.email-template-render a3: packages/qa/dogfood/test/email-template-two-locales-survive-boot.dogfood.test.ts ('control: a locale nobody saved keeps the package ladder') touches the locale ladder and is not in the ref.
    • integration-system.email-template-render ref: one e2e pin for an 8-clause item; kind 'e2e' over-implies coverage (a1, a2, a4, a6, a7 unpinned).
    • integration-system.external-schema-drift-gate a4/a6: oracle is 'test' and the pins assert them, but each verify/evidence also asks for a live 'armed background drift check' log line — scored from the pin; the live line remains a boot leg
    • integration-system.external-schema-drift-gate n3: no pin asserts renderDiffMessage's text (datasource/object/per-column diff) — the fail-default case asserts rejects.toBeInstanceOf only
    • integration-system.external-schema-drift-gate n5: 'is a no-op when the external-datasource service is absent' asserts resolves undefined, not the absence of warn/error logs
    • integration-system.external-schema-introspection a3: remote-tables-twin.equivalence.test.ts only twins listRemoteTables; the object-draft ≡ external/tables/:remote/draft twin and the shared 400 EXTERNAL_DATASOURCE_ERROR refusal across spellings are not pinned (admin-routes covers the admin spelling's 400 only)
    • integration-system.external-schema-introspection a4: twin admission cases compare status+code across spellings but never assert the 403 message names manage_platform_settings
    • integration-system.external-schema-introspection n0/n2: admin-routes.test.ts drives a real HonoHttpServer with vi.fn services (route-level HTTP, not a booted stack)
    • integration-system.inbound-mailbox-association a2: scored at in-process — the clause's 'api' oracle is the stored rows, which the pin reads through the real engine after a real ingest; no HTTP read was made
    • integration-system.inbound-mailbox-association a1: inline-forward.test.ts pins the parser's participant extraction, not that an inline-forwarded message is ASSOCIATED with the original participants' records
    • integration-system.notification-org-and-redeliver-eligibility a1: notification-organization-follows-event.integration.test.ts proves organization_id on every row at the engine (ObjectQL+SqlDriver), but asserts nothing about the '[notify] no organization in scope' log line
    • integration-system.notification-org-and-redeliver-eligibility a2: the foreign mark-read is pinned only at unit level (messaging-service.test.ts › [security(service-messaging): a mark-read receipt takes the organization of whichever notification the caller names, with no check that the caller was its recipient #22026] markRead writes a read receipt only for a notification delivered to that user › ⛔ the non-recipient half…)
    • integration-system.notification-org-and-redeliver-eligibility a3: the redeliver pin drives the door through Request→Response (member handler + Hono canonical app) on a LiteKernel, not a full served stack

    platform-core

    • platform-core.activation-ledger-registration-home a4: packages/spec/src/system/constants/platform-object-names.test.ts ('registers exactly the objects each package declares') ties PLATFORM_OBJECTS_BY_PACKAGE to the declaring sources and would pin the one-owner membership, but is not in the ref
    • platform-core.activation-ledger-registration-home n2: platform-objects/src/plugin.test.ts asserts exactly one registering manifest; no pin drives a second registrant to observe the 'already owned by package' boot failure
    • platform-core.activation-ledger-row-contract n5/a4 (door half): packages/qa/dogfood/test/catalog-activation-door.dogfood.test.ts › 'a type with no switch is refused 400 by the door itself' and packages/runtime/src/domains/catalog-activation-door.test.ts (audience anchors 400, nothing written) exist and are not in this item's ref
    • platform-core.activation-ledger-row-contract a2: the dogfood key-set reading proves the physical table lacks organization_id but not the step-7 refused INSERT / control INSERT pair the verify names
    • platform-core.activation-ledger-row-contract a3: pins assert update-not-delete for the action (HTTP) and flow (store) kinds only; position/permission/sharing_rule re-enable rows are not covered here
    • platform-core.lifecycle-retention-sweep ref is accurate on scope (a2 pinned half, a3, n0-n1; a0/a1/a4 live; a5 a source read)
    • platform-core.lifecycle-retention-sweep a3: live sweep-line corroboration of the reaped count stays the run's
    • platform-core.lifecycle-retention-sweep n0: the unit proves the onlyWhen predicate reaches the reap filter/candidate read on a recording fake engine, not that real paused/running rows survive
    • platform-core.metadata-authoring-roundtrip ref is accurate: package-first-authoring.dogfood.test.ts and studio-object-designer.spec.ts are declared as scoring no clause; studio-record-page.spec.ts scores a2 only
    • platform-core.metadata-registry-serving a0: the pin never checks the registered kinds against DEFAULT_METADATA_TYPE_REGISTRY (step 2's presence table); it asserts only dashboard/action/report entries
    • platform-core.nav-surfaces-render a0/n0/n1/n3 score only if the parent can run pnpm -C examples/app-showcase test:smoke (Playwright + a live showcase with a console); otherwise not-run (browser)
    • platform-core.nav-surfaces-render a1: nothing in the ref computes the served-nav vs SURFACES diff — the 'coverage is current' clause has no automation
    • platform-core.serve-composition-v18 run note: serve-organization-record-page.e2e.test.ts is a *.e2e.test.ts file — it collects only under OS_TEST_TIERS=nightly; a run without it reports 0 tests for that file (a2 then not scored)
    • platform-core.v18-boot-refusals a3: scored from the pin by the clause's own fallback ('with no such boot run, this clause rests on authz-identity-objects-boot-refusal.test.ts — record which'); the run record must say the live steps[1] boot was not run.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    From #25815 (release-18.2.0-tier1, 156 items) — §2 checklist-accuracy findings, part 2/2 (areas: records-forms, search, studio-authoring). Each line is a ledger edit for the lane owning docs/qa/platform-checklist/**: revise the item, bump revision, append history citing #25815. Clause labels: aK = acceptance[K], nK = negative[K].

    records-forms

    • records-forms.action-param-widgets ref-parse: the parent's pins include objectui e2e/live/action-modal.spec.ts, which the ref names only as DROPPED ('cited here until revision 3 … so it was dropped') — a parser false positive; it scores nothing here.
    • records-forms.adhoc-filter-sort-builder a4: the pin reproduces the filter on page.reload() and checks the URL param + record-count-bar '2' only — it never captures the data request the clause's network oracle names, nor compares row identity.
    • records-forms.adhoc-filter-sort-builder ref-parse: the parent's pins include objectui e2e/live/saved-view-filter.spec.ts, which the ref names only as dropped ('cited here until revision 5 … so it was dropped') — parser false positive.
    • records-forms.bulk-select-all-matching a1/a4/n0: none of the three ref files exercises resolveBulkRows' paged fan-out or the HARD_CAP; the cross-page id resolution is unpinned even at component level
    • records-forms.bulk-select-all-matching a3/n2: bulkActionRefresh.test.tsx '[main 红:wildcard fall-through 守卫声明了一个已被删除的挂载(#4116 与 #4112 的竞态) #4140] bulk bar Clear resets both selection sources' asserts the behaviour in jsdom; the clause's dom/screenshot oracle needs the browser
    • records-forms.cascading-multilevel-and-clear a1: the spec POSTs {country:'us', province:'zj'} where the verify names {country:'cn', province:'ca'}, and asserts code invalid_option only — the verify's message key option_unavailable is not checked; the in-set answer is 201, not the verify's 200.
    • records-forms.cascading-multilevel-and-clear ref: rule-validator.option-visibility.test.ts is in the ref but by its own words scores no clause (validator layer) — the parent need not run it for this item.
    • records-forms.cascading-options a1/n0: the pin is an objectui Playwright live spec (needs a live stack + console at the objectui pin); it scores only if the parent runs it against a booted showcase.
    • records-forms.comment-reactions-and-edit-stamps a1/a2: sys-comment-reactions-door.integration.test.ts is named a 'door' test but boots ObjectKernel + ObjectQLPlugin over sqlite-wasm and maps errors with mapDataError — no HTTP adapter, so it cannot score the api clauses.
    • records-forms.concurrent-edit-conflict a3: the ref scores acceptance[3] from occSave.test.tsx › 'ObjectForm edit — OCC guarded save › 409 → "overwrite" retries re-keyed to the server currentVersion and completes the save', but that case runs over a mocked data source, so it pins the client re-key only — not the clause's api oracle (the retry answered 200 and a re-read shows one winner)
    • records-forms.concurrent-edit-conflict a1: occSave.test.tsx pins the modal Keep editing / Overwrite choice in jsdom; the dom oracle wants a rendered (screenshot-confirmed) dialog, and the inline ConcurrentUpdateDialog half has no pin
    • records-forms.concurrent-edit-conflict pins: the parent's pin list includes objectui e2e/live/inline-edit-polish-2572.spec.ts, which the ref names only to say it was DROPPED at revision 4 (no If-Match, no conflict, stale at the pin) — a ref-parse over-inclusion; it scores no clause
    • records-forms.conditional-rules-grid ref-parse over-inclusion: the parent's pins list carries objectui e2e/live/grid-file-upload.spec.ts, which the ref says was DROPPED at revision 8 and scores no clause — do not run it for this item
    • records-forms.conditional-rules-grid all objectui pins are Playwright e2e/live specs needing a live stack; they can only score in a browser run, and even green they score halves only
    • records-forms.conditional-rules-header a2: the ref claims field-conditional-rules.spec.ts pins 'acceptance[2]'s client lock … tax_rate's input giving way to the read-only field group at paid', but the spec asserts the OPPOSITE on the New dialog: at paid taxRate toBeEnabled() and the read-only group toHaveCount(0) (objectui#13436 — INSERT is exempt from readonlyWhen); no pin drives an edit form of a paid invoice
    • records-forms.conditional-rules-header pins: the parent's pin list includes objectui e2e/live/list-row-action-cel.spec.ts, which the ref names only to say it was DROPPED at revision 3 (it gates the task list's Mark Done, not the invoice's Edit/Delete) — a ref-parse over-inclusion; it scores no clause
    • records-forms.conditional-rules-header a0/a3: both pins are browser tests that read the DOM directly via Playwright locators (no screenshot step), which satisfies render-first only because Playwright waits for visibility
    • records-forms.delete-behavior-matrix a0–a4/n0–n3: every pin is engine-level (ObjectQL over a test driver); precedent QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 scored a0–a4, n0–n3 PASS from them before the layer rule — at the api oracle they score not-run until a REST pin exists.
    • records-forms.delete-behavior-matrix a5: packages/spec/src/data/field.test.ts ('deleteBehavior: set_null on master_detail is a parse-time rejection') pins the FieldSchema accepts deleteBehavior: 'set_null' on a master_detail, and the engine silently resolves it to cascade #9689 parse seam at schema level and is not in the ref; the verify's PUT refusal has no pin.
    • records-forms.encrypted-field-behavior a0: the dogfood pin scores the masked-GET half only; the 'secret:<handle>' column / sys_secret ciphertext leg is asserted only in packages/objectql/src/secret-fields.test.ts at the engine layer (the verify makes that leg conditional on DB inspection)
    • records-forms.field-history-tracking a2: objectui e2e/live/record-history-display.spec.ts (in the ref, claiming no clause) does open showcase_account's History tab, so it holds a2's flag-true half in a browser; the task-detail absence half has no pin
    • records-forms.field-type-constraints a5/a6: ref says engine-lookup-referential-integrity / engine-autonumber-runtime-owned pin these; both drive ObjectQL in-process, not the /data door the api oracle names
    • records-forms.field-type-constraints ref names field-zoo.matrix.ts — a data module, not a test file (correctly absent from pins)
    • records-forms.field-type-constraints a0-a4: the ref's 'round-trip & masking' pin asserts only accepted vectors; none of the refusal codes (max_length, min_value, max_value, invalid_number, invalid_option, invalid_type) is pinned at any layer by the ref
    • records-forms.field-type-matrix ref names field-zoo.matrix.ts (a vectors module, not a test file) — a ref parser must treat it as a fixture, not a pin; field-zoo-value-shape.test.ts (in pins) asserts no clause directly (write vectors parse under valueSchemaFor)
    • records-forms.field-type-matrix a5/n1: ref implies relational coverage incl. data: a lookup accepts an id that does not exist in the referenced object — including the RBAC permission-set link tables #4441, but field-zoo-roundtrip only seeds real ids; no dangling-id refusal is asserted
    • records-forms.field-type-matrix a4: f_autonumber is a 'present' check (non-null) — 'server-assigned' is inferred from it not being written
    • records-forms.field-unique-enforcement a4: clause text says bare unique 'NULL-organization rows fold to ONE bucket' (ADR-0120 D3); both pins now assert the opposite — 'a row with NO organization is exempt — ... the D3 bucket retired' (memory) and 'on a pre-18 nullable column, rows with no organization are NOT constrained (ADR-0131 D1)' (SQL). The clause needs re-authoring; it cannot score pass from these pins as written
    • records-forms.field-unique-enforcement a0-a3/n0-n2: ref correctly says no pin drives a REST door
    • records-forms.form-dirty-guard a0/n0: discardGuard.test.tsx covers the X close + Cancel + pristine paths for ModalForm/DrawerForm, but no Escape or backdrop-click case
    • records-forms.form-dirty-guard a2: the file holds 11 it() cases at the pin; the '14/14' cited from QA run QA run · surface:browser (65/65) · 36b2889c · 2026-10-12 · 50 PASS / 2 PARTIAL / 12 FAIL / 1 BLOCKED / 0 NOT-RUN #23163 will not match this tree's count
    • records-forms.gantt-interactions a1/a2: ref maps these clauses to component/unit cases (cases exist at pin b41ed7f), but the clauses' oracle is api (row-set diffs / server reads) — the pins stop at the component's update callback and cannot score them
    • records-forms.gantt-interactions ref names objectui commit 0abd4f9 for the per-clause mapping; the run pin is b41ed7f (the named cases are present there)
    • records-forms.import-job-undo-cancel a3: the ref says each spec covers acceptance[3] ('the job list read on undoable and revertedAt'); the specs read the list once before undo (filter undoable && !revertedAt) and confirm the revert only through the UI testid import-history-reverted-<id>, so 'revertedAt once a job is reverted' is never read off GET /import/jobs
    • records-forms.import-job-undo-cancel a1/n0: both specs count with an unfiltered GET /api/v1/data/<object> and read records.length — a page-bounded list length, not the clause's marker-filter count — and they self-skip (IMPORT_CONSOLE_LIVE / harness reachability) and default to crm_app/crm_lead, so a skip or a non-showcase target scores nothing
    • records-forms.import-wizard-encoding-and-hints pins are objectui files (repo objectui → /home/claude/ou-pin); they score a0–a2 only when the objectui pin worktree's vitest runs them
    • records-forms.list-view-capabilities a1: ref says saved-view-filter.spec.ts covers acceptance[1]; it asserts only that no showcase_task data response was >=400 and the count bar starts '2 ' — the AST filter param and the count-vs-response-total match are not captured
    • records-forms.list-view-capabilities showcase-search.dogfood.test.ts is in the ref but, as the ref itself says, scores no clause of this item
    • records-forms.master-detail-atomic-save pins list includes e2e/live/summary-rollup.spec.ts, but the ref states it was dropped at revision 5 and asserts no clause — a ref-parse over-capture (it names the file in prose)
    • records-forms.master-detail-atomic-save a0: master-detail.spec.ts pins carrier-neutrally on showcase_project_workspace with one child; the two-line invoice payload and 'not N sequential writes' (batch count) remain the run's
    • records-forms.object-hook-lifecycle a0: the pin drives POST /forms/contact-us/submit (anonymous, status 'closed' stripped), not POST /api/v1/data/showcase_inquiry omitting source/status as the verify names — the hook's 'web' stamp is engine-side so it scores, but the /data door itself is undriven
    • records-forms.object-hook-lifecycle a6/n0: hook-error-format.dogfood.test.ts proves a throwing beforeDelete (hef_ref_guard, default onError) leaves the row; no pin drives a throwing beforeInsert POST
    • records-forms.object-hook-lifecycle ref says the four objectql units ran '83 tests'; this tree has 79 it() cases across them (25+12+22+20) — count drift, not a missing file
    • records-forms.predicate-relationship-traversal a3 is scored from an engine pin by the item's own knownGaps (no restricted persona on stock showcase) — a deliberate layer exception, not a rule-6 pass for an HTTP oracle
    • records-forms.record-clone-contract ref says packages/rest/src/search-clone-route-schema-conformance.test.ts 'drives the live mount' — it calls the registered handler on RestServer(mockServer) with a mocked protocol whose cloneData returns a constant body; no HTTP adapter, no engine
    • records-forms.record-clone-contract a3: the verify names 'the Check whether sys_session.token — a live session credential — serializes over the data API (ADR-0100 channel 3 has no read protection) #7823 strip suite' but the ref names no such file; packages/metadata-protocol/src/protocol.write-response-internal-fields.tripwire.test.ts (enumerates cloneData) exists and is not in the ref
    • records-forms.record-clone-contract ref spells files as 'packages/metadata-protocol — search-clone-schema-conformance.test.ts' (package + em dash + basename, no src/ path) — a strict path parser would miss both; the parent resolved them
    • records-forms.record-discussion-mentions a5: comments-permission-matrix '(f) enable.feeds:false still answers FEEDS_DISABLED' asserts 403 + code on its cmt_nofeeds fixture; it does not read the thread's zero rows after the refusal
    • records-forms.record-discussion-mentions a6/n3: capability-gate-update-verb.test.ts is engine-level (ObjectQL + installAuditWriters), as the clause itself says
    • records-forms.record-discussion-mentions a8: the clause names objectui recordActivityFeed.test.ts as a fallback oracle, but it is not in automated.ref (objectui), so a ref-driven run never executes it
    • records-forms.record-discussion-mentions a9: mention-recipient-gate.integration.test.ts is engine-level; the ref itself says partial at most
    • records-forms.record-edit-undo UndoManager.test.ts tests only the in-memory undo/redo stack; it scores no clause of this item (none of the clauses is a stack-semantics clause) — the ref should say so explicitly
    • records-forms.view-type-gallery a5: the pin is a Playwright spec (pnpm -C examples/app-showcase test:smoke) that needs a built console and a live stack — it scores only if the parent actually runs it; a vitest-only pin run leaves a5 not-run.
    • records-forms.write-answer-advisories-rollback-and-tree-delete a1: advisory-write-answer.test.ts calls ObjectStackProtocolImplementation createData/updateData in-process — the REST PATCH body is not observed
    • records-forms.write-answer-advisories-rollback-and-tree-delete a2/n0: engine-after-hook-abort-unit.test.ts drives ObjectQL directly; no HTTP pin for the aborting afterInsert
    • records-forms.write-answer-advisories-rollback-and-tree-delete a3: scored on the referenceless tree fixture (rtl_*), not a showcase object — acceptable since the clause names no carrier

    search

    • search.cross-field-object-search a1: the pin proves the name-hit control only as 'some returned name contains retail' (names.some(...includes('retail'))), not by naming Acme Retail; it satisfies the verify's 'a name-containing-retail account'
    • search.field-scoped-narrowing a1/n0/n1: the bare ref claims the item; the pin has no $searchFields refusal case. packages/rest/src/rest-server-closed-query-params.test.ts and list-view-grouping-query-door.test.ts mention INVALID_FIELD + searchFields (route-handler level) and are not in the ref
    • search.field-scoped-narrowing a3: pin drives only POST /data/showcase_account/query with bare search/searchFields; the GET $search spelling is unpinned
    • search.global-search-skips-unreadable a0–a2: the dogfood pin runs on its own skipsearch_open / skipsearch_walled fixtures, not the showcase objects (W, showcase_invoice) the steps name; a0's unscoped case does not assert totalObjects (the mixed case does)

    studio-authoring

    • studio-authoring.expression-editors a0-a6: every pin in the ref is a jsdom component/unit test; it holds evidence for the editor's lint, inference, completion and test-run logic but scores none of the screenshot/dom/api clauses
    • studio-authoring.meta-save-preconditions-and-draft-rows a1-a3: every pin stops above HTTP (RestServer with createMockServer, HttpDispatcher.dispatch called directly, objectql repository/protocol units) — the api-oracle clauses stay the run's live leg
    • studio-authoring.metadata-diagnostics-sweep a3/n0: the ref says the pin covers the outage clause ONLY, but its '[[finding] getMetaDiagnostics scannedTypes still overstates the swept set when a type is benignly skipped — no payload field lets a caller detect partial coverage #8924] a caller error the producer classified is refused loudly' describe asserts the ?type= misspelling refusal at the protocol layer — unclaimed protocol-layer evidence; the api-oracle clauses still need the REST door.
    • studio-authoring.object-designer-roundtrip a3: F4 seeds one real option, not the three the clause judges with, and never publishes — the ref says so; the banner half is pinned under a different fixture than the clause states.
    • studio-authoring.org-override-registry-gate all clauses are api-oracle but the only pin (overlay-precedence.test.ts) is a unit test of the overlay whitelist (describe 'overlay whitelist enforcement (shared-DB invariant)'), stopping above the HTTP door; it corroborates a0/a2/a3/n0 and scores none; no pin touches a4's DELETE reset
    • studio-authoring.permission-matrix-editor-ux fieldBulk.test.tsx asserts filter narrowing, the '2 / 8' counter and bulk scope as jsdom checkbox states — evidence for a0/a1 at the component layer, but never the SAVED fields map that a2/a3/n0 make the authority
    • studio-authoring.permission-matrix-editor-ux a5: readonly.test.tsx covers the package and type gates and a capability gate; the artifact gate ('provided by a code package') sits in PermissionMatrixEditor.artifactTier.test.tsx, not in the ref
    • studio-authoring.record-page-roundtrip ref cites console pin cf153eb for the reading; the run's objectui pin is b41ed7f (both specs present and asserting as described)
    • studio-authoring.save-door-runs-authoring-rules a1-a3/n0: none of the eight pins boots HTTP (metadata-protocol saveMetaItem, objectql, spec, lint units and a RestServer unit) — the api clauses stay the run's

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    From #25815 (release-18.2.0-tier1) — §3 fixture gaps, partial coverage and not-run handover.

    • Result: 156 items, 6 PASS / 123 PARTIAL / 0 FAIL / 2 BLOCKED / 25 NOT-RUN; 1178 clauses, 315 pass · 0 fail. No pin red (framework 374 files, 10,009 passed; objectui 29 unit files, 378 passed; objectui e2e/live 31/31; showcase Playwright 53/53; verify --rls 0 FAILED · 0 HOLES). Nothing for §5.
    • Partial coverage, parked here: one Parked-on: #25807 line per PARTIAL / NOT-RUN / BLOCKED item in QA run · release-18.2.0-tier1 (131/156) · 6679644a · 2026-10-25 · 6 PASS / 123 PARTIAL / 0 FAIL / 2 BLOCKED / 25 NOT-RUN #25815's close-out comment (150 lines; clause-level reasons in its three detail comments). Of the 861 unscored clauses, 254 are layer-limited (a pin asserts them below the oracle's layer — RUNNER rule 6), 132 half-asserted, 50 procedural, the rest unpinned.
    • Not-run handover (25) — each needs a live run, or a pin at the oracle's layer: access-security.me-permissions-aggregation-parity, access-security.record-access-explain, access-security.share-link-landing-page, ai.mcp-oauth-private-host-transport, ai.mcp-validate-expression, api-backend.bulk-write-contract, api-backend.query-contract-matrix, approvals.decision-only-via-service, automation.setup-packaged-automation-board, cli.scaffold-first-run, i18n.surface-matrix, integration-system.connector-descriptor-audit, platform-core.url-overlay-contract, records-forms.bulk-select-all-matching, records-forms.concurrent-edit-conflict, records-forms.conditional-rules-grid, records-forms.delete-behavior-matrix, records-forms.field-type-constraints, records-forms.gantt-interactions, records-forms.import-job-undo-cancel, records-forms.list-view-capabilities, records-forms.record-clone-contract, records-forms.record-discussion-mentions, studio-authoring.org-override-registry-gate, studio-authoring.permission-matrix-editor-ux.
    • New fixture gap: records-forms.import-job-undo-cancel — e2e/import-console/import-console-undo.spec.ts needs IMPORT_CONSOLE_LIVE=1 and an app-crm boot (crm_app/crm_lead); its twin e2e/import-harness/import-undo.spec.ts needs the plugin-grid demo harness on :5200 over app-crm on :3002. Neither runs on the stock showcase.
    • cli.scaffold-first-run: its only evidence is the nightly scaffold-e2e.yml, last green at 4cc17db3c0 (run 40158961882), not this subject.
    • BLOCKED, unchanged: access-security.no-active-org-session-semantics (QA run · priority:P0 · e4e5c6e3 · 2026-08-17 · 7 PASS / 7 PARTIAL / 2 FAIL / 2 BLOCKED #9334), records-forms.record-edit-undo (no packaged undoable update action).

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    T3 manual set recorded: #25817 (release-18.2.0-manual-set, 29/29 at 6679644a, pin b41ed7f68956: 25 PASS / 4 PARTIAL / 0 FAIL).

    Parked here (fixture gaps):

    • approvals.decision-action-matrix A9: there is no org-less request on stock. Both remaining candidates are refuted: a schedule-triggered approval, and an api-hook on an object with no organization column.
    • automation.trigger-status-contract A4: the 503 STORE_UNAVAILABLE arm.
    • automation.packaged-flow-subflow-disable-refusal N1: a second packaged caller needs a package-loader-installed package. A ?package=-authored flow counts as deployment-authored.
    • records-forms.action-location-matrix knownGaps[2]: A3 fail-closed and A4 (a).

    Checklist-accuracy findings: All of them are listed in #25817 under "Checklist-accuracy findings and fixture gaps". They include one RUNNER.md environment-fact correction: on os dev at 6679644a, the connector meta read shows the compiled baseUrl (3000) while live dispatch follows OS_PORT, so the prescribed Check misreports the fixture.

    Coverage gap: no ledger item asserts #25626's walled Create User join or 400 NO_ACTIVE_ORGANIZATION. This is pending confirmation by the addendum record on 17f8217b.

    Extracted product defects: #25818, #25819, #25820, #25821, #25822.

    Superseded: #25479. Its 7 un-rerun verdicts are carried forward on #25817.

  6. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    T3 addendum: #25823 (identity-auth.admin-lifecycle-operations 1/1 PASS at 17f8217b, after #25626). Parked here:

    • Coverage gap. No item asserts feat(plugin-auth): multi-org Create User joins the administrator's current organization #25626's walled Create User join. The missing clauses are:

      • joins the caller's active organization as member, and a body organizationId chooses nothing;
      • 400 NO_ACTIVE_ORGANIZATION with no row;
      • invite-only still joins.

      The candidate pin is packages/qa/dogfood/test/create-user-organization-join.dogfood.test.ts.

    • Stale after feat(plugin-auth): multi-org Create User joins the administrator's current organization #25626:

      • access-security.no-active-org-session-semantics rev 8, its member-less operator create-user producer;
      • identity-auth.workspace-org-switch rev 5, personas[2];
      • RUNNER.md "Walled personas come from the admin door".

      Each recipe now needs the operator to create and set-active an organization first.

    • identity-auth.admin-lifecycle-operations's automated.ref overclaims. The A0 sign-ins, the A4 live-session half, the A6 stop half and the A9 state read-back beyond two routes are unpinned.

  7. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: state — pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T16:00Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Checklist-accuracy findings carded — maintainer-directed (project thread, 2026-10-25 22:55Z, verbatim: 「写issue,不派发」). ⛔ Not dispatched; ⛔ not a claim.

    The accuracy findings parked on this anchor from #25812, #25815, #25817 and #25823 are now one card per ledger file, each listing its lines verbatim with the record they come from. They carry documentation · priority:p2 · domain:devx · area:devpath and no target:v18 (not release blockers). This anchor's §2 and the part 1/2 + 2/2 comments stay as the evidence; close-out of each line happens on its card.

    card ledger file lines
    #25835 access-security 65
    #25836 ai 14
    #25837 api-backend 28
    #25838 approvals 19
    #25839 attachments-storage 18
    #25840 automation 24
    #25841 cli 12
    #25842 i18n 9
    #25843 identity-auth 23
    #25844 integration-system 26
    #25845 platform-core 19
    #25846 records-forms 60
    #25847 search 6
    #25848 studio-authoring 9
    #25849 ux-conventions 5
    #25850 RUNNER.md 3

    Not carded here (still parked on this anchor): the fixture gaps and PARTIAL coverage in §3, the 25 not-run items, and the #25626 coverage gap's fixture side (its missing clauses are on the identity-auth card).


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: the 16 ledger-edit cards are pm:on-hold · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T23:56Z

    ⛔ Not a claim, ⛔ not a dispatch.

    Restart-when: the maintainer says to dispatch the 18.2.0 ledger-edit cards, on this card, on any of them, or in the project thread.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Released: the 16 ledger-edit cards → pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T10:41Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  11. 36 remaining items

  12. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 4 · targeted run of the slice C approvals items · 2026-10-28T06:54Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (dispatching seat; the cloud session is named in the dispatch note under this claim)
    Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-25807-approvals-run
    Worktree: the cloud session's own container
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: a checklist-test run (per .claude/skills/checklist-test/SKILL.md and docs/qa/platform-checklist/RUNNER.md) of the five approvals items PR #27112 rewrote: approvals.viewer-gating-submitter-side, approvals.notification-deep-link, approvals.dynamic-approver-routing, approvals.inbox-keyboard-flow, approvals.approver-resolution-matrix, against a fresh showcase boot on origin/main a98daf75f4. Output: one run record, as the skill defines it, plus the ledger runs/status edits RUNNER.md prescribes for a run, in one draft PR Part of #25807 (slice C run). A clause that fails is recorded as a FAIL with evidence, and the product defect goes in out_of_scope_findings for the seat's filing gate. ⛔ No product code, no item rewritten to pass, no other items (stop on breach; explain in the report)
    Container & model: M, mode:cloud, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate"), effort: high (p1)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6462712480
    Premise: the five items read their source at f2fdac5d and were not driven live (os-dev-report 6462063295, open question 2, answered A by the seat). Three clauses changed meaning, so no prior verdict carries.
    Serial constraints cleared: no open PR touches docs/qa/platform-checklist/areas/approvals.json (PR #27112 merged as e68669a66a).


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch note · devx seat 2 · 2026-10-28T06:56Z

    Claim 6462738260 (targeted run of the five slice-C approvals items) dispatched to cloud session session_01QSeKYpK8js3AA3SHa3SyJH, outcome branch claude/issue-25807-approvals-run.


    Generated by Claude Code

  14. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25807,
      "status": "done",
      "branch": "claude/issue-25807-approvals-run",
      "pr": null,
      "run_record": "https://github.com/objectstack-ai/objectstack/issues/27134",
      "session": "session_01QSeKYpK8js3AA3SHa3SyJH (cloud session; claim 6462738260 by seat session_01QSeKYmTYfaPbLQD4BJfomW names this branch, verified)",
      "premise_still_valid": true,
      "summary": "Targeted checklist-test run of the five approvals items PR #27112 rewrote. All were driven live (browser plus API) on a fresh showcase boot at origin/main 07d18e692, port 41807, its own file DB. Revisions pinned: viewer-gating-submitter-side r7, notification-deep-link r8, dynamic-approver-routing r4, inbox-keyboard-flow r3, approver-resolution-matrix r9. Result: 5/5 items PASS, 25/25 clauses pass, 0 fail, 0 blocked. The three clauses slice C had only read from source now hold live: the request page's decision panel, the deep link landing on the served record page (unknown id → 'Record not found'), and the ADR-0142 D6 queue legs. Run record #27134 is the deliverable (label qa-run; title parses with qa-rollup parseRunTitle). The run produced no ledger edit: all five items are already status active, no step blocked a verdict, and the ledger has no runs field. So no PR was opened.",
      "tests": "No product code; no package test owed. Live evidence is in #27134. Highlights: Mei's forged approve → 403 FORBIDDEN, and the request plus /actions were byte-identical before and after; Ada's entitled approve → 200. Two cold loads of /system/approvals?request=ID landed on /apps/com.objectstack.setup/sys_approval_request/record/ID with history.length 2. The outputless approve of the dynamic stage 1 → 400 VALIDATION_FAILED; picks of 1 and 2 gave stage-2 pending_approvers [admin] and [Ada, admin] in order, and both runs went paused→completed. Keyboard: ring clamped; r/a opened an alertdialog with 0 POSTs before confirm, then exactly one POST {actor_id}, the same body as the row button; the input guard was proven by synthetic keydown with a body positive control. Matrix: user/field/manager/team/department/queue/org_membership_level/role slates matched the planted rows; the descendant dropped out after deactivation; role deprecation WARN logged; admin_rescue/fail/auto_approve(marker written)/fallback/fallback-to-nobody all matched; empty-queue 'expanded to nobody' WARN with admin_rescue:abandoned [].",
      "gates": "At HEAD 07d18e69 (the branch equals origin/main, no diff). node scripts/check-platform-checklist.mjs exit 0 ('OK — 16 areas, 329 items (324 active, 1 planned)'); --self-test exit 0 (265 assertions). node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack exit 2, 'this branch changes nothing against origin/main (merge base 07d18e692) — nothing to derive'; --ran (empty list) exit 2 with the same line. That is a zero derived set, not a red gate. No PR, so no CI check-runs.",
      "dogfood_battery": "n/a — no PR, no `!` title, Clause-②: no",
      "mcp_calls": "0 — no MCP GitHub tool was called; card and PR reads were unauthenticated REST GETs",
      "api_writes": "2 — (1) scripts/pm/issue-create.mjs via the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches 204, run 40651061886 success) → POST /issues, creating #27134 with label qa-run, read back byte-identical; (2) this os-dev-report via scripts/pm/post-stamped.mjs → POST /issues/25807/comments. git push of the outcome branch is not a REST write.",
      "deviations": [
        "The outcome branch was pushed once, with no commits of its own (at origin/main 07d18e69 after a fast-forward merge), before any work. os-dev rule 1 exempts harness-specified branches from the empty-branch probe, so that push was unnecessary. It carries no content.",
        "The primary checkout /home/user/objectstack was detached at a98daf75 so the outcome branch could be checked out in the worktree /home/user/objectstack-issue-25807; all work ran there.",
        "pnpm build and pnpm console:build ran directly, not through scripts/pm/os-verify-lock.sh. This container was single-tenant (no parallel agent), and both used --concurrency=2.",
        "Keyboard input guard: real typing into the search input is confounded by the list filter clamping focus, so the guard was scored on synthetic keydown events dispatched on the input, with a positive control on body. Enter inside the open dialog was not pressed, because focus sits on the dialog's own Cancel button.",
        "approver-resolution-matrix: position and expression were not re-driven as scratch flows, per the item's knownGaps. Expression is cited from this run's dynamic-approver-routing legs; position from the seeded INV-1008 slate against sys_user_position. My first auto_approve marker used CEL `recordId` (my error) and failed in the marker node; re-run with `record.id`, the marker was written.",
        "The qa-rollup self-check (node scripts/qa/qa-rollup.mjs) was not run over the network: RUNNER records its page-2 403 behind this proxy. The title was checked offline with parseRunTitle → ok.",
        "Commit trailers: no commit was made."
      ],
      "open_questions": [
        {
          "question": "The dispatch named 'the runs/status fields in approvals.json' as run ledger edits. The ledger has no runs field (item keys are id..history), and status flips only planned→active on a passing run; all five items are already active. Should a passing run of active items write anything to the ledger?",
          "options": ["A no ledger edit; the qa-run issue is the record (RUNNER: nothing lands in the repo)", "B add a run pointer to each item's history (not prescribed anywhere today)"],
          "recommendation": "A, because RUNNER.md 'Run records' and checklist-test §4 say a run's durable record is its issue and the tree only changes on a §3 item edit; that is what this run did"
        },
        {
          "question": "Two checklist-accuracy notes surfaced. They are in #27134 for the anchor card and were not edited, because the dispatch forbids rewriting items. (1) dynamic-approver-routing knownGaps[0], and acceptance[3]'s reason, say a paused run carries no variables; a paused run now carries `variables` (engine.ts paused recordLog writes variablesSnapshot; measured live). (2) notification-deep-link steps[3] says APP is `setup`; measured `com.objectstack.setup`. Should a follow-up accuracy slice take them?",
          "options": ["A yes, fold into the next wave-2 accuracy slice", "B leave; no verdict moves on either"],
          "recommendation": "A for (1): the knownGap now argues against an oracle the platform does serve, and the next author may keep the weaker functional proxy for a stale reason. (2) is cosmetic"
        }
      ],
      "out_of_scope_findings": [
        "carrier: #25807 (wave anchor) · noted, not filed: checklist accuracy — approvals.dynamic-approver-routing knownGaps[0]/acceptance[3] stale; paused run detail carries `variables` (packages/services/service-automation/src/engine.ts paused recordLog `variables: variablesSnapshot`; live GET /api/v1/automation/showcase_dynamic_approval/runs/RUNID → status paused, variables present). Dedupe words: paused run variables snapshot, dynamic-approver-routing knownGap stale, suspended run variables",
        "carrier: #25807 (wave anchor) · noted, not filed: checklist accuracy — approvals.notification-deep-link steps[3] 'APP is setup' vs measured com.objectstack.setup. Dedupe words: deep link landing app segment, requestPagePath setup app name",
        "carrier: none · observation, not a filable class: GET /api/v1/approvals/requests?status= (empty value) answers 200 with the unfiltered list, while ?limit=/?offset= refuse empty (rest approvals-routes.ts list handler). An empty filter reading as absent is a defensible contract, so it is noted only. Dedupe words: approvals list empty status param, status= unfiltered"
      ]
    }

    Generated by Claude Code

  15. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    席位核对 — ACCEPT · domain:devx#2 · the slice C run · 2026-10-28T08:36Z

    席位意见:收。slice C 改写的 5 个审批条目在 07d18e692 的全新 showcase 上实测 5/5 PASS、25/25 条款通过;slice C 从源码读的三条(请求页决策面板、深链落到记录页、ADR-0142 D6 queue 路径)现在有实测证据。运行记录 #27134 即交付物,按 RUNNER.md 不产生账本改动,所以没有 PR。

    Report: os-dev-report 6463421704. Run record #27134 (qa-run; title 5 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN). The revisions pinned at run time are r7, r8, r4, r3 and r9.

    Seat's check:

    • The record's environment fingerprint names the sha, the boot command and the personas.
    • Each item has per-clause verdicts with evidence: the 403 forged approve with the request byte-identical before and after, the deep link with history.length 2, and the queue's "expanded to nobody" WARN.
    • The report's one product-side claim is that a paused run now carries variables. It holds on main: service-automation/src/engine.ts L5992–6016 writes variablesSnapshot.

    Open questions:

    1. A. A passing run of items that are already active writes nothing to the ledger. The issue is the record, per RUNNER.md "Run records".

    2. A, both notes:

      • dynamic-approver-routing knownGaps[0] and acceptance[3]'s reason are stale: a paused run carries variables.
      • notification-deep-link steps[3] calls APP setup; the measured value is com.objectstack.setup.

      Both are small accuracy edits. The seat dispatches them as slice D on this card.

    Out of scope: GET /api/v1/approvals/requests?status= with an empty value answers unfiltered. It is a defensible contract and is noted only, not filed.

    Session: the run's cloud session session_01QSeKYpK8js3AA3SHa3SyJH is archived in this act; its record is final.


    Generated by Claude Code

  16. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 4 · wave-2 accuracy slice D · 2026-10-28T08:40Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (dispatching seat; the cloud session is named in the dispatch note under this claim)
    Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-25807-wave2-accuracy-d
    Worktree: the cloud session's own container
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: docs/qa/platform-checklist/areas/approvals.json only, two items, as run record #27134 and seat note 6464451167 name them: (1) approvals.dynamic-approver-routing knownGaps[0] and acceptance[3]'s reason. A paused run now carries variables (service-automation/src/engine.ts L5992–6016 variablesSnapshot, measured live in #27134), so the gap and the weaker proxy it justifies are re-measured and rewritten. (2) approvals.notification-deep-link steps[3]: APP is com.objectstack.setup, not setup. Each item gets revision +1 from main and one history row citing #27134. PR Part of #25807 (wave-2 accuracy, slice D). ⛔ No other items, no product code (stop on breach; explain in the report)
    Container & model: S, mode:cloud, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate"), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6464451167
    Premise: holds at origin/main 74133d980e, per run record #27134 (live at 07d18e692) and the seat's source check.
    Serial constraints cleared: no open PR touches docs/qa/platform-checklist/areas/approvals.json.


    Generated by Claude Code

  17. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Dispatch note · devx seat 2 · 2026-10-28T08:40Z

    Claim 6464507633 (slice D) is dispatched to cloud session session_01QSeKYmP1ZLg3jhTNud1E3J, outcome branch claude/issue-25807-wave2-accuracy-d.


    Generated by Claude Code

  18. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25807,
      "status": "done",
      "branch": "claude/issue-25807-wave2-accuracy-d",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27164",
      "session": "session_01QSeKYmP1ZLg3jhTNud1E3J (cloud session; claim 6464507633 by seat session_01QSeKYmTYfaPbLQD4BJfomW names this branch, verified)",
      "premise_still_valid": true,
      "summary": "Slice D edits one file, docs/qa/platform-checklist/areas/approvals.json, and touches two items. Each gets revision +1, keeps main's history as an exact prefix, and appends one row citing #27134. approvals.dynamic-approver-routing (r4 to r5): knownGaps[0] is rewritten as CLOSED by #7639, because a paused run's run-detail now carries its variables snapshot. On origin/main 74133d98 both suspend sites write it: the engine.ts paused recordLog, and the run-resume.ts re-suspend where this flow re-pauses at stage 2. acceptance[3] gets stronger, not weaker: it adds a snapshot leg, variables['lead_review.next_reviewers'] on the stage-2-paused run must equal the pick, and keeps the resolution leg. steps[7] and source[3] follow. approvals.notification-deep-link (r8 to r9): steps[3] now says APP is com.objectstack.setup. requestPagePath falls back to the name 'setup', and the app shell's canonicalAppPathname rewrites that alias to SETUP_APP_PACKAGE_ID. acceptance[3]'s verify parenthetical had the same stale word and is corrected the same way.",
      "tests": "No product code, so no package test is owed. Source re-read at origin/main 74133d98: engine.ts suspend path (variablesSnapshot to persistSuspendedRun and to the paused recordLog), run-resume.ts re-suspend (same snapshot), engine.ts applyResumeSignal (output lands as NODEID.KEY), approval-service.ts (outputs ride the resume envelope; the request DTO exposes flow_run_id), ApprovalsInboxPage.tsx requestPagePath (fallback 'setup'), app-shell appRoute.ts canonicalAppPathname plus AppContent.tsx's replace-navigate, packages/apps/setup/src/index.ts SETUP_APP_PACKAGE_ID = 'com.objectstack.setup'. A structural diff against main shows exactly 2 items changed, both history-prefix true with 1 row added, item count equal, and the area header unchanged.",
      "gates": "All at HEAD bf4b3b88, exit captured before any pipe. node scripts/check-platform-checklist.mjs exit 0 ('OK — 16 areas, 329 items (324 active, 1 planned)'; anchors 1036/1046 resolved, 10 on the named residual). --self-test exit 0 (265 assertions). node scripts/checklist-select.mjs area:approvals exit 0 (20 runnable, both items listed). dispatch-gates --commands --repo objectstack-ai/objectstack exit 0, 16 commands, and all 16 ran exit 0. One of them, pnpm --filter @objectstack/lint run check:doc-formula-expressions, first answered exit 3 (PREREQUISITE NOT MET, unbuilt lint/formula); after turbo build of those two under os-verify-lock (VERDICT command-exit 0) it answered exit 0. dispatch-gates --ran exit 0: '16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero)'. CI: PR just opened, check-runs in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm (Clause-②: no)",
      "mcp_calls": "0 — no MCP GitHub tool was called; card, run-record and PR reads were unauthenticated REST GETs",
      "api_writes": "2 — (1) pr_create via scripts/pm/fleet-write/dispatch.mjs (POST /repos/objectstack-ai/objectstack/dispatches 204, run 40660684390 success) → draft PR #27164 with assignee os-justin and label skip-changeset, body read back 4519/4519 bytes identical; (2) this os-dev-report via scripts/pm/post-stamped.mjs → POST /issues/25807/comments. git push of the outcome branch is not a REST write.",
      "deviations": [
        "Scope, declared in the PR: the dispatch named knownGaps[0] plus acceptance[3]'s reason, and steps[3]. The same stale fact also sat in dynamic-approver-routing steps[7] and source[3], and in notification-deep-link acceptance[3].verify ('setup on the bare route'). I corrected those inside the same two items so neither item contradicts itself. No other item was touched.",
        "The primary checkout /home/user/objectstack was detached so the outcome branch could live in the worktree /home/user/objectstack-issue-25807-d. All edits ran there.",
        "The commit carries the model-free trailer pair from AGENTS.md (Claude-Session plus Co-authored-by: Claude), not the harness-suggested model-named Co-Authored-By."
      ],
      "open_questions": [
        {
          "question": "acceptance[3]'s new snapshot leg names the stage-2 key variables['lead_review.next_reviewers']. It comes from source (applyResumeSignal writes NODEID.KEY), not from a live run: #27134 read variables on a stage-1-paused run only. Should a verification run confirm it before the next sweep relies on it?",
          "options": ["A leave it to the next scheduled approvals run (the history row says a prior acceptance[3] verdict does not carry)", "B dispatch a one-item checklist-test re-run of approvals.dynamic-approver-routing now"],
          "recommendation": "A, because the item records the gap, the resolution leg still holds, and a key mismatch would surface as a loud FAIL rather than a silent pass"
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  19. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #27164 (slice D) comment 6465106583 · 2026-10-28T09:14Z · ready + auto-merge armed. Part of: this anchor stays open.


    Generated by Claude Code

  20. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (partial): wave-2 accuracy slice D, via PR #27164, merged as 65354572b9 · 2026-10-28T09:26Z
    Release: session_01QSeKYmTYfaPbLQD4BJfomW (domain:devx#2). Claims 6462738260 (the run) and 6464507633 (slice D) are released. This card returns to pm:queue with no assignee in this act.

    Merged = reviewed. The merged diff matches the reviewed head bf4b3b88be: the sorted +/− lines are hash-identical. ACCEPT → PR #27164 comment 6465106583. Cloud session session_01QSeKYmP1ZLg3jhTNud1E3J is archived in this act.

    This wave's state on the card: slices A, B, C and D have all landed. The five slice-C approvals items were driven live, 5/5 PASS (run record #27134). Their two accuracy notes landed in slice D.

    Still open, owed to the next scheduled approvals run: approvals.dynamic-approver-routing acceptance[3] has a new leg that reads variables['lead_review.next_reviewers'] on the stage-2-paused run. That leg was written from source. No live read has confirmed it yet.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpm:queuepriority:p1High: required for production / M2target:v18

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions