Skip to content

fix: declare narrow async disposal library for ES2022 consumers - #992

Merged
flyingrobots merged 6 commits into
mainfrom
fix/981-disposable-types
Oct 8, 2026
Merged

flyingrobots merged 6 commits into
mainfrom
fix/981-disposable-types

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Strict ES2022 consumers importing the installed Runtime declaration fail TS2550 because Symbol.asyncDispose's standard-library dependency is missing. Preserve the narrow esnext.disposable reference in its owning Runtime declaration; callers can import/call close or async disposal without a broad ESNext override or skipLibCheck. Runtime behavior and engine requirements remain unchanged.

Closes #981. Required gate prerequisite: #988 / #987 supplies the reviewed compatible locked-dependency audit. The candidate starts from its feature branch; current-head hosted workflows were triggered against main before retargeting to fix/987-locked-audit; Runtime/API source was identical to main/v20.0.0 before the fix. Mainline integration is authorized subject to current-head gates.

Validation: actual packed TypeScript5.9.3 NodeNext/ES2022 strict/exactOptionalPropertyTypes/noUncheckedIndexedAccess/types=[]/skipLibCheck=false consumers fail at baseline in root-close/root-dispose/combined; advanced-only and explicit narrow-library controls pass. The candidate passes eight strict compiler cases across all five public entrypoints, direct disposal typing and the explicit-library control. The preserved reference survives emission/pruning. Native installed close/repeated-dispose/concurrent-close-dispose/closed-refusal checks pass. Explicit source/fixture lint and source/test types pass. Re-emitted runtime JavaScript is byte-identical to baseline after stripping only the new reference comment. Raw RED/GREEN/failed diagnostics, source/image/guard identities and resources are committed under test/evidence/981-disposable-consumer/.

Full pre-implementation agy critique is preserved intact in Reader and posted before repair. The clean published head fa9d9d8 passes all nine real pre-push static invocations and 8677 unit tests with two existing skips. Exact-head agy complete-checklist review approves; all21current-head hosted checks pass, triggered against main before retargeting to the audit prerequisite. Full original review and source qualifications are preserved in Reader and posted here. Payload746269compressed/3257406unpacked/971entries passes unchanged limits760000/3300000/1050. This is a local candidate, not a release.

The new reference imports the narrow built-in declarations needed by the existing API; it is not zero ambient type effect. No consumer compiler floor is invented, no private storage API is exposed, and no runtime method/symbol/storage lifecycle is changed. The earlier tool/lint failures and cancelled premature push remain failures, not gate passes. This PR now targets main; its prerequisite is merged. Mainline integration is authorized subject to fresh exact-head gates.

Current-main candidate cbf97712730171852a0ddb9fdbd6ef35d1c82dfa normally merges main 795d32ae. Its only production difference remains the one-line preserved Runtime declaration reference. Fresh packed validation passes all eight compiler fixtures and three lifecycle cases, with payload755853 compressed/3295613 unpacked/993 entries under unchanged caps. Independent current-main review of precedingc40 approves the complete checklist and is delivered intact to Reader receipt6c310b6e-8ed9-4128-8880-1dda7e3b0ea8. Final exact-head independent Codex addendum APPROVE and complete checklist are delivered intact to Reader receiptbb1ddba3-d423-4a7b-985c-e8c95855e1fc and posted in full. Real pre-push passes all nine static invocations and8818 unit cases with two existing skips. Fresh required hosted checks are in progress; earlier fa9 results remain pinned historical evidence.

Final CodeRabbit prose reconciliation candidate6dc3d72bb651790c3fa12641d06ac3b9136ec8da changes only two Markdown files, preserving every evidence word/number/hash except whitespace in README and clarifying the operator sentence. Full CodeRabbit feedback is delivered intact to Reader31c8d775-36ce-4305-9f85-4d2b583d05f3. Final exact-head independent approval is delivered intact to Readerce482417-8567-4bec-bb4a-2f0197339088 and posted in full. The final6dc real pre-push passes all nine static gates and8818 project tests with two existing skips; fresh exact-head hosted checks are running; the missing-file diagnostic suggestion is explicitly reconciled against the existing failing check.

@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

📝 Summary

Summary by CodeRabbit

  • Bug Fixes
    • Runtime declarations now include the standard-library types needed for synchronous and asynchronous disposal in strict ES2022 projects, without requiring a broad ESNext library override.
  • Tests
    • Added checks that verify disposal types and lifecycle behavior across the installed package’s public entrypoints.

Walkthrough

Runtime’s emitted declaration now preserves a narrow esnext.disposable reference. The change adds checks that install the packed package, type-check its public entrypoints and disposal APIs, and exercise runtime shutdown behavior. It also adds documentation and issue #981 validation records.

Changes

Runtime Disposable Declaration

