Record reviewed private syntax text producer evidence and limits
This commit is contained in:
@@ -666,3 +666,24 @@ producer timing and an owner retaining the accepted bundle. Original expression
|
||||
counts alone do not bound an arbitrary faulty output. Logical auxiliary usage
|
||||
continues to exclude the established model/serde/validator and allocator domains;
|
||||
no process-wide memory guarantee follows from this private milestone.
|
||||
|
||||
## 2026-09-25 — reserve named syntax text at its producer
|
||||
|
||||
The [text producer contract](analysis-text-producer-contract-20260925.md) selects
|
||||
a separate private route bound to actual carried authority. Reserve raw quoted
|
||||
payload P before the existing decoder, then transfer decoded D and release P-D.
|
||||
This avoids a duplicate decoder while deliberately allowing conservative
|
||||
escaped-input refusal on the new route. Preserve legacy/phase-only diagnostics.
|
||||
Count simultaneous key/reference copies and all consumed UUID spellings; drop
|
||||
temporary strings before refund. Borrow the ordinary declaration-kind word.
|
||||
Keep small scalar state, transfer retained text once into the resolver ledger,
|
||||
and independently reconcile it against the existing syntax inventory.
|
||||
|
||||
The [verified Windows packet](experiments/analysis-text-producer-20260925/README.md)
|
||||
records six new passes, unchanged prior outcomes, initial lint repair and the
|
||||
single framework-hint difference in one inherited failure log. Preserve the
|
||||
original checker refusal and narrow named-byte amendment instead of weakening
|
||||
general comparison. Compiler prologue observations and existing stack controls
|
||||
bound evidence only; this adds no universal heap or stack guarantee.
|
||||
Entry/metadata growth timing and the remaining scratch inventory require their
|
||||
own explicit decision before actual emitted-output acceptance can be enabled.
|
||||
|
||||
@@ -57,6 +57,23 @@ preserved. [Packaged GUI evidence](reviews/prerelease37-native-gui-20260924.md),
|
||||
their bounded reviewed scopes. State label congestion, explicit transition-form
|
||||
Cancel and the preserved launcher refusals remain described in final validation.
|
||||
|
||||
## Local private text-producer checkpoint — 2026-09-25
|
||||
|
||||
Source **97a8703adc75467a7f8e75f5c6cb00ca542b707c** on
|
||||
`codex/analysis-text-producers-956atf-20260925` adds the separate private
|
||||
[syntax text producer route](analysis-text-producer-contract-20260925.md).
|
||||
Its [source-bound Windows evidence](experiments/analysis-text-producer-20260925/README.md)
|
||||
passes six new cases and strict core Clippy. Full library remains failed at
|
||||
259 passed /16 inherited failed; all269 prior outcomes and all ten stack controls
|
||||
are preserved. Format remains the same inherited failure. Failure output is
|
||||
15 exact blocks plus one precisely documented missing framework hint.
|
||||
|
||||
This source and evidence are local-only: Gitea rejected publication for server
|
||||
disk exhaustion. The last confirmed remote evidence commit is `b2ef3f54`;
|
||||
emission source `8d52dab9` is published separately. This checkpoint does not
|
||||
change the integrated preview. Entry producers, remaining scratch and actual
|
||||
output verification/accepted ownership are still incomplete.
|
||||
|
||||
## Earlier local contribution checkpoint and evidence
|
||||
|
||||
Branch `codex/behavior-authoring-20260910`, published as `codex/release1-956atf`.
|
||||
|
||||
@@ -57,3 +57,8 @@ Read the parent's CONTRACT-DRAFT.md and the implementer's reported lifecycle cla
|
||||
One scope sentence should be corrected before acceptance: grouping **numeric reconstruction** with “separate open domains” suggests new unresolved text-accounting work that the selected metric never required. State instead that internal Exact numeric reconstruction/formatting and BigInt storage remain controlled by the existing numeric policy and excluded from this logical syntax-text inventory, with work charges unchanged. That exclusion must not extend to retained AST String/Word/Reference text or copied syntax names merely because they occur near numeric parsing. Traversal/coordination and entry-timing limitations can remain the separately open domains.
|
||||
|
||||
The E146/145 and escaped fixture491/490 counts above assume the declaration-kind word is irrelevant (these are project-only sources), all named UUID Strings drop/refund on success, and the existing complete syntax inventory remains unchanged. They do not depend on the proposed implementation's output. T45 should remain a generous-cap reconciliation example, not an asserted projected-copy threshold. No draft approval should imply final PendingRename verification or a blanket parser-allocation guarantee.
|
||||
|
||||
Pre-execution coordinate correction: the exact 78-byte E document's UUID quoted
|
||||
token is 34..72 and its ordinary diagnostic is 34..35. The earlier 33..71 /
|
||||
33..34 in this review was a source-character-count typo. Literal-only readback
|
||||
and the authored test use 34 correctly; the 146/145 storage caps are unchanged.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
*.md -text
|
||||
*.py -text
|
||||
*.txt -text
|
||||
*.json -text
|
||||
@@ -0,0 +1,34 @@
|
||||
# Preserved strict readback refusal and narrow evidence amendment
|
||||
|
||||
The first final97a8703 readback ran `inspect_runtime.py` SHA-256 `bdf2bb33dd54916440b8dfde1b8bd38d61d3975d8c760deeccf1c92eb562c8d3` with arguments `97a8703adc75467a7f8e75f5c6cb00ca542b707c 97a8703 6`. It stopped at line190:
|
||||
|
||||
```text
|
||||
assert old_blocks == new_blocks, 'Failure bodies differ beyond thread PID'
|
||||
AssertionError: Failure bodies differ beyond thread PID
|
||||
```
|
||||
|
||||
No successful readback JSON was created by that attempt. Exact original helper bytes are preserved as `inspect_runtime_strict_original.py`. This is a real comparison refusal, not a source/test failure; it is not erased by the later scoped checker amendment.
|
||||
|
||||
Only `language::nesting_tests::checked_in_example_supports_cross_file_reparent_without_changing_allocations` differs. The old8d52dab full log SHA is `1a31c94c3f0a0b6157be381118ee6a9d708b3241c545c8d7f99bc3de94d78871` (independently hashed raw file, also bound by the baseline archive). The final97a8703 raw full log SHA is `7cd8ac2de3b641e0421f48196be255c6b79706049e814e9f62ca2936794f8f71`.
|
||||
|
||||
After numeric thread-PID replacement only, the old block SHA is `cd6ec346dde1f43b82ca244a8b56754d209cf8108693caed8bb00a1a8ef32e1e`; the new block SHA is `d074bcb3e4edbd2622b3cf1a0ed4cac1aa752f9761cb5ffc526540aed4fb1c04`. The sole removed byte sequence is exactly this LF-terminated line:
|
||||
|
||||
```text
|
||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||
```
|
||||
|
||||
Old block, with numeric PID replaced:
|
||||
|
||||
```text
|
||||
|
||||
thread 'language::nesting_tests::checked_in_example_supports_cross_file_reparent_without_changing_allocations' (<PID>) panicked at crates\oa-core\src\language_nesting_tests.rs:502:69:
|
||||
called `Result::unwrap()` on an `Err` value: [SourceDiagnostic { path: "project.arcadia", diagnostic: Diagnostic { severity: Error, code: "invalid_source", object_id: None, field: None, line: 1, column: 9, message: "Unsupported schema version: expected arcadia 3, 4, 5, 6 or 7.", span: Span { start: 8, end: 9 } }, related: [] }]
|
||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||
|
||||
```
|
||||
|
||||
The new block is exactly the above block minus that one hint line, including identical surrounding LF bytes. No location, diagnostic, panic message or whitespace changes are permitted. Initial6b0ef99 full log SHA `80f3ada1357adcbe213a43c60ae0aea62e8f5aaa900c3177c8c01ea96b341c17` has exactly the same single changed block and the same normalized new-block SHA; its other15 blocks are also exact after PID replacement.
|
||||
|
||||
Parent explicitly selected a narrowly documented exception. Updated checker requires exactly this one changed named block, exact old/new block hashes, one old hint occurrence, no new hint occurrence, and exact equality after removing that one old line. It does not broadly normalize framework output. Result reports15 PID-only identical blocks plus1 documented delta; all269 prior outcomes must still be unchanged.
|
||||
|
||||
The new successful catch_unwind refund test may consume a process-once Rust backtrace hint before the first inherited failure; this is an inference, not an independently observed causal trace. No source/test changes or runtime reruns were made to obtain matching text.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Independent package readback
|
||||
|
||||
2026-09-25. PASS after one documentation correction; no unresolved package discrepancy. Source/artifact readback completed against `97a8703adc75467a7f8e75f5c6cb00ca542b707c` before releasing the worktree for subsequent work. This is local-only evidence, not publication or release acceptance.
|
||||
|
||||
Verified `evidence.zip`: **66 unique members, 606,451 bytes**, SHA256 `252ea94e7c7f500a2afb3d0fa47c43a051f39d9c844328337289eea0c463becd`. CRC passes; member names are relative and contain no parent traversal; every member length/hash and the complete name set match `manifest.json` (SHA256 `f85e85306916440ca17b096404a7ed2b16309cac8f85336fb91171fff6e761b2`). All 64 file members match original local records; both patches exactly match immutable Git diffs from `8d52dab97c92cc31baae9f20d8c324b55818aa5d` to initial `6b0ef99eca6f82a93e2cfc9eb16185c4f12403a7` and final source. All nine readable mirrors match both archive and original files. Baseline records also match the pinned emission ZIP, SHA256 `8d46b31379d75567b195b639cb3bc289ad1c9d26df53d29dbfd99ba22e38c5b9`.
|
||||
|
||||
Independently checked both candidates' complete **556 declared inputs** against scoped Git tree membership and immutable blobs; final inputs also match raw disk bytes. Final HEAD and clean tracked source were confirmed. All gate receipt/log/input/launcher hashes reconcile, and the README's five readable command argument arrays match actual receipts. Both candidates contain six new focused passes, 275 listed names, and full **259 passed / 16 failed**. All 269 previous outcomes and ten existing stack controls retain their results. Initial strict Clippy exits 101 with the documented lint; final strict all-target Clippy exits 0. Both format logs remain byte-identical to the predecessor, SHA256 `c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d`.
|
||||
|
||||
Failure-body comparison independently confirms **15 blocks identical after numeric thread-identifier normalization**, plus exactly the single named missing backtrace-hint line in both initial and final logs. Its normalized old/new hashes and surrounding bytes match CHECKER-NOTE. The archived checker amendment allows only that named, hashed delta; the original stricter checker is preserved. The successful-caught-panic explanation remains an inference. This is neither 16 identical bodies nor a passing full suite.
|
||||
|
||||
The actual final executable was read without execution: **42,614,784 bytes**, SHA256 `41da1a4d788e2bd7392e69a724b7de259752d9f813ae6b42eadf580ec682a54a`, matching focused/full/list receipts. No current-byte verification of the overwritten initial artifact is claimed. Diagnostic helper hashes and source/artifact identities reconcile. Recorded prologues confirm the selected +1,136-byte total, unchanged 2,520/11,720-byte binding/prefix reservations, and the distinct 56-byte test shim. These are partial compiler reservations, not total live stack or headroom. Post-freeze predecessor observations belong to this archive; predecessor extra-process repetitions are not current-source runs.
|
||||
|
||||
The archived source review is SHA256 `61d93dab9307c105b5eaefcc7d01d71149c5321fc3a9baa10047824e28408dc1`; test review `75b02f2392b85943590380bd647b292341e45efe9aa2e16011efc4b1dd14ba66`; literal oracle `8387fc13f4cd6b98491b80a5ac1849d9617b915f5557874de80fbfce0ebd326a`. The E offset erratum preserves the original error and correct token34..72/diagnostic34..35 without test changes. Readable README hash at inspection: `3b69a888241059ae11ef8086881c6dc143fd4cdcf95b4b526c3427236065da3c`.
|
||||
|
||||
One finding was corrected by the parent: DECISIONS initially placed independent reconciliation before resolver text transfer. It now correctly describes transferring retained text once into the ledger and independently reconciling the inventory. Correction read back; no archive change was needed. README/STATE/DECISIONS preserve the private prerequisite, local-only/server-disk-full publication status, inherited failures, ordinary-harness scope of new tests, and pending producer/output-acceptance obligations. All 100 inspected relative local Markdown targets resolve. No remote publication was independently checked or claimed.
|
||||
|
||||
Audit used read-only Git, file inspection, hashing and independent in-memory Python assertions. No archived helper, compiler, test/product executable, debugger or network operation was run. ZIP, manifest, mirrors, gate records and source were not modified; this report is outside the archive. Parent owns documentation integration and publication.
|
||||
@@ -0,0 +1,93 @@
|
||||
# Private syntax text producers — Windows evidence
|
||||
|
||||
Tested source: `97a8703adc75467a7f8e75f5c6cb00ca542b707c`, local branch
|
||||
`codex/analysis-text-producers-956atf-20260925`, based on published
|
||||
`8d52dab97c92cc31baae9f20d8c324b55818aa5d`. Source and this packet are **local-only**
|
||||
at this checkpoint. Gitea accepts reads/comments but rejected Git publication
|
||||
with `No space left on device`; remote evidence remains at `b2ef3f54`.
|
||||
This is a private prerequisite, not integrated application or release acceptance.
|
||||
|
||||
The [contract](../../analysis-text-producer-contract-20260925.md) reserves
|
||||
retained syntax strings and named decode/scanner/consumed-UUID temporaries before
|
||||
creation against actual carried storage. Raw JSON payload P is reserved before
|
||||
decode, then refunded to decoded D. This deliberately permits conservative
|
||||
escaped-input refusal only on the new fixture route. Successful syntax has no
|
||||
outstanding named temporary; resolution independently reconciles retained text
|
||||
and transfers carried storage once. Legacy and carried-phase behavior remain.
|
||||
|
||||
The [archive](evidence.zip) is **606,451 bytes**, **66 members**, SHA256
|
||||
`252ea94e7c7f500a2afb3d0fa47c43a051f39d9c844328337289eea0c463becd`.
|
||||
[manifest.json](manifest.json) pins every raw member. It contains initial/final
|
||||
receipts, logs, declared inputs, captured launchers, predecessor logs, source
|
||||
patches, contract/design, compiler prologue observations and nine exact review
|
||||
mirrors. The executable is identified by receipts but is not included. Historical
|
||||
absolute builder paths identify the original environment, not peer dependencies.
|
||||
|
||||
## Actual results and reproduction
|
||||
|
||||
Windows x86_64 gnullvm, Rust/Cargo 1.98.1, LLVM-MinGW 20260908; one Cargo job,
|
||||
`CARGO_INCREMENTAL=0`. Linux/WSL builds and checks remain deferred. From the
|
||||
identified source checkout with its locked dependencies and toolchain:
|
||||
|
||||
```text
|
||||
cargo test --locked --offline -p oa-core --lib text_producer -- --test-threads=1
|
||||
cargo test --locked --offline -p oa-core --lib -- --test-threads=1
|
||||
cargo test --locked --offline -p oa-core --lib -- --list
|
||||
cargo clippy --locked --offline -p oa-core --all-targets -- -D warnings
|
||||
cargo fmt --all -- --check
|
||||
```
|
||||
|
||||
Exact executed argument arrays, environment and raw return codes are retained in
|
||||
`gates/*.result.json` and their captured launcher inside the archive; those
|
||||
records govern any differences from these readable commands.
|
||||
|
||||
| Gate | Observed result |
|
||||
| --- | --- |
|
||||
| Six new focused tests | Passed; 269 prior names filtered |
|
||||
| Full core library | **Failed: 259 passed / 16 failed**, 275 unique names |
|
||||
| Prior outcomes | All 269 unchanged; all ten existing stack controls pass |
|
||||
| Strict core all-target Clippy | Passed |
|
||||
| Workspace format | **Failed**, identical inherited eight blocks in five files |
|
||||
|
||||
All 556 declared inputs match Git blobs and raw disk across final gates. The
|
||||
focused/full/list executable is 42,614,784 bytes, SHA256
|
||||
`41da1a4d788e2bd7392e69a724b7de259752d9f813ae6b42eadf580ec682a54a`.
|
||||
This is recorded-input/artifact concordance, not independent compiler provenance.
|
||||
|
||||
Fifteen inherited failure blocks match after numeric thread-PID normalization.
|
||||
One named block lacks exactly the old Rust backtrace-hint line; all its remaining
|
||||
bytes match. The [checker note](CHECKER-NOTE.md) preserves the original strict
|
||||
comparison refusal and exact, narrowly pinned amendment. The cause involving a
|
||||
successful caught panic is an inference. Do not summarize this as 16 identical
|
||||
failure bodies or a passing full suite.
|
||||
|
||||
Initial `6b0ef99eca6f82a93e2cfc9eb16185c4f12403a7` already passed six focused
|
||||
tests and completed the same full outcomes, but strict Clippy rejected
|
||||
`unnecessary_unwrap`. Final source uses direct `if let`; tests and expectations
|
||||
are unchanged. Initial receipts and patches remain archived. Its executable was
|
||||
overwritten by the final build; the review does not claim current readback of it.
|
||||
|
||||
## Independent checks and limits
|
||||
|
||||
- [Source review](SOURCE-REVIEW.md), [test review](TEST-REVIEW.md) and
|
||||
[finite literal oracle](TEXT-PRODUCER-ORACLE.md) cover actual-owner caps,
|
||||
Unicode/escaped strings, scanner timing, all three consumed UUID paths,
|
||||
nested/projected copies, multi-file accumulation and once-only transfer.
|
||||
The original E offset error remains explicitly superseded: token34..72,
|
||||
ordinary diagnostic34..35; the test was already correct.
|
||||
- [Runtime review](RUNTIME-REVIEW.md), [readback JSON](TEXT-PRODUCER-RUNTIME-READBACK.json)
|
||||
and [reviewed checker](inspect_runtime.py) bind raw logs, baseline archive,
|
||||
names, inputs and final artifact. The [original checker](inspect_runtime_strict_original.py)
|
||||
preserves the stricter comparison that refused the single log delta.
|
||||
- [Stack observations](STACK-OBSERVATIONS.md) record selected prologue increases
|
||||
totaling1,136 bytes relative to8d52dab. The repaired binding/prefix reservations
|
||||
remain2,520/11,720 bytes; these observations are not total headroom. New text
|
||||
cases use the ordinary harness stack, not a new128KiB guarantee. Older setup
|
||||
failures and predecessor repetitions keep their original scopes.
|
||||
|
||||
The named logical String inventory excludes decoder internals, numeric scratch
|
||||
under its existing policy, model/validator allocations and allocator overhead.
|
||||
Entry/metadata producer timing, remaining traversal/duplicate-name scratch,
|
||||
actual emitted-output verification, complete desired-Project equality and an
|
||||
owning accepted-result transition remain open. No public source8, save/history,
|
||||
GUI behavior or release change is established by this packet.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Independent text-producer runtime evidence review
|
||||
|
||||
Disposition: final source `97a8703adc75467a7f8e75f5c6cb00ca542b707c` satisfies the bounded regression comparison, with the explicitly documented single framework-hint difference below. This is not a wholly passing suite: full core tests retain 16 failures, and workspace format retains exit 1. No Cargo, test executable, debugger, archived evaluator, or network operation was run during this review.
|
||||
|
||||
## Reproducible readback
|
||||
|
||||
Ran the reviewed local helper using bundled Python with `-I -B`, arguments `97a8703adc75467a7f8e75f5c6cb00ca542b707c 97a8703 6`. Current `inspect_runtime.py` SHA256 is `ea4d783dc2d791b4b6f8dae105620fbd216d49b859af3123957d22d7de1ca2d5`. Its exclusive result `TEXT-PRODUCER-RUNTIME-READBACK.json` SHA256 is `2e15ae1800b4d01cb9f854f362a23a2d25fcabd8d77f39c0ce2001c717d535ed`. It completed with exit 0.
|
||||
|
||||
The original stricter checker SHA256 `bdf2bb33dd54916440b8dfde1b8bd38d61d3975d8c760deeccf1c92eb562c8d3` is preserved unchanged as `inspect_runtime_strict_original.py`. Its genuine refusal and the precise amendment are retained in `CHECKER-NOTE.md`; no source or test was changed to satisfy this comparison.
|
||||
|
||||
The baseline is source `8d52dab97c92cc31baae9f20d8c324b55818aa5d`. Baseline full/list/fmt logs and receipts match the local committed emission evidence ZIP byte-for-byte, archive SHA256 `8d46b31379d75567b195b639cb3bc289ad1c9d26df53d29dbfd99ba22e38c5b9`. This review does not claim remote publication of that archive.
|
||||
|
||||
## Actual final gates and identity
|
||||
|
||||
| Gate | Exit | Actual result |
|
||||
| --- | ---: | --- |
|
||||
| focused | 0 | Six new text-producer tests passed; 269 filtered |
|
||||
| full | 101 | 259 passed, 16 failed, zero ignored; 275 unique results |
|
||||
| list | 0 | 275 unique names, exactly the full runtime set |
|
||||
| strict core all-target Clippy | 0 | Completed `-D warnings` |
|
||||
| workspace format | 1 | Exact baseline raw output retained |
|
||||
|
||||
All 269 predecessor outcomes are unchanged. The focused set is exactly the six new full/list names, all passed. All ten stack-named tests in the final full log passed. There is no inference of additional fresh-process repetitions for this source.
|
||||
|
||||
All five gate receipts bind clean current Git HEAD, the same 556 declared input paths and raw bytes (compared against actual Git blobs and current disk), unchanged input hashes after each run, and the same captured launcher. Input manifest SHA256 is `907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a`; captured launcher SHA256 is `bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a`. The launcher was read, not executed: it records unfiltered merged process stdout/stderr and the actual return code, checks declared source bytes before/after, captures exact helper bytes, and derives executable paths from Cargo output. Final commands are locked/offline core library focused/full/list, locked/offline core all-target strict Clippy, and workspace format check. Single-job, nonincremental environment matches the baseline; stack-size and lifecycle overrides are absent.
|
||||
|
||||
Focused/full/list bind the same actual current executable: 42,614,784 bytes, SHA256 `41da1a4d788e2bd7392e69a724b7de259752d9f813ae6b42eadf580ec682a54a`. The checker reread its bytes. This establishes recorded-input/artifact concordance, not independent compiler provenance or completeness of undeclared/untracked dependencies.
|
||||
|
||||
Final full raw SHA256: `7cd8ac2de3b641e0421f48196be255c6b79706049e814e9f62ca2936794f8f71`. Final format raw SHA256: `c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d`. Exact per-gate raw/receipt hashes are in the readback JSON.
|
||||
|
||||
## Failure bodies: 15 exact plus one documented delta
|
||||
|
||||
After replacing only numeric thread PIDs, 15 inherited failure bodies are byte-identical. The remaining named block is `language::nesting_tests::checked_in_example_supports_cross_file_reparent_without_changing_allocations`. It lacks exactly one predecessor LF-terminated line: ``note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace``. Its panic site, error payload, diagnostic location and all remaining whitespace/bytes are unchanged. The amended checker requires this precise changed name, exactly one removed line, and the exact old/new normalized block hashes; it does not normalize other framework text.
|
||||
|
||||
Old normalized block SHA256: `cd6ec346dde1f43b82ca244a8b56754d209cf8108693caed8bb00a1a8ef32e1e`. New normalized block SHA256: `d074bcb3e4edbd2622b3cf1a0ed4cac1aa752f9761cb5ffc526540aed4fb1c04`. Initial6b0ef99 has this same delta and the other 15 exact blocks. A successful caught refund panic consuming Rust's process-once hint is plausible but remains an inference, not a traced cause. Do not summarize this evidence as 16 byte-identical failure bodies.
|
||||
|
||||
## Preserved initial candidate and stack limits
|
||||
|
||||
Initial `6b0ef99eca6f82a93e2cfc9eb16185c4f12403a7` passed the same six focused tests and completed full 259/16 and listing 275. Its Clippy exit 101 is preserved: `clippy::unnecessary_unwrap` at `language.rs:1227:25`, from checking `is_some()` then `expect()`. Initial Clippy raw SHA256 is `c4e70ff7795cc37041e5a4ae1b4028ec63530bc9917a00ef0dc25389b34d0564`; initial full raw SHA256 is `80f3ada1357adcbe213a43c60ae0aea62e8f5aaa900c3177c8c01ea96b341c17`. The successor diff is only the direct `if let Some(mixed)` rewrite and implementation-note update. Test bytes remain SHA256 `7b484b7356c48944ce3d1b1fc0e057b79bcfc643a2387978288de4305b381f20`. No lint allowance or test expectation changed.
|
||||
|
||||
Reviewed recorded initial/final stack and active-frame observations: selected reservations match between6b and97. Relative to8d, parse_impl increases512 bytes, Parser::unit208, accepted96, indexed64, worker256. Preserved binding2520 plus prefix11720 gives14240 bytes of those two selected reservations; continuation13416 is an alternative phase and must not be added to prefix. These are compiler prologue observations, not total runtime stack/headroom or arbitrary-input guarantees. Prior extra process rechecks and earlier parse/setup failures retain their original source/scope; none is relabeled as a run or repair of this checkpoint.
|
||||
|
||||
This accepts only the existing finite text-producer tests and the specified regression evidence. It does not establish all-heap accounting, a public production constructor, accepted rename output, GUI behavior, or runtime behavior outside these recorded gates.
|
||||
@@ -0,0 +1,76 @@
|
||||
# Independent syntax text producer source review
|
||||
|
||||
2026-09-25. No concrete semantic blocker found in the frozen production draft against baseline `8d52dab97c92cc31baae9f20d8c324b55818aa5d`. Selected contract: `harness/analysis-text-producer-contract-20260925.md`, SHA256 `932a44001502bcbb83807d6830956086a4b55c08fda718bf2e938c19bc6c166f`. This is local-only, pre-compilation source review; tests were still being authored. No build, runtime, formatting, publication or final acceptance is claimed.
|
||||
|
||||
Paths below are relative to `crates/oa-core/src/` in `.local/as3batch`.
|
||||
|
||||
| Frozen file | SHA256 |
|
||||
| --- | --- |
|
||||
| `language.rs` | `e46a59993e9bc806f30a24bcd762d9ced92636d9c36cf185d9624af129899f9b` |
|
||||
| `language/raw_tokens.rs` | `179e177311f753312f3e0966354d7b5e7b23a1f8a045f4e07a33582d0467229c` |
|
||||
| `language/analysis_source/budget.rs` | `95191dd05669ad6c8e1b47a31876510f626c8435cb7459312fe3688a0d0e17f5` |
|
||||
| `language/analysis_source/cursor.rs` | `d45b0dc319d4aa073b3fd2d49359cf9ca6964d215c32c6f98f19f291eaa697b4` |
|
||||
| `language/analysis_source/declarations.rs` | `ad0b73a900a9d4c37662a7bd8b954bb362f13ce739a62498e18fbafc30011f2f` |
|
||||
| `language/analysis_source/lex.rs` | `3409b361316a77974439b359f6784ef530998e68b7310feefe029d84ebc30328` |
|
||||
| `language/analysis_source/mixed.rs` | `dae92efc827b238f9b7cabbce39d26d0b5839274a0340136112ec5c47c5cd02b` |
|
||||
| `language/analysis_source/mixed/carried.rs` | `88e9e374eda416eb3dfd110edab8d60c9d26692f8eed66983f6445c10f2bffab` |
|
||||
| `language/analysis_source/mixed/project/accounting.rs` | `145ca6bb8b5f8b8e0d87cfe2cf074d11973c62f274a774c07ca04ac7e70a865b` |
|
||||
|
||||
## Authority, modes and arithmetic
|
||||
|
||||
`carried.rs:93` consumes the existing sealed input, deriving bundle, exact policy and guard together. Only this fixture route selects stronger text mode; existing carried and ordinary entry points pass false. `mixed.rs:294` derives C.text from the guard and enables scalar Budget state before scanning. Explicit borrowed C=0 remains stronger mode. No production retained-output constructor, mutable policy reset, extraction or accepted-output authority is added.
|
||||
|
||||
`budget.rs:83` checks every component of C+T+W+delta before changing totals. Because all components are nonnegative and the whole addition is checked, the subsequent individual counter increments cannot overflow. Refusal leaves counters unchanged; releases use checked subtraction. These methods do not alter source-byte/token/entry/reference/numeric Usage. Existing profile ceilings, phase entry checks and resolver's single C seed are retained.
|
||||
|
||||
Quoted decoding (`budget.rs:109`) reserves raw payload P before the one existing decoder. Successful D<=P transfers into provisional owned text through checked T+D and W-P calculations, with no allocation or fallible reservation between the counter updates. The prior admitted aggregate proves both operations valid; P-D is no longer counted. Successful UUID/local-key consumers later drop their provisional owned strings before refunding them. Temporary W thus represents scanner/decode reservations; final T represents only surviving inventory.
|
||||
|
||||
## Producers and lifetimes
|
||||
|
||||
The shared scanner discovers closing extent, reserves P, performs serde validation once, then drops the temporary Result<String> at the end of the `is_ok()` statement before the Released hook (`raw_tokens.rs:143–148`). The method borrows its receiver; statement-end temporary destruction supplies the required ordering. Closed malformed text can be refused before validation only in stronger mode; unclosed tokens never decode. The lexer propagates refusal immediately and does not expose its local scanner. The unchanged Iterator uses an infallible no-op hook over the same scan body; legacy token classification and malformed-token precedence are preserved by inspection.
|
||||
|
||||
Typed names/references reserve before `to_owned` (`cursor.rs:77`), preserving existing name validation and reference-work ordering. Typed and ordinary quoted fields route through the shared Budget decoder. All three successful UUID spelling consumers explicitly drop before release: ordinary optional identity (`language.rs:1263–1265`), ordinary HistoricalUuid (`:1382–1384`), and typed identity (`declarations.rs:429–431`). Invalid cases abort without a surviving syntax witness; they need no successful-owner refund traversal.
|
||||
|
||||
Ordinary identifiers, field keys and Word values reserve before copying. Declaration-kind text now borrows the same source slice (`language.rs:1643`), preserving lookup/error order. Top-level fields reserve the clone and retain both key allocations in fields and field_spans. Nested fields reserve clone overlap, then drop/refund the local original (`:1288–1301`). Duplicate-field rejection and duplicate-description guards remain in place; no successful nonempty overwrite is hidden.
|
||||
|
||||
Projection (`language.rs:1062–1105`) recursively preserves the established traversal and positions, reserving each key/reference immediately before its clone. Previously constructed child projection values remain charged while later parent keys are copied. Quoted AST payloads are not cloned into Atom projection; HistoricalUuid copies only Id. Across files, the single Budget retains earlier-file T during later scanner/grammar/projection work. Include traversal and duplicate-name coordination copies remain excluded domains as selected by the contract.
|
||||
|
||||
## Independent reconciliation and pending evidence
|
||||
|
||||
The table incorporates three parent-requested pre-compilation refinements, independently read back: quoted transfer now uses direct checked counter updates instead of release/re-reserve; the scanner comment correctly describes statement-end temporary destruction; the lexer callback explicitly fixes its Error type. These are not runtime repairs. Remaining production files match their initial frozen hashes.
|
||||
|
||||
Successful syntax asserts W=0. Resolution's existing ledger starts with C once (`mixed/project.rs:445`); accounting transfers known T once (`accounting.rs:244–253`). The original complete inventory walk remains independent, adding checked String lengths to a separate scalar instead of reserving T again. Its bounded work frontier and lower-node/argument/reference counting remain intact. A mismatch is an error, never a corrective subtraction. When producer mode is absent, the old progressive text reservations remain unchanged.
|
||||
|
||||
Parent gates must still establish compilation, all independent peak/refusal oracles, complete Project/Usage parity, legacy malformed-token behavior, exact prior phase caps, full inherited outcomes and strict Clippy. Adding Option<ProducerText> enlarges Budget; the shared scanner/projection helpers also change native call layout. Existing 128 KiB controls and actual relevant prologues must be checked without enlarged workers. The separate post-emission baseline frame observations belong to this forthcoming packet, not the already frozen emission archive.
|
||||
|
||||
This review covers logical retained syntax String lengths and named temporary results only. It makes no guarantee for decoder internals, Exact/BigInt allocation, allocator capacity/RSS, other scratch, entry/metadata producer timing, or universal native stack safety. No source edits or compiler/runtime tools were used by this reviewer.
|
||||
|
||||
## Final formatting and fixture-observer supplement
|
||||
|
||||
Read back the parent's final targeted formatting and two disclosed fixture-only additions. No new source blocker. The shared producer/scanner/projection/accounting operations remain as reviewed above; earlier line references refer to the pre-format snapshot. `carried.rs` wires `#[cfg(test)] mod text_producer`. New `project.rs::text_producer_inventory` accepts only immutable ParsedMixedSyntax, initializes a fresh local Ledger from that witness's actual carried guard, invokes the existing accounting::syntax walk, and returns scalar Slots. It neither mutates the witness/Budget nor installs, consumes or fabricates an accepted owner. It can check the inventory of semantically unresolvable syntax; that must not be described as successful model resolution. This test observer does not change production's once-only C/T transfer.
|
||||
|
||||
Final production hashes supersede the initial table for the compile candidate (paths retain the same prefix):
|
||||
|
||||
| File | SHA256 |
|
||||
| --- | --- |
|
||||
| `language.rs` | `ad353193df7884e327229b2e0a0c3f6b5e46ed32588ed81d3228d315807b2323` |
|
||||
| `language/raw_tokens.rs` | `c6c4d390406d50c41a81262b5f642dfd3f19c51741c0a624032cfce24f4e7223` |
|
||||
| `language/analysis_source/budget.rs` | `12a925068207445441b2499c885c05b2477d7e27ebb9730de2e560ef9d0c725f` |
|
||||
| `language/analysis_source/cursor.rs` | `d45b0dc319d4aa073b3fd2d49359cf9ca6964d215c32c6f98f19f291eaa697b4` |
|
||||
| `language/analysis_source/declarations.rs` | `ad0b73a900a9d4c37662a7bd8b954bb362f13ce739a62498e18fbafc30011f2f` |
|
||||
| `language/analysis_source/lex.rs` | `668c71cd8789b6c92980fd18b584999078d64c2b8a9927c5c22877cb591c55f1` |
|
||||
| `language/analysis_source/mixed.rs` | `2e43116cfee79d144735e1f7f4f2b0736e03f43146d1dc6a3edbfa4309168ae3` |
|
||||
| `language/analysis_source/mixed/carried.rs` | `c1df3847f2fbc935ecab2207cbac7b20e9a055c6858d3ae5506b20dee9b44989` |
|
||||
| `language/analysis_source/mixed/project/accounting.rs` | `20590ce1bd5c4166fb2475820686228ef84a17b2fda5dc9d43c128063f46a35e` |
|
||||
| `language/analysis_source/mixed/project.rs` | `8d28de967b3cc3ae4b680e13ed07a661b1d1fb133d21b85c3b4a0b9127266a61` |
|
||||
|
||||
Bound ancillary files: new `language/analysis_source/mixed/carried/text_producer.rs` SHA256 `7b484b7356c48944ce3d1b1fc0e057b79bcfc643a2387978288de4305b381f20`; worktree `harness/analysis-text-producer-implementation-20260925.md` SHA256 `06b3d4c06f2788584a148472e36e25f0187ece111ddcbf7aed018a7b3a9425a0`. These two hashes record the delivered candidate, not an independent test-oracle review. Compilation, runtime, frame measurements and publication remain pending/separately owned.
|
||||
|
||||
## Committed Clippy repair supplement
|
||||
|
||||
Independently inspected `6b0ef99eca6f82a93e2cfc9eb16185c4f12403a7` to `97a8703adc75467a7f8e75f5c6cb00ca542b707c`; final HEAD matches the latter and the worktree is clean. Only `language.rs` and the implementation note change. No source blocker.
|
||||
|
||||
The cfg(test) ordinary quoted consumer now reads the current token span before directly matching `&mut self.mixed` with if-let, replacing is_some/as_mut/expect. Span lookup is read-only; token-class rejection still precedes it. The selected raw source slice, one quoted_text call, error propagation, subsequent cursor increment and nonmixed decoder fallback are identical. The nonmixed test path performs one additional read-only span lookup; non-test builds remove both new cfg(test) statements. No text reservation/refund, limits, test or owner operation changes.
|
||||
|
||||
Superseding SHA256 bindings: `crates/oa-core/src/language.rs` = `8b5ee7a70ac1536d92b75f244e4d0b28e1371b0afd254e42b7775e9bdc73ae5d`; `harness/analysis-text-producer-implementation-20260925.md` = `02c4c15a5f74e344a299f81cde976a87c94a640b7035a7f2bcde51e71011f5c9`. All other nine production hashes in the final table above were rechecked and remain exact.
|
||||
|
||||
The parent reports six focused passes, a completed 259/16 full run and passing existing stack controls for the initial candidate, with strict Clippy failing on unnecessary unwrap. The note preserves that initial failure and requires successor gates. This narrow review did not rerun or independently audit those runtime records and does not transfer runtime acceptance to the successor. Final gates and publication remain separately owned; source publication is currently blocked by the reported server disk-full condition.
|
||||
@@ -0,0 +1,48 @@
|
||||
# Text producer native frame observations
|
||||
|
||||
Source `97a8703adc75467a7f8e75f5c6cb00ca542b707c`, Windows gnullvm debug
|
||||
test artifact 42,614,784 bytes, SHA256
|
||||
`41da1a4d788e2bd7392e69a724b7de259752d9f813ae6b42eadf580ec682a54a`.
|
||||
The six new tests pass. The complete 275-name library run finishes with
|
||||
259 passed and 16 inherited failed, including all ten stack-named controls
|
||||
passing. No old test or stack allowance was changed. The new text-mode cases
|
||||
run on the ordinary harness stack; they do not establish a separate 128 KiB
|
||||
stronger-mode guarantee.
|
||||
|
||||
Read-only llvm-nm/llvm-objdump helpers bind their observations to the focused
|
||||
receipt's exact artifact. Before rebuilding, the same helpers captured the
|
||||
8d52dab artifact, SHA256
|
||||
`29d8a4761fd8f09a3c0eafeb11cca07f0d45c711bf1b969d97c8b29d2b3ab446`.
|
||||
These prior wrapper observations were recorded after the emission evidence ZIP
|
||||
was frozen; they belong to this packet, not its predecessor's 65 members.
|
||||
|
||||
| Selected prologue reservation | 8d52dab | 97a8703 | Change |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| parse_impl | 11,048 | 11,560 | +512 |
|
||||
| Parser::unit | 11,864 | 12,072 | +208 |
|
||||
| accepted test helper | 1,432 | 1,528 | +96 |
|
||||
| indexed test helper | 1,496 | 1,560 | +64 |
|
||||
| ordinary-index worker closure | 6,920 | 7,176 | +256 |
|
||||
|
||||
These selected reservations increase by 1,136 bytes in total. The 56-byte
|
||||
same-named test shim is distinct from the actual worker. parse_with_profile
|
||||
(200), parse (280), State::parse_typed (6,952), declarations::parse (22,664),
|
||||
binding (2,520), prefix (11,720), continuation (13,416), Exact::parse_decimal
|
||||
(2,296), parse_literal (952), Budget::exact (632) and Cursor::exact_literal
|
||||
(776) remain unchanged in the captured prologues. Prefix and continuation are
|
||||
mutually exclusive and must not be summed as simultaneously active helpers.
|
||||
|
||||
The initial6b0ef99 artifact (42,615,808 bytes, SHA256
|
||||
`d3f8f24775f81fd822c01ca887524de9bd80b06de8b3bff8dff550cd3b8d98a6`)
|
||||
has its own preserved observations. Every selected reservation in that candidate
|
||||
matches the final97a8703 one. Its strict Clippy failure was corrected by direct
|
||||
if-let matching; initial passing runtime results are not substituted for the
|
||||
final rebuilt source's separately recorded tests.
|
||||
|
||||
This is a finite compiler-output comparison, not a complete measured live stack,
|
||||
remaining headroom or a guarantee across inputs/platforms/process layouts. It
|
||||
retains the earlier parser split while exposing the cost of added scalar Budget
|
||||
state. The old overflow control passes in this actual full run; the predecessor's
|
||||
three extra process rechecks are not relabeled as runs of this source. No new
|
||||
debugger session, stack override, allocator wrapper or retry-to-pass was used.
|
||||
The separate historical full-pipeline setup observation remains unrerun.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Independent text-producer test review
|
||||
|
||||
Disposition: no concrete precompile test/oracle blocker found. Reviewed six test functions in `crates/oa-core/src/language/analysis_source/mixed/carried/text_producer.rs` after parent targeted formatting, SHA-256 `7b484b7356c48944ce3d1b1fc0e057b79bcfc643a2387978288de4305b381f20`. Implementation preformat handoff hash was `bbf1aad2f2b9e68804a5e95864620ac2ab78059221b11b7390ef4244e681d0d6`; the reviewed identity is the former. No Cargo/parser/test executable was run and no source/test edits were made by this reviewer. Production-source correctness remains separately assigned.
|
||||
|
||||
Compared actual tests with accepted text-producer contract and TEXT-PRODUCER-ORACLE.md. The producer fixtures are literal source strings; expected counts/model fields are not obtained by emitting or parsing a desired output. Six functions are selected through their text_producer module path.
|
||||
|
||||
## Real cap and inventory cases
|
||||
|
||||
- Empty E146/145 and escaped project491/490 use the same real owner, inherited entry/byte caps and parser/resolve path. Positives compare complete literal Project and final C+T; prior syntax work remains unchanged after resolve. The explicit phase-only112 control preserves the earlier route and proves it does not accidentally enable producer accounting.
|
||||
- Multi-file358/357 has actual C253, finalT45 and expected source205/rawtokens31/entries3. It checks final Slots(25,0,298), complete literal Project and part.arcadia error location. The separate lexer-only replay initializes arithmetic C253/T33 and reaches scanner refusal without grammar; its comment correctly disclaims real-owner provenance. It therefore supplements rather than mislabels the complete-source fixture's error location as unique scanner proof.
|
||||
- Projection304/303 correctly uses the40-character description fixture: finalT83, earlier UUID46 and preprojection72. The cap-minus-one failure targets the final projected key, not an earlier identity. Independent accounting wrapper confirms retained text304 at success. This test does not claim complete model admission at that cap.
|
||||
- Compound453/452 checks finalT49/C383 and the parameter UUID peak70. It covers ordinary optional IDs, typed declaration/parameter identities and historical UUID consumption, nested-key copy/refund, ordinary reference projection and typed reference moves. It explicitly labels arbitrary activity payload syntax-only and never unwraps a full Project for it. The inventory wrapper traverses actual syntax without executing model construction, so this scope is appropriate.
|
||||
|
||||
The helper `project::text_producer_inventory` seeds the actual guard C and calls the real bounded accounting walk. It does not synthesize expected syntax or Project. Literal totals49/83 remain the independent oracle; equality between production counters alone is not their only assertion.
|
||||
|
||||
## Scanner, compatibility and arithmetic
|
||||
|
||||
Raw JSON examples cover empty/ASCII/raw UTF-8, escaped backslash, LF, BMP escape, supplementary surrogate pair, invalid escape and lone surrogates. The scanner observer records Reserve then Released for successful tokens; closed-invalid cases preserve legacy Error classification and a deliberately refused reserve prevents a later release event. Unclosed input has no decoder hook. Arithmetic quoted tests cover P/P-minus-one with explicitly labeled synthetic baseline100, verify decoded D, drop the result then refund, and require no installed text on refused reservation.
|
||||
|
||||
The actual malformed source with120 raw payload bytes and119 extra headroom distinguishes stronger-mode storage refusal from phase-only/legacy invalid-token errors. Complete OA/SA zero-carried tests compare actual Project, warnings, Usage/numeric work and retained Slots with the prior route, and independently reconcile producer text. They use accepted short property words. They are equivalence controls, while E/escaped/multi provide literal whole-Project oracles.
|
||||
|
||||
Duplicate-description fixtures admit the first100-byte description at independently counted108/110 overlap, then require the existing duplicate error before a second grammar decode could consume another100. Scanner validation can independently admit100 before grammar starts; no earlier scan cap preempts these assertions. Arithmetic overflow/refund panic tests are clearly separate from real owner provenance.
|
||||
|
||||
One limit: scanner callback event order alone does not prove the library decoder's internal allocation timing. The corresponding production source must place Reserve before the existing serde call and Released after the result drops; I checked the relevant narrow raw scanner excerpt and it follows that ordering. No claim of internal serde scratch/capacity metering follows.
|
||||
|
||||
## Historical oracle correction
|
||||
|
||||
The earlier PRODUCER-CRITIQUE originally gave empty E UUID33..71 and transported33..34. Literal counting confirms **34..72**, transported **34..35**. The test's34 is correct. This was an independent pre-execution source-offset typo; no runtime failure or implementation change prompted it. Counts/caps are unchanged. An annotated correction was made in that critique and appended to TEXT-PRODUCER-ORACLE.md; escaped quote start200 and the other pinned fixture locations remain unchanged.
|
||||
|
||||
Final independent readback rechecked the actual unchanged test source at SHA256 `7b484b7356c48944ce3d1b1fc0e057b79bcfc643a2387978288de4305b381f20`. Its literal empty E bytes hash to `48fe360b7b5f57867086e7f6fa47c2913765c1261e558e7ebec688a1f842a65e` (78 bytes). Byte33 is a space; opening/closing quotes are bytes34/71, so34..72 and the existing test's34..35 diagnostic are correct. The source diagnostic function consumes the single UTF-8 character at the transported start. This confirms the documented erratum without code changes, parser execution or compiler use; the reports are ready for packaging.
|
||||
|
||||
## Ready for parent gates
|
||||
|
||||
Prepared readback checker delta was reviewed separately and remains unrun: updated baseline269 names/253pass16fail, intended text_producer filter and local committed archive pin retain the previous strict source/log/receipt/artifact checks. Its archive is not described as remotely published while server recovery is pending.
|
||||
|
||||
Parent compilation, six focused tests, unchanged full-library disposition, listing, strict core all-target Clippy, format comparison and stack controls remain necessary. This source review neither establishes those outcomes nor expands the prerequisite to accepted output, universal parser-before-growth accounting or arbitrary stack guarantees.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Independent text-producer fixture oracle
|
||||
|
||||
Source basis8d52dab97c92cc31baae9f20d8c324b55818aa5d and accepted text-producer contract. Expectations below are authored from literal grammar/ownership, not new implementation outputs. No Cargo or parser execution. A small standalone data calculation checked only UTF-8 lengths and literal substring offsets.
|
||||
|
||||
Notation: `id1`, `id2`, `id3` are `00000000-0000-0000-0000-000000000001` etc. `doc(body,name)` is exactly `arcadia 8;\nproject p "NAME" id "ID1" {\nBODY\n}\n`. Default name is `Project`. Single-file entry/key is `main.arcadia`, adding24 owned path/entry bytes. Every cap below uses generous other limits unless stated. No numeric-zero mode shortcut is permitted.
|
||||
|
||||
## Reused controls
|
||||
|
||||
The independently reviewed empty E has source78,Ctext102,T8, scanner peak36 and grammar peak44 (alias1+name7+UUID36). Owned complete text146/145 isolates the grammar UUID reservation; entries17 suffice through resolver. Existing phase-only cap112 remains unchanged.
|
||||
|
||||
Pre-execution offset correction: the earlier PRODUCER-CRITIQUE originally stated UUID33..71/diagnostic33..34. That was a literal source-counting typo, not runtime evidence. The actual78-byte E has the quoted UUID at **34..72**, yielding ordinary diagnostic **34..35**; the new test correctly uses34. The critique now carries an annotated correction. E storage counts/peaks were unaffected. Escaped-description quoted start200 remains correct.
|
||||
|
||||
Final independent byte readback confirms this erratum directly from the test's `doc` format literal with empty body and name `Project`, without invoking Rust or the parser. The resulting 78 bytes have SHA256 `48fe360b7b5f57867086e7f6fa47c2913765c1261e558e7ebec688a1f842a65e`: byte33 is the space after `id`, byte34 the opening quote, and byte71 the closing quote. The half-open token is therefore34..72. Existing ordinary diagnostic transport keeps start34 and extends through its one-byte quote to35. The historical33..71/33..34 statement remains recorded above as superseded evidence.
|
||||
|
||||
The escaped project-only fixture has twenty source `\u0061` escapes in both project display name and description. Source326,Ctext350,T41, scanner120, grammar name121/UUID57/description141. Complete owned text491/490, entries21. These retain the prior independently authored source and arithmetic; do not rederive them from parser return values.
|
||||
|
||||
## Multi-file retained text overlapping scanner validation
|
||||
|
||||
Exact bundle:
|
||||
|
||||
```text
|
||||
entry = main.arcadia
|
||||
main.arcadia = doc("include \"part.arcadia\";", "aaaaaaaaaaaaaaaaaaaa")
|
||||
part.arcadia = "include \"\u006c\u0061\u0073\u0074\u002e\u0061\u0072\u0063\u0061\u0064\u0069\u0061\";\r\n"
|
||||
last.arcadia = "//é\r\n"
|
||||
```
|
||||
|
||||
In part, the twelve backslash-u sequences are literal source escape bytes, not already decoded characters. They decode to `last.arcadia`. In last, é is actual U+00E9. Source lengths114,85,6 total205; map-key bytes36 plus entry12 give C=(3,0,253).
|
||||
|
||||
Entry grammar retains project alias1 + display name20 + include path12 =T33. Its highest temporary overlap is project UUID:1+20+36=57; entry scanner peak36. When part is scanned, T33 from main remains live and P72 for the escaped include requires **105**. Part grammar then requires the same105, and transfers only D12, leaving T45. The final comment-only file adds no T/W. No declarations or projected values exist.
|
||||
|
||||
Therefore complete owned **bytes358/357**, entries29, is a real cap pair. Cap357 refuses at part scanner validation before grammar; cap358 clears all text phases, including later catalog maximum C+T+2=300. Scanner observer/phase evidence is needed to distinguish scanner rejection from the later identical grammar threshold: the public error alone has the same quoted-token location. Part quoted token is8..82; ordinary parser-style transport from offset8 is8..9. Pin whichever documented shared scanner transport the implementation uses, but require source path part.arcadia and start8; do not relabel a grammar refusal as scanner admission proof.
|
||||
|
||||
U3/M19 and original scanner events31 are unchanged from the simple include-chain structure: main13 significant/24raw, part3significant/5raw, last0significant/2raw. Owned final syntax entries25, resolver entry peak29. Final resolved text **298**, zero lower occurrences, expected Project name20 `a`, description empty, all model maps empty; canonical files last/main/part, traversal main/part/last. C is retained once, scanner temporary does not accumulate, and scanning part must not discard prior T33.
|
||||
|
||||
## Projection-copy-dominant activity
|
||||
|
||||
Exact body: `oa_activity a "A" id "ID2" { description "dddddddddddddddddddddddddddddddddddddddd"; }` with40 ASCII d characters; use default doc and main.arcadia.
|
||||
|
||||
Source197,C=(1,0,221). Final T is header8 + activity alias/name2 + field_spans key11 + AST key11 + literal40 + projected key11 = **83**. Before projection the final retained subtotal is72. Earlier maximums: scanner40; project UUID44; activity UUID46; field parse alias/name/header10+initial key11+literal40=61; retaining the second field key gives72. Last projected key adds11 and reaches83. No Atom literal text is copied by projection.
|
||||
|
||||
Thus owned **bytes304/303** is a syntax-positive/negative pair that reaches the intended later producer instead of UUID. With cap303 the final key reservation must fail at main description field start137; its full authored field span is137..192. A diagnostic transported through ordinary Error offset has137..138; the prior resolver text walk restores137..192. Do not equate those two transport APIs without an explicit implementation decision. Use roomy entry limits so projection slot accounting cannot preempt it.
|
||||
|
||||
At304 syntax succeeds with T83/W0. Do not assert complete resolution at304: catalogs introduce further live text and validation may add warnings. Use a separately generous complete-resolution control if needed. The original two-byte-é description has finalT45 but activity UUID peak46, so C+44 is not a valid new-mode projected-copy oracle.
|
||||
|
||||
## Small inventory fixture for all three UUID consumers, nested-key overlap and references
|
||||
|
||||
Use default doc of these two lines:
|
||||
|
||||
```text
|
||||
oa_activity a "A" id "ID2" { payload { ref @p; old uuid "ID1"; }; }
|
||||
calculation c "C" id "ID3" { input x id "ID1" : Number; result Number; body $x; }
|
||||
```
|
||||
|
||||
This is deliberately **syntax-only**: payload is an arbitrary parsed ordinary field, not asserted to be a valid final activity field. Do not unwrap full Project admission or cite it as accepted model evidence. It exercises real parser/projection storage; use the independent syntax text reconciliation seam, or distinguish the later model rejection from text accounting.
|
||||
|
||||
Exact source359,C=(1,0,383). Independent final inventory:
|
||||
|
||||
| Retained family | Bytes |
|
||||
|---|---:|
|
||||
| Project alias/name |8|
|
||||
| Activity alias/name |2|
|
||||
| Two top-level payload keys |14|
|
||||
| AST nested keys ref/old |6|
|
||||
| AST reference p |1|
|
||||
| Projected payload/ref/old keys |13|
|
||||
| Projected reference p |1|
|
||||
| Typed c/C, input x, expression reference x |4|
|
||||
| Total T |49|
|
||||
|
||||
All five consumed36-byte UUID spellings contribute zero to finalT: project/activity optional IDs, historical UUID, calculation identity and parameter identity. Static Number spellings do not allocate reference text. Excluded typed duplicate-name set clones must not appear in T. Final owned text432, W0.
|
||||
|
||||
Assuming the accepted borrowed declaration-kind word option, grammar peaks follow these literal steps: projectT8; activity names→10; payload local key→17; ref local3 and reference1→21; nested-key clone adds3→24 then local-key drop returns21; old key3→24; historical UUID adds36→60 then drops; old-key clone→27 then refund→24; top-level payload second key→31. Calculation alias/name→33, identity UUID peak69, input name→34, parameter UUID peak**70**, body reference→35. Projection adds payload7→42 then BTree old3→45/ref3→48/reference1→49. Scanner maximum36 is earlier and lower.
|
||||
|
||||
Hence **syntax-only bytes453/452** is an additional real peak pair;452 reaches the parameter UUID reservation, whose quote begins282. If the implementation selects a separately charged owned declaration-kind temporary, revise that explicitly selected W term before using these peaks; finalT49 is unchanged. This is not permission to copy production tallies into the oracle.
|
||||
|
||||
## Test review boundary
|
||||
|
||||
These fixtures separate scanner overlap, transient consumption, final inventory and projection timing rather than assuming one count proves all phases. Full-path positives are provided by E, escaped project and the include chain; the two syntax-only fixtures make their boundary explicit. Tests should compare exact C/T/W/Usage and original source bytes while preserving legacy and phase-only diagnostic timing. Fault-injection overflow/refund tests remain separate from real provenance. Later actual tests still need independent review once the implementer freezes them.
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"baseline": "8d52dab97c92cc31baae9f20d8c324b55818aa5d",
|
||||
"baseline_archive_sha256": "8d46b31379d75567b195b639cb3bc289ad1c9d26df53d29dbfd99ba22e38c5b9",
|
||||
"checker_sha256": "ea4d783dc2d791b4b6f8dae105620fbd216d49b859af3123957d22d7de1ca2d5",
|
||||
"inputs": 556,
|
||||
"unchanged_old_outcomes": 269,
|
||||
"added_passed": 6,
|
||||
"added_names": [
|
||||
"language::analysis_source::mixed::carried::text_producer::duplicate_descriptions_refuse_before_a_second_grammar_decode",
|
||||
"language::analysis_source::mixed::carried::text_producer::exact_real_owner_empty_and_escaped_peaks_reconcile_once",
|
||||
"language::analysis_source::mixed::carried::text_producer::explicit_zero_mode_complete_oa_sa_parity_and_checked_arithmetic",
|
||||
"language::analysis_source::mixed::carried::text_producer::multifile_retained_text_overlaps_scanner_and_preserves_complete_result",
|
||||
"language::analysis_source::mixed::carried::text_producer::projection_and_three_uuid_consumers_reconcile_nested_copy_inventory",
|
||||
"language::analysis_source::mixed::carried::text_producer::raw_bounds_hook_order_refund_and_invalid_legacy_precedence"
|
||||
],
|
||||
"full_passed": 259,
|
||||
"full_failed": 16,
|
||||
"identical_failure_blocks_after_pid_only_normalization": 15,
|
||||
"documented_failure_block_deltas": [
|
||||
{
|
||||
"test": "language::nesting_tests::checked_in_example_supports_cross_file_reparent_without_changing_allocations",
|
||||
"change": "Exactly one old framework backtrace-hint line absent; all other bytes equal after thread PID normalization",
|
||||
"removed_line": "note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n",
|
||||
"old_pid_normalized_sha256": "cd6ec346dde1f43b82ca244a8b56754d209cf8108693caed8bb00a1a8ef32e1e",
|
||||
"new_pid_normalized_sha256": "d074bcb3e4edbd2622b3cf1a0ed4cac1aa752f9761cb5ffc526540aed4fb1c04"
|
||||
}
|
||||
],
|
||||
"identical_fmt_sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d",
|
||||
"artifact": {
|
||||
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\analysis-checked-save-target-20260913\\debug\\deps\\oa_core-416e35542925bed6.exe",
|
||||
"bytes": 42614784,
|
||||
"sha256": "41da1a4d788e2bd7392e69a724b7de259752d9f813ae6b42eadf580ec682a54a"
|
||||
},
|
||||
"environment": {
|
||||
"CARGO_TARGET_DIR": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/analysis-checked-save-target-20260913",
|
||||
"CARGO_BUILD_JOBS": "1",
|
||||
"CARGO_INCREMENTAL": "0",
|
||||
"CARGO_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
|
||||
"RUSTUP_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup",
|
||||
"RUSTFLAGS": null,
|
||||
"RUSTC": null,
|
||||
"RUSTUP_TOOLCHAIN": null,
|
||||
"ARCADIA_CODEC_LIFECYCLE_PHASE": null,
|
||||
"RUST_MIN_STACK": null
|
||||
},
|
||||
"receipts": {
|
||||
"text-producer-focused-97a8703-1": {
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"exit": 0,
|
||||
"outcomes": 6,
|
||||
"listing": 0,
|
||||
"log_sha256": "fa0378ae170724c2dae1bacfae1a4a156734f6877f795667958a21638c8dd4c3",
|
||||
"result_sha256": "6113b2ebb4e6624201ea63777e2f7ae5a6f25b216748fcc194d40a9ced8d535f",
|
||||
"inputs_sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a",
|
||||
"launcher_sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
},
|
||||
"text-producer-full-97a8703-1": {
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"exit": 101,
|
||||
"outcomes": 275,
|
||||
"listing": 0,
|
||||
"log_sha256": "7cd8ac2de3b641e0421f48196be255c6b79706049e814e9f62ca2936794f8f71",
|
||||
"result_sha256": "b6c97b253e29e15ba476f10ffbd544906f54ca66ca5feedbab36ef6b68358ca3",
|
||||
"inputs_sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a",
|
||||
"launcher_sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
},
|
||||
"text-producer-list-97a8703-1": {
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"exit": 0,
|
||||
"outcomes": 0,
|
||||
"listing": 275,
|
||||
"log_sha256": "25845198d079fa9f5eef5a6610816310a264fccec99e93aff0a865e03abbe612",
|
||||
"result_sha256": "fbafa99392bdedda02c91781f3dd5223a91fe5df38b80f88c186d9dd8066e5cc",
|
||||
"inputs_sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a",
|
||||
"launcher_sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
},
|
||||
"text-producer-clippy-97a8703-1": {
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"exit": 0,
|
||||
"outcomes": 0,
|
||||
"listing": 0,
|
||||
"log_sha256": "59b516ea670424aaed3f11986437f21557b7ffc4f10ffde0d998e608f67aa98d",
|
||||
"result_sha256": "92f39ee8affe4edb312d57367e30aac7b200d199be5a01a1ff8d001268e1ce8c",
|
||||
"inputs_sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a",
|
||||
"launcher_sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
},
|
||||
"text-producer-fmt-97a8703-1": {
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"exit": 1,
|
||||
"outcomes": 0,
|
||||
"listing": 0,
|
||||
"log_sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d",
|
||||
"result_sha256": "f5e40697e7ba4305d4b2b800ac4dda0cd04867e739d127c7bc5469bed370c9ff",
|
||||
"inputs_sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a",
|
||||
"launcher_sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
}
|
||||
},
|
||||
"scope": "Committed declared inputs, pinned baseline archive, raw logs and current artifact bytes; no Cargo/executable execution. Launcher semantics require independent source review."
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,215 @@
|
||||
"""Read-only text producer gate reconciliation. Run only after the final five gates.
|
||||
|
||||
Usage: python -I -B inspect_runtime.py FULL_SOURCE_SHA PIN7 EXPECTED_NEW_COUNT
|
||||
Only Git read commands are executed; Cargo, launchers and binaries are never run.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
if sys.flags.optimize:
|
||||
raise SystemExit('Optimized Python forbidden: verification uses assertions')
|
||||
assert len(sys.argv) == 4
|
||||
source, stem, expected_added = sys.argv[1], sys.argv[2], int(sys.argv[3])
|
||||
assert re.fullmatch(r'[0-9a-f]{40}', source)
|
||||
assert stem == source[:7]
|
||||
assert 1 <= expected_added <= 100
|
||||
base = Path(__file__).resolve().parents[2]
|
||||
root = base / '.local/as3batch'
|
||||
directory = base / '.local/analysis-text-producer-gates-20260925'
|
||||
prior = base / '.local/analysis-mixed-emission-gates-20260925'
|
||||
destination = Path(__file__).with_name('TEXT-PRODUCER-RUNTIME-READBACK.json')
|
||||
assert not destination.exists(), 'Preserve prior readback; do not overwrite'
|
||||
BASELINE = '8d52dab97c92cc31baae9f20d8c324b55818aa5d'
|
||||
ARCHIVE_SHA = '8d46b31379d75567b195b639cb3bc289ad1c9d26df53d29dbfd99ba22e38c5b9'
|
||||
sha = lambda raw: hashlib.sha256(raw).hexdigest()
|
||||
|
||||
|
||||
def git(*args):
|
||||
return subprocess.check_output(['git', '--no-replace-objects', *args], cwd=root)
|
||||
|
||||
|
||||
def within(folder, relative):
|
||||
candidate = (folder / relative).resolve()
|
||||
assert candidate.is_relative_to(folder.resolve()), relative
|
||||
return candidate
|
||||
|
||||
|
||||
def receipt(folder, name):
|
||||
raw_receipt = (folder / (name + '.result.json')).read_bytes()
|
||||
data = json.loads(raw_receipt)
|
||||
raw = (folder / (name + '.log')).read_bytes()
|
||||
assert data['log_sha256'] == sha(raw)
|
||||
return data, raw, raw_receipt
|
||||
|
||||
|
||||
def outcomes(raw):
|
||||
rows = re.findall(r'^test ([^\r\n]+) \.\.\. (ok|FAILED|ignored)\r?$', raw.decode(), re.M)
|
||||
assert len(rows) == len(dict(rows)), 'Duplicate runtime name'
|
||||
return rows
|
||||
|
||||
|
||||
def members(raw):
|
||||
names = re.findall(r'^([^\r\n]+): test\r?$', raw.decode(), re.M)
|
||||
assert len(names) == len(set(names)), 'Duplicate listing name'
|
||||
return names
|
||||
|
||||
|
||||
def failure_blocks(raw):
|
||||
# Preserve every byte of block whitespace/body except the numeric thread PID.
|
||||
rows = re.findall(rb'^---- ([^\r\n]+) stdout ----\r?\n(.*?)(?=^---- |^failures:|\Z)',
|
||||
raw, re.M | re.S)
|
||||
assert len(rows) == len(dict(rows)), 'Duplicate failure block'
|
||||
return {name.decode(): re.sub(rb"(?m)^(thread '[^\r\n]*') \(\d+\) panicked",
|
||||
rb'\1 (<PID>) panicked', body) for name, body in rows}
|
||||
|
||||
|
||||
# Anchor baseline local full/list/fmt logs AND receipts to the immutable locally committed ZIP (server publication is blocked).
|
||||
archive_raw = (base / 'harness/experiments/analysis-mixed-emission-20260925/evidence.zip').read_bytes()
|
||||
assert sha(archive_raw) == ARCHIVE_SHA
|
||||
baseline = {}
|
||||
with zipfile.ZipFile(io.BytesIO(archive_raw)) as archive:
|
||||
names = archive.namelist()
|
||||
assert len(names) == len(set(names))
|
||||
for mode in ('full', 'list', 'fmt'):
|
||||
name = f'emission-{mode}-8d52dab-1'
|
||||
data, raw, raw_receipt = receipt(prior, name)
|
||||
assert data['source'] == data['head_after'] == BASELINE
|
||||
for suffix, content in [('.log', raw), ('.result.json', raw_receipt)]:
|
||||
matches = [n for n in names if n == name + suffix or n.endswith('/' + name + suffix)]
|
||||
assert len(matches) == 1, (name, suffix, matches)
|
||||
assert archive.read(matches[0]) == content
|
||||
baseline[mode] = (data, raw)
|
||||
old, old_raw = baseline['full']
|
||||
old_rows = outcomes(old_raw)
|
||||
assert old_rows == [tuple(x) for x in old['outcomes']]
|
||||
assert len(old_rows) == 269 and old['exit'] == 101
|
||||
assert sum(v == 'ok' for _, v in old_rows) == 253
|
||||
assert sum(v == 'FAILED' for _, v in old_rows) == 16
|
||||
old_out = dict(old_rows)
|
||||
old_listing = members(baseline['list'][1])
|
||||
assert old_listing == baseline['list'][0]['listing_members']
|
||||
assert baseline['list'][0]['exit'] == 0 and set(old_listing) == set(old_out)
|
||||
assert baseline['fmt'][0]['exit'] == 1
|
||||
|
||||
assert git('rev-parse', 'HEAD').decode().strip() == source
|
||||
assert not git('status', '--porcelain', '--untracked-files=no').strip()
|
||||
scope = ['Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', '.cargo', 'build', 'crates',
|
||||
'assets', 'docs', 'examples', 'harness/fixtures', 'vendor']
|
||||
paths = git('ls-tree', '-r', '--name-only', source, *scope).decode().splitlines()
|
||||
blobs = subprocess.check_output(['git', '--no-replace-objects', 'cat-file', '--batch'], cwd=root,
|
||||
input=''.join(f'{source}:{p}\n' for p in paths).encode())
|
||||
offset, expected_inputs = 0, []
|
||||
for path in paths:
|
||||
end = blobs.index(b'\n', offset)
|
||||
_, kind, count = blobs[offset:end].split()
|
||||
count = int(count)
|
||||
raw = blobs[end + 1:end + 1 + count]
|
||||
assert kind == b'blob' and within(root, path).read_bytes() == raw, path
|
||||
expected_inputs.append({'path': path, 'bytes': count, 'sha256': sha(raw)})
|
||||
offset = end + count + 2
|
||||
assert offset == len(blobs)
|
||||
|
||||
prefix = ['cargo', 'test', '--locked', '--offline', '-p', 'oa-core', '--lib']
|
||||
commands = {
|
||||
'focused': prefix + ['text_producer', '--', '--test-threads=1'],
|
||||
'full': prefix + ['--', '--test-threads=1'],
|
||||
'list': prefix + ['--', '--list'],
|
||||
'clippy': ['cargo', 'clippy', '--locked', '--offline', '-p', 'oa-core', '--all-targets', '--', '-D', 'warnings'],
|
||||
'fmt': ['cargo', 'fmt', '--all', '--', '--check'],
|
||||
}
|
||||
expected_env = baseline['full'][0]['environment']
|
||||
assert expected_env['CARGO_BUILD_JOBS'] == '1' and expected_env['CARGO_INCREMENTAL'] == '0'
|
||||
for key in ('RUSTFLAGS', 'RUSTC', 'RUSTUP_TOOLCHAIN', 'ARCADIA_CODEC_LIFECYCLE_PHASE', 'RUST_MIN_STACK'):
|
||||
assert expected_env[key] is None
|
||||
verified, all_receipts, raw_logs = {}, {}, {}
|
||||
artifact_identity = launcher_identity = None
|
||||
for mode, command in commands.items():
|
||||
name = f'text-producer-{mode}-{stem}-1'
|
||||
data, raw, receipt_raw = receipt(directory, name)
|
||||
assert data['source'] == data['head_after'] == source
|
||||
assert data['mode'] == mode and data['command'] == command
|
||||
assert data['invocation'] == 'cargo' and data['test_target'] is None
|
||||
assert data['filter'] == ('text_producer' if mode == 'focused' else '')
|
||||
assert not data['changed_inputs'] and not data['verification_failures']
|
||||
assert data['cwd'] == str(root) and data['environment'] == expected_env
|
||||
manifest_raw = within(directory, data['inputs']).read_bytes()
|
||||
assert sha(manifest_raw) == data['inputs_sha256']
|
||||
assert json.loads(manifest_raw) == {'source': source, 'inputs': expected_inputs}
|
||||
launcher = within(directory, data['launcher_copy']).read_bytes()
|
||||
assert sha(launcher) == data['launcher_sha256'] == data['launcher_sha256_after']
|
||||
assert source.encode() in launcher
|
||||
if launcher_identity is None:
|
||||
launcher_identity = sha(launcher)
|
||||
assert sha(launcher) == launcher_identity, 'Unexpected mixed launchers: review explicitly'
|
||||
rows = outcomes(raw)
|
||||
assert rows == [tuple(x) for x in data['outcomes']]
|
||||
listing = members(raw) if mode == 'list' else []
|
||||
assert listing == data['listing_members'] and len(listing) == data['listing_count']
|
||||
if mode in ('focused', 'full'):
|
||||
counts = tuple(sum(v == state for _, v in rows) for state in ('ok', 'FAILED', 'ignored'))
|
||||
summary = re.findall(r'^test result: (ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; 0 measured; (\d+) filtered out;', raw.decode(), re.M)
|
||||
assert len(summary) == 1 and tuple(map(int, summary[0][1:4])) == counts
|
||||
assert summary[0][0] == ('FAILED' if counts[1] else 'ok')
|
||||
assert int(summary[0][4]) == (269 if mode == 'focused' else 0)
|
||||
else:
|
||||
assert not rows
|
||||
assert data['exit'] == {'focused': 0, 'full': 101, 'list': 0, 'clippy': 0, 'fmt': 1}[mode]
|
||||
assert len(data['artifacts']) == (1 if mode in ('focused', 'full', 'list') else 0)
|
||||
for artifact in data['artifacts']:
|
||||
path = Path(artifact['path'])
|
||||
assert path.resolve().is_relative_to(Path(expected_env['CARGO_TARGET_DIR']).resolve())
|
||||
actual = path.read_bytes()
|
||||
assert len(actual) == artifact['bytes'] and sha(actual) == artifact['sha256']
|
||||
assert str(path).replace('\\', '/') in raw.decode().replace('\\', '/')
|
||||
if artifact_identity is None:
|
||||
artifact_identity = artifact
|
||||
assert artifact == artifact_identity, 'Test/list artifact mismatch'
|
||||
all_receipts[mode], raw_logs[mode] = data, raw
|
||||
verified[name] = {'source': source, 'exit': data['exit'], 'outcomes': len(rows),
|
||||
'listing': len(listing), 'log_sha256': sha(raw), 'result_sha256': sha(receipt_raw),
|
||||
'inputs_sha256': sha(manifest_raw), 'launcher_sha256': sha(launcher)}
|
||||
|
||||
new_out = dict(all_receipts['full']['outcomes'])
|
||||
assert len(new_out) == 269 + expected_added
|
||||
assert all(new_out.get(k) == v for k, v in old_out.items())
|
||||
added = set(new_out) - set(old_out)
|
||||
assert len(added) == expected_added
|
||||
assert all(new_out[k] == 'ok' and 'text_producer' in k for k in added)
|
||||
assert set(dict(all_receipts['focused']['outcomes'])) == added
|
||||
assert all(status == 'ok' for _, status in all_receipts['focused']['outcomes'])
|
||||
assert set(all_receipts['list']['listing_members']) == set(new_out)
|
||||
old_blocks, new_blocks = failure_blocks(old_raw), failure_blocks(raw_logs['full'])
|
||||
assert len(old_blocks) == len(new_blocks) == 16
|
||||
assert set(old_blocks) == {k for k, v in old_out.items() if v == 'FAILED'}
|
||||
hint_case = 'language::nesting_tests::checked_in_example_supports_cross_file_reparent_without_changing_allocations'
|
||||
hint_line = b'note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n'
|
||||
changed_blocks = [name for name in old_blocks if old_blocks[name] != new_blocks[name]]
|
||||
assert changed_blocks == [hint_case], 'Only the documented framework-hint delta is permitted'
|
||||
assert old_blocks[hint_case].count(hint_line) == 1
|
||||
assert hint_line not in new_blocks[hint_case]
|
||||
assert old_blocks[hint_case].replace(hint_line, b'', 1) == new_blocks[hint_case]
|
||||
assert sha(old_blocks[hint_case]) == 'cd6ec346dde1f43b82ca244a8b56754d209cf8108693caed8bb00a1a8ef32e1e'
|
||||
assert sha(new_blocks[hint_case]) == 'd074bcb3e4edbd2622b3cf1a0ed4cac1aa752f9761cb5ffc526540aed4fb1c04'
|
||||
assert raw_logs['fmt'] == baseline['fmt'][1]
|
||||
|
||||
result = {'source': source, 'baseline': BASELINE, 'baseline_archive_sha256': ARCHIVE_SHA,
|
||||
'checker_sha256': sha(Path(__file__).read_bytes()), 'inputs': len(expected_inputs),
|
||||
'unchanged_old_outcomes': 269, 'added_passed': expected_added, 'added_names': sorted(added),
|
||||
'full_passed': sum(v == 'ok' for v in new_out.values()), 'full_failed': 16,
|
||||
'identical_failure_blocks_after_pid_only_normalization': 15,
|
||||
'documented_failure_block_deltas': [{'test': hint_case,
|
||||
'change': 'Exactly one old framework backtrace-hint line absent; all other bytes equal after thread PID normalization',
|
||||
'removed_line': hint_line.decode(), 'old_pid_normalized_sha256': sha(old_blocks[hint_case]),
|
||||
'new_pid_normalized_sha256': sha(new_blocks[hint_case])}],
|
||||
'identical_fmt_sha256': sha(raw_logs['fmt']), 'artifact': artifact_identity,
|
||||
'environment': expected_env, 'receipts': verified,
|
||||
'scope': 'Committed declared inputs, pinned baseline archive, raw logs and current artifact bytes; no Cargo/executable execution. Launcher semantics require independent source review.'}
|
||||
with destination.open('x', encoding='utf-8', newline='\n') as stream:
|
||||
stream.write(json.dumps(result, indent=2) + '\n')
|
||||
print(json.dumps(result, indent=2))
|
||||
+203
@@ -0,0 +1,203 @@
|
||||
"""Read-only text producer gate reconciliation. Run only after the final five gates.
|
||||
|
||||
Usage: python -I -B inspect_runtime.py FULL_SOURCE_SHA PIN7 EXPECTED_NEW_COUNT
|
||||
Only Git read commands are executed; Cargo, launchers and binaries are never run.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
if sys.flags.optimize:
|
||||
raise SystemExit('Optimized Python forbidden: verification uses assertions')
|
||||
assert len(sys.argv) == 4
|
||||
source, stem, expected_added = sys.argv[1], sys.argv[2], int(sys.argv[3])
|
||||
assert re.fullmatch(r'[0-9a-f]{40}', source)
|
||||
assert stem == source[:7]
|
||||
assert 1 <= expected_added <= 100
|
||||
base = Path(__file__).resolve().parents[2]
|
||||
root = base / '.local/as3batch'
|
||||
directory = base / '.local/analysis-text-producer-gates-20260925'
|
||||
prior = base / '.local/analysis-mixed-emission-gates-20260925'
|
||||
destination = Path(__file__).with_name('TEXT-PRODUCER-RUNTIME-READBACK.json')
|
||||
assert not destination.exists(), 'Preserve prior readback; do not overwrite'
|
||||
BASELINE = '8d52dab97c92cc31baae9f20d8c324b55818aa5d'
|
||||
ARCHIVE_SHA = '8d46b31379d75567b195b639cb3bc289ad1c9d26df53d29dbfd99ba22e38c5b9'
|
||||
sha = lambda raw: hashlib.sha256(raw).hexdigest()
|
||||
|
||||
|
||||
def git(*args):
|
||||
return subprocess.check_output(['git', '--no-replace-objects', *args], cwd=root)
|
||||
|
||||
|
||||
def within(folder, relative):
|
||||
candidate = (folder / relative).resolve()
|
||||
assert candidate.is_relative_to(folder.resolve()), relative
|
||||
return candidate
|
||||
|
||||
|
||||
def receipt(folder, name):
|
||||
raw_receipt = (folder / (name + '.result.json')).read_bytes()
|
||||
data = json.loads(raw_receipt)
|
||||
raw = (folder / (name + '.log')).read_bytes()
|
||||
assert data['log_sha256'] == sha(raw)
|
||||
return data, raw, raw_receipt
|
||||
|
||||
|
||||
def outcomes(raw):
|
||||
rows = re.findall(r'^test ([^\r\n]+) \.\.\. (ok|FAILED|ignored)\r?$', raw.decode(), re.M)
|
||||
assert len(rows) == len(dict(rows)), 'Duplicate runtime name'
|
||||
return rows
|
||||
|
||||
|
||||
def members(raw):
|
||||
names = re.findall(r'^([^\r\n]+): test\r?$', raw.decode(), re.M)
|
||||
assert len(names) == len(set(names)), 'Duplicate listing name'
|
||||
return names
|
||||
|
||||
|
||||
def failure_blocks(raw):
|
||||
# Preserve every byte of block whitespace/body except the numeric thread PID.
|
||||
rows = re.findall(rb'^---- ([^\r\n]+) stdout ----\r?\n(.*?)(?=^---- |^failures:|\Z)',
|
||||
raw, re.M | re.S)
|
||||
assert len(rows) == len(dict(rows)), 'Duplicate failure block'
|
||||
return {name.decode(): re.sub(rb"(?m)^(thread '[^\r\n]*') \(\d+\) panicked",
|
||||
rb'\1 (<PID>) panicked', body) for name, body in rows}
|
||||
|
||||
|
||||
# Anchor baseline local full/list/fmt logs AND receipts to the immutable locally committed ZIP (server publication is blocked).
|
||||
archive_raw = (base / 'harness/experiments/analysis-mixed-emission-20260925/evidence.zip').read_bytes()
|
||||
assert sha(archive_raw) == ARCHIVE_SHA
|
||||
baseline = {}
|
||||
with zipfile.ZipFile(io.BytesIO(archive_raw)) as archive:
|
||||
names = archive.namelist()
|
||||
assert len(names) == len(set(names))
|
||||
for mode in ('full', 'list', 'fmt'):
|
||||
name = f'emission-{mode}-8d52dab-1'
|
||||
data, raw, raw_receipt = receipt(prior, name)
|
||||
assert data['source'] == data['head_after'] == BASELINE
|
||||
for suffix, content in [('.log', raw), ('.result.json', raw_receipt)]:
|
||||
matches = [n for n in names if n == name + suffix or n.endswith('/' + name + suffix)]
|
||||
assert len(matches) == 1, (name, suffix, matches)
|
||||
assert archive.read(matches[0]) == content
|
||||
baseline[mode] = (data, raw)
|
||||
old, old_raw = baseline['full']
|
||||
old_rows = outcomes(old_raw)
|
||||
assert old_rows == [tuple(x) for x in old['outcomes']]
|
||||
assert len(old_rows) == 269 and old['exit'] == 101
|
||||
assert sum(v == 'ok' for _, v in old_rows) == 253
|
||||
assert sum(v == 'FAILED' for _, v in old_rows) == 16
|
||||
old_out = dict(old_rows)
|
||||
old_listing = members(baseline['list'][1])
|
||||
assert old_listing == baseline['list'][0]['listing_members']
|
||||
assert baseline['list'][0]['exit'] == 0 and set(old_listing) == set(old_out)
|
||||
assert baseline['fmt'][0]['exit'] == 1
|
||||
|
||||
assert git('rev-parse', 'HEAD').decode().strip() == source
|
||||
assert not git('status', '--porcelain', '--untracked-files=no').strip()
|
||||
scope = ['Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', '.cargo', 'build', 'crates',
|
||||
'assets', 'docs', 'examples', 'harness/fixtures', 'vendor']
|
||||
paths = git('ls-tree', '-r', '--name-only', source, *scope).decode().splitlines()
|
||||
blobs = subprocess.check_output(['git', '--no-replace-objects', 'cat-file', '--batch'], cwd=root,
|
||||
input=''.join(f'{source}:{p}\n' for p in paths).encode())
|
||||
offset, expected_inputs = 0, []
|
||||
for path in paths:
|
||||
end = blobs.index(b'\n', offset)
|
||||
_, kind, count = blobs[offset:end].split()
|
||||
count = int(count)
|
||||
raw = blobs[end + 1:end + 1 + count]
|
||||
assert kind == b'blob' and within(root, path).read_bytes() == raw, path
|
||||
expected_inputs.append({'path': path, 'bytes': count, 'sha256': sha(raw)})
|
||||
offset = end + count + 2
|
||||
assert offset == len(blobs)
|
||||
|
||||
prefix = ['cargo', 'test', '--locked', '--offline', '-p', 'oa-core', '--lib']
|
||||
commands = {
|
||||
'focused': prefix + ['text_producer', '--', '--test-threads=1'],
|
||||
'full': prefix + ['--', '--test-threads=1'],
|
||||
'list': prefix + ['--', '--list'],
|
||||
'clippy': ['cargo', 'clippy', '--locked', '--offline', '-p', 'oa-core', '--all-targets', '--', '-D', 'warnings'],
|
||||
'fmt': ['cargo', 'fmt', '--all', '--', '--check'],
|
||||
}
|
||||
expected_env = baseline['full'][0]['environment']
|
||||
assert expected_env['CARGO_BUILD_JOBS'] == '1' and expected_env['CARGO_INCREMENTAL'] == '0'
|
||||
for key in ('RUSTFLAGS', 'RUSTC', 'RUSTUP_TOOLCHAIN', 'ARCADIA_CODEC_LIFECYCLE_PHASE', 'RUST_MIN_STACK'):
|
||||
assert expected_env[key] is None
|
||||
verified, all_receipts, raw_logs = {}, {}, {}
|
||||
artifact_identity = launcher_identity = None
|
||||
for mode, command in commands.items():
|
||||
name = f'text-producer-{mode}-{stem}-1'
|
||||
data, raw, receipt_raw = receipt(directory, name)
|
||||
assert data['source'] == data['head_after'] == source
|
||||
assert data['mode'] == mode and data['command'] == command
|
||||
assert data['invocation'] == 'cargo' and data['test_target'] is None
|
||||
assert data['filter'] == ('text_producer' if mode == 'focused' else '')
|
||||
assert not data['changed_inputs'] and not data['verification_failures']
|
||||
assert data['cwd'] == str(root) and data['environment'] == expected_env
|
||||
manifest_raw = within(directory, data['inputs']).read_bytes()
|
||||
assert sha(manifest_raw) == data['inputs_sha256']
|
||||
assert json.loads(manifest_raw) == {'source': source, 'inputs': expected_inputs}
|
||||
launcher = within(directory, data['launcher_copy']).read_bytes()
|
||||
assert sha(launcher) == data['launcher_sha256'] == data['launcher_sha256_after']
|
||||
assert source.encode() in launcher
|
||||
if launcher_identity is None:
|
||||
launcher_identity = sha(launcher)
|
||||
assert sha(launcher) == launcher_identity, 'Unexpected mixed launchers: review explicitly'
|
||||
rows = outcomes(raw)
|
||||
assert rows == [tuple(x) for x in data['outcomes']]
|
||||
listing = members(raw) if mode == 'list' else []
|
||||
assert listing == data['listing_members'] and len(listing) == data['listing_count']
|
||||
if mode in ('focused', 'full'):
|
||||
counts = tuple(sum(v == state for _, v in rows) for state in ('ok', 'FAILED', 'ignored'))
|
||||
summary = re.findall(r'^test result: (ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; 0 measured; (\d+) filtered out;', raw.decode(), re.M)
|
||||
assert len(summary) == 1 and tuple(map(int, summary[0][1:4])) == counts
|
||||
assert summary[0][0] == ('FAILED' if counts[1] else 'ok')
|
||||
assert int(summary[0][4]) == (269 if mode == 'focused' else 0)
|
||||
else:
|
||||
assert not rows
|
||||
assert data['exit'] == {'focused': 0, 'full': 101, 'list': 0, 'clippy': 0, 'fmt': 1}[mode]
|
||||
assert len(data['artifacts']) == (1 if mode in ('focused', 'full', 'list') else 0)
|
||||
for artifact in data['artifacts']:
|
||||
path = Path(artifact['path'])
|
||||
assert path.resolve().is_relative_to(Path(expected_env['CARGO_TARGET_DIR']).resolve())
|
||||
actual = path.read_bytes()
|
||||
assert len(actual) == artifact['bytes'] and sha(actual) == artifact['sha256']
|
||||
assert str(path).replace('\\', '/') in raw.decode().replace('\\', '/')
|
||||
if artifact_identity is None:
|
||||
artifact_identity = artifact
|
||||
assert artifact == artifact_identity, 'Test/list artifact mismatch'
|
||||
all_receipts[mode], raw_logs[mode] = data, raw
|
||||
verified[name] = {'source': source, 'exit': data['exit'], 'outcomes': len(rows),
|
||||
'listing': len(listing), 'log_sha256': sha(raw), 'result_sha256': sha(receipt_raw),
|
||||
'inputs_sha256': sha(manifest_raw), 'launcher_sha256': sha(launcher)}
|
||||
|
||||
new_out = dict(all_receipts['full']['outcomes'])
|
||||
assert len(new_out) == 269 + expected_added
|
||||
assert all(new_out.get(k) == v for k, v in old_out.items())
|
||||
added = set(new_out) - set(old_out)
|
||||
assert len(added) == expected_added
|
||||
assert all(new_out[k] == 'ok' and 'text_producer' in k for k in added)
|
||||
assert set(dict(all_receipts['focused']['outcomes'])) == added
|
||||
assert all(status == 'ok' for _, status in all_receipts['focused']['outcomes'])
|
||||
assert set(all_receipts['list']['listing_members']) == set(new_out)
|
||||
old_blocks, new_blocks = failure_blocks(old_raw), failure_blocks(raw_logs['full'])
|
||||
assert len(old_blocks) == len(new_blocks) == 16
|
||||
assert set(old_blocks) == {k for k, v in old_out.items() if v == 'FAILED'}
|
||||
assert old_blocks == new_blocks, 'Failure bodies differ beyond thread PID'
|
||||
assert raw_logs['fmt'] == baseline['fmt'][1]
|
||||
|
||||
result = {'source': source, 'baseline': BASELINE, 'baseline_archive_sha256': ARCHIVE_SHA,
|
||||
'checker_sha256': sha(Path(__file__).read_bytes()), 'inputs': len(expected_inputs),
|
||||
'unchanged_old_outcomes': 269, 'added_passed': expected_added, 'added_names': sorted(added),
|
||||
'full_passed': sum(v == 'ok' for v in new_out.values()), 'full_failed': 16,
|
||||
'identical_failure_blocks_after_pid_only_normalization': 16,
|
||||
'identical_fmt_sha256': sha(raw_logs['fmt']), 'artifact': artifact_identity,
|
||||
'environment': expected_env, 'receipts': verified,
|
||||
'scope': 'Committed declared inputs, pinned baseline archive, raw logs and current artifact bytes; no Cargo/executable execution. Launcher semantics require independent source review.'}
|
||||
with destination.open('x', encoding='utf-8', newline='\n') as stream:
|
||||
stream.write(json.dumps(result, indent=2) + '\n')
|
||||
print(json.dumps(result, indent=2))
|
||||
@@ -0,0 +1,275 @@
|
||||
{
|
||||
"source": "97a8703adc75467a7f8e75f5c6cb00ca542b707c",
|
||||
"scope": "Private named text producer prerequisite; no accepted editing or universal parser allocation guarantee. Full library and formatter retain documented baseline failures.",
|
||||
"archive": {
|
||||
"file": "evidence.zip",
|
||||
"bytes": 606451,
|
||||
"sha256": "252ea94e7c7f500a2afb3d0fa47c43a051f39d9c844328337289eea0c463becd"
|
||||
},
|
||||
"members": {
|
||||
"baseline/emission-fmt-8d52dab-1.inputs.json": {
|
||||
"bytes": 103842,
|
||||
"sha256": "42b4e07ac4d92c0e4f04d98db862e57f95ad7bf9b5fb3b485d7e0cc971918b50"
|
||||
},
|
||||
"baseline/emission-fmt-8d52dab-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"baseline/emission-fmt-8d52dab-1.result.json": {
|
||||
"bytes": 1882,
|
||||
"sha256": "8b96257054feb09bea714724adeebb40056617a64f4ce84b44825a90f34541a7"
|
||||
},
|
||||
"baseline/emission-full-8d52dab-1.inputs.json": {
|
||||
"bytes": 103842,
|
||||
"sha256": "42b4e07ac4d92c0e4f04d98db862e57f95ad7bf9b5fb3b485d7e0cc971918b50"
|
||||
},
|
||||
"baseline/emission-full-8d52dab-1.log": {
|
||||
"bytes": 44295,
|
||||
"sha256": "1a31c94c3f0a0b6157be381118ee6a9d708b3241c545c8d7f99bc3de94d78871"
|
||||
},
|
||||
"baseline/emission-full-8d52dab-1.result.json": {
|
||||
"bytes": 40105,
|
||||
"sha256": "431a7080e8d8279b4cd4dc1da039acf021200018a052de047c4927ef461f07a4"
|
||||
},
|
||||
"baseline/emission-list-8d52dab-1.inputs.json": {
|
||||
"bytes": 103842,
|
||||
"sha256": "42b4e07ac4d92c0e4f04d98db862e57f95ad7bf9b5fb3b485d7e0cc971918b50"
|
||||
},
|
||||
"baseline/emission-list-8d52dab-1.log": {
|
||||
"bytes": 30793,
|
||||
"sha256": "a32bff2e98b6ca5e72e9d2c07df0068cb31b30f013824d35c2a639499c3c4e38"
|
||||
},
|
||||
"baseline/emission-list-8d52dab-1.result.json": {
|
||||
"bytes": 33038,
|
||||
"sha256": "cd28c5314dedc75b1b00ab93482c06f6655e45c4aadf938ea4b75031a4929d0b"
|
||||
},
|
||||
"baseline/launchers/7819914383abe8a578676aed661704c7ecd0ce9894491152e1859035316e8401.py": {
|
||||
"bytes": 7662,
|
||||
"sha256": "7819914383abe8a578676aed661704c7ecd0ce9894491152e1859035316e8401"
|
||||
},
|
||||
"contracts/PRODUCER-CRITIQUE.md": {
|
||||
"bytes": 11451,
|
||||
"sha256": "678c3dc536f21eeb35661309cd0d364714d5081f463fd6a5cea73d15690ba78c"
|
||||
},
|
||||
"contracts/PRODUCER-PROPOSAL.md": {
|
||||
"bytes": 21816,
|
||||
"sha256": "61ceefe24563b6c115bee787648b471b5806bc80d33f3aa4725375dafe59aac0"
|
||||
},
|
||||
"contracts/analysis-text-producer-contract-20260925.md": {
|
||||
"bytes": 6050,
|
||||
"sha256": "932a44001502bcbb83807d6830956086a4b55c08fda718bf2e938c19bc6c166f"
|
||||
},
|
||||
"diagnostics/inspect_repaired_active_frames.py": {
|
||||
"bytes": 2236,
|
||||
"sha256": "684dfbbebe3cf3d5deeefd7792ef4a3c205c166390c171da48acefc8d1ee9428"
|
||||
},
|
||||
"diagnostics/inspect_stack_frames.py": {
|
||||
"bytes": 1889,
|
||||
"sha256": "80372b64f336b73570c1ee790c41646d0d7765e781d3489a4aa682b07515a1a6"
|
||||
},
|
||||
"diagnostics/prior-8d52.active-frames.json": {
|
||||
"bytes": 15060,
|
||||
"sha256": "b62be9f286aa7960fcf65fd203554eeab165ed02c9e4c090ca3279bb1c8451c6"
|
||||
},
|
||||
"diagnostics/prior-8d52.stack-frames.json": {
|
||||
"bytes": 13090,
|
||||
"sha256": "93322eaee4837bd6f6d3e54a29d5903b380e1064ad78559fcad8adc09c463940"
|
||||
},
|
||||
"diagnostics/text-producer-focused-6b0ef99-1.active-frames.json": {
|
||||
"bytes": 15060,
|
||||
"sha256": "d316b4f70235e3de489a0043b13c1df63e53ac8377c2e5ac84a45c8eaded67e3"
|
||||
},
|
||||
"diagnostics/text-producer-focused-6b0ef99-1.stack-frames.json": {
|
||||
"bytes": 13087,
|
||||
"sha256": "bfe449450a8dab1b62b6460885ccce0e18930afefe0afeda6511605d34ebe893"
|
||||
},
|
||||
"diagnostics/text-producer-focused-97a8703-1.active-frames.json": {
|
||||
"bytes": 15060,
|
||||
"sha256": "f767ef6788981d0198922c651504ef8cf8073c092555466b1cd8c517b9479535"
|
||||
},
|
||||
"diagnostics/text-producer-focused-97a8703-1.stack-frames.json": {
|
||||
"bytes": 13087,
|
||||
"sha256": "499c3758551b5c935e69ed4f3447efd9bb35fb50b12cd8ee88a05357d40f33fc"
|
||||
},
|
||||
"diffs/8d52dab-to-6b0ef99.patch": {
|
||||
"bytes": 49127,
|
||||
"sha256": "d75a35910b0fa9ad8a47e28d7fb5ce9ad3b650909565b775ef56394bce9808be"
|
||||
},
|
||||
"diffs/8d52dab-to-97a8703.patch": {
|
||||
"bytes": 49436,
|
||||
"sha256": "f54db193e1b26d8b299f8893b02249015b817208828457c59a06fcf9ff85adfc"
|
||||
},
|
||||
"gates/launchers/988e17c878a54fe3e74af637a9d42d2830558595d68954cd5e0f045c96703102.py": {
|
||||
"bytes": 7666,
|
||||
"sha256": "988e17c878a54fe3e74af637a9d42d2830558595d68954cd5e0f045c96703102"
|
||||
},
|
||||
"gates/launchers/bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a.py": {
|
||||
"bytes": 7666,
|
||||
"sha256": "bcd83039653815c485ec18fb8d2a75dfa76a39c6e3debca6f525c35a6e474b3a"
|
||||
},
|
||||
"gates/text-producer-clippy-6b0ef99-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "a5e32d8e56cce60ebbf324731fa702802c6b640a11976215d5843d6a11f1ad92"
|
||||
},
|
||||
"gates/text-producer-clippy-6b0ef99-1.log": {
|
||||
"bytes": 989,
|
||||
"sha256": "c4e70ff7795cc37041e5a4ae1b4028ec63530bc9917a00ef0dc25389b34d0564"
|
||||
},
|
||||
"gates/text-producer-clippy-6b0ef99-1.result.json": {
|
||||
"bytes": 1976,
|
||||
"sha256": "4b34063fc995d72bad7576cb22d4312c98933ae948d8f4cee09458d15ca4aef8"
|
||||
},
|
||||
"gates/text-producer-clippy-97a8703-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a"
|
||||
},
|
||||
"gates/text-producer-clippy-97a8703-1.log": {
|
||||
"bytes": 165,
|
||||
"sha256": "59b516ea670424aaed3f11986437f21557b7ffc4f10ffde0d998e608f67aa98d"
|
||||
},
|
||||
"gates/text-producer-clippy-97a8703-1.result.json": {
|
||||
"bytes": 1963,
|
||||
"sha256": "92f39ee8affe4edb312d57367e30aac7b200d199be5a01a1ff8d001268e1ce8c"
|
||||
},
|
||||
"gates/text-producer-fmt-6b0ef99-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "a5e32d8e56cce60ebbf324731fa702802c6b640a11976215d5843d6a11f1ad92"
|
||||
},
|
||||
"gates/text-producer-fmt-6b0ef99-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"gates/text-producer-fmt-6b0ef99-1.result.json": {
|
||||
"bytes": 1888,
|
||||
"sha256": "59b4f3a3194a24659620a799e281de54e4faa99c2de663e31d29f9d7ae508ef7"
|
||||
},
|
||||
"gates/text-producer-fmt-97a8703-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a"
|
||||
},
|
||||
"gates/text-producer-fmt-97a8703-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"gates/text-producer-fmt-97a8703-1.result.json": {
|
||||
"bytes": 1876,
|
||||
"sha256": "f5e40697e7ba4305d4b2b800ac4dda0cd04867e739d127c7bc5469bed370c9ff"
|
||||
},
|
||||
"gates/text-producer-focused-6b0ef99-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "a5e32d8e56cce60ebbf324731fa702802c6b640a11976215d5843d6a11f1ad92"
|
||||
},
|
||||
"gates/text-producer-focused-6b0ef99-1.log": {
|
||||
"bytes": 1244,
|
||||
"sha256": "e0403d6f246f5cebab56172aec45a1df3d45dcf43b823b638b38a5f97c9f47a8"
|
||||
},
|
||||
"gates/text-producer-focused-6b0ef99-1.result.json": {
|
||||
"bytes": 3203,
|
||||
"sha256": "562dcb0ae1a05ea5de0c25b61842d8f646f8490e9e15cb1ee94035b9b401e732"
|
||||
},
|
||||
"gates/text-producer-focused-97a8703-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a"
|
||||
},
|
||||
"gates/text-producer-focused-97a8703-1.log": {
|
||||
"bytes": 1244,
|
||||
"sha256": "fa0378ae170724c2dae1bacfae1a4a156734f6877f795667958a21638c8dd4c3"
|
||||
},
|
||||
"gates/text-producer-focused-97a8703-1.result.json": {
|
||||
"bytes": 3203,
|
||||
"sha256": "6113b2ebb4e6624201ea63777e2f7ae5a6f25b216748fcc194d40a9ced8d535f"
|
||||
},
|
||||
"gates/text-producer-full-6b0ef99-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "a5e32d8e56cce60ebbf324731fa702802c6b640a11976215d5843d6a11f1ad92"
|
||||
},
|
||||
"gates/text-producer-full-6b0ef99-1.log": {
|
||||
"bytes": 45016,
|
||||
"sha256": "80f3ada1357adcbe213a43c60ae0aea62e8f5aaa900c3177c8c01ea96b341c17"
|
||||
},
|
||||
"gates/text-producer-full-6b0ef99-1.result.json": {
|
||||
"bytes": 41035,
|
||||
"sha256": "1f1fa8f3089bc4beb1726703912b5257a5e77ba9e4c9fad7ea6acb9ff8594929"
|
||||
},
|
||||
"gates/text-producer-full-97a8703-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a"
|
||||
},
|
||||
"gates/text-producer-full-97a8703-1.log": {
|
||||
"bytes": 45016,
|
||||
"sha256": "7cd8ac2de3b641e0421f48196be255c6b79706049e814e9f62ca2936794f8f71"
|
||||
},
|
||||
"gates/text-producer-full-97a8703-1.result.json": {
|
||||
"bytes": 41033,
|
||||
"sha256": "b6c97b253e29e15ba476f10ffbd544906f54ca66ca5feedbab36ef6b68358ca3"
|
||||
},
|
||||
"gates/text-producer-list-6b0ef99-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "a5e32d8e56cce60ebbf324731fa702802c6b640a11976215d5843d6a11f1ad92"
|
||||
},
|
||||
"gates/text-producer-list-6b0ef99-1.log": {
|
||||
"bytes": 31556,
|
||||
"sha256": "ebd71e749d2f3a49fb9ec22e4771f1db3127241721b5ec08b2375c6187447c40"
|
||||
},
|
||||
"gates/text-producer-list-6b0ef99-1.result.json": {
|
||||
"bytes": 33812,
|
||||
"sha256": "85a1583d04220254889c5a443ae586e94bb860ef805dade06e5b7eb2b09c8166"
|
||||
},
|
||||
"gates/text-producer-list-97a8703-1.inputs.json": {
|
||||
"bytes": 104052,
|
||||
"sha256": "907d453bc94eada74a42e2a3c2056660515102273283cb4867f6ab82c887e52a"
|
||||
},
|
||||
"gates/text-producer-list-97a8703-1.log": {
|
||||
"bytes": 31556,
|
||||
"sha256": "25845198d079fa9f5eef5a6610816310a264fccec99e93aff0a865e03abbe612"
|
||||
},
|
||||
"gates/text-producer-list-97a8703-1.result.json": {
|
||||
"bytes": 33812,
|
||||
"sha256": "fbafa99392bdedda02c91781f3dd5223a91fe5df38b80f88c186d9dd8066e5cc"
|
||||
},
|
||||
"launchers/package_evidence.py": {
|
||||
"bytes": 4763,
|
||||
"sha256": "870afd89b7551cd2dfc51e070f6b301390297d281fa66cf47b71315a32152b75"
|
||||
},
|
||||
"notes/prior-toolchain.txt": {
|
||||
"bytes": 536,
|
||||
"sha256": "1f101518dd1f90bc2cba8d26570a762832aba6debebbbe6aa50f97a944590610"
|
||||
},
|
||||
"reviews/CHECKER-NOTE.md": {
|
||||
"bytes": 3216,
|
||||
"sha256": "3a135cfbd4a17a10250fc458f1b8991c21fb30d27544e75c861ed6e871e33d15"
|
||||
},
|
||||
"reviews/RUNTIME-REVIEW.md": {
|
||||
"bytes": 6431,
|
||||
"sha256": "60cd4826684b562ec86f936f9218af69b751c95fe3cba42df7b028ef49417df6"
|
||||
},
|
||||
"reviews/SOURCE-REVIEW.md": {
|
||||
"bytes": 11614,
|
||||
"sha256": "61d93dab9307c105b5eaefcc7d01d71149c5321fc3a9baa10047824e28408dc1"
|
||||
},
|
||||
"reviews/STACK-OBSERVATIONS.md": {
|
||||
"bytes": 2773,
|
||||
"sha256": "bb4c26a6b569f14891cb8ca10998095a0d8fc0cf3aa41ec4ad78a1e2813e123b"
|
||||
},
|
||||
"reviews/TEST-REVIEW.md": {
|
||||
"bytes": 6567,
|
||||
"sha256": "75b02f2392b85943590380bd647b292341e45efe9aa2e16011efc4b1dd14ba66"
|
||||
},
|
||||
"reviews/TEXT-PRODUCER-ORACLE.md": {
|
||||
"bytes": 8939,
|
||||
"sha256": "8387fc13f4cd6b98491b80a5ac1849d9617b915f5557874de80fbfce0ebd326a"
|
||||
},
|
||||
"reviews/TEXT-PRODUCER-RUNTIME-READBACK.json": {
|
||||
"bytes": 5629,
|
||||
"sha256": "2e15ae1800b4d01cb9f854f362a23a2d25fcabd8d77f39c0ce2001c717d535ed"
|
||||
},
|
||||
"reviews/inspect_runtime.py": {
|
||||
"bytes": 11502,
|
||||
"sha256": "ea4d783dc2d791b4b6f8dae105620fbd216d49b859af3123957d22d7de1ca2d5"
|
||||
},
|
||||
"reviews/inspect_runtime_strict_original.py": {
|
||||
"bytes": 10443,
|
||||
"sha256": "bdf2bb33dd54916440b8dfde1b8bd38d61d3975d8c760deeccf1c92eb562c8d3"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user