Repository navigation
docs(formal): index the challenges and mutants; read an entry with where.mjs - #235
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #235 +/- ##
=======================================
Coverage 93.73% 93.73%
=======================================
Files 78 78
Lines 11357 11357
Branches 656 656
=======================================
Hits 10645 10645
Misses 642 642
Partials 70 70
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
lan17
force-pushed
the
claude/formal-catalog-views
branch
from
October 15, 2026 01:33
384972b to
a970189
Compare
lan17
force-pushed
the
claude/formal-profiles-doc
branch
from
October 15, 2026 02:00
807d90f to
5df88f1
Compare
lan17
force-pushed
the
claude/formal-catalog-views
branch
from
October 15, 2026 02:03
a970189 to
684d926
Compare
…ere.mjs The first shape of this change mirrored the challenge and mutant catalogs into 8,190 lines of Markdown. A mirror of 345 KB is no easier to read than the JSON it copies, costs a regeneration on every catalog edit and is worse for an agent, which parses JSON fine. What a reader needs is a skimmable list and one entry at a time. CHALLENGES.md and MUTANTS.md are now one-row-per-entry indexes (91 and 76 lines): challenge, contract, source, invariant, native mutant, reproducer run and detected/excluded counts; mutant, case, description, detections per port and the challenges mapped to it. The entry itself is read on demand: `node formal/tools/where.mjs recovery-inclusive-maximum` prints the edit, the invariant, the mapping with its cross-contract note and evidence checkpoint, the reproducer and every exclusion with its reason; `node formal/tools/where.mjs M01` prints the rationale, the edits per port including the Rust mirror, the required detections and the challenges mapped to it. The indexes are checked in the audit lane; the lookups are tested on the committed catalogs.
lan17
force-pushed
the
claude/formal-catalog-views
branch
from
October 15, 2026 02:40
684d926 to
a611a51
Compare
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.
Phase 3 of #220, item D1, reshaped after review. One commit, stacked on #233 until it lands, then retargeted to
main.What changed since the first version
The first version mirrored the challenge and mutant catalogs into 8,190 lines of Markdown. That earned its lines badly: a 345 KB mirror is no easier to read than the JSON it copies, it costs a regeneration on every catalog edit, and it is worse for an agent, which parses JSON fine. What a reader needs is a skimmable list and one entry at a time.
What this does now
formal/generated/CHALLENGES.md(91 lines) andMUTANTS.md(76 lines): one row per challenge (contract, source, invariant, native mutant, reproducer run, detected and excluded counts) and per mutant (case, description, detections per port, challenges mapped to it). Generated by the same--write, checked by the same--checkin the audit lane.where.mjsreads an entry in full on demand:node formal/tools/where.mjs recovery-inclusive-maximumprints the edit, the invariant, the mapping with its cross-contract note and evidence checkpoint, the reproducer and every exclusion with its reason;node formal/tools/where.mjs M01prints the rationale, the edits per port including the Rust mirror, the required detections and the challenges mapped to it.Net: +167 generated lines instead of +8,190, no new reading surface, and the lookup the mirror was really for.
Tests
formal-catalog-docs.test.tspins all three views to the renderers and checks that every challenge and every mutant has one row and that the indexes stay within a few lines of the entry count.formal-where.test.tscovers the challenge and mutant lookups and their error paths.Verification
make auditgreen;vitest run test/formal-catalog-docs test/formal-wherepass;tsc --noEmitclean;node scripts/check-docs.mjsgreen (32 pages). Indexes and AUTHORING re-keyed with--refresh; parity inputs re-pinned.🤖 Generated with Claude Code