Skip to content

ci: repair the checks that fail on main (workflow lint, K9 contracts, descriptile location) - #90

Open
hyperpolymath wants to merge 4 commits into
mainfrom
claude/ci-base-failures
Open

hyperpolymath wants to merge 4 commits into
mainfrom
claude/ci-base-failures

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Summary

3 checks fail on main for reasons in the repository itself. This pull request repairs them. It has 4 commits.

Check on main Cause Repair in this pull request Result in CI at 5461960
lint-workflows (1) The linter requires the SPDX line on line 1. In all 30 workflow files the comment of gh actions-lock was on line 1. (2) Behind that failure: pages.yml uses haskell-actions/setup@v2.12.1, but the lock pinned v2.12.0. (1) Line 1 and line 2 are exchanged in each file. (2) The lock record is now v2.12.1. pass
Validate K9 contracts 11 errors in 8 files. 0 errors. The validator did not change. pass
Hypatia neurosymbolic scan 6 critical findings: the descriptiles are in the retired location .machine_readable/6a2/. The directory is now .machine_readable/descriptiles/. pass

SonarQube stays red. It is not repaired here (see "Not in this pull request").

Refs #18 (the directory layout only; the validation against the contractiles is not done). Refs #30 (part A, the content debt in this repository; part B is upstream).

Changes

Workflow lint

  • Line 1 and line 2 are exchanged in the 30 workflow files. No other line changes.
  • Known risk: gh actions-lock wrote its comment on line 1 before. If it does this again, the linter rule and the tool disagree again. In standards, the tool comment is on line 1 and that repository has no linter rule for line 1.
  • actions.lock: the record of haskell-actions/setup changes from v2.12.0 to v2.12.1. Pull request 79 (Dependabot) changed pages.yml and did not change the lock. The record is written by hand, because gh actions-lock is not available in the session. The commit value is the peeled commit of the tag, read with git ls-remote. The record has the form of the records that the tool wrote for earlier version changes. The CI step gh actions-lock --verify-local passes.

K9 contracts

  • bust, intend, must, trust: signature_required = true is added to pedigree.security. The K9 contract specification requires it at the leash 'Hunt (K9-S008). No pedigree.signature block is added (K9-S009): only a signing ceremony can give a real value.
  • coordination.k9 and session/custom-checks.k9 become coordination.k9.ncl and session/custom-checks.k9.ncl. The content is the file of the current estate template (rsr-template-repo), verbatim: the same data as a Nickel component with a pedigree.
  • methodology-guard.k9.ncl: the K9! line and the pedigree block are added, as in the template. The copyright placeholders are filled with the string that 30 other files of this repository use.
  • container/stapeln/deploy.k9.ncl becomes deploy.k9.ncl.in, as in the template. It has unfilled placeholders (service name, registry, port). This repository has no service, so they are not filled.

Descriptile location

  • git mv .machine_readable/6a2 .machine_readable/descriptiles. 9 of the 12 files are pure renames. The other 3 change only comment or title lines that name a file or the directory.
  • CLADE, ECOSYSTEM, AGENTIC, STATE and ANCHOR have the same content hash before and after.
  • Each reference to the old path is updated: the CI policy in openssf-compliance.yml, scripts/validate-template.sh, .pre-commit-config.yaml, both Justfiles, the Mustfile clauses, the arrival-pack and coaptation scripts, and the documents (AFFIRMATION.adoc included, with permission of the owner).

Not in this pull request

  • No .a2ml file is converted to a deed. The estate canon retires A2ML, but it forbids a hand conversion in bulk, and the tools of this repository read the .a2ml files. The move is the interim layout of the canon.
  • SonarQube stays red. The job log shows an empty SONAR_TOKEN. The owner must set the secret or remove the job.
  • The callers of the standards reusable workflows (secret-scanner.yml, governance.yml, hypatia-scan.yml, rust-ci.yml, mirror.yml, scorecard.yml) do not start. They need a new pin, which the estate applier in standards makes.
  • dependabot-automerge.yml: Hypatia reports (high, not blocking) that the workflow writes without contents: write. This is a permission decision of the owner.
  • STATE.a2ml keeps its line about issue 18. The CLAUDE.md arrival-pack region and the coaptation receipt are not regenerated (no nickel in the session). Both were stale on main before this work.

RSR Quality Checklist

