Skip to content

ci: pin just@1.34.0 in build-gossamer-gui — Tooling Version Integrity (cf. burble#39)#270

Closed
hyperpolymath wants to merge 1 commit into
mainfrom
claude/pin-just-version-tooling-integrity
Closed

ci: pin just@1.34.0 in build-gossamer-gui — Tooling Version Integrity (cf. burble#39)#270
hyperpolymath wants to merge 1 commit into
mainfrom
claude/pin-just-version-tooling-integrity

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

What

build-gossamer-gui.yml installed tool: just unversioned via taiki-e/install-action. That action's bundled manifest can ship an old just (e.g. 1.14.0). hypatia/Justfile:10 uses import? "contractile.just" — an optional-import feature requiring just ≥ 1.19.0. An old just dies at parse time (error: Unknown start of token) before any recipe runs, silently breaking the build.

This is the exact root cause of the long-misdiagnosed dead Elixir test gate in burble#39 (fixed there by pinning just@1.34.0), here found armed in another repo by an estate-wide sweep.

Fix

Pin tool: just@1.34.0 (≥ 1.19.0, supports import?) with an explanatory comment referencing the estate Tooling Version Integrity policy.

Context

P0 of a full rollout institutionalising this lesson (policy doc in standards, must check, lint rule, canonical-template propagation). Immediate stop-the-bleeding fix for the only live armed instance found.

🤖 Generated with Claude Code

Unversioned `tool: just` resolves via taiki-e/install-action's bundled
manifest, which can ship an old just (<1.19.0). The Justfile uses
`import? "contractile.just"` (just >= 1.19.0), so an old just dies with
`error: Unknown start of token` and the build silently breaks — the
exact root cause of the dead Elixir gate in burble#39, here armed in
another repo.

Estate Tooling Version Integrity policy: never install a rhyming-family
tool unversioned.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit to hyperpolymath/standards that referenced this pull request May 17, 2026
…sson (#94)

## Why

For months a burble Elixir test gate was bolted open on the belief the
suite was failing. It never ran: CI installed an unpinned `just`
(1.14.0), the Justfile used `import?` (needs ≥1.19.0), so `just` died at
parse time. A runner-layer crash misdiagnosed as inner-layer test
failure, frozen by a `continue-on-error` on a wrong root cause. This PR
makes that class of failure structurally impossible estate-wide.

## What

- **`TOOLING-VERSION-INTEGRITY-POLICY.adoc`** — 5 rules + post-mortem:
pin family tools; declare the min-version floor in-file; gates prove
execution not exit-0; every soft-gate explained (dated suppression *or*
`by-design:`); resolve at source.
- **`tasks/tooling-integrity-lint.sh`** — R0 `just ≥ 1.19.0` floor
(blocking when `just` present — the execution-proof check an in-file
guard structurally *cannot* do, since `import?` fails at parse time), R1
unversioned family-tool install (blocking), R4 unexplained
`continue-on-error` (**advisory-first** per the estate's own gating
doctrine, `--strict` to enforce). Self-tested against
standards/burble/hypatia.
- **`contractiles/must/Mustfile`** — canonical dependency-free
`tooling-version-integrity` check; propagates to every repo adopting the
canonical `must` contract.
- **`Mustfile`** — this repo dogfoods the full lint.
- **`Justfile`** — Rule-2 floor annotation.

## Rollout context

P1+P2 of a full rollout. P0 (live armed instance) shipped:
hyperpolymath/hypatia#270. Remaining: propagate the pinned-install
snippet through canonical CI templates + estate re-adoption sweep
(tracked separately). The `contractile` generator repo is out-of-band —
`contractiles/` source edited here; regen/propagation tracked in the
sweep issue.

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

---------

Co-authored-by: hyperpolymath <hyperpolymath@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath enabled auto-merge (squash) May 17, 2026 05:26
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 13 issues detected

Severity Count
🔴 Critical 2
🟠 High 3
🟡 Medium 8

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in quality.yml",
    "type": "missing_workflow",
    "file": "quality.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in mirror.yml",
    "type": "missing_workflow",
    "file": "mirror.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in security-policy.yml",
    "type": "missing_workflow",
    "file": "security-policy.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "believe_me undermines formal verification (2 occurrences, CWE-704)",
    "type": "believe_me",
    "file": "/home/runner/work/hypatia/hypatia/src/abi/RuleEngine.idr",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  },
  {
    "reason": "Nickel file missing SPDX-License-Identifier header (1 occurrences, CWE-1104)",
    "type": "ncl_missing_spdx",
    "file": "/home/runner/work/hypatia/hypatia/configs/config.ncl",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "unsafe block -- requires SAFETY comment (22 occurrences, CWE-676)",
    "type": "unsafe_block",
    "file": "/home/runner/work/hypatia/hypatia/clients/rust/hypatia-client/src/ffi.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "as_ptr exposes raw pointer that may dangle or alias unsafely (10 occurrences, CWE-676)",
    "type": "as_ptr",
    "file": "/home/runner/work/hypatia/hypatia/clients/rust/hypatia-client/src/ffi.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "expect() in hot path (1 occurrences, CWE-754)",
    "type": "expect_in_hot_path",
    "file": "/home/runner/work/hypatia/hypatia/adapters/src/codeberg.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "expect() in hot path (1 occurrences, CWE-754)",
    "type": "expect_in_hot_path",
    "file": "/home/runner/work/hypatia/hypatia/adapters/src/radicle.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

hyperpolymath added a commit to hyperpolymath/standards that referenced this pull request May 18, 2026
…guage checks (#120)

## Root cause

The shared `governance-reusable.yml` `Language / package anti-pattern
policy` job enforces the TypeScript ban with a full exemption mechanism,
but the **ReScript / Go / Python** checks were crude `find` one-liners
with **no escape**. They ignored the estate's declared machine-readable
exemption — `.hypatia-ignore` rule `cicd_rules/banned_language_file` and
the inline `# hypatia:ignore … cicd_rules/banned_language_file` pragma —
even though the Hypatia scanner itself honours it.

Per the **Explicit-Escape Principle** (Refs standards#72): re-emergence
of a banned default despite a declared, tool-honoured escape is a
*tooling defect*, not a policy violation.

## Symptom this fixes

`hyperpolymath/hypatia#270` (a 1-line CI pin) and transitively **#271**
are `BLOCKED` because two intentionally-exempted criterion bench scripts
(`scripts/check-bench-regression.py`,
`scripts/update-bench-baselines.py` — carrying the inline pragma, listed
in `.hypatia-ignore`, documented in `.hypatia-exemptions.md`, used by
`tests.yml`) trip this shared gate. The defect is estate-wide; fixing it
here resolves every consumer of the shared bundle.

## Change

Replaces the three crude checks with a single exemption-aware step. A
file is exempt from `cicd_rules/banned_language_file` iff it is listed
in `.hypatia-ignore` for that rule **or** carries the inline pragma in
its first 8 lines.

## Verification (dry-run, `bash -eo pipefail`)

- Only-exempt files present → **PASS** (the #270/#271 case)
- A non-exempt `.py` added → **FAIL** (enforcement preserved)
- Clean repo, zero banned files → **PASS** (no `grep -v`/pipefail
false-fail; the old behaviour was preserved via `|| true`)

Refs standards#72

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 19, 2026
Folds in hypatia#270's one-line pin so this Python-eradication branch
satisfies the Security policy check (R1 unversioned family-tool).
Subsumes #270. cf. burble#39.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 19, 2026
## Why

The org Python ban is now **total, with no exceptions** (no
SaltStack-style carve-outs). This removes every Python site in hypatia
and replaces each with a faithful, verified **Rust** port.

Also unblocks the `governance / Language / package anti-pattern policy →
Check for Python (non-SaltStack)` gate that was failing **unrelated**
PRs (e.g. #270, a pure `just` version pin) as inherited baseline rot —
not per-PR defects.

## What

| Was (Python) | Now (Rust) |
|---|---|
| `scripts/check-bench-regression.py` | `scripts/bench-tools` →
`check-bench-regression` |
| `scripts/update-bench-baselines.py` | `scripts/bench-tools` →
`update-bench-baselines` |
| inline `python3`+`jsonschema` in `build-gossamer-gui.yml` |
`scripts/ci-tools` → `validate-panll-harness` (TOML → JSON-Schema Draft
2020-12) |
| inline `python3` in `ci.yml` | `scripts/ci-tools` →
`check-k9iser-paths` |

- `bench-tools` is zero-dependency (was authored on the #272 lineage;
**vendored here so this PR is self-contained** and order-independent).
- `build-gossamer-gui.yml` loses its `pip install jsonschema` step
entirely.
- Callers rewired: `tests.yml` (×2), `build-gossamer-gui.yml`, `ci.yml`,
benchmarks README.
- Exemptions **revoked** (no exceptions): `.hypatia-ignore` block,
`.hypatia-exemptions.md` rows, `.hypatia-baseline.json` entries.

## Verification

- All 4 Rust bins build clean (cargo 1.95.0).
- `check-k9iser-paths`: real `k9iser.toml` → `OK … 5 source(s), 3
constraint(s)`, exit 0.
- `validate-panll-harness`: real `panll.harness.toml` vs the **live**
panll-harness/v2 schema → `OK …`, exit 0.
- Tracked `.py` files: **2 → 0**.

## Follow-up (separate, standards-level)

The governance rule itself should stop honouring `banned_language_file`
exemptions now the ban is total — likely an estate-wide standards
change, out of scope here.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath
Copy link
Copy Markdown
Owner Author

Subsumed by #279 (merged 2026-05-19). The one-line just@1.34.0 pin in build-gossamer-gui.yml that this PR introduced was folded verbatim into #279's branch (commit ac01499) so the Python-eradication change could satisfy the Security policy R1 check. The pin is now on main via #279. Closing as completed-by-other. cf. burble#39.

auto-merge was automatically disabled May 19, 2026 16:17

Pull request was closed

@hyperpolymath
Copy link
Copy Markdown
Owner Author

Superseding (no re-open).

Verified 2026-05-19: the exact fix proposed here — pin tool: just@1.34.0 in .github/workflows/build-gossamer-gui.yml with the import?-floor rationale — is already present on origin/main at line 148, with the same rationale comment block this PR proposed. It landed via a separate commit rather than this PR.

Forward enforcement is provided by the R0 just-floor blocking gate added to governance-reusable.yml in hyperpolymath/standards#94 (tracked at hyperpolymath/standards#95), which fails CI on any unversioned/under-floor just install. Any regression would be caught at the gate, not silently parse-fail at runtime.

Closure outcome: superseded. No re-open needed. Closes the corresponding criterion on hyperpolymath/standards#95.

Refs hyperpolymath/standards#95, hyperpolymath/standards#94, burble#39.

@hyperpolymath hyperpolymath deleted the claude/pin-just-version-tooling-integrity branch May 20, 2026 21:39
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.

1 participant