Anthropic now reserves /plan as a UI command, so the Skill tool refuses to
dispatch it. Rename the project's plan skill to planner, update the symlink
under .claude/skills/, and adjust references in CLAUDE.md, DESIGN.md,
skills/README.md, and the cross-references between brainstorm / implement /
audit / fieldtest / fieldtester. Plan files themselves (docs/plans/*.md)
keep their name — only the skill ID changes.
Three coupled changes to /implement:
- Boss-context offload via single subagent dispatch (target ~100x reduction)
- Iter isolation via branches (eliminates parallel-implementer conflicts)
- Per-iter journals under docs/journals/ replacing the JOURNAL.md monolith
JOURNAL.md becomes docs/journal-archive.md at acceptance time. Workers
stay at Opus 4.7; saving comes from token-volume relocation only.
Quality-review follow-up on ct.2.2 (b3c3b60).
- Delete CheckError::AmbiguousCtor: its sole producer (the Pattern::Ctor
imports-fallback) was removed in ct.2.2, leaving the variant, the
code()/ctx() arms, and the diagnostic.rs doc-comment as dead surface.
Workspace grep confirms no remaining Rust consumers. AmbiguousType
stays (it still has a Term::Ctor producer, scheduled for symmetric
removal in ct.2.3).
- Refresh the per-module-overlay rationale comment in check_in_workspace:
it still cited the now-defunct Pattern::Ctor local-first / imports-
fallback path. The overlay's current job is duplicate detection plus
bare-name lookups for local Term::Ctor synth.
- Fold the awkward re-match in type_check_pattern: the first match on
expected now binds scrutinee_args alongside resolved_type_name /
resolved_td / resolved_owning_module, deleting the second match +
unreachable!(). Collapse the any-then-expect ctor lookup into a single
find().ok_or(UnknownCtorInPattern).
Build green, 449+ tests green across the workspace.
Reversal of the language decision from 6d94fa5. Texts that get
committed to the repo permanently should follow the same English-
only rule as everything else; the Notify push stays 1:1 with the
WhatsNew entry, so both are English now.
The "only file intentionally not in English" carve-out in CLAUDE.md
is removed.
Done-state notifications now produce two synchronised outputs sharing
one text: an entry appended to docs/WhatsNew.md and the same string
sent via notify.sh. The text is written in German for the user-as-
reader who did not watch the session — no technical internals, no
iteration codes, lead with the change-in-the-project.
WhatsNew.md is the only file in the repo intentionally not in English;
the exception is documented in CLAUDE.md (Roles of docs/...) so a
future reader does not "correct" it back. Bounce-back notifications
stay Notify-only.
Five tests in crates/ail/tests/ct1_check_cli.rs, each pinning one named property:
- check_json_emits_bare_cross_module_type_ref: --json mode surfaces
`bare-cross-module-type-ref` with non-zero exit on the
test_ct1_bare_xmod_rejected fixture.
- check_json_emits_bad_cross_module_type_ref: same for
`bad-cross-module-type-ref`.
- check_json_emits_qualified_class_name: same for `qualified-class-name`.
- check_human_mode_emits_actionable_message_to_stderr: human (non-JSON)
mode prints both the offending type name and the migration-command
hint to stderr — this path goes through the anyhow/thiserror Display
impl, not workspace_error_to_diagnostic, so it needs its own pin.
- check_ordering_match_post_migration_is_clean: post-migration
ordering_match.ail.json typechecks via the CLI with zero diagnostics,
guarding against revert of the ct.1.5 migration or a regression in
Registry::normalize_type_for_lookup that would reject the canonical form.
Three Minor items from the ct.1.5a quality review:
1. normalize_type_for_registry now recurses into
Type::Forall.constraints[].type_, symmetric to walk_type. Closes a
latent gap: a Forall with bare cross-module constraint types reaching
the registry would have produced a key disagreeing with the qualified
form. RED test: ct1_5a_normalize_recurses_into_forall_constraints.
2. Documented the bare-name limitation on Registry::type_def_module:
two modules each defining 'type Foo' collide at insert; the proper
fix (re-key as (owning_module, bare_name)) is out of ct.1's scope.
3. Removed the four iter-tag explanatory paragraphs at the
normalize_type_for_lookup call sites (check/lib.rs check_fn,
mono.rs three sites). Replaced each with a one-line pointer to the
helper's docstring per project comment policy.
Adds BareCrossModuleTypeRef / BadCrossModuleTypeRef / QualifiedClassName
to WorkspaceLoadError plus the validate_canonical_type_names function
that enforces the canonical-form rule on every Type::Con name reachable
from any def (including Term::Lam.param_tys / .ret_ty and Term::LetRec.ty).
Term::Ctor.type_name and class-name fields land in Tasks 2 + 3; the
validator is not yet wired into load_workspace (Task 6). Seven RED-first
unit tests cover the cases enumerated in spec section Testing strategy
plus a Lam-embedded-type smuggle-prevention test.
main.rs gains diagnostic arms for the three new variants to keep the
exhaustive match compiling.