99df14c792
A re-grep found 15 live references (excluding docs/specs/ and
docs/plans/, which stay historical) the previous two commits
missed — all in source comments, doctests, bench helpers, and one
agent file.
Per-file:
- crates/ail/src/main.rs: typeclass-coherence diagnostic comment
pointed at "the JOURNAL queue's wording" — points at
design/contracts/typeclasses.md alone.
- crates/ailang-prose/src/lib.rs: `//!` header referred to
docs/JOURNAL.md "Pinned: human-readable prose surface" —
retargeted to design/contracts/authoring-surface.md.
- crates/ailang-check/src/lib.rs: bugfix tag + "see iter
method-dispatch-refactor journal" prose collapsed to a clean
rationale paragraph; the canonical shape is stated inline.
- crates/ailang-surface/tests/prelude_decouple_carve_out_pin.rs:
"(d) record the rationale in a per-iter journal" →
"(d) record the rationale in the commit body".
- crates/ailang-surface/tests/prelude_module_hash_pin.rs: header
collapsed (pd.2/pd.3 milestone narrative dropped — the test's
purpose is self-evident from its body); both "per-iter journal"
drift-instructions point at the commit body.
- runtime/rc.c: "bench numbers in JOURNAL 18f.2" →
"original profiling bench numbers".
- bench/run.sh: two "JOURNAL entry" comments → "commit body".
- bench/architect_sweeps.sh: header rewritten (cross-ref to the
design-md-consolidation milestone commits, not a JOURNAL entry).
Sweep-4 extended with two new anti-regrowth phrases
("see the per-iter journal", "in a per-iter journal") so journal
prose can't grow back into design/contracts/ silently.
- skills/audit/agents/ailang-architect.md: "unlike a journal it
lives on main" → "since it lives on main".
- ail-embed/src/bin/timeshard_runner.rs: "records it in the
close-out journal" → "prints it to stderr".
- ail-embed/tests/timeshard.rs: two "journal-only friction timing"
→ "stderr-only friction timing".
Verification (after the edit):
- `grep -rin '\bjournal\b'` against live tree returns exactly two
hits: the Sweep-4 regex itself (intentional — TABU phrases that
prevent regrowth) and the PHRASES array in design_index_pin.rs
(intentional — the same regrowth guard at test level). Both are
load-bearing negative assertions.
- `bash bench/architect_sweeps.sh` exits 0 ("All five sweeps
clean") — no design/-side regrowth.
- `cargo build --workspace` green; `cargo test --workspace` green.
64 lines
2.9 KiB
Bash
Executable File
64 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# bench/architect_sweeps.sh
|
||
#
|
||
# Run the five honesty/anchor sweep-invariant greps against the
|
||
# design/contracts (the honesty-bound contract surface; design/models
|
||
# is the narrative tier, out of honesty-sweep scope); the spine is
|
||
# design/INDEX.md. Output: matched lines, prefixed by sweep name.
|
||
# Exit 0 if all five sweeps are clean, 1 if any anchor was found,
|
||
# 2 if the spine (design/INDEX.md) is not found. Sweeps 1-4 are the
|
||
# history-anchor invariants; Sweep 5 is the docs-honesty-lint
|
||
# Wunschdenken / post-mortem invariant.
|
||
#
|
||
# Companion to skills/audit/agents/ailang-architect.md "What you check
|
||
# / design/ history-anchor regrowth". The rationale of each sweep
|
||
# regex (Sweeps 1–4: history anchors; Sweep 5: honesty / Wunschdenken)
|
||
# lives in the design-md-consolidation milestone commits (2026-05-10).
|
||
#
|
||
# A non-zero exit is advisory, not authoritative: the architect agent
|
||
# reviews each match and decides whether it is a legitimate quote
|
||
# (e.g. a block-quote citation of a commit body) or fresh drift.
|
||
|
||
set -u
|
||
INDEX="design/INDEX.md"
|
||
DESIGN_GLOB="design/contracts" # contracts only — design/models is the narrative tier; "as of milestone N" context is legitimate there
|
||
HITS=0
|
||
|
||
if [[ ! -f "$INDEX" ]]; then
|
||
echo "architect_sweeps: $INDEX not found (run from repo root)" >&2
|
||
exit 2
|
||
fi
|
||
|
||
run_sweep() {
|
||
local name="$1"
|
||
local pattern="$2"
|
||
local matches
|
||
matches=$(grep -rnE "$pattern" $DESIGN_GLOB || true)
|
||
if [[ -n "$matches" ]]; then
|
||
echo "=== Sweep: $name ==="
|
||
echo "$matches"
|
||
echo
|
||
HITS=1
|
||
fi
|
||
}
|
||
|
||
run_sweep "1 (history anchors)" \
|
||
'Iter [0-9]+[a-z]?(\.[0-9]+)?|Family [0-9]+|^[^/]*2026-[0-9]{2}-[0-9]{2}|\*\*Status: |pre-[0-9]+[a-z]?|[0-9]+[a-z]? sketch|21\.g'
|
||
|
||
run_sweep "2 (REVERTED + migration)" \
|
||
'REVERTED|preserved for the audit trail|Migration plan|[Oo]riginally framed|original rationale|empirically-grounded version|A future (iter|iteration|milestone|Prelude) may|A future iter that|a (later|future) iter(ation)? \(deferred\)|Concrete design deferred'
|
||
|
||
run_sweep "3 (schema SoT)" \
|
||
'^\s*(struct |enum |pub (struct|enum|fn))|whenever the two disagree|ast\.rs is the source of truth'
|
||
|
||
run_sweep "4 (workflow + stale cross-references)" \
|
||
'agents/README\.md|ailang-docwriter|Recently lifted|see the JOURNAL queue|later the same day|Sharpened later|closure conversion in JOURNAL|see the per-iter journal|in a per-iter journal'
|
||
|
||
run_sweep "5 (honesty: wunschdenken + non-citation post-mortem)" \
|
||
'on the path to|may land in a future|ships in a future iter|[Ww]ill back `Show|[Ww]ill eventually (be|support|back)|[Ii]f/?when [a-z]+ (arrives|lands)|[Aa]n earlier draft of this|previously all diagnostics were|[Ww]hat did change in 20|were retired 20[0-9]{2}-|retired in iter [a-z]|originally listed|\bwas deferred\b|foundation for [a-z]'
|
||
|
||
if [[ $HITS -eq 0 ]]; then
|
||
echo "All five sweeps clean."
|
||
fi
|
||
exit $HITS
|