Skip to content

feat: follow the 2026-10-14 JS runtime ruling; re-sync the provisioning engine 0.6.0 - #239

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/new-session-ywdrth
Oct 14, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
claude/new-session-ywdrth

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

The template still taught and enforced the 2026-08-26 "Deno is retired" rule. Your 2026-10-14 ruling replaced it, in standards LANGUAGE-POLICY.adoc §1.3–§1.4, on main since hyperpolymath/standards#1249:

  • the order is Bun > Deno > pnpm > npm;
  • there is one package.json;
  • its bun.lock, deno.lock and pnpm-lock.yaml are all written by js-runtimes regen.

This PR is the template half of hyperpolymath/standards#1255, which promised it ("rsr-template-repo is next").

One gate contradicted the ruling outright. runtime-policy.yml failed every repository with more than one lockfile, so it failed every repository that follows the ruling:

::error::Mixed toolchains: 3 package managers have lockfiles in this repository.

Every repository minted from this template carries that gate (resource-algebra does, for example), so the fix starts here.

Changes

  • .github/workflows/runtime-policy.yml:
    • bun.lock, deno.lock and pnpm-lock.yaml count as one dependency graph, locked three ways. Governance's JS runtimes — … jobs check each lock against package.json.
    • An npm package-lock.json next to them is still "mixed toolchains" and fails.
    • A deno.json / deno.jsonc is a notice (your "Notice only" answer), not a warning.
    • File detection is unchanged; the header comment is rewritten to match.
  • Provisioning engine re-synced to standards ed04132e (engine 0.6.0, #1255): build/just/provision-lib.sh, provision-modes.sh and provision-check.sh.
    • provision.just was already identical.
    • Every line that only the template's copy had is an older revision of canon code, so the copy loses nothing local.
    • What changes: a package.json now provisions bun, deno and pnpm, and deno and pnpm leave the banned tools. The rest is canon's docstrings and the .mise.toml / .tool-versions / backend checks.
  • The same policy in prose.
    • The arrival pack's language block (arrival-pack.ncl), with CLAUDE.md regenerated by just claude-md. Nothing in that file was hand-edited.
    • The mise.toml comment.
    • docs/SETUP.adoc rows PV-W23, PV-W30 and PV-W34, and the dev warm-up's "Languages" line, copied from the canon templates.
    • The JS runtime block in .cursorrules, .clinerules and .windsurfrules.
    • .github/copilot-instructions.md.
    • The PR template's banned-languages line.
    • Two comments: workflow-linter.yml and check-action-pinning.js.
  • Re-pin ae36881 → 934b879 (66453bf) for the six standards reusables, fixing governance / Actions lockfile verify, which is red on main.
    • Why it fails: at ae36881 the gate installs gh-actions-lock v0.1.6, which cannot read this lock's format v0.0.3 ("newer than this binary supports").
    • 934b879 installs v0.2.0. This is the same change resource-algebra#8 made.
    • actions.lock was repaired with standards' own scripts, in order: complete-job-refs.sh, close-lock.sh (run offline), prune-stale.sh. The setup-deno and setup-bun records match resource-algebra main's.
  • CHANGELOG.adoc: an entry under Unreleased / Changed.

Left as they are:

  • docs/governance/TEMPLATE-LINEAGE-AUDIT.adoc, a dated audit record.
  • The "deno" keyword in label-classifier.json, which is a migration-label keyword.
  • copilot-instructions' TypeScript paragraph. It is stale against the 2026-08-27 "no TypeScript" tightening, which is a different ruling and out of scope here.
  • governance / UUID v7 conformance, red on main too and not caused by this PR. See this comment.

RSR Quality Checklist

Required

  • Tests pass (see Testing)
  • Code is formatted
  • Linter is clean (shellcheck on the new gate script; workflow validation unchanged at 4 recommendations)
  • No banned language patterns
  • No unsafe blocks without // SAFETY: comments
  • No banned functions
  • SPDX license headers present on all new/modified source files (headers unchanged; no new files)
  • No secrets, credentials, or .env files included

As Applicable

  • Documentation updated for user-facing changes
  • CHANGELOG or release notes updated

Testing

Gate, old step against new, extracted from each workflow with yq and run in fixture directories:

Fixture old new
empty rc=0 notice rc=0 notice
bun.lock + deno.lock + pnpm-lock.yaml rc=1 "Mixed toolchains: 3" rc=0
bun.lock + pnpm-lock.yaml rc=1 rc=0
package-lock.json + bun.lock rc=1 rc=1
package-lock.json alone rc=0 warning rc=0 warning
deno.json + deno.lock rc=0 warning ("being removed") rc=0 notice
bun.lockb alone rc=0 rc=0

Repository checks (just 1.42.4, nickel 1.17.0, mikefarah yq 4.44.3, gh-actions-lock v0.2.0):

build/just/provision-check.sh .                provision-check: 0 FAIL, 0 WARN
provision-lib.sh doctor                         same results as the old engine; only PASS wording differs
.machine_readable/arrival-pack/verify.sh        OK: CLAUDE.md arrival pack is in sync with the deed.
just validate-repo-map                          repository map: up to date
scripts/validate-template.sh .                  Validation PASSED (9 warnings; main: 9)
tests/workflows/validate_workflows_test.sh      Workflow validation PASSED (4 recommendations; main: 4)
tests/workflows/archetype_lock_merge_test.sh    PASS
scripts/check-lock-sync.sh                      OK (0 dangling edges)
934b879 check-actions-lock-gate.sh              Immutable direct and transitive lockfile coverage verified. (exit 0)
shellcheck -S warning (runtime-policy step)     clean
git diff --check                                clean

The doctor's failures here come from the sandbox (no Guix and similar), and they are the same under both engines.

SonarCloud: its quality gate reports Maintainability D and Security C on new code. This environment cannot reach sonarcloud.io, so I have not seen the findings. Most of the new code is the engine, copied byte for byte from standards, where the same change passed Sonar on #1255.

What follows. Repositories minted earlier keep the old runtime-policy.yml until it is re-synced. Any of them that adopts the three-lock layout goes red on Runtime Policy until then.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y6FD63UrriRBHqmhhEca9t


Generated by Claude Code

…ng engine 0.6.0

standards LANGUAGE-POLICY §1.3–§1.4 (owner ruling 2026-10-14): Bun > Deno >
pnpm > npm, from one package.json whose bun.lock, deno.lock and
pnpm-lock.yaml are all written by `js-runtimes regen`. The template still
taught and enforced the 2026-08-26 "Deno is retired" rule.

runtime-policy.yml failed any repository with more than one lock, so it
failed every repository that follows the ruling. Fixture runs, old gate
against new:

  bun.lock + deno.lock + pnpm-lock.yaml   old rc=1 "Mixed toolchains: 3"   new rc=0
  bun.lock + pnpm-lock.yaml               old rc=1                         new rc=0
  package-lock.json + bun.lock            old rc=1                         new rc=1
  deno.json + deno.lock                   old rc=0 warning                 new rc=0 notice
  empty / npm alone / bun.lockb alone     unchanged

The three js-runtimes locks now count as one dependency graph; an npm
package-lock.json next to them is still mixed. Detection is unchanged.

The provisioning engine (provision-lib.sh, provision-modes.sh,
provision-check.sh) is copied from standards ed04132e (#1255); provision.just
was already identical. Every line that only the template's old copy had was
an older revision of canon code. provision-check.sh: 0 FAIL, 0 WARN. Doctor:
the same results under both engines, apart from the PASS wording.

The same policy appears in arrival-pack.ncl (CLAUDE.md regenerated by
`just claude-md`; verify.sh in sync), mise.toml, docs/SETUP.adoc
PV-W23/W30/W34 (the canon rows), the dev warm-up (the canon line), the three
agent rule files, copilot-instructions.md, the PR template and two comments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6FD63UrriRBHqmhhEca9t
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 48 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: hyperpolymath/rsr-template-repo/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 666c0cde-9659-4132-a8dd-caf81ee0937f
📥 Commits

Reviewing files that changed from the base of the PR and between 0afa6c9 and 66453bf.

⛔ Files ignored due to path filters: 1
  • .github/workflows/actions.lock is excluded by !**/*.lock
📒 Files selected for processing: 23
  • .clinerules
  • .cursorrules
  • .github/copilot-instructions.md
  • .github/pull_request_template.md
  • .github/workflows/governance.yml
  • .github/workflows/hypatia-scan.yml
  • .github/workflows/mirror.yml
  • .github/workflows/runtime-policy.yml
  • .github/workflows/rust-ci.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/secret-scanner.yml
  • .github/workflows/workflow-linter.yml
  • .machine_readable/arrival-pack/arrival-pack.ncl
  • .windsurfrules
  • CHANGELOG.adoc
  • CLAUDE.md
  • build/just/provision-check.sh
  • build/just/provision-lib.sh
  • build/just/provision-modes.sh
  • docs/SETUP.adoc
  • docs/onboarding/llm-warmup-dev.adoc
  • mise.toml
  • scripts/check-action-pinning.js
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hyperpolymath
hyperpolymath marked this pull request as ready for review October 14, 2026 11:49
…lock

governance / Actions lockfile verify is red on main and on this PR:

  opening lockfile: ... lockfile version v0.0.3 is newer than this binary
  supports (v0.0.2)

At ae36881 the gate installs gh-actions-lock v0.1.6. Standards 934b879
pins v0.2.0, which reads v0.0.3. This is the fix resource-algebra#8
(9240142) made: the six reusables (governance, hypatia-scan, mirror,
rust-ci, scorecard, secret-scanner) move to 934b879.

actions.lock was re-keyed with standards' own chain, complete-job-refs ->
close-lock (offline gh stub) -> prune-stale. The standards record's
nested uses: are completed at the new pin, and setup-deno@22d081f and
setup-bun@0c5077e get records identical to resource-algebra main's.
No orphan records.

Locally: check-lock-sync.sh OK; the 934b879 lock gate with gh-actions-lock
v0.2.0 reports "Immutable direct and transitive lockfile coverage
verified." (exit 0); archetype_lock_merge_test.sh PASS; validate-template
and workflow validation unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6FD63UrriRBHqmhhEca9t
@hyperpolymath
hyperpolymath enabled auto-merge (squash) October 14, 2026 11:52

Copy link
Copy Markdown
Owner Author

Two of the red checks here are not caused by this PR; one is fixed, one has no fix yet, and SonarCloud I could not read.

governance / UUID v7 conformance: red on main too (Governance run 38554261344 at 0afa6c9), with the same findings.

  • check-uuid-v8.sh --strict flags four literals, none of which this PR adds or changes:
    • the deed's identity UUID, #u5"a5ea1382-…";
    • the same UUID in CLAUDE.md, which the arrival pack generates from the deed;
    • the two Julia package UUIDs in archetypes/julia-library/overlay/Project.toml.in.
  • The template's own directive says to keep #u5 literals in deeds until the deed ABNF admits v8. The Julia UUIDs are external identifiers.
  • The script fails the same way at standards main (ed04132e), so no fix exists yet. The gate needs to accept deed #u5 literals and typed external IDs (ADR-008 phase P3, in standards). I reproduced it locally rather than re-running, since it is deterministic.

governance / Actions lockfile verify: fixed in 66453bf.

  • It failed because ae36881 installs gh-actions-lock v0.1.6, which cannot read this lockfile's format v0.0.3.
  • The six standards reusables move to 934b879, which installs v0.2.0, the same change resource-algebra#8 made.
  • actions.lock is closed at the new pin. Locally, the 934b879 gate reports "Immutable direct and transitive lockfile coverage verified" (exit 0).

SonarCloud: the quality gate fails on new code (Maintainability D, Security C). This environment cannot reach sonarcloud.io (egress policy), so I have not seen the individual findings.


Generated by Claude Code

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Maintainability Rating on New Code (required ≥ A)
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@hyperpolymath
hyperpolymath merged commit ec33724 into main Oct 14, 2026
69 of 71 checks passed
@hyperpolymath
hyperpolymath deleted the claude/new-session-ywdrth branch October 14, 2026 11:53
hyperpolymath pushed a commit that referenced this pull request Oct 14, 2026
#239 re-pinned the six standards reusables to 934b879. This branch pins them
to 6a92510, which is newer: it also carries hyperpolymath/standards#1258, which
scans Project.toml.in as Project.toml. The six `uses:` conflicts keep 6a92510.

actions.lock keeps this branch's lock. #239 changed no action reference other
than the standards pin (checked: no non-standards `uses:` line differs from
0afa6c9), so this branch's lock is exact for the merged tree. It also keeps the
canonical tag refs (setup-deno v2.0.5, setup-bun v2.2.0) that standards' own
lock records at 6a92510, where main's copy had the SHA in their `ref:` field.

CHANGELOG.adoc and CLAUDE.md merged without conflict. Checked on the merged tree:
- check-lock-sync.sh, the repo's copy and standards main's: in sync;
- arrival-pack verify.sh (nickel 1.17.0): CLAUDE.md in sync with the deed;
- self_name_pass_test.sh: PASS;
- standards' check-uuid-v8.sh --strict .: clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N6my4F3ohjwFReLW8cYYqC
hyperpolymath added a commit to hyperpolymath/standards that referenced this pull request Oct 14, 2026
…e" gate (#1260)

## Why

The governance UUID gate has checked **version 8 only** since D320
(2026-10-07), but it still runs as **"UUID v7 conformance"**. A red
therefore reads as a v7 rule;
[hyperpolymath/rsr-template-repo#239](hyperpolymath/rsr-template-repo#239)
is a recent example. Your answer (2026-10-14): rename it now, in stages,
rather than wait for ADR-008 P4.

A one-step rename would break consumers. Live rulesets name `<caller> /
UUID v7 conformance`, and `apply-branch-gates.sh` derives contexts from
emitted check runs. A renamed job would leave that context waiting
forever on every repository whose pin moved past the rename.

## Stage 1 (this PR) only adds

- **`governance-reusable.yml`** gains job `uuid-v8-conformance`, named
**"UUID v8 conformance"**. It runs the same `check-uuid-v8.sh --strict`
check.
  - The old `uuid-v7-conformance` job stays as a deprecated alias.
- Its comment says why it stays, and names the stage 2 and stage 3
steps.
- **`tests/test_governance_reusable_shape.sh`** freezes the new name
beside the old one. Adding a job is allowed (`gates.json`
`context_freeze`).
- **The dogfood workflow** `uuid-v7.yml` becomes `uuid-v8.yml`. Its
workflow name is now "UUID v8 conformance", and its job is "Reject
non-v8 UUID literals". The `actions.lock` key is renamed to match.
  - It runs only in standards.
- It is not a gate workflow in `config/rulesets/gates.json`, so no
derived context moves.
- **ADR-008** gets an amendment recording the staged plan. Its old
"renamed at P4" line now points to that amendment.

## Next stages (yours to run: they change branch protection estate-wide)

2. As consumers move their standards pin past this merge, run
`scripts/apply-branch-gates.sh` so that their rulesets require `… / UUID
v8 conformance`.
3. Once `scripts/check-required-contexts.sh` shows that no consumer
still requires "UUID v7 conformance", delete `uuid-v7-conformance` and
remove it from the frozen list. That follow-up is a one-job PR.

Until stage 3, consumers run the check twice, about 6 seconds each.

## Verification

- `tests/test_governance_reusable_shape.sh`: 14 of 14 (19 jobs, all on
`inputs.runs-on`).
- `scripts/check-lock-sync.sh`: in sync.
`check-workflow-duplicate-keys.sh`: clean. Both workflows parse.
- Also passing: `governance-reusable-contract-test.sh`,
`check-required-contexts-test.sh`, `check-workflow-staleness-test.sh`,
`uuid-v8-test.sh` and `uuid-v7-test.sh`.
- `check-uuid-v8.sh --strict .` on this repo is clean.
- `lock-selfcheck-test.sh` fails locally exactly as it does on
unmodified `main` (1 passed, 4 failed). It needs tools this container
lacks; CI runs it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01N6my4F3ohjwFReLW8cYYqC

---
_Generated by [Claude
Code](https://claude.ai/code/session_01N6my4F3ohjwFReLW8cYYqC)_

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants