Repository navigation
docs: HMAC promote runbook and OSCAL/CAB field contract - #29
cursor[bot] wants to merge 2 commits into
Conversation
Reviewer's GuideDocumentation-only update that aligns operator, architecture, website, and release guidance with the shipped HMAC promotion and OSCAL/CAB implementations, while explicitly documenting verification limits, inert live behavior, nine-suite CI coverage, and the unresolved HMAC-without-API-key security pairing. Sequence diagram for HMAC mint and dry-run promotionsequenceDiagram
participant Operator
participant Serve as serve.py
participant Tokens as tokens.py
participant Gate as gate.py
participant Connector as DryRunConnector
Operator->>Serve: GET /api/status
Serve-->>Operator: auth and approval mode
Operator->>Serve: POST /api/preflight/run
Serve-->>Operator: bundle with integrity.sha256
Operator->>Serve: POST /api/approve/mint
Serve->>Tokens: mint_token()
Tokens-->>Serve: aegis1 token
Serve-->>Operator: token
Operator->>Serve: POST /api/preflight/promote
Serve->>Gate: evaluate()
Gate->>Tokens: verify_approval()
Tokens-->>Gate: verified approval
Gate-->>Serve: GateDecision
Serve->>Connector: push()
Connector-->>Serve: dry-run promotion record
Serve-->>Operator: promotion record
Flow diagram for OSCAL and CAB verification boundariesflowchart TD
Request[Evidence export request]
Verified[_verified_bundle]
Hash[Verify integrity.sha256]
OSCAL[to_oscal]
CAB[to_cab]
OSCALFile[OSCAL AR JSON]
CABFile[CAB one-pager JSON]
Seal[POST /api/seal/verify]
Request --> Verified
Verified --> Hash
Hash --> OSCAL
Hash --> CAB
OSCAL --> OSCALFile
CAB --> CABFile
Seal -. separate origin-authenticity path .-> Verified
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
The §7 curl path used $TOKEN on promote but never assigned it from the mint response, so a copy-paste operator path would fail G2/G3. Co-authored-by: georgy75 <georgy75@gmail.com>
Draft PR review — agent reportTwo open drafts, both Cursor-authored. No other open drafts. No gap-scan.
#28 — FIX applied → MERGEOn current #29 — CLOSEDocs-only draft on the same stale |
Why
#21 and #23 shipped HMAC approvals, API-key gating, and OSCAL/CAB exports with table-level notes. Operators still had no mint/promote curl path, ARCHITECTURE still listed 7 CI suites, and the HMAC-without-API-key pairing hole on
mainwas easy to miss.This is documentation only. Behavior is verified against
serve.py,core/promote/{tokens,gate,promote,connectors}.py,evidence/{oscal,cab}.py, and.github/workflows/test.yml.Docs added/updated
docs/DEVELOPER.md— §7 HMAC approval + promote runbook; CI suite list corrected (9,tokens_testis in CI); v1 bind + pairing table.docs/EVIDENCE.md— OSCAL/CAB field contract, filenames,intents_that_holdrule,to_oscal/to_cabdo not verify.docs/ARCHITECTURE.md— component map + §6 gate notes; new §11 exports and §12 HMAC; tech-stack CI count 9.docs/index.html— Pages honesty for HMAC pairing, inertliveconnector, OSCAL/CAB limits; quickstart liststokens_test+oscal_test.docs/GO_LIVE.md,docs/PHASES.md,README.md,CHANGELOG.md— pointers and the pairing-hole note.Codepaths covered
POST /api/approve/mint,POST /api/preflight/promote,GET /api/statuscore/promote/tokens.pyv1 (aegis1./ approver + bundle sha256 + expiry)core/promote/gate.pyG1–G5 (G1 isbundler.verify, notverify_seal)core/promote/connectors.py(dry_rundefault;liveisDisabledLiveConnector)POST /api/preflight/evidence/{oscal,cab}via_verified_bundleKnowledge gaps addressed
:8088AEGIS_APPROVE_KEYwithoutAEGIS_API_KEYis an unauthenticated mint on currentmain(do not treat draft fix: refuse HMAC mint when API auth is unset #28 as shipped)connector=liveis still inertOut of scope
Unmerged #25 (HMAC v2), #27 (PIV/SSH/Batfish), and #28 (startup refuse HMAC-without-API-key).
Summary by Sourcery
Document the current HMAC promotion and OSCAL/CAB evidence workflows, including their operational limits and known authentication pairing gap.
Enhancements:
Documentation: