Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <expr>` 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)

Expand Down
28 changes: 20 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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:<repo>:<file>:<line>:<category>`).
- **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 <expr>` 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
Expand All @@ -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
Expand Down