Record verified mixed rename planning and execution boundary evidence
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
*.md -text
|
||||
*.py -text
|
||||
*.txt -text
|
||||
*.json -text
|
||||
@@ -0,0 +1,17 @@
|
||||
# Independent package readback
|
||||
|
||||
**PASS for preservation and reported evidence scope.** Reviewed 2026-09-24 against source `18073a6f2eabce83fc83997f094e331eec835a16`. The private worktree still names that commit and has no tracked modifications. This is a package audit, not a new application execution or broader product acceptance.
|
||||
|
||||
The unchanged `evidence.zip` has **76 unique members, 584,235 bytes**, SHA256 `1c041d181540b474e14e80677cfe287d305951eaee48e492de7f59dcdea2391c`. All CRCs pass; every member name, byte count and SHA256 matches `manifest.json`. All 74 file members equal their original local evidence bytes; both patch members equal newly read immutable Git diffs. All nine readable mirrors equal their archive members. The critique navigation page is a separate addition, not a tenth mirror. All 11 local Markdown links in the reviewed documentation resolve, including source review → navigation page → authoritative critique.
|
||||
|
||||
Independent raw-log reconciliation confirms **17 focused passes**, **246 listed names**, and **230 passed / 16 failed** in the full library. All 229 baseline outcomes remain unchanged; all 16 complete failure bodies match after normalizing only numeric thread identifiers. Strict all-target Clippy exits 0. Formatting exits 1 with eight inherited diff blocks and byte-identical baseline log SHA256 `c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d`.
|
||||
|
||||
All final receipts pin the stated source and the same 551 declared inputs, independently compared with immutable Git blobs and current raw files. Included log/input/launcher hashes reconcile, as do current artifact bytes: 42,081,792 bytes, SHA256 `2c8bd7b9a6adfda3f74b74bae00453b1b1348cbed47f04c8e8c1de9152899416`. This does not authenticate unrecorded build environment or independently reverify remote publication.
|
||||
|
||||
The archive preserves all three initial focused stack-overflow aborts, both marker aborts, the original artifact's 16-pass filtered run (230 tests filtered out), both prologue observations and all three debugger runs. The debugger logs include both a pass and the overflow trace through exact-number parsing. These records support the README's deliberately limited diagnosis, not a precise explanation of environmental variation. The final scoped planner test passes; the earlier full-pipeline 128 KiB setup failure remains unresolved. No passing debugger process status is substituted for a test result.
|
||||
|
||||
No material README overclaim found. Its claims remain private rename planning and scoped verification; output emission/readmission, public source8, published preview integration, Linux/WSL and broader stack guarantees are explicitly excluded. The old source review's pending-runtime language is preserved as historical evidence and linked to the later runtime review. Toolchain text is identified as a reused record.
|
||||
|
||||
Reviewed README SHA256: `c952171bb1e23e11bcaaa6fbed340a074aa5c5d4992319f17f3f76f0ac263faa`. Manifest SHA256: `3f3f9bbb971b8358788cafcbe1b9d5ca2264850eea9fc5406f3b4d1e7206e074`.
|
||||
|
||||
Local reproducible inspection: `.local/analysis-mixed-index-seam-20260924/inspect_rename_package.py`, SHA256 `3ff55c37fbf63334efa185c5d188c4ecf9479e5e85398d7c25d6a25f02515e08`; result `RENAME-PACKAGE-READBACK.json`, SHA256 `9c41ec76b023ca1dffb8fd96c94199b32d7d6f1e8dfeb68521123a941352ebec`. The checker only reads ZIP/local/Git data and writes its local readback. No archived code, Cargo, application executable, network operation or production edit was used. This report is outside the immutable archive.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Private complete-target mixed rename planning
|
||||
|
||||
Source **18073a6f2eabce83fc83997f094e331eec835a16**, pushed and ref-verified on
|
||||
`codex/analysis-mixed-rename-plan-956atf-20260924`. The
|
||||
[accepted contract](../../analysis-mixed-rename-plan-contract-20260924.md) is
|
||||
implemented by a private consumed-source plan borrowing one whole desired
|
||||
Project. It validates every non-name field, simultaneous global/scoped names,
|
||||
the complete original-coordinate edit set, current bundle identity and combined
|
||||
output sizes. It does not emit or admit rewritten source, activate public
|
||||
source8 or integrate into the published Windows preview.
|
||||
|
||||
Windows gnullvm, rustc/Cargo 1.98.1: **17 new tests pass**, and strict core
|
||||
all-target Clippy passes. The actual listing contains **246 names**. The full
|
||||
library remains **FAILED: 230 passed, 16 failed**; all 229 prior outcomes and
|
||||
all 16 failure bodies are unchanged (only numeric thread IDs normalized).
|
||||
Formatting remains **FAILED**, byte-identical to the eight inherited blocks in
|
||||
five files. Linux/WSL checks were not run.
|
||||
|
||||
[Independent runtime review](RENAME-PLAN-RUNTIME-REVIEW.md) verifies all 551
|
||||
declared inputs against immutable Git and working bytes, exact named outcomes,
|
||||
launchers and the 42,081,792-byte test executable, SHA256
|
||||
`2c8bd7b9a6adfda3f74b74bae00453b1b1348cbed47f04c8e8c1de9152899416`.
|
||||
[Source review](RENAME-PLAN-SOURCE-REVIEW.md) applies to unchanged production
|
||||
rename bytes; the module-wiring file was subsequently normalized to LF, SHA256
|
||||
`bd0cea93721a23cb2aaad1f1cb1893b45a5ba38dc6067a0c99d6a05c9bab42dd`.
|
||||
[Test review](RENAME-PLAN-TEST-REVIEW.md) and the
|
||||
[independent oracle](RENAME-PLAN-ORACLE.md) cover complete OA/SA and Unicode/CRLF
|
||||
maps, scoped swaps, all 36 ordinary-category edits, historical exclusion,
|
||||
same-spelling wrong-callee corruption, unsupported semantic changes and
|
||||
signed-zero equivalence. No expectations were generated from planner output.
|
||||
|
||||
Actual inherited entry caps B+37/B+38 clear all predecessor phases and separate
|
||||
the final reservation refusal from success retaining R+M=38 entries. The
|
||||
included-file variant preserves its precise diagnostic. With a 930-byte input
|
||||
cap, ordinary alias shrink offsets typed growth to a valid complete 924 bytes;
|
||||
the 933-byte variant refuses, counting the untouched file. These are planning
|
||||
sizes, not emitted-output acceptance.
|
||||
|
||||
The [stack investigation](RENAME-PLAN-STACK-DIAGNOSIS.md) preserves three initial
|
||||
focused aborts, two marker runs, the original artifact's explicitly filtered
|
||||
16-test pass, two prologue observations and three debugger runs. LLDB located
|
||||
an overflow in parsing/exact-number conversion before the planner. One debugger
|
||||
run passed the same artifact, so no precise cause for environmental variation
|
||||
is asserted. The final evaluator prepares source/desired prerequisites on the
|
||||
normal test thread, then moves the complete source owner into a 128 KiB scoped
|
||||
worker for planning and destruction. All six deep/wide success/collision/
|
||||
non-name cases pass. This meets the planner-specific small-stack contract;
|
||||
**the prior full-pipeline 128 KiB setup failure remains unresolved**.
|
||||
|
||||
[evidence.zip](evidence.zip) contains 76 members, **584,235 bytes**, SHA256
|
||||
`1c041d181540b474e14e80677cfe287d305951eaee48e492de7f59dcdea2391c`.
|
||||
[manifest.json](manifest.json) pins every member. Raw initial/final gates,
|
||||
baseline records, exact launchers, diagnostic scripts/logs, source differences,
|
||||
oracles and reviews are preserved. The nine readable review/checker artifacts
|
||||
mirrored from the archive retain exact bytes; the critique navigation page links
|
||||
to its earlier authoritative home. Toolchain version text is the previously captured,
|
||||
unchanged local toolchain record, not a newly executed version probe.
|
||||
|
||||
Reproduce subject gates from the exact source with the project Windows toolchain,
|
||||
one compiler job, `CARGO_INCREMENTAL=0`, and no lifecycle or RUST_MIN_STACK override:
|
||||
|
||||
```text
|
||||
cargo test --locked --offline -p oa-core --lib -- --list
|
||||
cargo test --locked --offline -p oa-core --lib language::analysis_source::mixed::project::ordinary_index::rename::tests:: -- --test-threads=1
|
||||
cargo test --locked --offline -p oa-core --lib -- --test-threads=1
|
||||
cargo clippy --locked --offline -p oa-core --all-targets -- -D warnings
|
||||
cargo fmt --all -- --check
|
||||
```
|
||||
|
||||
Raw replay helpers retain the producing machine's directory layout and must be
|
||||
read before reuse. Receipts bind declared inputs and recorded environment fields;
|
||||
they are not exhaustive environmental capture or authenticated build provenance.
|
||||
The readback checker does not invoke Cargo or the executable. Do not treat a
|
||||
debugger's process exit zero as a passing ordinary test.
|
||||
|
||||
Actual emission/readmission with carried output storage, scalar/structural
|
||||
editing, public source8, persistence/history and graphical/API parity remain
|
||||
required work under issue7. The selected successor direction and rejected
|
||||
envelope approach are recorded in [DECISIONS.md](../../DECISIONS.md).
|
||||
@@ -0,0 +1,5 @@
|
||||
# Rename-plan critique
|
||||
|
||||
The authoritative [pre-implementation critique](../../analysis-mixed-rename-plan-20260924/RENAME-PLAN-CRITIQUE.md)
|
||||
contains the expression-scratch proof cited by the preserved source review.
|
||||
This page keeps that historical relative link navigable without duplicating it.
|
||||
@@ -0,0 +1,11 @@
|
||||
RICH OA R 11 M 27 E 15 Q 11 files [(213, 5, 5, 213), (213, 5, 5, 213), (474, 17, 17, 474)] CRLF [(226, 5, 5, 226), (226, 5, 5, 226), (491, 17, 17, 491)]
|
||||
ORIGINAL [[0, 12, 13, "G10", "f"], [0, 68, 69, "P10.1", "x"], [0, 128, 129, "P10.12", "y"], [0, 203, 204, "P10.1", "x"], [0, 208, 209, "P10.12", "y"], [1, 12, 13, "G11", "g"], [1, 68, 69, "P11.1", "x"], [1, 128, 129, "P11.12", "y"], [1, 203, 204, "P11.1", "x"], [1, 208, 209, "P11.12", "y"], [2, 19, 20, "G1", "p"], [2, 122, 123, "G4", "n"], [2, 177, 178, "G5", "d"], [2, 189, 190, "G3", "v"], [2, 206, 207, "G3", "v"], [2, 269, 270, "G2", "w"], [2, 291, 292, "G10", "f"], [2, 293, 294, "P10.12", "y"], [2, 299, 300, "P10.1", "x"], [2, 303, 304, "G11", "g"], [2, 305, 306, "P11.1", "x"], [2, 311, 312, "P11.12", "y"], [2, 321, 322, "G10", "f"], [2, 323, 324, "P10.1", "x"], [2, 329, 330, "P10.12", "y"], [2, 350, 351, "G2", "w"], [2, 412, 413, "G5", "d"]]
|
||||
TRANSFORMED [[0, 20, 21, "G10", "f"], [0, 77, 78, "P10.1", "x"], [0, 138, 139, "P10.12", "y"], [0, 214, 215, "P10.1", "x"], [0, 219, 220, "P10.12", "y"], [1, 20, 21, "G11", "g"], [1, 77, 78, "P11.1", "x"], [1, 138, 139, "P11.12", "y"], [1, 214, 215, "P11.1", "x"], [1, 219, 220, "P11.12", "y"], [2, 28, 29, "G1", "p"], [2, 133, 134, "G4", "n"], [2, 188, 189, "G5", "d"], [2, 200, 201, "G3", "v"], [2, 218, 219, "G3", "v"], [2, 281, 282, "G2", "w"], [2, 303, 304, "G10", "f"], [2, 305, 306, "P10.12", "y"], [2, 311, 312, "P10.1", "x"], [2, 315, 316, "G11", "g"], [2, 317, 318, "P11.1", "x"], [2, 323, 324, "P11.12", "y"], [2, 333, 334, "G10", "f"], [2, 335, 336, "P10.1", "x"], [2, 341, 342, "P10.12", "y"], [2, 363, 364, "G2", "w"], [2, 426, 427, "G5", "d"]]
|
||||
RICH SA R 12 M 28 E 15 Q 12 files [(213, 5, 5, 213), (213, 5, 5, 213), (548, 18, 18, 548)] CRLF [(226, 5, 5, 226), (226, 5, 5, 226), (565, 18, 18, 565)]
|
||||
ORIGINAL [[0, 12, 13, "G10", "f"], [0, 68, 69, "P10.1", "x"], [0, 128, 129, "P10.12", "y"], [0, 203, 204, "P10.1", "x"], [0, 208, 209, "P10.12", "y"], [1, 12, 13, "G11", "g"], [1, 68, 69, "P11.1", "x"], [1, 128, 129, "P11.12", "y"], [1, 203, 204, "P11.1", "x"], [1, 208, 209, "P11.12", "y"], [2, 19, 20, "G1", "p"], [2, 122, 123, "G4", "n"], [2, 177, 178, "G5", "d"], [2, 189, 190, "G3", "v"], [2, 206, 207, "G3", "v"], [2, 269, 270, "G2", "w"], [2, 291, 292, "G10", "f"], [2, 293, 294, "P10.12", "y"], [2, 299, 300, "P10.1", "x"], [2, 303, 304, "G11", "g"], [2, 305, 306, "P11.1", "x"], [2, 311, 312, "P11.12", "y"], [2, 321, 322, "G10", "f"], [2, 323, 324, "P10.1", "x"], [2, 329, 330, "P10.12", "y"], [2, 350, 351, "G2", "w"], [2, 412, 413, "G5", "d"], [2, 490, 491, "G6", "s"]]
|
||||
TRANSFORMED [[0, 20, 21, "G10", "f"], [0, 77, 78, "P10.1", "x"], [0, 138, 139, "P10.12", "y"], [0, 214, 215, "P10.1", "x"], [0, 219, 220, "P10.12", "y"], [1, 20, 21, "G11", "g"], [1, 77, 78, "P11.1", "x"], [1, 138, 139, "P11.12", "y"], [1, 214, 215, "P11.1", "x"], [1, 219, 220, "P11.12", "y"], [2, 28, 29, "G1", "p"], [2, 133, 134, "G4", "n"], [2, 188, 189, "G5", "d"], [2, 200, 201, "G3", "v"], [2, 218, 219, "G3", "v"], [2, 281, 282, "G2", "w"], [2, 303, 304, "G10", "f"], [2, 305, 306, "P10.12", "y"], [2, 311, 312, "P10.1", "x"], [2, 315, 316, "G11", "g"], [2, 317, 318, "P11.1", "x"], [2, 323, 324, "P11.12", "y"], [2, 333, 334, "G10", "f"], [2, 335, 336, "P10.1", "x"], [2, 341, 342, "P10.12", "y"], [2, 363, 364, "G2", "w"], [2, 426, 427, "G5", "d"], [2, 505, 506, "G6", "s"]]
|
||||
CATEGORY R15 M36 E0 Q15 [(2152, 127, 120, 2145)]
|
||||
CATEGORY [[0, 19, 20, "G1", "p"], [0, 168, 169, "G2", "a"], [0, 249, 254, "G3", "child"], [0, 344, 345, "G2", "a"], [0, 369, 377, "G4", "implicit"], [0, 487, 488, "G5", "s"], [0, 561, 565, "G6", "link"], [0, 625, 630, "G3", "child"], [0, 640, 648, "G4", "implicit"], [0, 664, 665, "G7", "d"], [0, 741, 745, "G6", "link"], [0, 789, 793, "G6", "link"], [0, 818, 822, "G8", "note"], [0, 885, 889, "G6", "link"], [0, 925, 926, "G9", "t"], [0, 992, 997, "G3", "child"], [0, 1003, 1004, "G5", "s"], [0, 1328, 1329, "G10", "q"], [0, 1391, 1394, "G12", "use"], [0, 1397, 1402, "G14", "right"], [0, 1422, 1425, "G11", "sub"], [0, 1487, 1491, "G13", "left"], [0, 1514, 1517, "G12", "use"], [0, 1577, 1578, "G10", "q"], [0, 1617, 1620, "G11", "sub"], [0, 1648, 1652, "G13", "left"], [0, 1712, 1715, "G11", "sub"], [0, 1741, 1746, "G3", "child"], [0, 1789, 1794, "G14", "right"], [0, 1855, 1856, "G10", "q"], [0, 1882, 1890, "G4", "implicit"], [0, 1935, 1942, "G15", "context"], [0, 2004, 2005, "G10", "q"], [0, 2029, 2032, "G12", "use"], [0, 2047, 2051, "G13", "left"], [0, 2092, 2097, "G14", "right"]]
|
||||
COMBINED SIZE renamed_f [(213, 1, 9, 221), (213, 0, 0, 213), (504, 33, 19, 490)] total 924 typed-only 954
|
||||
COMBINED SIZE renamed_func [(213, 1, 12, 224), (213, 0, 0, 213), (504, 33, 25, 496)] total 933 typed-only 963
|
||||
PASS: authored raw token positions and separate removed/replacement lengths only; no application pipeline/output or semantic acceptance.
|
||||
@@ -0,0 +1,123 @@
|
||||
# Independent complete-target rename oracle
|
||||
|
||||
2026-09-24. Contract: root `harness/analysis-mixed-rename-plan-contract-20260924.md`; fixture source base `ee500908e3d77182ddd54e12524f9b6c6eb43b60` in `.local/as3batch`. This report authors complete desired-name sets and original-coordinate physical edits from literal source roles. It does not infer expectations from parser/index/plan/emitter outputs. No source/tests were edited; no Cargo, archived evaluator, product execution, commit or Gitea operation was performed.
|
||||
|
||||
Report-only `rename_plan_bytes.py` reconstructs the existing rich literal, checks explicit hard-coded physical tuples against raw slices, pins the repaired category file, computes Unicode/CRLF endpoints and separate removed/replacement totals. It never imports application code or discovers name occurrences by scanning an index. Its successful execution establishes byte arithmetic only, not semantic admission/runtime acceptance. The tables are initial exhaustive oracles; implementation and parent own resulting tests and runtime gates.
|
||||
|
||||
## Qualified identities and complete rich target
|
||||
|
||||
Use existing `id(n)` (decimal digits formatted in UUID suffix), **not** `Id::from_u128(n)`. G(n)=Global(id(n)); P(c,n)=Parameter(calculation id(c), parameter id(n)). Canonical files: 0=a.arcadia, 1=b.arcadia, 2=main.arcadia; entry remains main despite textual include order b then a. Base OA lengths213/213/474 (total900); SA213/213/548 (total974).
|
||||
|
||||
Start with independently constructed `rich_model(layer)` and change only the following aliases/parameter names. This is the **complete changed-name map**, not selected sample targets; every other field is exactly the original desired model field.
|
||||
|
||||
| Target | Old | Desired |
|
||||
| --- | --- | --- |
|
||||
| G1 | p | w |
|
||||
| G2 | w | p |
|
||||
| G3 | v | n |
|
||||
| G4 | n | v |
|
||||
| G5 | d | z |
|
||||
| G10 | f | g |
|
||||
| G11 | g | f |
|
||||
| P(10,1) | x | y |
|
||||
| P(10,12) | y | x |
|
||||
| P(11,1) | x | y |
|
||||
| P(11,12) | y | x |
|
||||
| G6, SA only | s | u |
|
||||
|
||||
Global swaps are validated simultaneously; no sequential intermediate collision is acceptable. Parameters swap independently within f/g identity, even as their calculation aliases swap. P(10,1), P(11,1) and G1 share the same raw UUID but never authority. An additional isolated valid case G1 p→x has exactly one edit `(2,19,20)`, despite both calculations already having scoped x names. Negative G1 p→w alone collides with unchanged G2; P(10,1) x→y alone collides with unchanged P(10,12). Neither may yield a partial plan.
|
||||
|
||||
## Entire rich physical map
|
||||
|
||||
Replacement is derived from the target table above. Half-open spans select whole name tokens, never @/$, colon, trivia or prose. OA has all27 rows; SA adds the last row for28. Same numerical spans in different canonical files are distinct keys.
|
||||
|
||||
| File | Start..end | Target | Original token / role |
|
||||
| ---: | --- | --- | --- |
|
||||
| 0 | 12..13 | G10 | f header |
|
||||
| 0 | 68..69 | P(10,1) | x declaration |
|
||||
| 0 | 128..129 | P(10,12) | y declaration |
|
||||
| 0 | 203..204 | P(10,1) | x body use |
|
||||
| 0 | 208..209 | P(10,12) | y body use |
|
||||
| 1 | 12..13 | G11 | g header |
|
||||
| 1 | 68..69 | P(11,1) | x declaration |
|
||||
| 1 | 128..129 | P(11,12) | y declaration |
|
||||
| 1 | 203..204 | P(11,1) | x body use |
|
||||
| 1 | 208..209 | P(11,12) | y body use |
|
||||
| 2 | 19..20 | G1 | p project header |
|
||||
| 2 | 122..123 | G4 | n node header |
|
||||
| 2 | 177..178 | G5 | d node diagram reference |
|
||||
| 2 | 189..190 | G3 | v ordinary→typed reference |
|
||||
| 2 | 206..207 | G3 | v property header |
|
||||
| 2 | 269..270 | G2 | w typed→ordinary subject |
|
||||
| 2 | 291..292 | G10 | first f call |
|
||||
| 2 | 293..294 | P(10,12) | first f y label |
|
||||
| 2 | 299..300 | P(10,1) | first f x label |
|
||||
| 2 | 303..304 | G11 | nested g call |
|
||||
| 2 | 305..306 | P(11,1) | g x label |
|
||||
| 2 | 311..312 | P(11,12) | g y label |
|
||||
| 2 | 321..322 | G10 | repeated f call |
|
||||
| 2 | 323..324 | P(10,1) | second f x label |
|
||||
| 2 | 329..330 | P(10,12) | second f y label |
|
||||
| 2 | 350..351 | G2 | w work header |
|
||||
| 2 | 412..413 | G5 | d diagram header |
|
||||
| 2, SA only | 490..491 | G6 | s system header |
|
||||
|
||||
The reordered/repeated labels are intentional: main expression is `@f(y: 2, x: @g(x: 3, y: 4)) + @f(x: 5, y: 6)`. Header and both call labels must track qualified identity, not source position or current alias string. OA per-file removed/replacement counts5/5,5/5,17/17 preserve all900 bytes; SA final main has18/18 and total974.
|
||||
|
||||
Unicode/CRLF variant: independently prefix **each** original file with `// 雨\r\n` (8 bytes) and replace LF by CRLF. Map each endpoint b to `8+b+LF_count(original[..b])`. File0 and1 rows become20..21,77..78,138..139,214..215,219..220. Main rows in table order become28..29,133..134,188..189,200..201,218..219,281..282,303..304,305..306,311..312,315..316,317..318,323..324,333..334,335..336,341..342,363..364,426..427; SA system505..506. Lengths226/226/491 OA (943),226/226/565 SA (1017). Same target set and edit counts; prefix and CRLF bytes never become edits.
|
||||
|
||||
## Entire ordinary-category target and physical map
|
||||
|
||||
Use **repaired** 2152-byte `ordinary_index/tests/fixtures/categories.arcadia`, SHA256 `3943579866157c7b5d95ce9edcb2d643058826b9af44257557e2864f130d15fc`. Earlier block-comment fixture hash is superseded; the repair is byte-neutral and retains all numeric tuples. File0 is its sole canonical file. All targets below are global; **R=Q=15, M=36, E=0**.
|
||||
|
||||
| Target | Old→desired | Every physical span for that target |
|
||||
| --- | --- | --- |
|
||||
| G1 | p→a | 19..20 |
|
||||
| G2 | a→p | 168..169;344..345 |
|
||||
| G3 | child→implicit | 249..254;625..630;992..997;1741..1746 |
|
||||
| G4 | implicit→child | 369..377;640..648;1882..1890 |
|
||||
| G5 | s→link | 487..488;1003..1004 |
|
||||
| G6 | link→s | 561..565;741..745;789..793;885..889 |
|
||||
| G7 | d→note | 664..665 |
|
||||
| G8 | note→d | 818..822 |
|
||||
| G9 | t→q | 925..926 |
|
||||
| G10 | q→t | 1328..1329;1577..1578;1855..1856;2004..2005 |
|
||||
| G11 | sub→use | 1422..1425;1617..1620;1712..1715 |
|
||||
| G12 | use→sub | 1391..1394;1514..1517;2029..2032 |
|
||||
| G13 | left→right | 1487..1491;1648..1652;2047..2051 |
|
||||
| G14 | right→left | 1397..1402;1789..1794;2092..2097 |
|
||||
| G15 | context→ctx | 1935..1942 |
|
||||
|
||||
Sort these explicit tuples by physical key for complete-map comparison. Removing127 old token bytes and adding120 replacement bytes yields **2145 final bytes**. Changed desired-name bytes45 (original catalog49). This includes project/nested activity/function/relation/diagram/artifact/trace/process/occurrence/context headers and all authored parent, route, view-option, owner, trace and contextual-reference positions. The parent marker at323 starts a reference extending through345; only344..345 is replaceable across the real `// @noise child\n` comment. No edit covers its comment text. The implicit parent has no authored reference. Historical `Named uuid` remains untouched even though it equals live G3. Project/display/description text, artifact URI `docs/@child.md`, contextual guard `@child`, and trace historical names/descriptions are unchanged. The header-only context rename still has one mandatory physical edit.
|
||||
|
||||
## Phase peaks and actual inherited cap pair
|
||||
|
||||
Let B be the admitted authored-owner entry usage; do not substitute a fresh/tightened budget after admission. Separate dimensions remain unchanged: occurrence counters, copied text, parsing/numeric/frame work. Equality scratch E drops before name-map growth; namespace set Q drops before edit-map growth.
|
||||
|
||||
| Case | E | Q | R | M | Equality added peak | Names+namespace | Names+edits / retention | Actual added peak |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| Rich OA all | 15 | 11 | 11 | 27 | 15 | 22 | 38 | 38 |
|
||||
| Rich SA all | 15 | 12 | 12 | 28 | 15 | 24 | 40 | 40 |
|
||||
| Categories all | 0 | 15 | 15 | 36 | 0 | 30 | 51 | 51 |
|
||||
| Rich OA project-only p→x | 15 | 11 | 1 | 1 | 15 | 12 | 2 | 15 |
|
||||
| Rich OA no-op | 15 | 11 | 0 | 0 | 15 | skipped | 0 | 15 |
|
||||
| Categories no-op | 0 | 15 | 0 | 0 | 0 | skipped | 0 | 0 |
|
||||
|
||||
**Use rich OA all-name swaps for the primary entry cap pair.** Let L be the original resolved baseline. Typed retention59 + ordinary retention6 gives B=L+65. Actual planning peak B+38=L+103; failing cap B+37=L+102. Existing inherited-profile resolver succeeds at L+97 (established original `index_tests::new_maps_keep_baseline_and_scope_reservations_and_peak_scratch`), typed peak L+98, ordinary peak L+93. Thus **both L+102 and L+103 clear every predecessor phase**, and differ only on the final edit reservation. With canonical physical insertion order the final row is main412..413, G5; if implementation traverses families in a different order, the failing row must follow its actual insertion sequence, not be guessed from eventual BTree order. Success retains exactly38 extra entries and no copied text/occurrences. Parent must verify actual refusal phase/diagnostic and success at these inherited limits.
|
||||
|
||||
The original rich no-op E15 profile B+15=L+80 would refuse earlier than typed peak98; do **not** claim it isolates comparison scratch. Use unrestricted entries for no-op semantic assertions. Category all-plan peak B+51 is adequate for a second straightforward storage case, but the accepted rich case already resolves the predecessor-bound uncertainty without larger literals. Wide/deep equality tests must author their old E from literal node construction, retain exactly that scratch through equality, and independently demonstrate all earlier peaks before claiming an E/E-1 inherited cap boundary. No such unverified boundary is asserted here.
|
||||
|
||||
## Combined all-file sizing oracle
|
||||
|
||||
Separate rich OA fixture: change only the original sole node header alias n to31 n characters. a and b remain213 bytes each; main becomes504; total input **930**. Original physical changed tokens are exactly `(0,12,13)→G10`, `(2,122,153)→G4`, `(2,321,322)→G10`, `(2,351,352)→G10`. Derive desired model from that original model, changing G4 back to n and G10 as below; everything else remains equal. Q11,R2,M4,E15, retention6, added peak15, so keep entry cap ample.
|
||||
|
||||
| Desired G10 | File a: removed/add/final | File b untouched | Main: removed/add/final | Complete final | Typed-only intermediate |
|
||||
| --- | --- | ---: | --- | ---: | ---: |
|
||||
| renamed_f (9 bytes) | 1/9/221 | 213 | 33/19/490 | **924** | 954 |
|
||||
| renamed_func (12 bytes) | 1/12/224 | 213 | 33/25/496 | **933** | 963 |
|
||||
|
||||
With inherited complete byte limit930, the first must succeed despite the typed-only954; the second must refuse because933>930. Omitting unchanged b would falsely reduce the negative total to720 and admit it. Sum removed then replacement separately per file, subtract before add, then include **all** final files. The changed-name byte sums10 and13 fit the same bound. Original input930 fits the input-size limit; parent must confirm predecessor ledger text reservations under this same inherited profile rather than bypassing admission. This is planned sizing only, not emission or reparsing of edited source.
|
||||
|
||||
## Required comparison discipline
|
||||
|
||||
Compare complete target/name and physical maps—not just lengths or sample rows. Desired is externally borrowed unchanged; owner still provides exact entry, canonical paths, file set, raw bytes, full original model, warnings and inherited usage. A no-op still validates all non-name fields and reserves E where needed. Use separate unsupported mutations for every contract field group, including changed IDs/keys, parameter order/count/type, expression variants/list/call sizes, and all non-name diagram/artifact/trace payloads. Target-only wide/deep trees must refuse without undercharging traversal. Signed-zero equivalence follows existing whole-model equality but grants no authority to rewrite source. Missing/wrong-target/extra/overlap corruption must reject the complete plan, and stale **untouched** files must fail complete-bundle authority. These obligations are not satisfied by these positive byte tables alone; source critic and runtime acceptance remain separate.
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"baseline": "ee500908e3d77182ddd54e12524f9b6c6eb43b60",
|
||||
"inputs": 551,
|
||||
"unchanged_old_outcomes": 229,
|
||||
"added_passed": 17,
|
||||
"full_passed": 230,
|
||||
"identical_failure_blocks_after_pid_only_normalization": 16,
|
||||
"identical_fmt_sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d",
|
||||
"receipts": {
|
||||
"rename-focused-18073a6-1": {
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"exit": 0,
|
||||
"outcomes": 17,
|
||||
"listing": 0,
|
||||
"log_sha256": "193e7d2c82c65f2bb04d1d818835635152b702b5da56cae9c16fc6955f1cf091",
|
||||
"result_sha256": "593d928b792c1f6b0a78c5f1142cfba9ab2645dbef04e21ccefd4b0eec88a50f"
|
||||
},
|
||||
"rename-full-18073a6-1": {
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"exit": 101,
|
||||
"outcomes": 246,
|
||||
"listing": 0,
|
||||
"log_sha256": "a3fef7c640ec9e59484d15b18a5fc8b9a0c25ca9bf01750b1da4431a101c4eec",
|
||||
"result_sha256": "4228f67a45fca37841607d574af9b676d1c144e3a93f6d0dd34bd9c01c625d34"
|
||||
},
|
||||
"rename-list-18073a6-1": {
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"exit": 0,
|
||||
"outcomes": 0,
|
||||
"listing": 246,
|
||||
"log_sha256": "05e09d5280508a784dd97a894c92b8cdeb202c67592498d253e8f8c33b07e6ae",
|
||||
"result_sha256": "1e58a6c4e907fd02c0c5a3e6de18bca3ef0c36c4a2dde2584e8e51b1837d8cda"
|
||||
},
|
||||
"rename-clippy-18073a6-1": {
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"exit": 0,
|
||||
"outcomes": 0,
|
||||
"listing": 0,
|
||||
"log_sha256": "5f9c5607b71d64c343e6be3278aeba235ce95af6b9d28d8de7e2679560afa663",
|
||||
"result_sha256": "b03333e034e3668444603f71ee253d5058412b98b95507ed8d1a13e2a1439390"
|
||||
},
|
||||
"rename-fmt-18073a6-1": {
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"exit": 1,
|
||||
"outcomes": 0,
|
||||
"listing": 0,
|
||||
"log_sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d",
|
||||
"result_sha256": "2f2ed68a8b90f5908d309c7a7cf6fd2d275dc3286a4b5dd518bf0d60e33e13c7"
|
||||
}
|
||||
},
|
||||
"scope": "Read-only committed-input/raw-log/artifact comparison; no Cargo execution."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Independent rename-plan runtime reconciliation
|
||||
|
||||
2026-09-24. Final tested source **18073a6f2eabce83fc83997f094e331eec835a16**, baseline **ee500908e3d77182ddd54e12524f9b6c6eb43b60**. No material discrepancy found in final recorded gates or their qualified disposition: **17 new tests pass; strict Clippy passes; full library remains FAILED230pass/16fail; formatting remains FAILED**. Preserved upstream128KiB pipeline failures remain an unresolved limitation, not a fixed production issue.
|
||||
|
||||
## Read-only evaluator and source binding
|
||||
|
||||
Read the complete parent checker before executing it; earlier review's duplicate-list, summary-status/filtered-count, focused-status, raw-baseline and Git replacement-object concerns are addressed in this version. Executed only:
|
||||
|
||||
```text
|
||||
python -B .local/analysis-mixed-index-seam-20260924/inspect_rename_runtime.py 18073a6f2eabce83fc83997f094e331eec835a16 18073a6 17
|
||||
```
|
||||
|
||||
Assertions enabled; exit0. No Cargo, application binary, archived launcher or debugger was executed. Checker writes only a fresh readback JSON. Additional reviewer snippets read raw JSON/logs/ZIP and compare hashes; no source edits, commits or remote writes occurred.
|
||||
|
||||
| Reproducible artifact | Bytes | SHA256 |
|
||||
| --- | ---: | --- |
|
||||
| inspect_rename_runtime.py | 7468 | `68e428c8959ab8a98a06ac240fc379c734646e38cbb2ca4cdec47a3672ad3c02` |
|
||||
| RENAME-PLAN-RUNTIME-READBACK.json | 2211 | `9b2d1631e8981ab01aa133cbc5cd41b407e9a40280f4f91921ce9c1f6500cc11` |
|
||||
| Final test executable | 42,081,792 | `2c8bd7b9a6adfda3f74b74bae00453b1b1348cbed47f04c8e8c1de9152899416` |
|
||||
|
||||
Current exact executable at `.local/analysis-checked-save-target-20260913/debug/deps/oa_core-416e35542925bed6.exe` was rehashed against final focused/full/list records and their raw invocation paths. This is observed recorded-build binding, not authenticated compilation/reproducibility proof.
|
||||
|
||||
All **551** declared input paths from immutable final Git tree match raw disk lengths/bytes/SHA256 and each final gate input manifest. Git replacement objects were disabled. Current checkout is the exact source with no tracked changes. Shared final input-manifest SHA256 **e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff**. All five receipts report unchanged inputs, no verification failures and same final head; captured launcher SHA256 **843069930cd44278eef940930369b5a85a3b3412e1e50793d78d3d5738298fbe** matches before/after and actual captured bytes. Exact Cargo argv/cwd match intended commands; one compiler job, incremental0 and no lifecycle/RUST_MIN_STACK overrides are recorded. The declared input scope/environment subset is not claimed exhaustive toolchain or host attestation.
|
||||
|
||||
## Actual final results
|
||||
|
||||
| Gate suffix18073a6-1 | Exit | Raw outcome | Log SHA256 |
|
||||
| --- | ---: | --- | --- |
|
||||
| focused | 0 | 17pass,0fail,0ignore,229filtered | `193e7d2c82c65f2bb04d1d818835635152b702b5da56cae9c16fc6955f1cf091` |
|
||||
| full | 101 | 230pass,16fail,0ignore,0filtered | `a3fef7c640ec9e59484d15b18a5fc8b9a0c25ca9bf01750b1da4431a101c4eec` |
|
||||
| list | 0 | 246 unique names | `05e09d5280508a784dd97a894c92b8cdeb202c67592498d253e8f8c33b07e6ae` |
|
||||
| clippy | 0 | core/all-target strict `-D warnings`; completed dev | `5f9c5607b71d64c343e6be3278aeba235ce95af6b9d28d8de7e2679560afa663` |
|
||||
| fmt | 1 | unchanged inherited formatting diff | `c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d` |
|
||||
|
||||
Parsed every actual named result and compared receipt order, uniqueness, summary status/counts/filtered counts and expected exits. Listing set equals full-result set. The17 new names equal the exact focused set, all pass in both runs; all229 baseline named outcomes retain their prior result (213pass/16fail). All16 raw failure bodies compare exactly after CRLF handling and thread-PID-only normalization; no semantic diagnostics are removed. Final formatting raw bytes equal baseline, retaining eight diff blocks across five files.
|
||||
|
||||
Separately anchored baseline receipts, raw logs and input manifests for ordinary-full/fmt-ee50090-1 to the previously delivered50-member archive SHA256 **99ee3761a77c2f634d36d4cdd0c3ec6d305cbd2f3322cf37a2f25f21e6d9fbed**; every compared byte matches. Thus baseline was not silently revised to permit final failures. Exact final result-record hashes are captured in the readback JSON.
|
||||
|
||||
## Preserved failures and diagnostic scope
|
||||
|
||||
Read/rehashed original records and logs; validated captured ordinary/diagnostic launcher and input-manifest pins. Ordinary focused attempts9388fcf,70c20c3,f1c0956 each record exit3221225725 (`0xc00000fd`, STATUS_STACK_OVERFLOW), exactly four completed passes and no terminal test summary. They are not passing17-test runs. Log SHA256 respectively:
|
||||
|
||||
- 9388fcf: `92c0ef7acfaced00ec32a6f66203dd5b7e59fa3c10f844942c0f1e9291dc1a4d`.
|
||||
- 70c20c3: `5ec1947d09e48c61c98d2396d176dd6acd6d8f72bbabab5ccca402908ce5faba`.
|
||||
- f1c0956: `6e0542f463091d5b3924242c1aa4824dc9ab6dd076d22a018b09a9ada81d55d0`.
|
||||
|
||||
The separately recorded original9388-artifact invocation uses explicit `--skip` for only the small-stack case. Raw16pass/0fail/230filtered results equal precisely the final17-name set minus that case. Receipt artifact matches original focused42,074,624-byte executable SHA256 **bd927d4653a8915ee72d5df22096d29edb1853c12d929e20056647b05e565956** and records unchanged bytes; its read source-reviewed launcher pins/checks the artifact before running. Remaining16 log SHA256 **5ce011d7c1d09165363c44fb3dc248c3aaa8b916ce1a2bac0896a76d6814501c**. Historical binary bytes have since been replaced at the shared target path; this review rechecks their preserved receipts/linkage, not a currently retained original executable.
|
||||
|
||||
Diagnostic9e8e77e log **c4093678295bae3ef37ec125e707069187ca2d52dac6f09a00eaf3b28313a705** shows deep admission, original clone, successful planning/drop and desired clone completed before collision helper. Diagnostic8159a17 log **5adeb05bb91878a090297c7a0580609ed8d98d9fdb5eb73039214ae0d5b35e5d** adds `entered; before authored`, with no after-authored marker. Both record the same stack-overflow status. Those markers locate that helper attempt before its planning call.
|
||||
|
||||
All three debugger receipts identify the same prior f1c artifact SHA256 **b804768eccb350033fcfd01516d0c3253e43525718f42de7c75cda9a3d91c6fe**; their launcher bytes match recorded hashes. Debugger exit0 is **not** child-test success: run1 stops on stack exception, run2 shows a single test pass/245filtered under debugger, and run3 stops on stack exception then explicitly kills the process. Run3 log SHA256 **f10d5bcf20b0c4d64cb5e07eacfe7d19999a594f55a033e1e9df7b0ca79ffca0** contains a real backtrace through authored→mixed parse→Parser unit→typed declarations→binding→exact literal→Budget exact→Exact decimal→BigInt parse→Windows heap allocation. No rename-plan call appears in that stopped call path. Run2 log **4d707adebbd3c65b89aa558a99d86b463dadffcced6a9a1e98e50bdca1b77f1f** is retained as diagnostic variation, not ordinary acceptance. This supports an environment-sensitive upstream128KiB boundary, not a proved exact frame-size cause or repaired parser.
|
||||
|
||||
## Accepted bounded conclusion
|
||||
|
||||
Final18073a6 production is unchanged across these evaluator revisions. As independently reviewed in RENAME-PLAN-TEST-REVIEW.md, its planner-specific small-stack case performs all six deep128/wide129 × unchanged/collision/non-name cases with full original owner moved into a128KiB scoped worker, borrowed desired, exact outcomes and worker-local destruction. Admission prerequisites are prepared outside that worker. The final raw focused and full results both pass that named test. This establishes the accepted planner-scoped gate; **it does not establish that full parsing/admission reliably fits128KiB** or erase earlier aborts.
|
||||
|
||||
This is private rename planning with retained source authority and sizing, not accepted rewritten output, public source8, checked persistence, history adoption, GUI/API parity, a release build or full application completion. Full-library16 failures and formatting failure remain explicit. Parent owns packaging/publication and any next capability.
|
||||
@@ -0,0 +1,41 @@
|
||||
# Independent mixed rename-plan source review
|
||||
|
||||
2026-09-24. **No remaining blocking source finding in the repaired production draft.** This is source review only: tests are still being authored; no compiler, Cargo, runtime gate, source edit, commit or Gitea action was performed by this reviewer. Parent owns compilation and acceptance.
|
||||
|
||||
Reviewed against accepted `harness/analysis-mixed-rename-plan-contract-20260924.md` (published checkpoint `dc87babf`, local SHA256 `c5f6ede88758b958b2c52da297bd17353a7a8e8d9123c06c967029fb8401183b`) and actual private base **`ee500908e3d77182ddd54e12524f9b6c6eb43b60`**, branch `codex/analysis-mixed-rename-plan-956atf-20260924`. The accepted contract matches the preceding critique; no concrete contract discrepancy was found.
|
||||
|
||||
## Exact reviewed working bytes
|
||||
|
||||
Paths below start at `crates/oa-core/src/language/analysis_source/mixed/project/` in `.local/as3batch`. These are uncommitted working bytes, not a claimed tested commit.
|
||||
|
||||
| File | SHA256 |
|
||||
| --- | --- |
|
||||
| `ordinary_index/rename.rs` | `3ce74331c962abfbf63ca7f72b286405b1ca8b266335d77c71103c900cb6e9dd` |
|
||||
| `ordinary_index.rs` | `7f30ca4eaa9cb33610a70f72d08813b24ddf0c4935fa37d6caec456394b209d6` |
|
||||
|
||||
The latter changes only module wiring. Its current extra blank line is routine formatting, not a semantic finding; any later formatting change requires rebinding that file hash. New test files and compilation are outside this production-only freeze. The implementer explicitly confirmed production frozen after the repairs below.
|
||||
|
||||
## Findings repaired before this conclusion
|
||||
|
||||
1. **Known edit-file attribution was lost.** Initial `rename.rs` SHA256 `effd0d2bb980347ff110647ed05557ecc0abfe6f54c9dc09e9fa2894ace90789` converted all construction errors with `file: None`. An edit-map entry-limit refusal at an included-file token therefore discarded known provenance and fell back to the entry/default span. Final lines14,88,102,121–123 capture `Some(location.file)` / `Some(key.0)` immediately before each selected edit insertion and carry it through `Failure::index`. Global target/name/namespace failures keep the honest no-specific-file fallback. The existing helper continues validating canonical file/range/UTF-8 before diagnostic slicing.
|
||||
2. **Calculation payload equality preceded parameter shape.** Initial code compared result/body before parameter length/ordered identity/type checks. The E bound was still safe, but this contradicted the accepted shape-first gate. Final lines361–374 check length and each parameter's ID/type at the same Vec position before result/body equality.
|
||||
|
||||
Both repairs were read back directly. Required runtime controls should reach an included-file edit-allocation refusal with its real token span, and a parameter-shape mismatch before body comparison. No claim that those controls have run is made here.
|
||||
|
||||
## Correctness and authority assessment
|
||||
|
||||
- **Ownership (`rename.rs:6–13,125–130,150–174`):** the plan consumes AuthoredMixedProject, borrows one external immutable desired Project, and owns exactly sparse changed-name and physical-edit maps. Name slices borrow the target, never another field in the plan. Accessors are read-only; no loose-parts constructor, caller Budget, legacy Index conversion, mutable map, emitter or installation authority exists. A failed construction/validation drops the entire consumed attempt.
|
||||
- **Whole target (`:319–449`):** exhaustive struct patterns cover all alias/name-exempted records. Map lengths and sorted keys are compared before corresponding records, whose own IDs are also checked. Project metadata/collection identity, definition variants and non-name data, ordered parameter shape, element/relation bodies, every diagram/node non-alias field, artifacts and complete trace baselines remain fixed. Historical content is compared opaquely, never rewritten. Current PartialEq semantics apply consistently, including signed zero in geometry, ordinary real data and historical carriers.
|
||||
- **E reservation (`:16–24`):** reserves the complete retained raw-expression-site count before `same_project`, releases after all equality vectors finish, and never traverses an unpaired target-only Expr on a variant mismatch. The complete four-root reachability/frontier proof in [RENAME-PLAN-CRITIQUE.md](RENAME-PLAN-CRITIQUE.md) still applies. E=0 cannot invoke Expr equality from the admitted original. The bound is conservative logical live slots, not allocation capacity/RSS, and can refuse a no-op without headroom.
|
||||
- **Names (`:31–83,450–489`):** visitation covers project, definitions and scoped parameters, elements, relations, diagrams and nested nodes, artifacts and traces, matching the authenticated catalog. Only changed names are retained. Checked cumulative candidate byte lengths precede alias-character validation. The namespace set includes changed and unchanged catalog members, separates globals from each calculation's parameters, permits final swaps and rejects changed-to-unchanged collisions. Unchanged plans skip this scratch set using the admitted namespace invariant.
|
||||
- **Exact edits (`:84–147,182–258`):** both complete occurrence families contribute every changed qualified target. Insertions reserve before growth and reject duplicate physical keys. Validation checks original file/target membership, changed-name membership, nonempty exact original Word token/spelling and same-file sorted nonoverlap. Rescanning both source families requires every selected key with the correct target; required-count equality excludes extra edits without another seen set. Full reference extents, markers and trivia never become replacement ranges. This relies on sealed original occurrence completeness, as specified; it does not claim detection of arbitrary coordinated corruption of that source projection.
|
||||
- **Current snapshot (`:163–174`):** equality includes SourceBundle entry and the complete path→bytes map. Touched and untouched files, removed/added/renamed paths and changed entry all fail. This is snapshot comparison, not filesystem atomicity.
|
||||
- **Combined sizing (`:259–315`):** a streaming merge uses canonical files and sorted edits, separately checked removed/replacement totals, then subtraction before addition. Every file contributes, including untouched files. The complete output-byte limit is checked once without a separate typed intermediate cap; unknown trailing file keys refuse. There is no lengths map or output allocation.
|
||||
|
||||
## Storage, lifecycle and remaining gates
|
||||
|
||||
Equality scratch E dies before name-map growth. R retained names coexist with the Q-entry borrowed namespace set; the set is explicitly dropped before its reservation releases and before M-edit growth. Final retention is exactly **R+M entries**, zero occurrence slots and zero copied text bytes. Actual additional peak is **max(E,R+Q,R+M)** when namespace validation runs, otherwise the smaller executed phases. There are no typed Path clones, identity vectors, copied model/name strings, per-family batches, sorting buffers or extra seen sets. Refusal after a reservation leaves no reusable witness, so its whole ledger/container attempt dies together.
|
||||
|
||||
Planning uses immutable Budget checks only: it does not parse, charge numeric work or change frame/Usage counters. Whole-target failures use a static diagnostic rather than formatting arbitrary target payloads. File-specific validation errors use the established safe helper. Emission, reread/admission, returned output ownership and history/save remain absent, as required for this planning dependency.
|
||||
|
||||
Compilation must still confirm Rust borrow/type/macro details. Independent complete-map and phase-cap tests must demonstrate actual predecessor admission, namespace and M-growth boundaries, E wide/deep controls, diagnostic attribution, whole-target mutation refusals, stale snapshots, combined shrink/grow sizing and bounded-stack drop. Preserve all inherited full-suite/format failures and legacy Plan/Composition outcomes. This source review is not runtime acceptance, nor acceptance of rewritten source.
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
# Rename planner small-stack investigation
|
||||
|
||||
2026-09-24, Windows gnullvm development test profile, one Cargo job. These are
|
||||
observed diagnostic results; the proposed test repair still requires execution.
|
||||
|
||||
- Source `9388fcf2f0b82daffec93308f42949a612b07330` compiled. Its focused run
|
||||
passed four named tests, then aborted in the 128 KiB deep/wide stress test
|
||||
with `STATUS_STACK_OVERFLOW` (3221225725). It did not complete the test suite.
|
||||
- The exact original artifact (42,074,624 bytes, SHA256
|
||||
`bd927d4653a8915ee72d5df22096d29edb1853c12d929e20056647b05e565956`)
|
||||
subsequently passed all other 16 rename tests. That direct run explicitly
|
||||
skipped the known aborting case and checked the artifact before/after. It
|
||||
does not establish acceptance of the complete 17-test suite.
|
||||
- Diagnostic source `9e8e77e1d81c0e3116fa5777a37792a635bb4317` added flushed
|
||||
phase markers only. The deep case completed admission/indexing, original
|
||||
model cloning, successful planning and plan destruction, then desired-model
|
||||
cloning. It aborted after entering the later collision-rejection operation.
|
||||
- Diagnostic source `8159a17dd7e8083ca6b572e9b63f3a300f0d67fe` additionally
|
||||
bracketed the shared rejection helper. Its final emitted marker is
|
||||
`rename rejected helper: entered; before authored`. There is no
|
||||
`after authored; before plan` marker. The overflow therefore occurred while
|
||||
rebuilding the source through that nested helper, before the colliding plan
|
||||
invocation. These markers do not identify a particular internal parser
|
||||
instruction, exact compiler frame size, or general application-stack defect.
|
||||
|
||||
The proposed narrow repair constructs each fresh source directly in the small
|
||||
worker and invokes/matches the planner directly. It preserves the 128 KiB stack,
|
||||
128-site deep and 129-site wide fixtures, full admission on that worker,
|
||||
successful planning/destruction, post-equality collision refusal/destruction and
|
||||
non-name refusal/destruction. It does not enlarge the stack, reduce expression
|
||||
sizes, move the tested pipeline to another thread or omit failed cases.
|
||||
|
||||
Production rename code remained SHA256
|
||||
`3ce74331c962abfbf63ca7f72b286405b1ca8b266335d77c71103c900cb6e9dd`
|
||||
through all three source snapshots. Original and diagnostic logs/receipts,
|
||||
committed-input manifests and exact launchers remain in
|
||||
`.local/analysis-mixed-rename-plan-gates-20260924` until portable publication.
|
||||
|
||||
## Further observed results and scoped evaluator decision
|
||||
|
||||
The direct-call repair `70c20c39de4d87633a3275fda3f2bc54b20e50b7` and compact
|
||||
case-loop `f1c095654a5f2a8e1592415b1392644b27169e00` both still aborted in the
|
||||
same test. Neither is accepted as a repair. Read-only prologue inspection found
|
||||
worker stack allocations of 10,872 and 5,976 bytes respectively; reducing that
|
||||
one frame did not establish full-pipeline success. These are static observations,
|
||||
not complete call-stack size measurements.
|
||||
|
||||
Three LLDB runs used the exact f1 artifact (42,076,160 bytes, SHA256
|
||||
`b804768eccb350033fcfd01516d0c3253e43525718f42de7c75cda9a3d91c6fe`).
|
||||
The first stopped on overflow without executing a backtrace command. The second
|
||||
completed the exact single test successfully under the debugger; the third
|
||||
overflowed and captured all threads before explicitly killing its owned debuggee.
|
||||
Debugger process exit zero is not a passing test gate. The differing outcomes
|
||||
show that this stack boundary is environment-sensitive; no cause for that
|
||||
variation is claimed.
|
||||
|
||||
The third backtrace places the fault in Windows heap allocation reached through
|
||||
BigInt parsing, `Exact::parse_decimal`, `Budget::exact`, `Cursor::exact_literal`,
|
||||
`syntax::binding`, `declarations::parse`, `State::parse_typed`, `Parser::unit`,
|
||||
`mixed::parse_with_profile`, the original admission helper, and this test's
|
||||
`authored` setup. The rename planner is not on that active stack. Native system
|
||||
symbol labels lack full OS debug symbols and should not be treated as precise
|
||||
source attribution; the executable's Rust frames establish the setup path.
|
||||
|
||||
Independent evaluator review distinguishes the accepted planner-specific
|
||||
requirement (small-stack comparison, success/drop and late refusal) from a
|
||||
stronger full-pipeline stack claim. Prepare each fresh owner and externally
|
||||
owned desired model on the normal test thread, then move the complete owner
|
||||
into a scoped 128 KiB worker. That worker must invoke the planner, check exact
|
||||
outcomes and destroy its plan/failure/consumed source. Desired remains an
|
||||
external immutable borrow. All six deep/wide and success/collision/non-name
|
||||
cases remain required, with unchanged profiles and expression counts.
|
||||
|
||||
This scoped evaluator remains pending runtime validation. It will not fix or
|
||||
validate the previously failing combined parser/setup path on 128 KiB. Preserve
|
||||
that limitation and the failed attempts; existing standalone admission/index
|
||||
small-stack tests are separate evidence only.
|
||||
|
||||
## Final scoped result
|
||||
|
||||
Source `18073a6f2eabce83fc83997f094e331eec835a16` implements that scoped test.
|
||||
All 17 focused tests pass, including all six 128 KiB planner cases. The full
|
||||
246-name run completes with 230 passed and the same 16 inherited failures.
|
||||
Existing standalone small-stack cases keep their prior outcomes. The new test
|
||||
artifact is 42,081,792 bytes, SHA256
|
||||
`2c8bd7b9a6adfda3f74b74bae00453b1b1348cbed47f04c8e8c1de9152899416`.
|
||||
Strict core all-target Clippy passes; formatting retains the identical prior
|
||||
failure bytes. These results establish the scoped planner behavior, not repair
|
||||
of the separately recorded full-pipeline 128 KiB setup failure.
|
||||
@@ -0,0 +1,61 @@
|
||||
# Independent rename-plan test review
|
||||
|
||||
2026-09-24. Reviewed settled `crates/oa-core/src/language/analysis_source/mixed/project/ordinary_index/rename/tests.rs` in `.local/as3batch`; final raw SHA256 **db20c27456ce264f02c2462c5b7c8790a5583d6d5ad7b0d6fc7820722083fb0f**. Reread final freeze after the earlier8d6209 snapshot: rich failing-cap assertion now explicitly requires main.arcadia412..413; formatting/line endings were normalized. **No remaining material test/oracle discrepancy found in these 17 tests.** Compilation and actual same-profile admission/refusal remain pending parent gates. This review did not run Cargo, source tests, archived evaluators or application pipelines, edit implementation/tests, commit or publish.
|
||||
|
||||
## Independent expectations
|
||||
|
||||
Compared tests with accepted root rename contract and independently authored `RENAME-PLAN-ORACLE.md` / `rename_plan_bytes.py`, not production-generated expected maps.
|
||||
|
||||
- OA/SA entire changed-name maps exactly match all11/12 qualified swaps. Complete physical maps match all27/28 original-coordinate tuples, including both cross-family reference directions, canonical a/b coincident offsets, both calculation parameter scopes, and reordered/repeated/nested call labels. Unicode-prefix/full-CRLF variants use independently authored exact endpoint arrays. Output sums900/943/974/1017 and retention38/40 are correct.
|
||||
- Category literal full map equals all36 authored tuples for15 changed global targets. Corrected real line-comment-separated parent reference selects only344..345; implicit parent, historical UUID, display/prose/URI/guard text contribute no extra edit. Complete desired-name map, output2145 and retention51 match the oracle. Expectations are explicit literals, not copies of produced occurrence/edit maps.
|
||||
- No-op checks external desired pointer, original bundle pointer, original model, zero edits/names, unchanged complete storage/usage/numeric counters and900 bytes. Rich success checks borrowed desired-name storage and untouched original/desired models. These are planning checks, not emitted/reparsed-source acceptance.
|
||||
|
||||
## Inherited budgets and sizing
|
||||
|
||||
The38/37 test constructs a new parsed/resolved/typed-indexed/ordinary-indexed owner under the **same supplied inherited profile** before planning. It compares the admitted baseline then requires success retaining38 or exact entry-limit failure. There is no replacement/tightening of an accepted owner's budget. Independent arithmetic remains B=L+65, prior known peaks <=L+97 resolver/L+98 typed/L+93 ordinary, planning L+103; both caps L+102/+103 clear predecessors. Runtime must confirm the fixture actually reaches planning.
|
||||
|
||||
Additional relocated diagram fixture uses a fresh fourth canonical `z.arcadia`, preserves full model and sets the inherited B+37 profile through every predecessor. It requires failure in that included file at8..9, with exact limit diagnostic. This detects loss of canonical-file attribution on a late reservation. Its literal diagram relocation is ordinary valid include syntax; actual admission is not claimed before gates.
|
||||
|
||||
The930-byte case uses31 original n bytes, ordinary shrink30 and three typed f occurrences. Final `renamed_f` result924 must fit despite typed-only954; `renamed_func` result933 must fail930. Untouched b.arcadia's213 bytes are included. The test rebuilds the entire input pipeline under bytes930 and leaves other limits unrestricted. It does not disguise a predecessor failure: any such refusal fails the test before planning. Four edits and positive output924 are asserted; negative requires the exact output-byte-limit message.
|
||||
|
||||
Wide/deep fixtures independently count128 unary-chain sites and129 list sites; successful no-op equality, subsequent collision refusal and binding-variant refusal occur on a128KiB thread. Zero-E original refuses target-only2048-deep/4096-wide Expr variants. Nonzero-E list length growth/shrink and call argument removal reach matching-variant equality paths. These exercise the conservative E policy but do not establish a separate E/E-minus-one global-cap boundary. The rich no-op cannot isolate that boundary because its predecessor typed peak is larger, as already documented in the oracle. No contrary claim is made.
|
||||
|
||||
## Whole-target and authority controls
|
||||
|
||||
Mutation groups cover project schema/identity/prose; collection removals/key changes; element identity/prose/parent/body; definition identity/prose/calculation parameter ordered identity/count/type/result/body; diagram identity/prose/layer/projection/view options/routes/nodes; node identity/element/geometry/collapse/port anchors; relation identity/prose/body; artifact identity/prose/owner/relation/URI/revision/fragment; trace identity/prose/endpoints/kind/baseline/semantic/history. QuantityKind algebra, Unit symbol and definition-body variant are explicit direct `same_project` controls; their deliberately synthesized Projects are not represented as admitted runtime fixtures.
|
||||
|
||||
Geometry signed zero is supplemented by admitted-source OA/SA Real minimum/default and historical RealMinimum values changing+0 to-0. Source inspection supports the fixture syntax: ordinary Real/Value encoding is valid; TraceKind::Item permits DataType↔DataType with canonical OA/SA endpoints; finite0/1 bounds and0 defaults are compatible. These facts remove a likely authoring error, but only pending gates establish actual admission. No non-name source rewriting is authorized by equality.
|
||||
|
||||
Final namespace tests distinguish changed→unchanged global collision, scoped collision, invalid/reserved/Unicode alias, and same spelling in separate scopes. Complete-bundle checks reject changed entry, missing/extra/path-renamed files, touched-byte changes and changed **untouched** a.arcadia bytes.
|
||||
|
||||
Corruption checks include missing/extra/wrong-target/out-of-file/empty/invalid UTF-8/extended-overlapping ranges. Safe fallback span/path are asserted for the malformed UTF-8 and missing file. Crucially, the final added scoped corruption substitutes P(11,1) for P(10,1) at main299..300: identical original x and desired y spellings cannot mask the wrong callee identity, and the test requires the exact missing-required-target diagnostic at the original file/span. Another added control inserts a valid unchanged node token and requires unchanged-target refusal. These reach deeper authority checks than simple f/g spelling mismatch.
|
||||
|
||||
## Findings resolved before gates
|
||||
|
||||
Initial wide expression test used unsupported `List<Number>`; reported to implementer and corrected to **List(Number)**, consistent with declarations grammar and existing literal tests. Initial wrong-target corruption failed on different f/g spelling before qualified association; the same-spelling scoped case now addresses that gap. Missing scalar/historical signed-zero, port-anchor, opaque definition and nonzero list/call-size controls were added and reread. No expectations were weakened to match runtime output; no runtime output existed during this review.
|
||||
|
||||
Parent must preserve all prior229-name outcomes (213pass/16known failures), original formatting failure and explicit source pin, and reconcile each new named test from actual logs. This is source-level evaluator review, not evidence that these tests compile/pass or that output emission, public source8, persistence, history or GUI/API parity is complete.
|
||||
|
||||
## Narrow small-stack repair rereview — source70c20c3
|
||||
|
||||
After the initial source9388fcf2f0b82daffec93308f42949a612b07330 compiled but aborted its focused run on the small-stack test, the parent retained that failure, the exact original-artifact remaining16 passes, and diagnostic9e8e77e1/8159a17d attempts. The reported final markers locate overflow inside `rejected` helper's fresh `authored(bundle)` setup before that invocation entered rename planning. This identifies a test setup call boundary, not a proven compiler frame-size or cloning cause. Original hash/disposition above remains history, not a claim of17 passing tests.
|
||||
|
||||
Read immutable diff9388fcf2f0b82daffec93308f42949a612b07330→70c20c39de4d87633a3275fda3f2bc54b20e50b7. Exactly two files change: the small-stack test and its implementation-note failure/repair account. No production or other test/oracle change. Final test bytes SHA256 **629fed6da8c59c9b5f3dd980f46476ce094cb6119841966492f623dd8d81f7af**.
|
||||
|
||||
The test now directly constructs each fresh owner in the worker and matches the collision/non-name planning failure there, instead of nesting that entire admission chain in the general rejection helper. It explicitly asserts the complete failure messages, drops failure/desired before the next case, and drops original at iteration end. Still128KiB,128 deep unary sites and129 wide list sites; complete parsing/resolution/both indexes remain on that same worker. Successful plan/drop and both failure/drop paths remain for both shapes. No `forget`, larger thread, smaller fixture or skipped failure path replaces them. This is a faithful narrow setup repair; no further test change is requested from this review. All17 repaired focused tests and broader same-source gates remain pending parent verification; no runtime checker was executed here.
|
||||
|
||||
## Compact case-loop candidate — sourcef1c0956
|
||||
|
||||
Parent subsequently observed another stack overflow at70c20c3; its source review above is **not runtime acceptance** and that failed attempt remains preserved. Read only the immutable70c20c3→f1c095654a5f2a8e1592415b1392644b27169e00 test/note delta. The new loop shares one source/desired/result local layout for modes0 unchanged,1 final-namespace collision,2 non-name Binding mutation. Each mode independently admits the full source on the same128KiB worker, verifies128/129 old expression sites, clones its desired model, runs planning, checks the appropriate success or complete diagnostic, and drops plan/failure plus desired. Both original deep/wide literals remain; all17 test names remain. No semantic case, source-admission stage or ownership/drop boundary was removed. No coverage objection to this narrow candidate.
|
||||
|
||||
The parent's observed70c executable fixed prologues (worker10872B, authored2984B, rejected1800B) are evidence about that binary's fixed frames, not an actual runtime call stack or exact overflow instruction. A shared-layout hypothesis motivates this candidate but is not a verified sole cause. This review did not execute tests or the frame inspector; f1c runtime and any compiled-frame comparison remain parent-owned and pending.
|
||||
|
||||
## Planner-scoped worker rereview — source18073a6
|
||||
|
||||
The f1c compact candidate also overflowed; it is not accepted as a repaired combined pipeline. Parent subsequently reported debugger observations locating the failing f1c run3 inside upstream exact-literal parsing/BigInt allocation before rename planning, with one pass under debugger among three debugger runs. These parent observations explain the evaluator-scope decision; this source review did not independently replay the debugger, and a debugger pass is not ordinary runtime acceptance.
|
||||
|
||||
Read immutable diff f1c095654a5f2a8e1592415b1392644b27169e00→18073a6f2eabce83fc83997f094e331eec835a16. Test hash **fa455ea90d9d220a18fa7eee9179eb5cc5895a5f7350197884126c66c18b60f7**. Only the small-stack evaluator and implementation-note explanation change; production remains unchanged.
|
||||
|
||||
The actual code faithfully implements the independently reviewed narrower gate: for each deep128/wide129 shape and each of three outcomes it builds a fresh full admitted owner on the normal test thread, checks old expression count, creates the desired intent, then calls `spawn_scoped` with128KiB and a **move** closure capturing the owner plus borrowed `&desired`. `plan_rename` runs inside that closure. Success requires mode0, empty edits and the exact desired borrow, then explicitly drops the plan in the worker. Failure requires nonzero mode, one exact collision/non-name diagnostic and drops the failure in the worker; the consumed original owner is destroyed inside failed planning. The closure returns only unit. The scope joins before the external desired Project drops. No policy or live ledger is replaced and no source/edit authority escapes for destruction on a larger stack.
|
||||
|
||||
This is faithful to the accepted **planner comparison/success-drop/late-refusal** gate, not proof of full upstream admission on128KiB. All six planner cases, both old expression sizes and128KiB remain. The full-pipeline failed observations stay an explicit unresolved environment-sensitive stack boundary; existing independent admission/index small-stack tests do not erase them. No further source change requested by this bounded review. All17 final focused tests and five-gate runtime reconciliation still await parent readiness; no checker or Cargo was executed here.
|
||||
Binary file not shown.
@@ -0,0 +1,134 @@
|
||||
"""Reconcile committed Windows rename-plan gates against raw logs and prior outcomes."""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
base = Path(__file__).resolve().parents[2]
|
||||
root = base / '.local/as3batch'
|
||||
directory = base / '.local/analysis-mixed-rename-plan-gates-20260924'
|
||||
prior = base / '.local/analysis-ordinary-index-gates-20260924'
|
||||
source, stem, expected_added = sys.argv[1], sys.argv[2], int(sys.argv[3])
|
||||
assert expected_added == 17
|
||||
assert re.fullmatch(r'[0-9a-f]{40}', source)
|
||||
assert re.fullmatch(r'[a-zA-Z0-9-]+', stem)
|
||||
sha = lambda raw: hashlib.sha256(raw).hexdigest()
|
||||
|
||||
def git(*args):
|
||||
return subprocess.check_output(['git', '--no-replace-objects', *args], cwd=root)
|
||||
|
||||
def receipt(folder, name):
|
||||
path = folder / (name + '.result.json')
|
||||
data = json.loads(path.read_bytes())
|
||||
raw = (folder / (name + '.log')).read_bytes()
|
||||
assert data['log_sha256'] == sha(raw)
|
||||
return data, raw
|
||||
|
||||
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 = 0
|
||||
expected_inputs = []
|
||||
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 (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']
|
||||
focus = 'language::analysis_source::mixed::project::ordinary_index::rename::tests::'
|
||||
commands = {
|
||||
'focused': prefix + [focus, '--', '--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'],
|
||||
}
|
||||
verified = {}
|
||||
all_receipts = {}
|
||||
for mode, command in commands.items():
|
||||
name = f'rename-{mode}-{stem}-1'
|
||||
data, raw = receipt(directory, name)
|
||||
assert data['source'] == data['head_after'] == source
|
||||
assert data['mode'] == mode and data['command'] == command
|
||||
assert not data['changed_inputs'] and not data['verification_failures']
|
||||
manifest_raw = (directory / data['inputs']).read_bytes()
|
||||
assert sha(manifest_raw) == data['inputs_sha256']
|
||||
assert json.loads(manifest_raw) == {'source': source, 'inputs': expected_inputs}
|
||||
launcher = (directory / data['launcher_copy']).read_bytes()
|
||||
assert sha(launcher) == data['launcher_sha256'] == data['launcher_sha256_after']
|
||||
assert source.encode() in launcher
|
||||
env = data['environment']
|
||||
assert env['CARGO_BUILD_JOBS'] == '1' and env['CARGO_INCREMENTAL'] == '0'
|
||||
assert env['ARCADIA_CODEC_LIFECYCLE_PHASE'] is None and env['RUST_MIN_STACK'] is None
|
||||
assert data['cwd'] == str(root)
|
||||
text = raw.decode()
|
||||
outcomes = re.findall(r'^test ([^\r\n]+) \.\.\. (ok|FAILED|ignored)\r?$', text, re.M)
|
||||
assert outcomes == [tuple(x) for x in data['outcomes']]
|
||||
assert len(outcomes) == len(dict(outcomes))
|
||||
members = re.findall(r'^([^\r\n]+): test\r?$', text, re.M) if mode == 'list' else []
|
||||
assert members == data['listing_members'] and len(members) == data['listing_count']
|
||||
assert len(members) == len(set(members))
|
||||
if mode == 'list':
|
||||
assert len(members) == 229 + expected_added
|
||||
if mode in ('focused', 'full'):
|
||||
counts = tuple(sum(v == state for _, v in outcomes) 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;', text, 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]) == (229 if mode == 'focused' else 0)
|
||||
assert data['exit'] == (101 if counts[1] else 0)
|
||||
assert len(data['artifacts']) == 1
|
||||
for artifact in data['artifacts']:
|
||||
actual = Path(artifact['path']).read_bytes()
|
||||
assert len(actual) == artifact['bytes'] and sha(actual) == artifact['sha256']
|
||||
assert str(Path(artifact['path'])).replace('\\', '/') in text.replace('\\', '/')
|
||||
all_receipts[mode] = data
|
||||
verified[name] = {'source': source, 'exit': data['exit'], 'outcomes': len(outcomes), 'listing': len(members), 'log_sha256': sha(raw), 'result_sha256': sha((directory / (name + '.result.json')).read_bytes())}
|
||||
|
||||
old, old_raw = receipt(prior, 'ordinary-full-ee50090-1')
|
||||
assert old['source'] == 'ee500908e3d77182ddd54e12524f9b6c6eb43b60'
|
||||
old_actual = re.findall(r'^test ([^\r\n]+) \.\.\. (ok|FAILED|ignored)\r?$', old_raw.decode(), re.M)
|
||||
assert old_actual == [tuple(x) for x in old['outcomes']]
|
||||
assert len(old_actual) == len(dict(old_actual)) == 229
|
||||
old_out = dict(old['outcomes'])
|
||||
new_out = dict(all_receipts['full']['outcomes'])
|
||||
assert len(old_out) == 229 and len(new_out) == 229 + 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 and all(new_out[k] == 'ok' and k.startswith(focus) 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)
|
||||
assert all_receipts['clippy']['exit'] == all_receipts['list']['exit'] == all_receipts['focused']['exit'] == 0
|
||||
assert all_receipts['fmt']['exit'] == 1
|
||||
|
||||
def failure_blocks(raw):
|
||||
text = raw.decode().replace('\r\n', '\n')
|
||||
return {m[1]: re.sub(r"(?m)^(thread '[^\n]*') \(\d+\) panicked", r'\1 (<PID>) panicked', m[2]).strip()
|
||||
for m in re.finditer(r'^---- ([^\n]+) stdout ----\n(.*?)(?=^---- |^failures:|\Z)', text, re.M | re.S)}
|
||||
|
||||
new_raw = (directory / f'rename-full-{stem}-1.log').read_bytes()
|
||||
old_blocks, new_blocks = failure_blocks(old_raw), failure_blocks(new_raw)
|
||||
assert len(old_blocks) == len(new_blocks) == 16 and old_blocks == new_blocks
|
||||
old_fmt, old_fmt_raw = receipt(prior, 'ordinary-fmt-ee50090-1')
|
||||
fmt_raw = (directory / f'rename-fmt-{stem}-1.log').read_bytes()
|
||||
assert fmt_raw == old_fmt_raw
|
||||
result = {'source': source, 'baseline': old['source'], 'inputs': len(expected_inputs),
|
||||
'unchanged_old_outcomes': 229, 'added_passed': expected_added,
|
||||
'full_passed': sum(v == 'ok' for v in new_out.values()),
|
||||
'identical_failure_blocks_after_pid_only_normalization': 16,
|
||||
'identical_fmt_sha256': sha(fmt_raw), 'receipts': verified,
|
||||
'scope': 'Read-only committed-input/raw-log/artifact comparison; no Cargo execution.'}
|
||||
destination = Path(__file__).with_name('RENAME-PLAN-RUNTIME-READBACK.json')
|
||||
assert not destination.exists(), 'Preserve previous readback; use a separately named checker for another source.'
|
||||
destination.write_text(json.dumps(result, indent=2) + '\n', encoding='utf-8')
|
||||
print(json.dumps(result, indent=2))
|
||||
@@ -0,0 +1,315 @@
|
||||
{
|
||||
"source": "18073a6f2eabce83fc83997f094e331eec835a16",
|
||||
"scope": "Private complete-target rename planning only. 17 new tests and strict Clippy pass; full library has 230 passed/16 inherited failures and formatter remains failed. Prior setup stack overflows are unresolved and preserved; scoped planner gate passes.",
|
||||
"archive": {
|
||||
"file": "evidence.zip",
|
||||
"bytes": 584235,
|
||||
"sha256": "1c041d181540b474e14e80677cfe287d305951eaee48e492de7f59dcdea2391c"
|
||||
},
|
||||
"members": {
|
||||
"baseline/launchers/2b88d5006c81dcfb801e45559ae2e7bd948d5897f04ea1d1f34a3d42bcdd5efe.py": {
|
||||
"bytes": 7637,
|
||||
"sha256": "2b88d5006c81dcfb801e45559ae2e7bd948d5897f04ea1d1f34a3d42bcdd5efe"
|
||||
},
|
||||
"baseline/ordinary-fmt-ee50090-1.inputs.json": {
|
||||
"bytes": 102544,
|
||||
"sha256": "fd3bb5cb81341352f781587b747c6272287e71570491b6e916ce71370a1d89d6"
|
||||
},
|
||||
"baseline/ordinary-fmt-ee50090-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"baseline/ordinary-fmt-ee50090-1.result.json": {
|
||||
"bytes": 1883,
|
||||
"sha256": "08e5bcecc03f14d50050b5d7c2116488916beea9cf651ffff35fc3d0abd79782"
|
||||
},
|
||||
"baseline/ordinary-full-ee50090-1.inputs.json": {
|
||||
"bytes": 102544,
|
||||
"sha256": "fd3bb5cb81341352f781587b747c6272287e71570491b6e916ce71370a1d89d6"
|
||||
},
|
||||
"baseline/ordinary-full-ee50090-1.log": {
|
||||
"bytes": 38279,
|
||||
"sha256": "d2203c5ca80ad304aadabe623e6a088fb4261f3f59d077fee24b46692417597c"
|
||||
},
|
||||
"baseline/ordinary-full-ee50090-1.result.json": {
|
||||
"bytes": 33238,
|
||||
"sha256": "61ec0aa942f1cc527b3947b0b72ad83ac697058a03cc9137f62243477105dcf9"
|
||||
},
|
||||
"baseline/ordinary-list-ee50090-1.inputs.json": {
|
||||
"bytes": 102544,
|
||||
"sha256": "fd3bb5cb81341352f781587b747c6272287e71570491b6e916ce71370a1d89d6"
|
||||
},
|
||||
"baseline/ordinary-list-ee50090-1.log": {
|
||||
"bytes": 25017,
|
||||
"sha256": "7b53e4dc83a29b26c4d6419b01e0a66e4b2592bbee947f85e6cae8cbbd692325"
|
||||
},
|
||||
"baseline/ordinary-list-ee50090-1.result.json": {
|
||||
"bytes": 27208,
|
||||
"sha256": "9c966f748893e4275bf36f6036036fd9199e3f5c05228c9e4e0a9bb97bebdf53"
|
||||
},
|
||||
"diagnostics/debug_stack_f1c0956.py": {
|
||||
"bytes": 1697,
|
||||
"sha256": "26208c9084171b1df1a2224737f2ae97060f06946c9820a6063914cab527bac8"
|
||||
},
|
||||
"diagnostics/debug_stack_f1c0956_v2.py": {
|
||||
"bytes": 1736,
|
||||
"sha256": "025019993240998528484a40f26a236839ebaee0e4b19a38fda1a4bc79599260"
|
||||
},
|
||||
"diagnostics/debug_stack_f1c0956_v3.py": {
|
||||
"bytes": 1736,
|
||||
"sha256": "14ccecdc03708d236f07b9ec8b8120983de8c9af590514b3f0ea64af8f20ecd0"
|
||||
},
|
||||
"diagnostics/inspect_stack_frames.py": {
|
||||
"bytes": 1803,
|
||||
"sha256": "14e3ca116eea0634fd5435278d48e48322489166ae280aae03c7fcb9255cb1d4"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-1.log": {
|
||||
"bytes": 1318,
|
||||
"sha256": "22f158952b553a00b1352439411b9182c852b35441fd391b686e07a7f052f35a"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-1.result.json": {
|
||||
"bytes": 1192,
|
||||
"sha256": "aae612c939444e58109ef64500a735264b24576a56bcbddaa26822ed0058fd0e"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-2.log": {
|
||||
"bytes": 1054,
|
||||
"sha256": "4d707adebbd3c65b89aa558a99d86b463dadffcced6a9a1e98e50bdca1b77f1f"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-2.result.json": {
|
||||
"bytes": 1246,
|
||||
"sha256": "be1b0821eee8277bfba134d627cea98bb9bf2eac681a738b38987ad8f41552c4"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-3.log": {
|
||||
"bytes": 12555,
|
||||
"sha256": "f10d5bcf20b0c4d64cb5e07eacfe7d19999a594f55a033e1e9df7b0ca79ffca0"
|
||||
},
|
||||
"diagnostics/rename-debugger-f1c0956-3.result.json": {
|
||||
"bytes": 1246,
|
||||
"sha256": "3cd9af18242589b5a3e0e27410b91c69039bdcc48c8d1d7402de5ec7a2a80fd0"
|
||||
},
|
||||
"diagnostics/rename-focused-70c20c3-1.stack-frames.json": {
|
||||
"bytes": 8123,
|
||||
"sha256": "74b596478394d38470af60f45360b06a5b3cd4128fb4d0be85088b6d1e33dabf"
|
||||
},
|
||||
"diagnostics/rename-focused-f1c0956-1.stack-frames.json": {
|
||||
"bytes": 8185,
|
||||
"sha256": "2d2a48a75dc9b51124b8a312e5b22da6ef2ac7d42bddd18d8b8c03d6a3add411"
|
||||
},
|
||||
"diagnostics/rename-remaining-9388fcf-1.log": {
|
||||
"bytes": 2634,
|
||||
"sha256": "5ce011d7c1d09165363c44fb3dc248c3aaa8b916ce1a2bac0896a76d6814501c"
|
||||
},
|
||||
"diagnostics/rename-remaining-9388fcf-1.result.json": {
|
||||
"bytes": 1265,
|
||||
"sha256": "a4a0f56d3ed206cfb8c6ae12337210931041ec1633e4ab93fb5953e665f811e8"
|
||||
},
|
||||
"diagnostics/run_remaining_9388fcf.py": {
|
||||
"bytes": 2088,
|
||||
"sha256": "edcb1ff785c18cb4ac74f2a634b834026eedb48cfeb9f4e4eecf598d55f18919"
|
||||
},
|
||||
"diffs/9388fcf-to-18073a6.patch": {
|
||||
"bytes": 10183,
|
||||
"sha256": "d2254917fa0afb43aac140b9ae25de2fd685aa4b13c963a7bf51aec916e10db6"
|
||||
},
|
||||
"diffs/ee50090-to-18073a6.patch": {
|
||||
"bytes": 64770,
|
||||
"sha256": "aac5271ecba3cb96552a8feef7e2ede74cf6595649aad1a8b82c36e68780c201"
|
||||
},
|
||||
"gates/launchers/70bfe2c244c5c635ef312facb29ae8d3c8fece780152dfdce55b9d607c06cbb8.py": {
|
||||
"bytes": 7705,
|
||||
"sha256": "70bfe2c244c5c635ef312facb29ae8d3c8fece780152dfdce55b9d607c06cbb8"
|
||||
},
|
||||
"gates/launchers/74587d050ab4d6130860afa961d2b2671023c20f439f282be34dba480663de86.py": {
|
||||
"bytes": 7674,
|
||||
"sha256": "74587d050ab4d6130860afa961d2b2671023c20f439f282be34dba480663de86"
|
||||
},
|
||||
"gates/launchers/843069930cd44278eef940930369b5a85a3b3412e1e50793d78d3d5738298fbe.py": {
|
||||
"bytes": 7674,
|
||||
"sha256": "843069930cd44278eef940930369b5a85a3b3412e1e50793d78d3d5738298fbe"
|
||||
},
|
||||
"gates/launchers/983f5ed90dce17ab2d7d58c08ddf08f0cc752dea834d35438dbe073caa9d9afe.py": {
|
||||
"bytes": 7656,
|
||||
"sha256": "983f5ed90dce17ab2d7d58c08ddf08f0cc752dea834d35438dbe073caa9d9afe"
|
||||
},
|
||||
"gates/launchers/ae5f20a826db19c56c38a7e802deec77252cfb63b075bba095b1cb1f7de152dc.py": {
|
||||
"bytes": 7705,
|
||||
"sha256": "ae5f20a826db19c56c38a7e802deec77252cfb63b075bba095b1cb1f7de152dc"
|
||||
},
|
||||
"gates/launchers/ce7f270d1f1167bf479255a9a803254a0c8c3f74d551c410dd6513cf5ff4447f.py": {
|
||||
"bytes": 7674,
|
||||
"sha256": "ce7f270d1f1167bf479255a9a803254a0c8c3f74d551c410dd6513cf5ff4447f"
|
||||
},
|
||||
"gates/rename-clippy-18073a6-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff"
|
||||
},
|
||||
"gates/rename-clippy-18073a6-1.log": {
|
||||
"bytes": 165,
|
||||
"sha256": "5f9c5607b71d64c343e6be3278aeba235ce95af6b9d28d8de7e2679560afa663"
|
||||
},
|
||||
"gates/rename-clippy-18073a6-1.result.json": {
|
||||
"bytes": 1968,
|
||||
"sha256": "b03333e034e3668444603f71ee253d5058412b98b95507ed8d1a13e2a1439390"
|
||||
},
|
||||
"gates/rename-diagnostic-8159a17-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "751638cab87181471f2de6d0effe4f791880dbc2bb8f1747ce50e94823c01041"
|
||||
},
|
||||
"gates/rename-diagnostic-8159a17-1.log": {
|
||||
"bytes": 1374,
|
||||
"sha256": "5adeb05bb91878a090297c7a0580609ed8d98d9fdb5eb73039214ae0d5b35e5d"
|
||||
},
|
||||
"gates/rename-diagnostic-8159a17-1.result.json": {
|
||||
"bytes": 2540,
|
||||
"sha256": "0631fa66b6a172f43a103460128da7461cc2ef8a02ce4c6c12b3462f932e1dd3"
|
||||
},
|
||||
"gates/rename-diagnostic-9e8e77e-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "87c5f990b15291ff1cb4a97cd8c6b3c5e84fdd240294f250cd72ad8aa0cd40e0"
|
||||
},
|
||||
"gates/rename-diagnostic-9e8e77e-1.log": {
|
||||
"bytes": 1325,
|
||||
"sha256": "c4093678295bae3ef37ec125e707069187ca2d52dac6f09a00eaf3b28313a705"
|
||||
},
|
||||
"gates/rename-diagnostic-9e8e77e-1.result.json": {
|
||||
"bytes": 2540,
|
||||
"sha256": "0e0f4bb7db5d756fb988e101f619d49083a24f9e60fba8f2c8b50227299ff9c0"
|
||||
},
|
||||
"gates/rename-fmt-18073a6-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff"
|
||||
},
|
||||
"gates/rename-fmt-18073a6-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"gates/rename-fmt-18073a6-1.result.json": {
|
||||
"bytes": 1881,
|
||||
"sha256": "2f2ed68a8b90f5908d309c7a7cf6fd2d275dc3286a4b5dd518bf0d60e33e13c7"
|
||||
},
|
||||
"gates/rename-fmt-70c20c3-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "ac4b03694673ca205211ac60058feef17d4ff01b4eb51a7a661848e0536b1d13"
|
||||
},
|
||||
"gates/rename-fmt-70c20c3-1.log": {
|
||||
"bytes": 6446,
|
||||
"sha256": "c1c6b12861c8117ce6ffc6d6742ebf92618aafb10160ec6f99d370ca72ebab2d"
|
||||
},
|
||||
"gates/rename-fmt-70c20c3-1.result.json": {
|
||||
"bytes": 1881,
|
||||
"sha256": "0fc82dfbba22c52d8723ed406546dd8b998969a2b476ed9b20dfabdde11a14e9"
|
||||
},
|
||||
"gates/rename-focused-18073a6-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff"
|
||||
},
|
||||
"gates/rename-focused-18073a6-1.log": {
|
||||
"bytes": 3110,
|
||||
"sha256": "193e7d2c82c65f2bb04d1d818835635152b702b5da56cae9c16fc6955f1cf091"
|
||||
},
|
||||
"gates/rename-focused-18073a6-1.result.json": {
|
||||
"bytes": 5413,
|
||||
"sha256": "593d928b792c1f6b0a78c5f1142cfba9ab2645dbef04e21ccefd4b0eec88a50f"
|
||||
},
|
||||
"gates/rename-focused-70c20c3-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "ac4b03694673ca205211ac60058feef17d4ff01b4eb51a7a661848e0536b1d13"
|
||||
},
|
||||
"gates/rename-focused-70c20c3-1.log": {
|
||||
"bytes": 1637,
|
||||
"sha256": "5ec1947d09e48c61c98d2396d176dd6acd6d8f72bbabab5ccca402908ce5faba"
|
||||
},
|
||||
"gates/rename-focused-70c20c3-1.result.json": {
|
||||
"bytes": 3113,
|
||||
"sha256": "9ba95c3a8c9785ce69e2b8b1c504e9557040e8c55612482469b40aed8b97cd85"
|
||||
},
|
||||
"gates/rename-focused-9388fcf-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "7f4d0ec7a21a3a23db234a2329562ba620523c9a84deeb87474e092a88ab468c"
|
||||
},
|
||||
"gates/rename-focused-9388fcf-1.log": {
|
||||
"bytes": 1638,
|
||||
"sha256": "92c0ef7acfaced00ec32a6f66203dd5b7e59fa3c10f844942c0f1e9291dc1a4d"
|
||||
},
|
||||
"gates/rename-focused-9388fcf-1.result.json": {
|
||||
"bytes": 3113,
|
||||
"sha256": "7b7e3fd766806c9054fbbf066913127b711a993302053cee3129728fdd599d81"
|
||||
},
|
||||
"gates/rename-focused-f1c0956-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "c9a3c26dd52513fddd1e803decff24d4886b20991d46d37c040e094f3336850f"
|
||||
},
|
||||
"gates/rename-focused-f1c0956-1.log": {
|
||||
"bytes": 1638,
|
||||
"sha256": "6e0542f463091d5b3924242c1aa4824dc9ab6dd076d22a018b09a9ada81d55d0"
|
||||
},
|
||||
"gates/rename-focused-f1c0956-1.result.json": {
|
||||
"bytes": 3125,
|
||||
"sha256": "f491a11602baee2f03249008221b3cd882c872a87750f94e889dbda5bb8b787a"
|
||||
},
|
||||
"gates/rename-full-18073a6-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff"
|
||||
},
|
||||
"gates/rename-full-18073a6-1.log": {
|
||||
"bytes": 40942,
|
||||
"sha256": "a3fef7c640ec9e59484d15b18a5fc8b9a0c25ca9bf01750b1da4431a101c4eec"
|
||||
},
|
||||
"gates/rename-full-18073a6-1.result.json": {
|
||||
"bytes": 36268,
|
||||
"sha256": "4228f67a45fca37841607d574af9b676d1c144e3a93f6d0dd34bd9c01c625d34"
|
||||
},
|
||||
"gates/rename-list-18073a6-1.inputs.json": {
|
||||
"bytes": 102986,
|
||||
"sha256": "e2c710230fa55bbefb4faeee73dab6b8104ddfb8f0291eef0eba15850799c2ff"
|
||||
},
|
||||
"gates/rename-list-18073a6-1.log": {
|
||||
"bytes": 27578,
|
||||
"sha256": "05e09d5280508a784dd97a894c92b8cdeb202c67592498d253e8f8c33b07e6ae"
|
||||
},
|
||||
"gates/rename-list-18073a6-1.result.json": {
|
||||
"bytes": 29785,
|
||||
"sha256": "1e58a6c4e907fd02c0c5a3e6de18bca3ef0c36c4a2dde2584e8e51b1837d8cda"
|
||||
},
|
||||
"notes/prior-toolchain.txt": {
|
||||
"bytes": 536,
|
||||
"sha256": "1f101518dd1f90bc2cba8d26570a762832aba6debebbbe6aa50f97a944590610"
|
||||
},
|
||||
"reviews/RENAME-PLAN-ORACLE-RAW.txt": {
|
||||
"bytes": 4893,
|
||||
"sha256": "75880efef0bce8909e6c5079e088107464c68f19aae53f2123cb77260103f7a1"
|
||||
},
|
||||
"reviews/RENAME-PLAN-ORACLE.md": {
|
||||
"bytes": 11934,
|
||||
"sha256": "19acc27e880981c4f6a3d6f33fea3bd3293405ec96f0f996ec7cd3121a9beeaf"
|
||||
},
|
||||
"reviews/RENAME-PLAN-RUNTIME-READBACK.json": {
|
||||
"bytes": 2211,
|
||||
"sha256": "9b2d1631e8981ab01aa133cbc5cd41b407e9a40280f4f91921ce9c1f6500cc11"
|
||||
},
|
||||
"reviews/RENAME-PLAN-RUNTIME-REVIEW.md": {
|
||||
"bytes": 8120,
|
||||
"sha256": "0300b8528b23dc4d46fdc09c1e84ca86402077a3392d72ffd9162ad510ed4597"
|
||||
},
|
||||
"reviews/RENAME-PLAN-SOURCE-REVIEW.md": {
|
||||
"bytes": 8073,
|
||||
"sha256": "91c5b9876b967479d6b8382f892b9165b364ec6586cb4f73bbe9f44f8344b0cf"
|
||||
},
|
||||
"reviews/RENAME-PLAN-STACK-DIAGNOSIS.md": {
|
||||
"bytes": 5533,
|
||||
"sha256": "90a494f8d4b61eb34d8566ecedd8ddd8fbf8b3f8d122c10ae64062c2ae1b46ec"
|
||||
},
|
||||
"reviews/RENAME-PLAN-TEST-REVIEW.md": {
|
||||
"bytes": 12790,
|
||||
"sha256": "e2d94e73de3b4e66609b1c05f1692ebcb48c0b9d31553f1ed98f8b7f92397c1a"
|
||||
},
|
||||
"reviews/inspect_rename_runtime.py": {
|
||||
"bytes": 7468,
|
||||
"sha256": "68e428c8959ab8a98a06ac240fc379c734646e38cbb2ca4cdec47a3672ad3c02"
|
||||
},
|
||||
"reviews/rename_plan_bytes.py": {
|
||||
"bytes": 4478,
|
||||
"sha256": "d8ee2de75dacb68b88699710dd0e514571936c0a23654d3a36e00fb6fcf5e542"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
"""Independent literal/token arithmetic. Never imports or runs application code."""
|
||||
from pathlib import Path
|
||||
import hashlib,json
|
||||
ID=lambda n:f'00000000-0000-0000-0000-{n:012}'
|
||||
def rich(sa=False):
|
||||
prop,work,layer,extra=('sa_property','sa_function','layer Sa;',f'sa_system s "System" id "{ID(6)}" {{}}') if sa else ('oa_property','oa_activity','','')
|
||||
main=f'arcadia 8;\nproject p "Project" id "{ID(1)}" {{\ninclude "b.arcadia"; include "a.arcadia";\nnode n id "{ID(4)}" {{ diagram @d; element @v; }}\n{prop} v "Value" id "{ID(3)}" {{ subject @w; type Number; base @f(y: 2, x: @g(x: 3, y: 4)) + @f(x: 5, y: 6); }}\n{work} w "Work" id "{ID(2)}" {{}}\ndiagram d "Diagram" id "{ID(5)}" {{ {layer} }}\n{extra}\n}}\n'
|
||||
files=[]
|
||||
for alias,name,n,op in [('f','F',10,'+'),('g','G',11,'-')]:
|
||||
files.append(f'calculation {alias} "{name}" id "{ID(n)}" {{\ninput x id "{ID(1)}" : Number;\ninput y id "{ID(12)}" : Number;\nresult Number; body $x {op} $y;\n}}\n'.encode())
|
||||
return files+[main.encode()]
|
||||
G=lambda n:f'G{n}'
|
||||
P=lambda c,n:f'P{c}.{n}'
|
||||
rows=[]
|
||||
for file,c,alias in [(0,10,'f'),(1,11,'g')]:
|
||||
rows += [(file,12,13,G(c),alias),(file,68,69,P(c,1),'x'),(file,128,129,P(c,12),'y'),(file,203,204,P(c,1),'x'),(file,208,209,P(c,12),'y')]
|
||||
rows += [(2,a,a+1,t,s) for a,t,s in [(19,G(1),'p'),(122,G(4),'n'),(177,G(5),'d'),(189,G(3),'v'),(206,G(3),'v'),(269,G(2),'w'),(291,G(10),'f'),(293,P(10,12),'y'),(299,P(10,1),'x'),(303,G(11),'g'),(305,P(11,1),'x'),(311,P(11,12),'y'),(321,G(10),'f'),(323,P(10,1),'x'),(329,P(10,12),'y'),(350,G(2),'w'),(412,G(5),'d')]]
|
||||
changed={G(1):'w',G(2):'p',G(3):'n',G(4):'v',G(5):'z',G(10):'g',G(11):'f',P(10,1):'y',P(10,12):'x',P(11,1):'y',P(11,12):'x'}
|
||||
def check(files,edits,names):
|
||||
assert len(edits)==len({(f,a,b) for f,a,b,_,_ in edits})
|
||||
assert set(t for _,_,_,t,_ in edits)==set(names)
|
||||
totals=[]
|
||||
for file,raw in enumerate(files):
|
||||
subset=sorted(x for x in edits if x[0]==file);last=0;removed=added=0
|
||||
for _,a,b,target,spelling in subset:
|
||||
assert a>=last and raw[a:b]==spelling.encode();last=b;removed+=b-a;added+=len(names[target].encode())
|
||||
totals.append((len(raw),removed,added,len(raw)-removed+added))
|
||||
return totals
|
||||
for sa in (False,True):
|
||||
files=rich(sa);r=rows+([(2,490,491,G(6),'s')] if sa else []);names=changed|({G(6):'u'} if sa else {})
|
||||
assert list(map(len,files))==[213,213,548 if sa else 474]
|
||||
transformed=[b'// '+bytes.fromhex('e99ba8')+b'\r\n'+raw.replace(b'\n',b'\r\n') for raw in files]
|
||||
tr=[(f,8+a+files[f][:a].count(b'\n'),8+b+files[f][:b].count(b'\n'),t,s) for f,a,b,t,s in r]
|
||||
print('RICH', 'SA' if sa else 'OA','R',len(names),'M',len(r),'E',15,'Q',len(names),'files',check(files,r,names),'CRLF',check(transformed,tr,names))
|
||||
print('ORIGINAL',json.dumps(sorted(r)));print('TRANSFORMED',json.dumps(sorted(tr)))
|
||||
category=Path(__file__).resolve().parents[1]/'as3batch/crates/oa-core/src/language/analysis_source/mixed/project/ordinary_index/tests/fixtures/categories.arcadia'
|
||||
raw=category.read_bytes();assert len(raw)==2152 and hashlib.sha256(raw).hexdigest()=='3943579866157c7b5d95ce9edcb2d643058826b9af44257557e2864f130d15fc'
|
||||
old=['p','a','child','implicit','s','link','d','note','t','q','sub','use','left','right','context']
|
||||
new=['a','p','implicit','child','link','s','note','d','q','t','use','sub','right','left','ctx']
|
||||
positions=[(19,1),(168,2),(249,3),(344,2),(369,4),(487,5),(561,6),(625,3),(640,4),(664,7),(741,6),(789,6),(818,8),(885,6),(925,9),(992,3),(1003,5),(1328,10),(1391,12),(1397,14),(1422,11),(1487,13),(1514,12),(1577,10),(1617,11),(1648,13),(1712,11),(1741,3),(1789,14),(1855,10),(1882,4),(1935,15),(2004,10),(2029,12),(2047,13),(2092,14)]
|
||||
cr=[(0,a,a+len(old[n-1]),G(n),old[n-1]) for a,n in positions];cn={G(i+1):s for i,s in enumerate(new)}
|
||||
print('CATEGORY R15 M36 E0 Q15',check([raw],cr,cn));print('CATEGORY',json.dumps(cr))
|
||||
files=rich();files[2]=files[2].replace(b'node n id',b'node '+b'n'*31+b' id')
|
||||
size_rows=[(0,12,13,G(10),'f'),(2,122,153,G(4),'n'*31),(2,321,322,G(10),'f'),(2,351,352,G(10),'f')]
|
||||
assert sum(map(len,files))==930
|
||||
for alias,want in [('renamed_f',924),('renamed_func',933)]:
|
||||
totals=check(files,size_rows,{G(4):'n',G(10):alias})
|
||||
assert sum(t[3] for t in totals)==want
|
||||
print('COMBINED SIZE',alias,totals,'total',want,'typed-only',930+3*(len(alias)-1))
|
||||
print('PASS: authored raw token positions and separate removed/replacement lengths only; no application pipeline/output or semantic acceptance.')
|
||||
Reference in New Issue
Block a user