iter form-a.1 (Tasks 6-12): milestone close
Second half of the form-a-default-authoring milestone-close iter
(Boss-decided strategy C, big-bang). All seven tasks DONE; cargo
test --workspace green at every per-task boundary.
T6 — Bench-driver suffix flip from .ail.json to .ail across 4
Python scripts + run.sh. compile_check.py + cross_lang.py exit 0.
T7 — Re-author e2e.rs raw-JSON-inspect tests:
- diff_detects_changed_def — derive sum.ail.json on-the-fly via
`ail parse examples/sum.ail` into tempdir, then mutate + diff.
- borrow_own_demo_modes_are_metadata_only — same pattern.
- reuse_as_demo_under_rc_uses_inplace_rewrite — same pattern.
- render_parse_round_trip_canonical — RETIRED (subsumed by T1's
cli_parse_then_render_then_parse_is_idempotent over whole corpus).
- ail_run_accepts_ail_source_with_same_stdout_as_ail_json —
re-authored to derive hello.ail.json in a per-process tempdir
from hello.ail via `ail parse`, then assert dual-form stdout.
T8 — Bulk-delete 156 non-carve-out .ail.json. Inventory:
8 .ail.json (carve-outs, alphabetical: broken_unbound + prelude
+ 3× test_22b2_* + 3× test_ct1_*) + 157 .ail. carve_out_inventory
test un-#[ignore]'d and green. Forward-pulled 20 repairs that the
T1-5 dispatch's recon missed (12 Group-B suffix + 5 Group-A
load_workspace + 3 ail_run sites). Also forward-pulled T9 Step 5
(schema_coverage corpus flip from .ail.json to .ail) to satisfy
T8's green-gate.
T9 — Retire obsolete roundtrip tests:
- print_then_parse_round_trips_every_fixture (round_trip.rs)
- every_ail_fixture_matches_its_json_counterpart (round_trip.rs)
- cli_render_then_parse_preserves_canonical_bytes_on_every_fixture
- Dead helpers: list_json_fixtures ×2, round_trip_one,
strip_trailing_newlines.
Schema-coverage corpus already flipped in T8 (forward-pull).
T10 — DESIGN.md §"Roundtrip Invariant" (lines 2027-2109) restated
with parse-determinism + idempotency + CLI-pipeline-idempotency +
carve-out-anchor framing. Five surviving enforcement tests named.
§"Float literals" and §"Why anchored at top level" preserved.
T11 — §A4 doctrine edits: CLAUDE.md:5-6 + DESIGN.md:465-466.
Canonical form remains JSON-AST; authoring projection is .ail;
build derives JSON-AST in-process via ailang_surface::parse.
T12 — Milestone close:
- WhatsNew entry: user-facing language, lead with the change.
- Roadmap: [milestone] form-a struck [x] with closing note.
- Final inventory verified: 8 .ail.json + 157 .ail.
- Final cargo test --workspace: 557 passed, 0 failed, 3 ignored.
- bench/compile_check.py + bench/cross_lang.py: exit 0.
Test math: pre-iter 558 baseline + 3 new T1 tests = 561, − 1
(T7 retire) − 3 (T9 retire) = 557 final.
INDEX.md appended with the full iter summary covering T1-T12 (the
T1-5 commit at 77b28ad deferred the INDEX line to full-iter close).
Milestone [Form-A as the default authoring surface] structurally
closed. The compile-time-embed carve-out (prelude.ail.json) is
the subject of the queued follow-up milestone [Prelude embed:
Form-A as compile-time source]. audit-form-a runs as the next
dispatch.
This commit is contained in:
@@ -40,7 +40,7 @@ EXAMPLES = ROOT / "examples"
|
||||
|
||||
# Curated corpus. Pinned by name so the baseline keys are stable across
|
||||
# example-directory churn. Each entry must have a corresponding
|
||||
# `<name>.ail.json` under examples/.
|
||||
# `<name>.ail` under examples/.
|
||||
CORPUS = [
|
||||
# Surface coverage: each fixture exercises a different feature set.
|
||||
"hello", # IO baseline
|
||||
@@ -98,7 +98,7 @@ def measure(num_runs: int) -> dict[str, dict[str, float]]:
|
||||
|
||||
try:
|
||||
for fixture in CORPUS:
|
||||
src = EXAMPLES / f"{fixture}.ail.json"
|
||||
src = EXAMPLES / f"{fixture}.ail"
|
||||
if not src.is_file():
|
||||
print(f"missing fixture: {src}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
+2
-2
@@ -45,7 +45,7 @@ REFERENCE = ROOT / "bench" / "reference"
|
||||
OUTDIR = ROOT / "target" / "cross_lang"
|
||||
|
||||
# (ailang fixture stem, C reference stem) — both must exist as
|
||||
# `examples/<ail>.ail.json` and `bench/reference/<c>.c`.
|
||||
# `examples/<ail>.ail` and `bench/reference/<c>.c`.
|
||||
CORPUS = [
|
||||
("bench_list_sum", "list_sum"),
|
||||
("bench_tree_walk", "tree_walk"),
|
||||
@@ -77,7 +77,7 @@ def median_drop_slowest(runs: list[float]) -> float:
|
||||
|
||||
|
||||
def build_ailang(stem: str, alloc: str) -> Path:
|
||||
src = EXAMPLES / f"{stem}.ail.json"
|
||||
src = EXAMPLES / f"{stem}.ail"
|
||||
if not src.is_file():
|
||||
print(f"missing AILang fixture: {src}", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#
|
||||
# What this harness measures:
|
||||
# - AILang mono'd binary at -O2 --alloc=rc on
|
||||
# examples/bench_mono_dispatch.ail.json
|
||||
# examples/bench_mono_dispatch.ail
|
||||
# - Hand-C reference, three variants:
|
||||
# direct-inlinable — foo() inlinable, direct call
|
||||
# direct-noinline — foo() noinline, direct call
|
||||
@@ -109,7 +109,7 @@ def main() -> int:
|
||||
ail_bin = OUTDIR / "bench_mono_dispatch_ail"
|
||||
subprocess.run(
|
||||
[str(AIL), "build", "--opt=-O2", "--alloc=rc",
|
||||
str(EXAMPLES / "bench_mono_dispatch.ail.json"), "-o", str(ail_bin)],
|
||||
str(EXAMPLES / "bench_mono_dispatch.ail"), "-o", str(ail_bin)],
|
||||
check=True, capture_output=True,
|
||||
)
|
||||
|
||||
|
||||
@@ -3,28 +3,71 @@
|
||||
"date": "2026-05-13",
|
||||
"mode": "standard",
|
||||
"outcome": "DONE",
|
||||
"task_range": [1, 5],
|
||||
"tasks_total": 5,
|
||||
"tasks_completed": 5,
|
||||
"reloops_per_task": {
|
||||
"1": 0,
|
||||
"2": 1,
|
||||
"3": 0,
|
||||
"4": 0,
|
||||
"5": 0
|
||||
},
|
||||
"review_loops_spec": 0,
|
||||
"review_loops_quality": 0,
|
||||
"tasks_total": 12,
|
||||
"tasks_completed": 12,
|
||||
"dispatches": [
|
||||
{
|
||||
"task_range": [1, 5],
|
||||
"outcome": "DONE",
|
||||
"reloops_per_task": {
|
||||
"1": 0,
|
||||
"2": 1,
|
||||
"3": 0,
|
||||
"4": 0,
|
||||
"5": 0
|
||||
},
|
||||
"review_loops_spec": 0,
|
||||
"review_loops_quality": 0,
|
||||
"notes": "Plan recon defect: load_workspace prefers .ail siblings since ext-cli.1, so bulk-render of .ail siblings broke 7 Group-A tests whose entry was .ail.json. Inline forward-pull of Task-3 migrations + 4 transient #[ignore]'s on workspace.rs mod tests (relocated cleanly in Task 5).",
|
||||
"test_count_pre_dispatch": 558,
|
||||
"test_count_post_dispatch": 560,
|
||||
"test_count_ignored_post_dispatch": 4
|
||||
},
|
||||
{
|
||||
"task_range": [6, 12],
|
||||
"outcome": "DONE",
|
||||
"reloops_per_task": {
|
||||
"6": 0,
|
||||
"7": 1,
|
||||
"8": 1,
|
||||
"9": 0,
|
||||
"10": 0,
|
||||
"11": 0,
|
||||
"12": 0
|
||||
},
|
||||
"review_loops_spec": 0,
|
||||
"review_loops_quality": 0,
|
||||
"notes": {
|
||||
"task7_reloop": "ail_run_accepts_ail_source_with_same_stdout_as_ail_json initial re-author used tempfile-with-PID-suffix path; loader name-checks module-name-vs-file-stem and rejected. Repaired to use per-process tempdir with hello.ail.json as basename.",
|
||||
"task8_reloop": "Pre-T8 cargo-test green pre-deletion required pulling forward 20 stale-.ail.json-reference repairs that T1-5 missed: 12 `let example = X.ail.json` Group-B sites in e2e.rs + 5 ailang_core::load_workspace Group-A sites in e2e.rs + 3 ail_run Group-B sites in typeclass_22b3.rs. Post-deletion failure in schema_coverage required pulling T9 Step 5 (corpus flip + ailang_surface::load_module switch) forward into T8."
|
||||
},
|
||||
"test_count_pre_dispatch": 560,
|
||||
"test_count_post_dispatch": 557,
|
||||
"test_count_ignored_post_dispatch": 3,
|
||||
"test_count_retired": "1 (T7: render_parse_round_trip_canonical) + 3 (T9: print_then_parse_round_trips_every_fixture, every_ail_fixture_matches_its_json_counterpart, cli_render_then_parse_preserves_canonical_bytes_on_every_fixture) = 4 total. Net: 560 + 1 (un-ignore carve_out_inventory) - 4 retired = 557."
|
||||
}
|
||||
],
|
||||
"blocked_reason": null,
|
||||
"notes": {
|
||||
"task2_reloop": "Plan recon defect: load_workspace prefers .ail siblings since ext-cli.1, so bulk-render of .ail siblings broke 7 Group-A tests whose entry was .ail.json. Inline forward-pull of Task-3 migrations + 4 transient #[ignore]'s on workspace.rs mod tests (relocated cleanly in Task 5).",
|
||||
"iter_totals": {
|
||||
"test_count_pre_iter": 558,
|
||||
"test_count_post_iter_half": 560,
|
||||
"test_count_ignored_post_iter_half": 4,
|
||||
"test_count_ignored_breakdown": "1 carve_out_inventory (T8 un-ignores) + 3 doctests (pre-existing)",
|
||||
"test_count_post_iter": 557,
|
||||
"test_count_ignored_post_iter": 3,
|
||||
"corpus_ail_pre_iter": 58,
|
||||
"corpus_ail_post_iter_half": 157,
|
||||
"corpus_ail_json_post_iter_half": 164,
|
||||
"corpus_ail_json_target_post_T8": 8
|
||||
"corpus_ail_post_iter": 157,
|
||||
"corpus_ail_json_pre_iter": 164,
|
||||
"corpus_ail_json_post_iter": 8,
|
||||
"carve_outs": [
|
||||
"broken_unbound.ail.json",
|
||||
"prelude.ail.json",
|
||||
"test_22b2_invalid_superclass_param.ail.json",
|
||||
"test_22b2_kind_mismatch.ail.json",
|
||||
"test_22b2_unbound_constraint_var.ail.json",
|
||||
"test_ct1_bad_qualifier.ail.json",
|
||||
"test_ct1_bare_xmod_rejected.ail.json",
|
||||
"test_ct1_qualified_class_rejected.ail.json"
|
||||
],
|
||||
"milestone_closed": "Form-A as the default authoring surface",
|
||||
"bench_compile_check_exit": 0,
|
||||
"bench_cross_lang_exit": 0
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -65,7 +65,7 @@ fixtures=(bench_list_sum bench_tree_walk bench_closure_chain bench_hof_pipeline
|
||||
modes=(gc bump rc)
|
||||
echo ">>> compiling fixtures (-O2)"
|
||||
for f in "${fixtures[@]}"; do
|
||||
src="$ROOT/examples/$f.ail.json"
|
||||
src="$ROOT/examples/$f.ail"
|
||||
[[ -f "$src" ]] || { echo "missing fixture: $src" >&2; exit 1; }
|
||||
for m in "${modes[@]}"; do
|
||||
bin="$OUTDIR/${f}_${m}"
|
||||
@@ -179,8 +179,8 @@ done
|
||||
# was added in 18f.2 and may not exist on older branches that share
|
||||
# this script).
|
||||
LAT_HARNESS="$ROOT/bench/latency_harness.py"
|
||||
LAT_IMPL_SRC="$ROOT/examples/bench_latency_implicit.ail.json"
|
||||
LAT_EXPL_SRC="$ROOT/examples/bench_latency_explicit.ail.json"
|
||||
LAT_IMPL_SRC="$ROOT/examples/bench_latency_implicit.ail"
|
||||
LAT_EXPL_SRC="$ROOT/examples/bench_latency_explicit.ail"
|
||||
if [[ -x "$LAT_HARNESS" && -f "$LAT_IMPL_SRC" && -f "$LAT_EXPL_SRC" ]]; then
|
||||
echo
|
||||
echo ">>> latency bench (PTY inter-arrival, 1000 samples per arm)"
|
||||
|
||||
Reference in New Issue
Block a user