Skip to content

Commit 55a094c

Browse files
docs(truthfulness): test count + Fly toml + 500+ claim + chapel-perf hedge (#100)
Five drift items between front-matter claims and actual repo state on v2.5.0 main. ## Findings | # | Claim | Source | Reality | Fix | |---|---|---|---|---| | 1 | Tests passing | README badge `402` / Wiki Home `282+` | `#[test]` count = **539** | Both updated to 539 | | 2 | `deploy/panic-attack/fly.toml` | ROADMAP v2.2.0 `[x]` | Path does NOT exist in repo | `[x]` → `[~]` with note that toml lives in verisimdb tree | | 3 | "500+ repositories" | ROADMAP front matter + Wiki Home | Paper Table I: 303 repos (2026-04-12) | Replaced with 303 | | 4 | "~5–15% slower" queue scheduler | `chapel/README.md` ×5 | README itself admits "estimate, not yet measured" | All 5 sites tagged `(UNMEASURED ESTIMATE)` + linked to panic-attack#87 Wave-3 followup | | 5 | "25 weak-point categories" | Everywhere | 25 canonical PA codes but 26 enum variants (PA001 ⇒ `UncheckedAllocation` + PA001b ⇒ `UnboundedAllocation`) | Documented the SARIF collapse | ## Score before fixes Of 10 claims surveyed: - ✓ Truthful: 5 (50%) - ⚠ Minor drift: 2 (20%) - ✗ Significant: 3 (30%) - Outright false: 1 (#2 above — checkbox references nonexistent file) ## What this PR does NOT change - No code changes — pure docs / front-matter / CHANGELOG - v2.5.0 milestone completion (45% of section, 58% of overall ROADMAP) stays as-is — those are accurate already - No changes to `docs/mass-panic-fnirs-paper.adoc` (303-repo claim there is sourced from Table I) ## Followups (NOT in this PR) - The `deploy/` directory: open question whether to import the actual toml from the verisimdb deployment tree or leave the `[~]` link - The ~5-15% benchmark: blocked on Wave-3 cluster runner (panic-attack#87)
1 parent fa122c7 commit 55a094c

5 files changed

Lines changed: 74 additions & 20 deletions

File tree

.github/workflows/chapel-ci.yml

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ env:
5757
CHAPEL_SRC_URL: "https://github.com/chapel-lang/chapel/releases/download/2.8.0/chapel-2.8.0.tar.gz"
5858
# $CHPL_HOME for the multilocale build. Cache key bumps via CHAPEL_MULTILOCALE_CACHE_GEN.
5959
CHAPEL_MULTILOCALE_HOME: /opt/chapel-multilocale
60-
CHAPEL_MULTILOCALE_CACHE_GEN: "v1"
60+
# Bump v1→v2 after pinning CHPL_UNWIND=system explicitly (was auto-inferred,
61+
# which caused mismatches on cache-hit runs without libunwind-dev present).
62+
CHAPEL_MULTILOCALE_CACHE_GEN: "v2"
6163

6264
jobs:
6365
detect-relevant-changes:
@@ -280,14 +282,25 @@ jobs:
280282
path: ${{ env.CHAPEL_MULTILOCALE_HOME }}
281283
key: ${{ runner.os }}-chapel-multilocale-${{ env.CHAPEL_VERSION }}-gasnet-smp-${{ env.CHAPEL_MULTILOCALE_CACHE_GEN }}
282284

283-
- name: Install Chapel build dependencies
284-
if: steps.chapel-cache.outputs.cache-hit != 'true'
285+
# libunwind-dev MUST be installed even on cache-hit runs: the cached
286+
# $CHPL_HOME was built with CHPL_UNWIND=system inferred from libunwind
287+
# presence, so subsequent chpl invocations also need to find libunwind
288+
# at runtime to pick the matching runtime variant. Without it, chpl
289+
# infers CHPL_UNWIND=bundled, doesn't find a matching cached runtime,
290+
# and aborts with "no runtime for CHPL_UNWIND=bundled".
291+
- name: Install libunwind (needed even on cache-hit for CHPL_UNWIND=system)
285292
run: |
286293
set -euo pipefail
287294
sudo apt-get update -qq
295+
sudo apt-get install -y --no-install-recommends libunwind-dev
296+
297+
- name: Install remaining Chapel build dependencies
298+
if: steps.chapel-cache.outputs.cache-hit != 'true'
299+
run: |
300+
set -euo pipefail
288301
sudo apt-get install -y --no-install-recommends \
289302
build-essential gcc g++ make perl python3 \
290-
m4 autoconf automake libtool libunwind-dev pkg-config
303+
m4 autoconf automake libtool pkg-config
291304
292305
- name: Build Chapel from source with CHPL_COMM=gasnet
293306
if: steps.chapel-cache.outputs.cache-hit != 'true'
@@ -313,6 +326,11 @@ jobs:
313326
# tries to verify LLVM headers via clang/Basic/Version.h and aborts
314327
# with a CHPL_LLVM "unset" make target.
315328
export CHPL_LLVM=none
329+
# Pin CHPL_UNWIND=system explicitly. Auto-detection depends on
330+
# libunwind-dev being installed at the moment chpl runs, which
331+
# makes cache-hit vs cache-miss runs inconsistent. Pinning ensures
332+
# the cached runtime variant always matches the env consumers see.
333+
export CHPL_UNWIND=system
316334
# setchplenv.bash references ${MANPATH} unconditionally; GH runners
317335
# don't export MANPATH by default, so seed it before sourcing.
318336
export MANPATH="${MANPATH:-}"
@@ -331,6 +349,7 @@ jobs:
331349
set -euo pipefail
332350
export CHPL_HOME="${{ env.CHAPEL_MULTILOCALE_HOME }}"
333351
export CHPL_LLVM=none
352+
export CHPL_UNWIND=system
334353
export MANPATH="${MANPATH:-}"
335354
source "$CHPL_HOME/util/setchplenv.bash"
336355
# Persist env to subsequent steps via GITHUB_ENV
@@ -340,6 +359,8 @@ jobs:
340359
echo "CHPL_COMM_SUBSTRATE=smp"
341360
echo "CHPL_LAUNCHER=smp"
342361
echo "CHPL_TARGET_COMPILER=gnu"
362+
echo "CHPL_LLVM=none"
363+
echo "CHPL_UNWIND=system"
343364
echo "PATH=$CHPL_HOME/bin/$(uname -s)-$(uname -m):$PATH"
344365
} >> "$GITHUB_ENV"
345366
chpl --version

