M2.5: wit logic-report tool for the empty-verdict reality gate - #32
Merged
Conversation
Adds the library-wide comparison tool issue #15 asks for, without fabricating the 30-project/26GB finding this environment cannot produce: - wit_logic::change_count: a new diagnostic counting distinct differing signals between two walks (census tags + name adds/removes + tempo), 0 exactly when semantic_equal reports NoStructuralChange. - wit_index::logic_report / LogicLibraryReport: walks every discovered Logic/GarageBand alternative's backup chain (reusing wit-index's M3 discover_logic_projects) and computes the three statistics the issue asks for: % of saves with a visible structural change, the change_count distribution, and how often adjacent saves are byte-different but structurally identical. - wit-cli: new `wit logic-report <library-root>` subcommand, following the scan/dupes privacy discipline (names only, assert_no_home_paths). - Tests: synthetic-fixture unit tests in wit-index::report, plus an opt-in WIT_LOGIC_LIBRARY-gated real-material test (crates/wit-index/tests/real_fixtures.rs), mirroring the WIT_LOGIC_PROJECT/WIT_FIXTURES pattern used elsewhere in this repo. Ran the tool for real against the one local .logicx project available in this environment (n=1 project, 9 consecutive save pairs): 55.6% show no visible structural change. Published as a measured, explicitly- labeled n=1 finding in docs/EXPERIMENTS.md §11 and docs/ROADMAP.md's M2.5 row — NOT the issue's own >50%-of-30-projects decision, which still requires running this tool against the real 26 GB/30-project library on a machine that has it: WIT_LOGIC_LIBRARY=/path/to/YourLibrary cargo test -p wit-index \ --test real_fixtures -- --nocapture --ignored Progress on #15 — does not close it; the reality-gate finding itself is still outstanding pending the real library. Verification: cargo build/test/fmt/clippy/deny all clean; check_personal_paths.py clean. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Progress on #15.
What this PR delivers
Issue #15 asks for the empty-verdict rate across a 30-project / 26 GB real
Logic library. This environment does not have that library — it has exactly
one real
.logicxproject. Fabricating a "the answer is X%" finding from n=1would violate this repo's own reproducibility doctrine (AGENTS.md), so this
PR delivers the tool the issue needs, runs it for real on the one project
available, and publishes that honestly-labeled n=1 result — it does not
close #15, because the actual reality-gate finding still requires the real
library.
New:
wit logic-report <library-root>Walks every discovered Logic/GarageBand alternative's backup chain
(
Project File Backups/00–09oldest-first, then current — reusing M3'swit_index::discover_logic_projects), compares every consecutive pair atwit-logic's Structure honesty tier, and reports the three statistics #15asks for: % of saves with any visible structural change, the distribution of
change counts per save, and how often adjacent saves are byte-different but
structurally identical.
New library pieces
wit_logic::change_count(a, b)(crates/wit-logic/src/lib.rs) — a newdiagnostic counting distinct differing signals between two walks (one per
differing census tag, one per name added/removed across the three
extracted-name lists, one for a tempo change). Guaranteed
0exactly whensemantic_equalreportsNoStructuralChange— not part of theVerdictitself, just granularity for the "how much changed" question M2.5: Measure the empty-verdict rate on a real Logic library #15 asks.
wit_index::logic_report/LogicLibraryReport(
crates/wit-index/src/report.rs) — orchestrates discovery +wit-logicwalks/comparisons across a whole library, the same way
scan.rsalreadyorchestrates discovery + the store. Read-only, following
discover.rs'sand
dupes.rs's existing discipline.wit-cli'sLogicReportsubcommand followsscan/dupes's privacyconvention: only project/alternative names in output, never a full path
(
assert_no_home_pathsasserted on the rendered report, same asdupes).Tests
wit-index/src/report.rs(deterministic,crafted
ProjectDatacontainers, no real material) proving the threestatistics compute correctly, plus a read-error and an empty-library case.
wit-logic/src/lib.rsgains unit tests forchange_count(zero iffNoStructuralChange, symmetric, counts exactly one per differing tag).crates/wit-index/tests/real_fixtures.rs,gated on
WIT_LOGIC_LIBRARY(mirrors the existingWIT_LOGIC_PROJECT/WIT_FIXTURESloud-skip pattern), for a library root rather than asingle bundle.
Docs
docs/EXPERIMENTS.md§11 — the n=1 result above, explicitly labeledmeasured and explicitly scoped: this is a data point, not the issue's
own >50%-of-30-projects decision.
docs/ROADMAP.md's M2.5 row — tool landed, finding still open, with theexact command to run against the real library.
For the repo owner: run this against the real library
or directly via the CLI:
cargo run -p wit-cli -- logic-report "/path/to/YourLibrary"That run is what actually resolves #15's exit criterion (M5 vs. the M2
stretch goal of mapping Logic's volume-fader field) — this PR only gets the
tool in place for it.
Verification
cargo build --workspace— cleancargo test --workspace --locked— clean, all green (opt-in real-materialtests loudly skip as expected)
cargo fmt --all --check— cleancargo clippy --workspace --all-targets --locked -- -D warnings— cleancargo deny check licenses advisories— clean (pre-existing unrelatedlicense-not-encounteredwarning for ISC, not an error)python3 .github/workflows/scripts/check_personal_paths.py— clean🤖 Generated with Claude Code