Required

  • Tests pass (just test or equivalent). just is not available in the session. Run in the session: validate-k9.sh (17 files, 0 errors), validate-a2ml.sh (103 files, 0 errors), validate-template.sh, check-root-shape.sh, scan-dangerous.sh, check-no-md-in-docs.sh, check-proof-status.sh: each one passes.
  • Code is formatted. Not applicable.
  • Linter is clean. lint-workflows passes in CI.
  • No banned language patterns
  • No unsafe blocks without // SAFETY: comments (none exist)
  • No banned functions
  • SPDX license headers present on all new/modified source files
  • No secrets, credentials, or .env files included

As Applicable

  • .machine_readable/descriptiles/STATE.a2ml updated. Not done on purpose (see above).
  • .machine_readable/descriptiles/ECOSYSTEM.a2ml updated. Not applicable.
  • .machine_readable/descriptiles/META.a2ml updated. Not applicable.
  • Documentation updated for user-facing changes
  • TOPOLOGY.md updated. Not applicable.
  • CHANGELOG or release notes updated. Not done: the change is to CI and repository metadata.
  • New dependencies reviewed for license compatibility. Not applicable.
  • ABI/FFI changes validated. Not applicable.

Testing

  • The 11 K9 errors were reproduced locally before the change. After the change the validator reports 0 errors and 0 warnings.
  • validate-template.sh gives the same output on main and on this branch.
  • The arrival-pack reader and the coaptation fact reader run at the new path. The 2 Mustfile clauses for the directory pass.
  • Hypatia was not run locally. In CI at 5461960, Hypatia neurosymbolic scan, Validate K9 contracts and lint-workflows pass.

Screenshots

Not applicable.

🤖 Generated with Claude Code

https://claude.ai/code/session_0136P7ZmiFSCoB3UR9Kk56rK

The workflow linter (`workflow-linter.yml`, step "Check SPDX Headers")
requires `# SPDX-License-Identifier:` on line 1. In all 30 workflow files
the comment of `gh actions-lock` was on line 1 and the SPDX line was on
line 2, so the job `lint-workflows` failed on `main` each time a workflow
changed.

This commit exchanges line 1 and line 2 in each file. No other line
changes. The lint steps "Check SPDX Headers", "Check Permissions
Declaration", the SHA-pin check of reusable calls and "Check for Duplicate
Workflows" pass in a local run. The step `gh actions-lock --verify-local`
was not run locally.

Known risk: `gh actions-lock` wrote its comment on line 1 before. If it
does this again, the linter rule and the tool disagree again.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7ZmiFSCoB3UR9Kk56rK
`Validate K9 contracts` (dogfood gate) failed on `main` with 11 errors in
8 files. `.githooks/validate-k9.sh` now reports 17 files, 0 errors and
0 warnings. The validator did not change.

Contractiles (bust, intend, must, trust):
- Add `signature_required = true` to `pedigree.security`. The K9 contract
  specification requires it at the leash 'Hunt (K9-S008). The files had
  the field in other sections only, where the validator does not look.
- No `pedigree.signature` block is added (K9-S009). Only a signing
  ceremony can give a real value.

