diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index fe9902fc..bee5f6fd 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -29,12 +29,12 @@ https://github.com/hyperpolymath/nextgen-languages/blob/main/docs/disambiguation The following files in `.machine_readable/` contain structured project metadata: -- `.machine_readable/6a2/STATE.a2ml` - Current project state and progress -- `.machine_readable/6a2/META.a2ml` - Architecture decisions and development practices -- `.machine_readable/6a2/ECOSYSTEM.a2ml` - Position in the ecosystem and related projects -- `.machine_readable/6a2/AGENTIC.a2ml` - AI agent interaction patterns -- `.machine_readable/6a2/NEUROSYM.a2ml` - Neurosymbolic integration config -- `.machine_readable/6a2/PLAYBOOK.a2ml` - Operational runbook +- `.machine_readable/descriptiles/STATE.a2ml` - Current project state and progress +- `.machine_readable/descriptiles/META.a2ml` - Architecture decisions and development practices +- `.machine_readable/descriptiles/ECOSYSTEM.a2ml` - Position in the ecosystem and related projects +- `.machine_readable/descriptiles/AGENTIC.a2ml` - AI agent interaction patterns +- `.machine_readable/descriptiles/NEUROSYM.a2ml` - Neurosymbolic integration config +- `.machine_readable/descriptiles/PLAYBOOK.a2ml` - Operational runbook --- @@ -57,7 +57,7 @@ The following files in `.machine_readable/` contain structured project metadata: | **Bash/POSIX Shell** | Scripts, automation | Keep minimal | | **Python** | SaltStack only | No other Python permitted | | **Nickel** | Configuration language | For complex configs | -| **A2ML** | State/meta files | .machine_readable/6a2/STATE.a2ml, .machine_readable/6a2/META.a2ml, .machine_readable/6a2/ECOSYSTEM.a2ml | +| **A2ML** | State/meta files | .machine_readable/descriptiles/STATE.a2ml, .machine_readable/descriptiles/META.a2ml, .machine_readable/descriptiles/ECOSYSTEM.a2ml | | **Julia** | Batch scripts, data processing | Per RSR | | **OCaml** | AffineScript compiler | Language-specific (compiler-host tooling lives here) | | **Ada** | Safety-critical systems | Where required | diff --git a/.machine_readable/TRUST.contractile b/.machine_readable/TRUST.contractile index a1f855ab..f1ee48c3 100644 --- a/.machine_readable/TRUST.contractile +++ b/.machine_readable/TRUST.contractile @@ -26,7 +26,7 @@ (deny "push without confirmation in the same session") (deny "add a language feature not in ANCHOR.a2ml thesis") (deny "reverse any ADR (ADR-001 through ADR-010) without a new ADR") - (deny "delete or overwrite the 6a2/ core files (STATE/META/ECOSYSTEM/AGENTIC/NEUROSYM/PLAYBOOK)") + (deny "delete or overwrite the descriptiles/ core files (STATE/META/ECOSYSTEM/AGENTIC/NEUROSYM/PLAYBOOK)") (deny "modify IDApTIK without explicit instruction (AGPL — separate repo, separate session)") ) diff --git a/.machine_readable/anchors/ANCHOR.a2ml b/.machine_readable/anchors/ANCHOR.a2ml index 96427e39..663b0d4c 100644 --- a/.machine_readable/anchors/ANCHOR.a2ml +++ b/.machine_readable/anchors/ANCHOR.a2ml @@ -61,7 +61,7 @@ thesis: authorities: scope-statement: - - ".machine_readable/6a2/META.a2ml (ADRs)" + - ".machine_readable/descriptiles/META.a2ml (ADRs)" - "~/Desktop/Frontier_Programming_Practices_AffineScript/AI.a2ml (v2.0)" human-guide: diff --git a/.machine_readable/6a2/AGENTIC.a2ml b/.machine_readable/descriptiles/AGENTIC.a2ml similarity index 100% rename from .machine_readable/6a2/AGENTIC.a2ml rename to .machine_readable/descriptiles/AGENTIC.a2ml diff --git a/.machine_readable/6a2/ECOSYSTEM.a2ml b/.machine_readable/descriptiles/ECOSYSTEM.a2ml similarity index 100% rename from .machine_readable/6a2/ECOSYSTEM.a2ml rename to .machine_readable/descriptiles/ECOSYSTEM.a2ml diff --git a/.machine_readable/6a2/META.a2ml b/.machine_readable/descriptiles/META.a2ml similarity index 99% rename from .machine_readable/6a2/META.a2ml rename to .machine_readable/descriptiles/META.a2ml index 13efb13c..81a323b5 100644 --- a/.machine_readable/6a2/META.a2ml +++ b/.machine_readable/descriptiles/META.a2ml @@ -483,10 +483,10 @@ consequences = """ form across format passes. """ references = [ - ".machine_readable/6a2/STATE.a2ml [track-a-manhattan]", - ".machine_readable/6a2/STATE.a2ml [[open-bug]] BUG-001", - ".machine_readable/6a2/STATE.a2ml [[open-bug]] BUG-002", - ".machine_readable/6a2/META.a2ml [[adr]] ADR-002 (scaled Let rule)", + ".machine_readable/descriptiles/STATE.a2ml [track-a-manhattan]", + ".machine_readable/descriptiles/STATE.a2ml [[open-bug]] BUG-001", + ".machine_readable/descriptiles/STATE.a2ml [[open-bug]] BUG-002", + ".machine_readable/descriptiles/META.a2ml [[adr]] ADR-002 (scaled Let rule)", "lib/ast.ml ExprLet (lines 105-111), StmtLet (lines 170-176)", "lib/lexer.ml (ZERO/ONE never emitted)", "lib/parser.mly quantity rule (lines 180-183)", diff --git a/.machine_readable/6a2/NEUROSYM.a2ml b/.machine_readable/descriptiles/NEUROSYM.a2ml similarity index 100% rename from .machine_readable/6a2/NEUROSYM.a2ml rename to .machine_readable/descriptiles/NEUROSYM.a2ml diff --git a/.machine_readable/6a2/PLAYBOOK.a2ml b/.machine_readable/descriptiles/PLAYBOOK.a2ml similarity index 100% rename from .machine_readable/6a2/PLAYBOOK.a2ml rename to .machine_readable/descriptiles/PLAYBOOK.a2ml diff --git a/.machine_readable/6a2/STATE.a2ml b/.machine_readable/descriptiles/STATE.a2ml similarity index 96% rename from .machine_readable/6a2/STATE.a2ml rename to .machine_readable/descriptiles/STATE.a2ml index f52ebf21..cf2d45e2 100644 --- a/.machine_readable/6a2/STATE.a2ml +++ b/.machine_readable/descriptiles/STATE.a2ml @@ -9,12 +9,12 @@ status = "active" authoritative-status-doc = "docs/CAPABILITY-MATRIX.adoc" drift-flag = "STALE as of 2026-05-23 PM: this file's [components]/[features]/[project-context] still predate landed PRs since 2026-05-19. It MIRRORS, it does not LEAD. Authoritative sources by topic — readiness: docs/CAPABILITY-MATRIX.adoc; spine + AS↔typed-wasm contract: docs/ECOSYSTEM.adoc; coordination ledger / critical path: docs/TECH-DEBT.adoc; test taxonomy + PR-level gates: docs/standards/TESTING.adoc (added 2026-05-23); panic-attack SOP: docs/standards/PANIC-ATTACK.adoc (added 2026-05-23). Gate baseline: CAPABILITY-MATRIX records 260/260 at 2026-05-19 reconstruction; subsequent borrow-checker work has lifted it (#240 → 263, return-escape → 271/274, &mut surface → 278/281). The exact live number for any given commit comes from `dune runtest --force` — do not hard-code it here. (DOC-05, issue #176.)" session-note-2026-06-21 = "SESSION: release-binaries pipeline repair + downstream gap triage + onboarding polish. (1) RELEASE — PR #641 (merged b8ba479) fixed .github/workflows/release.yml, which had been shipping v0.2.0 SOURCE-ONLY (regression from v0.1.1). Two bugs, both confirmed from the failed v0.2.0 run 26694097435: (a) immutable releases now forbid adding assets to a PUBLISHED release (linux leg died HTTP 422), and (b) the v0.2.0-added version-bake step used GNU `sed -i` which BSD/macOS sed rejects (extra characters at the end of l command), so both mac legs failed before building. Fix: create the release as a DRAFT, upload all binaries + SHA256SUMS into it, then publish (--draft=false --latest) last so it seals atomically; portable `sed -i.bak`. Compiler verified to build in release mode locally; --version/check/eval/compile work. v0.2.0 is immutable+assetless and cannot be amended, so binaries ship via a fresh v0.2.1 tag — OWNER action: a Claude-Code-web session cannot push v* tags (HTTP 403). Tracked in #646 (incl. downstream quandledb re-pin). (2) WASM cross-module constructor-link task was ALREADY LANDED before this session: #602 / ac98c81 (Closes #138) — register_imported_types in Codegen.gen_imports registers imported public enum constructors into variant_tags via the local gen_decl path; core-Wasm regression test in test_stdlib_aot.ml; verified locally 534/534. Downstream stapeln re-pins to ac98c81 and drops its carried git apply. (3) svalinn-gateway compiler gaps confirmed + filed: #642 (compile has no module search-path / project mode for nested src/**), #643 (float_to_string raises UnboundVariable at core-Wasm compile; wired only in resolve/typecheck/interp/Deno), #644 (empty match-arm body Pat => {} is a parse error). `pub extern fn` was checked and is SUPPORTED — not a gap. (4) ONBOARDING POLISH (this change): added tutorial lesson-01 (the docs/tutorial track previously started at lesson-02), an audience router (developers / maintainers / end-users) in README + NAVIGATION, and this note. Docs consolidation (two overlapping lesson tracks, wiki sync) tracked in #647. Note: guides/lessons/01-hello bare-println example is stale (parse error on current compiler) — folded into #647. This file MIRRORS; authoritative sources unchanged (see drift-flag)." -session-note-2026-05-26-publish-104 = "ISSUE #104 CLOSED — FIRST NPM PUBLISH LANDED. @hyperpolymath/affine-vscode@0.1.0 is now on registry.npmjs.org. Owner-action sequence completed today: (1) npm org `hyperpolymath` created on free public-package tier; (2) Granular Access Token generated for scope @hyperpolymath/* with Read+Write, uploaded to repo secret NPM_TOKEN; (3) signed annotated tag affine-vscode-v0.1.0 pushed at origin/main (RSA key 9639451754496E51D6B537CAD119017EBF695AB1); (4) .github/workflows/affine-vscode-publish.yml ran green — `npm publish --access public` succeeded; (5) `npm view @hyperpolymath/affine-vscode` resolves. Downstream consumers (my-lang#66, standards#160) which un-vendored their adapters on 2026-05-21 now have a working `npm install` path; vscode-smoke workflow (skipped per #381 while package was unpublished) will start exercising the live package on its next PR run. Lineage for future @hyperpolymath/* publishes: org+token are reusable; mirror `affine-vscode-publish.yml`'s shape (tag trigger, version-match guard, .npmrc write from secret, npm publish --access public). NPM_TOKEN rotation advised post-publish (token value transited a session transcript during wire-up); see .machine_readable/6a2/PLAYBOOK.a2ml [npm-publish] for the runbook." +session-note-2026-05-26-publish-104 = "ISSUE #104 CLOSED — FIRST NPM PUBLISH LANDED. @hyperpolymath/affine-vscode@0.1.0 is now on registry.npmjs.org. Owner-action sequence completed today: (1) npm org `hyperpolymath` created on free public-package tier; (2) Granular Access Token generated for scope @hyperpolymath/* with Read+Write, uploaded to repo secret NPM_TOKEN; (3) signed annotated tag affine-vscode-v0.1.0 pushed at origin/main (RSA key 9639451754496E51D6B537CAD119017EBF695AB1); (4) .github/workflows/affine-vscode-publish.yml ran green — `npm publish --access public` succeeded; (5) `npm view @hyperpolymath/affine-vscode` resolves. Downstream consumers (my-lang#66, standards#160) which un-vendored their adapters on 2026-05-21 now have a working `npm install` path; vscode-smoke workflow (skipped per #381 while package was unpublished) will start exercising the live package on its next PR run. Lineage for future @hyperpolymath/* publishes: org+token are reusable; mirror `affine-vscode-publish.yml`'s shape (tag trigger, version-match guard, .npmrc write from secret, npm publish --access public). NPM_TOKEN rotation advised post-publish (token value transited a session transcript during wire-up); see .machine_readable/descriptiles/PLAYBOOK.a2ml [npm-publish] for the runbook." session-note-2026-05-30 = "DOC-16 + DOC-17 — DOC-TRUTHING MONITOR FULLY MECHANICAL (issue #176). Two complementary in-repo guards now enforce the doc-truthing rules that were previously external-bot-only. DOC-16 (PR #476, tools/check-doc-truthing.sh): banner-PRESENCE invariant — fails if any over-claiming doc loses its CAPABILITY-MATRIX banner, if the matrix stops self-declaring primacy / loses its 'What AffineScript is NOT' section, or if STATE.a2ml drops its mirror keys; deliberately does NOT phrase-scan (a naive grep false-positives on the negating banners + future-roadmap text). DOC-17 (PR #475, tools/check-doc-overclaims.sh + tools/doc-overclaims.allow): the phrase-detection complement — a frozen-baseline RATCHET over README + docs/** (excluding CAPABILITY-MATRIX + TECH-DEBT, which quote the rule) that fails any NEW backend-breadth / 'production-ready' / stdlib-% occurrence beyond the 13-line baseline (all current entries legit: future-tense roadmap milestones + dated history snapshots + corrective banners); re-baseline via `--update` / `just doc-overclaims-bless`, diff = audit trail. Both wired into `just check` (guard recipe) + ci.yml build job, both toolchain-free bash (run without OCaml). #475 was originally a superset of #476 (built in parallel, same session); on discovering #476 had merged first, #475 was reworked to drop the duplicated banner check and keep only the unique ratchet, renamed check-doc-truth.sh→check-doc-overclaims.sh to avoid the name clash (DOC-DEDUP-clean). FOLLOW-UP (same day, post-#475-merge): the two near-identically-named guards were consolidated so neither lingers — the ratchet (incl. `--update` mode + tools/doc-overclaims.allow baseline) was folded INTO tools/check-doc-truthing.sh using #476's fail-accumulator/note() structure, and tools/check-doc-overclaims.sh was deleted. A SINGLE toolchain-free guard now enforces both presence invariants (DOC-04/05) and the over-claim ratchet (DOC-08/09) in one run; one CI step; the `guard` recipe runs it; re-baseline via `just doc-truth-bless`. DOC-17 folded into DOC-16 in the ledger. Gate-number policy unchanged (DOC-05): live `dune runtest --force` count never hard-coded. No compiler code touched. Refs #176 / #175." session-note-2026-05-31-partial-port-488 = "RES-TO-AFFINE PARTIAL-PORT MODE #488 SLICES 1-3 (successor to closed #57). New --partial flag, a DISTINCT model from --translate: renders module-top-level functions (let f = (params) => body) into AffineScript fn skeletons whose output DELIBERATELY does not type-check (un-annotated ReScript fns can't yield a compilable fn) but DOES parse — un-inferable types are `_` holes, un-translatable expr/pattern are () /* TODO */ / _ /* TODO */ islands. (1) Slice 1 (#494 / c157a0f): fn skeletons + switch->match (variant/tuple/literal patterns) + expression translation (literals / idents / calls / binary-ops with float-op +.->+ and identity-equality ===->== normalisation / ++ concat / member + module-qualified access / ternary). The binary operator is an anonymous tree-sitter token, sliced from source between the operands. (2) Slice 2 (#495 / 78906f9): pipe-first -> desugaring (a->f(b) -> f(a, b); chains are left-nested so x->f->g(2) -> g(f(x), 2) falls out of the recursion); if/else; blocks with let statements. (3) Slice 3 (#496 / 4d4d1d4): array literals ([a, b] -> [a, b]) + record literals ({x, y} -> Rec #{ x: x, y: y }; AffineScript records are NOMINAL so an anonymous record gets the placeholder type Rec for the human to rename; field punning {x} -> x: x). Walker-internal: translate_expr / translate_switch / translate_pipe / translate_if / translate_as_block / translate_block(_inner) / translate_block_let (mutually recursive) + translate_pattern + partial_function + collect_partial + Walker.translate_partial; emitter emit_partial; main --partial (precedence over --translate, walker-only). 32 res-to-affine walker tests. VERIFIED LOCALLY each slice (apt-bootstrapped toolchain): full dune build exit 0; dune runtest green; main.exe check on the generated skeletons reaches resolution/type-checking WITHOUT a parse error (the partial-port bar — type/resolution errors are expected). REMAINING #488: JS objects / interpolated template strings, labelled-arg refinement, combining --partial with --translate (declarations + functions in one pass), and module-qualified-reference RESOLUTION (a ReScript->AffineScript module-mapping POLICY decision, deliberately not built without owner scoping). #488 stays OPEN. Refs #488 / #57 (closed)." session-note-2026-05-31-migration-phase3-slice3-and-closure = "MIGRATION-ASSISTANT PHASE 3 SLICE 3 + #57 CLOSURE + SUCCESSOR #488. (1) PR #484 (squash ea8bef5): res-to-affine --translate extended to module-level literal value bindings — let = lowered to a typed AffineScript const name: T = value; for int/float/string/bool (AffineScript has no module-level let; a top-level value binding is const, annotation + semicolon required). New walker.ml helpers classify_number / translate_literal / translate_let_const + a let_declaration branch in collect_translations. Conservative: call bodies, ref(...) mutable-globals, destructuring patterns, and exotic numbers (hex/octal/binary/signed/scientific/underscored) are skipped — number forms limited to plain decimal int and D+.D+ float. New fixture test/fixtures/phase3c.res + 4 gated walker tests (walker-phase3c-let-const). (2) VERIFIED LOCALLY (apt-bootstrapped toolchain): full dune build exit 0; 22 res-to-affine walker tests green against pinned grammar 990214a; compiler oracle main.exe check on the generated consts returns Type checking passed. (3) #57 CLOSED as completed (owner-directed) — the declaration-translation goal is delivered across slices 1 (#477 / 2763909) / 2 (#481 / 3484010) / 3 (#484 / ea8bef5) plus the session-start toolchain hook (#482 / 138baac); --translate now renders every self-contained top-level declaration (type aliases, sums, structs, generics, literal consts) to compiler-verified AffineScript. (4) SUCCESSOR #488 filed: res-to-affine partial-port mode (switch->match / function translation) + module-qualified-reference resolution — both OUT of the every-emitted-form-type-checks model by construction (switch->match is an expression needing whole-function translation of usually-un-annotated ReScript fns, which AffineScript fn signatures can't type-check; qualified refs parse post-#228 but won't resolve without a module-mapping story). #488 is a child of estate migration epic #406; remaining migration work continues there. Refs #57 (closed) / #488 / #406." session-note-2026-05-30-migration-phase3 = "MIGRATION-ASSISTANT PHASE 3 SLICES 1+2 (issue #57) + SESSION-START HOOK. (1) res-to-affine --translate now turns fully-structural ReScript type declarations into compiler-verified AffineScript; two slices landed off main. Slice 1 (PR #477, squash 2763909): primitive type aliases (type userId = int -> type UserId = Int) and simple sum types (type color = Red | Green -> type Color = | Red | Green; payloads mapped, Circle(float) -> Circle(Float)). Slice 2 (PR #481, squash 3484010): record types -> AffineScript struct (type point = {x: int} -> struct Point { x: Int }) and GENERICS — ReScript type params 'a mapped to AffineScript [A], threaded through aliases, sums, and records (param refs in bodies map 'a -> A). (2) New code is walker-internal (tools/res-to-affine/walker.ml): translate_type_ref / translate_variant / translate_record_fields / affine_type_param / extract_type_params / translate_type_binding / collect_translations, plus Walker.translate and Emitter.emit_translation; CLI gains --translate (walker-only; no-op under --engine=scanner). Detection keys on tree-sitter node TYPE not field labels, robust to the grammar's optional alias/body-field ambiguity. (3) CONSERVATIVE BY CONSTRUCTION — a decl translates only when every part is representable; qualified-path RHS, non-primitive/opaque refs, nested generics (array), object types, GADT returns, variant spreads, and records with mutable or optional-? fields are SKIPPED (left in the marker block + quoted original), never mis-translated. Two normalisations keep output referenceable: lower-case type names capitalised (color->Color) and type vars mapped ('a->A), because lib/parser.mly reads a lower-case name in type position as a TyVar not a TyCon. (4) QUALIFIED-PATH RHS DEFERRED: Belt.Map.t now PARSES (the #228 grammar gap closed — parser.mly:515 wires qualified_type_name into type_expr_primary) but Belt::Map::T would not RESOLVE against a non-existent target module, which would break the every-translated-form-type-checks guarantee; it waits for a module-mapping story. Remaining Phase-3 slices: let->const for literal bindings, switch->match (needs body translation), qualified-path resolution. #57 stays OPEN. (5) VERIFICATION: unlike earlier res-to-affine work this was built+tested locally — the OCaml toolchain was apt-bootstrapped (opam.ocaml.org is network-blocked here, but Ubuntu packages match the project pins: dune 3.14 / cmdliner 1.2 / alcotest 1.7 / menhir 20231231 / sedlex 3.2 / ppx_deriving 5.2 / ppxlib 0.32 / yojson 2.1 / js_of_ocaml 5.6). Full dune build exit 0; dune runtest green (21 res-to-affine cases incl. gated walker tests against pinned grammar 990214a); and the COMPILER ORACLE (main.exe check, the #228 method) returns Type checking passed on every generated form. (6) CONFIG: added .claude/hooks/session-start.sh (SessionStart hook) registered in .claude/settings.json so future web sessions auto-provision this exact apt toolchain + tree-sitter CLI + pinned grammar — synchronous, idempotent, best-effort, web-only (CLAUDE_CODE_REMOTE guard); settings.json also gains dune/tree-sitter build+test permissions. (7) Both #477 and #481 were admin-merged while CI runners were backlogged; #481 was fully locally verified before merge. Refs #57 / #228." -session-note-2026-05-26 = "MIGRATION-ASSISTANT PHASE 2C + REPO-TIDY STACK (T-1..T-7) + STDLIB BLOCKER CLOSURES. (1) PR #357 — feat(res-to-affine) Phase 2c on branch claude/epic-gauss-Mbi0E: tree-sitter walker extended from #322's single Side_effect_import detector to all six anti-patterns. New detectors in tools/res-to-affine/walker.ml — detect_raw_js (any extension_expression node), detect_untyped_exception (try_expression / call to value_identifier \"raise\" / member_expression starting with Js.Exn or ending with Promise.catch), detect_mutable_global (top-level let_declaration whose body is call to value_identifier \"ref\", OR top-level mutation_expression), detect_inline_callback_record (>=3 inline function values in a record literal or a call_expression's arguments list — handles direct function children + labeled_argument + record_field wrappers), detect_oversized_function (function node whose stop.row - start.row + 1 > 50). Module-toplevel predicate refactored to a single at_module_toplevel helper that walks the ancestor chain refusing on `function` or `let_binding` body. Findings deduped by (kind, line) so the AST walker doesn't emit more bullets than the line-based scanner. CLI flipped --engine=walker to the default in tools/res-to-affine/main.ml (scanner remains as fallback when grammar / tree-sitter CLI missing — pre-existing graceful-fallback path from #322 unchanged). Scanner.kind extended with Inline_callback_record + Oversized_function variants; scanner.ml gives them labels + guidance. New fixture test/fixtures/phase2c.res exercises the two walker-only kinds. test_walker.ml grew per-kind tests under three new suites (walker-side-effect-import / walker-phase2c-parity / walker-phase2c-new-kinds). README + walker.mli updated. (2) Phase 2c CI fix push (e7a3a44): initial Phase 2c commit had build+lint failing; defensive rewrite replaced the labeled-only `mk_finding ~kind:K ~line:L ~excerpt:E :: acc` emit pattern with explicit `let finding : Scanner.finding = { ... } in finding :: acc` matching Phase 2b's working style, plus replaced non-ASCII glyphs in comments (≥ → >=, … → ...) defensively. (3) DIAGNOSED: `main` itself is red. PR #359 (T-1, pure file-rename + delete + one-line CONTRIBUTING.md edit, zero OCaml touched) also fails on build+lint. That conclusively shows the build failure is inherited from main, not introduced by Phase 2c or any tidy work. Matches CLAUDE.md §\"CI signal reliability\" — auto-merge fires even when build is red; the historical pattern of #334/#335/#336/#344 landing red applies. Root cause on main is NOT diagnosed in this session (needs the actual `dune build` log; WebFetch on the actions UI returns React skeletons, not log content; container has no OCaml toolchain to repro locally). Filed implicit follow-up: someone with shell access should run `gh run view --log-failed ` against any of the recent failing runs to identify the underlying lib/ compile error. (4) REPO-TIDY STACK (T-1..T-7) — six small PRs landed off origin/main, each reviewable in isolation, none touching .ml/.mli, all inheriting the same baseline build/lint failure as PR #359 (proof above). T-1 PR #359 *MERGED* — AI.a2ml → 0-AI-MANIFEST.a2ml (Hypatia root_hygiene rule + sibling-repo convention), delete AI.djot (superseded), docs/TECH-DEBT-alt.adoc → docs/TECH-DEBT.adoc (restoring the canonical name every cross-link in the repo already points at; PR #356's -alt suffix during the #351 split is dead weight post-#355). T-2 PR #360 — delete 2,182 lines of submarine-game docs (DAMAGE-SYSTEM.md, CONTROLS-REFERENCE.md, GAME-BUNDLING-STRATEGY.md), zero cross-references. T-3 PR #365 — 13 loose root .md/.adoc moved into docs/ subtree (ABI-FFI-README → docs/reference/ABI-FFI.md, ALPHA-1-RELEASE-NOTES → docs/history/, BACKEND-{ANALYSIS,IMPLEMENTATION} → docs/architecture/, COMPILER-CAPABILITIES → docs/reference/, EXPLAINME/KNOWN-ISSUES/NAVIGATION/PROOF-NEEDS/ROADMAP → docs/, LICENSING-GUIDE/SECURITY-SETUP → docs/governance/, RSR_OUTLINE → docs/standards/RSR-OUTLINE.adoc), two new subdirs docs/architecture/ + docs/reference/, cross-refs fixed in CAPABILITY-MATRIX / BACKEND-IMPLEMENTATION / CONTRIBUTING / NAVIGATION / res-to-affine; root drops 17→5 community-health files. T-4 PR #366 — RSR_COMPLIANCE.adoc at root with four documented deviations (no guix.scm/flake.nix; STATE.scm substituted by .machine_readable/6a2/STATE.a2ml because .scm is reserved for Guix per language policy; 7 TS exemptions; 2 runtime exemptions — all cite CLAUDE.md as authoritative). T-5 PR #367 — wiki/README.md rewrite (drops ~20 dead links to non-existent .md files, updates stale ../ROADMAP.md → ../docs/ROADMAP.adoc path, annotates Features-at-a-Glance examples with current maturity, switches Ownership example from &File/&mut File sigil syntax to canonical ref File/mut File keyword types) + parse-only honesty banner on wiki/language-reference/dependent-types.md + partial honesty banner on wiki/language-reference/traits.md. T-6 — direct issue triage, no PR: closed #246 (ESC-02 JSON.t — stdlib/json.affine delivers Json ADT + encoders/decoders/get_field/stringify) and #247 (ESC-03 Dict.t — stdlib/dict.affine delivers empty/from_pairs/get/contains/size/insert/set/remove/keys/values), both with confirmation comments referencing the LANDED status in docs/TECH-DEBT.adoc STDLIB-02/03 rows. T-7 this PR — adds this session-note + the T-1..T-7 ledger entry below in docs/TECH-DEBT.adoc. (5) ALSO RESOLVED EARLIER IN SESSION (pre-T-6, as part of addressing the sustainabot tracker blockers the user asked about): #161 (Json) and #162 (Dict) closed with explicit owner-author-acknowledged closure comments dated 2026-05-24; this session was the explicit owner request to act on those. Migration-assistant tracker #57 stays open — Phase 2c lands #322's Phase 2b → 2c walker work but Phase 3 (partial translation of pure-structural forms — the phase the sustainabot tracker's exit criterion 3 specifically gates on) remains unstarted. (6) OPEN PRs AT SESSION END: #357 (Phase 2c, ready to merge — author/owner discretion on the baseline-red CI), #360/#365/#366/#367 (T-2/T-3/T-4/T-5, same baseline-red situation; pure-rename / pure-delete / pure-doc-add changes, no behavioural risk). (7) NOT DONE IN THIS SESSION: actual root-cause diagnosis of main's red build/lint; ~20 missing wiki pages (installation, hello-world, expressions, errors, package-manager, lsp, formatter, linter, stdlib subpages, design/*); guix.scm or flake.nix addition; full wiki content refresh beyond README + two banners; sync of wiki/ to the GitHub-wiki upstream repo (separate git repo, owner pushes manually). (8) CROSS-REPO: this session is AffineScript-only — the gitbot-fleet sustainabot tracker that prompted #161/#162/#57 lives in a different repo and was not touched here." +session-note-2026-05-26 = "MIGRATION-ASSISTANT PHASE 2C + REPO-TIDY STACK (T-1..T-7) + STDLIB BLOCKER CLOSURES. (1) PR #357 — feat(res-to-affine) Phase 2c on branch claude/epic-gauss-Mbi0E: tree-sitter walker extended from #322's single Side_effect_import detector to all six anti-patterns. New detectors in tools/res-to-affine/walker.ml — detect_raw_js (any extension_expression node), detect_untyped_exception (try_expression / call to value_identifier \"raise\" / member_expression starting with Js.Exn or ending with Promise.catch), detect_mutable_global (top-level let_declaration whose body is call to value_identifier \"ref\", OR top-level mutation_expression), detect_inline_callback_record (>=3 inline function values in a record literal or a call_expression's arguments list — handles direct function children + labeled_argument + record_field wrappers), detect_oversized_function (function node whose stop.row - start.row + 1 > 50). Module-toplevel predicate refactored to a single at_module_toplevel helper that walks the ancestor chain refusing on `function` or `let_binding` body. Findings deduped by (kind, line) so the AST walker doesn't emit more bullets than the line-based scanner. CLI flipped --engine=walker to the default in tools/res-to-affine/main.ml (scanner remains as fallback when grammar / tree-sitter CLI missing — pre-existing graceful-fallback path from #322 unchanged). Scanner.kind extended with Inline_callback_record + Oversized_function variants; scanner.ml gives them labels + guidance. New fixture test/fixtures/phase2c.res exercises the two walker-only kinds. test_walker.ml grew per-kind tests under three new suites (walker-side-effect-import / walker-phase2c-parity / walker-phase2c-new-kinds). README + walker.mli updated. (2) Phase 2c CI fix push (e7a3a44): initial Phase 2c commit had build+lint failing; defensive rewrite replaced the labeled-only `mk_finding ~kind:K ~line:L ~excerpt:E :: acc` emit pattern with explicit `let finding : Scanner.finding = { ... } in finding :: acc` matching Phase 2b's working style, plus replaced non-ASCII glyphs in comments (≥ → >=, … → ...) defensively. (3) DIAGNOSED: `main` itself is red. PR #359 (T-1, pure file-rename + delete + one-line CONTRIBUTING.md edit, zero OCaml touched) also fails on build+lint. That conclusively shows the build failure is inherited from main, not introduced by Phase 2c or any tidy work. Matches CLAUDE.md §\"CI signal reliability\" — auto-merge fires even when build is red; the historical pattern of #334/#335/#336/#344 landing red applies. Root cause on main is NOT diagnosed in this session (needs the actual `dune build` log; WebFetch on the actions UI returns React skeletons, not log content; container has no OCaml toolchain to repro locally). Filed implicit follow-up: someone with shell access should run `gh run view --log-failed ` against any of the recent failing runs to identify the underlying lib/ compile error. (4) REPO-TIDY STACK (T-1..T-7) — six small PRs landed off origin/main, each reviewable in isolation, none touching .ml/.mli, all inheriting the same baseline build/lint failure as PR #359 (proof above). T-1 PR #359 *MERGED* — AI.a2ml → 0-AI-MANIFEST.a2ml (Hypatia root_hygiene rule + sibling-repo convention), delete AI.djot (superseded), docs/TECH-DEBT-alt.adoc → docs/TECH-DEBT.adoc (restoring the canonical name every cross-link in the repo already points at; PR #356's -alt suffix during the #351 split is dead weight post-#355). T-2 PR #360 — delete 2,182 lines of submarine-game docs (DAMAGE-SYSTEM.md, CONTROLS-REFERENCE.md, GAME-BUNDLING-STRATEGY.md), zero cross-references. T-3 PR #365 — 13 loose root .md/.adoc moved into docs/ subtree (ABI-FFI-README → docs/reference/ABI-FFI.md, ALPHA-1-RELEASE-NOTES → docs/history/, BACKEND-{ANALYSIS,IMPLEMENTATION} → docs/architecture/, COMPILER-CAPABILITIES → docs/reference/, EXPLAINME/KNOWN-ISSUES/NAVIGATION/PROOF-NEEDS/ROADMAP → docs/, LICENSING-GUIDE/SECURITY-SETUP → docs/governance/, RSR_OUTLINE → docs/standards/RSR-OUTLINE.adoc), two new subdirs docs/architecture/ + docs/reference/, cross-refs fixed in CAPABILITY-MATRIX / BACKEND-IMPLEMENTATION / CONTRIBUTING / NAVIGATION / res-to-affine; root drops 17→5 community-health files. T-4 PR #366 — RSR_COMPLIANCE.adoc at root with four documented deviations (no guix.scm/flake.nix; STATE.scm substituted by .machine_readable/descriptiles/STATE.a2ml because .scm is reserved for Guix per language policy; 7 TS exemptions; 2 runtime exemptions — all cite CLAUDE.md as authoritative). T-5 PR #367 — wiki/README.md rewrite (drops ~20 dead links to non-existent .md files, updates stale ../ROADMAP.md → ../docs/ROADMAP.adoc path, annotates Features-at-a-Glance examples with current maturity, switches Ownership example from &File/&mut File sigil syntax to canonical ref File/mut File keyword types) + parse-only honesty banner on wiki/language-reference/dependent-types.md + partial honesty banner on wiki/language-reference/traits.md. T-6 — direct issue triage, no PR: closed #246 (ESC-02 JSON.t — stdlib/json.affine delivers Json ADT + encoders/decoders/get_field/stringify) and #247 (ESC-03 Dict.t — stdlib/dict.affine delivers empty/from_pairs/get/contains/size/insert/set/remove/keys/values), both with confirmation comments referencing the LANDED status in docs/TECH-DEBT.adoc STDLIB-02/03 rows. T-7 this PR — adds this session-note + the T-1..T-7 ledger entry below in docs/TECH-DEBT.adoc. (5) ALSO RESOLVED EARLIER IN SESSION (pre-T-6, as part of addressing the sustainabot tracker blockers the user asked about): #161 (Json) and #162 (Dict) closed with explicit owner-author-acknowledged closure comments dated 2026-05-24; this session was the explicit owner request to act on those. Migration-assistant tracker #57 stays open — Phase 2c lands #322's Phase 2b → 2c walker work but Phase 3 (partial translation of pure-structural forms — the phase the sustainabot tracker's exit criterion 3 specifically gates on) remains unstarted. (6) OPEN PRs AT SESSION END: #357 (Phase 2c, ready to merge — author/owner discretion on the baseline-red CI), #360/#365/#366/#367 (T-2/T-3/T-4/T-5, same baseline-red situation; pure-rename / pure-delete / pure-doc-add changes, no behavioural risk). (7) NOT DONE IN THIS SESSION: actual root-cause diagnosis of main's red build/lint; ~20 missing wiki pages (installation, hello-world, expressions, errors, package-manager, lsp, formatter, linter, stdlib subpages, design/*); guix.scm or flake.nix addition; full wiki content refresh beyond README + two banners; sync of wiki/ to the GitHub-wiki upstream repo (separate git repo, owner pushes manually). (8) CROSS-REPO: this session is AffineScript-only — the gitbot-fleet sustainabot tracker that prompted #161/#162/#57 lives in a different repo and was not touched here." typed-wasm-formalisation-2026-05-23 = "AS↔TYPED-WASM INTERFACE FORMALISED + WIDENING ROADMAP + TWO PROPOSED ADRs. (1) docs/specs/TYPED-WASM-INTERFACE.adoc + .a2ml — formal spec of the v1 interface (was previously scattered across ECOSYSTEM.adoc + code comments in lib/codegen.ml, tw_interface.ml, tw_verify.ml). Captures: enforced surface (L7 aliasing + L10 linearity + L13 module isolation negative-form); carrier binary layout (u32 entry_count + per-entry [u32 func_index | u8 param_count | u8[n] param_kind | u8 ret_kind], kind ∈ {0 Unrestricted, 1 Linear, 2 SharedBorrow, 3 ExclBorrow}, all LE, omit-when-empty, no version field in v1); producer machinery file-line pointers (lib/codegen.ml ~110-177 + ctx.ownership_annots ~2312/~2629); consumer machinery (tw_verify.ml 332 LOC, tw_interface.ml 276 LOC, primary entry verify_from_module); CLI surface (verify / verify-boundary / verify-bridge / interface — verify-boundary's pre-2026-04-19 silent-success bug fixed by f6089a2); test coverage (test_tw_isolation.ml 5 cases + E2E Boundary Verify 3 cases + ownership-roundtrip 3 cases; honest gap: no C5.1 cross-compat fixtures shipped); multi-producer responsibilities (AS = ref producer + spec of record until C5.1; ephapax = second producer same format; typed-wasm = spec + Rust verifier + cross-compat target); deliberate non-features NF-001..NF-005 with roadmap anchors; stability promise (v1 frozen; unilateral changes forbidden). (2) docs/specs/TYPED-WASM-ROADMAP.adoc + .a2ml — making typed-wasm a natural + optimal target. Five tranches with unblock graph: A (ergonomics, no ABI change: A1 --typed-wasm gating flag, A2 report-typed-wasm JSON, A3 extract ownership-section to dedicated module, A4 diagnostic span parity) → B (schema hygiene, additive single-byte ABI: B1 = ADR-020) → C (compiler-side foundations for L1–6/L14–16: C1 region inference / CORE-01 Phase 3, C2 session-type+capability tracking, C3 CONV-02/ADR-016 S2..S4 async recogniser, C4 capability-typed externs) → D (multi-producer ABI widening: D1 = ADR-021, D2 affinescript.regions, D3 affinescript.{capabilities,session,choreography}) → E (cross-compat closure: E1 INT-12/CONV-05 fixtures into typed-wasm C5.1, E2 Rust-verifier parity out-of-scope-here). Recommended sequencing: A1→A3→A2→E1→B1→A4→D1→C1..C4→D2/D3→E2. (3) ADR-020 (PROPOSED, META.a2ml): ownership-section schema versioning — v1 unversioned → v2 with 0xAF sentinel + u8 version + entry_count. v1 readers fail cleanly on v2 (bad entry-count parse); v2 readers dispatch on sentinel. Coordinated landing: verifier ships parse first, producers flip emit together. (4) ADR-021 (PROPOSED, META.a2ml): multi-producer ABI coordination model — four axes (spec authority OCaml→Rust on C5.1 closure; coordinated landing protocol; test parity protocol; conflict resolution via serialised queue owned by typed-wasm). ADR-020 is itself the first test of ADR-021's protocol. (5) Cross-links: ECOSYSTEM.adoc §contract paragraph now points at TYPED-WASM-INTERFACE.adoc as authoritative; CAPABILITY-MATRIX.adoc typed-wasm row links to INTERFACE + ROADMAP and notes L13 alongside L7/L10; TECH-DEBT.adoc Stage E section gets header pointer + DOC-13/14/15 ledger entries (interface, roadmap, ADRs); docs/README.adoc + NAVIGATION.adoc list both new specs. (6) Pure documentation work — no compiler code changed, no behaviour change. Both ADRs require owner ratification before they bind." stage-d-batch-2026-05-23 = "INT-01 ::-in-value-expr + BUG-005 deferred fixture + STDLIB-04 audit. (1) INT-01 follow-up: lib/parser.mly line ~835 — added `upper_ident COLONCOLON lower_ident` production emitting `ExprField(ExprVar Mod, lower_ident)`, the same AST shape `Mod.fn` already produces. Disambiguated from the line-above `Type::Variant` rule by lower_ident vs upper_ident. No resolver change required: Resolve.lower_qualified_value_paths handles both `.` and `::` syntaxes identically because the lowering pattern-matches on the ExprField shape, not the source separator. test/e2e/fixtures/cross_caller_qualified_colon{,_alias}.affine + 2 alcotest cases in qualified_value_tests pin both `use Mod; Mod::fn(x)` and `use Mod as M; M::fn(x)`. The remaining INT-01 'parser gap, not resolver' note in the ledger is now closed. (2) BUG-005 deferred regression test landed (test/test_e2e.ml, wasm_gc_loud_fail_tests): `fn main() -> Int { return totally_undefined_callee(42); }` is fed directly to Codegen_gc.generate_gc_module (no resolve step) and the emitted error must contain the unknown name — which UnboundFunction's format string includes verbatim. Closes the deferred-status entry on the [[closed-bug]] BUG-005 record. (3) docs/STDLIB-EXTERN-AUDIT.adoc — full triage of 135 extern fn + 24 extern type across 11 stdlib files into 4 classes (built-in / typed-boundary-bridge / adapter-Deno / adapter-Node); per-row status (done/partial/stub-only) and unblock condition for each module. STDLIB-04's ledger entry now points here. Implementation PRs close one row at a time; the audit doc is the canonical roadmap, not STATE.a2ml. (4) Not yet verified locally — no OCaml toolchain in this remote execution environment. CI is the verification surface; parser change is low-risk (single production, no Menhir conflict — `upper_ident COLONCOLON lower_ident` is unambiguous against the prior `upper_ident COLONCOLON upper_ident` rule by token class)." hygiene-uplift-2026-05-23 = "TEST + BENCH + COVERAGE + PANIC-ATTACK SOPs LANDED. (1) docs/standards/TESTING.adoc — authoritative test taxonomy (alcotest unit / alcotest E2E / fixture / golden / smoke / microbench), PR-level expectations, deferred-regression-test protocol. Replaces the stale docs/guides/TESTING-REPORT.adoc (2025-12-29 snapshot, 47/27 pass rate, contradicted by live gate since early 2026); retired in-place with redirect to CAPABILITY-MATRIX + standards/TESTING. (2) bench/ scaffold — dune stanza under @bench alias, 4 phase microbenches (lex/parse/typecheck+quantity/codegen-wasm) over 3 shared fixtures (tiny_arith, medium_struct_match, larger_enum). just bench / just bench-record recipes. CI job `bench-visibility` uploads bench-output.log as artifact. Visibility-only — no merge-blocking threshold. (3) bisect_ppx coverage wiring — added as with-test depend in dune-project + affinescript.opam. just coverage recipe (HTML to _coverage/, gitignored). CI job `coverage-visibility` uploads _coverage as artifact + summary to step output. Visibility-only — no enforced floor. (4) docs/standards/PANIC-ATTACK.adoc — SOP for the estate compliance scanner. Disposition vocabulary (fix/accept/suppress/defer); standing-suppression record format; cross-refs to MAINTENANCE-CHECKLIST. .github/workflows/panic-attack.yml: weekly Sunday 03:00 UTC cron + workflow_dispatch, installs panic-attacker via cargo from road-skate/features/panic-attacker, uploads log as artifact. (5) docs/README.adoc + NAVIGATION.adoc updated — standards/ now lists TESTING + PANIC-ATTACK; guides/TESTING-REPORT marked RETIRED. (6) .gitignore — added /_coverage/, bisect*.coverage, /bench-runs/." @@ -214,7 +214,7 @@ regression-test-status = "landed 2026-05-23 — test/test_e2e.ml `test_gc_unboun # ─── Deferred upgrade: bring .machine_readable/ to current standards ────────── # AffineScript predates most of the current hyperpolymath .machine_readable/ -# suite. The 6a2 core is present; the surrounding machinery is not. This is +# suite. The descriptiles core is present; the surrounding machinery is not. This is # logged as deferred work, separate from the Manhattan recovery, to avoid # scope creep into that plan. diff --git a/0-AI-MANIFEST.a2ml b/0-AI-MANIFEST.a2ml index e8ab0b19..c361cad3 100644 --- a/0-AI-MANIFEST.a2ml +++ b/0-AI-MANIFEST.a2ml @@ -4,7 +4,7 @@ Project metadata and AI agent configuration files live under `.machine_readable/`. All metadata files use the `.a2ml` extension; the `.scm` extension is reserved for Guix (`guix.scm`, `.guix-channel`). -## Core 6a2 metadata (`.machine_readable/6a2/`) +## Core descriptiles metadata (`.machine_readable/descriptiles/`) - **STATE.a2ml** - Current project state, progress, blockers, next actions, session notes - **ECOSYSTEM.a2ml** - Position in ecosystem, relationships to sibling projects @@ -29,7 +29,7 @@ Project metadata and AI agent configuration files live under `.machine_readable/ ## Workflow -1. Read `.machine_readable/6a2/*.a2ml` files at session start +1. Read `.machine_readable/descriptiles/*.a2ml` files at session start 2. Check `STATE.a2ml` for current phase, blockers, next actions 3. Follow patterns and constraints from `AGENTIC.a2ml` 4. Follow methodology gates from `agent_instructions/methodology.a2ml` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41d3f311..16cd75a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ Thank you for your interest in AffineScript — a practical language for resource-safe systems, compiling to typed WebAssembly. This guide covers how to set up a working tree, file useful bugs, and submit changes. -For the language itself, start from [`README.adoc`](README.adoc). For project state, blockers, and next-actions, see [`.machine_readable/6a2/STATE.a2ml`](.machine_readable/6a2/STATE.a2ml). +For the language itself, start from [`README.adoc`](README.adoc). For project state, blockers, and next-actions, see [`.machine_readable/descriptiles/STATE.a2ml`](.machine_readable/descriptiles/STATE.a2ml). --- @@ -75,7 +75,7 @@ affinescript/ ### Suggesting Features **Before suggesting:** -1. Skim [`docs/ROADMAP.adoc`](docs/ROADMAP.adoc) and `.machine_readable/6a2/STATE.a2ml`. +1. Skim [`docs/ROADMAP.adoc`](docs/ROADMAP.adoc) and `.machine_readable/descriptiles/STATE.a2ml`. 2. Search existing issues and discussions. **When suggesting:** use the [feature request template](.github/ISSUE_TEMPLATE/feature_request.md) and include: diff --git a/RSR_COMPLIANCE.adoc b/RSR_COMPLIANCE.adoc index 102a6bb0..6256dec6 100644 --- a/RSR_COMPLIANCE.adoc +++ b/RSR_COMPLIANCE.adoc @@ -34,7 +34,7 @@ toc::[] |`.well-known/humans.txt` |✅ |Human-readable maintainer / contributor surface. |`guix.scm` or `flake.nix` |⚠️ |Neither file currently committed; the `affinescript.opam` package descriptor + the global `justfile` recipes carry the build contract today. Adding a Guix channel definition is a planned follow-up (estate primary is Guix per RSR-OUTLINE §"Language Tiers"); a Nix fallback would be acceptable for early CI. |`0-AI-MANIFEST.a2ml` |✅ |Adopted 2026-05-25 (PR #359) replacing the older `AI.a2ml` per Hypatia `root_hygiene` rule. Matches sibling-repo convention (`hyperpolymath/road-skate`, `affinescript-vite/`, `affinescriptiser/` all carry the same). -|`STATE.scm` |❌ |*Documented exemption.* This repo's `.scm` extension is reserved for Guix (`guix.scm`, `.guix-channel`) per the language policy in `0-AI-MANIFEST.a2ml`. Project state lives at `.machine_readable/6a2/STATE.a2ml` in the canonical 6a2 schema (matches sibling repos in the same estate). Substituting `.a2ml` for `.scm` is the cross-repo standard, not an AffineScript outlier — see also `hyperpolymath/road-skate`'s `.machine_readable/STATE.a2ml`. +|`STATE.scm` |❌ |*Documented exemption.* This repo's `.scm` extension is reserved for Guix (`guix.scm`, `.guix-channel`) per the language policy in `0-AI-MANIFEST.a2ml`. Project state lives at `.machine_readable/descriptiles/STATE.a2ml` in the canonical descriptiles schema (matches sibling repos in the same estate). Substituting `.a2ml` for `.scm` is the cross-repo standard, not an AffineScript outlier — see also `hyperpolymath/road-skate`'s `.machine_readable/STATE.a2ml`. |`RSR_COMPLIANCE.adoc` |✅ |This file. Added 2026-05-25. |=== diff --git a/docs/CAPABILITY-MATRIX.adoc b/docs/CAPABILITY-MATRIX.adoc index d31612f0..2c51efa2 100644 --- a/docs/CAPABILITY-MATRIX.adoc +++ b/docs/CAPABILITY-MATRIX.adoc @@ -13,7 +13,7 @@ readiness.* Where any other document (`README.adoc`, `docs/architecture/BACKEND-IMPLEMENTATION.md`, `docs/reference/COMPILER-CAPABILITIES.md`, `docs/history/ALPHA-1-RELEASE-NOTES.md`, `docs/ROADMAP.adoc`, -`.machine_readable/6a2/STATE.a2ml`) +`.machine_readable/descriptiles/STATE.a2ml`) disagrees with this matrix, *this matrix wins* and the other document is drift to be corrected. Reconstructed and verified 2026-05-19 against `origin/main`@dc5b817 with the compiler as oracle. Tracks issue diff --git a/docs/EFFECTS-IMPLEMENTATION.adoc b/docs/EFFECTS-IMPLEMENTATION.adoc index 7fefd294..3590872c 100644 --- a/docs/EFFECTS-IMPLEMENTATION.adoc +++ b/docs/EFFECTS-IMPLEMENTATION.adoc @@ -5,7 +5,7 @@ == Status Sync (2026-04-12) This document tracks the implementation status of algebraic effects in -AffineScript and is aligned with `.machine++_++readable/6a2/STATE.a2ml`. +AffineScript and is aligned with `.machine++_++readable/descriptiles/STATE.a2ml`. == Syntax (Current Parser Form) diff --git a/docs/NAVIGATION.adoc b/docs/NAVIGATION.adoc index 9d02adeb..ad9f85c2 100644 --- a/docs/NAVIGATION.adoc +++ b/docs/NAVIGATION.adoc @@ -9,7 +9,7 @@ This guide helps you navigate the AffineScript repository structure. * *New users* — link:tutorial/lesson-01-hello.adoc[tutorial (lessons 1–10)], link:guides/warmup/[runnable warm-ups], link:../wiki/language-reference/[language reference]. * *Developers / contributors* — this guide, link:../wiki/compiler/architecture.md[compiler architecture], link:decisions/[ADRs], link:governance/CONTRIBUTING.adoc[contributing]. -* *Maintainers* — link:governance/MAINTAINERS.adoc[maintainers], link:standards/RELEASE.adoc[release process], link:../.machine_readable/6a2/PLAYBOOK.a2ml[ops playbook], link:SOUNDNESS.adoc[soundness ledger]. +* *Maintainers* — link:governance/MAINTAINERS.adoc[maintainers], link:standards/RELEASE.adoc[release process], link:../.machine_readable/descriptiles/PLAYBOOK.a2ml[ops playbook], link:SOUNDNESS.adoc[soundness ledger]. == Quick Start Files (Root Level) diff --git a/docs/ROADMAP.adoc b/docs/ROADMAP.adoc index ffffdd62..fefa6bd8 100644 --- a/docs/ROADMAP.adoc +++ b/docs/ROADMAP.adoc @@ -18,7 +18,7 @@ order: *Ecosystem Integration Track* INT-01..12. * `docs/TECH-DEBT.adoc` — the coordination ledger (DOC/CORE/STDLIB/INT/SAT). -`.machine_readable/6a2/STATE.a2ml` mirrors these; it does not lead, and is +`.machine_readable/descriptiles/STATE.a2ml` mirrors these; it does not lead, and is currently flagged stale (DOC-05, issue #176). ==== diff --git a/docs/STATE-2026-05-26.adoc b/docs/STATE-2026-05-26.adoc index 31521bc9..2ae03e7f 100644 --- a/docs/STATE-2026-05-26.adoc +++ b/docs/STATE-2026-05-26.adoc @@ -157,7 +157,7 @@ This is important and routinely misunderstood: Canonical disambiguation: https://github.com/hyperpolymath/nextgen-languages/blob/main/docs/disambiguation/ephapax-vs-affinescript.md -Repo-level hooks landed 2026-05-26: README admonitions in affinescript (PR #393), ephapax (ephapax#152), typed-wasm (typed-wasm#73); CLAUDE.md disambiguation sections; `.machine_readable/6a2/AGENTIC.a2ml` `[disambiguation]` blocks; hypatia DR001 advisory rule (hypatia#347). +Repo-level hooks landed 2026-05-26: README admonitions in affinescript (PR #393), ephapax (ephapax#152), typed-wasm (typed-wasm#73); CLAUDE.md disambiguation sections; `.machine_readable/descriptiles/AGENTIC.a2ml` `[disambiguation]` blocks; hypatia DR001 advisory rule (hypatia#347). == Distance to 1.0 (per ROADMAP timeline) diff --git a/docs/TECH-DEBT.adoc b/docs/TECH-DEBT.adoc index 09d327e7..3e2db99a 100644 --- a/docs/TECH-DEBT.adoc +++ b/docs/TECH-DEBT.adoc @@ -66,7 +66,7 @@ lines 25/614 also fixed — pointed both at CAPABILITY-MATRIX). MONITOR posture stays live via DOC-08/09 |DOC-05 |`STATE.a2ml` drift flagged (it mirrors, does not lead) |*DONE in tree* 2026-05-21 (`authoritative-status-doc` + `drift-flag` keys -present in `.machine_readable/6a2/STATE.a2ml`; README "Documentation" +present in `.machine_readable/descriptiles/STATE.a2ml`; README "Documentation" section now also labels STATE.a2ml as the mirror) |DOC-06 |`ROADMAP.adoc` Ecosystem Integration Track (INT-01..12) cross-links this ledger |*DONE in tree* 2026-05-21 (ROADMAP.adoc §"Status & @@ -460,7 +460,7 @@ Widening roadmap (tranches A..E, recommended sequencing): link:specs/TYPED-WASM-ROADMAP.adoc[specs/TYPED-WASM-ROADMAP.adoc]. Proposed ADRs: ADR-020 (schema versioning), ADR-021 (multi-producer coordination model) — both PROPOSED in -`.machine_readable/6a2/META.a2ml`. +`.machine_readable/descriptiles/META.a2ml`. [cols="1,3,1,2"] |=== diff --git a/docs/ci/required-checks.adoc b/docs/ci/required-checks.adoc index 52309aff..aebf271f 100644 --- a/docs/ci/required-checks.adoc +++ b/docs/ci/required-checks.adoc @@ -7,7 +7,7 @@ ==== *Sketch / operational note* (seeded 2026-06-21). Captures a CI failure class that blocked merges across the estate and the rule that prevents it. Pairs with -the machine entry in `.machine_readable/6a2/PLAYBOOK.a2ml` (`[ci-required-checks]`). +the machine entry in `.machine_readable/descriptiles/PLAYBOOK.a2ml` (`[ci-required-checks]`). ==== toc::[] diff --git a/docs/decisions/0019-compiler-distribution.adoc b/docs/decisions/0019-compiler-distribution.adoc index 6548d00c..5a5da428 100644 --- a/docs/decisions/0019-compiler-distribution.adoc +++ b/docs/decisions/0019-compiler-distribution.adoc @@ -9,7 +9,7 @@ Jonathan D.A. Jewell Status:: Accepted Date:: 2026-05-19 (accepted); implementation S1–S4 landed 2026-05-20 Issue:: https://github.com/hyperpolymath/affinescript/issues/260[INT-04 #260] (split from https://github.com/hyperpolymath/affinescript/issues/181[#181]) -Series:: Settled-decisions ledger; companion entry in `.machine_readable/6a2/META.a2ml [[adr]] id="ADR-019"`; narrative in `docs/specs/SETTLED-DECISIONS.adoc` §"Compiler Distribution". +Series:: Settled-decisions ledger; companion entry in `.machine_readable/descriptiles/META.a2ml [[adr]] id="ADR-019"`; narrative in `docs/specs/SETTLED-DECISIONS.adoc` §"Compiler Distribution". == Context @@ -125,7 +125,7 @@ tag-time bake step (#297/#300). this record. * `docs/PACKAGING.adoc` §"The compiler itself — decided (ADR-019 / #260)". * `docs/TECH-DEBT.adoc` INT-04 / INT-10 rows. -* `.machine_readable/6a2/META.a2ml [[adr]] id="ADR-019"` — the machine record. +* `.machine_readable/descriptiles/META.a2ml [[adr]] id="ADR-019"` — the machine record. * `.github/workflows/release.yml` (S2 producer), `.github/workflows/publish-jsr.yml` (owner-gated shim publish), `packages/affinescript-cli/` (the shim). diff --git a/docs/decisions/0022-polonius-origin-variables.adoc b/docs/decisions/0022-polonius-origin-variables.adoc index 47060039..7dfb423f 100644 --- a/docs/decisions/0022-polonius-origin-variables.adoc +++ b/docs/decisions/0022-polonius-origin-variables.adoc @@ -9,7 +9,7 @@ Jonathan D.A. Jewell Status:: Accepted (architecture ratified in PR #407 thread, 2026-05-27; staged implementation tracked in #553) Date:: 2026-05-26 Issue:: https://github.com/hyperpolymath/affinescript/issues/177[CORE-01 #177] -Series:: Settled-decisions ledger; companion entry in `.machine_readable/6a2/META.a2ml`. +Series:: Settled-decisions ledger; companion entry in `.machine_readable/descriptiles/META.a2ml`. == Context @@ -339,7 +339,7 @@ At each milestone: binding), #396 (Slice C′ loop soundness), #397 (Slice D captured-linears). * `docs/STATE-2026-05-26.adoc` §"Dominant cost item" / §"Critical path". * `docs/CAPABILITY-MATRIX.adoc` CORE-01 row. -* `.machine_readable/6a2/META.a2ml [[adr]] id="ADR-022"`. +* `.machine_readable/descriptiles/META.a2ml [[adr]] id="ADR-022"`. * `docs/specs/SETTLED-DECISIONS.adoc` (section to be added on ratification). * Polonius reference: Niko Matsakis, "An alias-based formulation of the borrow checker", 2018 (the `subset/3` + `loan_live_at/2` shape, naive diff --git a/docs/decisions/0023-finality-types.adoc b/docs/decisions/0023-finality-types.adoc index 7136cc86..856dac5c 100644 --- a/docs/decisions/0023-finality-types.adoc +++ b/docs/decisions/0023-finality-types.adoc @@ -9,7 +9,7 @@ Jonathan D.A. Jewell Status:: Draft (stub — design-only; no implementation authorised by this document) Date:: 2026-06-11 Issue:: https://github.com/hyperpolymath/affinescript/issues/554[#554 (soundness gate)], https://github.com/hyperpolymath/affinescript/issues/553[#553 (ADR-022 sequencing)] -Series:: Settled-decisions ledger; companion entry to be added to `.machine_readable/6a2/META.a2ml` at ratification. +Series:: Settled-decisions ledger; companion entry to be added to `.machine_readable/descriptiles/META.a2ml` at ratification. == The hard question, on page one diff --git a/docs/history/MODULE-SYSTEM-PROGRESS.md b/docs/history/MODULE-SYSTEM-PROGRESS.md index 65435366..425907af 100644 --- a/docs/history/MODULE-SYSTEM-PROGRESS.md +++ b/docs/history/MODULE-SYSTEM-PROGRESS.md @@ -360,7 +360,7 @@ have real modules, or stay flat-and-deduplicated? **Decision: real modules with qualified paths.** Not a flat de-duplicated prelude. Status: **accepted, settled** (ADR-011 in -`.machine_readable/6a2/META.a2ml`; ledger entry in +`.machine_readable/descriptiles/META.a2ml`; ledger entry in `docs/specs/SETTLED-DECISIONS.adoc`). ### Rationale diff --git a/docs/history/SESSION-HANDOFF-2026-05-27.adoc b/docs/history/SESSION-HANDOFF-2026-05-27.adoc index 5acb2957..c4121f02 100644 --- a/docs/history/SESSION-HANDOFF-2026-05-27.adoc +++ b/docs/history/SESSION-HANDOFF-2026-05-27.adoc @@ -18,7 +18,7 @@ Actions queue drain. == What this session actually did 1. Drafted **ADR-022** at `docs/decisions/0022-polonius-origin-variables.adoc` - + a structured `[[adr]]` block in `.machine_readable/6a2/META.a2ml`, + + a structured `[[adr]]` block in `.machine_readable/descriptiles/META.a2ml`, shipped as draft PR **#398**. 2. Cut a minimal **M1 sketch** for ADR-022 (`origin_var option` on `TyRef`/`TyMut` + a `lib/borrow_polonius/` sublibrary skeleton) — kept diff --git a/docs/history/TYPECHECKER-COMPLETION-2026-01-23.adoc b/docs/history/TYPECHECKER-COMPLETION-2026-01-23.adoc index ac03b7cb..a8c2fbdb 100644 --- a/docs/history/TYPECHECKER-COMPLETION-2026-01-23.adoc +++ b/docs/history/TYPECHECKER-COMPLETION-2026-01-23.adoc @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: 2024-2026 hyperpolymath (Jonathan D.A. Jewell ) ____ Historical snapshot from 2026-01-23. Superseded by -.machine++_++readable/6a2/STATE.a2ml. Retained for audit trail only. +.machine++_++readable/descriptiles/STATE.a2ml. Retained for audit trail only. ____ = Type Checker Completion Report diff --git a/docs/history/TYPED-WASM-LEVEL-10-CLOSURE-2026-04-19.adoc b/docs/history/TYPED-WASM-LEVEL-10-CLOSURE-2026-04-19.adoc index fc767972..f5dd0997 100644 --- a/docs/history/TYPED-WASM-LEVEL-10-CLOSURE-2026-04-19.adoc +++ b/docs/history/TYPED-WASM-LEVEL-10-CLOSURE-2026-04-19.adoc @@ -149,4 +149,4 @@ not a typed-wasm gap. * Submodule bumps: `nextgen-languages@61f69e5`, `nextgen-languages@24a3205` * Sibling doc commit: `developer-ecosystem@b7fbe5f` (deno-test README + regression) * `KNOWN-ISSUES.md` — flipped to RESOLVED with root-cause summary retained for history -* `.machine_readable/6a2/STATE.a2ml` — session-note-2026-04-19-a +* `.machine_readable/descriptiles/STATE.a2ml` — session-note-2026-04-19-a diff --git a/docs/reports/AFFINESCRIPT-ROADMAP-STATUS-2026-04-13.adoc b/docs/reports/AFFINESCRIPT-ROADMAP-STATUS-2026-04-13.adoc index f81eead2..c6238a3a 100644 --- a/docs/reports/AFFINESCRIPT-ROADMAP-STATUS-2026-04-13.adoc +++ b/docs/reports/AFFINESCRIPT-ROADMAP-STATUS-2026-04-13.adoc @@ -243,7 +243,7 @@ implementation, not source analysis tools. === ⏳ .machine++_++readable Suite Upgrade * Status: Completed 2026-04-12 -* All 6a2 core present +* All descriptiles core present * Surrounding machinery added === ⏳ Performance Benchmarks diff --git a/docs/spec.adoc b/docs/spec.adoc index dbc13426..d4e55493 100644 --- a/docs/spec.adoc +++ b/docs/spec.adoc @@ -14,7 +14,7 @@ project. *The authoritative current scope lives in:* - `.machine++_++readable/anchors/ANCHOR.a2ml` (canonical identity {plus} -thesis) - `.machine++_++readable/6a2/META.a2ml` (architecture decision +thesis) - `.machine++_++readable/descriptiles/META.a2ml` (architecture decision records) - `~/Desktop/Frontier++_++Programming++_++Practices++_++AffineScript/AI.a2ml` (v2.0) - diff --git a/docs/specs/SETTLED-DECISIONS.adoc b/docs/specs/SETTLED-DECISIONS.adoc index 69da63ae..5239dac4 100644 --- a/docs/specs/SETTLED-DECISIONS.adoc +++ b/docs/specs/SETTLED-DECISIONS.adoc @@ -7,7 +7,7 @@ Jonathan D.A. Jewell This document records design decisions that are fully settled. Each entry gives the decision, the reasoning, and a pointer to the full ADR in -`.machine_readable/6a2/META.a2ml`. +`.machine_readable/descriptiles/META.a2ml`. These are not open questions. Do not reopen them without amending the ADR. @@ -153,7 +153,7 @@ the machinery the compiler (`module_loader.ml`, `module`/`use`/`::` grammar) and the newer stdlib files (Core, Deno, Vscode, …) already use. Settles issue #132; gates #133/#135/#137/#138. Full ADR in -`.machine_readable/6a2/META.a2ml` (ADR-011). +`.machine_readable/descriptiles/META.a2ml` (ADR-011). == Grammar Changes Are Correctness Assertions; Parser-Conflict Disclosure (ADR-012) @@ -210,7 +210,7 @@ full raw output. Nothing is suppressed at the parser-generator level build is byte-for-byte unchanged and fully transparent on demand. Settles the disposition of issue #215 residual families. Full ADR in -`.machine_readable/6a2/META.a2ml` (ADR-012). +`.machine_readable/descriptiles/META.a2ml` (ADR-012). == Async on WasmGC: Transparent CPS Continuation Transform (ADR-013) @@ -242,7 +242,7 @@ The `Thenable`-handle + `thenableThen` continuation protocol is the agreed async ABI for the typed-wasm convergence layer; Ephapax is a co-stakeholder (typed-wasm ADR-004). Delivered as 4 incremental, gated PRs. Full design in `docs/specs/async-on-wasm-cps.adoc`; full ADR -in `.machine_readable/6a2/META.a2ml` (ADR-013). +in `.machine_readable/descriptiles/META.a2ml` (ADR-013). == Module-Qualified Type/Effect Path Separator (ADR-014) @@ -268,7 +268,7 @@ The grammar PR unblocks *parsing*; most estate parse failures clear with zero consumer churn (genuine ReScript-surface residue is #229). This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-014); ledger CORE-03 in +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-014); ledger CORE-03 in `docs/TECH-DEBT.adoc`. == WASI Preview2 / WASM Component-Model Migration (ADR-015) @@ -322,7 +322,7 @@ native-preview2 cleanup that replaces the on-demand preview1 shims emitted by S4a/S4b/S6b with direct `wasi:*` calls. This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-015); ledger INT-03 in +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-015); ledger INT-03 in `docs/TECH-DEBT.adoc`; roadmap in `docs/ECOSYSTEM.adoc`. == Effect-Threaded Async-Boundary Detection (ADR-016) @@ -356,7 +356,7 @@ triggers the transform; *S4* retire the hardcoded set (fallback kept for table-miss only). This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-016); ledger #234 / +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-016); ledger #234 / CORE-02 in `docs/TECH-DEBT.adoc`. == ReScript Block-Module Disposition: One Module Per File (ADR-017) @@ -390,7 +390,7 @@ loader-bridge territory), tracked in `RESCRIPT-ELIMINATION.adoc` Tier-4 and the INT-02 ledger, never conflated with this disposition. This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-017); #229 canonical map in +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-017); #229 canonical map in `docs/RESCRIPT-ELIMINATION.adoc`; escalation issue #262. == No Raw/FFI Escape: Typed `extern` Is the Only Host Bridge (ADR-018) @@ -423,7 +423,7 @@ parts of `burble`) port under this doctrine; per-file execution is the #229 per-repo work. This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-018); #229 canonical map in +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-018); #229 canonical map in `docs/RESCRIPT-ELIMINATION.adoc`; escalation issue #245. == Compiler Distribution: GitHub Releases Binaries + Thin Deno/JSR Shim (ADR-019) @@ -456,6 +456,6 @@ tests, publish owner-gated via the existing manual JSR workflow; *S4* wire INT-10 `affinescript-lsp` onto the shim. This decision is settled; do not reopen without amending the ADR. Full -ADR in `.machine_readable/6a2/META.a2ml` (ADR-019) and the per-file +ADR in `.machine_readable/descriptiles/META.a2ml` (ADR-019) and the per-file decision record link:../decisions/0019-compiler-distribution.adoc[docs/decisions/0019-compiler-distribution.adoc]; ledger #260 / INT-10 in `docs/TECH-DEBT.adoc`. diff --git a/docs/specs/TYPED-WASM-COORDINATION-LEDGER.a2ml b/docs/specs/TYPED-WASM-COORDINATION-LEDGER.a2ml index 4c991642..a8e2ba0a 100644 --- a/docs/specs/TYPED-WASM-COORDINATION-LEDGER.a2ml +++ b/docs/specs/TYPED-WASM-COORDINATION-LEDGER.a2ml @@ -67,7 +67,7 @@ state-since = "2026-05-24" owner = "@hyperpolymath" [queue-entry.adr] -local = { repo = "hyperpolymath/affinescript", id = "ADR-020", status = "accepted", file = ".machine_readable/6a2/META.a2ml" } +local = { repo = "hyperpolymath/affinescript", id = "ADR-020", status = "accepted", file = ".machine_readable/descriptiles/META.a2ml" } mirror-typed-wasm = { repo = "hyperpolymath/typed-wasm", status = "to-be-filed" } mirror-ephapax = { repo = "hyperpolymath/ephapax", status = "to-be-filed" } @@ -115,8 +115,8 @@ items = ["sister-repo ADR mirrors", "verifier-parse-support PRs in typed-wasm + # ────────────────────────────────────────────────────────────────────────────── [cross-references] -adr-020 = ".machine_readable/6a2/META.a2ml [[adr]] id=ADR-020" -adr-021 = ".machine_readable/6a2/META.a2ml [[adr]] id=ADR-021" +adr-020 = ".machine_readable/descriptiles/META.a2ml [[adr]] id=ADR-020" +adr-021 = ".machine_readable/descriptiles/META.a2ml [[adr]] id=ADR-021" interface-spec = "docs/specs/TYPED-WASM-INTERFACE.adoc" roadmap = "docs/specs/TYPED-WASM-ROADMAP.adoc" human-companion = "docs/specs/TYPED-WASM-COORDINATION-LEDGER.adoc" diff --git a/docs/specs/TYPED-WASM-COORDINATION-LEDGER.adoc b/docs/specs/TYPED-WASM-COORDINATION-LEDGER.adoc index 2be21d90..ba9c10e5 100644 --- a/docs/specs/TYPED-WASM-COORDINATION-LEDGER.adoc +++ b/docs/specs/TYPED-WASM-COORDINATION-LEDGER.adoc @@ -159,7 +159,7 @@ ledger entry*, never by silent drift. * link:TYPED-WASM-ROADMAP.adoc[TYPED-WASM-ROADMAP.adoc] — widening tranches; this ledger is the apparatus that makes tranche D land safely. -* `.machine_readable/6a2/META.a2ml` — ADR-020 (accepted), ADR-021 +* `.machine_readable/descriptiles/META.a2ml` — ADR-020 (accepted), ADR-021 (accepted). * link:TYPED-WASM-COORDINATION-LEDGER.a2ml[TYPED-WASM-COORDINATION-LEDGER.a2ml] — machine-readable companion. diff --git a/docs/specs/TYPED-WASM-ROADMAP.a2ml b/docs/specs/TYPED-WASM-ROADMAP.a2ml index ee98047c..378882b3 100644 --- a/docs/specs/TYPED-WASM-ROADMAP.a2ml +++ b/docs/specs/TYPED-WASM-ROADMAP.a2ml @@ -298,5 +298,5 @@ current-spec = "docs/specs/TYPED-WASM-INTERFACE.adoc" ledger = "docs/TECH-DEBT.adoc" ecosystem = "docs/ECOSYSTEM.adoc" settled-decisions = "docs/specs/SETTLED-DECISIONS.adoc" -adr-store = ".machine_readable/6a2/META.a2ml" +adr-store = ".machine_readable/descriptiles/META.a2ml" proposed-adrs = ["ADR-020 (schema versioning)", "ADR-021 (multi-producer coordination model)"] diff --git a/docs/specs/TYPED-WASM-ROADMAP.adoc b/docs/specs/TYPED-WASM-ROADMAP.adoc index 39bce663..443a3ab0 100644 --- a/docs/specs/TYPED-WASM-ROADMAP.adoc +++ b/docs/specs/TYPED-WASM-ROADMAP.adoc @@ -394,7 +394,7 @@ Pragmatic order, smallest-blast-radius first: * link:../TECH-DEBT.adoc[../TECH-DEBT.adoc] — CONV-01..05 ledger units; INT-12 entry. * link:../ECOSYSTEM.adoc[../ECOSYSTEM.adoc] — A–E spine. -* `.machine_readable/6a2/META.a2ml` — ADR-020 / ADR-021 (proposed, +* `.machine_readable/descriptiles/META.a2ml` — ADR-020 / ADR-021 (proposed, pending owner ratification). * link:TYPED-WASM-ROADMAP.a2ml[TYPED-WASM-ROADMAP.a2ml] — machine-readable companion. diff --git a/docs/specs/async-on-wasm-cps.adoc b/docs/specs/async-on-wasm-cps.adoc index f0c9969d..fe3e0bad 100644 --- a/docs/specs/async-on-wasm-cps.adoc +++ b/docs/specs/async-on-wasm-cps.adoc @@ -8,7 +8,7 @@ Jonathan D.A. Jewell == Status ACCEPTED (owner-approved 2026-05-18). Recorded as ADR-013 -(`SETTLED-DECISIONS.adoc` + `.machine_readable/6a2/META.a2ml`). The +(`SETTLED-DECISIONS.adoc` + `.machine_readable/descriptiles/META.a2ml`). The async ABI section is mirrored into the typed-wasm convergence layer with an Ephapax co-stakeholder review flag (typed-wasm ADR-004 — tracked separately). Implementation proceeds as the 4-PR plan below, diff --git a/docs/standards/PANIC-ATTACK.adoc b/docs/standards/PANIC-ATTACK.adoc index 4653272d..caa1c2f6 100644 --- a/docs/standards/PANIC-ATTACK.adoc +++ b/docs/standards/PANIC-ATTACK.adoc @@ -130,7 +130,7 @@ opened : YYYY-MM-DD == Session-note history The most recent ad-hoc panic-attack audit was logged in -`.machine_readable/6a2/STATE.a2ml`, session-note 2026-04-11 +`.machine_readable/descriptiles/STATE.a2ml`, session-note 2026-04-11 (end-of-Affinatea-stage-6 batch): * 1 High — `search.js` `innerHTML` → false positive but diff --git a/docs/standards/TESTING.a2ml b/docs/standards/TESTING.a2ml index 000973d6..ce6511e7 100644 --- a/docs/standards/TESTING.a2ml +++ b/docs/standards/TESTING.a2ml @@ -133,7 +133,7 @@ target-file = "docs/TECH-DEBT.adoc" # one of the recognised reasons. [deferred-regression-test] -recorded-in = ".machine_readable/6a2/STATE.a2ml" +recorded-in = ".machine_readable/descriptiles/STATE.a2ml" recorded-field = "[[closed-bug]].regression-test-status" unblock-condition-required = true diff --git a/docs/standards/TESTING.adoc b/docs/standards/TESTING.adoc index 4e748e02..e54aeee4 100644 --- a/docs/standards/TESTING.adoc +++ b/docs/standards/TESTING.adoc @@ -145,7 +145,7 @@ test is not. To declare a deferred regression test, add a `regression-test-status = "deferred — "` field to the bug's `[[closed-bug]]` record -in `.machine_readable/6a2/STATE.a2ml`. Use one of these reasons: +in `.machine_readable/descriptiles/STATE.a2ml`. Use one of these reasons: * `observability` — no side-effecting builtin or harness reaches the bug's failure mode (e.g. BUG-003's eval order requires diff --git a/tools/check-doc-truthing.sh b/tools/check-doc-truthing.sh index c8328c4a..705235a5 100755 --- a/tools/check-doc-truthing.sh +++ b/tools/check-doc-truthing.sh @@ -67,7 +67,7 @@ BANNERED_DOCS=( # The machine-readable mirror (DOC-05): it follows the matrix, it does not # lead. These keys assert that contract in-band. -STATE_FILE=".machine_readable/6a2/STATE.a2ml" +STATE_FILE=".machine_readable/descriptiles/STATE.a2ml" STATE_KEYS=( "authoritative-status-doc" "drift-flag"