Skip to content

docs(reports): Phase B implementation plan (OSCAL SAR + CSV, async)#639

Merged
remyluslosius merged 1 commit into
mainfrom
docs/reports-phase-b-plan
Jun 22, 2026
Merged

docs(reports): Phase B implementation plan (OSCAL SAR + CSV, async)#639
remyluslosius merged 1 commit into
mainfrom
docs/reports-phase-b-plan

Conversation

@remyluslosius

Copy link
Copy Markdown
Contributor

The next step on the reports roadmap: a concrete, decision-resolved plan for Phase B (Framework Attestation — fleet OSCAL SAR + CSV, async), mirroring how Phase A started with the #630 plan. Adds §12 to reports_design.md.

Grounded in an infra audit

Mapped what Phase B builds on (all present): the per-scan OSCAL emitter (scanresult → Kensa ExportOSCALScan, 1.0.6), the content-addressed evidence store (scan_results/scan_evidence), the fleet "latest scan per host" join (host_rule_state.last_scan_id), the audit-CSV pattern (csvSafe + truncation header), the generic job queue, and the SSE event bus. The real gaps: a fleet framework catalog, a fleet SAR assembler, the async report job, and a report.ready event.

Decisions resolved (§10)

  • OSCAL version → stay on 1.0.6 — it's what the Kensa exporter emits and the version is Kensa-controlled; align down rather than force a Kensa change for the prototype's aspirational 1.1.2.
  • Fleet OSCAL shape → single assessment-results, evidence referenced by hash (not inlined), streamed — inlining 100+ hosts × ~500 rules × 256 KiB evidence is the 1000-page problem in OSCAL form. Sharding deferred.
  • Snapshot storage → bulk content blob-stored + compressed (executive stays inline).
  • (§10.4 signing-key custody already resolved in A4a.)

Slices

  • B0 — fleet framework catalog (GET /reports/frameworks); also closes the A1 deferred framework-picker gap.
  • B1attestation kind + CSV face (one row per host×rule; reuses csvSafe).
  • B2 — fleet OSCAL SAR face (single 1.0.6 doc, hash-referenced evidence).
  • B3 — async generation + report.ready event (the in-app notification bell's first real producer) + the bounded PDF attestation.

Recommended order B0 → B1 → B2 → B3. Docs only; no code. The actual build follows once you're happy with the plan.

Adds §12 to reports_design.md: the Framework Attestation phase (the
scale-correct bulk path for auditors/GRC), grounded in a 2026-06-21
infra audit.

Resolves the §10 decisions Phase B touches:
- OSCAL version: stay on 1.0.6 (the per-scan emitter delegates to the
  Kensa library, which emits 1.0.6; the version is Kensa-controlled, so
  align down rather than force a Kensa change for the prototype's 1.1.2).
- Fleet OSCAL shape: single assessment-results, evidence REFERENCED by
  content hash (not inlined) and streamed to the blob (avoids the
  1000-page problem in OSCAL form; sharding deferred).
- Snapshot storage: bulk content blob-stored + compressed (executive
  stays inline).

Slices B0 fleet framework catalog (also closes the deferred A1 framework
picker) -> B1 attestation kind + CSV face -> B2 fleet OSCAL SAR face ->
B3 async generation + report.ready event (the in-app notification bell's
first producer). All inputs exist (scanresult OSCAL, scan_results
evidence, host_rule_state.last_scan_id join, csvSafe, queue, eventbus);
the gaps are the framework catalog, the SAR assembler, the async job,
and the report.ready event.
@github-actions github-actions Bot added documentation Improvements or additions to documentation size/M labels Jun 22, 2026
@remyluslosius remyluslosius merged commit 859f29f into main Jun 22, 2026
13 checks passed
@remyluslosius remyluslosius deleted the docs/reports-phase-b-plan branch June 22, 2026 01:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant