# 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
