Strips Wunschdenken (forward intent stated as fact) and non-citation post-mortem / doc-archaeology from docs/DESIGN.md (14 corrections incl. 1 Step-14 procedural-catch-all site the spec's illustrative regex would have missed) + docs/PROSE_ROUNDTRIP.md; genuine forward intent (LLM tool-use / MCP / LSP) relocated to roadmap P3. Codifies the tense+modality discriminator as a present-tense DESIGN.md meta- subsection. Guards two ways: wrap-robust enumerated absent/present pin (crates/ailang-core/tests/docs_honesty_pin.rs, norm() whitespace- collapse helper — structurally discharges the recurring grep/contains line-wrap failure family) + wrap-robust advisory Sweep 5 in architect_sweeps.sh (contiguous-fragment regex) with full sweep-count lockstep + new ailang-architect.md "DESIGN.md honesty drift" bullet. KEEPs preserved (Diverge-reserved, regions-rejected, self-labelled tiebreaker). No language/checker/codegen/runtime change — sole crates/ change is the additive pin; ail check/run/build byte-unchanged. Workspace 609/0 (delta +4 pin), sentinel trio green, build clean.
6.2 KiB
iter docs-honesty-lint.1 — canonical docs made present-tense-honest, guarded by a wrap-robust pin + Sweep 5
Date: 2026-05-18
Started from: de66eb7ab2
Status: DONE
Tasks completed: 6 of 6
Summary
docs/DESIGN.md and docs/PROSE_ROUNDTRIP.md carried Wunschdenken
(forward intent stated as fact) and non-citation post-mortem /
doc-archaeology narrative. This iter strips both classes, codifies
the honesty discriminator as a ### What this document is — and the honesty rule it holds itself to meta-subsection inside DESIGN.md
§"Project ecosystem", and guards the invariant two ways: a
wrap-robust enumerated absent/present regression pin
(crates/ailang-core/tests/docs_honesty_pin.rs, 4 tests) and a
wrap-robust advisory Sweep 5 in bench/architect_sweeps.sh with all
sweep-count lockstep wording + a new ailang-architect.md "DESIGN.md
honesty drift" bullet. Genuine forward intent (LLM tool-use / MCP /
LSP) relocated to docs/roadmap.md P3. No language/checker/codegen/
runtime change — the sole crates/ change is the additive pin file;
ail check/run/build are byte-unchanged by construction.
Per-task notes
- iter docs-honesty-lint.1.1: created the wrap-robust RED pin
(
docs_honesty_pin.rs,norm()whitespace-collapse helper, 4 tests). Verified RED for the right reasons (compiles, 4 fail on the enumerated still-present strings + the absent discriminator). - iter docs-honesty-lint.1.2: appended Sweep 5 to
architect_sweeps.sh+ tail "All four"→"All five" + header "four"→"five sweeps"; added the "DESIGN.md honesty drift" architect bullet and fixed the sibling "four sweeps"→"five / Sweeps 1-4" wording. Sweep 5 confirmed firing on the uncorrected tree (EXIT=1). Concern-1 lockstep shipped whole, no split. - iter docs-honesty-lint.1.3: inserted the discriminator
meta-subsection. Tree had drifted (a
- **Tests**:bullet now follows the Docs bullet, no blank line; closing prose is "When the language grows…"); anchored on the verbatim closing-prose line per the plan's own Step-1 "quote it, do not assume" caveat. - iter docs-honesty-lint.1.4: applied the 13 byte-exact corrections (each verbatim "current text" re-confirmed by grep first; lines had drifted +~22 from Task 3). Step-14 catch-all surfaced one genuine extra FIX site (see Concerns); classified + handled per procedure.
- iter docs-honesty-lint.1.5: stripped the PROSE_ROUNDTRIP tool-use/ MCP Wunschdenken paragraph (present-tense replacement); appended the relocated forward-intent idea to roadmap P3 with spec provenance. Full pin GREEN (4/4).
- iter docs-honesty-lint.1.6: full verification — pin GREEN isolated;
workspace zero failures (609 passed, delta = +4 pin tests only);
sentinel trio (design_schema_drift/spec_drift/schema_coverage)
green; Sweep 5 reduced to the single self-referential L62 KEEP;
build clean;
ONLY THE PINscope confirmation.
Concerns
- T3: plan Task-1 pin string
whether the document asserts something exists, works, or changed that does notomitted the**…**Markdown bold that plan Task-3 body wrapped aroundasserts … not. Plan self-review item 3 cross-check missed it. Resolved by dropping the incidental bold from the inserted body (the pin is the contract, written first; the emphasis is non-load-bearing). Prose meaning + present-tense framing unchanged. Plan-internal inconsistency, not a tree-drift; flagged for planner calibration. - T4: Step-14 catch-all surfaced one genuine extra Sweep-5 FIX site
not in Steps 1-13 — DESIGN.md Form-B class/instance prose-projection
bullet ("was deferred from milestone 22 entirely; … A future iter
ships the full prose projection if/when …"). The Boss's "zero extra
hits" pre-verification was against the spec's illustrative regex;
the plan's broader Sweep-5 regex correctly catches this soft-wrapped
site. Handled exactly per Step-14: rewritten present-tense (kept the
load-bearing facts — one-way renderer, no parser by design,
placeholder render in
crates/ailang-prose/src/lib.rs) + matching absent-string asserts + present-anchor added to the pin. This is the procedural catch-all working as designed.
Catch-all classification (Task 4 Step 14)
- KEEP: DESIGN.md L62
- **Forward intent** ("planned / will back / on the path to / if-when X arrives")— the discriminator subsection's own enumerated catalogue of forbidden phrasings; asserts nothing false, present-tense rule definition. A self-referential Sweep-5 false-positive (the regex matches the literal "on the path to" inside the rule's own example list). - FIX: DESIGN.md L2093 Form-B prose-projection bullet — see Concerns; before→after recorded there; pin pair added.
Known debt
- (none) — the iter is self-contained; the pin + Sweep 5 are the forward guard against regrowth.
Post-iter sweep output (Task 6 Step 4)
=== Sweep: 1 (history anchors) ===
50: `docs/journal-archive.md` (archived monolith for pre-2026-05-11 history),
2060: 2026-05-13) — combines two `Str` values into a single owned `Str`.
=== Sweep: 5 (honesty: wunschdenken + non-citation post-mortem) ===
62:- **Forward intent** ("planned / will back / on the path to /
EXIT=1
Sweep-1 residue = the two documented deliberate KEEPs (L50 doc-roles
pointer date, L2060 true (iter str-concat, 2026-05-13) provenance).
Sweep-5 residue = the single L62 self-referential discriminator-
catalogue KEEP. EXIT=1 is expected + architect-adjudicated per plan
Task 6 Step 4 (deliberate-KEEP date-anchors remain by design).
Blocked detail
(none — DONE)
Files touched
crates/ailang-core/tests/docs_honesty_pin.rs(new — the pin, 4 tests; extended in T4 Step 14 per the mandated catch-all procedure)bench/architect_sweeps.sh(Sweep 5 + header/tail lockstep)skills/audit/agents/ailang-architect.md("four"→"five" + new "DESIGN.md honesty drift" bullet)docs/DESIGN.md(discriminator subsection + 13 enumerated corrections + 1 catch-all correction)docs/PROSE_ROUNDTRIP.md(tool-use/MCP Wunschdenken stripped)docs/roadmap.md(relocated forward-intent idea, P3)
Stats
bench/orchestrator-stats/2026-05-18-iter-docs-honesty-lint.1.json