diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 7201a59..693a587 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -164,16 +164,21 @@ Three self-contained modes — none requires the others: 2. **Panicbot** (gitbot-fleet/CI): Automated JSON scanning, PA001–PA025 codes, bot directives 3. **Mass-panic** (assemblyline + verisimdb + Chapel): Org-scale batch scanning with incremental BLAKE3, hexad persistence, delta reporting, notifications. Chapel (planned) for distributed multi-machine orchestration. -## Shipped Features (v2.5.0) +## Shipped Features (v2.5.0+) - **Shell completions**: bash, zsh, fish, nushell, powershell — `completions subcommand` + generated files in `completions/` - **Delta reporting**: `diff` subcommand — only reports changes since last scan (`src/report/diff.rs`) +- **Interactive TUI mode**: `ReportTui::run()` / `run_headless()` in `src/report/tui.rs` (crossterm-backed) +- **VeriSimDB hexad persistence (issue #33 S1–S3)**: + - Per-finding hexads gated by `PANIC_ATTACK_STORE_FINDING_HEXADS=1` (`src/storage/mod.rs :: build_finding_hexads`) + - `panic-attack campaign` subcommand: `register-pr` / `dismiss` / `status` / `poll` lifecycle (`src/campaign/mod.rs`) + - `panic-attack query ` S-expression DSL: heads `category`, `rule-id`, `severity`, `repo`, `file`, `pr-state`, `since`, `crosslang`, `diff`, `and`, `or`, `not` (`src/query/mod.rs`) +- **Chapel CI infrastructure**: MassPanic wiring + cross-rust contract checks + always-on aggregator gate (`.github/workflows/chapel-ci.yml`) ## Planned Features (Next Priorities) 1. **verisimdb HTTP API integration**: Push hexads via REST (awaiting API stabilisation) -2. **Interactive TUI mode**: Review findings in terminal (v2.3.0) -3. **Chapel metalayer**: Distributed `coforall` scanning across compute clusters (v3.0.0) +2. **Chapel metalayer**: Distributed `coforall` scanning across compute clusters (v3.0.0) ## v2.5.0 Detection Categories (COMPLETE — 25 categories total) diff --git a/CHANGELOG.md b/CHANGELOG.md index 472c762..4d3ee7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,25 @@ # Changelog -## [Unreleased] — 2026-05-30 - -### Added +## [Unreleased] + +### Added (2026-05-30) — issue #33 closure +- **VeriSimDB hexad persistence complete (issue #33 S1–S3)** — per-finding + hexads, campaign state lifecycle, and S-expression query DSL all shipped: + - **S1**: per-finding hexad emission gated by + `PANIC_ATTACK_STORE_FINDING_HEXADS=1` (`src/storage/mod.rs :: + build_finding_hexads`, subject format + `finding::::`). + - **S2**: `panic-attack campaign` subcommand (`register-pr`, `dismiss`, + `status`, `poll`) drives finding lifecycle with state transitions + persisted as campaign hexads. `poll` performs GitHub PR state + transitions (open → pr-filed → pr-merged / pr-closed). + - **S3**: `panic-attack query ` evaluates a small S-expression + language over the persisted hexads. Heads: `category`, `rule-id`, + `severity`, `repo`, `file`, `pr-state`, `since`, `crosslang`, `diff`, + `and`, `or`, `not`. - **Query parser: `(diff :since :category ...)` head + inline `:keyword - VALUE` kwargs on every unary head** (`src/query/mod.rs`, issue #33). The - issue body's three literal example expressions now parse verbatim: + VALUE` kwargs on every unary head** (`src/query/mod.rs`). The issue + body's three literal example expressions now parse verbatim: - `(crosslang :from FFI :to ProofDrift)` — already worked. - `(category PA001 :severity Critical :pr-state nil)` — now parses as `(and (rule-id PA001) (severity Critical) (pr-state nil))`, with @@ -18,9 +32,7 @@ positional value desugars to `(and (head positional) (kw value) ...)`. Behaviour unchanged for existing query expressions; 12 new unit tests. -## [Unreleased] — 2026-04-18 - -### Added +### Added (2026-04-18) - **User-classification registry** (`assail::UserClassification`, `load_user_classifications`, `apply_user_classifications`): panic-attack now reads an optional project-local classification file at every assail