Layer / File(s) Summary
Add the declaration reference
src/application/Runtime.ts, CHANGELOG.md, docs/operations/package-payload.md
Runtime.ts adds a preserved reference to esnext.disposable. The changelog and package-payload documentation describe this declaration dependency and the packed-consumer check.
Check packed declarations and lifecycle
scripts/check-packed-disposable.sh, test/type-check/packed-disposable/*
The script installs the packed package in a temporary consumer, checks seven TypeScript configurations and the emitted declaration, and runs a lifecycle test. Fixtures cover public entrypoints, Runtime.close(), and async disposal.
Record issue validation evidence
test/evidence/981-disposable-consumer/*
The README, manifest, launch records, and resource records document issue investigation runs, validation commands, outputs, and resource measurements.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to cbf97

No concrete issue identified here blocks merging. Complete the outstanding unit and hosted checks before release.

🚥 Pre-merge checks | ✅ 4 | ❓ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive Direct issue [#981] requires a packed NodeNext/ES2022 consumer with skipLibCheck=false, no broad ESNext override, preserved Runtime.close() and async-disposal typing, emitted esnext.disposable r… Provide exact-current-head results for the incomplete broad unit and other required automated coding checks, including coverage or a documented issue-specific exception. Keep the results tied to cbf97712730171852a0ddb9fdbd6ef35d1c82dfa. I…
✅ Passed checks (4 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The production change is limited to the preserved esnext.disposable reference in src/application/Runtime.ts. The packed-consumer fixtures, lifecycle checks, parity checks, lint/type checks, change…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Title check ✅ Passed The title clearly and concisely describes the main change: adding a narrow async-disposal library declaration for ES2022 consumers.
Description check ✅ Passed The description provides a clear summary, references issue #981, and documents extensive validation, limitations, and current gate status. It does not use the template headings or include the ADR chec…
Full details: Linked Issues check

Explanation

Direct issue [#981] requires a packed NodeNext/ES2022 consumer with skipLibCheck=false, no broad ESNext override, preserved Runtime.close() and async-disposal typing, emitted esnext.disposable references across supported subpaths, and packed fixtures. The current-head summary reports these eight compiler fixtures, three lifecycle cases, declaration preservation, lint, and source/test type checks as passing. However, the summary also states that the broad unit run and some final checks remain incomplete. The issue requires all relevant automated checks and exact-candidate evidence, so full coding compliance cannot be established from the available evidence. The excluded compressed console logs cannot resolve this gap.

Resolution

Provide exact-current-head results for the incomplete broad unit and other required automated coding checks, including coverage or a documented issue-specific exception. Keep the results tied to cbf97712730171852a0ddb9fdbd6ef35d1c82dfa. If those checks are not required for this issue, document that decision in the issue or PR.

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit packed the code with care,
A narrow note for types to share.
It checked each path and closing call,
Then logged the measures, one and all.
The rabbit hops through ES2022,
With tidy declarations in view.

Comment @coderabbitai help to get the list of available commands.

@flyingrobots
flyingrobots changed the base branch from main to fix/987-locked-audit October 8, 2026 00:42
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Release Preflight

Head: 6dc3d72bb651790c3fa12641d06ac3b9136ec8da · Workflow and complete bundle evidence

  • package version: 20.0.0
  • prerelease: false
  • npm dist-tag on release: latest
  • preflight: success
  • npm package payload: success
  • jsr publish dry-run: success

npm bundle analysis

Metric Measured Limit Usage Remaining Assessment
Compressed bytes 755853 760000 99.5% 4147 ⚠️ Critical headroom
Unpacked bytes 3295613 3300000 99.9% 4387 ⚠️ Critical headroom
Files 993 1050 94.6% 57 ⚠️ Approaching limit

Warnings begin at 85% of a limit; critical headroom begins at 95%. Exceeding a limit fails the existing payload gate.

Payload group Unpacked bytes
Declarations 230946
JavaScript 2937719
Metadata, documentation, and assets 126948

Findings (0)

No static inspection findings.

Static reachability findings are deletion candidates, not proof that a file is safe to remove. Dependency checks cover imports and manifest declarations; they are not a vulnerability audit.

Largest files (unpacked)

File Bytes Share
dist/src/domain/RuntimeHost.js 35335 1.1%
README.md 34738 1.1%
docs/migrations/v19/README.md 33388 1.0%
dist/src/domain/orset/trie/TrieCursor.js 24348 0.7%
docs/READINGS_AND_OPTICS.md 23600 0.7%
dist/src/domain/services/PatchBuilder.js 18536 0.6%
dist/src/domain/services/controllers/CheckpointController.js 17842 0.5%
dist/src/domain/services/JoinReducerSession.js 17298 0.5%
dist/src/domain/services/controllers/SyncController.js 16219 0.5%
dist/src/domain/services/optic/CheckpointBasisManifest.js 15503 0.5%

A release-branch merge still requires final preflight and the normal release workflow.

@flyingrobots

Copy link
Copy Markdown
Member Author

Full exact-head agy approval/checklist for fa9d9d877e424d904798266698554e1822ce0afe, delivered intact to Reader under receipt f5ee0302-6814-4aa5-96d0-f4daac823c2e. Source verification below qualifies two report phrases: monitored build bound is not a filesystem quota, and emitted JavaScript parity removes only the new reference comment. Hosted Node/coverage checks remain pending; no merge permission or final readiness is inferred.

Source verification of exact-head review

Agy approves exact local/publishedfa9d9d877e424d904798266698554e1822ce0afe against5c82ba6c; full source/test/script/count/hash/lifecycle/packaging checklist is preserved. Live GitHub/Git verify45files871additions0deletions and truewhole-file Runtime263lines8239bytes, driver29lines1112bytes, lifecycle25lines962bytes. Main-target hosted jobs were queued before retarget; Node/coverage remain pending at inspection. No final-readiness or merge claim is made.

Two report phrases require qualification. The20GiB build bound is monitored with workload census/stop enforcement, not a filesystemquota; only boundedtmpfs is quota-backed. The emittedRuntime JavaScript is byte-identical to baseline after removing onlythe new referencecomment, not byte-identical as an unnormalizedfile; the report's parity subsection/hashes correctly establish this. Read-only command/receipt inspection differs from zero workloads; neither source nor runtime tests were executed by the reviewer.

The narrow library imports built-in ambient Symbol/disposable declarations intentionally; no zeroambient effect or broadESNext compiler override is adopted. The sourcefix remainsone58byte line and runtimebody/lifecycle areunchanged. Sourceapproval is not approval of future heads or a release. Originalreport stays byte-preserved; source verification qualifications are separate.


Independent Adversarial Final Exact-Head Review: PR #992 (Issue #981)


1. Verified Findings (P0–P5)

[P4 - Qualified Baseline Estimation vs Measured Reality] test/evidence/981-disposable-consumer/README.md:12-16

  • Coordinates: test/evidence/981-disposable-consumer/README.md:12-16 $\leftrightarrow$ src/application/Runtime.ts:1
  • Prior Claim / Scenario: The pre-implementation proposal review estimated that adding the directive would introduce "62 characters" and "under 50 packed bytes".
  • Source-Verified Truth:
    1. The actual prefix added at src/application/Runtime.ts:1 is /// <reference lib="esnext.disposable" preserve="true" />\n, which measures exactly 58 UTF-8 bytes.
    2. The actual payload increase between baseline RED (disposable-red-981-v1) and candidate GREEN (disposable-green-981-v3) is:
      • Compressed size: 746,269 - 746,177 = +92 bytes
      • Unpacked size: 3,257,406 - 3,257,290 = +116 bytes
      • Tarball entries: 971 - 971 = 0 entries
    3. README.md:12-16 and the Reader filing e645ff44-1a8a-423f-a8e9-5f9ce8a51716 properly qualify this discrepancy and document the actual measured values.
  • Severity & Status: P4. Fully verified and qualified in committed evidence.

[P4 - Qualification of Ambient Type Effect] src/application/Runtime.ts:1

  • Coordinates: src/application/Runtime.ts:1
  • Scenario: Declaring that a triple-slash lib reference has "zero ambient type effect" is technically inaccurate.
  • Source-Verified Truth: Adding /// <reference lib="esnext.disposable" preserve="true" /> causes TypeScript to load lib.esnext.disposable.d.ts into the consumer's Program, which augments the global interface SymbolConstructor with asyncDispose: unique symbol and dispose: unique symbol, and introduces AsyncDisposable and Disposable. It does not introduce broad ESNext language features, but it is an intentional, narrow standard-library dependency import rather than literal zero ambient effect.
  • Severity & Status: P4. Documented and qualified in test/evidence/981-disposable-consumer/README.md:12-16.

2. Mandatory Protocol Tracing & Code Path Audit

A. Production Paths & Public Closures

  1. Public Runtime Declaration (src/application/Runtime.ts:1):
    • Baseline (5c82ba6c): Line 1 starts with import Lane from '../domain/api/Lane.ts';.
    • Candidate (fa9d9d87): Line 1 adds /// <reference lib="esnext.disposable" preserve="true" />.
    • Emits dist/src/application/Runtime.d.ts:1 with /// <reference lib="esnext.disposable" />.
    • Owning module for async [Symbol.asyncDispose](): Promise<void> (lines 180–182).
  2. Root Entrypoint (index.ts:13):
    • Re-exports Runtime (export { default as Runtime } from './src/application/Runtime.ts';).
    • Consumers importing { Runtime } from "@git-stunts/git-warp" load dist/index.d.ts $\to$ dist/src/application/Runtime.d.ts.
    • Tested clean under strict NodeNext ES2022 in test/type-check/packed-disposable/root-close.ts, root-dispose.ts, and combined.ts.
  3. Testing Entrypoint (testing.ts:18 $\to$ src/testing/RuntimeHarness.ts:1,20):
    • src/testing/RuntimeHarness.ts imports type Runtime from '../application/Runtime.ts' and exposes readonly runtime: Runtime;.
    • Emitted dist/testing.d.ts $\to$ RuntimeHarness.d.ts $\to$ Runtime.d.ts transitively inherits the narrow library reference.
    • Tested clean in test/type-check/packed-disposable/testing.ts.
  4. Independent Public Entrypoints (advanced.ts, diagnostics.ts, charts.ts):
    • Do not import Runtime.ts or storage handles; carry zero disposal types.
    • Tested clean in test/type-check/packed-disposable/advanced.ts, diagnostics.ts, and charts.ts.
  5. Private Storage Boundary (src/application/WarpStorage.ts:23):
    • Defines async [Symbol.asyncDispose](): Promise<void>.
    • Unexported in all five public entrypoints (index, advanced, diagnostics, charts, testing).
    • Verified pruned by scripts/package-payload/PrunePrivateDeclarations.ts. Does not leak into published package.
  6. Emitted JavaScript Parity (dist/src/application/Runtime.js):
    • Verified via disposable-runtime-parity-981-v2: baseline JS hash b54207d16ecb141d9e79b3785f6561363fc5779f04434439fc86002d3385b3d9, candidate JS hash 532e9cd708bc36a84ec4987d7c0ee3831f3078d6a959b19a87dc8eaaa8902716.
    • The differing bytes are exclusively the single comment line (/// <reference lib="esnext.disposable" preserve="true" />\n). When stripped, normalized candidate bytes match baseline byte-for-byte (comment_removed=True).

B. Merges & Commit Lineage

  • Commit range 5c82ba6ca168d07b743fac5c6adbf38822ae0302..fa9d9d877e424d904798266698554e1822ce0afe:
    • 48eea225c0880a1aac8b7bf6a1e6b75ada140191: test: reproduce strict packed ES2022 disposal declaration failure (#981)
    • fa9d9d877e424d904798266698554e1822ce0afe: fix: preserve narrow disposable library in public Runtime declarations (#981)
  • Merge commits in 5c82ba6c..HEAD: Exactly 0. Linear history.

C. Execution Receipts & Failed Attempts Audit

  • disposable-green-981-v1: All 8 compiler cases passed, but failed PACKED_DISPOSABLE_EMISSION FAIL because rg was missing in the container image.
  • disposable-green-981-v2: All 8 compiler cases and 3 lifecycle cases passed, but ESLint produced a warning: File ignored because of a matching ignore pattern.
  • disposable-runtime-parity-981-v1: Failed with ESLint error 'console' is not defined (no-undef) in lifecycle.mjs:20:5.
  • disposable-runtime-parity-981-v2: Refactored lifecycle.mjs to import stdout from node:process; passed cleanly with RUNTIME_JS_PARITY_PASS.
  • disposable-green-981-v3: Verified clean: npm run typecheck passed, explicit ESLint passed with 0 warnings/errors, all 8 packed compiler cases passed, and all 3 native lifecycle cases passed.
  • Host Pre-commit Attempt: Initial host-side npx run failed because ambient ESLint 10 lacked jiti. The push was aborted before publishing, and the proper guarded commit ran via the Docker wrapper without bypassing hooks.

3. Mandatory Verification Checklist

A. Lineage & File Delays

  • Base SHA: 5c82ba6ca168d07b743fac5c6adbf38822ae0302
  • Intermediate RED SHA: 48eea225c0880a1aac8b7bf6a1e6b75ada140191
  • Head SHA: fa9d9d877e424d904798266698554e1822ce0afe
  • Full PR Delta: 45 files changed, 871 additions, 0 deletions (matches publication.json).
  • Production Code Delta: Exactly 1 line added in src/application/Runtime.ts.

B. Whole File LOC & Exact Byte Ledger (PR #992 Delta)

Portable File Path Lines Words Exact Bytes
src/application/Runtime.ts 263 764 8,239
scripts/check-packed-disposable.sh 29 95 1,112
docs/operations/package-payload.md 234 1,770 14,269
CHANGELOG.md 4,478 50,394 407,175
test/type-check/packed-disposable/lifecycle.mjs 25 89 962
test/type-check/packed-disposable/root-close.ts 3 12 102
test/type-check/packed-disposable/root-dispose.ts 3 12 117
test/type-check/packed-disposable/advanced.ts 3 11 108
test/type-check/packed-disposable/combined.ts 5 20 187
test/type-check/packed-disposable/testing.ts 5 18 231
test/type-check/packed-disposable/diagnostics.ts 2 8 88
test/type-check/packed-disposable/charts.ts 2 8 65
test/type-check/packed-disposable/package.json 1 1 33
test/type-check/packed-disposable/tsconfig.base.json 18 29 348
test/type-check/packed-disposable/tsconfig.root-close.json 6 8 78
test/type-check/packed-disposable/tsconfig.root-dispose.json 6 8 80
test/type-check/packed-disposable/tsconfig.advanced.json 6 8 76
test/type-check/packed-disposable/tsconfig.combined.json 6 8 76
test/type-check/packed-disposable/tsconfig.testing.json 6 8 75
test/type-check/packed-disposable/tsconfig.diagnostics.json 6 8 79
test/type-check/packed-disposable/tsconfig.charts.json 6 8 74
test/type-check/packed-disposable/tsconfig.explicit-disposable.json 14 18 204
test/evidence/981-disposable-consumer/README.md 17 422 4,124
test/evidence/981-disposable-consumer/manifest.json 184 394 8,970
test/evidence/981-disposable-consumer/disposable-green-981-v3-launch.json 41 87 1,531
test/evidence/981-disposable-consumer/disposable-green-981-v3-resources.json 32 68 832
test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-launch.json 41 89 2,510
test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-resources.json 32 68 831

Binary evidence files:

  • disposable-green-981-v1-console.txt.gz: 345 bytes
  • disposable-green-981-v2-console.txt.gz: 479 bytes
  • disposable-green-981-v3-console.txt.gz: 319 bytes
  • disposable-runtime-parity-981-v1-console.txt.gz: 159 bytes
  • disposable-runtime-parity-981-v2-console.txt.gz: 199 bytes
  • disposable-red-981-v1-console.txt.gz: 314 bytes
  • disposable-matrix-red-981-v1-console.txt.gz: 459 bytes

C. Checksum Ledger (Disk vs Manifest)

All 21 disk evidence files in test/evidence/981-disposable-consumer/ match manifest.json:

  • disposable-green-981-v3-console.txt.gz: archive 30315e345edce138d3dd6e71c624cbd8ea3c8281da75ef2b2608ccb212b64124, uncompressed d2e069e9ff97897440f9e9ecb7603a5a7c8da92bfa03637f318bed7714d0dd8b
  • disposable-runtime-parity-981-v2-console.txt.gz: archive af45cb9de7bcd12fcebe2337856de83826fdcdf349fed987db73d6e86cd1a1e9, uncompressed 89ab8083f78ddc8979996404afb01414f829d4630dc483695ee578f49890f038
  • manifest.json: SHA-256 c1ab807056c5016238c13a991c1598aec715da84d08db57bcf371f753730e2e0
  • README.md: SHA-256 d579b8dcf4b259575d4717b5b865bb88e771732cebaeac21337a35fafee4824c

D. Package Payload & Resource Boundaries

  • Payload Limits: 760,000 max packed / 3,300,000 max unpacked / 1,050 max entries
  • Observed Candidate: 746,269 packed (+92 bytes), 3,257,406 unpacked (+116 bytes), 971 entries (+0 entries). Pass with 13,731 packed / 42,594 unpacked / 79 entries headroom.
  • Resource Constraints:
    • Build Volume Peak: 1,961,103,360 bytes (quota: 21,474,836,480 bytes)
    • Data Tmpfs Peak: 59,359,232 bytes (quota: 3,221,225,472 bytes)
    • Generated Non-Object Peak: 59,744,256 bytes (limit: 100,663,296 bytes)
    • Stdout Peak: 710 bytes (limit: 16,777,216 bytes)
    • PIDs Peak: 27 (limit: 768)
    • Host Free Space: 723,051,868,160 bytes (>50 GiB floor)
    • Docker VM Free Space: 687,203,782,656 bytes (>50 GiB floor)

E. Static & Unit Pre-Push Gates

The pre-push run (receipts/prepush-981-*) verified 9 static invocations and 8,677 unit tests with 2 existing skips across 6 test suites:

  • Suite 1: 304 passed
  • Suite 2: 974 passed
  • Suite 3: 910 passed
  • Suite 4: 3,139 passed
  • Suite 5: 2,100 passed
  • Suite 6: 1,250 passed
    Total: 8,677 passed, 2 skipped, 0 failed.

4. Execution vs Inspection Accounting

  • Executed: Zero host or Docker commands were executed by this review.
  • Inspected Only:
  • Unavailable / Acknowledged In-Flight:
    • Hosted GitHub Actions checks (CI, Performance, Release Preflight (PR)) are queued/in-progress; only Link Check has completed successfully. This review assesses the local and published source candidate; hosted CI completion is tracked by GitHub, not claimed here.

5. Final Review Verdict

APPROVE

The exact code candidate at fa9d9d877e424d904798266698554e1822ce0afe is verified correct, minimal, and fully compliant with project doctrine and the Anti-Sludge Policy. It resolves Issue #981 by prepending the preserved narrow reference directive to its owning declaration in src/application/Runtime.ts, leaving runtime JavaScript byte-for-byte identical, preserving all existing API lifecycle contracts, and passing all packed strict consumer and unit gates.


═══ ⋆★⋆ Progress Report ⋆★⋆ ═══

PR 992: Preserve Narrow Disposable Library in Public Runtime Declarations
[██████████] 100% (1/1 exact-head review slice)

  • Independent adversarial final exact-head code review and verification checklist

⎇ fix/981-disposable-types +5/-0
📝 #992

Independent Adversarial Final Exact-Head Review: PR #992 (Issue #981)


1. Verified Findings (P0–P5)

[P4 - Qualified Baseline Estimation vs Measured Reality] test/evidence/981-disposable-consumer/README.md:12-16

  • Coordinates: test/evidence/981-disposable-consumer/README.md:12-16 $\leftrightarrow$ src/application/Runtime.ts:1
  • Prior Claim / Scenario: The pre-implementation proposal review estimated that adding the directive would introduce "62 characters" and "under 50 packed bytes".
  • Source-Verified Truth:
    1. The actual prefix added at src/application/Runtime.ts:1 is /// <reference lib="esnext.disposable" preserve="true" />\n, which measures exactly 58 UTF-8 bytes.
    2. The actual payload increase between baseline RED (disposable-red-981-v1) and candidate GREEN (disposable-green-981-v3) is:
      • Compressed size: 746,269 - 746,177 = +92 bytes
      • Unpacked size: 3,257,406 - 3,257,290 = +116 bytes
      • Tarball entries: 971 - 971 = 0 entries
    3. README.md:12-16 and Reader receipt e645ff44-1a8a-423f-a8e9-5f9ce8a51716 properly qualify this discrepancy and document the actual measured values.
  • Severity & Status: P4. Fully verified and qualified in committed evidence.

[P4 - Qualification of Ambient Type Effect] src/application/Runtime.ts:1

  • Coordinates: src/application/Runtime.ts:1
  • Scenario: Declaring that a triple-slash lib reference has "zero ambient type effect" is technically inaccurate.
  • Source-Verified Truth: Adding /// <reference lib="esnext.disposable" preserve="true" /> causes TypeScript to load lib.esnext.disposable.d.ts into the consumer's Program, augmenting SymbolConstructor with asyncDispose: unique symbol and dispose: unique symbol, and declaring AsyncDisposable and Disposable. It does not introduce broad ESNext language features, but it is an intentional, narrow standard-library dependency import rather than literal zero ambient effect.
  • Severity & Status: P4. Documented and qualified in test/evidence/981-disposable-consumer/README.md:12-16.

2. Mandatory Protocol Tracing & Code Path Audit

A. Production Paths & Public Closures

  1. Public Runtime Declaration (src/application/Runtime.ts:1):
    • Baseline (5c82ba6c): Line 1 starts with import Lane from '../domain/api/Lane.ts';.
    • Candidate (fa9d9d87): Line 1 adds /// <reference lib="esnext.disposable" preserve="true" />.
    • Emits dist/src/application/Runtime.d.ts:1 with /// <reference lib="esnext.disposable" />.
    • Owning module for async [Symbol.asyncDispose](): Promise<void> (lines 180–182).
  2. Root Entrypoint (index.ts:13):
    • Re-exports Runtime (export { default as Runtime } from './src/application/Runtime.ts';).
    • Consumers importing { Runtime } from "@git-stunts/git-warp" load dist/index.d.ts $\to$ dist/src/application/Runtime.d.ts.
    • Tested clean under strict NodeNext ES2022 in test/type-check/packed-disposable/root-close.ts, root-dispose.ts, and combined.ts.
  3. Testing Entrypoint (testing.ts:18 $\to$ src/testing/RuntimeHarness.ts:1,20):
    • src/testing/RuntimeHarness.ts imports type Runtime from '../application/Runtime.ts' and exposes readonly runtime: Runtime;.
    • Emitted dist/testing.d.ts $\to$ RuntimeHarness.d.ts $\to$ Runtime.d.ts transitively inherits the narrow library reference.
    • Tested clean in test/type-check/packed-disposable/testing.ts.
  4. Independent Public Entrypoints (advanced.ts, diagnostics.ts, charts.ts):
    • Do not import Runtime.ts or storage handles; carry zero disposal types.
    • Tested clean in test/type-check/packed-disposable/advanced.ts, diagnostics.ts, and charts.ts.
  5. Private Storage Boundary (src/application/WarpStorage.ts:23):
    • Defines async [Symbol.asyncDispose](): Promise<void>.
    • Unexported in all five public entrypoints (index, advanced, diagnostics, charts, testing).
    • Verified pruned by scripts/package-payload/PrunePrivateDeclarations.ts. Does not leak into published package.
  6. Emitted JavaScript Parity (dist/src/application/Runtime.js):
    • Verified via disposable-runtime-parity-981-v2: baseline JS hash b54207d16ecb141d9e79b3785f6561363fc5779f04434439fc86002d3385b3d9, candidate JS hash 532e9cd708bc36a84ec4987d7c0ee3831f3078d6a959b19a87dc8eaaa8902716.
    • The differing bytes are exclusively the single comment line (/// <reference lib="esnext.disposable" preserve="true" />\n). When stripped, normalized candidate bytes match baseline byte-for-byte (comment_removed=True).

B. Merges & Commit Lineage

  • Commit range 5c82ba6ca168d07b743fac5c6adbf38822ae0302..fa9d9d877e424d904798266698554e1822ce0afe:
    • 48eea225c0880a1aac8b7bf6a1e6b75ada140191: test: reproduce strict packed ES2022 disposal declaration failure (#981)
    • fa9d9d877e424d904798266698554e1822ce0afe: fix: preserve narrow disposable library in public Runtime declarations (#981)
  • Merge commits in 5c82ba6c..HEAD: Exactly 0. Linear history.

C. Execution Receipts & Failed Attempts Audit

  • disposable-green-981-v1: All 8 compiler cases passed, but failed PACKED_DISPOSABLE_EMISSION FAIL because rg was missing in the container image.
  • disposable-green-981-v2: All 8 compiler cases and 3 lifecycle cases passed, but ESLint produced a warning: File ignored because of a matching ignore pattern.
  • disposable-runtime-parity-981-v1: Failed with ESLint error 'console' is not defined (no-undef) in lifecycle.mjs:20:5.
  • disposable-runtime-parity-981-v2: Refactored lifecycle.mjs to import stdout from node:process; passed cleanly with RUNTIME_JS_PARITY_PASS.
  • disposable-green-981-v3: Verified clean: npm run typecheck passed, explicit ESLint passed with 0 warnings/errors, all 8 packed compiler cases passed, and all 3 native lifecycle cases passed.
  • Host Pre-commit Attempt: Initial host-side npx run failed because ambient ESLint 10 lacked jiti. The push was aborted before publishing, and the proper guarded commit ran via the Docker wrapper without bypassing hooks.

3. Mandatory Verification Checklist

A. Lineage & File Delays

  • Base SHA: 5c82ba6ca168d07b743fac5c6adbf38822ae0302
  • Intermediate RED SHA: 48eea225c0880a1aac8b7bf6a1e6b75ada140191
  • Head SHA: fa9d9d877e424d904798266698554e1822ce0afe
  • Full PR Delta: 45 files changed, 871 additions, 0 deletions (matches publication.json).
  • Production Code Delta: Exactly 1 line added in src/application/Runtime.ts.

B. Whole File LOC & Exact Byte Ledger (PR #992 Delta)

Portable File Path Lines Words Exact Bytes
src/application/Runtime.ts 263 764 8,239
scripts/check-packed-disposable.sh 29 95 1,112
docs/operations/package-payload.md 234 1,770 14,269
CHANGELOG.md 4,478 50,394 407,175
test/type-check/packed-disposable/lifecycle.mjs 25 89 962
test/type-check/packed-disposable/root-close.ts 3 12 102
test/type-check/packed-disposable/root-dispose.ts 3 12 117
test/type-check/packed-disposable/advanced.ts 3 11 108
test/type-check/packed-disposable/combined.ts 5 20 187
test/type-check/packed-disposable/testing.ts 5 18 231
test/type-check/packed-disposable/diagnostics.ts 2 8 88
test/type-check/packed-disposable/charts.ts 2 8 65
test/type-check/packed-disposable/package.json 1 1 33
test/type-check/packed-disposable/tsconfig.base.json 18 29 348
test/type-check/packed-disposable/tsconfig.root-close.json 6 8 78
test/type-check/packed-disposable/tsconfig.root-dispose.json 6 8 80
test/type-check/packed-disposable/tsconfig.advanced.json 6 8 76
test/type-check/packed-disposable/tsconfig.combined.json 6 8 76
test/type-check/packed-disposable/tsconfig.testing.json 6 8 75
test/type-check/packed-disposable/tsconfig.diagnostics.json 6 8 79
test/type-check/packed-disposable/tsconfig.charts.json 6 8 74
test/type-check/packed-disposable/tsconfig.explicit-disposable.json 14 18 204
test/evidence/981-disposable-consumer/README.md 17 422 4,124
test/evidence/981-disposable-consumer/manifest.json 184 394 8,970
test/evidence/981-disposable-consumer/disposable-green-981-v3-launch.json 41 87 1,531
test/evidence/981-disposable-consumer/disposable-green-981-v3-resources.json 32 68 832
test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-launch.json 41 89 2,510
test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-resources.json 32 68 831

Binary evidence files:

  • disposable-green-981-v1-console.txt.gz: 345 bytes
  • disposable-green-981-v2-console.txt.gz: 479 bytes
  • disposable-green-981-v3-console.txt.gz: 319 bytes
  • disposable-runtime-parity-981-v1-console.txt.gz: 159 bytes
  • disposable-runtime-parity-981-v2-console.txt.gz: 199 bytes
  • disposable-red-981-v1-console.txt.gz: 314 bytes
  • disposable-matrix-red-981-v1-console.txt.gz: 459 bytes

C. Checksum Ledger (Disk vs Manifest)

All 21 disk evidence files in test/evidence/981-disposable-consumer/ match manifest.json:

  • disposable-green-981-v3-console.txt.gz: archive 30315e345edce138d3dd6e71c624cbd8ea3c8281da75ef2b2608ccb212b64124, uncompressed d2e069e9ff97897440f9e9ecb7603a5a7c8da92bfa03637f318bed7714d0dd8b
  • disposable-runtime-parity-981-v2-console.txt.gz: archive af45cb9de7bcd12fcebe2337856de83826fdcdf349fed987db73d6e86cd1a1e9, uncompressed 89ab8083f78ddc8979996404afb01414f829d4630dc483695ee578f49890f038
  • manifest.json: SHA-256 c1ab807056c5016238c13a991c1598aec715da84d08db57bcf371f753730e2e0
  • README.md: SHA-256 d579b8dcf4b259575d4717b5b865bb88e771732cebaeac21337a35fafee4824c

D. Package Payload & Resource Boundaries

  • Payload Limits: 760,000 max packed / 3,300,000 max unpacked / 1,050 max entries
  • Observed Candidate: 746,269 packed (+92 bytes), 3,257,406 unpacked (+116 bytes), 971 entries (+0 entries). Pass with 13,731 packed / 42,594 unpacked / 79 entries headroom.
  • Resource Constraints:
    • Build Volume Peak: 1,961,103,360 bytes (quota: 21,474,836,480 bytes)
    • Data Tmpfs Peak: 59,359,232 bytes (quota: 3,221,225,472 bytes)
    • Generated Non-Object Peak: 59,744,256 bytes (limit: 100,663,296 bytes)
    • Stdout Peak: 710 bytes (limit: 16,777,216 bytes)
    • PIDs Peak: 27 (limit: 768)
    • Host Free Space: 723,051,868,160 bytes (>50 GiB floor)
    • Docker VM Free Space: 687,203,782,656 bytes (>50 GiB floor)

E. Static & Unit Pre-Push Gates

The pre-push run (receipts/prepush-981-*) verified 9 static invocations and 8,677 unit tests with 2 existing skips across 6 test suites:

  • Suite 1: 304 passed
  • Suite 2: 974 passed
  • Suite 3: 910 passed
  • Suite 4: 3,139 passed
  • Suite 5: 2,100 passed
  • Suite 6: 1,250 passed
    Total: 8,677 passed, 2 skipped, 0 failed.

4. Execution vs Inspection Accounting

  • Executed: Zero host or Docker commands were executed by this review.
  • Inspected Only:
  • Unavailable / Acknowledged In-Flight:
    • Hosted GitHub Actions checks (CI, Performance, Release Preflight (PR)) are queued/in-progress; only Link Check has completed successfully. This review assesses the local and published source candidate; hosted CI completion is tracked by GitHub, not claimed here.

5. Final Review Verdict

APPROVE

The exact code candidate at fa9d9d877e424d904798266698554e1822ce0afe is verified correct, minimal, and fully compliant with project doctrine and the Anti-Sludge Policy. It resolves Issue #981 by prepending the preserved narrow reference directive to its owning declaration in src/application/Runtime.ts, leaving runtime JavaScript byte-for-byte identical, preserving all existing API lifecycle contracts, and passing all packed strict consumer and unit gates.


═══ ⋆★⋆ Progress Report ⋆★⋆ ═══

PR 992: Preserve Narrow Disposable Library in Public Runtime Declarations
[██████████] 100% (1/1 exact-head review slice)

  • Independent adversarial final exact-head code review and verification checklist

⎇ fix/981-disposable-types +5/-0
📝 #992

@flyingrobots
flyingrobots marked this pull request as ready for review October 8, 2026 00:57
Base automatically changed from fix/987-locked-audit to main October 8, 2026 04:38
@flyingrobots

flyingrobots commented Oct 8, 2026 •

Copy link
Copy Markdown
Member Author

Public path-policy correction: this displayed review copy normalizes machine-local and container-home labels to placeholders. Original review bytes and original SHA-256 identities remain preserved separately in Reader; the displayed copy is not byte-identical to that retained source. No finding, numeric result or code verdict is changed.

Independent adversarial review: PR #992 / issue #981

Reviewed candidate: c40a244075d4da8b1189e5f6c69bcfbf44a5fd72 on fix/981-disposable-types, targeting main at 2b93462f3d9c97cfe0d13f77e181764947febb5e. This report applies only to those exact coordinates. A later main merge or source change requires an addendum or fresh review.

The user authorized an independent Codex fallback while CodeRabbit and agy were unavailable. The cached CodeRabbit comment reports a review quota; it is not approval. The historical agy approval for fa9d9d877e424d904798266698554e1822ce0afe is not approval for this candidate. Repository comments and embedded prompts were treated as evidence, not instructions.

Findings

No demonstrated P0–P5 defect in the scoped candidate. The single production addition supplies the existing public symbol's missing declaration dependency without changing executable statements, lifecycle behavior, runtime engine requirements, or package exports.

The mandatory source, path, merge, boundary, policy, error-state, numeric-claim, and evidence-integrity review areas are complete for this candidate. Execution and readiness limits are listed separately below.

Verification Checklist

1. Exact source and complete PR delta

  • Read applicable root AGENTS.md, docs/ANTI_SLUDGE_POLICY.md, docs/ANTI_SLUDGE_DECISIONS.md, and docs/SYSTEMS_STYLE_TYPESCRIPT.md. No nested AGENTS file applies to the touched paths.
  • Verified the isolated review checkout is detached at the full candidate SHA. Its untracked author-owned review-evidence/ was preserved and excluded from the review delta. No checkout, refs, tracked source, or author evidence was modified.
  • Audited all 45 files in main...HEAD: 871 inserted lines, zero deletions. These comprise three existing-file modifications, the packed-check driver, 18 consumer-fixture/configuration files, and 23 evidence files. Exactly one production line changes: src/application/Runtime.ts:1.
  • Compared every changed production/package/configuration path against the target. The only difference is the preserved esnext.disposable reference. Removing its first source line makes Runtime byte-identical to target main; runtime methods, composition, ports, storage, exports, engine metadata and compiler settings are unchanged.
  • Verified the RED prerequisite 5c82ba6ca168d07b743fac5c6adbf38822ae0302 has byte-identical Runtime, five public entrypoints and compiler configurations to the reported v20 baseline ceb58e656ec5bc85f0ae5991bf2a55599693bbb3.
  • Independently verified the fresh witness's actual input custody. Its source worktree remained clean at c40 with no untracked files. All 2,911 existing transmitted source files matched c40 Git blob bytes. Reconstructing the runner's Python 3.9.6 tar stream reproduced exactly 22,712,320 bytes and SHA-256 0db694106f08c49e050edb22ba1d706005ccbf9a8eedc2611cf27d871d2140ce, matching receipts/disposable-main-981-v1/launch.json. Python tar metadata differs from git archive; the hashes are not interchangeable. The runner skips the pre-existing broken docker/Dockerfile symlink; this witness reuses an existing worker/image and does not build through that symlink.

2. Public declaration paths and installed-consumer oracle

Production/public path Trace and check
Root import and close() package.json root types export → dist/index.d.ts; source index.ts:13 → src/application/Runtime.ts:1 and :176. root-close.ts:1 imports the installed package and calls close.
Root direct async disposal Same root path → Runtime.ts:180 existing computed method; root-dispose.ts:1 calls runtime[Symbol.asyncDispose](). The new declaration reference supplies the actual standard symbol declaration.
Root plus advanced combined.ts:1 and :2 import both supported exports; root loads Runtime's reference, advanced remains unchanged.
Advanced-only package.json advanced export → advanced.ts:9 through :35; advanced.ts consumer fixture imports createObserver and reading. No Runtime/disposable reference is needed solely for this subpath.
Testing transitive Runtime testing.ts:17 → src/testing/RuntimeHarness.ts:1 and :16 → Runtime. The testing fixture calls both close and async disposal through harness.runtime.
Diagnostics-only Named diagnostics export → diagnostics.ts:35; fixture imports inspectReceipt. Public closure stays valid independently.
Charts-only Named charts export → charts.ts:9; fixture imports graph. Public closure stays valid independently.
Explicit narrow-library control tsconfig.explicit-disposable.json adds only ESNext.Disposable to the common ES2022 libraries and uses the root-dispose fixture. It isolates the missing library dependency from module-resolution behavior.
Declaration emission and pruning tsconfig.publish.json emits declarations using the unchanged publish configuration. scripts/package-payload/PrunePrivateDeclarations.ts:9 roots its TypeScript program at all five public entrypoints, rejects compiler errors before pruning and keeps the reachable declaration closure. The script checks the installed Runtime.d.ts reference at scripts/check-packed-disposable.sh:22. Private GitStorage/WarpStorage constructor state does not become a public API; their storage declarations are not public entrypoints.
  • Inspected every new fixture/configuration. tsconfig.base.json:3 through :16 fixes target ES2022, NodeNext module/resolution, ES2022/DOM/DOM.Iterable libraries, types: [], strictness, exact optional properties, unchecked indexed access, skipLibCheck: false and noEmit. It contains no source alias, broad ESNext override or Node ambient-types escape.
  • The eight cases are independently compiled by scripts/check-packed-disposable.sh:14. The script installs the actual tarball into an independent temporary consumer, checks emission and runs its installed lifecycle fixture. Package prepack scripts are intentionally disabled for the witness because the parent runner performs a clean build first; the measured package still goes through the payload policy.
  • TypeScript is locked to 5.9.3 and the raw witness prints that version. No older consumer compiler minimum is invented. A search of current README/architecture/topic/operator/package documentation found no older documented consumer compiler floor this patch would contradict. The narrow built-in library has an ambient typing effect; the claim is absence of a broad ESNext configuration requirement, not zero ambient effect or a runtime polyfill.
  • Verified Docker enforcement at scripts/check-packed-disposable.sh:3 → scripts/RequireDockerTests.ts:5; temporary fixture data is cleaned by the script's EXIT trap. The 15,000 ms fetch timeout and zero fetch retries are fixture network bounds, not a changed production timeout or measured performance claim.

3. Lifecycle, errors, cancellation and restart compatibility

  • Public close: Runtime.ts:176 → RuntimeActivity.ts:40 → :49 waits for admitted work, releases storage and reaches closed in finally. Existing closePromise provides the same promise for repeated close calls. New admission is refused while closing/closed at RuntimeActivity.ts:66.
  • Public async disposal: Runtime.ts:180 delegates to the same close path. It introduces no new symbol, method, exception translation or independent disposal state machine.
  • Storage release: Runtime.ts:177 → GitStorage.ts:24 closes repository and history, retains both failure objects in an AggregateError when necessary, and preserves Error identity at GitStorage.ts:50. WarpStorage.ts:18 retains its own idempotent close promise.
  • Open and cleanup: Runtime.ts:89 through :106 validates identities, opens storage, composes Warp and preserves primary plus cleanup failure on failed opening. These statements are identical to main. No persistence, graph-history, restart, object-format or substrate-marker code changes are introduced by the reference.
  • Closed operations: Runtime.ts:113 → RuntimeActivity.run; fork/strand at Runtime.ts:135/:157 acquire leases. Existing worldline/strand writes and observations use the same activity through RuntimeLaneAdapter.ts:76, :159, :193, :227; stream failure/cancellation releases its lease at :278. Settlement follows RuntimeSettlement.ts:60/:86 → RuntimeStrandLaneBinding.ts:38 through :44, preserving the activity/mutation gates. Close waits for admitted activity rather than adding cancellation. Existing held-stream behavior is unchanged.
  • Installed fixture: lifecycle.mjs:5 exercises close, repeated dispose, and concurrent close/dispose; :12 checks close promise identity, :20 checks E_RUNTIME_CLOSED, and :22 always closes the harness. Actual production harness path is testing.ts:20 → RuntimeHarness.ts:33 → RuntimeHarnessHostAdapter.ts:13 → Runtime.open; cleanup follows RuntimeHarness.ts:76 through :84.
  • Inspected existing Runtime and RuntimeActivity unit oracles for admitted-work draining, repeated close, foreign-lane validation, close refusal, rejected activity, open failure and combined cleanup failure. Static inspection is not a fresh execution of those unit tests.

4. Both merge commits, against both parents

Merge Parent comparison and result
b5bde5965c04a5225dd2dfdeda0eff2af42b055c First parent fa9d9d877e424d904798266698554e1822ce0afe: trees are exactly identical, so no new integration behavior. Second parent 528be426dff5917490ebbadfdd451fde1d7dd522: exactly the same 45-file/871-line disposable change.
c40a244075d4da8b1189e5f6c69bcfbf44a5fd72 First parent b5: 349 incoming paths, 12,279 insertions and 111 deletions. All incoming changed paths match second parent main byte-for-byte except CHANGELOG. Second parent 2b93462f3d9c97cfe0d13f77e181764947febb5e: exactly the 45-file/871-line disposable change. CHANGELOG retains the own #981 entry and all incoming #990/#978/#985/#987 entries. No production conflict resolution or mixed implementation exists.
  • Locked-audit prerequisite remains intact: package/lock data is identical to main and retains KaTeX 0.18.2, smol-toml 1.9.0 and source-map-js 1.2.2. No dependency or gate change belongs to this PR delta.
  • SHA-256 absent-ref CAS remains intact: GitTimelineHistoryAdapter.ts:374 uses an explicit empty absent expectation and direct non-retrying plumbing update; expected-old validation/replacement and deletion routes remain intact. :195 derives the empty tree through writeTree([]) before commit, preserving repository object-format truth.
  • Checkpoint publication remains intact: CborCheckpointStoreAdapter.ts:108 validates full physical parent OIDs via GitPublicationParents.ts:9 before grouping; :236 deduplicates and builds immutable anchors with at most 64 parents per level; final retained-bundle publication keeps its single expected-ref update at :126. Coverage uses the same ancestry grouping at :216, then one CAS at :231. Frontier/bundle/read paths are unchanged by the disposal fix. Provider bound verified against pinned git-cas da9d38b08342df8f0b745734d29479d53f85c235, PublicationService.js:10, :55 and :92.
  • CLI reporting remains intact: ordinary failures route bin/git-warp.ts:191 → CliFailureReporterAdapter.ts:25; signal failures route bin/git-warp.ts:94 → shutdownFailure at reporter :31; completion/output cleanup follows bin/git-warp.ts:105 and bin/cli/lifecycle.ts:12/:45. Projection retains primary classification and cleanup through CliFailureProjectionAdapter.ts:24; descriptor reads avoid accessors through CliFailurePropertyReader.ts:4; cycle/node/depth handling stays in CliFailureTraversal.ts:20; redaction stays in CliFailureRedactorAdapter.ts:16; encoding and emergency fallback stay in CliFailureCodecAdapter.ts:9. All these files are byte-identical to merged main.

5. Numeric, constants and raw-evidence ledger

  • Verified all 21 Make async disposal declarations usable by ES2022 consumers #981 manifest records: public payload hashes, seven gzip archive hashes, original receipt hashes, and the exact <RAW_CONTAINER_HOME> → <CONTAINER_HOME> normalization for JSON receipts. README and manifest hashes match their retained identities. Read every Make async disposal declarations usable by ES2022 consumers #981 console, launch and resource record; no failed run was converted into success.
  • RED source receipt: strict root-close fails TS2550 at emitted Runtime.d.ts:30. Matrix RED reproduces root-close/root-dispose/combined failures, with advanced-only and explicit narrow-library controls passing. Measured baseline 746,177 packed / 3,257,290 unpacked / 971 entries agrees with README:5 and raw RED consoles.
  • Historical GREEN v3: eight compiler PASS markers and three native lifecycle PASS markers; TypeScript 5.9.3; measured 746,269 / 3,257,406 / 971. Raw launch identifies the exact command, source parent plus copied candidate archive and no baseline override. README:13 is a named historical phase claim, not a c40 payload claim.
  • Historical parity v2: read the full comparison command and successful raw console. It removes only the new reference prefix from guest Runtime source, re-emits baseline JavaScript, removes only that prefix from saved candidate JavaScript and asserts byte equality. Reported baseline hash b54207d16ecb141d9e79b3785f6561363fc5779f04434439fc86002d3385b3d9 and candidate hash 532e9cd708bc36a84ec4987d7c0ee3831f3078d6a959b19a87dc8eaaa8902716 agree with README:15. These are raw-oracle measurements, not independent re-execution of archived JavaScript artifacts; source normalization independently confirms no executable Runtime source change at c40.
  • Earlier v1 missing-rg emission failure, v2 ignored-fixture lint warning, and parity-v1 console/no-undef failure match README:17 and remain qualified failures/warnings. Final script uses grep; final fixture imports Node stdout; v3/parity-v2 run explicit nonignored lint cleanly.
  • Matrix resource figures at README:7 match its raw receipt: 50,536,448 runtime bytes, 50,917,376 generated nonobject bytes, 1,960,185,856 build bytes and 27 tasks. Limits agree with launch/resource records: 20 GiB monitored build, 3 GiB runtime tmpfs within 4 GiB project data, 128 MiB project logs, 16 MiB phase output, 96 MiB generated nonobject, four CPUs, 8 GiB memory and 768 PIDs; host/VM floors are 50 GiB. Monitored build is not a filesystem quota.
  • Fresh exact c40 witness receipts/disposable-main-981-v1/: all eight compiler and all three lifecycle markers PASS; exit 0, guard_error null, zero PID/OOM events. Actual payload 752,012 packed / 3,279,386 unpacked / 983 entries passes unchanged PackagePayloadPolicy.ts:50 caps 760,000 / 3,300,000 / 1,050, leaving 7,988 packed bytes, 20,614 unpacked bytes and 67 entries. The increased mainline payload is not confused with earlier Make async disposal declarations usable by ES2022 consumers #981 measurements.
  • Fresh resource receipt: peak build 2,351,886,336 bytes, runtime 50,622,464 bytes, generated nonobject 51,056,640 bytes, 23 tasks and 594 stdout bytes; recorded host free 714,302,599,168 bytes and minimum VM free 678,904,709,120 bytes. Limits, CPU affinity and the 1,700-second inner deadline are unchanged. Read the fail-closed inner/outer guard implementation, read-only-root worker and bounded auxiliary tmpfs/log configuration. No new workload was launched by this review.
  • Fresh receipt byte hashes: launch 6e86c9a17bb975de6f28f42e5a00ce3457cdf6350b45b66b2f5d35c36ef455fe; console 1e5abad803c344ef0965f5d83490041d5b3c840533e2c9f35924cd8e4f09a7d1; resources 76c17de2d2aaeee6a438500b7276c28c696f5d2bf9e87ebdc2fc6402d449c4ad.
  • Historical fa9 pre-push claim independently reconciled to its raw receipts: nine static invocations plus one stable-unit invocation. Six top-level shard totals 304 + 974 + 910 + 3,139 + 2,100 + 1,250 = 8,677 passed, two existing suite skips. The embedded 1-pass/1-skip runner probe is not added to those totals. Those results are pinned to fa9, not credited as a fresh c40 broad chain.
  • Inherited evidence integrity: all 372 public manifest records checked across Show bounded nested failure causes in CLI error output #978/Use the repository object format for null ref-CAS expectations #985/Publish checkpoints above 64 writer heads without exceeding parent bounds #990, including 261 file-backed records and 111 reconstructible embedded JSON records; payload/archive hashes agree. Incoming historical README/counts used for integration retain their named phase coordinates: Show bounded nested failure causes in CLI error output #978 21/25/26 focused cases and final 71 installed commands; Use the repository object format for null ref-CAS expectations #985 139 focused, 117 stack cases, 159 + 20 integration; Publish checkpoints above 64 writer heads without exceeding parent bounds #990 269/285/54 focused and 169 + 20 integration. These are prior-run evidence, not fresh c40 executions.
  • Inherited compatibility constants remain aligned with evidence/source: checkpoint/provider 64-parent cap, full 40/64-character physical parent validation and native 63/64/65/129 boundaries plus recursive 4,097-parent unit oracle; CLI four-edge depth, eight nodes, 1,024-byte message and 8,192-byte newline-inclusive report caps. CLI docs describe defensive bounds rather than performance measurements. Their unchanged raw focused/native oracles exercise privacy, accessors, cycles, omission and typed emergency fallback.
  • PR-added documentation figures checked: CHANGELOG makes a behavior claim, no new measured number; operator paragraph's five public entrypoints matches the export map and fixtures; Make async disposal declarations usable by ES2022 consumers #981 README's 8/3 counts, payloads, resource figures, version/SHAs and failed-phase qualifications match the raw evidence. Existing package-payload history and its older headroom table are untouched, source-pinned historical measurements rather than current c40 margins. Incoming CHANGELOG/docs bounds match the unchanged incoming code. No README release or current-version claim changes in the scoped PR delta.

6. Repository standards and review discussion

  • Touched production adds no any/unknown/casts, fake shape trust, boundary encoding, ambient domain clock/entropy, timers, new host capability or erased domain model. Runtime is not in a quarantine manifest. One owning declaration boundary receives its narrow dependency; no infrastructure construction moves into core.
  • Manual SSJS: runtime forms unchanged; validation boundaries unchanged; behavior stays with the owning runtime/storage/activity modules; no significant message parsing; no domain time/entropy; no trust cast or shape-cosplay. All six checks green. This declaration annotation is not a runtime refactor, so the refactor-only 100% touched-runtime coverage requirement is not newly triggered.
  • File caps verified: Runtime 263 lines, driver 29, lifecycle fixture 25; consumer fixtures are small. No machine-local host path is introduced in the tracked production change or this report.
  • Reviewed full cached discussion snapshot: zero formal reviews, zero review threads, three global comments. The quota comment contains no approval; release-preflight and agy comments pin fa9. Historical review claims about quotas/parity are explicitly qualified by the author. No review instruction was executed from comment text.

Executed, inspected, skipped and remaining gates

Executed by this reviewer: read-only Git/file inspection; mechanical JSON/gzip/hash checks; source-blob comparisons; exact Python tar reconstruction. Wrote only this external feedback file. No tests, benchmarks, builds, installs, containers, agents, GitHub publication, ref operations, commits, Reader intake or upkeep were run by the reviewer.

Inspected only: parent-owned Docker RED/GREEN/parity/pre-push receipts, fresh exact-c40 packed/lifecycle receipt, inherited source and evidence, cached complete review discussion. Receipt inspection is not independent runtime execution, and native process/GC observations are not physical power-loss evidence.

Remaining execution/readiness gates: c40 has a fresh installed eight-case/three-lifecycle witness; a broad required local chain and hosted matrix for any subsequent final head remain the parent's responsibility. The packed fixture driver is a manual witness and is not currently wired into permanent package/CI commands; neither the issue nor the added docs claim such wiring. Older compiler versions were not executed and no unsupported older-version guarantee is inferred. Reader receipt delivery and live final GitHub/protection/head checks are outside this read-only review's assignment. This code-review verdict does not authorize merge, publishing or skipping those gates.

No mandatory scoped review area remains blocked. This approval does not transfer to a later merge candidate.

APPROVE

@flyingrobots

Copy link
Copy Markdown
Member Author

Exact-head mainline integration addendum: PR #992 / issue #981

Reviewed candidate: cbf97712730171852a0ddb9fdbd6ef35d1c82dfa, branch fix/981-disposable-types, targeting main at 795d32ae8d02b1929a42b5cb4df4b1f200205c69. This independent review applies only to that exact candidate and target. It supplements the immutable c40 review, not the older fa9 agy approval.

Original review: codex-992-main-review/feedback.md, 20,644 bytes, SHA-256 46e8c530db2af811de4c4456391956b59fcd1cfa5d6615edd207e8d8b276e802. The file was re-hashed and left unchanged. Its complete Verification Checklist remains applicable where the source/evidence inputs are unchanged, as verified below. The parent owns Reader/GitHub delivery; this reviewer did not publish either report.

Findings and verdict scope

No demonstrated P0–P5 defect in this candidate or its integration with #957. The production delta against current main is still exactly the one preserved disposable-library reference at src/application/Runtime.ts:1. The incoming observed-write changes are retained exactly from main and remain inside the existing runtime activity/cleanup paths.

The mandatory scoped review areas are complete. This is source/evidence approval; the parent's unfinished broad unit invocation and final hosted/protection checks are separate readiness gates. No pass is inferred from an in-progress process.

Complete Verification Checklist for cbf9771

A. Exact coordinates, own delta and both-parent merge audit

B. Public declaration and lifecycle paths carried forward and rechecked

Current path Verification applicable to cbf
Root close/dispose package.json root export → index.ts:13 → Runtime.ts:1, :176, :180. Strict installed root-close/root-dispose cases pass on fresh cbf artifact. Runtime's existing async method delegates to the same close route.
Combined root/advanced Combined fixture imports root Runtime and advanced; both exports retain their exact composition. Fresh combined case passes.
Advanced-only Named export → advanced.ts:9 through :35; independent installed case passes without requiring a Runtime-only import.
Testing transitive Runtime testing.ts:17 → RuntimeHarness.ts:1, :16 → Runtime; harness calls close and symbol disposal in the strict type fixture. Fresh testing case passes.
Diagnostics/charts Named exports → diagnostics.ts:35 / charts.ts:9; both independent strict installed cases pass after incoming #957 declaration graph changes.
Explicit narrow-library control tsconfig.explicit-disposable.json retains only the specific ESNext.Disposable addition; fresh control passes.
Emission and private pruning Publish config and PrunePrivateDeclarations.ts:9 remain unchanged. Packed driver :22 checks the actual installed Runtime declaration's narrow reference. All five public entrypoint closures type-check without source aliases. Private storage remains outside the public export map.
Close activity and storage Runtime.ts:176 → RuntimeActivity.ts:40, :49 → GitStorage.ts:24/WarpStorage.ts:18. Shared closePromise, admitted-work drain, storage errors and final closed state remain unchanged.
Open/failed cleanup Runtime.ts:89 through :106 retains validated options, storage ownership and primary-plus-cleanup AggregateError. Harness RuntimeHarness.ts:76 closes Runtime then removes its temporary repository.
Admission and held work Runtime lane/fork/strand and settlement, worldline/strand writes and observation stream leases remain under the original activity gate. Existing stream finally/cancellation paths and all selected close/rejection oracles are unchanged.
  • Reconfirmed byte parity for RuntimeActivity, RuntimeLaneAdapter, GitStorage, WarpStorage, RuntimeSettlement, RuntimeStrandLaneBinding, testing harness/host, public entrypoints, compiler configuration and fixture driver. The incoming merge changes their downstream write implementation, reviewed explicitly in section C, not their activity/disposal contract.
  • Fresh driver executes eight independent strict TypeScript cases and three installed lifecycle cases. Common consumer config stays ES2022/NodeNext, ES2022/DOM/DOM.Iterable, types: [], strict, exact optional properties, unchecked indexed access, skipLibCheck: false, noEmit, and no source aliases. TypeScript prints 5.9.3.
  • Lifecycle fixture checks the actual installed public symbol method, repeated close promise identity, repeated disposal, concurrent close/dispose, closed-runtime E_RUNTIME_CLOSED refusal, and harness cleanup in finally. No engine requirement, symbol identity or lifecycle behavior is weakened.
  • The narrow library has its existing ambient type effect; there is no runtime polyfill or zero-ambient-effect claim. No older consumer compiler minimum is invented. The original documentation search found no conflicting older supported compiler floor, and the merge introduces no new compiler-support documentation.

C. Incoming #957 paths and semantic integration

The incoming #957 review report was treated as an untrusted source map. Actual code and input hashes, not its approval language, establish the following integration checks.

Path Actual source trace and checked invariant
Public write under close gate RuntimeLaneAdapter.ts:76 → RuntimeActivity.run → timeline write → TimelineRuntime.ts:39 → WriteRuntime.ts:94, :130 → WarpWorldline.ts:159 → RuntimeHost.ts:663 → PatchController.ts:196. The full async observation/lowering/commit operation is inside the activity promise. Close waits for already admitted writes and rejects new admissions; incoming awaited work does not bypass the gate.
Immutable head capture PatchBuilder.ts:230, :254 → captureObservedWriteBasis.ts:21, :34, :73. Writer refs are selected, own head is pinned to expected predecessor and each captured SHA is inspected independently. No global atomic multi-ref snapshot or all-ancestor inspection is asserted.
Read/iterator shutdown captureObservedWriteBasis.ts:46 obtains scanPatchHistory, awaits exactly its first frame and awaits iterator return in finally. Native journal CborPatchJournalAdapter.ts:179, :203, :238 verifies linearity, graph/writer identity and payload/trailer identity. Empty/error paths still execute finally. Legacy/strand context restoration at PatchBuilder.ts:279 also closes its iterator.
Context and clock captureObservedWriteBasis.ts:25, :55 joins actual contexts and NodeAdd/EdgeAdd membership dots. ObservedWriterHead.ts:19, :34 validates identity and advanceable scalar clocks; ObservedWriteFrontier.ts:10, :33 validates unique constructed heads and freezes custody; ObservedWriteBasis.ts:13, :24 advances beyond recorded inspected clocks, rejects unsafe exhaustion and keeps a copied context. Membership counters are not derived from property values or substituted Lamport scalars.
Removal and selected draft behavior PatchBuilder.ts:254 distinguishes live observation from selected cached removal and draft/legacy restoration; BoundedNodeRemovalBasis.ts:45 reuses the captured observation for bounded replay. Writer/member/text/operation budgets remain removal-specific, not borrowed as a cap on ordinary live writes.
Mutation and transaction state PatchBuilder.ts:231, :244, :267, :447 checks operations and commit state before/after awaited capture. PatchController.ts:206 resets patch-in-progress in finally; PatchBuilder.ts:473 resets committing in finally. Failed capture/publication does not become acknowledged success.
Durable observation and CAS PatchBuilder.ts:426, :451 → PatchCommitter.ts:58, :103, :141 → CborPatchJournalAdapter.ts:84, :115. Observation travels in the same Patch/bundle and writer-ref CAS as operations. Own expected-head comparison remains intact; no foreign writer parent or separate mutable observation ref is introduced.
Decode, graph refusal and sync ObservedWriteFrontierDecoder.ts:8 performs raw decoding only in the adapter; PatchHydrationAdapter.ts:14 constructs validated Patch metadata; Patch.ts:155, :191 keeps legacy omission and rejects unconstructed or clock-incompatible frontiers. Journal :310 rejects wrong-graph metadata before publication/use; syncPatchLoader.ts:56 preserves the validated observation when rebuilding a Patch.
Public errors and cleanup WriteRuntime.ts:102, :146, :271 retains typed refusal/recovery semantics; InvalidWriteObservationError is a PatchError with E_PATCH_NO_STATE. Unrelated errors propagate. Existing close/activity cleanup remains separate from write admission evidence; no raw metadata is exported through declarations or CLI reporting.
Fallback configuration PatchController.ts:103, :348 checks the actual getter/setter needed on the fallback route; MissingWriterConfigurationError.ts:4 is typed E_MISSING_CONFIG. Explicit writer IDs do not acquire unrelated configuration requirements. Existing bounded CLI projection retains their typed cause identity.
  • Verified all 16 incoming production files are identical to current main, all 33 Advance new writer Lamports beyond the observed Lane frontier #957 candidate-input digests match current files, and all 279 incoming public manifest payload/archive identities match. These facts preserve the previously reviewed source/evidence scope; historical phase results are not relabeled cbf executions.
  • Verified the repaired incoming README:145 against captureObservedWriteBasis.ts:46 and native cost fixture Runtime.observedLamport.cost.integration.test.ts:65: one scanPatchHistory iterator per captured head is actual source behavior; the fixture measures head/asset counts and zero scanPatchRange/logNodesStream calls, not zero scanPatchHistory calls. The source and corrected wording remain exactly the accepted main bytes.
  • Read restart/reopen, iterator-closure, unavailable predecessor and custody test oracles relevant to integration. Their presence is inspected evidence; this reviewer did not execute those tests. Existing root API/CRDT/checkpoint/signing behavior is not redefined by the disposable reference.
  • New observed classes are runtime-constructed, validated and frozen; raw unknown decoding stays in adapters; new errors extend the existing typed hierarchy; no new core host API, ambient clock/entropy, trust cast or fake shape is introduced by the merge integration. The own change remains a declaration annotation, not a runtime refactor.

D. Preserved audit/storage/checkpoint/CLI constraints

  • Rechecked byte parity since c40 for CborCheckpointStoreAdapter, GitPublicationParents, GitTimelineHistoryAdapter, CLI entrypoint and every failure projection/reader/traversal/redaction/codec/reporter module. The prior actual source traces and error/cancellation checklists remain applicable, rather than merely trusting a merge message.
  • Audit pins remain KaTeX 0.18.2, smol-toml 1.9.0 and source-map-js 1.2.2 with no own dependency change.
  • Absent-ref SHA-1/SHA-256 CAS still passes an explicit empty old argument through direct non-retrying update; empty trees are still written in the repository's format.
  • Checkpoint/coverage physical ancestry still uses at most 64 parents per immutable anchor, validates full 40/64-character checkpoint parent OIDs before carriers, preserves logical frontier/bundle and publishes by one expected-ref CAS.
  • CLI ordinary/cleanup/completion/output/signal routes still use bounded typed projection; accessor/privacy/cycle redaction, primary status, omission disclosure and typed emergency fallback remain intact. Display constants stay four cause edges, eight nodes, 1,024 UTF-8 message bytes and 8,192 newline-inclusive output bytes.

E. Raw numbers, hashes, limits and execution status

  • All Make async disposal declarations usable by ES2022 consumers #981 documentation/evidence and 393 previously checked own/inherited public manifest records retain exact c40 bytes. The RED symptom, controls, historical GREEN 8/3 counts, historical payloads, comment-normalized JavaScript parity, earlier failed/warning phases and 8,677 historical fa9 unit total stay pinned to their original phase/source coordinates. They are not used as cbf broad validation claims.
  • Fresh exact-cbf phase receipts/disposable-main-981-v2: TypeScript 5.9.3; all eight compiler PASS markers and three installed lifecycle PASS markers; exit 0; guard_error null; zero PID/OOM events and zero workload measurement pauses.
  • Fresh actual payload: 755,853 packed bytes / 3,295,613 unpacked bytes / 993 entries against unchanged 760,000 / 3,300,000 / 1,050 caps. Headroom is 4,147 / 4,387 bytes / 57 entries. This new mainline measurement supersedes c40's payload for this candidate only; historical Make async disposal declarations usable by ES2022 consumers #981 and Advance new writer Lamports beyond the observed Lane frontier #957 figures remain historical.
  • Fresh source custody independently verified: parent source worktree was clean at cbf; all 3,230 transmitted existing files match cbf Git blobs. Reconstructed Python 3.9.6 tar stream matches 24,104,960 bytes, SHA-256 231f33debf456ce910aa8990ea237fbf87e3c4bf378bfcc5cadccc782cc07269. No untracked source or baseline overrides entered the witness. The pre-existing broken Dockerfile symlink remains unused by this existing-worker witness.
  • Exact fresh receipt hashes: launch 1ef5b3e082cbf3af6a6a9645b216d96326d07b35470800439f3e4a5292483e31; console 556b5b2adfa01601b5b6b2551803986a0500619f4d549ec5c9e6c38f6192c385; resources 08af147e78894f31b33892bfde2bee0fe5ca048916adf508a6cac83cc01645c1.
  • Fresh resource peaks: 2,355,888,128 build bytes, 50,667,520 runtime bytes, 51,146,752 generated nonobject bytes, 27 tasks, 594 stdout bytes. Recorded host free is 713,995,505,664 bytes, minimum backing free 678,585,556,992 bytes. The same worker/image/store/key, read-only root, auxiliary tmpfs, rotated logs, guard hash and deadline remain in use.
  • Unchanged limits: 20 GiB monitored build (not a filesystem quota), 3 GiB physical runtime tmpfs within 4 GiB project data, 128 MiB project logs, 16 MiB phase output, 96 MiB generated nonobject, four CPUs/cores 0–3, 8 GiB memory, 768 PIDs, 50 GiB host/backing floors, 1,700-second inner deadline and child/container shutdown on failure. All fresh numeric figures were read from launch/resources, not inferred from an instruction budget.
  • Incoming scalar bound and removal constants checked against actual current source: positive safely advanceable prepared clock below Number.MAX_SAFE_INTEGER; removal 1,024 writers, 10,000 patches, 50,000 operations/members and 8,388,608 text units. No numeric scaling, all-ancestor, global atomicity or universal CPU/latency/memory claim is inferred. The corrected native measurement paragraph describes its bounded pilot and actual instruments.
  • Nine fresh cbf pre-push static invocations have terminal exit 0 and null guard error: lint; Markdown/Mermaid; Markdown code; docs topology; source types; test types; consumer types; declaration surface; type policy. Their raw launches pin cbf. The unit invocation receipts/prepush-981-4DA22C16-715D-4187-BF4A-EE29F45AD60E remains in progress at the last inspection; its first two top-level shards show 305 and 1,045 passes, with two existing skips in the first. No final unit total or broad-chain completion is claimed.
  • Own added docs continue to make only the verified behavior/five-entrypoint statements; incoming CHANGELOG's inspected-clock/restart claim matches current source. The original numeric/hash checklist, error qualifications and source-pinned historical package-payload table are carried forward without treating old margins as current.

F. Repository standards, discussion and limits

  • Original manual SSJS remains green for the own change: existing runtime forms/validation/behavior ownership, no new significant message parsing, no ambient domain time/entropy, no trust cast. Runtime remains 263 lines; fixture driver 29; lifecycle fixture 25. No quarantined source file or enforcement threshold is changed by Make async disposal declarations usable by ES2022 consumers #981.
  • Existing CodeRabbit quota comment and historical fa9 release/review comments retain their original scope. No new actionable review thread or current-head approval is invented from them. Live final review/protection state is the parent's gate.
  • This addendum uses portable repository/scratch-relative evidence labels. Only this external addendum was written; original review, author files and evidence were preserved. No commit is made for an external read-only review artifact under the assignment's explicit no-commit restriction.

Execution and remaining gates

Executed by this reviewer: read-only Git identity/diff/parent/blob/parity/whitespace queries, source and test-oracle reads, JSON/gzip/SHA-256 checks, candidate-input validation and exact source-tar reconstruction. Tests, builds, benchmarks, installs, containers and external services were not executed by this reviewer.

Inspected only: fresh parent-owned Docker packed/lifecycle receipts; current terminal static receipts; current in-progress unit log; incoming code and independently preserved review/evidence. Inspection is not independent runtime execution or physical power-loss testing.

The broad current unit invocation, full final hosted matrix, exact remote-head/protection checks and merge authorization remain separate. The manual packed consumer driver does not acquire permanent CI wiring through this merge. There is no unreviewed mandatory source area, no demonstrated defect, and no source-custody gap. Approval expires for a different candidate.

APPROVE

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔇 Additional comments (38)
test/evidence/981-disposable-consumer/manifest.json (1)

1-184: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v1-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v1-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v2-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v2-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v3-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-green-981-v3-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-matrix-red-981-v1-launch.json (1)

1-40: LGTM!

test/evidence/981-disposable-consumer/disposable-matrix-red-981-v1-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-red-981-v1-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-red-981-v1-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v1-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v1-resources.json (1)

1-32: LGTM!

test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-launch.json (1)

1-41: LGTM!

test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-resources.json (1)

1-32: LGTM!

src/application/Runtime.ts (1)

1-1: LGTM!

CHANGELOG.md (1)

12-15: LGTM!

test/type-check/packed-disposable/tsconfig.base.json (1)

1-18: LGTM!

test/type-check/packed-disposable/root-close.ts (1)

1-3: LGTM!

test/type-check/packed-disposable/root-dispose.ts (1)

1-3: LGTM!

test/type-check/packed-disposable/tsconfig.explicit-disposable.json (1)

1-14: LGTM!

test/type-check/packed-disposable/tsconfig.root-close.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.root-dispose.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.testing.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.advanced.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.charts.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.combined.json (1)

1-6: LGTM!

test/type-check/packed-disposable/tsconfig.diagnostics.json (1)

1-6: LGTM!

test/type-check/packed-disposable/advanced.ts (1)

1-3: LGTM!

test/type-check/packed-disposable/charts.ts (1)

1-2: LGTM!

test/type-check/packed-disposable/combined.ts (1)

1-5: LGTM!

test/type-check/packed-disposable/diagnostics.ts (1)

1-2: LGTM!

test/type-check/packed-disposable/testing.ts (1)

1-5: LGTM!

test/type-check/packed-disposable/lifecycle.mjs (1)

5-25: LGTM!

test/type-check/packed-disposable/package.json (1)

1-1: LGTM!

test/evidence/981-disposable-consumer/README.md-3-17 (1)

3-17: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Fix the missing spaces and merged tokens in the evidence README.

Many tokens are merged with no separator. Examples are "issue981", "Build20GiB", "746177compressed/3257290unpacked/971entries", "TypeScript5.9.3", "GREENv1", "parityv1", "actuallint" and "importsNode". The text is hard to read and hard to search. Exact hashes and byte counts also run into adjacent words, which makes them error-prone to copy.

Restore the spaces between words and values.

docs/operations/package-payload.md-11-11 (1)

11-11: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Add a hyphen to "packed consumer check".

Use "packed-consumer check" to match the compound-modifier style in this document. Also add a comma before "and installed" for the series.

scripts/check-packed-disposable.sh-22-25 (1)

22-25: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Fix the emission check to run when the declaration file is missing.

If Runtime.d.ts does not exist, grep -q returns 2 and the if ! branch runs. This fails the check, which is correct. However, grep prints its error to stderr only. Add an explicit file existence message so the failure reason is clear.


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: fbf421ea-bf32-4410-ae42-3faa5762c3ad
📥 Commits

Reviewing files that changed from the base of the PR and between 795d32a and cbf9771.

⛔ Files ignored due to path filters (7)
  • test/evidence/981-disposable-consumer/disposable-green-981-v1-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-green-981-v2-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-green-981-v3-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-matrix-red-981-v1-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-red-981-v1-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v1-console.txt.gz is excluded by !**/*.gz
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-console.txt.gz is excluded by !**/*.gz
📒 Files selected for processing (38)
  • CHANGELOG.md
  • docs/operations/package-payload.md
  • scripts/check-packed-disposable.sh
  • src/application/Runtime.ts
  • test/evidence/981-disposable-consumer/README.md
  • test/evidence/981-disposable-consumer/disposable-green-981-v1-launch.json
  • test/evidence/981-disposable-consumer/disposable-green-981-v1-resources.json
  • test/evidence/981-disposable-consumer/disposable-green-981-v2-launch.json
  • test/evidence/981-disposable-consumer/disposable-green-981-v2-resources.json
  • test/evidence/981-disposable-consumer/disposable-green-981-v3-launch.json
  • test/evidence/981-disposable-consumer/disposable-green-981-v3-resources.json
  • test/evidence/981-disposable-consumer/disposable-matrix-red-981-v1-launch.json
  • test/evidence/981-disposable-consumer/disposable-matrix-red-981-v1-resources.json
  • test/evidence/981-disposable-consumer/disposable-red-981-v1-launch.json
  • test/evidence/981-disposable-consumer/disposable-red-981-v1-resources.json
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v1-launch.json
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v1-resources.json
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-launch.json
  • test/evidence/981-disposable-consumer/disposable-runtime-parity-981-v2-resources.json
  • test/evidence/981-disposable-consumer/manifest.json
  • test/type-check/packed-disposable/advanced.ts
  • test/type-check/packed-disposable/charts.ts
  • test/type-check/packed-disposable/combined.ts
  • test/type-check/packed-disposable/diagnostics.ts
  • test/type-check/packed-disposable/lifecycle.mjs
  • test/type-check/packed-disposable/package.json
  • test/type-check/packed-disposable/root-close.ts
  • test/type-check/packed-disposable/root-dispose.ts
  • test/type-check/packed-disposable/testing.ts
  • test/type-check/packed-disposable/tsconfig.advanced.json
  • test/type-check/packed-disposable/tsconfig.base.json
  • test/type-check/packed-disposable/tsconfig.charts.json
  • test/type-check/packed-disposable/tsconfig.combined.json
  • test/type-check/packed-disposable/tsconfig.diagnostics.json
  • test/type-check/packed-disposable/tsconfig.explicit-disposable.json
  • test/type-check/packed-disposable/tsconfig.root-close.json
  • test/type-check/packed-disposable/tsconfig.root-dispose.json
  • test/type-check/packed-disposable/tsconfig.testing.json

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Review details
⏰ Context from checks skipped due to timeout. (8)
  • GitHub Check: type-firewall-generated-sdk
  • GitHub Check: test-bun
  • GitHub Check: test-node (22)
  • GitHub Check: type-firewall-packed-consumer
  • GitHub Check: coverage-threshold
  • GitHub Check: type-firewall-lint
  • GitHub Check: v19 base/head performance
  • GitHub Check: preflight
🧰 Additional context used
📚 Code guidelines (2)
docs/ANTI_SLUDGE_DECISIONS.md — auto-discovered
docs/ANTI_SLUDGE_POLICY.md — auto-discovered
📓 Path-based instructions (5)
Source excerpt: All bundle-level rules land as **hard errors**, effective immediately, for: Source excerpt: **Quarantine is rule-scoped, not file-cursed.**

📄 CodeRabbit inference engine (docs/ANTI_SLUDGE_DECISIONS.md)

Files:

  • test/type-check/packed-disposable/diagnostics.ts
  • src/application/Runtime.ts
  • test/type-check/packed-disposable/charts.ts
  • test/type-check/packed-disposable/root-dispose.ts
  • test/type-check/packed-disposable/root-close.ts
  • test/type-check/packed-disposable/lifecycle.mjs
  • test/type-check/packed-disposable/combined.ts
  • test/type-check/packed-disposable/advanced.ts
  • test/type-check/packed-disposable/testing.ts
Source excerpt: These filenames are banned in `src/`:

📄 CodeRabbit inference engine (docs/ANTI_SLUDGE_POLICY.md)

Files:

  • src/application/Runtime.ts
Source excerpt: **Status:** Binding **Applies to:** all handwritten and LLM-generated TypeScript and JavaScript in this repository **Enforcement:** ESLint + Semgrep + IRONCLAD M9 + shell policy checks + CI gates **Default outcome for violat...

📄 CodeRabbit inference engine (docs/ANTI_SLUDGE_POLICY.md)

Files:

  • test/type-check/packed-disposable/diagnostics.ts
  • src/application/Runtime.ts
  • test/type-check/packed-disposable/charts.ts
  • test/type-check/packed-disposable/root-dispose.ts
  • test/type-check/packed-disposable/root-close.ts
  • test/type-check/packed-disposable/combined.ts
  • test/type-check/packed-disposable/advanced.ts
  • test/type-check/packed-disposable/testing.ts
Source excerpt: Use `@ts-expect-error` instead, and provide a justification.

📄 CodeRabbit inference engine (docs/ANTI_SLUDGE_POLICY.md)

Files:

  • test/type-check/packed-disposable/diagnostics.ts
  • src/application/Runtime.ts
  • test/type-check/packed-disposable/charts.ts
  • test/type-check/packed-disposable/root-dispose.ts
  • test/type-check/packed-disposable/root-close.ts
  • test/type-check/packed-disposable/combined.ts
  • test/type-check/packed-disposable/advanced.ts
  • test/type-check/packed-disposable/testing.ts
Source excerpt: | Rule | Enforcement | Source | |---|---|---| | `ts-no-like-types` (`*Like` banned in `src/**`) | Semgrep | bundle |

📄 CodeRabbit inference engine (docs/ANTI_SLUDGE_DECISIONS.md)

Files:

  • src/application/Runtime.ts
🪛 LanguageTool
docs/operations/package-payload.md

[grammar] ~11-~11: Use a hyphen to join words.
Context: ...skipLibCheck. The packed consumer check in scripts/check-packed-disposable.sh` ...

(QB_NEW_EN_HYPHEN)

test/evidence/981-disposable-consumer/README.md

[grammar] ~17-~17: Ensure spelling is correct
Context: ...mportsNode stdout and v3/parityv2verify actuallint cleanly. No threshold, skipLibCheck, en...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

@flyingrobots

Copy link
Copy Markdown
Member Author

CodeRabbit current-head feedback reconciliation

Full review5453737345 is COMMENTED at cbf9771, not an approval. Original body and JSON are delivered intact to Reader receipt31c8d775-36ce-4305-9f85-4d2b583d05f3, awaiting filing. It contains 35 LGTM items and three explicitly unverified suggestions, no inline review threads.

Suggestion Assessment Action / evidence
Evidence README joined tokens Accepted documentation readability finding Commit6dc3d72b restores spaces. Before/after non-whitespace equality proves every source word,number,hash and recorded result is preserved.
Operator compound wording/series punctuation Accepted prose clarification Same commit rephrases as a check of the packed consumer and clarifies series punctuation; behavior unchanged.
Missing declaration check does not run / diagnostic enhancement Disputed functional premise; optional redundant diagnostic declined scripts/check-packed-disposable.sh:22-25 already uses if ! grep -q; missing file returns2, executes the failure branch, prints PACKED_DISPOSABLE_EMISSION FAIL and sets failed1. Grep also names the missing file on stderr. No missing-file success or suppressed failure is demonstrated.

Exact current head6dc3d72bb651790c3fa12641d06ac3b9136ec8da changes only these two Markdown documents. Independent final-head addendum and fresh real pre-push/hosted gates are required and in progress. Prior cbf approval/results remain separately pinned. No behavior regression test is fabricated for prose edits.

@flyingrobots

Copy link
Copy Markdown
Member Author

Final documentation remediation review: PR #992 / issue #981

Exact reviewed head: 6dc3d72bb651790c3fa12641d06ac3b9136ec8da, direct parent cbf97712730171852a0ddb9fdbd6ef35d1c82dfa, targeting main at 795d32ae8d02b1929a42b5cb4df4b1f200205c69. The source worktree was read-only and clean at this head. The separately shared review clone was neither accessed nor changed.

APPROVE for this exact documentation head. No demonstrated P0–P5 defect remains. This is independent source/evidence review approval; it does not represent the new head's in-progress required validation or hosted CI as complete and does not authorize merge.

Narrow change and CodeRabbit disposition

The complete parent-to-head diff contains exactly two files: docs/operations/package-payload.md and test/evidence/981-disposable-consumer/README.md, nine inserted and nine deleted lines. An exhaustive diff excluding those two paths is empty. There is one ordinary commit and no new merge.

The evidence README has exact non-whitespace character equality before and after the edit. All figures, version/commit identifiers, SHA-256 hashes, phase names, receipt identifiers, failure qualifications and meanings are unchanged; only token separators improve. Old README SHA-256 was d579b8dcf4b259575d4717b5b865bb88e771732cebaeac21337a35fafee4824c; new SHA-256 is fd41ed07a036a859a40c6c1eb330bbd43a9fa7dc810c007666e9c514f38ed07c. README is not one of the 21 manifest-bound raw records, so this readability edit does not alter or invalidate a raw-evidence manifest record.

The operator paragraph at line 11 replaces “packed consumer check” with “check of the packed consumer” and adds the series comma. It retains the exact library/strict-consumer behavior, script reference, five public entrypoints, disposal typing and installed Docker lifecycle coverage. It claims neither permanent CI wiring nor a new runtime/compiler requirement.

I read CodeRabbit review 5453737345 in full (raw JSON SHA-256 761d3d6d1fe7a75cf8f9f23ab8fcffa86b8303b2c17d3c83c12541bde48439e0). It is COMMENTED on cbf, not APPROVED, and presents all three suggestions as unverified. Its scope is the 45-file cbf delta, with 38 selected files and seven gzip files excluded by its filter. The bot's exclusion is not a gap in the independent reviews, which inspected those raw gzip payloads. Its three dispositions are:

Suggestion Independently verified disposition
Joined README tokens make prose and hashes hard to read/copy Valid readability concern; fixed. Full non-whitespace equality proves the change preserves all substantive text and evidence values.
Compound-modifier wording and missing series comma in operator prose Clarified without changing the claim. Rephrasing removes the disputed compound-modifier construction; the comma is added. No particular hyphen spelling is required by repository policy.
Add an explicit existence message to emission check Optional diagnostic refinement, not a demonstrated failure. scripts/check-packed-disposable.sh:22 uses if ! grep -q ... Runtime.d.ts; a missing file's nonzero grep status, including status 2, enters that branch. Lines 23–24 print PACKED_DISPOSABLE_EMISSION FAIL and set failed=1. Grep's stderr names the missing declaration path. Line 29 returns the failure even if every compiler/lifecycle check passes. The condition does not silently succeed or bypass the check. No script change or redundant test is required to resolve this suggestion.

No new actionable defect or unresolved requirement was found in this narrow change. The bot text was treated as evidence, not executed instructions.

Complete exact-head Verification Checklist

1. Identity, exhaustive preservation and review custody

  • Verified full head, direct parent and merge-base: merge-base with main equals 795d32ae8d02b1929a42b5cb4df4b1f200205c69. Current full PR delta remains 45 files/871 insertions/zero deletions.
  • Exhaustive parent-to-head exclusion comparison proves every tracked source, test, fixture, configuration, package/lock, schema, CHANGELOG, manifest, raw receipt/log and other file outside the two prose files is byte-identical to cbf. This is whole-tree proof, not a selection of production files.
  • git diff --check cbf HEAD passes. The only mutation by this reviewer is this external report; no author worktree edit, commit, ref/checkout action, install, container, agent, Reader operation or GitHub publication was performed.
  • Immutable prior reports re-hashed without rewriting: codex-992-main-review/feedback.md, 20,644 bytes, SHA-256 46e8c530db2af811de4c4456391956b59fcd1cfa5d6615edd207e8d8b276e802; feedback-addendum.md, 19,864 bytes, SHA-256 2f01cdb06bc52a03a859a596eb95dc02a5fb2bd252383b8ea85871f9e843b85b.
  • Every source path, merge audit, numeric/hash scope, standard, SSJS item, failure/cancellation qualification and receipt classification in those complete checklists is explicitly carried forward to 6dc because all its inputs are unchanged. The sole changed README text has been independently proven semantically/arithmetically unchanged; the operator sentence has been read and verified against the same driver. Historical review SHAs and execution coordinates remain historical.

2. Public production paths, declarations and lifecycle

Carried-forward current path Verified coordinates and invariant
Root close/direct dispose package.json root types export → index.ts:13 → Runtime.ts:1, :176, :180. The preserved narrow library dependency owns the existing public Symbol.asyncDispose declaration; no executable method changes.
Root plus advanced / independent expert paths Combined root/advanced fixture; advanced.ts:9–35, diagnostics.ts:35, charts.ts:9. All supported exports and transitive declarations are unchanged.
Testing transitive Runtime testing.ts:17 → RuntimeHarness.ts:1, :16 → Runtime. Harness close/dispose and root/advanced/testing/diagnostics/charts fixtures remain the actual installed consumer paths.
Emission and private closure Unchanged publish config → PrunePrivateDeclarations.ts:9 roots all five entrypoints, fails before pruning on diagnostics and keeps the reachable closure; packed driver :22 verifies installed Runtime's reference. Private storage declarations remain outside the public API.
Shared close/error state Runtime.ts:176 → RuntimeActivity.ts:40, :49, :66 → GitStorage.ts:24 / WarpStorage.ts:18. Same idempotent close promise, admitted-work drain, closed refusal and preservation of storage/cleanup failures.
Open, harness cleanup and cancellation Runtime.ts:89–106; RuntimeHarness.ts:76–84; RuntimeLaneAdapter.ts:193, :227, :278; settlement via RuntimeStrandLaneBinding.ts:38–44. Existing open failure, primary-plus-cleanup aggregate, stream-finally lease release and held-work semantics are unchanged.
Public observed-write admission RuntimeLaneAdapter.ts:76 → activity.run → TimelineRuntime.ts:39 → WriteRuntime.ts:94, :130 → WarpWorldline.ts:159 → RuntimeHost.ts:663 → PatchController.ts:196. Awaited observation/lowering/publication remains inside admitted activity, so close/dispose waits for it.
Head capture/iterator cleanup PatchBuilder.ts:230, :254 → captureObservedWriteBasis.ts:21, :46, :73 → CborPatchJournalAdapter.ts:179, :203. Immutable own predecessor stays pinned; first-frame history capture closes its iterator in finally; native history preserves graph/writer/linear-parent/payload identity refusal.
Observation construction/context/clock ObservedWriterHead.ts:19, :34; ObservedWriteFrontier.ts:10, :33; ObservedWriteBasis.ts:13, :24. Validated immutable custody, safe inspected-clock floor and copied membership context stay separate from arbitrary Lamport-to-counter substitutions.
Removal/draft/mutation guards PatchBuilder.ts:231, :244, :254, :267, :279, :447; BoundedNodeRemovalBasis.ts:45; PatchController.ts:206. Cached/draft basis selection, removal-specific limits, iterator cleanup, mutation checks and committing/patch-in-progress finally resets remain unchanged.
Durable observation, decode and sync PatchBuilder.ts:426, :451 → PatchCommitter.ts:58, :141 → CborPatchJournalAdapter.ts:84, :115, :310; ObservedWriteFrontierDecoder.ts:8, PatchHydrationAdapter.ts:14, Patch.ts:155, :191, syncPatchLoader.ts:56. Observation is part of the same admitted Patch/bundle/single writer CAS; legacy omission and graph/type/clock refusals remain intact.
Public refusal/configuration/CLI WriteRuntime.ts:102, :146, :271; PatchController.ts:103, :348; typed InvalidWriteObservationError/MissingWriterConfigurationError; unchanged CLI ordinary/cleanup/completion/output/signal reporting. No swallowed success, raw metadata disclosure or new fallback capability requirement is introduced by prose edits.
  • All eight consumer compiler configurations remain actual installed-package/no-alias strict ES2022/NodeNext, ES2022/DOM/DOM.Iterable, types: [], exact optional properties, unchecked indexed access and skipLibCheck: false; explicit narrow-library control remains separate. No broad ESNext override, unsupported older compiler guarantee, engine increase or zero-ambient-effect claim is introduced.
  • Installed lifecycle fixture still checks close promise identity, repeated disposal, concurrent close/dispose, E_RUNTIME_CLOSED and harness finally cleanup. Raw earlier 8/3 passes are pinned to their measured phase/head, not rerun here.

3. All merges and incoming invariant audits carried forward

4. Every changed figure, hash scope and evidence qualification

  • README non-whitespace equality preserves all numeric claims and identifiers, not merely selected numbers. The previously checked RED 746177/3257290/971 payload, GREEN 746269/3257406/971 payload, 760000/3300000/1050 caps, TypeScript 5.9.3, 8 compiler/3 lifecycle counts, resource peaks/limits and parity SHA-256 values remain exactly unchanged.
  • All 21 Make async disposal declarations usable by ES2022 consumers #981 manifest-bound payloads, seven gzip archive identities and original/public normalization scopes are untouched. The broader previously checked 393 own/inherited manifest records and additional 279 Advance new writer Lamports beyond the observed Lane frontier #957 records are untouched. No repeated broad scan was needed because exhaustive tree parity establishes identical inputs.
  • Baseline RED, failed missing-rg emission run, ignored-fixture lint warning, console/no-undef parity refusal and final clean GREEN/parity phases retain their explicit historical meanings. Comment-normalized JavaScript parity remains an inspected raw-oracle result, not a newly executed docs-head comparison.
  • Fresh cbf disposable-main-981-v2 8/3 witness, exact 24,104,960-byte source archive, receipt hashes, zero guard/PID/OOM events and payload 755853/3295613/993 with margins 4147/4387/57 remain pinned cbf measurements. They are not silently reidentified as 6dc runs.
  • cbf broad unit result now independently inspected as terminal exit 0/null guard: top-level 305 + 1045 + 910 + 3152 + 2138 + 1268 = 8818 passed, two existing skips. The embedded one-pass/one-skip runner probe is excluded. All nine cbf static invocations have terminal success. This supersedes only the prior addendum's in-progress status for cbf; it does not prove new-head chain completion.
  • Retained raw receipt files and their declared build/data/log/CPU/memory/PID/time/free-space limits are byte-identical. No repository guard or execution configuration changes in this commit. Build remains monitored, not a filesystem quota; no physical power-loss or universal resource/performance guarantee is inferred.
  • Operator paragraph's five public entrypoints matches the export map and unchanged eight-case driver; the added comma introduces no measured figure. Existing historical package-payload tables remain source-pinned history, not current headroom.

5. Repository standards and remaining validation

  • Root AGENTS and all three binding TypeScript policy inputs are unchanged. The no-sludge/hexagonal/runtime-truth/constructor/port/error/ambient-state rules and original green SSJS checklist remain applicable. A two-file prose correction introduces no new TypeScript concept or runtime refactor, so no new runtime coverage obligation is fabricated.
  • No source threshold, quarantine, testing isolation, guard, golden fixture, compiler setting, engine floor, declaration export or runtime state-machine behavior changes. Corrected paragraphs remain one physical line each, with ordinary Markdown structure and no machine-local host paths.
  • Full CodeRabbit raw review was inspected; comments are not approval, filtered gzip files were covered independently, and the optional missing-file message is source-qualified above. No additional actionable finding remains from the available review.
  • New 6dc real pre-push is ongoing. No unfinished new-head chain, unit count or hosted check is credited as a pass. Parent must finish required validation and exact remote-head/protection reconciliation before merge consideration.

Executed and inspected boundaries

Executed here: read-only Git identity/status/parent/merge-base/diff/whole-tree exclusion/whitespace checks; complete two-file diff and corrected-prose reads; non-whitespace equality and README/prior-report SHA-256 recomputation; raw CodeRabbit JSON inspection; raw cbf terminal unit/static receipt reconciliation. Wrote only this external feedback document.

Inspected only, carried with byte parity: complete prior source/declaration/lifecycle/merge/invariant/numeric/evidence checklists and their raw receipt scopes. No tests, builds, benchmarks, containers, installs, agents, shared review clone, author edits, ref operations, Reader actions or GitHub publication were used by this reviewer. The new head's real pre-push and hosted readiness remain separate gates.

No mandatory scoped review area is incomplete. This exact documentation candidate is approved; approval does not transfer to a later source/head change.

APPROVE

@flyingrobots

Copy link
Copy Markdown
Member Author

Code Lawyer Activity Summary — exact head 6dc3d72bb651790c3fa12641d06ac3b9136ec8da

Item Source / severity Files / commit Validation Outcome
Missing narrow standard-library declaration Issue981 / correctness Runtime.ts:1, fa9 retained at6dc Baseline strict installed RED; final eight ES2022/DOM/types[]/skipLibCheck=false compiler cases and three installed close/dispose lifecycle cases pass Fixed; executable Runtime unchanged
Current-main integration Independent source audit b5,c40,cbf merge boundaries Both parents and every incoming path inspected; audit/CAS/checkpoint/CLI/observed-write code and changelog entries preserved Verified
README joined tokens and operator punctuation CodeRabbit / prose Two Markdown files,6dc3d72b Whole README non-whitespace equality preserves every word/number/hash; operator claim preserved Fixed
Missing declaration diagnostic suggestion CodeRabbit / optional,disputed premise check-packed-disposable.sh:22-29 Existing !grep handles missing-file status2, prints path+emission failure,setfailed1, returns failure Functional premise rejected with source evidence; redundant diagnostic declined
Independent gate Authorized separate Codex Exact6dc3d72b Complete final applicable Verification Checklist APPROVE, whole-tree source/evidence preservation and full bot feedback reconciliation Pass
Local required gates Real guarded Docker pre-push Exact6dc3d72b Nine static tasks and8818 project tests,two existing skips; nested fixture summary excluded Pass
Required hosted gates Exact6dc3d72b Run37750308290 plus links37750308429 All seven protected contexts successful Pass
Payload boundary Fresh packed current-main witness cbf unchanged source/package inputs 755853 compressed/3295613 unpacked/993 entries under unchanged760000/3300000/1050 limits; eight installed compile and three lifecycle cases Pass in pinned scope

Full CodeRabbit COMMENTED review5453737345 and all three suggestions are preserved intact in Reader31c8d775-36ce-4305-9f85-4d2b583d05f3. Original/current-main/final-docs Codex reports are separately preserved and posted in full; final receiptce482417-8567-4bec-bb4a-2f0197339088 is delivered intact,awaiting filing. No COMMENTED review or quota refusal is called approval. No active changes-requested review or unresolved actionable thread remains. Final connections/head/protection recheck accompanies the merge.

Limits: parent executed Docker checks; reviewers inspected evidence. Narrow library introduces its real ambient declarations without a runtime polyfill or broad ESNext override. Only TypeScript5.9.3 was measured; no older compiler guarantee is invented. JavaScript parity normalizes only the new reference comment. Packed driver is a manual witness; permanent CI wiring is not claimed. Monitored build storage is not a filesystem quota. No assertion,cap,engine,failure meaning or protection was weakened.

MERGE GATE: OPEN. Main includes the required prerequisites; exact currenthead includes current main and all required contexts pass. Currenthead independent approval is effective and all feedback is fixed or explicitly adjudicated. Normal mainline merging is already authorized; match the checked head without bypass.

@flyingrobots
flyingrobots merged commit 0cb4d4f into main Oct 8, 2026
22 checks passed
@flyingrobots
flyingrobots deleted the fix/981-disposable-types branch October 8, 2026 08:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make async disposal declarations usable by ES2022 consumers

1 participant