You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Summary
Comprehensive documentation refresh for the 8-PR cohort that landed
earlier today (#102#104#105#106#107#108#110#111). Plus a
silently-broken CI fix: `tests/` WeakPoint construction sites had not
been updated with the new `test_context` field.
## Files updated
| File | What changes |
|---|---|
| `README.adoc` | Tests badge 782 → **897 passing**; status block
extended with v2.5.5 cohort summary + PROOF-PROGRAMME link |
| `EXPLAINME.adoc` | File-layout table extended with the four new
`src/*.rs` modules + `apply_v255_context_suppression`; PA-code count
clarified (25 canonical / 26 enum with PA001b subvariant); `src/abi/`
proof modules listed |
| `CHANGELOG.md` | New `Added (2026-06-02 PM)` section above the Changed
entry, documenting all eight PRs with per-PR scope |
| `ROADMAP.adoc` | v2.5.5 section: all four subsections flipped per
actual PR coverage (8x `[x]`, 5x `[~]`, 3x `[ ]`); each flipped item
documents the delivering PR |
| `.machine_readable/6a2/STATE.a2ml` | Metadata bumped to 2026-06-02;
new `[session-2026-06-02-pm]` section (11 detail keys);
`[next-priorities]` refreshed |
| `0-AI-MANIFEST.a2ml` | `canonical-locations` extended with PROOF-NEEDS
/ PROOF-PROGRAMME / TEST-NEEDS; new `v255-modules` + `proof-modules`
sections |
| `tests/{panll,property,report,sarif,seam_contract}_tests.rs` |
`test_context: None` added to `WeakPoint` constructions missed by #102
sed pass (only `src/` was covered); CI was silently broken on main
before this |
## Verification
- `cargo build --release`: clean
- `cargo test --release`: **897 passing / 0 failed / 4 ignored** across
lib + 10 integration test binaries
- `cargo test -- --list` count: **901 runnable**
## Note
This PR's last bullet — the `tests/` fix — is a **real CI repair**.
Without it `cargo test --release --no-run` fails on main with `E0063:
missing field test_context`. The original #102 sed pass only covered
`src/` constructions; the integration tests in `tests/` were missed. The
6 sed-added lines per affected file are mechanical.
## Refs
- ROADMAP.adoc v2.5.5
- PROOF-PROGRAMME.md (added by #104)
- PRs #102#104#105#106#107#108#110#111 — the v2.5.5/v3.0.0/PROOF
cohort being documented
-**`test_context` foundation** (#102): new `src/test_context.rs` module with cross-language test-path classification (Rust / Python / Go / JavaScript / Julia / Zig / Elixir / docs-examples). New `WeakPoint.test_context: Option<TestContext>` field (Production / TestOnly / Doc) plumbed through 137 construction sites. Content-based promotion via `use ExUnit.Case` / `unittest.TestCase` / `pytest.fixture` / `@testset` markers.
12
+
-**`comment_marker` inline suppression** (#105): new `src/comment_marker.rs` module recognising `// panic-attack: accepted [- reason]` on the same or preceding line. Cross-language comment leaders: `//` mid-line for C-family; `#` / `--` / `;` / `%` / `///` / `//!` start-of-line for Python/Haskell/Lisp/Erlang/Rust-doc/Rust-inner-doc. String-literal aware. Shebang `#!` excluded.
13
+
-**`ffi_kind` subtyping** (#106): new `src/ffi_kind.rs` module subtyping `WeakPointCategory::UnsafeFFI` (PA013) into BuildSystem / RuntimeAbi / TestMock / Unknown. `classify_by_path` distinguishes `build.zig` / `build.rs` (BuildSystem, audit-accepted by default) from `bindings/` / `ffi/` / `sys/` / `cdef.zig` (RuntimeAbi, audit-significant) from `tests/mocks/` / `tests/stubs/` (TestMock, also audit-accepted). New `is_audited_boundary(audit_text, file_path)` parses `audits/audit-ffi-unsafe.md``## Approved boundaries` markdown.
14
+
-**`jit_context` classifier** (#107): new `src/jit_context.rs` module classifying JIT frameworks — Cranelift / Llvm / Wasm / Javascript / None. Factors existing inline Cranelift detection at `analyzer.rs:1117..1129` into reusable surface. `transmute_targets_fn_ptr` made tolerant of `= unsafe { ... transmute(..) }` wrappers.
15
+
-**Phase 2 analyzer wire-up** (#110): new `apply_v255_context_suppression(&mut report)` runs after the kanren-based rule pass and (a) marker-flips `WeakPoint.suppressed = true` when `panic-attack: accepted` is on or above the line, (b) auto-suppresses `PanicPath` in TestOnly/Doc context, (c) auto-suppresses `UnsafeFFI` in BuildSystem/TestMock context. Sets `test_context` metadata on every finding with a known file path.
16
+
17
+
**v3.0.0 — Distributed Scanning (HTTP push from Chapel)**
18
+
19
+
-**`panic-attack verisim-push <hexad>` subcommand** (#108): new `Commands::VerisimPush` gated on the `http` Cargo feature. Reads a JSON hexad (typically what Chapel `takeSnapshot` just wrote), POSTs to `$VERISIMDB_URL` (default `http://localhost:8080`) via the existing `storage::push_hexad_http_with_retry`. `--fallback-dir` writes a JSON copy on HTTP failure for offline replay.
20
+
-**Chapel `takeSnapshot` overload** (#108): new 6-arg form accepting `verisimPushUrl` + `panicAttackBin` parameters. Spawns `panic-attack verisim-push --url <url> --retry <hexad>` after local hexad write. Local writes remain authoritative; push is additive. Closes the `[ ]` ROADMAP item.
-**Layer 1.0 partial** (#111): new `src/abi/Stripping.idr` Qed-closing the foundation lemmas for line-comment stripping — `stripBodyProducesStrippedShape` (every body output satisfies `IsStrippedBody`) + base cases of `stripLineCommentsIdempotent` (empty + non-slash-headed input). Open: the slash-slash inductive closure `stripIsIdentityOnStrippedBody` (recorded as the next Layer-1.0 slice in `PROOF-NEEDS.md`).
**panic-attack** is a multi-language security analysis and stress-testing system.
@@ -202,7 +202,8 @@ VeriSimDB remains the foundation dependency for these exports, so every snapshot
202
202
Current state: **v2.5.0**
203
203
204
204
* 32,000+ lines of Rust + Chapel
205
-
* 782 runnable tests (per `cargo test --release -- --list`; 539 `#[test]` annotations plus doctest + integration expansions) across unit / property / e2e / aspect / integration tiers
205
+
* 897 passing tests (per `cargo test --release`, 4 ignored; 901 runnable per `cargo test -- --list`) across unit / property / e2e / aspect / integration tiers
206
+
* v2.5.5 cohort landed 2026-06-02: context-aware FP suppression via `test_context` / `comment_marker` / `ffi_kind` / `jit_context` modules — `// panic-attack: accepted` inline markers, automatic PanicPath suppression in test-only code, build.zig/build.rs auto-accept, Cranelift/LLVM/Wasm/JS JIT detection. See `PROOF-PROGRAMME.md` for the formal soundness landscape
206
207
* 0 warnings
207
208
* 25+ CLI subcommands
208
209
* 49 supported languages (25 canonical weak-point categories PA001–PA025; `PA001b` SARIF subvariant collapses two allocation flavors under the same canonical rule)
* [~] Parse Rust/JS/Python/Julia comment syntax to exclude from unsafe detection — analyzer already strips comments at `src/assail/analyzer.rs:931` via `strip_proof_comments(without_strings, "//", Some(("/*", "*/")))`; PROOF-PROGRAMME Layer 1.0 mechanises the idempotence + position-preservation of this pass.
143
+
* [x] Add `// panic-attack: accepted` comment parser for explicit suppression (#105 + #110) — `src/comment_marker.rs` recognises markers in `//` / `#` / `--` / `;` / `%` comments; `apply_v255_context_suppression` flips `WeakPoint.suppressed = true` when a marker is on the same or preceding line. String-literal aware.
144
+
* [ ] Create comment-only weak-point category for documentation review (deferred — semantic-mismatch with the existing PA-code taxonomy; suppression-by-marker covers the immediate use case)
145
+
* [~] Improve Zig comment parsing to reduce build.zig false positives — partially addressed via [[ffi_kind]] subtyping (build.zig → `FfiKind::BuildSystem`, audit-accepted by default); residual zig comment parsing folded into Layer 1.0 follow-up
146
146
147
147
=== `test_context` — Test vs production code distinction
148
148
149
149
Test files should not be held to the same safety standards as production code,
150
150
but panic-attack currently applies uniform rules.
151
151
152
-
* [] Detect test modules (`#[cfg(test)]`, `test "..."`, `ExUnit.Case`) across languages
153
-
* [] Suppress PanicPath findings in test-only code (unwrap/expect acceptable in tests)
154
-
* [] Add test/production context to weak-point metadata
155
-
* [ ] Create test-specific suppression patterns for HTTP URLs and other test data
152
+
* [x] Detect test modules (`#[cfg(test)]`, `test "..."`, `ExUnit.Case`) across languages (#102) — `src/test_context.rs` `classify_path` covers Rust / Python / Go / JavaScript / Julia / Zig / Elixir / docs-examples paths; `content_indicates_test_scope` covers ExUnit / unittest / pytest fixture / Julia `@testset` content markers.
153
+
* [x] Suppress PanicPath findings in test-only code (#110) — `apply_v255_context_suppression` flips `WeakPoint.suppressed = true` whenever a `PanicPath` finding's `test_context` is `TestOnly` or `Doc`.
154
+
* [x] Add test/production context to weak-point metadata (#102 + #110) — new `WeakPoint.test_context: Option<TestContext>` field plumbed through 137 construction sites; the wire-up pass populates it for every finding with a known file path.
155
+
* [ ] Create test-specific suppression patterns for HTTP URLs and other test data (deferred — needs a separate test-data fixture lexer; the foundation (test_context metadata) is in place to drive it)
* [~] Distinguish `@import("std")` from `@cImport` in Zig analyzer — analyzer's existing `@cImport`-only count at `src/assail/analyzer.rs:3993` already excludes `@import("std")`; finer-grained Zig parsing is a follow-up.
162
+
* [x] Recognize build.zig as build-system context, not FFI usage (#106 + #110) — `FfiKind::classify_by_path` returns `BuildSystem` for `build.zig` / `build.rs`; `is_audit_accepted_by_default()` returns true; wire-up auto-suppresses.
163
+
* [x] Cross-reference with `audits/audit-ffi-unsafe.md` for pre-approved boundaries (#106) — `is_audited_boundary(audit_text, file_path)` parses `## Approved boundaries` and `## Pre-approved boundaries` markdown sections; both `- path` and `` - `path` `` forms supported.
* [~] Add JIT-specific unsafe suppression for transmute patterns — analyzer's existing inline check at `src/assail/analyzer.rs:1117..1129` downgrades Critical → High for `mem::transmute` to function-pointer types in a Cranelift context. JitContext now provides a unified API surface; consolidation is a code-cleanup follow-up.
173
+
* [~] Document JIT safety invariants in weak-point metadata — `JitContext::permits_fn_ptr_transmute()` exposes the structural-unsafe acceptance; explicit metadata field on `WeakPoint` is a Phase 3 follow-up.
174
+
* [ ] Create JIT category for specialized analysis (deferred — keeping `UnsafeCode` / `UnsafeTypeCoercion` with a `JitContext` sidecar is semantically cleaner than a new top-level `WeakPointCategory`)
0 commit comments