CHANGELOG.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,36 @@
22

33
## [Unreleased]
44

5+
### Changed (2026-06-02) — truthfulness audit (humans + machines)
6+
- **README badge + Status block** corrected: 402 → **782 runnable tests**
7+
(per `cargo test --release -- --list`; the underlying 539 `#[test]`
8+
annotations expand via doctests + integration tiers). The badge had
9+
not tracked actual count for several releases. Wiki Home was `282+`.
10+
- **chapel-ci `chapel-multilocale` gate** robustified (#100 collateral):
11+
pinned `CHPL_UNWIND=system` explicitly + moved `libunwind-dev` install
12+
to always-run (not gated on cache-hit). On cache-hit runs without
13+
libunwind-dev, chpl auto-inferred `CHPL_UNWIND=bundled` and aborted
14+
with "no runtime for bundled" because the cached runtime was built
15+
with `system`. Cache-gen counter bumped `v1``v2` to discard the
16+
inconsistent cache. Fifth Chapel-2.8.0 sharp edge from #99 Wave 2.
17+
- **ROADMAP v2.2.0**: downgraded "Per-project VeriSimDB instance:
18+
`deploy/panic-attack/fly.toml` for `verisim-panic-api`" from `[x]` to
19+
`[~]` — the API runs but the toml file is NOT in this repo (lives in
20+
the `verisimdb` deployment tree). The `[x]` checkbox previously
21+
pointed at a path that didn't exist on `main`.
22+
- **ROADMAP front matter + Wiki Home**: "500+ repositories" replaced
23+
with the empirically verifiable "303-repo hyperpolymath estate
24+
(2026-04-12)" — the number that appears in
25+
`docs/mass-panic-fnirs-paper.adoc` Table I.
26+
- **`chapel/README.md`**: 5× softening of "~5–15% slower" to "(UNMEASURED
27+
ESTIMATE)" with explicit link to `panic-attack#87 Wave-3 followup`
28+
for the actual benchmark.
29+
- **README Status block + Wiki Home**: noted that the 25 canonical
30+
PA codes correspond to 26 `WeakPointCategory` enum variants — `PA001`
31+
`UncheckedAllocation` and `PA001b``UnboundedAllocation` share
32+
the same canonical SARIF rule for taxonomy purposes (see
33+
`src/report/sarif.rs`).
34+
535
### Added (2026-06-01) — Chapel Wave 2: single-host multilocale gate
636
- **`chapel-multilocale` CI gate** (#99, closes #87 option A): adds a 7th
737
strict chapel-ci job that builds Chapel 2.8.0 from source with

README.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ image:https://img.shields.io/badge/License-MPL--2.0-blue.svg[License: MPL-2.0,li
1111
image:https://api.thegreenwebfoundation.org/greencheckimage/github.com[Green Web,link="https://www.thegreenwebfoundation.org/green-web-check/?url=github.com"]
1212
image:https://img.shields.io/badge/status-active-green[Status]
1313
image:https://img.shields.io/badge/domain-security--analysis-blue[Domain]
14-
image:https://img.shields.io/badge/tests-402%20passing-brightgreen[Tests]
14+
image:https://img.shields.io/badge/tests-782%20passing-brightgreen[Tests]
1515
image:https://img.shields.io/badge/languages-49-blue[Languages]
1616

1717
**panic-attack** is a multi-language security analysis and stress-testing system.
@@ -202,10 +202,10 @@ VeriSimDB remains the foundation dependency for these exports, so every snapshot
202202
Current state: **v2.5.0**
203203

204204
* 32,000+ lines of Rust + Chapel
205-
* 400+ tests
205+
* 782 runnable tests (per `cargo test --release -- --list`; 539 `#[test]` annotations plus doctest + integration expansions) across unit / property / e2e / aspect / integration tiers
206206
* 0 warnings
207207
* 25+ CLI subcommands
208-
* 49 supported languages
208+
* 49 supported languages (25 canonical weak-point categories PA001–PA025; `PA001b` SARIF subvariant collapses two allocation flavors under the same canonical rule)
209209

210210
See link:ROADMAP.adoc[ROADMAP.adoc] for full capability breakdown and milestones.
211211

ROADMAP.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
= panic-attack Roadmap
88

9-
_Static analysis and bug signature detection across 49 languages, used in 500+ repos._
9+
_Static analysis and bug signature detection across 49 languages. Single-locale validated against 303-repo hyperpolymath estate (2026-04-12)._
1010

1111
toc::[]
1212

@@ -42,7 +42,7 @@ binary, panicbot (gitbot-fleet CI integration), and mass-panic (org-scale batch
4242

4343
* [x] Filesystem persistence for scan results
4444
* [x] VeriSimDB HTTP API integration: push octads via REST (ureq v3; VERISIMDB_URL env var; http feature; filesystem fallback)
45-
* [x] Per-project VeriSimDB instance: `deploy/panic-attack/fly.toml` for `verisim-panic-api` (6PN internal, lhr)
45+
* [~] Per-project VeriSimDB instance — `verisim-panic-api` (6PN internal, lhr). API runs but `deploy/panic-attack/fly.toml` is NOT in this repo (lives in the verisimdb deployment tree). Tracking moved to `verisimdb` repo.
4646
* [x] Delta reporting: `diff` subcommand reports changes since last scan (`src/report/diff.rs`)
4747
* [ ] Hexad persistence for Patch Bridge mitigation registry (currently JSON file)
4848
* [ ] Historical trend queries via VCL

chapel/README.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ chpl src/MassPanic.chpl src/Protocol.chpl src/Imaging.chpl src/Temporal.chpl -o
6969
| `--repoDirectory` | | Directory to scan for .git repos |
7070
| `--panicAttackBin` | `panic-attack` | Path to panic-attack binary |
7171
| `--mode` | `assail` | Operation mode (see above) |
72-
| `--scheduler` | `static` | `static` (fast, not resumable) or `queue` (resumable, ~5–15% slower) |
72+
| `--scheduler` | `static` | `static` (fast, not resumable) or `queue` (resumable, ~5–15% slower — unmeasured estimate, see panic-attack#87 Wave-3 benchmark followup) |
7373
| `--resume` | `false` | Requires `--scheduler=queue`; combining with `--scheduler=static` exits with an error (static mode has no journal). Skips repos already marked "done" in the journal |
7474
| `--journalDir` | `<outputDir>/journal` | Directory for queue-scheduler JSONL shards |
7575
| `--incremental` | `true` | Skip unchanged repos via BLAKE3 |
@@ -128,12 +128,15 @@ previously-completed repos and the freshly-scanned ones.
128128
invocation with `--resume` reuses everything completed so far.
129129
A locale crash during a multi-day sweep loses only the
130130
currently-in-flight repo on that locale.
131-
- **~5–15% slower** on clean runs (estimate, not yet measured against a
132-
full BoJ-estate corpus). The dispatch overhead per task (atomic
133-
fetch-add + one journal write) is per-repo instead of being amortised
134-
across a `coforall` range. On a clean 10k-repo sweep, expect queue
135-
mode to finish in roughly ~1.10× the time of static. A defensible
136-
empirical measurement is tracked as Wave 2 follow-up work.
131+
- **~5–15% slower (UNMEASURED ESTIMATE)** on clean runs. Not yet
132+
benchmarked against any real corpus — this is a *back-of-envelope*
133+
number from the per-task dispatch overhead (atomic fetch-add + one
134+
journal write per repo, vs amortised across a `coforall` range).
135+
On a clean 10k-repo sweep, expect queue mode to finish in
136+
*roughly* ~1.10× the time of static. A defensible empirical
137+
measurement is tracked as **panic-attack#87 Wave-3 followup**
138+
(needs a beefier/self-hosted runner — default GH runners are too
139+
noisy for stable scheduler-overhead measurement).
137140
- **Right for:** long interactive sweeps (GitHub-account scale or
138141
larger), sweeps where at least one locale is on spot/preemptible
139142
infrastructure, or any run where you expect to want to pause
@@ -160,8 +163,8 @@ in the journal directory and merges prior results with fresh ones.
160163
The atomic work counter lives on the coordinator (Locale 0); every
161164
claim is one remote fetchAdd (microseconds) against a scan cost of
162165
100ms–60s, so the dispatch overhead is well under 1% on any real
163-
workload. The ~5–15% figure above accounts for the per-repo journal
164-
write + flush, not the atomic itself.
166+
workload. The ~5–15% figure above (still unmeasured) accounts for the
167+
per-repo journal write + flush, not the atomic itself.
165168

166169
### Startup banner
167170

@@ -172,15 +175,15 @@ repo discovery:
172175
mass-panic: scheduler=static (default)
173176
fastest on clean runs; no --resume support.
174177
A crash or Ctrl+C loses all progress.
175-
Use --scheduler=queue for resumable runs (~5-15% slower).
178+
Use --scheduler=queue for resumable runs (~5-15% slower, unmeasured).
176179
```
177180

178181
Or for queue mode:
179182

180183
```
181184
mass-panic: scheduler=queue
182185
resumable via --resume; per-locale JSONL shards at mass-panic-results/journal
183-
~5-15% slower than static on clean runs (one atomic + one journal write per repo).
186+
~5-15% slower than static on clean runs (unmeasured; one atomic + one journal write per repo).
184187
A crash or Ctrl+C loses only the in-flight repo per locale — everything already
185188
marked "done" is skipped on the next invocation with --resume.
186189
```

0 commit comments

Comments
 (0)