Skip to content

feat(crg): READINESS.md + crg-grade fix; owner-approved licence corrections - #1235

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/exciting-noether-dzrfrr
Oct 13, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
claude/exciting-noether-dzrfrr

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Follow-up to #1233. The repo that defines CRG had no machine-readable grade declaration, so just crg-grade would have printed X for it. In fact the recipe never ran at all; see below. This PR also makes owner-approved licence corrections to six files.

READINESS.md (new)

  • Holds the **Current Grade:** C line that the CRG spec asks for (COMPONENT-READINESS-GRADES.adoc, "Machine-Readable Grade Declaration").
  • Why C (owner ruling 2026-10-13): C is the latest assessment, 0-canon/CRG-SELF-ASSESSMENT.adoc (2026-04-09). That document also lists the gaps to Grade B.
  • component-readiness-grades/SELF-ASSESSMENT.adoc records an earlier B (2026-04-04). READINESS.md notes it and says the later assessment governs. That document is not edited here.
  • Licensed CC-BY-SA-4.0 as prose documentation.

just crg-grade / just crg-badge fixed

  • The bug: both recipes used Make's $$ escape, which just does not have. sh therefore received grade=<pid>(grep …) and failed with Syntax error: "(" unexpected.
  • The fix: the seven $$ in those two recipes become $. Nothing else in the Justfile changes.
  • Checked with just 1.21:
    • crg-grade prints C;
    • crg-badge prints the yellow CRG C shields.io badge;
    • without READINESS.md, both fall back to X.

Licence corrections (owner ruling 2026-10-13, approved file by file)

The rule applied is CC-BY-SA-4.0 for prose and MPL-2.0 for code. Only the SPDX-License-Identifier line changes in each file.

