You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(ci): resolve the four standing CI/CD failures at their roots (#29)
Every one of these was red on `main` on **every push**. Fixed at source,
not suppressed.
| Check | Root cause | Fix |
|---|---|---|
| 🟡 Estate rules | `flake.nix` not on the root allowlist | removed
(Guix-only ruling) |
| 🟡 OpenSSF best-practices | unfilled `{{PLACEHOLDER}}` tokens in 3
required files | filled / removed |
| 🟡 RSR self-use (dogfooding) | two `uses:` actions that **404** |
replaced with inline checks |
| Dependabot `github_actions` | same 404 actions — the updater cannot
resolve them | same fix |
## 1. `flake.nix` — the sole `estate-rules` blocker
`scripts/check-root-shape.sh` reported exactly one offender. `flake.nix`
is debris
from the 07-21 sweep and contradicts the **2026-05-18 ruling** that the
estate is
Guix-primary with the Nix fallback retired — the file even documents
itself as
*"the Nix fallback tier"*. Removed. `build/guix.scm` is untouched, so
`🔴 Gate: Guix-only package policy` is unaffected (it only checks for the
presence
of `*.scm`).
Now: `PASS: root matches allowlist (45 entries, 46 permitted)`.
If you would rather keep it, the alternative is `git mv flake.nix
build/` — say the
word and I will swap the approach.
## 2. Placeholder tokens
- **`.github/SECURITY.md`** still carried its own *"TEMPLATE
INSTRUCTIONS (delete
this block before publishing)"* header, and advertised a PGP key that
does not
exist (`{{PGP_KEY_URL}}`, `{{PGP_FINGERPRINT}}`). Both removed —
pointing users
at an unfetchable key is worse than saying plainly that there isn't one.
- **`STATE.a2ml` / `ECOSYSTEM.a2ml`** were verbatim copies of
`rsr-template-repo`'s
manifests: `project = "rsr-template-repo"`, the template's purpose, and
`phase = maintenance` / `maturity = production`. They now describe Haec
(`0.1.0`, design/experimental) and its real pipeline position
(workbench → **haec** → trope-checker).
This is the **template self-name leak** — it misdirects any tooling that
keys
off these files.
## 3. Two actions that do not exist
```
hyperpolymath/a2ml-validate-action → HTTP 404
hyperpolymath/k9-validate-action → HTTP 404
```
They failed at **"Set up job"** on every push, so they never validated
anything —
`continue-on-error: true` merely hid that they were inert. An
unresolvable action
*also* breaks Dependabot's `github_actions` updater, which is why that
job was
failing as well: **one root cause, two symptoms**.
Replaced with inline checks of the envelope contract that genuinely
exists:
- non-empty, valid UTF-8, `SPDX-License-Identifier` present;
- for K9, the magic first line — `K9!` for `.k9`, `# K9!` for `.k9.ncl`
so
`nickel typecheck` still parses the file.
**Their limits are stated in the workflow itself:** they do *not* parse
the A2ML
grammar or typecheck Nickel. That still needs the real validators. This
is a
smaller claim than the 404'd actions implied, but unlike them it
actually runs.
Also added SPDX headers to **6 `.a2ml` manifests** that had none — REUSE
compliance, and it stops the new check being vacuous.
## Verified locally
```
root-shape .................. PASS (45/46)
openssf placeholder check ... PASS
A2ML envelope check ......... PASS (119 manifests)
K9 envelope check ........... PASS (10 contracts)
workflow YAML ............... ALL OK (every file has ≥1 live job)
```
## Deliberately not changed
`CLADE.a2ml` still declares `canonical-name = "rsr-template-repo"` with
the
template's registry UUID (`a5ea1382-…`), clade prefix `rm`, and forge
URLs pointing
at the template. Those are assigned by `gv-clade-index`; inventing
replacements
would corrupt that registry, so Haec needs a **real clade assignment**.
Flagging
rather than guessing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
We take security seriously. We appreciate your efforts to responsibly disclose vulnerabilities and will make every effort to acknowledge your contributions.
26
8
27
9
## Table of Contents
@@ -56,26 +38,16 @@ This method ensures:
56
38
- Coordinated disclosure tooling
57
39
- Automatic credit when the advisory is published
58
40
59
-
### Alternative: Encrypted Email
41
+
### Alternative: Email
60
42
61
43
If you cannot use GitHub Security Advisories, you may email us directly:
62
44
63
45
|||
64
46
|---|---|
65
47
|**Email**|j.d.a.jewell@open.ac.uk|
66
-
|**PGP Key**|[Download Public Key]({{PGP_KEY_URL}})|
Copy file name to clipboardExpand all lines: .machine_readable/6a2/ECOSYSTEM.a2ml
+9-11Lines changed: 9 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -1,23 +1,21 @@
1
1
# SPDX-License-Identifier: MPL-2.0
2
-
# ECOSYSTEM.a2ml — Ecosystem position (META-TEMPLATE)
2
+
# ECOSYSTEM.a2ml — Ecosystem position for Haec.
3
3
#
4
-
# This is the ECOSYSTEM file for rsr-template-repo itself. It records the
5
-
# TEMPLATE's own position in the estate. When consumed by a new project,
6
-
# replace these fields with the target project's ecosystem position and
7
-
# related projects (see the NOTE FOR CONSUMERS at the bottom).
4
+
# Instantiated from the rsr-template-repo meta-template; the fields below
5
+
# describe Haec's own position in the estate.
8
6
9
7
[metadata]
10
-
project = "rsr-template-repo"
8
+
project = "haec"
11
9
ecosystem = "hyperpolymath"
12
10
13
11
[position]
14
-
type = "repository-template"
15
-
purpose = "Canonical RSR-compliant repository template: scaffolding (CI/CD, AI manifests, ABI/FFI standards, container ecosystem, governance) that new hyperpolymath projects are instantiated from."
12
+
type = "language"
13
+
purpose = "Writes and type-checks Haec programs and emits Trope IR. Haec is deliberately not the tropechecker (trope-checker) and not the vocabulary (trope-particularity-workbench)."
notes = "rsr-template-repo turns the RSR standard into runnable scaffolding. New repos are created from it via `just init`, which substitutes the {{PLACEHOLDER}} tokens."
notes = "Haec produces a record of graded effects; the checker consumes that IR and returns a verdict against each consumer's declared use-model. The checker never executes a Haec program, so Rice's theorem is no obstacle: an unbounded lossy loop simply gets an honest top grade."
Copy file name to clipboardExpand all lines: .machine_readable/6a2/STATE.a2ml
+14-14Lines changed: 14 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -1,26 +1,26 @@
1
1
# SPDX-License-Identifier: MPL-2.0
2
2
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3
3
#
4
-
# STATE.a2ml — Project state checkpoint (META-TEMPLATE)
4
+
# STATE.a2ml — Project state checkpoint for Haec.
5
5
#
6
-
# This is the STATE file for rsr-template-repo itself.
7
-
# When consumed by a new project, replace {{PLACEHOLDER}} tokens
8
-
# and customize sections below for the target project.
6
+
# Instantiated from the rsr-template-repo meta-template. Identity and
7
+
# project-context below describe Haec; sections further down are still
8
+
# inherited from the template and need review (see NOTE, bottom).
9
9
10
10
[metadata]
11
-
project = "rsr-template-repo"
12
-
version = "0.2.0"
11
+
project = "haec"
12
+
version = "0.1.0"
13
13
last-updated = "2026-02-28"
14
14
status = "active" # active | paused | archived
15
15
16
16
[project-context]
17
-
name = "rsr-template-repo"
18
-
purpose = "Canonical RSR-compliant repository template providing scaffolding for all hyperpolymath projects — including CI/CD, AI manifests, ABI/FFI standards, container ecosystem, and governance infrastructure."
19
-
completion-percentage = 95
17
+
name = "Haec"
18
+
purpose = "A Turing-complete language whose type discipline is trope-particularity: every operation over a property-instance carries a loss-shape grade, emitted as Trope IR for a separate, language-independent tropechecker to verdict."
19
+
completion-percentage = 10 # rough: design stage, see README status '0.1 (design)'
0 commit comments