Repository navigation
refactor: migrate all banned Python to Deno (language policy) - #59
Closed
hyperpolymath wants to merge 3 commits into
Closed
hyperpolymath wants to merge 3 commits into
hyperpolymath wants to merge 3 commits into
Conversation
Codify the CODEOWNERS standard for hyperpolymath repos: solo-owned repos carry no catch-all `*` or `/.github/workflows/` lines (silences the Dependabot review_requested notification flood); path lines are kept only for genuine co-owners; co-owner removal needs explicit confirmation. Includes the standards#55 per-repo decision matrix (idaptik retained as the sole Rule 2/3 case), canonical CODEOWNERS templates, README wiring, and an ADR record in META.a2ml. https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn
Removes the 4 remaining non-SaltStack Python files (which were failing the language-policy + rsr-antipattern CI banned-language gates) by porting each to Deno, an allowed runtime: - a2ml/scripts/contractiles-a2ml-tool.py -> .js (Deno). JSON emit output is byte-identical to the previous json.dumps(sort_keys, indent=2) form; verified against tests/contractiles/expected/*.json. The three shell wrappers and the a2ml docs now invoke `deno run`. - avow-protocol stamp_example.py -> examples/deno/stamp_example.js using Deno FFI (Deno.dlopen) instead of ctypes; zig FFI README updated. - consent-aware-http python/ reference impl -> deno/ (aibdp_middleware.js + example_server.js on Deno.serve), manifest moved, README ported, nodejs cross-link fixed. No banned Python remains; new JS passes node --check. https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn
The Deno port carried over literal fake credential strings from the former Python example; replace them with obviously-inert EXAMPLE-* placeholders so gitleaks does not flag the example. https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn
4 tasks
Collaborator
Author
|
Closing in favour of #60, which delivers the identical net change as a single clean commit off Rationale: Generated by Claude Code |
hyperpolymath
added a commit
that referenced
this pull request
May 15, 2026
) (#60) ## Summary Clean-history replacement for #59 (closed). Eliminates the 4 remaining non-SaltStack Python files — the ones tripping the `Check for Banned Languages` / `antipattern-check` banned-language CI gates — by porting each to **Deno**, an allowed runtime. Delivered as a **single commit off `main`** so that no commit anywhere in this PR's history introduces the example credential-like strings. (On #59, an intermediate commit re-added pre-existing fake `token`/`signature` example literals; `gitleaks-action` scans per-commit, so a follow-up fix couldn't clear it. This branch carries the inert `EXAMPLE-*` placeholders from the first and only commit.) | Was (Python) | Now (Deno) | Notes | |---|---|---| | `a2ml/scripts/contractiles-a2ml-tool.py` | `…-tool.js` | JSON emit **byte-identical** to old `json.dumps(sort_keys=True, indent=2)` — verified against `tests/contractiles/expected/*.json`. Wrappers + a2ml docs call `deno run`. | | `avow-protocol/.../examples/python/stamp_example.py` | `examples/deno/stamp_example.js` | `ctypes` → `Deno.dlopen`; fake literals → inert `EXAMPLE-*`; zig FFI README updated. | | `consent-aware-http/.../python/{aibdp_middleware,example_server}.py` (+README/reqs) | `…/deno/` on `Deno.serve` | manifest moved, README ported, nodejs cross-link fixed. | Verified in-sandbox (Node shim; no Deno here): byte-identical emit, correct validate exit codes, `node --check` clean on all 4 files, no Python remains under either CI banned-language filter. CODEOWNERS policy (#58) is **not** included here — it already merged to `main`. ## Test plan - [ ] `gitleaks` passes (no fake secrets in any commit) - [ ] `Check for Banned Languages` / `antipattern-check` no longer fail on Python (pre-existing ReScript `.res` debt is separate/out of scope) - [ ] `cd a2ml && bash scripts/contractiles-a2ml-test.sh` (needs `deno`) - [ ] `deno run --allow-read --allow-net consent-aware-http/examples/reference-implementations/deno/example_server.js` + the curl checks https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn --- _Generated by [Claude Code](https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn)_ Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath
added a commit
that referenced
this pull request
May 27, 2026
… Lean" debunked The audit-time "72 Coq + 315 Lean markers across 6638 proof files" line conflates pre-triage figures with Phase-1 outcomes. The right shape: - 72 Coq Axioms — already classified via absolute-zero#58 + #59 (52 §(c) + 17 §(a)-backlog + 3 §(b)). - 52 Lean axioms + 7 Idris2 postulates + 124 Lean sorries (canonical count via check-trusted-base.sh). "315 Lean" was debunked during Phase 1 — no source reproduces it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath
added a commit
that referenced
this pull request
Sep 4, 2026
…sh + awk (#730) ## What this is `Scan for hand-authored JavaScript/TypeScript` is a **required** context on the `Optimus-Branch` ruleset, and `governance-reusable.yml` runs it on **every** estate repo. Until now that meant installing a Deno runtime on every runner to execute `check-ts-allowlist.deno.js`, an artifact compiled from an AffineScript source. The estate has retired Deno, so the gate is reimplemented in the shell the workflow already runs in. This is the follow-up to #729, which cleared the three reds and deleted the `deno-ci` workflow pair. ## Behavioural equivalence, not "the new one passes" The gate is required and estate-wide, so equivalence was established **before** the old implementation was removed: * The existing 18-case corpus was pointed at **both** targets at once — `.deno.js` and `.sh` — giving **36 assertions, 36 passes, identical verdicts on every case**. * Only then was the Deno target dropped. The corpus now runs **18/18** against the shell gate alone. * Proven fallible, not merely green: breaking the `deno-*` directory rule fails exactly `directory starting 'deno-' allowed` and nothing else; restoring it returns 18/18. `shellcheck -S style` is clean on both the gate and its test. ## What was deleted, and why together | Deleted | Why | |---|---| | `scripts/check-ts-allowlist.deno.js` | the artifact the workflow ran | | `scripts/check-ts-allowlist.affine` | its source — its only output and only build recipe are both gone in this PR, so keeping it would leave an unbuildable orphan that still looked live | | `check-ts-allowlist-drift` Justfile recipe | compiled with `--deno-esm`; sole consumer of the `.affine` | | the workflow's `source/compile drift (informational)` step | `continue-on-error: true`, emitting only `::warning::` — it could not fail, so it is deleted rather than ported | ## The lockfile, which is the risky part `actions.lock` is enforced at workflow **load** time — a stale lock kills every consumer with `jobs=0` and no annotation, which is the exact failure #729 existed to fix. Removing the `setup-deno` steps changes the pin set, so the lock moves here. It was hand-edited **deliberately**. `gh actions-lock` in bare *update* mode — the mode `scripts/update-actions-lock.sh` itself calls — was tried first and rejected. On this tree it exited **0** reporting `All 42 workflows valid` while: 1. prepending `# This workflow is managed by gh actions-lock.` at line 1 of all 42 workflows, above the SPDX header and **duplicating** the banner already on line 2; 2. rewriting `uses: ./.github/actions/signed-push` to the invalid `uses: $/…` spelling that `update-actions-lock.sh`'s own comments warn about; 3. and **leaving both genuinely-stale `setup-deno` rows in place** — the exact drift it was run to fix. The verifier is trustworthy even though the updater is not, so the four removed regions are witnessed rather than reasoned: `scripts/check-actions-lock-gate.sh` → `"valid": true`, rc=0, **zero `stale` findings**, and no workflow byte mutated. Lock rows for the `deno-ci` pair deleted in #729 are pruned at the same time. ## Debt Measured from the probes recorded in `Debtfile.a2ml`, not assumed: | Entry | Was | Now | Ceiling | |---|---|---|---| | `deno-residue` | 4 | **0** | 4 — kept as an entry at 0; debt leaves by reaching zero, not by deletion | | `deno-artefacts` | 3 | **2** | lowered 3 → 2 | **No ceiling was raised.** `deno-artefacts` stops at 2, not 0: the survivors are `docs/migrations/npm-to-deno-template/{INVENTORY-2026-05-30,MIGRATION}.adoc`, a migration recipe still pointing repos at the retired runtime. Deleting them is on-plan, but a docs deletion bundled into a PR that rewrites a required context makes rollback coarser — it is a separate one-line follow-up. ## Witnesses * `check-ts-allowlist-test.sh` → 18/18 (36/36 across both targets beforehand) * `scripts/run-shell-test-suite.sh` → **all 35 test files pass** * `scripts/check-actions-lock-gate.sh` → `valid: true`, rc=0, 0 stale * `run-debtfile.sh --write` → 0 breached; `check-debtfile-structure.sh` → OK * `check-debt-ratchet.sh origin/main` → OK, `deno-artefacts` LOWERED * `just --evaluate` parses; `asciidoctor --failure-level=WARN` clean * all three commits signed (`%G?` = `G`) --- ## Follow-up noted, deliberately NOT in this PR The sibling step `Check language-policy invariants` uses the same local-first fallback **without** the `GITHUB_REPOSITORY` guard added here, so a consumer repo carrying its own `tools/policy/check-language-policy.sh` would have that copy preferred over the canonical one. Tightening it could flip verdicts on consumers that already do this, so it needs its own PR with a census first — widening a required gate silently is exactly what this PR is trying not to do. --- ## Correction before merge: `.deno.js` is retained as a compatibility shim The first version of this PR **deleted** `scripts/check-ts-allowlist.deno.js`. That would have broken **269 repos** on merge. Measured, not estimated. `governance-reusable.yml` checks out standards' `scripts/` at floating `ref: main`, while each consumer pins the **workflow YAML** at a fixed SHA. The two halves move at different speeds, so deleting a file under `scripts/` breaks every consumer whose pinned YAML still names it — with **no red on the deleting PR**. The breakage lands on other repos, later. Measured 2026-09-04 against the live pin census (1626 rows): | cohort | distinct repos | |---|---| | pin a governance SHA running `deno run … check-ts-allowlist.deno.js` | **269** | | pin a `.ts`-era SHA | 0 (three such SHAs exist, no live consumers) | | dead / unreachable governance SHA | 59 | So `.deno.js` and `.affine` are restored **byte-identical to main**. The new `scripts/check-ts-allowlist.sh` is the gate; the shim is dead weight that stays until consumers have moved off it. **Deno is not gone.** The owner ruled removal; retention is forced by the measurement above. This PR **defers** that ruling to the repin campaign (task #59) — it does not satisfy it. Retirement is three-phase and this is phase 1: 1. land the replacement **and keep the old file as a shim** ← this PR 2. repin consumers to a post-#730 SHA (campaign, task #59) 3. delete the shim only when a pin census returns **zero** reachable pins naming `.deno.js` ### Paying for the shim without raising a ceiling Restoring `.deno.js` puts `deno-artefacts` at 3 against a ceiling of 2. Rather than raise the ceiling, this PR deletes `docs/migrations/npm-to-deno-template/` — a live recipe pointing repos **at** the retired runtime, and already dead: both inbound links named `MIGRATION.md` after the `.adoc` rename, so they had been dangling. Those two references are updated rather than left broken. Note `origin/main` measures 3 on that probe **today** — it is over its own ceiling and nobody sees it, because the Debt ratchet is `if: pull_request`, so main drifts unmeasured. This PR incidentally fixes that. Result: `deno-artefacts` 3 → 1, `deno-residue` 4 → 1, `gate-scripts-without-tests` 31 → 30. **Three ceilings lowered, none raised.** The single remaining `deno-residue` hit is a *comment* inside the shim, not a live invocation. ### Witnesses - `scripts/check-ts-allowlist.sh` → green **with the shim present** (the new gate must not flag its own shim) - `scripts/tests/check-ts-allowlist-test.sh` → 18 pass / 0 fail - `scripts/run-debtfile.sh` → 0 breached, 2 paid down, 1 resolved - `scripts/check-debtfile-structure.sh` → OK (7 entries) - `scripts/check-debt-ratchet.sh origin/main` → OK, three LOWERED - `scripts/build-registry.sh --check` → registry + topology in sync - `tests/test_governance_reusable_shape.sh` → 14 pass / 0 fail - commit `9fba1ede`, signature `%G?` = `G`
5 tasks
hyperpolymath
added a commit
that referenced
this pull request
Sep 22, 2026
Owner ruling 2026-09-22: "should be no deno, it's deprecated in standards,
and rsr-template-repo, and we are all bun and bunx now."
docs/JS-RUNTIME-POLICY.adoc:101 is the canonical .gitignore block, described
in its own heading as the "template source of truth" propagated to every repo
via rsr-template-repo and v3-templater. It still read:
# npm-avoidant (standards#67): estate JS-runtime policy is Bun>Deno>pnpm>npm.
That is the pre-ban ordering, and it was the last live text in this repo that
blessed Deno rather than banning it. Now Bun>pnpm>npm. Comment-only: no
.gitignore behaviour changes, and propagating the corrected block to the
estate's tracked .gitignore files is separate, reportable work.
Both ordering tables (LANGUAGE-POLICY.adoc:36, docs/JS-RUNTIME-POLICY.adoc:53)
already said BANNED and are unchanged. LANGUAGE-POLICY.adoc:45 ("Use Deno
instead") and the two .claude/CLAUDE.md hits are historical quotation inside
dated "what this replaced" sections — correct as history, left alone.
.githooks/validate-lint-format.sh: `nickel typecheck` ran unconditionally, so
a .ncl importing a GITIGNORED build artefact was a permanently-red gate that
no edit could satisfy — the vacuous-gate class inverted. An unresolved-import
failure is now a LOUD skip naming the file; every other typecheck error still
fails. Mutants: genuine type error rc=1, unresolved import rc=0 (and it says
"A SKIP, not a pass"), misformatted rc=1, clean rc=0. Byte-identical to the
rsr-template-repo copy (cmp verified).
NOT deleting scripts/check-ts-allowlist.deno.js, despite it having no live
invocation at HEAD. Consumers pin the WORKFLOW YAML, but that YAML checked out
the helper scripts/ at floating `ref: main` and then ran the .deno.js — so a
caller pinned to any SHA before 99220ab executes old YAML against TODAY's
scripts/. 11 of the last 12 governance-reusable revisions invoke it 3x each.
.machine_readable/Debtfile.a2ml:91 records it as "RETAINED DELIBERATELY as a
compatibility shim, not as residue" and measured 269 affected repos on
2026-09-04. Retirement is three-phase — shim (done) -> repin consumers
(task #59, OPEN) -> delete — and phase 2 is unfinished. Phase B pinned the
helper checkout, which fixes this going forward but not for pins already
distributed. Deleting it now would break every one of those callers.
Regression suites after the change: exemption-ratchet 14/0,
check-actions-lock-gate 11/0, check-ts-allowlist 18/0,
governance-reusable-contract PASS.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ji1bq3TypfycfUPAR7hSxR
hyperpolymath
pushed a commit
that referenced
this pull request
Oct 24, 2026
…1249 `governance / Debt ratchet` has been red on every pull request since #1249 because `.machine_readable/Debtfile.a2ml` still measured the 2026-08-07 Deno ban that #1249 (ruled 2026-10-14) reversed. LANGUAGE-POLICY.adoc §1.3 now reads "Deno is not banned": Bun 1, Deno 2, pnpm 3, npm 4. `deno-residue` measured 3 against a ceiling of 1. The three are live, load-bearing uses of `denoland/setup-deno` at governance-reusable.yml:1845, js-runtimes-reusable.yml:121 and self-test.yml:65 — the JS-runtimes matrix's `runtime == 'deno'` leg and the self-test's "needs all three runtimes". The entry's own description calls them "two workflow retirement notes plus one comment inside the shim", which is not what the probe matches, and demands "Must reach 0", which the ruling forbids. The ceiling was unreachable. `deno-artefacts` was written for the same ban; its remaining artefact is the `check-ts-allowlist.deno.js` compatibility shim, which leaves when consumers repin (task #59), not when Deno is retired. Both entries are retired by declaration as the file's own rule requires. The condition they measured is no longer debt. Prose that repeated the ban is corrected in the same commit, so the plan does not contradict the Debtfile: * HANDOVER.adoc — the three lines claiming Deno is retired now say Deno is permitted at tier 2 behind Bun; "Deno first" stays wrong, for a different reason. The link-rot bullet claimed every link must resolve; the repository-wide guard actually reports 443 broken internal links (285 under docs/), measured 2026-10-24 from a checkout named `standards`, with the checkout-name caveat and the measure-before-and-after rule recorded. * README.adoc — line 69 (the live definition of the _Golden_ reading) is rewritten in place. The triage rows #706, #919 and #923, the P2.3 packet row and the D354 contradictions row keep their recorded text and each carry a dated withdrawal note rather than a rewritten history. Not done: `scripts/check-ts-allowlist.deno.js` is untouched (task #59); no entry was re-scoped to `deno.json`; no `count` or `ceiling` was hand-edited. Debt-exception: deno-residue — retired, Deno is tier 2 since #1249 Debt-exception: deno-artefacts — retired, Deno is tier 2 since #1249 Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
hyperpolymath
added a commit
that referenced
this pull request
Oct 24, 2026
…#1328) Closes the last three rule-coverage gaps in the K9 conformance suite (#1058, ruling D173). ## The gap, stated precisely Twenty of the contract's 23 rules have a control in `fixtures/invalid/`. The other three cannot, and `tools/README.adoc` already said why — no fixture can make a verifier appear, a broken contract cannot be committed, a missing file cannot be a file. Those reasons are sound. What was actually missing: - **`K9-N002` was never asserted to fire at all.** It fired four times during #1058 (`Record`, then `Any`, then twice more) and nothing proved it still could. - **`K9-E000` was never asserted either.** - **`K9-C001`'s three verdicts were exercised, but not its consequence.** ## What this adds `--self-test` goes from **37 → 44 assertions**. **`K9-N002`** — the self-test points the validator at a generated broken contract and asserts the rule fires, that L2 then makes **no** `K9-N001` claim about the component (a broken contract must not be reported as the component's defect), and that the file still fails. With no toolchain it asserts the mirror image: skipped, never passed. This needs the contract path to be overridable, so `K9_CONTRACT` is added as a **test seam**. No lane sets it, and the self-test asserts the default still resolves to the canonical contract so the seam cannot be left open. **`K9-E000`** — a missing path is asserted to raise it and exit non-zero. "File not found" is the one finding a gate can emit while checking nothing at all; a runner that mistook it for a pass would report an empty corpus as conforming. **`K9-C001`** — §9.4 makes `signature` a Hunt precondition, so a refused signature must exit non-zero with verdict `fail`. An error finding that left the status at 0 would let a host read that precondition as advisory. ## Mutation-tested Each new control was verified to be able to fail: | Mutation | Result | |---|---| | Drop the `./` prefix for dash-leading names | 3 assertions fail | | Downgrade the refused-signature `err` to `warn` | 2 fail (`exits non-zero`, `verdict is fail`) | | Turn the no-nickel `K9-N002` skip into an `err` | 3 fail | The dash-name case turned out to be **already covered** at L1, so the duplicate assertion I first wrote is removed rather than kept as padding. ## Verification `k9-conformance` run [`40043217758`](https://github.com/hyperpolymath/standards/actions/runs/40043217758) on `8a8eeb7`: **success**, all 16 steps. The log and artifact hosts are unreachable from here, so the Nickel-present branch of the `K9-N002` control is established by chain rather than by reading it: 1. `Install Nickel` appends to `$GITHUB_PATH`, which applies to every later step in the job; 2. `Validator self-test` is step 9, after it — so `nickel_bin` returns 0 and the Nickel branch is the one taken; 3. `assertions()` in `scripts/lib/k9-grid.jq` turns any `FAIL` line into a non-advisory `fail` item, which makes `state` **red**, and the `Gate` step exits 1 on red; 4. the job succeeded ⟹ no `FAIL` line ⟹ those assertions passed. Locally: self-test 44/44, fixtures `6 positive, 21 negative, 0 failures`, corpus hook `12 conforming, 0 grandfathered, 2 routed`, exit 0. ## Also Fixes a pre-existing dangling cross-ref: `MIGRATION-1058.adoc` cited `§7.5`, but §7 ends at 7.4 and `detect_level` is specified in `§7.3`. --- ## WO-8 — the two pre-existing reds this branch carried `governance / Debt ratchet` has been red on **every** pull request since #1249, so it was red here too and was not caused by this branch (the other open PR branch fails it identically; the job is `pull_request`-only, which is why it never shows on `main`). It is the sibling of the ratchet that watches the K9 contract-debt ledger, so it is squarely part of this work's foundation. It is now **green** — confirmed in CI on this PR, not just locally. `governance / Exemption ratchet`, which is the job that actually watches `.machine_readable/k9-contract-debt.txt`, was already passing and still is. ### `deno-residue` and `deno-artefacts` retired (commit 97282e2) `deno-residue` measured 3 against a ceiling of 1. The three matches are live, load-bearing uses of `denoland/setup-deno` — `governance-reusable.yml:1845`, `js-runtimes-reusable.yml:121`, `self-test.yml:65`. They are the JS-runtimes matrix's `runtime == 'deno'` leg and the self-test's "needs all three runtimes", and `governance / JS runtimes — deno` is **passing** on this PR, which is the leg they exist to serve. The entry's description called them "two workflow retirement notes plus one comment inside the shim" and demanded "Must reach 0". Neither is true, and `LANGUAGE-POLICY.adoc` §1.3 now reads, verbatim, *"RULED 2026-10-14 by the owner. Deno is not banned."* — Bun 1, Deno 2, pnpm 3, npm 4. The ceiling was unreachable by ruling. Both entries are retired by declaration, with a `Debt-exception:` trailer each, which is the path the file's own header and `check-debt-ratchet.sh:113` provide. Neither was re-scoped to `deno.json`; `scripts/check-ts-allowlist.deno.js` is untouched (task #59); no `count` or `ceiling` was hand-edited to force a pass. ### `todo-fixme-markers` re-baselined (commit d968578) Running the measure locally to find the breach above exposed a second one: `todo-fixme-markers 84 > ceiling 83`. `debt-measure` has failed **every Monday since 2026-09-21** — five consecutive `failure` runs. #1302's machine measure wrote 83/83, but a full checkout measures 84, and measured 84 at every one of the last 21 commits on `main` (checked revision by revision). The ceiling sat below the measurement, so the weekly run could never pass. Raised to the measured 84 by declaration, which is what #1302's own commit message directs: *"A ceiling that needs to RISE is not done here — raise it in a human PR with a `Debt-exception:` trailer."* Self-correcting either way — if the runner's 83 is the true figure, the next `--write` run reports PAID and lowers the ceiling straight back. **Open, and not resolved:** why the runner measured 83. It is not binary detection (`git grep` with and without `-I` both give 84) and the workflow uses a plain full `actions/checkout`. A runner that disagrees with the tree by one file will keep writing ceilings the tree cannot meet. ### Every `Deno` hit in the two prose files, with its disposition `HANDOVER.adoc` | Line | Disposition | |---|---| | 216–218 | **Rewritten.** Claimed Deno and A2ML were both retired. Now: A2ML is retired; "Deno first" is still wrong, but because Bun is tier 1 — Deno is permitted at tier 2. | | 238 | **Rewritten.** Worker prompt: "Deno and A2ML are retired" → A2ML retired, Deno tier 2 behind Bun since #1249. | | 296–298 | **Rewritten.** Reviewer prompt: same correction, plus "'no Deno' would be wrong too". | `README.adoc` | Line | Disposition | |---|---| | 69 | **Rewritten in place** (a live definition of the _Golden_ reading, not history): "Deno and Python banned" → "Python banned, Deno permitted at tier 2 since #1249". | | 238–242 | **Corrected.** "both are gone" → the A2ML sub-project is gone, Deno is not; the defect is naming it as *the* runtime over Bun. | | 307 | **Corrected.** "a banned `deno.lock`" → no longer banned; the residue is implementation-in-canon, not the runtime. | | 462 `#658` | **Kept.** Recorded triage title; the Deno→Bun migration is historical fact. | | 481 `#704` | **Kept.** A filename, no policy claim. | | 483 `#706` | **Title kept, note added.** The `deno 59` half is withdrawn; the python half stands. | | 507 `#905`, 511 `#909`, 517 `#916`, 525 `#925`, 526 `#926`, 550 `#967`, 555 `#976` | **Kept.** Recorded titles describing defects that still stand — inconsistent pins, a vendored harness, a shim 11 revisions still invoke, a probe aimed at the wrong runtime. None asserts a ban. | | 520 `#919` | **Title kept, note added.** The retirement it sizes was cancelled by #1249; the count stays useful. | | 523 `#923` | **Title kept, note added.** Superseded — a third date now governs. | | 694, 994 | **Kept.** Both report that another repo's agent files say "use Deno"; that is a live defect there, and the fix is regeneration, not a ban. | | 901 `P2.3` | **Text kept, note added.** The `Deno` clauses in the task and its acceptance line are withdrawn; the `A2ML-REPO-TEMPLATE` and `1-formats/templates` clauses stand. | | 957 `P6.3` | **Kept.** "delete the Deno text in governance" is a packet instruction about a specific block, unaffected by the ruling. | | 1031 `D354` | **Text kept, note added.** D354b (Deno residue false positives) is superseded; D354a stands. | Also corrected while in the file: `HANDOVER.adoc` claimed the repository-wide link-rot guard reports two findings. Measured 2026-10-24 it reports **443** (285 under `docs/`), from a checkout named `standards` — which is what CI has, since the guard prunes `9-archive/` only under that basename and reports 684 otherwise. The bullet now carries the figure, the caveat and the measure-before-and-after rule. ### Acceptance block, run verbatim ``` $ bash scripts/run-debtfile.sh .machine_readable/Debtfile.a2ml Debtfile: 5 holding · 0 paid-down · 0 resolved · 0 breached · 0 expired · 0 broken-probe ✅ Debtfile run passed (no ceiling breached, no probe broken, no acceptance expired) exit 0 $ bash scripts/check-debtfile-structure.sh ✅ Debtfile structure OK (5 entries). exit 0 $ bash scripts/check-debt-ratchet.sh c6d7860 OK (declared) todo-fixme-markers: 83 -> 84 [Debt-exception present] OK (declared) deno-residue: removed [Debt-exception present] OK (declared) deno-artefacts: removed [Debt-exception present] Debt ratchet: OK. exit 0 $ bash scripts/link-rot-guard.sh docs/reorg/2026-10-14-tidy all internal links resolve exit 0 $ grep -n -i 'deno' docs/reorg/2026-10-14-tidy/{HANDOVER,README}.adoc no line asserts that Deno is retired or banned (table above) ``` On the PR: **`governance / Debt ratchet` pass** (run 40045493004). `governance / Exemption ratchet` pass. K9 self-test still 44/44 with 0 FAIL and 0 SKIP. The one remaining red, `governance / Validate Hypatia Baseline`, is red on `main` since #1300 and is blocked on `hyperpolymath/hypatia` #927 or #928 merging, then a two-line `hypatia-ref` pin bump. Not fixable from this repository. --------- Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: arena-agent <arena-agent@users.noreply.github.com> Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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.
Summary
Eliminates the 4 remaining non-SaltStack Python files in the repo — the ones tripping the
Check for Banned Languages(language-policy.yml) andantipattern-check(rsr-antipattern.yml) CI gates — by porting each to Deno, an allowed runtime per the estate language policy.a2ml/scripts/contractiles-a2ml-tool.py…-tool.jsjson.dumps(sort_keys=True, indent=2)output — verified againsttests/contractiles/expected/*.json. 3 shell wrappers + a2ml docs now calldeno run.avow-protocol/.../examples/python/stamp_example.pyexamples/deno/stamp_example.jsctypes→Deno.dlopenFFI; zig FFI README updated.consent-aware-http/.../python/{aibdp_middleware,example_server}.py+ README/reqs…/deno/(aibdp_middleware.js,example_server.jsonDeno.serve)nodejscross-link fixed.Verification done in-sandbox (no Deno available here, Node used as a shim):
emitoutputs byte-identical to committed expected fixtures;validatereturns rc 0 on valid / rc 1 on invalid fixtures.node --checkpasses on all 4 new JS files.findwith both CI banned-language filters now returns no Python.Test plan
Check for Banned Languagesandantipattern-checknow pass (no.pyoutside SaltStack)cd a2ml && bash scripts/contractiles-a2ml-test.sh(requiresdeno) — emit diffs clean, invalid fixtures fail as expecteddeno run --allow-read --allow-net consent-aware-http/examples/reference-implementations/deno/example_server.jsthen the threecurlchecksdeno run --allow-read --allow-ffi avow-protocol/avow-lib/examples/deno/stamp_example.js(afterzig build)Note: this is a separate change from the merged CODEOWNERS policy (#58); it reuses the same working branch.
https://claude.ai/code/session_01GTo7dz32ZgxuHXefv8BGqn
Generated by Claude Code