iter docs-honesty-lint.1: canonical docs present-tense-honest + wrap-robust pin + Sweep 5

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.
This commit is contained in:
2026-05-18 12:30:03 +02:00
parent de66eb7ab2
commit 7580d434f0
8 changed files with 330 additions and 62 deletions
@@ -0,0 +1,131 @@
# 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:** de66eb7ab2e457bfe7e5dbe2f87c5da15a786cd7
**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 PIN` scope confirmation.
## Concerns
- T3: plan Task-1 pin string `whether the document asserts something
exists, works, or changed that does not` omitted the `**…**`
Markdown bold that plan Task-3 body wrapped around `asserts …
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