fix: repair non-compiling FFI, vacuous gates and three parse-dead workflows#53
Merged
Conversation
…kflows
All three workflows in this repo that GitHub refused to parse are fixed, and
the gates they were meant to run are made real. Every claim below was verified
by executing the thing, not by reading it.
Workflows (actionlint: 3 errors -> 0)
* e2e.yml had an entirely commented-out `jobs:` section, so the file was
rejected with "jobs section should not be empty". It now runs four real
jobs against the checked-in scripts.
* boj-build.yml used the `secrets` context in a job-level `if:`, where only
`github`, `inputs`, `needs` and `vars` are available. The gate is removed
rather than narrowed to `vars`, which would have silently skipped the
secret-configured case; the step already exits 0 when the URL is unset,
which is the documented no-op behaviour.
* dogfood-gate.yml embedded Python at column 0 inside a `run: |` block
scalar whose indentation was fixed at 10 spaces, terminating the scalar
and breaking the YAML. Replaced with a quoted heredoc, which also removes
the `\"` escaping that provoked the dedent. Verified by extracting the step
and running it against no-manifest / valid / invalid inputs (0 / 0 / 1).
FFI (did not compile at all)
* src/interface/ffi/src/main.zig declared `pub const Handle = opaque { ... }`
with fields. Zig opaque types cannot carry fields, so the shim had never
compiled. C consumers only ever hold a `*Handle`, so a plain struct is
ABI-identical; this matches the fix already applied in rpa-elysium.
* `callconv(.C)` was removed in Zig 0.16; now `callconv(.c)`.
* build.zig was scaffolding that wired no steps. `zig build` now produces
libkrl.a and `zig build test` runs the three unit tests (3/3 pass).
Gates that could not fail
* tests/aspect_tests.sh grepped src/abi/ and ffi/zig/, neither of which
exists here (the real paths are src/interface/Abi and src/interface/ffi),
so its Idris check passed vacuously. It now fails loudly when the scan set
is empty, rather than reporting success for having looked at nothing.
* The same script flagged verification/proofs/README.adoc for containing the
words `sorry` and `unsafeCoerce` while documenting them as banned. Scanning
is now restricted to source files, with comment lines excluded.
* Aspect 3 (ABI/FFI correspondence) was commented out and its paths were
wrong. Enabled: 4 %foreign declarations covered by 11 Zig exports.
* tests/e2e.sh was entirely TODO and reported PASS=0 FAIL=0 while exiting 0.
It now runs four checks. Negative-controlled: injecting a fault into an
exported function yields FAIL=2 and exit 2.
Licensing
* Reconciled the three unpushed sweeper commits against canonical SPDX text
rather than against each other. origin/main's CC-BY-SA-4.0.txt is already
byte-exact canonical; the sweeper's +474/-110 rewrite substituted the
Creative Commons plaintext variant and was a regression, so it is dropped.
* Neither version of MPL-2.0.txt was canonical (origin/main had http:// where
SPDX has https://; the sweeper stripped a significant trailing space).
Replaced with the canonical SPDX text. Both files now match byte for byte.
* LICENSES/AGPL-3.0-or-later.txt is dropped. It contradicts this repo's own
.machine_readable/compliance/rust/deny.toml, no file carries an AGPL SPDX
header, and `reuse lint` reports it as "Unused licenses: AGPL-3.0-or-later".
* trailing-whitespace and end-of-file-fixer now exclude LICENSES/. Both
canonical texts contain significant trailing whitespace, so the hooks were
guaranteed to corrupt them on every commit. This is the mechanism behind
that class of damage.
* The rest of the sweeper's output is dropped: ARCHITECTURE.md was generic
boilerplate describing a src/tests/docs/scripts/config layout this repo
does not have (and was byte-identical to the one it added to tangle);
GOVERNANCE.md, MAINTAINERS and .github/funding.yml duplicate the existing
GOVERNANCE.adoc, MAINTAINERS.adoc and .github/FUNDING.yml; mise.toml pinned
30 tools to "latest" and collided with .tool-versions.
Also
* .pre-commit-config.yaml had a truncated secret-detection block with no
`- repo:` key. YAML last-key-wins silently overwrote editorconfig-checker's
rev with v8.24.3 and set its hooks to null, so gitleaks was absent and one
hook pointed at a non-existent tag. Restored. Eighteen other repos in the
estate share this exact truncation.
* .tool-versions pinned `rust nightly` -- the one language absent from this
repo -- while zig and idris2 sat commented out. Corrected.
* zig-out/ added to .gitignore.
hyperpolymath
marked this pull request as ready for review
July 21, 2026 12:52
|
hyperpolymath
added a commit
that referenced
this pull request
Jul 21, 2026
…ly (#54) Follows #53. Same Part 1 remit: make `main` green **and honest**. This half is the documentation de-conflation. ## The three projects are distinct QuandleDB is the knot database. KRL is its resolution language, developed alongside it. **Tangle is a separate project** — a general language for knot mathematics (topological, algebraic, geometric, logical) that happens to share the subject matter. Documentation here had fused KRL and Tangle into a single compilation pipeline that does not exist. The relationship between KRL and QuandleDB is left intact — it is real and deliberate. What is removed is the false *identity* with Tangle, not the shared domain. ## README.md - Removed the claim that KRL *"lowers through TangleIR into Tangle-level computation"*, and the layer table presenting Tangle as KRL's substrate. **`TangleIR` appears 0 times in the KRL implementation** — the struct definitions the README documented as "the single hardest-designed artifact in the stack" correspond to no code. - Removed `KRLAdapter.jl` as the named canonical implementation. It no longer exists. - Removed the `TanglePL` usage example, which imports packages that don't exist. - Added the **known divergence**: this repo's grammar and QuandleDB's are disjoint on core vocabulary, and `|` is bound to opposite meanings (tensor here, pipeline there). - A short note records that these claims were false, so the correction is legible rather than silent. ### This also fixes the GitHub Pages failure Root cause was **not** generic: Ddraig SSG certifies pages against a decidable a11y predicate requiring exactly one `<h1>` and no heading-level skips. The old README had **8** `<h1>`s: ``` + index.md -> index.html [a11y FAIL] a11y: exactly one <h1> required (found 8) ``` Verified by compiling Ddraig locally (Idris2) and running the real certifier: | README | Result | |---|---| | `origin/main` (old) | `[a11y FAIL]` — exit 1 | | this branch | `[a11y ok]` — exit 0 | ## READINESS.md — Grade D → E The **entire** evidence base for Grade D was a parser, AST, lowering pass and 57-test matrix in `KRLAdapter.jl`. That repository no longer exists, so none of it can be checked. The CRG demotion table gives `D → E` for *"the scope narrows so far that the component barely does anything"* — which is exactly what happened. Replaced with evidence executed on 2026-07-21: grammar smoke 20/20, `zig build test` 3/3, aspect 4/4, e2e 4/4. Limitations stated plainly, including that **no conformance suite exists**, so "conforms to the KRL spec" is not currently a checkable claim. This is a correction to the record, not a regression in the work. ## ASSUMPTIONS.md Seven DESIGN assumptions named code in `KRLAdapter.jl`. The file defines a DESIGN assumption as *"true by construction in our code"* — with the code gone, there is no construction left to be true by. - A-KR-1.1, 1.2, 2.1, 3.2, 4.1 → **UNANCHORED** (statement stands as intent, names no live code) - A-KR-6.1, 6.2 → **VOID** (both presuppose two implementations; only one exists) Verified that **no re-anchoring is possible**: `sigma`, `cup`, `cap`, `r1_simplify` and any pretty-printer appear **0 times** in `quandledb/server/krl/`. The braid generators these assumptions describe are implemented nowhere. The four MATH assumptions are untouched — they rest on external theorems. ## TOPOLOGY.md Was pure RSR-template residue describing the template itself, its dogfood gate, and "500+ RSR-based repositories" downstream. Replaced with KRL's actual topology: the three project boundaries, the ABI/FFI layering, and the spec/implementation seam that no conformance suite currently checks. States that this repo exposes **no** Groove service and has no `.well-known/groove/manifest.json`, rather than implying one exists. ## Verified on this branch `actionlint` 0 errors · aspect 4/4 · e2e 4/4 · smoke 20/20 · Ddraig a11y ok The matching de-conflation pass on `hyperpolymath/tangle` (whose README is titled *"Tangle / KRL"*) follows separately.
This was referenced Jul 21, 2026
Merged
hyperpolymath
added a commit
that referenced
this pull request
Jul 21, 2026
…ed (#55) Follows #53 and #54. The Dogfood Gate **could not parse** before #53, so it never ran. Now that it parses, it runs — and immediately reported **2 A2ML errors and 4 K9 errors** on `main`. That's the gate working as intended; this PR clears what it found. Each fix was verified by running the **actual validator** locally, not by reading its source. ## A2ML: 2 errors → 0 ### `docs/governance/TSDM.a2ml` was not defective — the pin was stale This is the [SHA-pinning-defeats-upstream-fixes](https://github.com/hyperpolymath/krl) pattern, caught red-handed: | | | |---|---| | Pinned | `6bff6ec` — PR **#26**, *"recognise s-expression identity/version fields"* | | Fix needed | `6c47174` — PR **#41**, *"recognise colon/brace-block identity"* | TSDM.a2ml declares `id: "tsdm-standard"`, the colon/brace-block form. The validator's own source comment **names this exact file** as the motivating case — so the fix existed upstream, and the pin predated it. Confirmed before changing anything: running the newer validator locally drops the count **2 → 1**. Bumped to current main (`5468b7f`). ### `docs/governance/MAINTENANCE-CHECKLIST.a2ml` genuinely lacked identity The validator exempts four categories — `*AI-MANIFEST*` files, `.machine_readable/` (structural identity), contractile `@directive` shape, and named typed manifests. **None applies here**, and the file has no `name`/`project`/`agent-id`. Added `name` to its `[metadata]` block. ## K9: 4 errors → 0 Unlike the A2ML case, these are **genuine file defects** — the current validator reports the same 4 errors as the pinned one, so pin staleness is ruled out. - Both `container/deploy.k9.ncl` and `.machine_readable/self-validating/methodology-guard.k9.ncl` were missing the mandatory **`K9!` magic number** on line 1. - `deploy.k9.ncl` had `pedigree = component_pedigree,` where the canonical template (`rsr-julia-library-template-repo`) has `pedigree = component_pedigree & { name = "…" },`. Without the merge the pedigree carries no name. Matched to the template. - `methodology-guard.k9.ncl` had **no pedigree block at all**. Added one. > This is template rot with a measurable blast radius: `container/deploy.k9.ncl` is missing the `K9!` line in **6 repos** (lucidscript, pandoc-k9, pseudoscript, squeakwell, stateful-artefacts, systemet) while the newer template has it. ##⚠️ `K9!` and Nickel contradict each other, estate-wide Worth recording, and **not** changed here: ```console $ nickel typecheck container/deploy.k9.ncl error: unexpected token 1 │ K9! │ ^ ``` The magic number **is not valid Nickel**, so `nickel typecheck` fails on *every* `.k9.ncl` in the estate that carries it — including the canonical template and every currently-passing file. `k9-svc` evidently strips the line before parsing. The consequence is that the `nickel typecheck container/deploy.k9.ncl` usage line **in these files' own headers can never succeed as written**. Pre-existing and estate-wide, so left alone. But I used it as a check: both files were typechecked with the magic line stripped, and **that caught a real error in my first draft**, where the new pedigree block sat at top level in a file whose body is `let … in …` — invalid Nickel. Moved inside the record; the validator matches at any indent. ## Verified | Check | Result | |---|---| | K9 validator | **0 errors** (8 files) | | A2ML validator | **0 errors** (121 files) | | `actionlint` | **0 errors** | | `tests/aspect_tests.sh` | 4/4 | | `tests/e2e.sh` | 4/4 | | `tests/smoke/grammar_smoke.sh` | 20/20 |
hyperpolymath
added a commit
that referenced
this pull request
Jul 21, 2026
…andards pins (#56) Both failing Governance jobs are root-caused and fixed. Follows #53, #54, #55. ## `Workflow security linter` ``` ERROR: .github/workflows/pages.yml missing SPDX header ``` `pages.yml` arrived in #51 and begins directly at `name:`. Every other workflow already carries the header; this was the only one. > **Recording a correction against myself.** Earlier in this programme I audited all workflows, reported that every one had both an SPDX header *and* a top-level `permissions:` block, and marked the SPDX hypothesis **disproved**. That audit was wrong — it must have run against a tree without `pages.yml`. The real cause is exactly the one first suspected. A "disproved" hypothesis is only as good as the test that disproved it. ## `Check Workflow Staleness` ``` governance-reusable.yml pin d7c22711e830 is 63 commit(s) / 24d behind standards HEAD — outside the recency window (>50 commits AND >14d). Refresh toward f9dca6ded2ca ``` Three callers were pinned at `d7c22711e830`: | Workflow | From | To | |---|---|---| | `governance-reusable.yml` | `d7c22711e830…` | `f9dca6ded2cad8ab54044c1cb0489b558ae2682b` | | `hypatia-scan-reusable.yml` | `d7c22711e830…` | `f9dca6ded2cad8ab54044c1cb0489b558ae2682b` | | `scorecard-reusable.yml` | `d7c22711e830…` | `f9dca6ded2cad8ab54044c1cb0489b558ae2682b` | Full 40-char SHAs — the gate's message quotes the abbreviated form, which would weaken the pin. ### Deliberately not touched - **`mirror-reusable.yml`** (`d135b05`) and **`secret-scanner-reusable.yml`** (`c65436e`) — neither was flagged by the staleness gate, and the secret-scanner pin in particular **should not be moved independently of the gitleaks allowlist work**, since re-pinning consumers ahead of the config work reintroduces false positives. - **`scorecard-enforcer.yml`** — the gate asks for its removal, but **this repo doesn't have that file**. That clause is generic advice in the reusable's message, not a finding against krl. ## Note on bumping toward standards HEAD The newer `governance-reusable` has *more* real checks than the pinned one (its previously-dead docs and Guix/Nix jobs were made real, warn-first until 2026-08-21). So this bump may surface new warnings. That is the gate working, and warn-first means it should not turn the build red. ## Verified `actionlint` **0 errors** · all **18** workflows carry an SPDX header
hyperpolymath
added a commit
that referenced
this pull request
Jul 21, 2026
…ode) (#58) `main` is green as of #57. This addresses the one original red that had gone unexamined all programme: **SonarCloud Quality Gate — `C Security Rating on New Code` (required ≥ A)**. ## Getting the findings without dashboard access SonarCloud's project is public, so its API lists them directly: ``` https://sonarcloud.io/api/issues/search?componentKeys=hyperpolymath_krl&types=VULNERABILITY ``` **15 vulnerabilities, all inside the new-code period.** Two are fixed here — including one this programme introduced. ## Fixed ### `e2e.yml` — *"Replace `read-all` with specific permissions"* **This one is mine.** `e2e.yml` was rewritten in #53 and carried the RSR template's `permissions: read-all`. Narrowed to `contents: read`, which is all four jobs need. ### `pages.yml` ×3 — *"Move this read/write permission from workflow level to job level"* The workflow granted `contents:read` + `pages:write` + `id-token:write` to **both** jobs, but only `deploy` needs the pages and id-token scopes. Now split per job: | Job | Permissions | |---|---| | `build` | `contents: read` | | `deploy` | `contents: read`, `pages: write`, `id-token: write` | That matters here beyond satisfying the linter: the `build` job runs a **container image** and executes the SSG over repository content. It should not be holding deploy credentials while doing so. ## Not fixed — deliberately, so this stays reviewable | Finding | Location | |---|---| | Only pass required secrets to this workflow | `secret-scanner.yml:18`, `mirror.yml:12` | | Dependencies without locked resolved versions | `release.yml:38` | | Not enforcing HTTPS | `release.yml:91`, `static-analysis-gate.yml:30,31,229,230`, `setup.sh:144,156` | | Workflow-level permission | `static-analysis-gate.yml:11` | **The rating will not reach A until those are triaged too.** Several of the HTTPS findings may be false positives and need reading in context before anything is changed — which is exactly why they aren't bundled into a PR about permissions. ## Verified `actionlint` **0** · K9 **0 errors** · A2ML **0 errors** · e2e 4/4 · aspect 4/4 · smoke 20/20
hyperpolymath
added a commit
to hyperpolymath/tangle
that referenced
this pull request
Jul 21, 2026
…ws (#78) The tangle half of a coordinated two-repo de-conflation pass. The krl half is hyperpolymath/krl#53 (merged) and hyperpolymath/krl#54. ## The three projects are separate **Tangle** is a general language for knot mathematics — topological, algebraic, geometric, logical. **QuandleDB** is a knot database. **KRL** is QuandleDB's resolution language, developed jointly with it. They share a subject matter, not an architecture. Documentation here presented Tangle as the substrate of a KRL compilation stack. That is false in both directions, and the connecting layer does not exist: > **`TangleIR` appears in NO source file in this repository** — 0 hits across `.rs`, `.zig` and `.lean` — **and in NO source file in the KRL implementation.** It existed only in prose, in both repos. The relationship between the projects is left intact. What is removed is a claimed architectural dependency that was never built. ## README.adoc - Retitled from *"Tangle / KRL — Topological Programming Language"* to **"Tangle — a general language for knot mathematics"**; removed *"Tangle (via KRL — Knot Resolution Language) is…"* from the opening line. - Removed the `KRL → TangleIR → Tangle core → QuandleDB + Skein.jl` ladder. - Removed the `== KRL — Knot Resolution Language` section, which restated KRL's four operations as though KRL were *this* project's surface language. - **Strengthened the formal core with a result rather than a claim** (below). - Added an explicit note that only the Lean proofs are CI-gated. ## The formal core is real — and now verified I ran the repository's own documented oracle: ```console $ cd proofs && lean Tangle.lean $ echo $? 0 ``` | Check | Result | |---|---| | `lean Tangle.lean` (pinned `leanprover/lean4:v4.14.0`) | **exit 0, no errors** | | `sorry` count | **0** | | `axiom` count | **0** | | `import` lines | **0** — self-contained, no Mathlib | | `progress`, `preservation`, `determinism`, `type_safety`, `infer_sound`, `infer_complete`, `infer_iff_hasType` | all present with real proof terms | This is worth stating precisely: an `axiom` stub compiles cleanly while proving nothing, so *"the Lean build is green"* and *"the theorems are proved"* are different claims in general. **Here they coincide, and that was checked rather than assumed.** This is Tangle's strongest asset and the README now leads with it. ## AFFIRMATION.adoc — erratum, not edit An affirmation is a dated claim about a past state (`102499d`, 2026-06-19); amending it in place would falsify a record. So the original text is untouched and an erratum is appended. It corrects the *"maintainer-confirmed"* `KRL → TangleIR → VerisimCore → Skein/QuandleDB` stack, and flags that the quotable one-line characterisation shouldn't be quoted while it calls Tangle *"the … TangleIR of the KRL stack"*. It also **discharges one of the affirmation's own acknowledged gaps** — it recorded *"OCaml + Lean not run (absent)"* and concluded *"structure + the repo's proof records are confirmed, not a fresh green build."* The Lean half is now closed, with command and exit code recorded. ## READINESS.md — Grade C → D Grade C means *self-validated in the home context*; the `D → C` trigger is *"dogfood it hard in the home context."* The assessment cited **exactly one** piece of dogfooding evidence: > **Dogfooding:** Used internally as host for the KRL (Knot Resolution Language) DSL That is false — KRL is not built on Tangle. With it withdrawn, C is unsupported. Two further corrections: - **"CI: Clean" was false** — `main` was failing Governance and both Jekyll workflows. - **The test suites are not run by CI.** Eight OCaml test files exist under `compiler/test/`, but **no workflow invokes `dune` or `cargo test`**. The cheapest available uplift is named explicitly: add a workflow running `dune build && dune test`. Eight suites already exist and nothing executes them. ## dialects/README.md - Removed KRL from the dialect table — it was listed as a dialect that had "graduated", and it was never a Tangle dialect. - Replaced the dead absolute path `/var/mnt/eclipse/repos/krl` (another machine) with the GitHub URL. - Dropped "wire through to TangleIR" from the maturation pattern. ## Workflows — two deleted `jekyll.yml` and `jekyll-gh-pages.yml` are GitHub's **sample** Jekyll workflows. This repo has **no `_config.yml` and no `Gemfile`** — there is no Jekyll site to build, so both fail on every push. `pages.yml` (Ddraig SSG, #73) is the real one; three workflows were competing for the same Pages deployment. ##⚠️ Owner action — GitHub Pages is not enabled `pages.yml` will **still** fail at the deploy step after this PR. Its build succeeds and certifies a11y, but: ``` GET /repos/hyperpolymath/tangle/pages -> 404 Not Found ``` which surfaces as `HttpError: Not Found / Creating Pages deployment failed`. **The same is true of `hyperpolymath/krl`.** Pages needs enabling with source = GitHub Actions on both. That publishes a public site, so I've left it to you rather than doing it. ## Verified on this branch `actionlint` 0 errors · `asciidoctor` renders `README.adoc` and `AFFIRMATION.adoc` clean · `lean Tangle.lean` exit 0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Part 1 of the KRL work-up: clear the immediate issues so
mainis green and honest. Strategy (the knot-database positioning and the spec reconciliation) follows as a separate, separately-approved plan.Everything below was verified by running it. Nothing here is asserted from reading.
Workflows — actionlint 3 errors → 0
e2e.ymljobs:section entirely commented out → "jobs section should not be empty"boj-build.ymlsecretscontext used in a job-levelif:, where onlygithub/inputs/needs/varsare availabledogfood-gate.ymlrun: |block scalar whose indent was fixed at 10 spaces — the dedent terminated the scalarboj-build.yml's gate is removed rather than narrowed tovars, because avars-only test would silently skip the secret-configured case. The step already exits 0 when the URL is unset.dogfood-gate.ymlnow uses a quoted heredoc, which also removes the\"escaping that provoked the dedent. Verified by extracting the step and executing it: no manifest → 0, valid → 0, invalid → 1 with the error annotation.The FFI shim did not compile at all
src/interface/ffi/src/main.zigdeclaredpub const Handle = opaque { allocator: ..., initialized: ... }. Zig opaque types cannot carry fields, so this shim had never compiled anywhere it was vendored. C consumers only ever hold a*Handle, so a plain struct is ABI-identical — this matches the fix already applied inrpa-elysium. Alsocallconv(.C)→callconv(.c)(removed in Zig 0.16).build.zigwired no steps at all.zig buildnow produceslibkrl.a;zig build testruns the three unit tests — 3/3 pass.Gates that could not fail
aspect_tests.shgreppedsrc/abi/andffi/zig/— neither exists here (real paths:src/interface/Abi,src/interface/ffi), so the check passed by looking at nothing. It now fails loudly when the scan set is empty.verification/proofs/README.adocfor containingsorryandunsafeCoercewhile documenting them as banned. Scanning is now restricted to source files with comment lines excluded.%foreigndeclarations covered by 11 Zig exports.e2e.shwas entirely TODO — it reportedPASS=0 FAIL=0and exited 0. Now runs four checks, and is negative-controlled: injecting a fault into an exported function yieldsFAIL=2, exit 2.Licensing — the sweeper contributed nothing salvageable
The three unpushed sweeper commits were reconciled against canonical SPDX text, not against each other. That inverted the expected conclusion:
CC-BY-SA-4.0.txtonorigin/mainis already byte-exact canonical. The sweeper's +474/−110 "correction" substituted the Creative Commons plaintext variant — a regression. Dropped.MPL-2.0.txtwas canonical (origin/mainhadhttp://where SPDX hashttps://; the sweeper stripped a significant trailing space). Replaced with canonical SPDX text. Both files now match byte for byte.LICENSES/AGPL-3.0-or-later.txtdropped — three independent proofs: it contradicts this repo's owndeny.toml, no file carries an AGPL SPDX header, andreuse lintreportsUnused licenses: AGPL-3.0-or-later.trailing-whitespace/end-of-file-fixernow excludeLICENSES/. Both canonical texts contain significant trailing whitespace, so these hooks were guaranteed to corrupt them on every commit — this is the mechanism behind that class of damage.ARCHITECTURE.md(generic boilerplate describing asrc/tests/docs/scripts/configlayout this repo doesn't have — byte-identical to the one it added totangle);GOVERNANCE.md,MAINTAINERS,.github/funding.yml(duplicate the existing.adoc/FUNDING.yml);mise.toml(30 tools pinned to"latest", collides with.tool-versions).Estate-wide findings surfaced here
.pre-commit-config.yamltruncation affects 18 repos. A secret-detection block lost its- repo:key; YAML last-key-wins then overwroteeditorconfig-checker'srevwithv8.24.3and set itshookstonull. Net effect: gitleaks silently absent, one hook pointing at a non-existent tag, and no parse error to reveal it. Three further repos' configs don't parse at all.opaque-with-fields shim is vendored widely; every copy fails to compile.rust-ci.ymlcalls the shared Rust reusable, but there is noCargo.tomlanywhere in this repo — flagged, not removed (it isn't currently red).Still open — not gated on this PR
index.md— being handled next.Draft until CI reports; the Zig 0.16.0 pin in particular needs to survive
setup-zig.