Skip to content

Commit 794b859

Browse files
fix(ci): Security Scan called a repo name that no longer exists (#188)
## The bug `.github/workflows/security-scan.yml` called `hyperpolymath/panic-attacker/.github/workflows/scan-and-report.yml`. **That repo no longer exists.** It was renamed to `hyperpolymath/panic-attack`. GitHub's REST API transparently follows repository renames. **GitHub Actions does not** — not when resolving a reusable workflow's `uses:`. The call fails at workflow *load* time. ## Why it took so long to characterise The failure fingerprint is unusually opaque, and every diagnostic came back clean *because* of the redirect: | Probe | Result | Why it misled | |---|---|---| | `gh api repos/.../panic-attacker/contents/...?ref=<pin>` | file returned | API followed the rename | | `compare/main...<pin>` | `ahead_by: 0, behind_by: 37` | API followed the rename | | reusable's declared `permissions` | `contents: read`, matches caller | not the cause | | repo `allowed_actions` | `all` | not the cause | | `actionlint` on the caller | exit 0 | can't resolve remote `uses:` | And the run itself gives you nothing: - `conclusion: failure` — **not** `startup_failure`, so the usual caller-under-grant playbook doesn't apply - `total_count: 0` jobs, zero check-runs - `gh run view --log` → `failed to get run log: log not found` - `gh run view` (plain) → only *"This run likely failed because of a workflow file issue."* The decisive tell is in the **workflow registry**: GitHub falls back to showing the file path as the workflow `name` when it has never successfully parsed the file. ``` active [ghcr-publish] .github/workflows/ghcr-publish.yml active [Secret Scanner] .github/workflows/secret-scanner.yml active [.github/workflows/security-scan.yml] .github/workflows/security-scan.yml <-- never parsed ``` The estate split confirms it: **verisimdb** and **ambientops** point at the dead name and show the unparsed path-as-name; **echidna** points at the live name, parses fine, and runs a real job. ## The fix - `panic-attacker` → `panic-attack` - pin `2dc1393c` (2026-05-20) → `efe9982f` (2026-07-19), which adds the upstream *skip-dispatch-without-PAT* branch and oversized-payload chunking - add a `concurrency` group matching the repo's other callers ## Verification This workflow triggers on `push: [main]` + schedule + dispatch only, so a fix to it can never be seen on a PR. A **temporary `pull_request:` trigger** is included so the load fix is proven by a real run here; it is removed in a follow-up commit on this branch before merge. - `actionlint .github/workflows/security-scan.yml` → exit 0 - `reuse lint` → 773/773 compliant - `cargo test -p verisim-octad --test integration_tests` → **7 passed; 0 failed; 0 ignored** ## Known follow-on — NOT fixed here (owner action) **`VERISIMDB_PAT` is expired.** Once the reusable actually resolves, the scan will run and then fail at the cross-repo dispatch to `verisimdb-data`. Proof, from echidna's run [29687503416](https://github.com/hyperpolymath/echidna/actions/runs/29687503416) — which already reaches this point: ``` Full report 275619 bytes exceeds dispatch cap; sending summary ##[error]verisimdb-data dispatch failed with HTTP 401: { "message": "Bad credentials", ``` So expect this PR's Security Scan run to be **red at the dispatch step, with a visible log** — that is the *success* condition here: it means the workflow now loads and the scan executes. Rotating the secret is the remaining step and only the owner can do it. ## Also in this PR `rust-core/verisim-octad/tests/integration_tests.rs` carried a module doc claiming persistence tests were `#[ignore]`d. They were removed in `ee3e902`; there are no `#[ignore]`d tests anywhere in the workspace. ## Sibling repo affected `hyperpolymath/ambientops` has the identical dead-name bug (same unparsed registry entry). Not touched here. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 0b3165f commit 794b859

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

.github/workflows/security-scan.yml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,39 @@ name: Security Scan
55
on:
66
push:
77
branches: [main]
8+
# No `pull_request:` trigger by design -- this scan pushes a report to
9+
# verisimdb-data, which should happen for main, not for every PR. That does
10+
# mean a change to THIS file cannot be verified pre-merge; a temporary
11+
# `pull_request:` trigger was added on this branch to prove the fix below,
12+
# then removed. Verifying run: 29831433656 (commit 4cd3f20) -- the workflow
13+
# loaded, the scan executed, and only the dispatch step failed (HTTP 401,
14+
# expired VERISIMDB_PAT). Re-add the trigger the same way if you touch this.
815
schedule:
916
- cron: '0 0 * * 0' # Weekly on Sunday at midnight
1017
workflow_dispatch:
1118

19+
concurrency:
20+
group: ${{ github.workflow }}-${{ github.ref }}
21+
cancel-in-progress: true
22+
1223
permissions:
1324
contents: read
1425

1526
jobs:
1627
scan:
17-
uses: hyperpolymath/panic-attacker/.github/workflows/scan-and-report.yml@2dc1393c0ac982dbad98ba07f78a580d319456a5 # main 2026-05-20
28+
# `hyperpolymath/panic-attacker` NO LONGER EXISTS: the repo was renamed to
29+
# `hyperpolymath/panic-attack`. The REST API transparently follows repo
30+
# renames, so every API probe of the old name appears to succeed — but
31+
# GitHub Actions does NOT follow renames when resolving a reusable
32+
# workflow's `uses:`. The call therefore failed at workflow-LOAD time,
33+
# which is why every run since at least 2026-07-14 reported
34+
# `conclusion: failure` with zero jobs, no retrievable log, and this
35+
# workflow's registry entry stuck showing the file path instead of
36+
# "Security Scan" (GitHub never parsed the file).
37+
#
38+
# Pin refreshed at the same time: the previous pin (2dc1393c, 2026-05-20)
39+
# predates the upstream fix that skips the cross-repo dispatch when
40+
# VERISIMDB_PAT is absent and that chunks oversized payloads.
41+
uses: hyperpolymath/panic-attack/.github/workflows/scan-and-report.yml@efe9982f245e1e7af6258d55a9424b6a8ad2d9a5 # main 2026-07-19
1842
secrets:
1943
VERISIMDB_PAT: ${{ secrets.VERISIMDB_PAT }}

rust-core/verisim-octad/tests/integration_tests.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
//! Integration tests for VeriSimDB
44
//!
55
//! Tests cross-modal consistency and end-to-end workflows.
6-
//! Persistence tests are gated behind `#[ignore]` until store serialization is implemented.
6+
//!
7+
//! There are no `#[ignore]`d tests here. Disk persistence is not a property of
8+
//! the in-memory stores this file exercises; it lives in the sibling
9+
//! `Persistent*` variants (`verisim-{vector,tensor,semantic,temporal}/src/persistent.rs`)
10+
//! and is covered by unit tests there. See the note above `test_modality_isolation`.
711
812
use std::sync::Arc;
913
use verisim_document::TantivyDocumentStore;

0 commit comments

Comments
 (0)