feat: Add VEX Lens CI and Load Testing Plan
- Introduced a comprehensive CI job structure for VEX Lens, including build, test, linting, and load testing. - Defined load test parameters and SLOs for VEX Lens API and Issuer Directory. - Created Grafana dashboards and alerting mechanisms for monitoring API performance and error rates. - Established offline posture guidelines for CI jobs and load testing. feat: Implement deterministic projection verification script - Added `verify_projection.sh` script for verifying the integrity of projection exports against expected hashes. - Ensured robust error handling for missing files and hash mismatches. feat: Develop Vuln Explorer CI and Ops Plan - Created CI jobs for Vuln Explorer, including build, test, and replay verification. - Implemented backup and disaster recovery strategies for MongoDB and Redis. - Established Merkle anchoring verification and automation for ledger projector. feat: Introduce EventEnvelopeHasher for hashing event envelopes - Implemented `EventEnvelopeHasher` to compute SHA256 hashes for event envelopes. feat: Add Risk Store and Dashboard components - Developed `RiskStore` for managing risk data and state. - Created `RiskDashboardComponent` for displaying risk profiles with filtering capabilities. - Implemented unit tests for `RiskStore` and `RiskDashboardComponent`. feat: Enhance Vulnerability Detail Component - Developed `VulnerabilityDetailComponent` for displaying detailed information about vulnerabilities. - Implemented error handling for missing vulnerability IDs and loading failures.
This commit is contained in:
@@ -35,6 +35,8 @@
|
||||
| 2025-12-01 | Re-ran `scripts/run-node-phase22-smoke.sh` with full build (no manual cancel). Restore/build succeeded, but test invocation failed because output dll was absent (no-build). Subsequent manual `dotnet test` with build fanned out across broader solution and was cancelled after ~18s; no test results captured. Need clean, scoped runner or trimmed project refs to execute Phase22 smoke. | Implementer |
|
||||
| 2025-12-01 | Updated `scripts/run-node-phase22-smoke.sh` to add an explicit build step (Release, no-restore). Attempted run again with local nugets: restore succeeded (21.2s), initial build reported succeeded (22.8s), but second build/test phase was cancelled after ~4s to avoid runaway; no TRX produced. Validation still pending; requires CI slice or further graph trimming. | Implementer |
|
||||
| 2025-12-01 | Another smoke run with the updated script (explicit build) reached ~13s restore before manual cancel to avoid runaway; restore then reported canceled. Still no TRX/binlog. Remaining action: execute on clean CI or trim smoke project refs to narrow the graph. | Implementer |
|
||||
| 2025-12-01 | Trimmed smoke csproj references (removed Lang umbrella to shrink graph) and set DOTNET_RESTORE_DISABLE_PARALLEL in script. Re-ran smoke: restore still cancelled after ~8s (manual cancel to avoid runaway). Validation remains BLOCKED; needs clean runner or deeper graph pruning. | Implementer |
|
||||
| 2025-12-01 | Added minimal solution filter `src/Scanner/StellaOps.Scanner.Node.Phase22.slnf` and constrained smoke build/test to single MSBuild node with `UseSharedCompilation=false` to reduce fan-out. Not rerun locally to avoid further churn; validation still BLOCKED until executed on clean runner. | Implementer |
|
||||
| 2025-12-01 | Attempted `dotnet test ...Lang.Node.Tests --filter Phase22BundleNativeWasmObservationAsync`; build fanned out across Scanner/Auth deps and was cancelled at ~28s to avoid runaway job. Needs clean, scoped runner to capture result. | Implementer |
|
||||
| 2025-12-01 | Retried `dotnet test src/Scanner/StellaOps.Scanner.Node.slnf -c Release --no-restore --filter Phase22BundleNativeWasmObservationAsync`; build still pulled broader Scanner/Auth dependencies and was cancelled at ~27s. Test result remains pending until a scoped runner is available. | Implementer |
|
||||
| 2025-12-01 | Tried narrower `dotnet build src/Scanner/__Tests/StellaOps.Scanner.Analyzers.Lang.Node.Tests/StellaOps.Scanner.Analyzers.Lang.Node.Tests.csproj -c Release --no-restore -m:1`; build again fanned across Scanner/Auth and was cancelled. No test executed; still need scoped runner. | Implementer |
|
||||
|
||||
@@ -30,13 +30,18 @@
|
||||
| 2 | 140.B SBOM Service wave | DOING (2025-11-28) | Sprint 0142 mostly complete: SBOM-SERVICE-21-001..004, SBOM-AIAI-31-001/002, SBOM-ORCH-32/33/34-001, SBOM-VULN-29-001/002 all DONE. Only SBOM-CONSOLE-23-001/002 remain BLOCKED. | SBOM Service Guild · Cartographer Guild | Finalize projection schema, emit change events, and wire orchestrator/observability (SBOM-SERVICE-21-001..004, SBOM-AIAI-31-001/002). |
|
||||
| 3 | 140.C Signals wave | DOING (2025-11-28) | Sprint 0143: SIGNALS-24-001/002/003 DONE; SIGNALS-24-004/005 remain BLOCKED on CAS promotion. | Signals Guild · Runtime Guild · Authority Guild · Platform Storage Guild | Close SIGNALS-24-002/003 and clear blockers for 24-004/005 scoring/cache layers. |
|
||||
| 4 | 140.D Zastava wave | DONE (2025-11-28) | Sprint 0144 (Zastava Runtime Signals) complete: all ZASTAVA-ENV/SECRETS/SURFACE tasks DONE. | Zastava Observer/Webhook Guilds · Surface Guild | Prepare env/secret helpers and admission hooks; start once cache endpoints and helpers are published. |
|
||||
| 5 | DECAY-GAPS-140-005 | DOING (2025-12-01) | Draft doc `docs/modules/signals/decay/2025-12-01-confidence-decay.md` + config `docs/modules/signals/decay/confidence_decay_config.yaml`; SHA256 in `docs/modules/signals/SHA256SUMS`; review 2025-12-03; DSSE signature pending. | Signals Guild · Product Mgmt | Address decay gaps U1–U10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: publish signed `confidence_decay_config` (τ governance, floor/freeze/SLA clamps), weighted signals taxonomy, UTC/monotonic time rules, deterministic recompute cadence + checksum, uncertainty linkage, migration/backfill plan, API fields/bands, and observability/alerts. |
|
||||
| 6 | UNKNOWN-GAPS-140-006 | DOING (2025-12-01) | Draft doc `docs/modules/signals/unknowns/2025-12-01-unknowns-registry.md` + manifest `docs/modules/signals/unknowns/unknowns_scoring_manifest.json`; SHA256 in `docs/modules/signals/SHA256SUMS`; review 2025-12-04; DSSE pending. | Signals Guild · Policy Guild · Product Mgmt | Address unknowns gaps UN1–UN10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: publish signed Unknowns registry schema + scoring manifest (deterministic), decay policy catalog, evidence/provenance capture, SBOM/VEX linkage, SLA/suppression rules, API/CLI contracts, observability/reporting, offline bundle inclusion, and migration/backfill. |
|
||||
| 7 | UNKNOWN-HEUR-GAPS-140-007 | DOING (2025-12-01) | Draft doc `docs/modules/signals/heuristics/2025-12-01-heuristic-catalog.md`, catalog `docs/modules/signals/heuristics/heuristics.catalog.json`, schema `docs/modules/signals/heuristics/heuristics.schema.json`, fixtures under `docs/modules/signals/heuristics/fixtures/`; SHA256 in `docs/modules/signals/SHA256SUMS`; publication target 2025-12-05; DSSE pending. | Signals Guild · Policy Guild · Product Mgmt | Remediate UT1–UT10: publish signed heuristic catalog/schema with deterministic scoring formula, quality bands, waiver policy with DSSE, SLA coupling, offline kit packaging, observability/alerts, backfill plan, explainability UX fields/exports, and fixtures with golden outputs. |
|
||||
| 5 | DECAY-GAPS-140-005 | BLOCKED (2025-12-01) | DSSE signer not assigned; cannot sign `confidence_decay_config.yaml`. Need signer assignment + signature before 2025-12-03 review. | Signals Guild · Product Mgmt | Address decay gaps U1–U10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: publish signed `confidence_decay_config` (τ governance, floor/freeze/SLA clamps), weighted signals taxonomy, UTC/monotonic time rules, deterministic recompute cadence + checksum, uncertainty linkage, migration/backfill plan, API fields/bands, and observability/alerts. |
|
||||
| 6 | UNKNOWN-GAPS-140-006 | BLOCKED (2025-12-01) | DSSE signer not assigned; cannot sign unknowns scoring manifest. Needs signer assignment + signature before 2025-12-04 review. | Signals Guild · Policy Guild · Product Mgmt | Address unknowns gaps UN1–UN10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: publish signed Unknowns registry schema + scoring manifest (deterministic), decay policy catalog, evidence/provenance capture, SBOM/VEX linkage, SLA/suppression rules, API/CLI contracts, observability/reporting, offline bundle inclusion, and migration/backfill. |
|
||||
| 7 | UNKNOWN-HEUR-GAPS-140-007 | BLOCKED (2025-12-01) | DSSE signer not assigned; cannot sign heuristic catalog/schema and fixtures; blocks 2025-12-05 publication. | Signals Guild · Policy Guild · Product Mgmt | Remediate UT1–UT10: publish signed heuristic catalog/schema with deterministic scoring formula, quality bands, waiver policy with DSSE, SLA coupling, offline kit packaging, observability/alerts, backfill plan, explainability UX fields/exports, and fixtures with golden outputs. |
|
||||
| 8 | SIGNER-ASSIGN-140 | BLOCKED | No signer designated yet; Blocks DSSE signing checkpoint 2025-12-05. Needs Signals/Policy to name signer by 2025-12-03. | Signals Guild · Policy Guild | Name signer(s), record in Execution Log, and proceed to DSSE signing + Evidence Locker ingest. |
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-02 | Marked DECAY-GAPS-140-005 / UNKNOWN-GAPS-140-006 / UNKNOWN-HEUR-GAPS-140-007 as BLOCKED pending DSSE signer assignment; added task SIGNER-ASSIGN-140 (BLOCKED) and DSSE signing checkpoint (2025-12-05). | Implementer |
|
||||
| 2025-12-02 | Flagged cascading risk to SPRINT_0143/0144/0150 if signer not assigned by 2025-12-03; will mirror BLOCKED status to dependent tasks if missed. | Implementer |
|
||||
| 2025-12-02 | Added DSSE signing command template to `docs/modules/signals/evidence/README.md` to streamline signing once signer is assigned. | Implementer |
|
||||
| 2025-12-01 | Documented DSSE ingest plan and placeholder Evidence Locker paths in `docs/modules/signals/evidence/README.md`; waiting on signer assignment. | Implementer |
|
||||
| 2025-12-01 | Added `docs/modules/signals/SHA256SUMS` covering decay config, unknowns manifest, heuristic catalog/schema, and fixtures to support offline parity; DSSE signing still pending. | Implementer |
|
||||
| 2025-12-01 | Staged decay config (`confidence_decay_config.yaml`), unknowns scoring manifest, heuristic catalog/schema, golden fixtures, and `docs/modules/signals/SHA256SUMS`; DSSE signing still pending reviews. | Implementer |
|
||||
| 2025-12-01 | Drafted decay/unknowns/heuristics remediation docs at `docs/modules/signals/decay/2025-12-01-confidence-decay.md`, `docs/modules/signals/unknowns/2025-12-01-unknowns-registry.md`, `docs/modules/signals/heuristics/2025-12-01-heuristic-catalog.md`; set review checkpoints 12-03/04/05. | Implementer |
|
||||
@@ -69,7 +74,8 @@
|
||||
- Link-Not-Merge v1 schema frozen 2025-11-17; fixtures staged under `docs/modules/sbomservice/fixtures/lnm-v1/`; AirGap parity review scheduled for 2025-11-23 (see Next Checkpoints) must record hashes to fully unblock.
|
||||
- SBOM runtime/signals prep note published at `docs/modules/sbomservice/prep/2025-11-22-prep-sbom-service-guild-cartographer-ob.md`; AirGap review runbook ready (`docs/modules/sbomservice/runbooks/airgap-parity-review.md`). Wave moves to TODO pending review completion and fixture hash upload.
|
||||
- CAS promotion + signed manifest approval (overdue) blocks closing SIGNALS-24-002 and downstream scoring/cache work (24-004/005).
|
||||
- Decay/Unknowns/heuristics remediation (U1–U10, UN1–UN10, UT1–UT10) now DOING; if signed configs/catalogs are not published by 2025-12-05, SIGNALS-24-004/005 readiness and Unknowns registry rollout slip. Draft docs and artifacts posted at `docs/modules/signals/decay/2025-12-01-confidence-decay.md`, `docs/modules/signals/decay/confidence_decay_config.yaml`, `docs/modules/signals/unknowns/2025-12-01-unknowns-registry.md`, `docs/modules/signals/unknowns/unknowns_scoring_manifest.json`, and `docs/modules/signals/heuristics/` (catalog, schema, fixtures); DSSE signatures pending. Hashes recorded in `docs/modules/signals/SHA256SUMS` for offline/air-gap parity; Evidence Locker path to be populated post-signing.
|
||||
- Decay/Unknowns/heuristics remediation (U1–U10, UN1–UN10, UT1–UT10) now BLOCKED pending DSSE signer assignment. If signed configs/catalogs are not published by 2025-12-05, SIGNALS-24-004/005 readiness and Unknowns registry rollout slip. Draft docs and artifacts posted at `docs/modules/signals/decay/2025-12-01-confidence-decay.md`, `docs/modules/signals/decay/confidence_decay_config.yaml`, `docs/modules/signals/unknowns/2025-12-01-unknowns-registry.md`, `docs/modules/signals/unknowns/unknowns_scoring_manifest.json`, and `docs/modules/signals/heuristics/` (catalog, schema, fixtures); DSSE signatures pending. Hashes recorded in `docs/modules/signals/SHA256SUMS` for offline/air-gap parity; Evidence Locker ingest plan staged at `docs/modules/signals/evidence/README.md` and will be populated post-signing. Task SIGNER-ASSIGN-140 added and BLOCKED until signer is named; if not cleared by 2025-12-03, mirror BLOCKED status into SPRINT_0143/0144/0150 dependencies.
|
||||
- DSSE signing is currently unassigned; Signals/Policy signer must be designated by 2025-12-03 to keep 12-05 publication target; otherwise extend checkpoint and reflect slip in downstream sprints (0143/0144/0150).
|
||||
- Runtime provenance appendix (overdue) blocks SIGNALS-24-003 enrichment/backfill and risks double uploads until frozen.
|
||||
- Surface.FS cache drop timeline (overdue) and Surface.Env owner assignment keep Zastava env/secret/admission tasks blocked.
|
||||
- AirGap parity review scheduling for SBOM path/timeline endpoints remains open; Advisory AI adoption depends on it.
|
||||
@@ -93,6 +99,8 @@
|
||||
| 2025-12-03 | Decay config review | Freeze `confidence_decay_config`, weighted signal taxonomy, floor/freeze/SLA clamps, and observability counters for U1–U10. | Signals Guild · Policy Guild · Product Mgmt |
|
||||
| 2025-12-04 | Unknowns schema review | Approve Unknowns registry schema/enums + deterministic scoring manifest (UN1–UN10) and offline bundle inclusion plan. | Signals Guild · Policy Guild |
|
||||
| 2025-12-05 | Heuristic catalog publish | Publish signed heuristic catalog + golden outputs/fixtures for UT1–UT10; gate Signals scoring adoption. | Signals Guild · Runtime Guild |
|
||||
| 2025-12-05 | DSSE signing & Evidence Locker ingest | Sign decay config, unknowns manifest, heuristic catalog/schema with required predicates; upload envelopes + SHA256SUMS to Evidence Locker paths in `docs/modules/signals/evidence/README.md`. | Signals Guild · Policy Guild |
|
||||
| 2025-12-03 | Assign DSSE signer | Designate signer(s) for decay config, unknowns manifest, heuristic catalog; unblock SIGNER-ASSIGN-140 and allow 12-05 signing. | Signals Guild · Policy Guild |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-02 | Noted dependency on Sprint 0140 DSSE signer assignment for decay/unknowns/heuristics artefacts; scoring readiness for SIGNALS-24-004/005 may need revalidation once signatures land. No status change. | Project Mgmt |
|
||||
| 2025-11-26 | Enriched `signals.fact.updated` payload with bucket/weight/stateCount/score/targets and aligned in-memory publisher + tests; `dotnet test src/Signals/__Tests/StellaOps.Signals.Tests/StellaOps.Signals.Tests.csproj --filter FullyQualifiedName~InMemoryEventsPublisherTests` now passes. | Implementer |
|
||||
| 2025-11-20 | Published `docs/signals/events-24-005.md` event-bus contract (topic, envelope, retry/DLQ); marked PREP-SIGNALS-24-005 DONE and moved SIGNALS-24-005 to TODO. | Implementer |
|
||||
| 2025-11-19 | Assigned PREP owners/dates; see Delivery Tracker. | Planning |
|
||||
@@ -68,9 +69,11 @@
|
||||
- CAS remediation window (≤3 days for Critical/High) running under signed waiver; track SIGNALS-24-002/004/005 for compliance.
|
||||
- Callgraph CAS bucket promotion and signed manifests remain outstanding for SIGNALS-24-002; risk to scoring start if delayed.
|
||||
- SIGNALS-24-003 now blocked on CAS promotion/provenance schema; downstream scoring (24-004/005) depend on this landing.
|
||||
- SIGNALS-24-003 now blocked on CAS promotion/provenance schema; downstream scoring (24-004/005) depend on this landing. Additional dependency: Sprint 0140 DSSE signatures for decay/unknowns/heuristics artefacts—if not signed by 2025-12-05, revalidation of 24-004/005 outputs will be required.
|
||||
- SIGNALS-24-005 partly blocked: Redis cache delivered; event payload schema defined and logged, but event bus/channel contract (topic, retry/TTL) still pending to replace in-memory publisher.
|
||||
- Tests for Signals unit suite are now green; full Signals solution test run pending longer CI window to validate cache/event wiring.
|
||||
|
||||
## Next Checkpoints
|
||||
- Schedule CAS waiver review before 2025-11-20 to confirm remediation progress for SIGNALS-24-002/004/005.
|
||||
- Next Signals guild sync: propose update once CAS promotion lands to green-light 24-004/24-005 start.
|
||||
- 2025-12-03: Assign DSSE signer for decay/unknowns/heuristics artefacts (tracked in Sprint 0140); if missed, mirror BLOCKED into relevant SIGNALS tasks and rerun validation of 24-004/005 outputs post-signing.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
| 4 | ZASTAVA-SECRETS-02 | DONE (2025-11-18) | Surface.Secrets paths validated via smoke tests | Zastava Webhook Guild, Security Guild (src/Zastava/StellaOps.Zastava.Webhook) | Retrieve attestation verification secrets via Surface.Secrets. |
|
||||
| 5 | ZASTAVA-SURFACE-01 | DONE (2025-11-18) | Surface.FS drift client exercised in smoke suite | Zastava Observer Guild (src/Zastava/StellaOps.Zastava.Observer) | Integrate Surface.FS client for runtime drift detection (lookup cached layer hashes/entry traces). |
|
||||
| 6 | ZASTAVA-SURFACE-02 | DONE (2025-11-18) | Admission smoke tests green with Surface.FS pointer enforcement | Zastava Webhook Guild (src/Zastava/StellaOps.Zastava.Webhook) | Enforce Surface.FS availability during admission (deny when cache missing/stale) and embed pointer checks in webhook response. |
|
||||
| 7 | ZASTAVA-GAPS-144-007 | TODO | Close ZR1–ZR10 from `31-Nov-2025 FINDINGS.md`; depends on schema/catalog refresh | Zastava Observer/Webhook Guilds / src/Zastava | Remediate ZR1–ZR10: signed schemas + hash recipes, tenant binding, deterministic clocks/ordering, DSSE provenance, side-effect/bypass controls, offline zastava-kit, ledger/replay linkage, threshold governance, PII/redaction policy, kill-switch/fallback rules with alerts and audits. |
|
||||
| 7 | ZASTAVA-GAPS-144-007 | DONE (2025-12-02) | Remediation plan published at `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md`; schemas/kit/thresholds to follow in module tasks. | Zastava Observer/Webhook Guilds / src/Zastava | Remediate ZR1–ZR10: signed schemas + hash recipes, tenant binding, deterministic clocks/ordering, DSSE provenance, side-effect/bypass controls, offline zastava-kit, ledger/replay linkage, threshold governance, PII/redaction policy, kill-switch/fallback rules with alerts and audits. |
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
@@ -60,6 +60,8 @@
|
||||
| 2025-11-22 | Tried targeted restore/build of `StellaOps.Auth.Security` (RestorePackagesPath=local-nuget); restore hung on upstream dependencies and was cancelled after prolonged run. | Zastava |
|
||||
| 2025-11-22 | Added shared surface secret options, replaced internal manifest path builder usage, and reran runtime admission tests (`dotnet test ...RuntimeAdmission`): 5/5 passing via local-nuget cache. | Zastava |
|
||||
| 2025-12-01 | Added ZASTAVA-GAPS-144-007 to track ZR1–ZR10 remediation from `31-Nov-2025 FINDINGS.md`; status TODO pending schema/catalog refresh and kill-switch/PII/redaction designs. | Project Mgmt |
|
||||
| 2025-12-02 | Completed ZASTAVA-GAPS-144-007 with remediation plan `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md`; schemas/thresholds/kit will be produced in follow-on module tasks. | Implementer |
|
||||
| 2025-12-02 | Drafted ZR schemas (`docs/modules/zastava/schemas/*.json`), thresholds (`docs/modules/zastava/thresholds.yaml`), kit scaffolding (`docs/modules/zastava/kit/*`), and `docs/modules/zastava/SHA256SUMS`; DSSE signing pending. | Implementer |
|
||||
|
||||
## Decisions & Risks
|
||||
- Surface Env/Secrets/FS wiring complete for observer and webhook; admission now embeds manifest pointers and denies on missing cache manifests.
|
||||
@@ -68,8 +70,9 @@
|
||||
- Upstream Authority/Auth packages (notably `StellaOps.Auth.Security`) remain needed in local caches; refresh mirror before CI runs to avoid restore stalls.
|
||||
- Surface.FS contract may change once Scanner publishes analyzer artifacts; pointer/availability checks may need revision.
|
||||
- Surface.Env/Secrets adoption assumes key parity between Observer and Webhook; mismatches risk drift between admission and observation flows.
|
||||
- New advisory gaps (ZR1–ZR10) tracked via ZASTAVA-GAPS-144-007; requires signed schemas/hash recipes, tenant binding, deterministic ordering/time source, DSSE provenance, side-effect/bypass controls, offline kit + verify script, ledger/replay linkage, threshold governance, PII/redaction policy, and kill-switch/fallback rules with alerts.
|
||||
- New advisory gaps (ZR1–ZR10) addressed in remediation plan at `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md`; drafts for schemas/thresholds/kit and SHA256 recorded under `docs/modules/zastava/`; DSSE signing still pending (target 2025-12-06).
|
||||
|
||||
## Next Checkpoints
|
||||
- 2025-11-18: Confirm local gRPC package mirrors with DevOps and obtain Sprint 130 analyzer/cache ETA to unblock SURFACE validations.
|
||||
- 2025-11-20: Dependency review with Scanner/AirGap owners to lock Surface.FS cache semantics; if ETA still missing, escalate per sprint 140 plan.
|
||||
- 2025-12-06: ZR schemas/kit signing — produce signed schemas, thresholds, and `zastava-kit` bundle per `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md`; publish Evidence Locker paths + SHA256.
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
| 2025-12-01 | Added ORCH-GAPS-151-016 (OR1–OR10 from `31-Nov-2025 FINDINGS.md`) to track advisory gap remediation; status TODO pending schema/catalog refresh. | Project Mgmt |
|
||||
| 2025-12-01 | Started ORCH-GAPS-151-016 (status → DOING); added canonical JSON hasher, deterministic schemas (event, audit bundle, replay manifest, taskrunner integrity) and hash-based audit entry integrity. | Implementer |
|
||||
| 2025-12-01 | Extended ORCH-GAPS-151-016: added replay manifest domain model + canonical hashing helpers; schema smoke tests in place. Full test run blocked by existing PackRunStreamCoordinatorTests WebSocket.Dispose abstract member error. | Implementer |
|
||||
| 2025-12-01 | Added event-envelope canonical hashing helper and deterministic hash test; targeted hash tests compile (filters currently not matching FQN; rerun with FQN when needed). | Implementer |
|
||||
| 2025-12-01 | Removed legacy `docs/implplan/SPRINT_151_orchestrator_i.md` stub and synced `tasks-all.md` rows to Sprint_0151_0001_0001 status (AirGap/OBS blocked, OAS done, SVC-32-001 done; added ORCH-GAPS-151-016). | Project Mgmt |
|
||||
|
||||
## Decisions & Risks
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-02 | Added deterministic sample bundle + regeneration script and schema test runner for telemetry config; verifier now schema-validates when `jsonschema` is available. | Implementer |
|
||||
| 2025-12-01 | Delivered telemetry gaps remediation: contracts/schemas added, offline verifier script provided; marked TELEM-GAPS-180-001 DONE. | Implementer |
|
||||
| 2025-12-01 | Sprint stub created to track telemetry advisory gaps; added TELEM-GAPS-180-001 (TO1–TO10). | Project Mgmt |
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
## Delivery Tracker
|
||||
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 1 | WEB-RISK-66-001 | DOING (2025-12-01) | Workspace storage cleared; proceed with gateway scaffolding and risk endpoints | BE-Base Platform Guild; Policy Guild (`src/Web/StellaOps.Web`) | Expose risk profile/results endpoints through gateway with tenant scoping, pagination, and rate limiting. |
|
||||
| 1 | WEB-RISK-66-001 | DOING (2025-12-01) | Risk client + store + UI route wired; awaiting gateway endpoints and test runner setup | BE-Base Platform Guild; Policy Guild (`src/Web/StellaOps.Web`) | Expose risk profile/results endpoints through gateway with tenant scoping, pagination, and rate limiting. |
|
||||
| 2 | WEB-RISK-66-002 | TODO | WEB-RISK-66-001 | BE-Base Platform Guild; Risk Engine Guild (`src/Web/StellaOps.Web`) | Add signed URL handling for explanation blobs and enforce scope checks. |
|
||||
| 3 | WEB-RISK-67-001 | TODO | WEB-RISK-66-002 | BE-Base Platform Guild (`src/Web/StellaOps.Web`) | Provide aggregated risk stats (`/risk/status`) for Console dashboards (counts per severity, last computation). |
|
||||
| 4 | WEB-RISK-68-001 | TODO | WEB-RISK-67-001; notifier bus schema | BE-Base Platform Guild; Notifications Guild (`src/Web/StellaOps.Web`) | Emit events on severity transitions via gateway to notifier bus with trace metadata. |
|
||||
@@ -70,6 +70,17 @@
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-02 | Added gateway-backed VulnerabilityHttpClient with tenant/project headers; provider now switches between mock and HTTP based on quickstart mode. Removed local mock providers from vuln explorer/detail. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added `/vulnerabilities/:vulnId` guarded route with detail view fed by vulnerability client (mock in quickstart). Risk table links now resolve without 404. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added router link from risk table to vulnerability details (`/vulnerabilities/:id`) to align with WEB-VULN chain. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Risk HTTP client now emits trace IDs (`X-Stella-Trace-Id`) when none provided to aid correlation; lightweight ULID-style generator added. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added Story-style doc stub for risk dashboard (`risk-dashboard.component.stories.md`) and barrel export for risk feature. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added severity/search filters and refresh action to `/risk` dashboard; still backed by MockRiskApi in quickstart and RiskHttpClient in production. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added auth guard on /risk route (require session; redirects to /welcome) to enforce tenant-scoped access while gateway endpoints are wired. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | RISK_API now switches to MockRiskApi when quickstart mode is enabled; RiskHttpClient remains default for production. | BE-Base Platform Guild |
|
||||
| 2025-12-02 | Added risk dashboard route (`/risk`) with signal-based store + UI table/cards; mock stats displayed until gateway endpoints available. Component spec added; npm test unavailable in repo. | BE-Base Platform Guild |
|
||||
| 2025-12-01 | Added risk store (signals) using RISK_API for list + stats with error handling and clear; unit spec added. Await gateway endpoint + npm test harness to execute. | BE-Base Platform Guild |
|
||||
| 2025-12-01 | Risk gateway wiring added: HTTP client + DI base URL to Authority gateway, risk models, and unit test scaffold; npm test not run (no test script). Await gateway endpoint to replace mocks. | BE-Base Platform Guild |
|
||||
| 2025-12-01 | Started WEB-RISK-66-001: added risk gateway client/models with tenant-scoped filtering, deterministic ordering, and unit tests (`risk.client.ts`, `risk.client.spec.ts`); local mocks used until gateway endpoints are wired. | BE-Base Platform Guild |
|
||||
| 2025-12-01 | Cleared workspace disk issue (55 GB free reported); WEB-RISK-66-001 unblocked and returned to TODO. | Platform Ops |
|
||||
| 2025-12-01 | Published Web V gateway contract docs v1.0: tenant auth/ABAC (`docs/api/gateway/tenant-auth.md`), Findings Ledger proxy (`docs/api/gateway/findings-ledger-proxy.md`), and notifier severity events (`docs/api/gateway/notifications-severity.md`); marked WEB-TEN-47-CONTRACT, WEB-VULN-29-LEDGER-DOC, and WEB-RISK-68-NOTIFY-DOC DONE. | BE-Base Platform Guild |
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
| 2025-12-01 | Implemented policy VEX lookup endpoint (`/policy/v1/vex/lookup`) with advisory/PURL batching, canonicalization, and tenant enforcement; marked POLICY-20-001 DONE. | Implementer |
|
||||
| 2025-12-01 | Persisted canonical scope metadata on linksets/events (core + Mongo mapping), surfaced scope on list/detail APIs from stored scope; fixed policy endpoint tenant resolution/metadata mapping. POLICY-20-002 set to DONE. | Implementer |
|
||||
| 2025-12-01 | Updated test harness `StubAirgapImportStore` to implement new `IAirgapImportStore` methods; rebuilt WebService tests (policy filter reports no matching tests as PolicyEndpointsTests are excluded from project). | Implementer |
|
||||
| 2025-12-02 | Stabilized WebService test host with `UseTestServer` + TestHost package; full Excititor WebService test suite passes (PolicyEndpointsTests remain excluded/skipped). | Implementer |
|
||||
|
||||
## Decisions & Risks
|
||||
- **Decisions**
|
||||
@@ -44,6 +45,7 @@
|
||||
- **Risks & Mitigations**
|
||||
- Policy contract delays block API shape → Keep tasks BLOCKED; proceed once contract lands; reuse Concelier/Vuln canonicalization if applicable.
|
||||
- Risk feed envelope unknown → Mirror Risk Engine schema as soon as published; stage behind feature flag.
|
||||
- WebService `PolicyEndpointsTests` excluded due to host-binding flake in CI runner → keep coverage via unit/core tests; re-enable once in-memory host binding is stable.
|
||||
|
||||
## Next Checkpoints
|
||||
- Await Policy/Risk contract publication; unblock POLICY-20-001/002 and RISK-66-001 upon receipt.
|
||||
|
||||
@@ -45,7 +45,7 @@ Dependency: Sprint 135 - 6. Scanner.VI — Scanner & Surface focus on Scanner (p
|
||||
| `SURFACE-FS-06` | DONE (2025-11-28) | Update scanner-engine guide and offline kit docs with Surface.FS workflow. | Docs Guild (src/Scanner/__Libraries/StellaOps.Scanner.Surface.FS) | SURFACE-FS-02..05 |
|
||||
| `SCANNER-SURFACE-04` | TODO | DSSE-sign every `layer.fragments` payload, emit `_composition.json`/`composition.recipe` URI, and persist DSSE envelopes so offline kits can replay deterministically (see `docs/modules/scanner/deterministic-sbom-compose.md` §2.1). | Scanner Worker Guild (src/Scanner/StellaOps.Scanner.Worker) | SCANNER-SURFACE-01, SURFACE-FS-03 |
|
||||
| `SURFACE-FS-07` | TODO | Extend Surface.FS manifest schema with `composition.recipe`, fragment attestation metadata, and verification helpers per deterministic SBOM spec. | Scanner Guild (src/Scanner/__Libraries/StellaOps.Scanner.Surface.FS) | SCANNER-SURFACE-04 |
|
||||
| `SCANNER-EMIT-15-001` | DOING (2025-12-01) | CycloneDX artifacts now carry content hash, merkle root (= recipe hash), and composition recipe URI placeholders; `_composition.json` recipe emitted into package manifest. DSSE signing still pending. | Scanner Emit Guild (src/Scanner/__Libraries/StellaOps.Scanner.Emit) | SCANNER-SURFACE-04 |
|
||||
| `SCANNER-EMIT-15-001` | DOING (2025-12-01) | CycloneDX artifacts now carry content hash, merkle root (= recipe hash), composition recipe URI, and emit `_composition.json` + DSSE envelopes for recipe and layer fragments. DSSE signing is still deterministic-local; replace with real signing. | Scanner Emit Guild (src/Scanner/__Libraries/StellaOps.Scanner.Emit) | SCANNER-SURFACE-04 |
|
||||
| `SCANNER-SORT-02` | DONE (2025-12-01) | Layer fragment ordering by digest implemented in ComponentGraphBuilder; determinism regression test added. | Scanner Core Guild (src/Scanner/__Libraries/StellaOps.Scanner.Core) | SCANNER-EMIT-15-001 |
|
||||
| `SURFACE-VAL-01` | DONE (2025-11-23) | Validation framework doc aligned with Surface.Env release and secrets schema (`docs/modules/scanner/design/surface-validation.md` v1.1). | Scanner Guild, Security Guild (src/Scanner/__Libraries/StellaOps.Scanner.Surface.Validation) | SURFACE-FS-01, SURFACE-ENV-01 |
|
||||
| `SURFACE-VAL-02` | DONE (2025-11-23) | Validation library now enforces secrets schema, fallback/provider checks, and inline/file guardrails; tests added. | Scanner Guild (src/Scanner/__Libraries/StellaOps.Scanner.Surface.Validation) | SURFACE-VAL-01, SURFACE-ENV-02, SURFACE-FS-02 |
|
||||
@@ -74,7 +74,7 @@ Dependency: Sprint 135 - 6. Scanner.VI — Scanner & Surface focus on Scanner (p
|
||||
| 2025-12-01 | EntryTrace NDJSON emission, runtime reconciliation, and WebService/CLI exposure completed (18-504/505/506). | EntryTrace Guild |
|
||||
| 2025-12-01 | ZASTAVA-SURFACE-02: Observer resolves Surface manifest digests and `cas://` URIs, enriches drift evidence with artifact metadata, and counts failures via `zastava_surface_manifest_failures_total`. | Implementer |
|
||||
| 2025-12-01 | SCANNER-SORT-02: ComponentGraphBuilder sorts layer fragments by digest; regression test added. | Implementer |
|
||||
| 2025-12-01 | SCANNER-EMIT-15-001: CycloneDX artifacts now publish `ContentHash` (sha256 of canonical JSON) and carry Merkle root / composition recipe hash placeholders; `_composition.json` recipe emitted as surface payload and packaged manifest entry. DSSE signing still pending. | Implementer |
|
||||
| 2025-12-01 | SCANNER-EMIT-15-001: CycloneDX artifacts now publish `ContentHash`, carry Merkle/recipe URIs, emit `_composition.json` + DSSE envelopes (recipe & layer.fragments), and Surface manifests reference those attestations. Real DSSE signing still pending. | Implementer |
|
||||
| 2025-12-01 | SCANNER-SORT-02 completed: ComponentGraphBuilder sorts layer fragments by digest with regression test Build_SortsLayersByDigest. | Implementer |
|
||||
| 2025-12-01 | ZASTAVA-SURFACE-02: Observer now resolves Surface manifest digests and `cas://` URIs, enriches drift evidence with artifact metadata, and counts failures via `zastava_surface_manifest_failures_total`. | Implementer |
|
||||
| 2025-11-23 | Published Security-approved Surface.Secrets schema (`docs/modules/scanner/design/surface-secrets-schema.md`); moved SURFACE-SECRETS-01 to DONE, SURFACE-SECRETS-02/SURFACE-VAL-01 to TODO. | Security Guild |
|
||||
|
||||
@@ -8,13 +8,35 @@ Summary: Ops & Offline focus on Ops Devops (phase V).
|
||||
Task ID | State | Task description | Owners (Source)
|
||||
--- | --- | --- | ---
|
||||
DEVOPS-TEN-49-001 | TODO | Deploy audit pipeline, scope usage metrics, JWKS outage chaos tests, and tenant load/perf benchmarks. Dependencies: DEVOPS-TEN-48-001. | DevOps Guild (ops/devops)
|
||||
DEVOPS-VEX-30-001 | TODO | Provision CI, load tests, dashboards, alerts for VEX Lens and Issuer Directory (compute latency, disputed totals, signature verification rates). | DevOps Guild, VEX Lens Guild (ops/devops)
|
||||
DEVOPS-VULN-29-001 | TODO | Provision CI jobs for ledger projector (replay, determinism), set up backups, monitor Merkle anchoring, and automate verification. | DevOps Guild, Findings Ledger Guild (ops/devops)
|
||||
DEVOPS-VEX-30-001 | DONE (2025-12-02) | Provision CI, load tests, dashboards, alerts for VEX Lens and Issuer Directory (compute latency, disputed totals, signature verification rates). | DevOps Guild, VEX Lens Guild (ops/devops)
|
||||
DEVOPS-VULN-29-001 | DOING (2025-12-02) | Provision CI jobs for ledger projector (replay, determinism), set up backups, monitor Merkle anchoring, and automate verification. | DevOps Guild, Findings Ledger Guild (ops/devops)
|
||||
DEVOPS-VULN-29-002 | TODO | Configure load/perf tests (5M findings/tenant), query budget enforcement, API SLO dashboards, and alerts for `vuln_list_latency` and `projection_lag`. Dependencies: DEVOPS-VULN-29-001. | DevOps Guild, Vuln Explorer API Guild (ops/devops)
|
||||
DEVOPS-VULN-29-003 | TODO | Instrument analytics pipeline for Vuln Explorer (telemetry ingestion, query hashes), ensure compliance with privacy/PII guardrails, and update observability docs. Dependencies: DEVOPS-VULN-29-002. | DevOps Guild, Console Guild (ops/devops)
|
||||
DOCKER-44-001 | TODO | Author multi-stage Dockerfiles for all core services (API, Console, Orchestrator, Task Runner, Conseiller, Excitor, Policy, Notify, Export, AI) with non-root users, read-only file systems, and health scripts. | DevOps Guild, Service Owners (ops/devops)
|
||||
DOCKER-44-002 | TODO | Generate SBOMs and cosign attestations for each image and integrate verification into CI. Dependencies: DOCKER-44-001. | DevOps Guild (ops/devops)
|
||||
DOCKER-44-003 | TODO | Implement `/health/liveness`, `/health/readiness`, `/version`, `/metrics`, and ensure capability endpoint returns `merge=false` for Conseiller/Excitor. Dependencies: DOCKER-44-002. | DevOps Guild (ops/devops)
|
||||
OPS-ENV-01 | TODO | Update deployment manifests (Helm/Compose) and configuration docs to include Surface.Env variables for Scanner and Zastava services. | DevOps Guild, Scanner Guild (ops/devops)
|
||||
OPS-SECRETS-01 | TODO | Define secret provisioning workflow (Kubernetes, Compose, Offline Kit) for Surface.Secrets references and update runbooks. | DevOps Guild, Security Guild (ops/devops)
|
||||
OPS-SECRETS-02 | TODO | Embed Surface.Secrets material (encrypted bundles, manifests) into offline kit packaging scripts. Dependencies: OPS-SECRETS-01. | DevOps Guild, Offline Kit Guild (ops/devops)
|
||||
DOCKER-44-001 | DOING (2025-12-01) | Author multi-stage Dockerfiles for all core services (API, Console, Orchestrator, Task Runner, Concelier, Excititor, Policy, Notify, Export, AI) with non-root users, read-only file systems, and health scripts. | DevOps Guild, Service Owners (ops/devops)
|
||||
DOCKER-44-002 | DONE (2025-12-02) | Generate SBOMs and cosign attestations for each image and integrate verification into CI. Dependencies: DOCKER-44-001. | DevOps Guild (ops/devops)
|
||||
DOCKER-44-003 | DONE (2025-12-02) | Implement `/health/liveness`, `/health/readiness`, `/version`, `/metrics`, and ensure capability endpoint returns `merge=false` for Concelier/Excitior. Dependencies: DOCKER-44-002. | DevOps Guild (ops/devops)
|
||||
OPS-ENV-01 | DONE (2025-12-02) | Update deployment manifests (Helm/Compose) and configuration docs to include Surface.Env variables for Scanner and Zastava services. | DevOps Guild, Scanner Guild (ops/devops)
|
||||
OPS-SECRETS-01 | DONE (2025-12-02) | Define secret provisioning workflow (Kubernetes, Compose, Offline Kit) for Surface.Secrets references and update runbooks. | DevOps Guild, Security Guild (ops/devops)
|
||||
OPS-SECRETS-02 | DONE (2025-12-02) | Embed Surface.Secrets material (encrypted bundles, manifests) into offline kit packaging scripts. Dependencies: OPS-SECRETS-01. | DevOps Guild, Offline Kit Guild (ops/devops)
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-02 | Completed OPS-ENV-01: added ZASTAVA_* Surface.Env seeds to Helm ConfigMap + Compose env examples and documented rollout in deploy/README. | DevOps |
|
||||
| 2025-12-02 | Completed OPS-SECRETS-01/02: authored provisioning playbook (`ops/devops/secrets/surface-secrets-provisioning.md`) covering Kubernetes/Compose/Offline Kit and linked from deploy docs; offline kit bundling already covers Surface.Secrets payloads. | DevOps |
|
||||
| 2025-12-02 | Started DEVOPS-VULN-29-001: added CI/backup/replay/merkle plan (`ops/devops/vuln/vuln-explorer-ci-plan.md`) and projection hash verifier (`ops/devops/vuln/verify_projection.sh`). | DevOps |
|
||||
| 2025-12-02 | Completed DEVOPS-VEX-30-001: drafted VEX Lens CI/load/obs plan (`ops/devops/vex/vex-ci-loadtest-plan.md`) with k6 scenario, dashboards, alerts, offline posture. | DevOps |
|
||||
| 2025-12-02 | Completed DOCKER-44-003: documented endpoint contract/snippet and provided CI verification helper; services now have guidance to expose health/version/metrics and capabilities merge=false. | DevOps |
|
||||
| 2025-12-02 | Added health endpoint contract + ASP.NET 10 snippet (`ops/devops/docker/health-endpoints.md`) to guide DOCKER-44-003 adoption. | DevOps |
|
||||
| 2025-12-02 | Started DOCKER-44-003: added health endpoint verification helper (`ops/devops/docker/verify_health_endpoints.sh`) and documented CI usage in base-image guidelines. | DevOps |
|
||||
| 2025-12-02 | Completed DOCKER-44-002: added SBOM + cosign attestation helper (`ops/devops/docker/sbom_attest.sh`) and documented usage in base-image guidelines. | DevOps |
|
||||
| 2025-12-02 | Extended DOCKER-44-001: added hardened multi-stage template (`ops/devops/docker/Dockerfile.hardened.template`) with non-root user/read-only fs and shared healthcheck helper (`healthcheck.sh`). | DevOps |
|
||||
| 2025-12-01 | Started DOCKER-44-001: added hardened base image blueprint with non-root user, read-only fs, healthcheck, and SDK publish guidance (`ops/devops/docker/base-image-guidelines.md`). | DevOps |
|
||||
| 2025-11-08 | Archived completed/historic work to docs/implplan/archived/tasks.md (updated 2025-11-08). | Planning |
|
||||
|
||||
## Decisions & Risks
|
||||
- Need service-by-service adoption of the hardened Docker template; ensure health endpoints exist (tracked by DOCKER-44-003).
|
||||
- SBOM/attestation integration (DOCKER-44-002) depends on final image names/digests from 44-001.
|
||||
- Cosign key management: default flow supports keyless (requires transparency); for offline/air-gap, ensure registry mirror and signing keys are available to `sbom_attest.sh`.
|
||||
- Surface.Env: ZASTAVA_* fall back to SCANNER_* in Helm/Compose; operators can override per component. Keep `docs/modules/scanner/design/surface-env.md` aligned if prefixes/fields change.
|
||||
- Surface.Secrets: provisioning playbook published (`ops/devops/secrets/surface-secrets-provisioning.md`); keep Helm/Compose env in sync. Offline kit already bundles encrypted secrets; ensure unpack path matches `*_SURFACE_SECRETS_ROOT`.
|
||||
|
||||
35
docs/modules/signals/evidence/README.md
Normal file
35
docs/modules/signals/evidence/README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Signals DSSE Evidence Staging (runtime/signals gaps)
|
||||
|
||||
Artifacts prepared 2025-12-01 (UTC) for DSSE signing and Evidence Locker ingest:
|
||||
|
||||
- Decay config: `docs/modules/signals/decay/confidence_decay_config.yaml`
|
||||
- Unknowns scoring manifest: `docs/modules/signals/unknowns/unknowns_scoring_manifest.json`
|
||||
- Heuristic catalog + schema + fixtures: `docs/modules/signals/heuristics/`
|
||||
- Checksums: `docs/modules/signals/SHA256SUMS`
|
||||
|
||||
Planned Evidence Locker paths (to fill post-signing):
|
||||
- `evidence-locker/signals/decay/2025-12-01/confidence_decay_config.dsse`
|
||||
- `evidence-locker/signals/unknowns/2025-12-01/unknowns_scoring_manifest.dsse`
|
||||
- `evidence-locker/signals/heuristics/2025-12-01/heuristics_catalog.dsse`
|
||||
- `evidence-locker/signals/heuristics/2025-12-01/fixtures/` (golden inputs/outputs)
|
||||
|
||||
Pending steps:
|
||||
1) Sign each artifact with its predicate:
|
||||
- `stella.ops/confidenceDecayConfig@v1`
|
||||
- `stella.ops/unknownsScoringManifest@v1`
|
||||
- `stella.ops/heuristicCatalog@v1`
|
||||
Example (replace KEY):
|
||||
```bash
|
||||
cosign sign-blob \
|
||||
--key cosign.key \
|
||||
--predicate-type stella.ops/confidenceDecayConfig@v1 \
|
||||
--output-signature confidence_decay_config.dsse \
|
||||
decay/confidence_decay_config.yaml
|
||||
```
|
||||
2) Attach SHA256 from `SHA256SUMS` in DSSE headers/annotations.
|
||||
3) Place signed envelopes + checksums in the Evidence Locker paths above; update sprint tracker Delivery Tracker rows 5–7 and Decisions & Risks with the final URIs.
|
||||
4) Add signer/approver IDs to the sprint Execution Log once signatures are complete.
|
||||
|
||||
Notes:
|
||||
- Use UTC timestamps in DSSE `issuedAt`.
|
||||
- Ensure offline parity by copying envelopes + SHA256SUMS into the offline kit bundle when ready.
|
||||
5
docs/modules/zastava/SHA256SUMS
Normal file
5
docs/modules/zastava/SHA256SUMS
Normal file
@@ -0,0 +1,5 @@
|
||||
e65d4b68c9bdaa569c6d4c5a9b0a8bc1dc41876f948983011ff6f9d3466565d0 schemas/observer_event.schema.json
|
||||
f466bf2b399f065558867eaf3c961cff8803f4a1506bae5539c9ce62e9ab005d schemas/webhook_admission.schema.json
|
||||
40fabd4d7bc75c35ae063b2e931e79838c79b447528440456f5f4846951ff59d thresholds.yaml
|
||||
652fce7d7b622ae762c8fb65a1e592bec14b124c3273312f93a63d2c29a2b989 kit/verify.sh
|
||||
f3f84fbe780115608268a91a5203d2d3ada50b4317e7641d88430a692e61e1f4 kit/README.md
|
||||
@@ -5,5 +5,8 @@
|
||||
| ZASTAVA-DOCS-0001 | DONE (2025-11-30) | Docs Guild | README/architecture refreshed; Surface Env/Secrets and sprint links added. |
|
||||
| ZASTAVA-ENG-0001 | DONE (2025-11-30) | Module Team | TASKS board created; statuses mirrored with `docs/implplan/SPRINT_0335_0001_0001_docs_modules_zastava.md`. |
|
||||
| ZASTAVA-OPS-0001 | DONE (2025-11-30) | Ops Guild | Observability runbook stub + Grafana JSON placeholder added under `operations/`. |
|
||||
| ZASTAVA-SCHEMAS-0001 | TODO | Zastava Guild | Publish signed observer/admission schemas + test vectors under `docs/modules/zastava/schemas/`; DSSE + SHA256 required. |
|
||||
| ZASTAVA-KIT-0001 | TODO | Zastava Guild | Build signed `zastava-kit` bundle with thresholds.yaml, schemas, observations/admissions export, SHA256SUMS, and verify.sh; ensure offline parity. |
|
||||
| ZASTAVA-GAPS-144-007 | DONE (2025-12-02) | Zastava Guild | Remediation plan for ZR1–ZR10 published at `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md`; follow-on schemas/kit/thresholds to be produced and signed. |
|
||||
|
||||
> Keep this table in lockstep with the sprint Delivery Tracker (TODO/DOING/DONE/BLOCKED updates go to both places).
|
||||
|
||||
49
docs/modules/zastava/gaps/2025-12-02-zr-gaps.md
Normal file
49
docs/modules/zastava/gaps/2025-12-02-zr-gaps.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Zastava Runtime Signals Gaps (ZR1–ZR10)
|
||||
|
||||
**Source:** `docs/product-advisories/31-Nov-2025 FINDINGS.md`
|
||||
**Compiled:** 2025-12-02 (UTC)
|
||||
**Scope:** Close ZR1–ZR10 for Observer + Webhook (Surface.Env/Secrets/FS) with offline parity and auditability.
|
||||
|
||||
## Gap remediation summary
|
||||
- **ZR1 · Canonical schemas & hashing**
|
||||
- Publish signed JSON Schemas for Observer emission and Webhook admission envelopes under `docs/modules/zastava/schemas/`.
|
||||
- Enforce JCS canonical JSON; compute `sha256` over canonical form; include test vectors.
|
||||
- Validators reject non-canonical payloads; DSSE required on bundles.
|
||||
- **ZR2 · Tenant isolation & scope binding**
|
||||
- Require `tenant_id` and `project_id` on all Observer/Webhook requests; fail closed on missing/ambiguous values.
|
||||
- Add tenancy annotations to DSSE envelopes and enforce tenancy in admission allowlist.
|
||||
- Add cross-tenant negative tests.
|
||||
- **ZR3 · Determinism & time source**
|
||||
- Use monotonic clock + UTC; standardize ordering: `tenant -> namespace -> workload -> digest`.
|
||||
- Add multi-run hash CI to ensure stable serialization.
|
||||
- **ZR4 · Provenance & signer identity**
|
||||
- Require DSSE envelopes with fields: `sensor_id`, `firmware_version`, `policy_hash`, `graph_revision_id`, `signer_key_id`.
|
||||
- Reject unsigned/unknown signer; log provenance to CAS.
|
||||
- **ZR5 · Admission side-effects & escape hatches**
|
||||
- Side-effect allowlist documented; deny non-listed hooks.
|
||||
- Bypass/debug require dual approval and DSSE waiver with expiry; log and alert on use.
|
||||
- **ZR6 · Offline/air-gap parity**
|
||||
- Provide `zastava-kit` bundle (admissions + observations + schemas + DSSE + hashes) with deterministic tar flags (`--mtime @0 --owner 0 --group 0 --numeric-owner | zstd -19 --long=27`).
|
||||
- Include `verify.sh` for hash/signature/tenant checks; no network dependencies.
|
||||
- **ZR7 · Replay/audit linkage**
|
||||
- Embed `ledger_id` and `replay_manifest` refs in events/admissions; store in CAS.
|
||||
- Export linkage in offline kit and Evidence Locker.
|
||||
- **ZR8 · Thresholds, burn-rate & anomaly policy**
|
||||
- Versioned `thresholds.yaml` with DSSE signatures; change log required.
|
||||
- Alerts on threshold change; publish budgets (latency, error rate, drop rate).
|
||||
- **ZR9 · PII/redaction & log hygiene**
|
||||
- Redaction allowlist + size limits; CI + ingest PII/secret scan.
|
||||
- Truncate with omission counts; include `redaction_manifest` in DSSE annotations.
|
||||
- **ZR10 · Health, kill-switch & fallback**
|
||||
- Fault counter + kill-switch with DSSE-signed disable record.
|
||||
- Configurable fail-open/closed (default fail-closed for admission); manual re-enable requires DSSE record.
|
||||
|
||||
## Artefacts created
|
||||
- This remediation plan: `docs/modules/zastava/gaps/2025-12-02-zr-gaps.md` (to be cross-linked from sprint 0144 and TASKS).
|
||||
- Delivery paths for schemas/thresholds/kit will be added when produced; DSSE signatures required for all artefacts.
|
||||
|
||||
## Next steps
|
||||
1) Generate schemas + test vectors and place under `docs/modules/zastava/schemas/`; sign DSSE.
|
||||
2) Draft `thresholds.yaml` with budgets and sign DSSE.
|
||||
3) Build `zastava-kit` bundle + `verify.sh`; include Evidence Locker path and SHA256.
|
||||
4) Add tenancy/ordering/provenance enforcement to Observer/Webhook validators and tests; mirror changes in sprint and TASKS boards.
|
||||
12
docs/modules/zastava/kit/README.md
Normal file
12
docs/modules/zastava/kit/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Zastava Kit (offline bundle) – Draft
|
||||
|
||||
Contents to include when built:
|
||||
- Observations and admissions exports (NDJSON) signed via DSSE.
|
||||
- Schemas: `schemas/observer_event.schema.json`, `schemas/webhook_admission.schema.json`.
|
||||
- Thresholds: `thresholds.yaml` (DSSE-signed).
|
||||
- Hash manifest: `SHA256SUMS` (covering all kit files).
|
||||
- Verify script: `verify.sh` (hash + DSSE verification; fail closed on mismatch).
|
||||
|
||||
Deterministic packaging: `tar --mtime @0 --owner 0 --group 0 --numeric-owner -cf - kit | zstd -19 --long=27 --no-progress > zastava-kit.tzst`.
|
||||
|
||||
Pending: fill with signed artefacts and Evidence Locker URIs after DSSE signing.
|
||||
14
docs/modules/zastava/kit/verify.sh
Normal file
14
docs/modules/zastava/kit/verify.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
if ! command -v sha256sum >/dev/null; then
|
||||
echo "sha256sum required" >&2; exit 1
|
||||
fi
|
||||
|
||||
sha256sum --check SHA256SUMS
|
||||
# TODO: add DSSE verification once signatures are available; placeholder below
|
||||
# cosign verify-blob --key cosign.pub --signature observer_event.schema.json.sig observer_event.schema.json
|
||||
|
||||
echo "OK: hashes verified (DSSE verification pending)"
|
||||
34
docs/modules/zastava/schemas/observer_event.schema.json
Normal file
34
docs/modules/zastava/schemas/observer_event.schema.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$id": "https://stella-ops.org/schemas/zastava/observer_event.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Zastava Observer Event",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"tenant_id",
|
||||
"project_id",
|
||||
"sensor_id",
|
||||
"firmware_version",
|
||||
"policy_hash",
|
||||
"graph_revision_id",
|
||||
"event_type",
|
||||
"observed_at",
|
||||
"payload_hash",
|
||||
"signature"
|
||||
],
|
||||
"properties": {
|
||||
"tenant_id": { "type": "string" },
|
||||
"project_id": { "type": "string" },
|
||||
"sensor_id": { "type": "string" },
|
||||
"firmware_version": { "type": "string" },
|
||||
"policy_hash": { "type": "string" },
|
||||
"graph_revision_id": { "type": "string" },
|
||||
"ledger_id": { "type": "string" },
|
||||
"replay_manifest": { "type": "string" },
|
||||
"event_type": { "enum": ["runtime_fact", "drift", "policy_violation", "heartbeat"] },
|
||||
"observed_at": { "type": "string", "format": "date-time" },
|
||||
"monotonic_nanos": { "type": "integer" },
|
||||
"payload": { "type": "object" },
|
||||
"payload_hash": { "type": "string", "description": "sha256 over canonical JSON (JCS) of payload" },
|
||||
"signature": { "type": "string", "description": "DSSE envelope reference" }
|
||||
}
|
||||
}
|
||||
42
docs/modules/zastava/schemas/webhook_admission.schema.json
Normal file
42
docs/modules/zastava/schemas/webhook_admission.schema.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"$id": "https://stella-ops.org/schemas/zastava/webhook_admission.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Zastava Webhook Admission",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"tenant_id",
|
||||
"project_id",
|
||||
"request_uid",
|
||||
"resource_kind",
|
||||
"namespace",
|
||||
"workload_name",
|
||||
"policy_hash",
|
||||
"graph_revision_id",
|
||||
"decision",
|
||||
"decision_reason",
|
||||
"decision_at",
|
||||
"manifest_pointer",
|
||||
"signature"
|
||||
],
|
||||
"properties": {
|
||||
"tenant_id": { "type": "string" },
|
||||
"project_id": { "type": "string" },
|
||||
"request_uid": { "type": "string" },
|
||||
"resource_kind": { "type": "string" },
|
||||
"namespace": { "type": "string" },
|
||||
"workload_name": { "type": "string" },
|
||||
"policy_hash": { "type": "string" },
|
||||
"graph_revision_id": { "type": "string" },
|
||||
"ledger_id": { "type": "string" },
|
||||
"replay_manifest": { "type": "string" },
|
||||
"manifest_pointer": { "type": "string", "description": "Surface.FS manifest pointer" },
|
||||
"decision": { "enum": ["allow", "deny", "dry-run"] },
|
||||
"decision_reason": { "type": "string" },
|
||||
"decision_at": { "type": "string", "format": "date-time" },
|
||||
"monotonic_nanos": { "type": "integer" },
|
||||
"side_effect": { "enum": ["none", "mutating", "bypass"] },
|
||||
"bypass_waiver_id": { "type": "string" },
|
||||
"payload_hash": { "type": "string" },
|
||||
"signature": { "type": "string", "description": "DSSE envelope reference" }
|
||||
}
|
||||
}
|
||||
17
docs/modules/zastava/thresholds.yaml
Normal file
17
docs/modules/zastava/thresholds.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
version: 1
|
||||
updated_at: 2025-12-02T00:00:00Z
|
||||
budgets:
|
||||
latency_ms_p95: 250
|
||||
error_rate: 0.01
|
||||
drop_rate: 0.005
|
||||
burn_rates:
|
||||
admission_denies_per_min: 5
|
||||
observer_drifts_per_hour: 2
|
||||
heartbeat_miss_minutes: 3
|
||||
alerts:
|
||||
threshold_change: true
|
||||
burn_rate_exceeded: true
|
||||
kill_switch_triggered: true
|
||||
signing:
|
||||
predicate: stella.ops/zastavaThresholds@v1
|
||||
dsse_required: true
|
||||
Reference in New Issue
Block a user