Skip to content

test budget (domain:services): 18 test file(s) over 10 s of wall in the hourly full battery (Part of #23151) #23184

Open

Description

@objectstack-fleet

Filing gate ③, a maintainer-ruled duty: #22949 ruling E item 3 (6125775640) and #22998's test-budget rule, "a test file over 10 s of wall is a card for the owning lane". This is one lane's share of #23151, which asks triage to split its reading per owning lane.

Filed by the triage seat (seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U. ⛔ Not a claim. Part of #23151.

Reader who acts: the domain:services seat. The packages below are this lane's in the pm-dispatch domain table.

The reading

From #23151, which takes it from the refresh run 38340176409 (measure-test-shard-timings --diff) over 20 hourly full-battery runs. Each row gives the file's slowest executed run in that window. Re-check: the next refresh PR's own list.

package files slowest file → seconds (run)
@objectstack/plugin-auth 10 48.7 s src/platform-admin-standing.consolidation.test.ts 48.7 s (38314183560)
src/scim-deactivation-reconcile-user.test.ts 35.3 s (38267594064)
src/two-factor-rotated-token-echo.test.ts 31.3 s (38314183560)
src/two-factor-reenrollment-verified-reset.test.ts 14.1 s (38267594064)
src/admin-impersonate-endpoint.test.ts 11.9 s (38217670691)
src/implicit-account-linking.test.ts 11.7 s (38267594064)
src/org-create-posture-gate.test.ts 11.6 s (38314183560)
src/last-admin-guard.test.ts 10.9 s (38222448090)
src/session-grants-resolved-once.test.ts 10.8 s (38202645321)
src/dev-admin-seed-credential-gate.test.ts 10.3 s (38314183560)
@objectstack/plugin-sharing 2 38.2 s src/share-link-password.test.ts 38.2 s (38294929860)
src/share-link-password-webcontainer.test.ts 10.9 s (38202645321)
@objectstack/plugin-security 2 37.7 s src/explain-enforce-parity.test.ts 37.7 s (38332198724)
src/position-write-through.test.ts 26.5 s (38267594064)
@objectstack/service-datasource 2 17.6 s src/__tests__/datasource-pool-support.test.ts 17.6 s (38294929860)
src/__tests__/default-datasource-driver-factory.test.ts 10.6 s (38217670691)
@objectstack/organizations 2 15.9 s src/storage-upload-organization-change.wall.test.ts 15.9 s (38222448090)
src/storage-upload-door-ownership.wall.test.ts 15.2 s (38222448090)

What done looks like

Grade (triage)

tooling · priority:p3 · domain:services · area:devpath, into pm:queue. It is maintainer-directed (#22949 ruling E), so the product-only queue rule's exemption applies.

Activity

  1. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 9 · 2026-10-13T09:47Z
    Session: session_01FzQy26KznSa5j2gnf3AzsE
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-23184-test-budget-plugin-sharing
    Worktree: objectstack-issue-23184
    Domain: domain:services
    Seat: domain:services#2 (seat post #21118)
    File surface: the @objectstack/plugin-sharing slice of this card only. That is packages/plugins/plugin-sharing/src/share-link-password.test.ts and share-link-password-webcontainer.test.ts, plus what those tests wait on if the cause is in a test-only seam of share-link-password.ts. No changeset if the diff is tests-only (skip-changeset per the role file); otherwise one .changeset/23184-*.md (stop on breach; explain in the report)
    Container & model: S-M (two slow test files, one package; measure first), mode:subagent, model: default — dispatch-gates --tier --repo objectstack-ai/objectstack: "no path-derived mandate … The tier stays the PM's per-card judgment call"
    Clause-②: no — test wall time only; no published schema, behaviour or export moves.
    Responsibility: n/a — not a defect card (a maintainer-directed test-budget duty, #22949 ruling E item 3)
    Thread-read: none
    Serial constraints cleared: none of the open PRs touches these files, and no pm:dispatched claim declares them. PR #23200 (08b38cb9d8) landed share-link-routes.ts today, a different file. This is a partial landing: the PR carries Refs #23184 (plugin-sharing rows), and the card returns to pm:queue for the other packages' rows when it merges.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 23184,
    "status": "done",
    "branch": "claude/issue-23184-test-budget-plugin-sharing",
    "pr": "#23243",
    "session": "session_01FzQy26KznSa5j2gnf3AzsE — this run shares the dispatching PM session (mode:subagent); identity is the branch",
    "premise_still_valid": true,
    "summary": "Both @objectstack/plugin-sharing rows of #23184 are answered by draft PR #23243 (Refs, not Fixes: partial landing, the card keeps its other packages' rows). The diff is tests-only and changes no production file, option or export, so Clause-② stays no. H1 confirmed by a per-case probe: the main file ran 96 native scrypt derivations at production parameters (N=16384, r=16) across 44 cases, most of them repeats or throwaway fixture mints. H2: the injectable hasher pair exists, but injecting it disables the pinned legacy re-hash path, so it was not used. H3: the WebContainer file waits on no timer or boot, only 9 pure-JS plus 9 native derivations. Fix, main file: a per-file node:crypto.scrypt memo keyed by every input (scrypt is pure, so hits are byte-identical, and in-flight requests are deduped); one real shared hash per password, seeded onto links for the cases whose subject is not minting; the legacy cases' placeholder mint dropped; all suites describe.concurrent, with engine teardown moved from afterEach to afterAll. A probe showed the schema-editing case edits only its own engine's copy. WebContainer file: a separate memo per implementation (never shared, so cross-implementation checks stay real derivations), and PASSWORD's two hashes minted once in beforeAll with one added guard assertion. Results, vitest per-file reading, median of 3, same command, under the lock: main 11.90 s to 1.18 s; WebContainer 2.84 s to 2.04 s. At the worst CI/local ratio across five recent hourly captures (3.5x and 3.7x), that projects to about 4.1 s and 7.5 s in the hourly battery. Every case name and every expect line is unchanged; budgets were neither raised nor lowered.",
    "tests": "Wall time (vitest JSON file endTime-startTime = the module-line duration), command pnpm exec vitest run --maxWorkers=2 FILE --reporter=verbose --reporter=json per file alone in packages/plugins/plugin-sharing, under os-verify-lock slot issue-23184, 3 runs each, on a shared box: BEFORE @4cc3ff9dc6: share-link-password.test.ts 11224/12522/11904 ms (median 11904); share-link-password-webcontainer.test.ts 3035/2841/2739 (median 2841). AFTER @055d9304cc (final head): 1176/1110/1212 (median 1176); 2037/2172/1944 (median 2037). CI captures (test-core-timings) from hourly runs 38294929860, 38354632561, 38361439350, 38366978022, 38373927133: main 38.2/34.0/41.5/37.9/38.1 s, WebContainer 9.2/7.0/8.5/9.8/10.5 s. Assertion count: sorted case fullName+status, before run1 vs each of the 6 final runs, identical (44/44 and 4/4 passed). A sorted diff of every expect line, base vs head, changes only the vitest import line plus 1 added line (WebContainer beforeAll guard expect(nodeScrypt).toHaveBeenCalledTimes(1)). expect( count: main 78 to 78, WebContainer 20 to 21. Probes (temporary, deleted, never committed): per-case derivation counts before (96 total); schema identity (engine A edit not seen by engine B: same-object false, b-sees-mutation false); WebContainer per-path real/memo counts after (beforeAll 1/0, c1 1/0, c2 2/0, c3 3/1, c4 0/0, both paths). Concurrency experiment (reverted, restore proven by git diff HEAD empty and hash-object == HEAD blob 8942e85855): 3.30 s serial to 1.51 s concurrent, 44/44. Typecheck: pnpm --filter @objectstack/plugin-sharing run typecheck VERDICT command-exit 0. check:test-typecheck OK, both files are in tsconfig.test.json via --listFilesOnly, debt ledger unchanged. Package: vitest run --maxWorkers=2 over the whole package on the merged tree (closure rebuilt): Test Files 42 passed (42), Tests 1025 passed (1025), VERDICT command-exit 0. ESLint narrowed to the 2 changed files (--no-inline-config --format json): 2 files, 0 errors, 0 warnings. Population = this diff; neither file is ignored. eslint.config.mjs has no parserOptions.project or typed rules, so untouched files cannot move. Full pnpm lint is CI's. No ablation owed (speed-only change, per dispatch).",
    "gates": "Derived via node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack with no paths: change set = 2 paths vs merge base 01a3421, 54 commands, identical to the PM lead gates.txt. Final sweep at 055d930: 54/54 exit 0, each run separately with exit captured before any pipe. Reconciliation dispatch-gates --ran (record spelled cmd :: exit N): 54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN, a DERIVED zero. A first sweep had check:dual-build-cjs-loads and check:i18n at exit 3 PREREQUISITE NOT MET (workspace not built). After a full turbo run build (75/75, VERDICT command-exit 0) both passed: dual-build 108 entry points/67 packages load; i18n OK, 10 packages in sync. Not run locally (CI-owned, outside the 54): path-scheduled Test Core / Build Core / dogfood / Temporal jobs, type-check lanes, artifact-roster families. PR CI at report time: 23 check runs completed with 0 failures, 18 in_progress (not awaited, per role file).",
    "line_budget": "n/a — no skills/** or line-ratcheted ledger touched. Diff: +239/-46 across 2 test files (webcontainer +85/-13, main +154/-33).",
    "files_changed": [
    "packages/plugins/plugin-sharing/src/share-link-password.test.ts",
    "packages/plugins/plugin-sharing/src/share-link-password-webcontainer.test.ts"
    ],
    "deviations": [
    "The first push was refused by the pre-push hook: the commit body carried a Refs #23184 card trailer. I amended that still-unpushed commit and pushed; no pushed history was rewritten.",
    "Commit trailers use the model-free pair from AGENTS.md (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By line. The PR footer uses the AGENTS.md session-URL form, not the harness's emoji form.",
    "Route beyond the PM's suggested route (allowed: suggested-route section): besides the shared precomputed fixture hash, I added a per-file scrypt memo and describe.concurrent in the main file. Fixture plus memo alone measured 3.30 s locally, which projects to about 11.5 s at the worst observed CI ratio, so it was not enough.",
    "The first gate sweep straddled a comment-only commit (055d930). The whole 54-command sweep was rerun at that final head, and that rerun is the one reported.",
    "A gate-runner relaunch first failed on a bad sed rewrite of its output directory (nothing ran). I fixed it and relaunched. I once used pgrep -f as an existence check only; nothing was waited on or killed by name."
    ],
    "mcp_calls": "0 — no MCP GitHub tool was called (reads used gh api REST; writes used scripts/pm tools)",
    "api_writes": "3 relay strokes from this container: POST /repos/objectstack-ai/objectstack/dispatches ×3, each executed by fleet-write.yml as objectstack-fleet[bot]. (1) pr_create, i.e. POST /repos/objectstack-ai/objectstack/pulls (draft #23243) + POST /repos//issues/23243/assignees [zhuangjianguo]. (2) labels_add via scripts/pm/label-write.mjs, i.e. POST /repos//issues/23243/labels [skip-changeset]. (3) this os-dev-report comment via scripts/pm/post-stamped.mjs, i.e. POST /repos//issues/23184/comments. Plus 5 git pushes (branch probe, 3 WIP commits plus the merge of origin/main, the final comment commit); git push is not a REST write. No card assignee or label write, and no PATCH of the PR body.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted in PR Acceptance notes, not filed — the main file spends about 18 s in vitest import/transform (import 17.7-19.2 s, transform 14.5-15.8 s, before and after; cause not measured). That is outside the per-file reading the 10 s budget grades. Observation only: no defect class (a/b/c) applies."
    ],
    "worktree_cleanup": "node_modules removed and worktree ../objectstack-issue-23184 removed after this report was posted; branch fully pushed at 055d930."
    }


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat ACCEPT: PR #23243 at 055d9304cc · a partial landing (Refs, the plugin-sharing rows)

    domain:services seat 2 · session_01FzQy26KznSa5j2gnf3AzsE · 2026-10-13T11:47Z, under claim 6142856868. Checked on GitHub and on origin/main, not from the dev's report.

    Checklist

    • PR form: draft, base main. Line 1 is Refs #23184 (plugin-sharing rows), a partial landing with no closing keyword. Line 2 is Clause-②: no — test wall time only …. It carries the skip-changeset label for a tests-only diff.
    • Scope: 2 test files, +239 / -46: share-link-password.test.ts and share-link-password-webcontainer.test.ts. No production file, option or export moves. Not governed, under the 3000-line threshold.
    • The card's rule, met for both rows:
      • Per-file wall, median of 3 runs with the same command under the lock: the main file went from 11.90 s to 1.18 s, the WebContainer file from 2.84 s to 2.04 s.
      • At the worst CI/local ratio across five recent hourly captures (3.5×–3.7×), that projects to about 4.1 s and 7.5 s in the hourly battery, both under 10 s.
      • The next refresh PR's list is the card's pin.
    • What the speed comes from: H1 was measured. The main file ran 96 production-parameter scrypt derivations across 44 cases.
      • The fix is a per-file memo of node:crypto.scrypt, keyed by every input. scrypt is pure, so a hit is byte-identical, and in-flight requests are deduplicated.
      • Each password gets one real shared fixture hash.
      • The suites run describe.concurrent, with engine teardown moved to afterAll. A probe showed each case's schema edit stays on its own engine.
      • The WebContainer file keeps a separate memo per implementation, so its cross-implementation checks stay real derivations.
      • The injectable hasher was rightly not used: it would disable the pinned legacy re-hash path.
    • Nothing weakened, proven by diff:
      • every case name and status is identical (44/44 and 4/4) across six final runs;
      • a sorted diff of every expect line changes only the vitest import and adds one guard assertion;
      • expect( counts go from 78 to 78 and from 20 to 21;
      • no budget was raised or lowered, and nothing was deleted or moved.
    • Verification: plugin-sharing 1025 of 1025 on the merged tree; typecheck and check:test-typecheck OK; all 54 derived gate families exit 0.
    • CI at 055d9304cc (latest run per name): 40 names, 31 success, 9 skipped, 0 red; mergeable clean.
    • Writes: mcp_calls 0. The dev's pgrep -f was an existence check only; nothing was waited on or killed by name. Recorded.

    Out-of-scope findings: about 18 s of vitest import/transform in the main file, outside the per-file reading the budget grades: Acceptance notes. No defect class applies.

    What remains on #23184: the other packages' rows: plugin-auth (10 files), plugin-security (2), service-datasource (2) and organizations (2). After this merges, the card returns to pm:queue with a Release: line, and the next slice is claimed from there.

    Landing: pr_ready + automerge_enable through the relay. This seat follows it to MERGED.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (partial) and Release · domain:services seat 2 · session_01FzQy26KznSa5j2gnf3AzsE · 2026-10-13T12:15Z.

    Landed: PR #23243 (Refs #23184 (plugin-sharing rows)) merged through the merge queue at 2026-10-13T12:14Z as 4f5679c261, and that commit is on origin/main. ACCEPT 6144852121.

    • The plugin-sharing rows are answered. share-link-password.test.ts dropped from 11.90 s to 1.18 s, and share-link-password-webcontainer.test.ts from 2.84 s to 2.04 s, each a median of 3 local runs. That projects to about 4.1 s and 7.5 s in the hourly battery. The pin is the next refresh PR's list. The diff is tests-only, and every case and every expect line is unchanged except for one added guard.
    • Queue path: added_to_merge_queue at 2026-10-13T11:50Z. The PR had no closing keyword, and this card stays open as intended.

    Release: session_01FzQy26KznSa5j2gnf3AzsE (domain:services seat 2) releases claim 6142856868 · reason: a partial landing, one package per PR · destination: pm:queue. The remaining rows stay in this lane: plugin-auth (10 files), plugin-security (2), service-datasource (2) and organizations (2). The branch claude/issue-23184-test-budget-plugin-sharing is fully landed, so the next slice starts from main under a new claim.

    The technique measured here may carry to other slices: a per-file memo of the pure node:crypto.scrypt, plus one shared fixture hash per password. It cuts repeated production-parameter derivations without weakening any assertion. Whether each slice's slowness has the same cause is that slice's measurement.


    Generated by Claude Code

  5. 36 remaining items

  6. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23721 comment 6201621924 · domain:services seat 1 · session_017WLmd5in9RXu7AjyHR8fKQ · 2026-10-15T20:28Z. A partial landing (Refs); landing waits on every check green.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (partial) and Release · domain:services seat 1 (#6021) · os-bill · session_017WLmd5in9RXu7AjyHR8fKQ · 2026-10-15T20:56Z.

    Landed: PR #23721 (Refs #23184 (organizations rows: storage-upload-organization-change, storage-upload-door-ownership)) merged through the merge queue as f40d877f81, and that commit is on origin/main. Timeline: added_to_merge_queue 2026-10-15T20:37Z → merged 2026-10-15T20:55Z. ACCEPT 6201621924.

    • Both organizations rows are answered. As interleaved medians of 3 on the vitest module line, storage-upload-organization-change went from 4.17 s to 2.21 s, and storage-upload-door-ownership from 3.84 s to 1.93 s. At the card's own ratios that projects to about 8.4 s and 7.6 s in CI. The pin is the next refresh PR's list.
    • The cause was the first boot in the process, paid inside a clocked beforeAll: bootStack's lazy import() of the datasource driver and better-auth, plus sql.js's WASM compile. The fix is a test-only helper, src/__tests__/upload-wall-warm-up.testkit.ts. It runs one throwaway boot of the same composition at module scope and restores the whole environment afterwards. This follows AGENTS.md: "Clocked windows measure behaviour, never loading". Each file's own beforeAll still boots inside the clock.
    • Tests only. Every it, describe, expect, beforeAll and afterAll line is unchanged. vitest's whole-file Duration is about the same, and the PR says so.
    • A measurement note for later slices: for a file whose wall sits in beforeAll, vitest's JSON span reads below the module line CI captures. Read the module line.

    Release: session_017WLmd5in9RXu7AjyHR8fKQ (domain:services seat 1) releases claim 6200389019 · reason: a partial landing, one slice per PR · destination: pm:queue. The assignee is cleared in this act. The branch is fully landed: the squash commit's three files are byte-identical to head 56e42d33bf.

    The remaining rows stay in this lane:

    • plugin-security, two rows: explain-enforce-parity and position-write-through. They test the C2/C3 epic's declared territory, so declare to the epic first.
    • plugin-auth, three rows: org-create-posture-gate, implicit-account-linking and dev-admin-seed-credential-gate. Seat 2's answer A stands.

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-15T22:43Z
    Session: session_017WLmd5in9RXu7AjyHR8fKQ
    Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee from this act)
    Branch: claude/issue-23184-test-budget-plugin-security
    Worktree: objectstack-issue-23184-sec
    Domain: domain:services
    Seat: domain:services#1 (seat post #6021)
    File surface: the @objectstack/plugin-security slice of this card only. That is packages/plugins/plugin-security/src/explain-enforce-parity.test.ts (37.7 s in the card's reading), plus a shared test-only helper under packages/plugins/plugin-security/ if one cause serves it. No production file. No changeset if the diff is tests-only (skip-changeset). The card's other plugin-security row, position-write-through.test.ts, was deleted with the write-through it tested by C3 stage 7b (#23302, 5c9bfb0d3f), so it needs no change: the next refresh PR's list should not name it. Stop on breach; explain in the report.
    Container & model: S-M (one slow security parity test, one package; measure first), mode:subagent, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectstack: "no path-derived mandate").
    Clause-②: no (test wall time only; no published schema, behaviour or export moves)
    Responsibility: n/a (a maintainer-directed test-budget duty, #22949 ruling E item 3, not a defect card)
    Thread-read: 6202120788
    Serial constraints cleared: no open PR changes a plugin-security source or test file (all 10 open PRs' file lists read at this write; the release PR #23481 touches only its CHANGELOG.md and package.json), and no pm:dispatched claim declares this file. The file tests the C2/C3 epic's declared territory (explain-engine), so this seat declares to #15194 in the same round. The epic seat stood down at 6186498514 holding no claim. This is a partial landing: the PR carries Refs #23184 (…), not a closing keyword. This seat's p3 slot is free: #23604 landed as 534ca13eb5.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 23184,
    "status": "done",
    "branch": "claude/issue-23184-test-budget-plugin-security",
    "pr": "#23748",
    "session": "session_017WLmd5in9RXu7AjyHR8fKQ — this run shares the dispatching PM session (mode:subagent); identity is the branch named in claim 6203811714",
    "premise_still_valid": true,
    "summary": "Draft PR #23748 (Refs only, a partial landing; Clause-② no; skip-changeset) answers both @objectstack/plugin-security rows. The diff is tests-only: one file, explain-enforce-parity.test.ts, +62/-8, and no production or plugin-security source file. Cause, measured by a base probe: 60 of the 98 rows booted their own principal rig (about 84 ms each: syncSchemas 2.5 s, seed inserts 1.8 s and the admin authz context 0.5 s over 60 boots). Also, on Node 22, every torn-down rig left its AsyncLocalStorage instances (ObjectQL holds 3, SecurityPlugin 1, and neither destroy() disables them) on the process-wide async_hooks list that each later promise creation walks, which was about half the remaining wall. Fix: the principal rows, all read-only, share one rig per posture source (4 boots instead of 60, torn down in one afterAll), and every rig teardown disables the storages its engine and plugin own. The RLS and sharing rows can write, so they still boot their own rig. Interleaved medians of 3 at final head db5121f (module line): 7.37 s to 1.73 s, projecting to about 8.8 s at the card's 37.7 s reading (8.4 s against the idle-box base). The position-write-through row is answered by deletion: its test file left main in 150da61 (#22962), not in 5c9bfb0 (#23302), which deleted the module it tested; both are ancestors of origin/main.",
    "tests": "Wall = vitest default-reporter module line (hooks plus cases, the number test-core.log carries). Command: pnpm exec vitest run --maxWorkers=2 FILE --reporter=default --reporter=json in packages/plugins/plugin-security, under os-verify-lock slot issue-23184-sec, 4-vCPU box. BEFORE standalone @534ca13eb5 (idle, load 0.5-0.8), ms: 7790/7967/7374. AFTER standalone @5cad7b98dd: 1833/1760/1629. Interleaved @5cad7b98dd (load 1.1-1.6): base 7653/7237/7197, head 1792/1682/1673. FINAL interleaved @db5121f2d6 (load 1.7-2.3, other agents' worktrees active; base file under a temporary name, unchanged on main between 534ca13 and 3b46855, git diff --quiet exit 0): base 7373/7317/7620 (median 7373), head 1922/1729/1650 (median 1729), ratio 0.23. Whole-file Duration fell from 25.1-26.8 s to 19.4-20.6 s, so nothing moved into collection. Mechanisms alone (temporary copies, deleted): storages released only 3572/4054; shared rig only 2350/2522; both 1609/1724. Base probe (temporary, deleted), per principal boot median: syncSchemas 38.5 ms, inserts 28.3, enforced(admin) 7.9; principal case wall 6745 ms over 60 cases, rls 375 over 33, sharing 67 over 5. CPU profile of the shared-rig prototype: top self frame _propagate in node:internal/async_local_storage/async_hooks (526 ms). Static lines vs base: it( 1/1, describe( 1/1, expect( 19/19, byte-identical in order (cmp exit 0); hooks 0 to 1 (the shared rigs' afterAll). Runtime assertions per case via expect.getState().assertionCalls in temporary instrumented base and head copies (deleted): identical per case in order, 335 over 98, no zero-assertion case, all pass. Isolation probe over head (temporary, deleted), all 60 principal rows: shared rig raw SQLite state (11 tables, 21 rows, rowid order) byte-equal before and after the row 60/60; equal to a fresh rig's (suffix and timestamps normalised) 60/60; fresh rig unchanged by the row 60/60; faces (explain answer, enforcement answer, explained readFilter applied as a system read) equal to a fresh rig's 60/60. Leak mutation via scripts/ablation-replace.mjs at HEAD 5cad7b9 (the removed user's sets face writes a sys_member row into the shared rig): 15 rows red, 13 of them later rows of the same rig, vitest exit 1; restore proven (blob 378d595c80 == HEAD, git diff HEAD empty, marker count 0). Shuffle: --sequence.shuffle.tests seeds 11/2026/23184, 98/98 passed each. Package @db5121f2d6 (closure rebuilt after the merge): pnpm --filter @objectstack/plugin-security run typecheck VERDICT command-exit 0, check:test-typecheck OK (0 files in the debt ledger), tsc -p tsconfig.test.json --listFilesOnly lists the file; pnpm --filter @objectstack/plugin-security exec vitest run --maxWorkers=2 Test Files 186 passed (186), Tests 3714 passed, 45 skipped (other files), VERDICT command-exit 0. eslint --no-inline-config on the file exit 0. Control-byte self-scan of the file and the PR body: 0 hits. Published surface: files[] = dist/README.md/CHANGELOG.md; markers releaseAsyncContexts/sharedPrincipalRig 0 files in dist, positive control SecurityPlugin 4. No ablation owed: no tested behaviour changed and no case asserts timing; the interleaved base leg is the revert, measured.",
    "gates": "Derived node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) at db5121f: 1 path vs merge base 3b46855, 54 commands, command lines identical to the PM lead gates-23184-sec.txt (diff exit 0). Ran all 54 separately at db5121f, exit captured before any pipe, recorded cmd :: exit N: 52 exit 0 on the first pass; pnpm check:dual-build-cjs-loads and pnpm check:i18n exit 3 (PREREQUISITE NOT MET, workspace unbuilt), then both exit 0 after turbo run build --filter=!@objectstack/docs (75/75 tasks, 74 cached, VERDICT command-exit 0). dispatch-gates --ran: 54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero), exit 0. No gate output names the changed file. Local-only families (check:dev-prereqs scan, check:skill-frame-freshness) not owed: no packages/spec build or frame file touched. UNRECOGNISED lines, verbatim: UNRECOGNISED [engine-double-contract]: 22 construct(s) in packages, examples declare a scanned verb (delete, update, findOne) alongside engine siblings, and this gate could not read the implementation -- so they are in NEITHER the pinned population nor the ledger. 225 further construct(s) are SCOPED OUT by a stated criterion and are not counted here. This is a verdict, not a finding: it never fails a run (#9747, ruling of 2026-08-18). Not run locally (CI-owned): Test Core / Build Core / dogfood / Temporal jobs, type-check lanes, artifact-roster and wide-population families, full pnpm lint. PR CI at report time on db5121f: 37 check runs, 12 success, 6 skipped, 19 in_progress, 0 failures (not awaited, per role file); success includes Governed Surface Queue Guard, Lint · PM dispatch-gates, Dogfood Regression Gate, Part-of PR must not also close its card, The card this PR closes must claim this branch, No other open PR may claim the same single-writer path.",
    "line_budget": "n/a — no skills/** or line-ratcheted ledger touched. Diff vs main 3b46855: +62/-8 across 1 test file.",
    "files_changed": [
    "packages/plugins/plugin-security/src/explain-enforce-parity.test.ts"
    ],
    "deviations": [
    "Claim correction: claim 6203811714 says C3 stage 7b (#23302, 5c9bfb0) deleted position-write-through.test.ts. That commit deleted the module position-write-through.ts; the test file left main one commit earlier in the series, in 150da61 (#22962). The PR body names both. No change is owed for that row.",
    "PM suggested route: a mutation that reddens a case when the speed-up is reverted does not apply as stated. Reverting a speed-only mechanism reddens nothing, and the interleaved base leg is that revert, measured. Instead, a leak-sensitivity mutation showed that a write through the shared rig reddens later rows (15 red, 13 of them later rows).",
    "One afterAll hook line was added (the shared rigs' teardown). The it(, describe( and expect( lines are byte-identical to base.",
    "Two locked batches were sequenced with ';' (the 3-run standalone base loop and the shuffle loop; VERDICT batch-last-exit). Each part's result was read from its own log, and all passed. The shuffle loop also exited on the first failure (|| exit 1).",
    "The 54-command gate sweep ran under nohup with its PID recorded (12487, the backgrounded subshell I started) and was waited on with bounded timeout 540 tail --pid calls. Nothing was killed, and nothing was waited on by name. The run record's two exit-3 lines were replaced by their post-build exit 0 before --ran; both readings are reported.",
    "origin/main was merged once before the PR opened (db5121f; it moved metadata-protocol, which this package aliases to source, and spec). The closure was rebuilt, and the final wall pair, typecheck, package run and 54-gate union were all taken at that head.",
    "Temporary probe files (zz-*.test.ts: phase timers, shared-rig prototype, CPU profile, ALS-release copies, isolation probe, instrumented assertion-count copies, base copies) were written into packages/plugins/plugin-security/src during measurement and deleted. None was committed: the tree was clean before the PR, with 1 file in the diff.",
    "Hourly-battery CI maxima NOT MEASURED, reason: the timing artifact (run 38814162165, test-core-timing-table) redirects to productionresultssa10.blob.core.windows.net, which this container's egress refuses, and the run page answers 403. Projections use the card's own reading.",
    "Commit trailers use the model-free pair from AGENTS.md (Claude-Session plus Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By line. The PR footer uses the AGENTS.md session-URL form, not the harness's emoji form.",
    "Cleanup order: the worktree's node_modules were removed before this report was posted. The worktree itself is removed right after it posts (git worktree remove, no --force), because the write tool runs from it. The branch is fully pushed at db5121f."
    ],
    "mcp_calls": "0 — no MCP GitHub tool was called (reads used single-card REST reads; writes used scripts/pm tools)",
    "api_writes": "3 relay strokes from this container, each POST /repos/objectstack-ai/objectstack/dispatches executed by fleet-write.yml as objectstack-fleet[bot]: (1) pr_create via scripts/pm/fleet-write/dispatch.mjs = POST /repos/objectstack-ai/objectstack/pulls (draft #23748) + POST /repos//issues/23748/assignees [os-bill], run 38825887726, body read back identical (8870 bytes); (2) labels_add via scripts/pm/label-write.mjs = POST /repos//issues/23748/labels [skip-changeset], run 38825991927, read back size/s + tests + skip-changeset, assignee os-bill; (3) this os-dev-report comment via scripts/pm/post-stamped.mjs = POST /repos//issues/23184/comments. Plus 3 git pushes (empty-branch probe, 5cad7b9, merge db5121f); git push is not a REST write. No card assignee or label write, no PATCH of the PR body.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted in PR Acceptance notes, not filed — ObjectQL.destroy() and SecurityPlugin.destroy() leave their AsyncLocalStorage instances (engine txStore/cascadeDeleteSets/cascadeIssuedDeletes, plugin engineOperationScope) enabled. On Node 22 each stays on the process-wide async_hooks list that every later promise creation walks: about half this file's wall (7.8 s to 3.6-4.1 s with the release alone), and any suite that builds many engines in one process pays the same. No class applies: a production process builds one engine, and no public door was measured giving a wrong answer. If destroy() disables them, the test's releaseAsyncContexts becomes a no-op. Dedupe words: AsyncLocalStorage disable destroy; async_hooks _propagate; engine teardown storage leak; engineOperationScope.",
    "carrier: 承接者:无 · noted in PR Acceptance notes, not filed — the file spends about 17-19 s in vitest import/transform on this box, before and after; collection, outside the per-file reading the budget grades. Observation only: no class applies.",
    "carrier: 承接者:无 · noted, not filed — per-file CI timing captures are unreachable from a cloud container (blob-storage egress refused), as the previous slices recorded. An environment fact, not a repo defect; no class applies."
    ]
    }


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23748 comment 6204766686 · domain:services seat 1 · session_017WLmd5in9RXu7AjyHR8fKQ · 2026-10-15T23:55Z. A partial landing (Refs); landing waits on every check green. ⚠️ Correction to this seat's claim 6203811714: position-write-through.test.ts left main in 150da61aa5 (#22962). #23302 (5c9bfb0d3f) deleted the module it tested.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (partial) and Release · domain:services seat 1 (#6021) · os-bill · session_017WLmd5in9RXu7AjyHR8fKQ · 2026-10-16T00:40Z.

    Landed: PR #23748 (Refs #23184 (plugin-security rows: explain-enforce-parity, position-write-through)) merged through the merge queue as c6c84d3175, and that commit is on origin/main. Timeline: added_to_merge_queue 2026-10-16T00:15Z → merged 2026-10-16T00:40Z. ACCEPT 6204766686.

    Release: session_017WLmd5in9RXu7AjyHR8fKQ (domain:services seat 1) releases claim 6203811714 · reason: a partial landing, one slice per PR · destination: pm:queue. The assignee is cleared in this act. The branch is fully landed.

    The remaining rows stay in this lane:

    • plugin-auth, three rows: org-create-posture-gate, implicit-account-linking and dev-admin-seed-credential-gate. Seat 2's answer A stands: the next refresh judges them.
    • No other package's row remains open on this card.

    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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions