Skip to content

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

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

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>
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