File Was Now Why
.github/actions/signed-push/README.md MPL-2.0 CC-BY-SA-4.0 prose (mislabelled when added in #1233)
2-protocols/k9-coordination/docs/iana/application-vnd.k9.coordination-registration.txt MPL-2.0 CC-BY-SA-4.0 registration form, so prose
1-formats/k9/docs/iana/application-vnd.k9-registration.txt MPL-2.0 CC-BY-SA-4.0 registration form, so prose
1-formats/deed/docs/iana/application-vnd.deed-registration.txt MPL-2.0 CC-BY-SA-4.0 registration form, so prose
2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.2.abnf CC-BY-SA-4.0 MPL-2.0 machine-parsed grammar, so code
2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf CC-BY-SA-4.0 MPL-2.0 machine-parsed grammar, so code

Both grammars already carried a non-standard SPDX-License: MPL-2.0 line. It contradicted their identifier; the two now agree.

Not changed (flagged)

  • The B assessment in component-readiness-grades/SELF-ASSESSMENT.adoc stays as it is.
  • So does the header comment in coordination.k9, which still says the grade is B and that this repo has no READINESS.md yet. It is now stale.
  • The CRG spec says these recipes come from rsr-template-repo's Justfile. If that file has the same $$, it has the same bug. It is a different repository, so it is not fixed here.
  • 1-formats/a2ml/anchor/abnf/anchor.abnf is also a CC-BY-SA-4.0 grammar. A2ML is retired, so it is left alone.

Testing

  • just --list parses the Justfile, and the two recipes were run as described above.
  • The root coordination.k9 still parses under the v1.2 grammar. k9-validate.sh --self-test passes.
  • Shell suite: 77 of 81 test files pass. The other 4 fail identically on main in this sandbox, which lacks the tools they need: KYAML-capable yq, the JCS tool and Ruby. The 4 are check-actions-lock-gate, check-ijson-jcs, kyaml-format and science-ci-security.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GqfpQtLuMczxtgG1U9PkLW


Generated by Claude Code

READINESS.md is the machine-readable grade declaration the CRG spec asks
for (COMPONENT-READINESS-GRADES.adoc, "Machine-Readable Grade
Declaration"). The repo that defines CRG had none, so `just crg-grade`
fell back to X.

The grade is C (owner ruling 2026-10-13): the latest assessment,
0-canon/CRG-SELF-ASSESSMENT.adoc (2026-04-09), which also lists the gaps
to B. The file notes the earlier B assessment in
component-readiness-grades/SELF-ASSESSMENT.adoc (2026-04-04) and that the
later one governs.

`just crg-grade` and `just crg-badge` never ran: they used Make's `$$`
escape, which just does not have, so sh saw `grade=<pid>(grep ...)` and
failed with a syntax error. They now use `$`. Checked with just 1.21:
crg-grade prints C, crg-badge prints the yellow C badge, and both fall
back to X without READINESS.md.

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

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 569b6846-5861-4cc2-83ca-45c058627e0b
📥 Commits

Reviewing files that changed from the base of the PR and between 0b1898e and 19fac8b.

📒 Files selected for processing: 3
  • .github/actions/signed-push/README.md
  • Justfile
  • READINESS.md
 _______________________________________________
< Get your code reviewed, or the bunny gets it. >
 -----------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
  • 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.

@github-actions

Copy link
Copy Markdown
Contributor

K9 contract conformance

run https://github.com/hyperpolymath/standards/actions/runs/38480744292

K9 normative contract typecheck

k9_contract.ncl typechecks

K9 contract self-test

== the bash mirrors cannot drift from the normative contract ==
ok   leash_levels mirrors k9_contract.ncl
ok   core_capabilities mirrors k9_contract.ncl
ok   contract_version mirrors k9_contract.ncl
ok   schema_major mirrors k9_contract.ncl
== capability arithmetic (§8) ==
ok   capability_ok fs.read accepted
ok   capability_ok rollback.apply accepted
ok   capability_ok x-acme.gpu.alloc accepted
ok   capability_ok x-acme rejected
ok   capability_ok x-.gpu rejected
ok   capability_ok fs.delete rejected
ok   capability_ok  rejected
== the extractor ==
ok   extracts pedigree.security.leash
ok   extracts pedigree.component_type
ok   extracts pedigree.metadata.name
ok   pedigree leash is not reported as top-level leash
ok   required_capabilities for a quiet component
ok   required_capabilities follows allow_network
== the envelope strip keeps line numbers (§3.6) ==
ok   line 1 becomes a comment
ok   line count is preserved
ok   schema_version stays on line 5
== L3: signature presence is not verification (§10) ==
ok   no verifier -> K9-C001 is SKIPPED, never a pass
ok   the skip states presence does not authorise 'Hunt
ok   verifier accepts -> verdict 'Verified, no K9-C001 finding
ok   verifier refuses -> K9-C001 error, verdict 'Rejected
== the fixture runner's attribution cannot be fooled by a filename ==
ok   every extracted finding is well-formed rule+layer
ok   the rule that really fired is attributed
ok   a rule named only in the filename is NOT attributed
ok   K9-C001 is present as a skipped finding
ok   and that same finding is NOT extractable as a rejection
== the dialect discriminator agrees with the coordination grammar (§4.3) ==
ok   magic file opening '---' is coordination
ok   magic file opening 'metadata:' is coordination
ok   plain file opening '---' is unclaimed
ok   plain file opening 'metadata:' is unclaimed
== no Nickel reserved word is used as an identifier ==
ok   the contract and all 27 fixtures avoid Nickel's reserved words

self-test: all assertions passed

K9 conformance fixtures

== positive controls (must pass) ==
ok   extension-capability.k9.ncl
ok   extension-fields.k9.ncl
ok   hunt-fully-granted.k9.ncl
ok   kennel-data.k9.ncl
ok   library-base.ncl
ok   yard-typed-config.k9.ncl

== negative controls (must fail, by the named rule) ==
ok   L0-K9-E001-bad-magic.k9.ncl (rejected by K9-E001 at L0)
ok   L0-K9-E002-nul-byte.k9.ncl (rejected by K9-E002 at L0)
ok   L0-K9-E003-crlf.k9.ncl (rejected by K9-E003 at L0)
ok   L0-K9-E004-no-spdx.k9.ncl (rejected by K9-E004 at L0)
ok   L0-K9-E005-unclaimed-body.k9.ncl (rejected by K9-E005 at L0)
ok   L0-K9-S012-library-with-pedigree.ncl (rejected by K9-S012 at L0)
ok   L0-K9-S014-stray-leash.ncl (rejected by K9-S014 at L0)
ok   L1-K9-S001-no-pedigree.k9.ncl (rejected by K9-S001 at L1)
ok   L1-K9-S002-wrong-major.k9.ncl (rejected by K9-S002 at L1)
ok   L1-K9-S003-todo-component-type.k9.ncl (rejected by K9-S003 at L1)
ok   L1-K9-S004-unknown-leash.k9.ncl (rejected by K9-S004 at L1)
ok   L1-K9-S005-missing-name.k9.ncl (rejected by K9-S005 at L1)
ok   L1-K9-S006-unknown-capability.k9.ncl (rejected by K9-S006 at L1)
ok   L1-K9-S007-ungranted-flag.k9.ncl (rejected by K9-S007 at L1)
ok   L1-K9-S008-hunt-signature-not-required.k9.ncl (rejected by K9-S008 at L1)
ok   L1-K9-S009-hunt-no-signature-block.k9.ncl (rejected by K9-S009 at L1)
ok   L1-K9-S010-hunt-empty-side-effects.k9.ncl (rejected by K9-S010 at L1)
ok   L1-K9-S011-recipes-at-yard.k9.ncl (rejected by K9-S011 at L1)
ok   L1-K9-S013-dangling-import.k9.ncl (rejected by K9-S013 at L1)
ok   L2-K9-N001-two-segment-version.k9.ncl (rejected by K9-N001 at L2)
ok   L2-K9-N001-wrong-field-type.k9.ncl (rejected by K9-N001 at L2)

fixtures: 6 positive, 21 negative (0 needing nickel), 0 failure(s)

K9 corpus conformance (L2)

[validate-k9] 14 conforming, 0 grandfathered (layer all, contract v1.0.0)

The README is prose documentation, which LICENCE-POLICY Rule 1 puts
under CC-BY-SA-4.0. It was given MPL-2.0 in error when it was added in
#1233. Owner-approved change to this one file (2026-10-13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GqfpQtLuMczxtgG1U9PkLW
@hyperpolymath hyperpolymath changed the title feat(crg): declare the repo's CRG grade in READINESS.md; fix crg-grade feat(crg): declare the repo's CRG grade in READINESS.md; fix crg-grade; signed-push README licence Oct 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

K9 contract conformance

run https://github.com/hyperpolymath/standards/actions/runs/38480857838

K9 normative contract typecheck

k9_contract.ncl typechecks

K9 contract self-test

== the bash mirrors cannot drift from the normative contract ==
ok   leash_levels mirrors k9_contract.ncl
ok   core_capabilities mirrors k9_contract.ncl
ok   contract_version mirrors k9_contract.ncl
ok   schema_major mirrors k9_contract.ncl
== capability arithmetic (§8) ==
ok   capability_ok fs.read accepted
ok   capability_ok rollback.apply accepted
ok   capability_ok x-acme.gpu.alloc accepted
ok   capability_ok x-acme rejected
ok   capability_ok x-.gpu rejected
ok   capability_ok fs.delete rejected
ok   capability_ok  rejected
== the extractor ==
ok   extracts pedigree.security.leash
ok   extracts pedigree.component_type
ok   extracts pedigree.metadata.name
ok   pedigree leash is not reported as top-level leash
ok   required_capabilities for a quiet component
ok   required_capabilities follows allow_network
== the envelope strip keeps line numbers (§3.6) ==
ok   line 1 becomes a comment
ok   line count is preserved
ok   schema_version stays on line 5
== L3: signature presence is not verification (§10) ==
ok   no verifier -> K9-C001 is SKIPPED, never a pass
ok   the skip states presence does not authorise 'Hunt
ok   verifier accepts -> verdict 'Verified, no K9-C001 finding
ok   verifier refuses -> K9-C001 error, verdict 'Rejected
== the fixture runner's attribution cannot be fooled by a filename ==
ok   every extracted finding is well-formed rule+layer
ok   the rule that really fired is attributed
ok   a rule named only in the filename is NOT attributed
ok   K9-C001 is present as a skipped finding
ok   and that same finding is NOT extractable as a rejection
== the dialect discriminator agrees with the coordination grammar (§4.3) ==
ok   magic file opening '---' is coordination
ok   magic file opening 'metadata:' is coordination
ok   plain file opening '---' is unclaimed
ok   plain file opening 'metadata:' is unclaimed
== no Nickel reserved word is used as an identifier ==
ok   the contract and all 27 fixtures avoid Nickel's reserved words

self-test: all assertions passed

K9 conformance fixtures

== positive controls (must pass) ==
ok   extension-capability.k9.ncl
ok   extension-fields.k9.ncl
ok   hunt-fully-granted.k9.ncl
ok   kennel-data.k9.ncl
ok   library-base.ncl
ok   yard-typed-config.k9.ncl

== negative controls (must fail, by the named rule) ==
ok   L0-K9-E001-bad-magic.k9.ncl (rejected by K9-E001 at L0)
ok   L0-K9-E002-nul-byte.k9.ncl (rejected by K9-E002 at L0)
ok   L0-K9-E003-crlf.k9.ncl (rejected by K9-E003 at L0)
ok   L0-K9-E004-no-spdx.k9.ncl (rejected by K9-E004 at L0)
ok   L0-K9-E005-unclaimed-body.k9.ncl (rejected by K9-E005 at L0)
ok   L0-K9-S012-library-with-pedigree.ncl (rejected by K9-S012 at L0)
ok   L0-K9-S014-stray-leash.ncl (rejected by K9-S014 at L0)
ok   L1-K9-S001-no-pedigree.k9.ncl (rejected by K9-S001 at L1)
ok   L1-K9-S002-wrong-major.k9.ncl (rejected by K9-S002 at L1)
ok   L1-K9-S003-todo-component-type.k9.ncl (rejected by K9-S003 at L1)
ok   L1-K9-S004-unknown-leash.k9.ncl (rejected by K9-S004 at L1)
ok   L1-K9-S005-missing-name.k9.ncl (rejected by K9-S005 at L1)
ok   L1-K9-S006-unknown-capability.k9.ncl (rejected by K9-S006 at L1)
ok   L1-K9-S007-ungranted-flag.k9.ncl (rejected by K9-S007 at L1)
ok   L1-K9-S008-hunt-signature-not-required.k9.ncl (rejected by K9-S008 at L1)
ok   L1-K9-S009-hunt-no-signature-block.k9.ncl (rejected by K9-S009 at L1)
ok   L1-K9-S010-hunt-empty-side-effects.k9.ncl (rejected by K9-S010 at L1)
ok   L1-K9-S011-recipes-at-yard.k9.ncl (rejected by K9-S011 at L1)
ok   L1-K9-S013-dangling-import.k9.ncl (rejected by K9-S013 at L1)
ok   L2-K9-N001-two-segment-version.k9.ncl (rejected by K9-N001 at L2)
ok   L2-K9-N001-wrong-field-type.k9.ncl (rejected by K9-N001 at L2)

fixtures: 6 positive, 21 negative (0 needing nickel), 0 failure(s)

K9 corpus conformance (L2)

[validate-k9] 14 conforming, 0 grandfathered (layer all, contract v1.0.0)

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath marked this pull request as ready for review October 13, 2026 22:55
@hyperpolymath
hyperpolymath merged commit 312ff11 into main Oct 13, 2026
65 of 66 checks passed
@hyperpolymath
hyperpolymath deleted the claude/exciting-noether-dzrfrr branch October 13, 2026 22:57
@hyperpolymath hyperpolymath changed the title feat(crg): declare the repo's CRG grade in READINESS.md; fix crg-grade; signed-push README licence feat(crg): READINESS.md + crg-grade fix; owner-approved licence corrections Oct 13, 2026
hyperpolymath added a commit that referenced this pull request Oct 13, 2026
…1236)

This is the licence commit from #1235. It was pushed about a minute
after #1235 merged, so it never reached main.

**Rule (owner ruling 2026-10-13):** CC-BY-SA-4.0 for prose, MPL-2.0 for
code. The owner approved each of these five files individually. Only the
`SPDX-License-Identifier` line changes in each.

| File | Was | Now | Why |
|---|---|---|---|
|
`2-protocols/k9-coordination/docs/iana/application-vnd.k9.coordination-registration.txt`
| MPL-2.0 | CC-BY-SA-4.0 | registration form, so prose |
| `1-formats/k9/docs/iana/application-vnd.k9-registration.txt` | MPL-2.0
| CC-BY-SA-4.0 | registration form, so prose |
| `1-formats/deed/docs/iana/application-vnd.deed-registration.txt` |
MPL-2.0 | CC-BY-SA-4.0 | registration form, so prose |
|
`2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.2.abnf`
| CC-BY-SA-4.0 | MPL-2.0 | machine-parsed grammar, so code |
|
`2-protocols/k9-coordination/spec/abnf/coordination-k9-grammar_v1.1.abnf`
| CC-BY-SA-4.0 | MPL-2.0 | machine-parsed grammar, so code |

Both grammar files also carry a non-standard `SPDX-License: MPL-2.0`
line, which contradicted their CC-BY-SA-4.0 identifier. After this
change both lines say MPL-2.0.

**Left alone:** `1-formats/a2ml/anchor/abnf/anchor.abnf` is also a
CC-BY-SA-4.0 grammar, but A2ML is retired.

## Testing
- The root `coordination.k9` still parses under the v1.2 grammar.
- `k9-validate.sh --self-test` passes.
- Shell suite: 77 of 81 test files pass. The other 4 fail identically on
`main` in this sandbox, which lacks the tools they need: KYAML-capable
yq, the JCS tool and Ruby.

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

https://claude.ai/code/session_01GqfpQtLuMczxtgG1U9PkLW

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

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Oct 14, 2026
… plan; fix four reds (#1240)

## What this is

The deep dive the owner asked for on 2026-10-14: what `standards` is,
why it is hard to read, what each of its 220 open issues asks for once
read literally / sensibly / for its mischief, how it is wired to the
seven sibling repos, and a phased plan that cheaper models can execute
packet by packet.

Entry point: `docs/reorg/2026-10-14-tidy/README.adoc`. Appendices in the
same directory: four issue-triage records (one per range, every open
issue), the workflow audit, the wiring audit (40 drifts), and a
rulings-ledger snapshot D1–D334 compiled from #787 and #1234 (the local
ledger was lost with the workstation; the issues stay authoritative,
this is a derived copy).

## Phase 0 fixes landed here (each verified locally)

- `standards-map.toml`: `READINESS.md` mapped (Gate D was red on `main`
since #1235). `bash scripts/check-standards-map.sh` → GATE D PASSED.
- `.machine_readable/Debtfile.a2ml`: removed the resolved
`shell-scripts-missing-spdx` entry whose acceptance expired 2026-10-01
(`debt-measure` red). `run-debtfile.sh` → passes;
`check-debtfile-structure.sh` → 7 entries OK.
- `.github/workflows/readme-derive-reusable.yml`: removed the
`concurrency` block. Inside a called workflow `github.workflow` is the
caller's name, so caller and reusable shared one group and the run
cancelled itself before any job (README Derive: 0 jobs on 28 consecutive
main runs). YAML parsed with a library after the edit.
- `Justfile`: `v1-audit` path corrected, `build`/`clean` no longer
reference a missing directory, `lint` delegates to `validate` instead of
echoing a banned tool, `llm-context` reads the `.adoc` warm-ups. `just
--list` and `--dry-run` clean.
- `.github/funding.yml`: removed (lower-case duplicate of `FUNDING.yml`,
names another owner, case-collides on insensitive filesystems).

Also green locally: Mustfile (14 pass, 1 manual), canonical-names guard,
Gate A, `git diff --check`, SPDX header on every new file,
link-rot-guard adds no new findings.

Debt-exception: shell-scripts-missing-spdx — count reached 0 and the
entry's acceptance expired 2026-10-01; entries leave the ledger by
reaching zero (Debtfile preamble)

## Not done here, by design

No moves, deletions of content, licence edits, `.a2ml` writes or estate
sweeps. Those are the Phase 1–8 packets in the plan, each with a tier,
steps and a mechanical acceptance test. The owner decision sheet
(candidate rows D335–D354) is in §Owner decision sheet; it has not been
posted to #1234.

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

https://claude.ai/code/session_01T4U5XuN4NWs8FTxoe5PuH7

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Oct 14, 2026
#1241)

Owner ruling 2026-10-14, given in session. Follow-up to #1235 and #1236.

## `coordination.k9`
- **Licence invariant replaced.** `pmpl-license-only` said "All original
code uses PMPL-1.0-or-later". That contradicted the file's own `license:
MPL-2.0` and LICENCE-POLICY Rule 1. It becomes
`mpl-code-cc-by-sa-prose`:
  - code, configuration and scripts are MPL-2.0;
  - prose is CC-BY-SA-4.0;
  - PMPL-1.0-or-later appears only on the Palimpsest register;
  - licence changes are owner-approved, file by file.

LICENCE-POLICY.adoc stays authoritative, so the register's members are
not copied into this file.
- **Header comment.** It now says the CRG grade is declared in
`READINESS.md`. Before, it still said B and that `READINESS.md` did not
exist.
- **`build_commands`.** The descriptions now match the Justfile as
changed in #1240: `just build` is a no-op because the repo ships specs
only, and `just lint` delegates to `just validate`.

## `component-readiness-grades/SELF-ASSESSMENT.adoc`
- This document is now marked superseded by
`0-canon/CRG-SELF-ASSESSMENT.adoc` (2026-04-09, Grade C), which found
the Grade B criteria not yet met.
- Its heading no longer claims to show the current grade. The body is
kept as the historical record.

## `docs/reorg/2026-10-14-tidy/issue-triage-089-497.adoc`
- The #497 entry now records the ruling on the coordination.k9 part.
- Item (a) and the PALIMPSEST.adoc / `licenses/` part of (b) remain
open.
- The tidy plan's P5.2 (rewriting the A2ML-era invariants for the deed
era) is not done here; it stays with its owner in that plan.

## Testing
- The root `coordination.k9` parses under grammar v1.2.0 (apg-js). The
k9-init generator parser reads it, and all sections render.
- The `validate-k9` hook and `k9-validate.sh --self-test` pass.
- Shell suite: 77 of 81 test files pass. The other 4 fail identically on
`main` in this sandbox, which lacks KYAML-capable yq, the JCS tool and
Ruby.

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

https://claude.ai/code/session_01GqfpQtLuMczxtgG1U9PkLW

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

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit to hyperpolymath/rsr-template-repo that referenced this pull request Oct 14, 2026
…235)

## Summary

`just crg-grade` and `just crg-badge` have never worked. Both recipes
use Make's `$$` escape, which `just` does not have. As a result, `sh`
received `grade=<pid>(grep …)` and stopped with `Syntax error: "("
unexpected` before it ever read `READINESS.md`.

The CRG spec in `hyperpolymath/standards` names this template's Justfile
as the source of these recipes, so it is fixed here at the source. The
same fix landed in hyperpolymath/standards#1235.

## Changes

- `Justfile`: the seven `$$` in `crg-grade` and `crg-badge` become `$`.
- `.machine_readable/contractiles/Justfile`: the same change. This file
is a byte-identical copy of the root `Justfile`, and the two stay
identical after the fix.

## RSR Quality Checklist

### Required

- [x] Tests pass: the changed recipes were run directly (see Testing).
The full `just test` was not run here, because this Justfile uses `just`
modules, which the sandbox's just 1.21 cannot parse.
- [x] Code is formatted (no formatting change)
- [x] Linter is clean (no new warnings or errors)
- [x] No banned language patterns
- [x] No `unsafe` blocks without `// SAFETY:` comments (none touched)
- [x] No banned functions
- [x] SPDX license headers present on all new/modified source files
(unchanged)
- [x] No secrets, credentials, or `.env` files included

### As Applicable

Nothing applies: no project state, integration, architecture or
dependency changes.

## Testing

Both recipes were extracted from the Justfile and run with just 1.21:

- **Old recipes:** fail with `sh: 1: Syntax error: "(" unexpected`.
- **New recipes:**
  - without `READINESS.md`, they print `X` and the grey CRG X badge;
- with a `**Current Grade:** D` line, they print `D` and the orange CRG
D badge.

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

https://claude.ai/code/session_01GqfpQtLuMczxtgG1U9PkLW

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

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Fixed grade and badge generation so the readiness grade is correctly
read from `READINESS.md`, with `X` used when no matching grade is found.
* Badge colors continue to reflect the grade, and the generated badge
link is printed as expected.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

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