# iter ext-rename — `.ailx` extension renamed to `.ail` across the live toolchain **Date:** 2026-05-12 **Started from:** 17b370b (post-audit-ms close, working tree clean) **Status:** DONE **Tasks completed:** 1 of 1 ## Summary The surface-form file extension changes from `.ailx` to `.ail`. AILang's authoring surface now uses the same `.ail` stem as its canonical JSON form (`.ail.json`), giving the language a single coherent extension family: `.ail` is the LLM-authored Form A; `.ail.json` is the canonical JSON-AST Form B that `ail check` / `build` / `run` actually loads today. The earlier `.ailx` extension carried an unmotivated `x`. The cross-model authoring-form test (cma + ms milestones, closed earlier today) treated `.ailx` purely as a cohort identifier; once the empirical case for keeping a separate authoring surface had been ratified (DESIGN.md §Decision-6 addendum), the awkward extension was the last asymmetry between Form A and Form B. User-initiated rename. ## Scope In scope (touched): - 61 example files `examples/**/*.ailx → .ail` (57 top-level + 4 `examples/fieldtest/`) renamed via `git mv`. - `experiments/.../rendered/ailx.md → ail.md` rename. - All live toolchain prose and code: `crates/ail/`, `crates/ailang-surface/`, `crates/ailang-core/specs/form_a.md`, `docs/DESIGN.md`, `docs/roadmap.md`, `docs/PROSE_ROUNDTRIP.md`, `bench/reference/*.c`, all of `skills/`, the Cross-Model Authoring experiment crates under `experiments/.../{render,harness,master,rendered,README.md}`. - Cohort identifier `ailx → ail` in the experiment crate (Rust `Cohort::Ailx → Cohort::Ail`, `Form::Ailx → Form::Ail`, per-cohort path component, `{form-only: ailx}` marker, ```ailx codefence language tag). Out of scope (untouched, by design): - `docs/journal-archive.md` (content-frozen per CLAUDE.md). - All `docs/journals/`, `docs/specs/`, `docs/plans/`, `bench/orchestrator-stats/` — historical records describing states as they were. - `experiments/.../runs/` — frozen LLM-output artefacts; the models in those runs actually saw `.ailx`, and renaming the artefacts would falsify the experimental record. The exclusion preserves the journals as honest history. Anyone chasing why a 2026-05-11 fieldtest names `.ailx` files will find that the renaming happened today and that the names were correct at the time of writing. ## Why boss-direct edit (no planner / implement dispatch) Same rationale as iter rt.2: the user fully specified the transformation (rename `.ailx → .ail`, rename cohort `ailx → ail`, historical records untouched), down to the three open questions that were resolved up-front via AskUserQuestion (cohort name; treatment of frozen runs; treatment of historical docs). The execution was two `git mv` passes plus one heavily-scoped `sed` over an explicit 41-file whitelist (plus two follow-up files surfaced by the negative-grep). No design judgement deferred to execution time. ## Files touched (working-tree counts) - 61 renames under `examples/`. - 1 rename `experiments/.../rendered/ailx.md → ail.md`. - 35 content-edited files: the 41-file SCOPE whitelist minus the experiment-crate files that had no `ailx` content, plus two follow-up files surfaced by the negative-grep (`examples/bench_list_sum_explicit.ail`'s in-source comment; `experiments/.../rendered/json.md` for three `AILX` acronyms in prose). ## Verification - `cargo build --workspace` clean. - `cargo test --workspace` green; the renamed identifiers `every_ail_fixture_matches_its_json_counterpart` and `parse_then_print_then_parse_is_idempotent_on_every_ail_fixture` in `crates/ailang-surface/tests/round_trip.rs` were run explicitly and pass. - Experiment crate `cargo test` (out-of-workspace) green. - `bench/check.py`, `bench/compile_check.py`, `bench/cross_lang.py`: 0 regressed across all three; 6 improved-beyond-tolerance on `latency.explicit_at_rc` (same cluster the previous two audits today already observed; decoupled from this rename — baseline left pristine). - Negative grep: `git grep -nIi 'ailx|Ailx|AILX'` outside the out-of-scope paths returns no matches. ## Roadmap implications The `.ail` extension is now canonical authoring surface but the CLI does not yet accept it — `ail check foo.ail` still produces the misleading JSON-parse error. The existing P2 todo "`ail check`/`build`/`run` accept `.ail` extension" (roadmap.md line 185) is the natural next iteration: it closes the loop opened by today's rename and removes the largest first-command friction for any LLM-author writing in Form A. Promoting that todo to the immediate next dispatch.