From de6a6bc67c3b0186c061c30b2be6623397571485 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 19 Sep 2026 09:08:22 +0000 Subject: [PATCH] refactor(root): move root artefacts to their canonical locations Applies the estate root-shape rollout: files that are not root-level by necessity move to where their tooling and the estate canon expect them, and every reference to them is updated in the same change. * .github/hooks/validate-a2ml.sh (from .githooks/validate-a2ml.sh) -> .github/hooks/validate-a2ml.sh * .github/hooks/validate-k9.sh (from .githooks/validate-k9.sh) -> .github/hooks/validate-k9.sh * .github/workflows/dogfood-gate.yml * .gitignore * .machine_readable/root-allow.txt * AFFIRMATION.adoc * CONTRIBUTING.adoc (deleted) * scripts/validate-template.sh * src/interface/abi.ipkg (from abi.ipkg) -> src/interface/abi.ipkg Verified with `git apply --check` against current main before committing; no behaviour change intended, the Justfile entry points keep working. --- {.githooks => .github/hooks}/validate-a2ml.sh | 0 {.githooks => .github/hooks}/validate-k9.sh | 0 .github/workflows/dogfood-gate.yml | 4 +- .gitignore | 2 +- .machine_readable/root-allow.txt | 4 +- AFFIRMATION.adoc | 2 +- CONTRIBUTING.adoc | 75 ------------------- scripts/validate-template.sh | 4 +- abi.ipkg => src/interface/abi.ipkg | 4 +- 9 files changed, 9 insertions(+), 86 deletions(-) rename {.githooks => .github/hooks}/validate-a2ml.sh (100%) rename {.githooks => .github/hooks}/validate-k9.sh (100%) delete mode 100644 CONTRIBUTING.adoc rename abi.ipkg => src/interface/abi.ipkg (94%) diff --git a/.githooks/validate-a2ml.sh b/.github/hooks/validate-a2ml.sh similarity index 100% rename from .githooks/validate-a2ml.sh rename to .github/hooks/validate-a2ml.sh diff --git a/.githooks/validate-k9.sh b/.github/hooks/validate-k9.sh similarity index 100% rename from .githooks/validate-k9.sh rename to .github/hooks/validate-k9.sh diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml index a226a0a..d78ebc1 100644 --- a/.github/workflows/dogfood-gate.yml +++ b/.github/workflows/dogfood-gate.yml @@ -44,7 +44,7 @@ jobs: - name: Validate A2ML manifests if: steps.detect.outputs.count > 0 - run: bash .githooks/validate-a2ml.sh + run: bash .github/hooks/validate-a2ml.sh - name: Write summary run: | A2ML_COUNT="${{ steps.detect.outputs.count }}" @@ -89,7 +89,7 @@ jobs: - name: Validate K9 contracts if: steps.detect.outputs.k9_count > 0 - run: bash .githooks/validate-k9.sh + run: bash .github/hooks/validate-k9.sh - name: Write summary run: | K9_COUNT="${{ steps.detect.outputs.k9_count }}" diff --git a/.gitignore b/.gitignore index 9bbd217..fd3bdc4 100644 --- a/.gitignore +++ b/.gitignore @@ -118,7 +118,7 @@ dist/ !/build/ !/build/** -# ...but never track Idris2 typecheck output. `idris2 --typecheck abi.ipkg` +# ...but never track Idris2 typecheck output. `idris2 --typecheck src/interface/abi.ipkg` # writes compiled .ttc/.ttm under build/ttc/; these are generated artifacts. /build/ttc/ diff --git a/.machine_readable/root-allow.txt b/.machine_readable/root-allow.txt index edef4f3..6223b79 100644 --- a/.machine_readable/root-allow.txt +++ b/.machine_readable/root-allow.txt @@ -29,7 +29,6 @@ CITATION.cff # citation metadata (surfaced at root by #96) # ─── Build entry points (must live at root for their tooling) ──────────────── Justfile # delegates phases to build/just/*.just coordination.k9 # repo-local session binding (template-mandated) -abi.ipkg # Idris2 package for the ABI seam; sourcedir=src/interface (estate canon: root-level *-abi.ipkg). Single case-consistent src/interface/Abi/ dir. Typecheck: `idris2 --typecheck abi.ipkg`. # ─── Conventional dotfiles (tool-required at root) ─────────────────────────── .editorconfig @@ -86,7 +85,7 @@ CLAUDE.md # these are this project's real top-level shape. Moving them would # break every path that references them, to satisfy a map that was # never written for it. Read from the estate-rules gate's own output. -.githooks/ # Top-level component directory of this project. +.github/hooks/ # Top-level component directory of this project. CODE_OF_CONDUCT.md # Project documentation. GOVERNANCE.md # Project documentation. MAINTAINERS # Project file that must remain at the repository root. @@ -101,6 +100,5 @@ mise.toml # Build/tool manifest — must sit at the root to be ARCHITECTURE.adoc # Project documentation (AsciiDoc-by-default). CHANGELOG.adoc # Project documentation (AsciiDoc-by-default). CODE_OF_CONDUCT.adoc # Project documentation (AsciiDoc-by-default). -CONTRIBUTING.adoc # Project documentation (AsciiDoc-by-default). SECURITY.adoc # Project documentation (AsciiDoc-by-default). .mise.toml # Repo-specific mise config; must sit at the root to be found. diff --git a/AFFIRMATION.adoc b/AFFIRMATION.adoc index 3a840b4..e1891e7 100644 --- a/AFFIRMATION.adoc +++ b/AFFIRMATION.adoc @@ -68,7 +68,7 @@ file. Bring a counter-example, a failing run, or a contradicting source. |=== | Claim | Status | Evidence (command / `file:line`) | _e.g. The library builds clean_ | affirmed | `just build` at the anchor SHA -| _e.g. The ABI seam typechecks_ | affirmed | `idris2 --typecheck abi.ipkg` +| _e.g. The ABI seam typechecks_ | affirmed | `idris2 --typecheck src/interface/abi.ipkg` | _e.g. Feature X is complete_ | aspiration | README §… (not yet checked) |=== diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc deleted file mode 100644 index b526c9b..0000000 --- a/CONTRIBUTING.adoc +++ /dev/null @@ -1,75 +0,0 @@ -== Contributing to cicd-squabbler - -Thanks for your interest. This repository follows the Hyperpolymath -estate standards defined in -https://github.com/hyperpolymath/standards[hyperpolymath/standards]. - -=== Licence - -This project is licensed under *MPL-2.0*. By contributing you agree that -your contributions are licensed under the same terms. Every source file -carries an `+SPDX-License-Identifier+` header; keep it when editing, and -add one to any new file. - -=== Development environment - -A pinned dev shell is provided: - -[source,sh] ----- -guix develop # toolchain: just cargo rustc rustfmt clippy ----- - -Estate policy is Guix primary / Guix fallback; this repo currently ships -the Guix fallback. A `+guix.scm+` is welcome if you prefer the primary -tier. - -=== Build and test - -This repo uses https://just.systems[`+just+`] (the estate uses -Justfiles, never Makefiles). Recipes available here: - -[source,sh] ----- -just # list recipes -just fmt # format -just fmt-check # check formatting -just lint # lint -just test-all # run the full suite -just doctor # environment diagnostics ----- - -=== Machine-readable artefacts - -This repo carries `+.machine_readable/+` A2ML files (`+STATE.a2ml+`, -`+META.a2ml+`, `+ECOSYSTEM.a2ml+`, `+AGENTIC.a2ml+`, `+NEUROSYM.a2ml+`, -`+PLAYBOOK.a2ml+`). If your change alters project state, architecture, -or operational steps, update the corresponding file in the same PR — CI -validates them. - -=== Language policy - -The estate restricts which languages may be used. In particular Python, -Go, TypeScript, AffineScript, V-lang, Java/Kotlin, Swift and Makefiles -are *not* accepted in new code; AffineScript, Rust/SPARK, Zig, Deno, -Gleam, Elixir, Haskell, Idris2, Agda, Julia and OCaml are. CI enforces -this, so check the policy in `+hyperpolymath/standards+` before -introducing a new language. - -=== Documentation format - -Docs are AsciiDoc (`+.adoc+`) by default, including `+README.adoc+`. The -GitHub-required community-health files stay Markdown: `+SECURITY.md+`, -`+CONTRIBUTING.md+`, `+CODE_OF_CONDUCT.md+`, `+CHANGELOG.md+`. Do not -add a `+.md+` duplicate of a doc that already exists as `+.adoc+`. - -=== Pull requests - -[arabic] -. Branch from `+main+` — do not push to `+main+` directly; branch -protection requires review and passing checks. -. Keep the change focused, and explain _why_ in the PR body. -. Make sure governance CI is green. It checks documentation presence, -packaging policy, secrets, licence consistency and workflow security. -. Security issues: follow `+SECURITY.md+` — report privately, never in a -public issue. diff --git a/scripts/validate-template.sh b/scripts/validate-template.sh index 3b33f8e..7100647 100755 --- a/scripts/validate-template.sh +++ b/scripts/validate-template.sh @@ -305,8 +305,8 @@ fi # path / import breakage that a bare per-file `idris2 --check` masks as a # tolerated "module name does not match file name" warning. if command -v idris2 &> /dev/null; then - if [ -f "$REPO_ROOT/abi.ipkg" ]; then - if (cd "$REPO_ROOT" && idris2 --typecheck abi.ipkg) > /dev/null 2>&1; then + if [ -f "$REPO_ROOT/src/interface/abi.ipkg" ]; then + if (cd "$REPO_ROOT" && idris2 --typecheck src/interface/abi.ipkg) > /dev/null 2>&1; then log_pass "Idris2 ABI typechecks (abi.ipkg)" else log_error "Idris2 ABI does NOT typecheck (abi.ipkg)" diff --git a/abi.ipkg b/src/interface/abi.ipkg similarity index 94% rename from abi.ipkg rename to src/interface/abi.ipkg index 4b62c0b..14ec249 100644 --- a/abi.ipkg +++ b/src/interface/abi.ipkg @@ -14,7 +14,7 @@ -- A bare `idris2 --check src/interface/Abi/Foo.idr` still warns ("module name -- does not match file name") because Idris derives the expected module from the -- full path; that is expected. Use the package for a real typecheck: --- idris2 --typecheck abi.ipkg (or --build) +-- idris2 --typecheck src/interface/abi.ipkg (or --build) -- -- The RSR validators accept either Abi/ (canonical, case-consistent) or a -- lowercase abi/ for downstream repos that ship lowercase — but never both. @@ -27,7 +27,7 @@ authors = "Jonathan D.A. Jewell" brief = "Formally-typed ABI/FFI seam (Idris2 type + layout proofs) for an RSR-templated repository" -sourcedir = "src/interface" +sourcedir = "." depends = base