Template leftovers, brought to the form of the current estate template
(hyperpolymath/rsr-template-repo):
- `coordination.k9` -> `coordination.k9.ncl` and
  `session/custom-checks.k9` -> `session/custom-checks.k9.ncl`: the same
  data as a Nickel K9 component with a pedigree (leash 'Kennel). The
  content is the template file, verbatim.
- `.machine_readable/self-validating/methodology-guard.k9.ncl`: add the
  `K9!` line and the pedigree block (leash 'Yard), and fill the
  copyright placeholders with the string that the other files of this
  repository use.
- `container/stapeln/deploy.k9.ncl` -> `deploy.k9.ncl.in`: the file has
  unfilled placeholders (service name, registry, port), so it is a
  template input and not a component. This repository has no service,
  so the placeholders are not filled.

References to the 3 renamed files are updated in `root-allow.txt`,
`session/README.adoc`, `container/README.adoc`,
`container/0.1-AI-MANIFEST.a2ml`, `docs/STATE-VISUALIZER.adoc` and one
comment block of `PLAYBOOK.a2ml`. Dated audit reports keep the old names.

Local gates: validate-k9 PASS, check-root-shape PASS, scan-dangerous PASS,
check-no-md-in-docs PASS.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7ZmiFSCoB3UR9Kk56rK
…le/descriptiles

The Hypatia scan failed on `main` with 6 critical findings ("Descriptile
in retired location -- must be in .machine_readable/descriptiles/") and
3 high findings ("CI policy requires a retired descriptile path").

This commit moves the directory with `git mv` and updates each reference
to the old path. No descriptile changes its facts:

- 9 of the 12 moved files are pure renames. The other 3 change only
  comment or title lines that name a file or the directory
  (`0-AI-MANIFEST.a2ml`, `PLAYBOOK.a2ml`, `README.adoc`).
- CLADE, ECOSYSTEM, AGENTIC, STATE and ANCHOR have the same content hash
  before and after the move.
- The CI policy in `openssf-compliance.yml`, `scripts/validate-template.sh`,
  `.pre-commit-config.yaml`, both Justfiles, the Mustfile clauses, the
  arrival-pack and coaptation scripts, and the documents (AFFIRMATION.adoc
  included) now name the new path.

Not changed, on purpose:

- `STATE.a2ml` keeps its line about issue 18. The directory layout is now
  the descriptiles layout, but the validation against the contractiles
  that issue 18 tracks is not done.
- The arrival-pack region of `CLAUDE.md` and the coaptation receipt are
  not regenerated (`nickel` is not available in this session). Both were
  stale on `main` before this work: `CLAUDE.md` records STATE@5fc823be2cfa
  and the file has the hash e6db74eaa45e, and the receipt names
  `rsr-template-repo`.
- No `.a2ml` file is converted to a deed. The estate canon retires A2ML,
  but it forbids a hand conversion in bulk, and the tools of this
  repository read the `.a2ml` files.

Checked locally: the arrival-pack reader and the coaptation fact reader
run at the new path; the two Mustfile clauses for the directory pass;
validate-a2ml (103 files, 0 errors), validate-k9, validate-template,
check-root-shape, scan-dangerous, check-no-md-in-docs and
check-proof-status pass. Hypatia was not run locally.

Refs #18

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

coderabbitai Bot commented Nov 10, 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 1 minute.

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

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: ec2cfe9e-6c5d-4cf3-91fc-92fce8090309
Commits

Reviewing files that changed from the base of the PR and between 04a8b6e and 5461960.

Files ignored due to path filters: 1

  • .github/workflows/actions.lock is excluded by !**/*.lock
Files selected for processing: 91

  • .github/GOVERNANCE.md
  • .github/pull_request_template.md
  • .github/workflows/boj-build.yml
  • .github/workflows/codeql.yml
  • .github/workflows/container-build.yml
  • .github/workflows/dependabot-automerge.yml
  • .github/workflows/dogfood-gate.yml
  • .github/workflows/e2e.yml
  • .github/workflows/estate-rules.yml
  • .github/workflows/governance.yml
  • .github/workflows/guix-policy.yml
  • .github/workflows/hypatia-scan.yml
  • .github/workflows/instant-sync.yml
  • .github/workflows/label-triage.yml
  • .github/workflows/labels.yml
  • .github/workflows/mirror.yml
  • .github/workflows/openssf-compliance.yml
  • .github/workflows/pages.yml
  • .github/workflows/proofs.yml
  • .github/workflows/push-email-notify.yml
  • .github/workflows/quality.yml
  • .github/workflows/release.yml
  • .github/workflows/rhodibot.yml
  • .github/workflows/runtime-policy.yml
  • .github/workflows/rust-ci.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/secret-scanner.yml
  • .github/workflows/security-policy.yml
  • .github/workflows/sonarqube.yml
  • .github/workflows/static-analysis-gate.yml
  • .github/workflows/wellknown-enforcement.yml
  • .github/workflows/workflow-linter.yml
  • .machine_readable/0.1-AI-MANIFEST.a2ml
  • .machine_readable/ai/.clinerules
  • .machine_readable/ai/.windsurfrules
  • .machine_readable/ai/AI.a2ml
  • .machine_readable/ai/README.adoc
  • .machine_readable/arrival-pack/claude-md.k9.ncl
  • .machine_readable/arrival-pack/extract.sh
  • .machine_readable/arrival-pack/generate.sh
  • .machine_readable/arrival-pack/verify.sh
  • .machine_readable/coaptation/coapt.k9.ncl
  • .machine_readable/coaptation/coapt.sh
  • .machine_readable/coaptation/extract-facts.sh
  • .machine_readable/coaptation/verify.sh
  • .machine_readable/coaptation/witness-map.ncl
  • .machine_readable/contractiles/Justfile
  • .machine_readable/contractiles/adjust/adjust.k9.ncl
  • .machine_readable/contractiles/bust/bust.k9.ncl
  • .machine_readable/contractiles/dust/dust.k9.ncl
  • .machine_readable/contractiles/intend/intend.k9.ncl
  • .machine_readable/contractiles/must/Mustfile.a2ml
  • .machine_readable/contractiles/must/must.k9.ncl
  • .machine_readable/contractiles/trust/trust.k9.ncl
  • .machine_readable/descriptiles/0-AI-MANIFEST.a2ml
  • .machine_readable/descriptiles/AGENTIC.a2ml
  • .machine_readable/descriptiles/CLADE.a2ml
  • .machine_readable/descriptiles/ECOSYSTEM.a2ml
  • .machine_readable/descriptiles/META.a2ml
  • .machine_readable/descriptiles/NEUROSYM.a2ml
  • .machine_readable/descriptiles/PLAYBOOK.a2ml
  • .machine_readable/descriptiles/README.adoc
  • .machine_readable/descriptiles/STATE.a2ml
  • .machine_readable/descriptiles/anchors/0-AI-MANIFEST.a2ml
  • .machine_readable/descriptiles/anchors/ANCHOR.a2ml
  • .machine_readable/descriptiles/anchors/README.adoc
  • .machine_readable/policies/MAINTENANCE-AXES.a2ml
  • .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml
  • .machine_readable/root-allow.txt
  • .machine_readable/self-validating/methodology-guard.k9.ncl
  • .pre-commit-config.yaml
  • AFFIRMATION.adoc
  • EXPLAINME.adoc
  • Justfile
  • container/0.1-AI-MANIFEST.a2ml
  • container/README.adoc
  • container/stapeln/deploy.k9.ncl.in
  • coordination.k9
  • coordination.k9.ncl
  • docs/RSR_OUTLINE.adoc
  • docs/STATE-VISUALIZER.adoc
  • docs/governance/CRG-AUDIT-TEMPLATE.adoc
  • docs/practice/AI-CONVENTIONS.adoc
  • docs/status/READINESS.adoc
  • docs/status/ROADMAP.adoc
  • machine-readable-design/canonical-directory-structure/README.adoc
  • scripts/validate-template.sh
  • session/README.adoc
  • session/custom-checks.k9
  • session/custom-checks.k9.ncl
  • tests/e2e/template_instantiation_test.sh
  • 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

@hyperpolymath
hyperpolymath marked this pull request as ready for review November 10, 2026 11:18
@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-10T11:18:20.084135Z
We couldn’t complete this review. Comment @codex review to try again.
c9312c9 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

…s.yml uses

After the SPDX repair, `lint-workflows` reached its next step and
`gh actions-lock --verify-local` failed:

    Ref changed haskell-actions/setup@v2.12.1
      workflow uses ref "v2.12.1" but lockfile pins "v2.12.0"
    Unused lockfile entry haskell-actions/setup@v2.12.0
    1 of 30 workflows failed: 1 ref-changed, 1 stale

Pull request 79 (Dependabot) changed `pages.yml` to v2.12.1 and did not
change the lock. This defect was on `main` behind the SPDX failure.

This commit changes the lock record to v2.12.1. The commit value is the
peeled commit of the tag, read with `git ls-remote`:
0f8e8c99d88aeb3fbfd523f1ef2c6f762d10d64d.

The record is written by hand, because `gh actions-lock` is not available
in this session. It has the form of the records that the tool wrote for
earlier version changes (list entry, key, `ref`, `commit`). The CI step
`gh actions-lock --verify-local` is the check.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136P7ZmiFSCoB3UR9Kk56rK
@sonarqubecloud

Copy link
Copy Markdown

Copy link
Copy Markdown
Owner Author

CI status at 5461960

The 3 checks that this pull request repairs pass: lint-workflows, Validate K9 contracts, Hypatia neurosymbolic scan.

1 check fails: SonarQube. This pull request does not cause the failure, and it cannot repair it.

  • The same job fails on the base commit 04a8b6e of main (run 202).
  • Cause: the job log shows SONAR_TOKEN: with an empty value, so the repository has no SONAR_TOKEN secret. The scanner then stops with "Not authorized or organization not found".
  • No fix exists in the repository files. The owner can set the secret (and set Automatic Analysis to off in the SonarCloud project), or remove sonarqube.yml, because the SonarCloud Code Analysis app check already analyses each pull request and passes.

Generated by Claude Code

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.

3 participants