iter ext-rename: .ailx → .ail across the live toolchain
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.
Scope (touched):
- 61 example renames examples/**/*.ailx → .ail (git mv)
- 1 rename experiments/.../rendered/ailx.md → ail.md
- 35 content-edited live-toolchain files (crates/, docs/DESIGN.md,
docs/roadmap.md, docs/PROSE_ROUNDTRIP.md, skills/, bench/reference/*.c,
experiment crates under experiments/.../{render,harness,master})
- Experiment-crate cohort rename Cohort::Ailx → Cohort::Ail,
Form::Ailx → Form::Ail, per_cohort/ailx → per_cohort/ail,
{form-only: ailx} → {form-only: ail}, ```ailx → ```ail
Out of scope (deliberately untouched, to preserve honest history):
- docs/journal-archive.md (content-frozen per CLAUDE.md)
- docs/journals/, docs/specs/, docs/plans/, bench/orchestrator-stats/
- experiments/.../runs/ (frozen LLM-output artefacts; models actually
saw .ailx — renaming would falsify the experimental record)
Verification: cargo build/test --workspace green; experiment crate
cargo test green; bench/check.py + compile_check.py + cross_lang.py
all 0-regressed; negative grep for ailx|Ailx|AILX outside the
out-of-scope paths returns zero matches.
Opens immediate follow-up: roadmap.md P2 todo `ail check`/build/run
accept .ail extension — after this rename, .ail is canonical
authoring surface but the CLI still produces a misleading JSON-parse
error on `ail check foo.ail`. That's the next iter.
This commit is contained in:
+2
-2
@@ -19,7 +19,7 @@ The system was bootstrapped on 2026-05-09. See
|
||||
| [`implement`](implement/SKILL.md) | Plan exists | Code + tests + per-iter journal entry, all uncommitted in the working tree | Standard iteration path |
|
||||
| [`audit`](audit/SKILL.md) | Milestone closing OR baseline drift suspected | Drift report + bench-regression report | **Mandatory** at milestone close |
|
||||
| [`docwriter`](docwriter/SKILL.md) | API surface stabilized; rustdoc lag suspected | rustdoc updates in `///` and `//!`, uncommitted in the working tree | No — Boss-dispatched only |
|
||||
| [`fieldtest`](fieldtest/SKILL.md) | Boss-dispatched post-audit field test on a milestone that touched user-visible surface | 2-4 `.ailx` example fixtures + `docs/specs/<date>-fieldtest-<milestone>.md`, all uncommitted in the working tree | No — Boss-dispatched only |
|
||||
| [`fieldtest`](fieldtest/SKILL.md) | Boss-dispatched post-audit field test on a milestone that touched user-visible surface | 2-4 `.ail` example fixtures + `docs/specs/<date>-fieldtest-<milestone>.md`, all uncommitted in the working tree | No — Boss-dispatched only |
|
||||
| [`debug`](debug/SKILL.md) | Bug encountered (failing test, segfault, wrong stdout) | RED-test in the working tree (uncommitted) + cause analysis | **Mandatory RED-first** for any bug |
|
||||
| [`boss`](boss/SKILL.md) | User-invoked only (`/boss`) | Autonomous orchestration session — dispatches existing skills until done-state or bounce-back | No — user-gated |
|
||||
|
||||
@@ -79,7 +79,7 @@ are no orphan agents (an anti-pattern after the 2026-05-09 build-out).
|
||||
| `ailang-bencher` | `audit/agents/` | `audit` (regression diagnostics — hypothesis-driven) |
|
||||
| `ailang-docwriter` | `docwriter/agents/` | `docwriter` (Boss-dispatched rustdoc sweep post-stability) |
|
||||
| `ailang-debugger` | `debug/agents/` | `debug` (RED-first; hands off GREEN to `implement` mini-mode) |
|
||||
| `ailang-fieldtester` | `fieldtest/agents/` | `fieldtest` (writes real-world examples in `.ailx` Surface form against DESIGN.md only — never the compiler source) |
|
||||
| `ailang-fieldtester` | `fieldtest/agents/` | `fieldtest` (writes real-world examples in `.ail` Surface form against DESIGN.md only — never the compiler source) |
|
||||
|
||||
Each agent file has YAML frontmatter (`name`, `description`, `tools`)
|
||||
plus a system-prompt body. The `description` field is the one-sentence
|
||||
|
||||
@@ -130,7 +130,7 @@ is a side experiment, not the headline.
|
||||
|
||||
## What you DO ship
|
||||
|
||||
- New bench fixtures under `examples/bench_*.{ailx,ail.json}` when none of
|
||||
- New bench fixtures under `examples/bench_*.ail*` when none of
|
||||
the existing ones exercise the hypothesis. Pair them (Implicit + explicit-mode
|
||||
variants) where the comparison demands it.
|
||||
- Edits to `bench/run.sh` (or a new harness alongside it) when the
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: fieldtest
|
||||
description: Boss-dispatched only, after audit closes clean (or with ratified drift only), when the orchestrator judges the iteration is complete and wants a field test. Picks 2-4 real-world programming tasks within the milestone's scope, implements each in the AIL Surface form (.ailx — not raw JSON), runs the resulting binaries, and writes a friction-and-bug spec to docs/specs/<date>-fieldtest-<milestone>.md. The spec feeds the next plan as a reference. Implementer simulates a downstream LLM that has only DESIGN.md plus the public examples — never the language's own implementation.
|
||||
description: Boss-dispatched only, after audit closes clean (or with ratified drift only), when the orchestrator judges the iteration is complete and wants a field test. Picks 2-4 real-world programming tasks within the milestone's scope, implements each in the AIL Surface form (.ail — not raw JSON), runs the resulting binaries, and writes a friction-and-bug spec to docs/specs/<date>-fieldtest-<milestone>.md. The spec feeds the next plan as a reference. Implementer simulates a downstream LLM that has only DESIGN.md plus the public examples — never the language's own implementation.
|
||||
---
|
||||
|
||||
# fieldtest — LLM-usability field test for a shipped milestone
|
||||
@@ -24,7 +24,7 @@ specs at `docs/specs/<date>-fieldtest-<milestone>.md`.
|
||||
|
||||
The substantive process — read DESIGN.md + JOURNAL + milestone spec,
|
||||
pick 2-4 real-world programming tasks per milestone axis, implement
|
||||
each in `.ailx` Surface form, run via `ail check`/`build`/`run`,
|
||||
each in `.ail` Surface form, run via `ail check`/`build`/`run`,
|
||||
classify findings, write the spec — lives in
|
||||
`agents/ailang-fieldtester.md`. That file also carries the spec
|
||||
template, the source-isolation discipline (no reading under
|
||||
@@ -65,7 +65,7 @@ routing table below applies in all cases.
|
||||
|
||||
```
|
||||
THE FIELDTESTER WORKS FROM DESIGN.MD AND PUBLIC EXAMPLES — NOT FROM THE COMPILER SOURCE.
|
||||
EVERY EXAMPLE IS WRITTEN IN .ailx (SURFACE) FIRST. RAW .ail.json IS NEVER HAND-AUTHORED.
|
||||
EVERY EXAMPLE IS WRITTEN IN .ail (SURFACE) FIRST. RAW .ail.json IS NEVER HAND-AUTHORED.
|
||||
EVERY FRICTION POINT AND BUG IS RECORDED. NONE IS WORKED AROUND.
|
||||
```
|
||||
|
||||
@@ -79,7 +79,7 @@ agent compiler-internal hints in the carrier.
|
||||
|
||||
Dispatch `ailang-fieldtester` with the carrier from the Handoff
|
||||
Contract below. The agent picks 2-4 examples (one per axis the
|
||||
milestone touched), implements them in `.ailx`, runs them through the
|
||||
milestone touched), implements them in `.ail`, runs them through the
|
||||
public `ail` CLI, classifies findings, and writes the spec. All
|
||||
artefacts (fixtures + spec) stay in the working tree as unstaged
|
||||
changes; the Boss commits them after reviewing the report (suggested
|
||||
@@ -104,7 +104,7 @@ variation); five is too many for one report to stay readable.
|
||||
| Field | Content |
|
||||
|-------|---------|
|
||||
| `spec_path` | `docs/specs/<date>-fieldtest-<milestone>.md` |
|
||||
| `examples_added` | list of `.ailx` paths committed |
|
||||
| `examples_added` | list of `.ail` paths committed |
|
||||
| `findings` | list, each with class (`bug` / `friction` / `spec_gap` / `working`) + recommendation |
|
||||
| `status` | `clean` / `friction_found` / `bugs_found` / `infra_blocked` |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: ailang-fieldtester
|
||||
description: Implements 2-4 real-world programming tasks in the AIL Surface form (.ailx) for a freshly closed milestone, runs them through the public `ail` CLI, and reports friction, bugs, and spec gaps as a structured spec. Simulates a downstream LLM author who has only DESIGN.md and the public examples — never the language's own implementation. Does NOT fix bugs and does NOT hand-write canonical JSON.
|
||||
description: Implements 2-4 real-world programming tasks in the AIL Surface form (.ail) for a freshly closed milestone, runs them through the public `ail` CLI, and reports friction, bugs, and spec gaps as a structured spec. Simulates a downstream LLM author who has only DESIGN.md and the public examples — never the language's own implementation. Does NOT fix bugs and does NOT hand-write canonical JSON.
|
||||
tools: Read, Edit, Write, Bash, Glob, Grep
|
||||
---
|
||||
|
||||
@@ -46,7 +46,7 @@ Read in this order, before picking examples:
|
||||
4. `docs/specs/<milestone>.md` if one exists — the contract this
|
||||
milestone signed up for.
|
||||
5. `examples/` — to learn the *form* of valid AIL. You may read any
|
||||
`.ailx` and `.ail.json` under `examples/` (these are the public
|
||||
`.ail` and `.ail.json` under `examples/` (these are the public
|
||||
corpus). You may NOT use them as a hint about how the compiler
|
||||
handles edge cases; only as a hint about the shape of the surface.
|
||||
|
||||
@@ -66,7 +66,7 @@ spec; if both are also empty, return `NEEDS_CONTEXT`.
|
||||
|
||||
```
|
||||
DESIGN.MD AND `examples/` ARE YOUR ONLY REFERENCE. CRATES/, RUNTIME/, BENCH/ ARE FORBIDDEN READS.
|
||||
EVERY EXAMPLE IS WRITTEN IN .ailx FIRST. NO HAND-WRITTEN .ail.json.
|
||||
EVERY EXAMPLE IS WRITTEN IN .ail FIRST. NO HAND-WRITTEN .ail.json.
|
||||
RECORD WHAT HAPPENS. DO NOT FIX. DO NOT WORK AROUND.
|
||||
```
|
||||
|
||||
@@ -76,7 +76,7 @@ under `crates/`, `runtime/`, `bench/scripts/`, or `bench/reference/`,
|
||||
**stop**. The only file paths you may open are:
|
||||
|
||||
- `CLAUDE.md`, `docs/**`, `examples/**`, `skills/**`
|
||||
- the `.ailx` and `.ail.json` files YOU create under `examples/`
|
||||
- the `.ail` and `.ail.json` files YOU create under `examples/`
|
||||
- the binaries YOU produce via `ail build`
|
||||
- the `.ll` files YOU produce via `ail emit-ir` if you want to
|
||||
inspect generated IR (the IR is part of the public surface per
|
||||
@@ -104,19 +104,19 @@ Each phase completes before the next starts.
|
||||
thin) or a 500-line numerics library (too thick).
|
||||
3. Total: 2-4 examples.
|
||||
|
||||
### Phase 2 — Implement each example in `.ailx`
|
||||
### Phase 2 — Implement each example in `.ail`
|
||||
|
||||
For each example, in this order:
|
||||
|
||||
1. Draft the program in `.ailx` Surface form. Reach for the milestone's
|
||||
1. Draft the program in `.ail` Surface form. Reach for the milestone's
|
||||
new surface where it fits naturally — but do not contort an
|
||||
example to use a feature that doesn't fit.
|
||||
2. Save as `examples/fieldtest/<milestone-short>_<n>_<slug>.ailx`,
|
||||
e.g. `examples/fieldtest/22_1_eq_rational.ailx`.
|
||||
2. Save as `examples/fieldtest/<milestone-short>_<n>_<slug>.ail`,
|
||||
e.g. `examples/fieldtest/22_1_eq_rational.ail`.
|
||||
3. Run, in this order:
|
||||
```bash
|
||||
ail check examples/fieldtest/<...>.ailx
|
||||
ail build examples/fieldtest/<...>.ailx -o /tmp/ft_<n>
|
||||
ail check examples/fieldtest/<...>.ail
|
||||
ail build examples/fieldtest/<...>.ail -o /tmp/ft_<n>
|
||||
/tmp/ft_<n>
|
||||
```
|
||||
Note: if your repo invokes `ail` as `cargo run -p ail --` instead,
|
||||
@@ -137,10 +137,10 @@ binary missing); in that case return `BLOCKED` with the cause.
|
||||
### Phase 3 — Generate canonical JSON, only via tooling
|
||||
|
||||
The canonical form is `.ail.json`. You do NOT hand-write it. After
|
||||
each `.ailx` runs cleanly, generate the JSON via:
|
||||
each `.ail` runs cleanly, generate the JSON via:
|
||||
|
||||
```bash
|
||||
ail render --json examples/fieldtest/<...>.ailx > examples/fieldtest/<...>.ail.json
|
||||
ail render --json examples/fieldtest/<...>.ail > examples/fieldtest/<...>.ail.json
|
||||
```
|
||||
|
||||
(or whichever subcommand `ail --help` lists for the surface→json
|
||||
@@ -164,7 +164,7 @@ merged.
|
||||
### Phase 5 — Write the spec, hand back
|
||||
|
||||
Write `docs/specs/<YYYY-MM-DD>-fieldtest-<milestone>.md` using the
|
||||
spec structure below. Leave all artefacts (the `.ailx` files, the
|
||||
spec structure below. Leave all artefacts (the `.ail` files, the
|
||||
`.ail.json` files, and the spec file) in the working tree as
|
||||
unstaged changes. You do NOT commit — the Boss commits after
|
||||
reading the end-report (suggested commit subject:
|
||||
@@ -187,7 +187,7 @@ What the milestone shipped. One paragraph.
|
||||
|
||||
## Examples
|
||||
Per example, one subsection:
|
||||
### `examples/fieldtest/<milestone>_<n>_<slug>.ailx` — <task name>
|
||||
### `examples/fieldtest/<milestone>_<n>_<slug>.ail` — <task name>
|
||||
- What it does
|
||||
- Why this task fits the milestone's scope
|
||||
- Outcome: compiles? runs? matches expected stdout?
|
||||
@@ -272,7 +272,7 @@ before committing.
|
||||
| "DESIGN.md is fuzzy on the typeclass instance ordering, I'll pick the natural reading and proceed" | Pick the reading, RUN the example, AND record `spec_gap` with the reading you picked and why another reading was equally plausible. |
|
||||
| "Bug found — I'll just fix it now, faster than handing off to debug" | Fix-in-place violates the skill split. The fix lands in a separate, RED-tested commit via `debug` → `implement`. |
|
||||
| "Two examples both ran clean, no findings — short report" | A clean run is itself a finding (`working`). Record what was reached for, what diagnostic showed up when wrong, what was easy. Wins protect the feature from drift. |
|
||||
| "I'll skip the JSON file generation, the .ailx is enough" | The committed pair (.ailx + .ail.json) is the regression fixture. Without the JSON, future bench runs can't pick it up. If `ail render --json` doesn't exist, record it as a finding. |
|
||||
| "I'll skip the JSON file generation, the .ail is enough" | The committed pair (.ail + .ail.json) is the regression fixture. Without the JSON, future bench runs can't pick it up. If `ail render --json` doesn't exist, record it as a finding. |
|
||||
| "Three examples is enough, I'll skip the fourth axis" | Each axis the milestone touched needs at least one example. Skipping an axis silently turns the field test into a partial signal, which is worse than no signal because the orchestrator will read it as full coverage. |
|
||||
|
||||
## Red Flags — STOP and re-read DESIGN.md
|
||||
|
||||
Reference in New Issue
Block a user