Skip to content

feat: findings reporters and --check - #22

Merged
SizzleUnrlsd merged 2 commits into
mainfrom
feat/reporters
Sep 3, 2026
Merged

SizzleUnrlsd merged 2 commits into
mainfrom
feat/reporters

Conversation

@SizzleUnrlsd

Copy link
Copy Markdown
Contributor

Summary

Second Phase 5 item of docs/architecture.md: normalized findings and reporters (§23 Findings, §28 Reporter API), plus the composition root that makes them reachable from the CLI.

  • Acceptance tests first (test: define reporters and --check behavior), implementation follows.
  • reporters/: a Report of findings sorted by location then rule, and three pure renderers, text, json and sarif (SARIF 2.1.0 with a single run, deduplicated rules, levels derived from severity). Reporters import only findings and source; a test enforces that they never touch the analysis pipeline.
  • engine.py: the composition root. It registers every engine analysis, provides the security model table, discovers plugins under the given roots and runs them. It is the only module that knows every layer; nothing imports it except the CLI.
  • CLI: --check FILE --plugins DIR [--format text|json|sarif]. Exit codes are now uniform: 0 clean, 1 findings reported, 2 usage or analysis error (previously analysis errors exited with 1).
  • README documents the new command.

The reference dangerous_eval plugin now runs end to end from the command line.

Not in this PR: detectors built on the taint engine and plugin-registered security models, which is the last Phase 5 item.

Closes #21

@SizzleUnrlsd SizzleUnrlsd self-assigned this Sep 3, 2026
@SizzleUnrlsd
SizzleUnrlsd merged commit 0e69eac into main Sep 3, 2026
6 checks passed
@SizzleUnrlsd
SizzleUnrlsd deleted the feat/reporters branch September 3, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Normalize findings and add CLI, JSON and SARIF reporters

1 participant