Skip to content

ci: make the four required status checks reportable on every PR - #645

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/admiring-mayer-tfaeht
Jun 21, 2026
Merged

ci: make the four required status checks reportable on every PR#645
hyperpolymath merged 2 commits into
mainfrom
claude/admiring-mayer-tfaeht

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Problem

The merge box shows four required checks stuck at "Expected — Waiting for status to be reported". This push confirmed it server-side:

- 4 of 4 required status checks are expected.

"Expected" is not a failure — it means a required context name was never reported on the head commit. Each of the four is produced by a different mechanism, and each can independently fail to report (proven against live PRs: affinescript #626, hypatia #517, gitbot-fleet #307):

Required context Producer Why it can sit "Expected"
analyze (actions, none) codeql.yml job analyze pull_request: was gated to branches:[main,master] → no run on other bases → check never created
hypatia / Hypatia Neurosymbolic Analysis hypatia-scan.yml reusable caller hypatia same branch gate
Hypatia Hypatia GitHub App check external; rides on the scan — absent on PRs where the scan didn't run (e.g. gitbot-fleet #307)
governance / Validate Hypatia baseline the standards governance reusable (job governance / "Validate Hypatia baseline") this repo migrated off that reusable to a standalone governance job (#603/#604), which emits the context governance instead — so the pinned name is orphaned and can never report

Root cause (one line): branch protection pins context strings that this repo only conditionally emits — a renamed job, branch-filtered workflows, and an external app — and GitHub renders any required-but-unproduced context as a permanent "Expected", indistinguishable from a hang.

What this PR changes (repo-side fix)

  1. codeql.yml — drop pull_request: branches:[main,master]. The required analyze (actions, none) job now runs on PRs against every base. (push: unchanged.)
  2. hypatia-scan.yml — same de-gate, so hypatia / Hypatia Neurosymbolic Analysis runs on every PR base (and the Hypatia app check rides along).
  3. governance-baseline.yml + governance-baseline-impl.yml (new) — a local reusable whose caller job id governance + reusable job Validate Hypatia baseline re-emit the exact pinned context governance / Validate Hypatia baseline, on every PR. It is:

Residuals that need branch-protection admin (cannot be done from repo files)

Verification

This PR's own run should now report all four contexts instead of leaving them "Expected"; governance / Validate Hypatia baseline is self-demonstrating (the new workflow runs on this PR). I'll confirm from the check-runs once they land.

Estate note

codeql.yml / hypatia-scan.yml carry the identical branches:[main,master] PR gate in hypatia, gitbot-fleet, and .git-private-farm; the same de-gate applies there. The governance divergence is affinescript-only — the other three still call the reusable and emit governance / Validate Hypatia baseline natively.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UXXpaoiATzxcn3kW3eTM26


Generated by Claude Code

Four branch-protection-required checks sit permanently at "Expected —
Waiting for status to be reported" because the contexts they pin are only
conditionally produced:

- analyze (actions, none)                  codeql.yml gated to base main/master
- hypatia / Hypatia Neurosymbolic Analysis hypatia-scan.yml gated to base main/master
- Hypatia                                  GitHub App check (rides on the scan)
- governance / Validate Hypatia baseline   emitted by the standards governance
                                           reusable; this repo runs a standalone
                                           `governance` job (#603/#604) instead

This fixes the repo-side of the mismatch:

* codeql.yml / hypatia-scan.yml: drop the pull_request `branches:[main,master]`
  filter so the required jobs run on PRs against every base. A required check
  whose workflow is branch-filtered is never created, so it blocks forever.
* Add governance-baseline.yml + governance-baseline-impl.yml: a LOCAL reusable
  (no cross-repo @main coupling, no BP008 concurrency collision) whose
  `governance` / "Validate Hypatia baseline" job re-emits the pinned context
  name without disturbing the standalone governance gate. Additive: the repo
  now emits both `governance` and `governance / Validate Hypatia baseline`.

The `Hypatia` app check and any other pinned `governance / *` sub-checks remain
a branch-protection reconciliation (repoint pins to emitted names) needing
repo-admin access; documented in the PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UXXpaoiATzxcn3kW3eTM26
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 41 issues detected

Severity Count
🔴 Critical 2
🟠 High 23
🟡 Medium 16

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Action denoland/setup-deno@v2 needs attention",
    "type": "unpinned_action",
    "file": "publish-jsr.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in instant-sync.yml",
    "type": "secret_action_without_presence_gate",
    "file": "instant-sync.yml",
    "action": "peter-evans/repository-dispatch",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Shell execution -- validate input before passing to shell (1 occurrences, CWE-78)",
    "type": "js_exec_sync",
    "file": "/home/runner/work/affinescript/affinescript/packages/affinescript-cli/mod.js",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "Shell execution -- validate input before passing to shell (2 occurrences, CWE-78)",
    "type": "js_exec_sync",
    "file": "/home/runner/work/affinescript/affinescript/packages/affine-vscode/mod.js",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "Shell execution -- validate input before passing to shell (1 occurrences, CWE-78)",
    "type": "js_exec_sync",
    "file": "/home/runner/work/affinescript/affinescript/affinescript-vite/src/affine-plugin-improved.js",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "expect() in hot path (32 occurrences, CWE-754)",
    "type": "expect_in_hot_path",
    "file": "/home/runner/work/affinescript/affinescript/affinescriptiser/src/codegen/wasm_gen.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "expect() in hot path (29 occurrences, CWE-754)",
    "type": "expect_in_hot_path",
    "file": "/home/runner/work/affinescript/affinescript/affinescriptiser/src/codegen/affine_gen.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "unsafe block -- requires SAFETY comment (2 occurrences, CWE-676)",
    "type": "unsafe_block",
    "file": "/home/runner/work/affinescript/affinescript/runtime/src/panic.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "unsafe block -- requires SAFETY comment (1 occurrences, CWE-676)",
    "type": "unsafe_block",
    "file": "/home/runner/work/affinescript/affinescript/runtime/src/alloc.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  },
  {
    "reason": "unsafe block -- requires SAFETY comment (3 occurrences, CWE-676)",
    "type": "unsafe_block",
    "file": "/home/runner/work/affinescript/affinescript/runtime/src/ffi.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath marked this pull request as ready for review June 21, 2026 19:01
@hyperpolymath
hyperpolymath enabled auto-merge (squash) June 21, 2026 19:01
@hyperpolymath
hyperpolymath disabled auto-merge June 21, 2026 19:10
@hyperpolymath
hyperpolymath merged commit 8b33cab into main Jun 21, 2026
@hyperpolymath
hyperpolymath deleted the claude/admiring-mayer-tfaeht branch June 21, 2026 19:10
hyperpolymath added a commit to hyperpolymath/hypatia that referenced this pull request Jun 21, 2026
## What

Removes the `pull_request: branches:[main, master]` filter from
`codeql.yml` and `hypatia-scan.yml` so their **required** jobs —
`analyze (actions, none)` / `analyze (javascript-typescript, none)` and
`hypatia / Hypatia Neurosymbolic Analysis` — report on PRs against
**every** base. `push:` and `schedule:` triggers are unchanged.

## Why

A required status check whose workflow is branch-filtered is never
*created* on a non-matching base, so the PR sits permanently at
*"Expected — Waiting for status to be reported"* — a silent merge block
indistinguishable from a hang.

This mirrors hyperpolymath/affinescript#645, which diagnosed and fixed
the same class. No governance change is needed here: this repo still
emits `governance / Validate Hypatia baseline` natively via the
`standards` reusable (verified on a recent PR), so only the two
branch-gated workflows needed de-gating.

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

https://claude.ai/code/session_01UXXpaoiATzxcn3kW3eTM26

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

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Jun 21, 2026
## What

Documents the CI failure class diagnosed and fixed in #645 (merged), so
it doesn't have to be re-derived next time.

- **`docs/ci/required-checks.adoc`** (new) — the *"Expected — Waiting
for status to be reported"* trap: what it means (a required context
never reported ≠ a failure), the three mechanisms that cause it
(branch-filtered workflow / renamed-migrated job / external app check),
a diagnosis recipe (`get_check_runs` vs the required pins), the
guardrail rule, and the estate required-vs-emitted matrix.
- **`.machine_readable/6a2/PLAYBOOK.a2ml`** — new `[ci-required-checks]`
operational entry pointing at the doc + tracking issue.

## Why

This is the "sketch area + human/machine documentation" half of the
close-out for the required-checks work. The fix itself shipped in #645;
this preserves the *reasoning* and the *rule* (a context may be marked
Required only if it is emitted unconditionally on every PR that can
target the protected branch).

Refs #645 · #650 (pin reconciliation) · hyperpolymath/hypatia#519
(`Hypatia` app check). DOC-FORMAT-compliant (`.adoc`).

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

https://claude.ai/code/session_01UXXpaoiATzxcn3kW3eTM26

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

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit to hyperpolymath/gitbot-fleet that referenced this pull request Jun 21, 2026
## What

Removes the `pull_request: branches:[main, master]` filter from
`codeql.yml` and `hypatia-scan.yml` so their **required** jobs —
`analyze (actions, none)` / `analyze (rust, none)` and `hypatia /
Hypatia Neurosymbolic Analysis` — report on PRs against **every** base.
`push:` and `schedule:` triggers are unchanged.

## Why

A required status check whose workflow is branch-filtered is never
*created* on a non-matching base, so the PR sits permanently at
*"Expected — Waiting for status to be reported"* — a silent merge block
indistinguishable from a hang.

Observed live on this repo: PR #307 had **no** `hypatia / Hypatia
Neurosymbolic Analysis` and **no** `Hypatia` check at all. This mirrors
hyperpolymath/affinescript#645, which diagnosed and fixed the same
class. No governance change is needed here — this repo still emits
`governance / Validate Hypatia baseline` natively via the `standards`
reusable.

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

https://claude.ai/code/session_01UXXpaoiATzxcn3kW3eTM26

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

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

2 participants