feat(api): Implement Console Export Client and Models
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Findings Ledger CI / build-test (push) Has been cancelled
Findings Ledger CI / migration-validation (push) Has been cancelled
Findings Ledger CI / generate-manifest (push) Has been cancelled
mock-dev-release / package-mock-release (push) Has been cancelled

- Added ConsoleExportClient for managing export requests and responses.
- Introduced ConsoleExportRequest and ConsoleExportResponse models.
- Implemented methods for creating and retrieving exports with appropriate headers.

feat(crypto): Add Software SM2/SM3 Cryptography Provider

- Implemented SmSoftCryptoProvider for software-only SM2/SM3 cryptography.
- Added support for signing and verification using SM2 algorithm.
- Included hashing functionality with SM3 algorithm.
- Configured options for loading keys from files and environment gate checks.

test(crypto): Add unit tests for SmSoftCryptoProvider

- Created comprehensive tests for signing, verifying, and hashing functionalities.
- Ensured correct behavior for key management and error handling.

feat(api): Enhance Console Export Models

- Expanded ConsoleExport models to include detailed status and event types.
- Added support for various export formats and notification options.

test(time): Implement TimeAnchorPolicyService tests

- Developed tests for TimeAnchorPolicyService to validate time anchors.
- Covered scenarios for anchor validation, drift calculation, and policy enforcement.
This commit is contained in:
StellaOps Bot
2025-12-07 00:27:33 +02:00
parent 9bd6a73926
commit 0de92144d2
229 changed files with 32351 additions and 1481 deletions

View File

@@ -310,42 +310,84 @@ data: {
> Until backend implementations ship, use the examples above to unblock DOCS-AIAI-31-004; replace them with live captures once the gateway endpoints are available in staging.
## Exports (draft contract)
## Exports (draft contract v0.3)
Routes
### Routes
- `POST /console/exports` — start an evidence bundle export job.
- `GET /console/exports/{exportId}` — fetch job status and download locations.
- `GET /console/exports/{exportId}/events` — SSE stream of job progress (optional).
Headers
- `Authorization: Bearer <token>`
### Security / headers
- `Authorization: DPoP <token>`
- `DPoP: <proof>`
- `X-StellaOps-Tenant: <tenantId>`
- `Idempotency-Key: <uuid>` (recommended for POST)
- `Accept: application/json` (status) or `text/event-stream` (events)
- Required scopes: `console:read` AND `console:export` (proposal).
Request body (POST /console/exports)
- `scope`: `{ tenantId, projectId? }`
- `sources`: array of `{ type: "advisory"|"vex"|"policy"|"scan", ids: string[] }`
- `formats`: array of `"json"|"csv"|"ndjson"|"pdf"`
- `attestations`: `{ include: boolean, sigstoreBundle?: boolean }`
- `notify`: `{ webhooks?: string[], email?: string[] }`
- `priority`: `"low"|"normal"|"high"`
### Request body (POST)
```jsonc
{
"scope": { "tenantId": "t1", "projectId": "p1" },
"sources": [ { "type": "advisory", "ids": ["CVE-2024-12345"] } ],
"formats": ["json", "ndjson", "csv"],
"attestations": { "include": true, "sigstoreBundle": true },
"notify": { "webhooks": ["https://hooks.local/export"], "email": ["secops@example.com"] },
"priority": "normal"
}
```
Responses
- `202 Accepted` with `exportId`, `status: queued|running|succeeded|failed|expired`, `estimateSeconds`, `retryAfter`.
- Status payload includes presigned download URLs, checksum manifest, and error list when failed.
- SSE events emit `started`, `progress` (percent, item counts), `asset_ready` (uri, sha256), `completed`, `failed` (code, message).
### Response: 202 Accepted
- `exportId`: string
- `status`: `queued|running|succeeded|failed|expired`
- `estimateSeconds`: int
- `retryAfter`: int seconds (for polling)
- `links`: `{ status: url, events?: url }`
Proposed limits
### Response: GET status
```jsonc
{
"exportId": "console-export::tenant-default::2025-12-06::0007",
"status": "running",
"estimateSeconds": 420,
"outputs": [
{ "type": "manifest", "format": "json", "url": "https://.../manifest.json?sig=...", "sha256": "...", "expiresAt": "2025-12-06T13:10:00Z" }
],
"progress": { "percent": 42, "itemsCompleted": 210, "itemsTotal": 500, "assetsReady": 12 },
"errors": []
}
```
### Response: SSE events
- `started`: `{ exportId, status }`
- `progress`: `{ exportId, percent, itemsCompleted, itemsTotal }`
- `asset_ready`: `{ exportId, type, id, url, sha256 }`
- `completed`: `{ exportId, status: "succeeded", manifestUrl }`
- `failed`: `{ exportId, status: "failed", code, message }`
### Manifest shape (downloaded via outputs)
- `version`: string (date)
- `exportId`, `tenantId`, `generatedAt`
- `items[]`: `{ type: advisory|vex|policy|scan, id, url, sha256 }`
- `checksums`: `{ manifest, bundle }`
### Limits (proposed)
- Max request body 256 KiB; max sources 50; max outputs 1000 assets/export.
- Default job timeout 30 minutes; idle SSE timeout 60s; backoff header `Retry-After`.
- Default job timeout 30 minutes; idle SSE timeout 60s; backoff via `Retry-After`.
Samples (draft)
### Error codes (proposal)
- `ERR_CONSOLE_EXPORT_INVALID_SOURCE`
- `ERR_CONSOLE_EXPORT_TOO_LARGE`
- `ERR_CONSOLE_EXPORT_RATE_LIMIT`
- `ERR_CONSOLE_EXPORT_UNAVAILABLE`
### Samples
- Request: `docs/api/console/samples/console-export-request.json`
- Status: `docs/api/console/samples/console-export-status.json`
- Manifest: `docs/api/console/samples/console-export-manifest.json`
- Events: `docs/api/console/samples/console-export-events.ndjson`
Open items (needs owner sign-off)
- Final schema (fields, limits, error codes), checksum manifest format, attestation options.
### Open items (needs guild sign-off)
- Final scopes list (`console:export` vs broader `console:*`).
- Final limits and error codes; checksum manifest format; attestation options.
- Caching/tie-break rules for downstream `/console/search` and `/console/downloads`.

View File

@@ -1,17 +1,79 @@
# Export Center Gateway Contract (draft placeholder)
**Status:** TODO · awaiting Export Center Guild inputs
**Status:** Draft v0.2 · owner-proposed
## Scope
- Profile, run, download, and distribution routes proxied via Web gateway.
- Tenant scoping, RBAC/ABAC, streaming limits, retention/encryption parameters, signed URL policy.
## Needed from owners
- OpenAPI/JSON schema for: profiles, runs, downloads, distributions (OCI/object storage).
- Range/streaming limits; retry/backoff guidance; checksum/manifest format.
- Required headers (tenant/project, idempotency, auth) and rate limits.
- Example payloads/NDJSON streams for happy-path and error cases.
## Endpoints
- `GET /export-center/profiles` — list export profiles (tenant-scoped).
- `POST /export-center/runs` — start an export run.
- `GET /export-center/runs/{runId}` — run status and artifacts.
- `GET /export-center/runs/{runId}/events` — SSE for run progress.
- `GET /export-center/distributions/{id}` — fetch signed URLs for OCI/object storage distribution.
## TODO
- Replace this file with the ratified contract and sample payloads.
- Record schema hash and date when published; link from Web II sprint Execution Log.
## Security / headers
- `Authorization: DPoP <token>`; `DPoP: <proof>`
- `X-StellaOps-Tenant: <tenantId>` (required)
- `X-StellaOps-Project: <projectId>` (optional)
- `Idempotency-Key` (recommended for POST)
- Required scopes (proposal): `export:read`, `export:write`.
## Request: POST /export-center/runs
```jsonc
{
"profileId": "export-profile::tenant-default::daily-vex",
"targets": ["vex", "advisory", "policy"],
"formats": ["json", "ndjson"],
"distribution": {
"type": "oci",
"ref": "registry.local/exports/daily",
"signing": { "enabled": true, "keyRef": "k8s://secrets/eks/oci-signer" }
},
"retentionDays": 30,
"encryption": { "enabled": true, "kmsKey": "kms://tenant-default/key1" },
"priority": "normal"
}
```
## Response: 202 Accepted
- `runId`, `status: queued|running|succeeded|failed|expired`, `estimateSeconds`, `retryAfter`.
## Response: GET run
```jsonc
{
"runId": "export-run::tenant-default::2025-12-06::0003",
"status": "running",
"profileId": "export-profile::tenant-default::daily-vex",
"startedAt": "2025-12-06T10:00:00Z",
"outputs": [
{ "type": "manifest", "format": "json", "url": "https://exports.local/.../manifest.json?sig=...", "sha256": "...", "expiresAt": "2025-12-06T16:00:00Z" }
],
"progress": { "percent": 35, "itemsCompleted": 70, "itemsTotal": 200 },
"errors": []
}
```
## SSE events
- `started`, `progress`, `artifact_ready` (url, sha256, type), `completed`, `failed` (code, message).
## Limits (proposal)
- Max request body 256 KiB; max targets 50; default timeout 60 minutes.
- Idle SSE timeout 60s; backoff with `Retry-After`.
## Error codes (proposal)
- `ERR_EXPORT_PROFILE_NOT_FOUND`
- `ERR_EXPORT_REQUEST_INVALID`
- `ERR_EXPORT_TOO_LARGE`
- `ERR_EXPORT_RATE_LIMIT`
- `ERR_EXPORT_DISTRIBUTION_FAILED`
## Samples
- Profile list sample: _todo_
- Run request/response: see above snippets.
- Events NDJSON: _todo_
## Outstanding (for finalization)
- Confirm scopes, limits, distribution signing rules, and manifest checksum requirements.
- Provide full OpenAPI/JSON schema and sample artifacts for OCI/object storage distributions.

View File

@@ -1,16 +1,42 @@
# Graph Overlay & Cache Schema (draft placeholder)
**Status:** TODO · awaiting Graph Platform Guild ratification
**Status:** Draft v0.2 · owner-proposed
## Scope
- Overlay/cache schema for graph tiles used by Web gateway and UI overlays.
- Validation rules for bbox/zoom/path; pagination tokens; deterministic ordering.
- Error codes and sampling/telemetry fields.
## Needed from owners
- JSON schema (or OpenAPI fragment) for overlay response and cache metadata.
- Allowed zoom levels/coordinate system; max nodes/edges per tile; hashing/etag rules.
- Sample overlay bundle (happy path + rate-limit + validation error).
## Schema (draft)
```jsonc
{
"version": "2025-12-06",
"tenantId": "tenant-default",
"tile": {
"id": "graph-tile::asset::<hash>::z8/x12/y5",
"bbox": { "minX": -122.41, "minY": 37.77, "maxX": -122.38, "maxY": 37.79 },
"zoom": 8,
"etag": "c0ffee-etag"
},
"nodes": [ { "id": "asset:...", "kind": "asset|component|vuln", "label": "", "severity": "high|medium|low|info", "reachability": "reachable|unreachable|unknown", "attributes": {} } ],
"edges": [ { "id": "edge-1", "source": "nodeId", "target": "nodeId", "type": "depends_on|contains|evidence", "weight": 0.0 } ],
"overlays": {
"policy": [ { "nodeId": "nodeId", "badge": "pass|warn|fail|waived", "policyId": "", "verdictAt": "2025-12-05T09:00:00Z" } ],
"vex": [ { "nodeId": "nodeId", "state": "not_affected|fixed|under_investigation|affected", "statementId": "", "lastUpdated": "2025-12-05T09:10:00Z" } ],
"aoc": [ { "nodeId": "nodeId", "status": "pass|fail|warn", "lastVerified": "2025-12-05T10:11:12Z" } ]
},
"telemetry": { "generationMs": 0, "cache": "hit|miss", "samples": 0 }
}
```
## TODO
- Insert ratified schema + samples; note schema hash/date; link from Web II sprint log.
## Constraints (proposal)
- Max nodes per tile: 2,000; max edges: 4,000.
- Zoom range: 012; tiles must include bbox and etag.
- Arrays must be pre-sorted: nodes by `id`, edges by `id`, overlays by `nodeId` then `policyId|statementId`.
## Samples
- `docs/api/graph/samples/overlay-sample.json`
## Outstanding
- Confirm max sizes, allowed edge types, and etag hashing rule.
- Provide validation error example and rate-limit headers for gateway responses.

View File

@@ -0,0 +1,75 @@
{
"version": "2025-12-06",
"tenantId": "tenant-default",
"tile": {
"id": "graph-tile::asset::sha256:abc123::z8/x12/y5",
"bbox": {
"minX": -122.41,
"minY": 37.77,
"maxX": -122.38,
"maxY": 37.79
},
"zoom": 8,
"etag": "c0ffee-overlay-etag"
},
"nodes": [
{
"id": "asset:registry.local/library/app@sha256:abc123",
"kind": "asset",
"label": "app:1.2.3",
"severity": "high",
"reachability": "reachable",
"aoc": { "summary": "pass", "lastVerified": "2025-12-05T10:11:12Z" },
"attributes": {
"purl": "pkg:docker/app@sha256:abc123",
"componentCount": 42
}
},
{
"id": "component:pkg:npm/jsonwebtoken@9.0.2",
"kind": "component",
"label": "jsonwebtoken@9.0.2",
"severity": "high",
"reachability": "reachable"
}
],
"edges": [
{
"id": "edge-1",
"source": "asset:registry.local/library/app@sha256:abc123",
"target": "component:pkg:npm/jsonwebtoken@9.0.2",
"type": "depends_on",
"weight": 0.87
}
],
"overlays": {
"policy": [
{
"nodeId": "component:pkg:npm/jsonwebtoken@9.0.2",
"badge": "fail",
"policyId": "policy://tenant-default/runtime-hardening",
"verdictAt": "2025-12-05T09:00:00Z"
}
],
"vex": [
{
"nodeId": "component:pkg:npm/jsonwebtoken@9.0.2",
"state": "under_investigation",
"statementId": "vex:tenant-default:jwt:2025-12-05",
"lastUpdated": "2025-12-05T09:10:00Z"
}
],
"aoc": [
{
"nodeId": "asset:registry.local/library/app@sha256:abc123",
"status": "pass",
"lastVerified": "2025-12-05T10:11:12Z"
}
]
},
"telemetry": {
"generationMs": 120,
"cache": "hit",
"samples": 3
}
}

View File

@@ -1,15 +1,66 @@
# Signals Reachability API Contract (draft placeholder)
**Status:** TODO · awaiting Signals Guild
**Status:** Draft v0.2 · owner-proposed
## Scope
- `/signals/callgraphs`, `/signals/facts`, reachability scoring overlays feeding UI/Web.
- Deterministic fixtures for SIG-26 chain (columns/badges, call paths, timelines, overlays, coverage).
## Needed from owners
- OpenAPI/JSON schema for callgraphs and facts (request/response, pagination, ETags).
- Reachability score model, states, and filtering parameters.
- Fixture bundle (JSON/NDJSON) with checksums and performance budgets (target FPS/node caps).
## Endpoints
- `GET /signals/callgraphs` — returns call paths contributing to reachability.
- `GET /signals/facts` — returns reachability/coverage facts.
## TODO
- Replace with ratified contract and fixtures; record schema hash/date; link from Web V and UI III logs.
Common headers: `Authorization: DPoP <token>`, `DPoP: <proof>`, `X-StellaOps-Tenant`, optional `If-None-Match`.
Pagination: cursor via `pageToken`; default 50, max 200.
ETag: required on responses; clients must send `If-None-Match` for cache validation.
### Callgraphs response (draft)
```jsonc
{
"tenantId": "tenant-default",
"assetId": "registry.local/library/app@sha256:abc123",
"paths": [
{
"id": "path-1",
"source": "api-gateway",
"target": "jwt-auth-service",
"hops": [
{ "service": "api-gateway", "endpoint": "/login", "timestamp": "2025-12-05T10:00:00Z" },
{ "service": "jwt-auth-service", "endpoint": "/verify", "timestamp": "2025-12-05T10:00:01Z" }
],
"evidence": { "traceId": "trace-abc", "spanCount": 2, "score": 0.92 }
}
],
"pagination": { "nextPageToken": null },
"etag": "sig-callgraphs-etag"
}
```
### Facts response (draft)
```jsonc
{
"tenantId": "tenant-default",
"facts": [
{
"id": "fact-1",
"type": "reachability",
"assetId": "registry.local/library/app@sha256:abc123",
"component": "pkg:npm/jsonwebtoken@9.0.2",
"status": "reachable",
"confidence": 0.88,
"observedAt": "2025-12-05T10:10:00Z",
"signalsVersion": "signals-2025.310.1"
}
],
"pagination": { "nextPageToken": "..." },
"etag": "sig-facts-etag"
}
```
### Samples
- Callgraphs: `docs/api/signals/samples/callgraph-sample.json`
- Facts: `docs/api/signals/samples/facts-sample.json`
### Outstanding
- Finalize score model, accepted `type` values, and max page size.
- Provide OpenAPI/JSON schema and error codes.

View File

@@ -0,0 +1,23 @@
{
"tenantId": "tenant-default",
"assetId": "registry.local/library/app@sha256:abc123",
"paths": [
{
"id": "path-1",
"source": "api-gateway",
"target": "jwt-auth-service",
"hops": [
{ "service": "api-gateway", "endpoint": "/login", "timestamp": "2025-12-05T10:00:00Z" },
{ "service": "jwt-auth-service", "endpoint": "/verify", "timestamp": "2025-12-05T10:00:01Z" }
],
"evidence": {
"traceId": "trace-abc",
"spanCount": 2,
"score": 0.92
}
}
],
"pagination": {
"nextPageToken": null
}
}

View File

@@ -0,0 +1,26 @@
{
"tenantId": "tenant-default",
"facts": [
{
"id": "fact-1",
"type": "reachability",
"assetId": "registry.local/library/app@sha256:abc123",
"component": "pkg:npm/jsonwebtoken@9.0.2",
"status": "reachable",
"confidence": 0.88,
"observedAt": "2025-12-05T10:10:00Z",
"signalsVersion": "signals-2025.310.1"
},
{
"id": "fact-2",
"type": "coverage",
"assetId": "registry.local/library/app@sha256:abc123",
"metric": "sensors_present",
"value": 0.94,
"observedAt": "2025-12-05T10:11:00Z"
}
],
"pagination": {
"nextPageToken": "eyJmYWN0SWQiOiJmYWN0LTIifQ"
}
}

View File

@@ -0,0 +1,11 @@
event: started
data: {"tenantId":"tenant-default","streamId":"vex-consensus::2025-12-06","status":"running"}
event: consensus_update
data: {"statementId":"vex:tenant-default:jwt-auth:5d1a","state":"under_investigation","justification":"reachable path confirmed","validFrom":"2025-12-06T10:00:00Z","validUntil":"2025-12-20T00:00:00Z","sources":["signals","policy"],"etag":"vex-etag-123"}
event: consensus_update
data: {"statementId":"vex:tenant-default:openssl:7b2c","state":"not_affected","justification":"no call-path and patched","validFrom":"2025-12-05T00:00:00Z","validUntil":"2026-01-01T00:00:00Z","sources":["sbom","scanner"],"etag":"vex-etag-456"}
event: completed
data: {"streamId":"vex-consensus::2025-12-06","status":"succeeded"}

View File

@@ -1,14 +1,25 @@
# VEX Consensus Stream Contract (draft placeholder)
**Status:** TODO · awaiting VEX Lens Guild
**Status:** Draft v0.2 · owner-proposed
## Scope
- `/vex/consensus` streaming APIs via Web gateway with tenant RBAC/ABAC, caching, and telemetry.
## Needed from owners
- SSE/stream envelope (fields, heartbeats, retry/backoff headers), sample NDJSON stream.
- RBAC/ABAC requirements and caching rules; idempotency/correlation headers.
- Error codes and rate limits.
## Endpoint
- `GET /vex/consensus/stream` — SSE stream of consensus VEX statements per tenant.
## TODO
- Insert finalized contract + samples; note schema hash/date; reference in Web V sprint log.
Headers: `Authorization: DPoP <token>`, `DPoP: <proof>`, `X-StellaOps-Tenant`, optional `If-None-Match`.
Scopes (proposal): `vex:read` and `vex:consensus`.
Events (draft)
- `started`: `{ tenantId, streamId, status }`
- `consensus_update`: `{ statementId, state, justification, validFrom, validUntil, sources[], etag }`
- `heartbeat`: `{ streamId, ts }`
- `completed`: `{ streamId, status }`
- `failed`: `{ streamId, code, message }`
Rate limits: heartbeats every 30s; idle timeout 90s; backoff via `Retry-After` header on reconnect.
Samples: `docs/api/vex-consensus-sample.ndjson`
Outstanding: finalize scopes, error codes, cache/etag semantics, and add pagination/replay guidance.

View File

@@ -1,9 +1,22 @@
# BLOCKED Tasks Dependency Tree
> **Last Updated:** 2025-12-06 (Wave 6: 49 specs + 8 implementations = ~270+ tasks unblocked)
> **Last Updated:** 2025-12-06 (Wave 8: 56 specs created)
> **Current Status:** 400 BLOCKED | 316 TODO | 1631 DONE
> **Purpose:** This document maps all BLOCKED tasks and their root causes to help teams prioritize unblocking work.
> **Note:** Specifications created in Waves 1-8 provide contracts to unblock tasks; sprint files need `BLOCKED → TODO` updates.
> **Visual DAG:** See [DEPENDENCY_DAG.md](./DEPENDENCY_DAG.md) for Mermaid graphs, cascade analysis, and guild blocking matrix.
>
> **Recent Unblocks (2025-12-06 Wave 6):**
> **Recent Unblocks (2025-12-06 Wave 8):**
> - ✅ Ledger Time-Travel API (`docs/schemas/ledger-time-travel-api.openapi.yaml`) — 73+ tasks (Export Center chains SPRINT_0160-0164)
> - ✅ Graph Platform API (`docs/schemas/graph-platform-api.openapi.yaml`) — 11+ tasks (SPRINT_0209_ui_i, GRAPH-28-007 through 28-010)
> - ✅ Java Entrypoint Resolver Schema (`docs/schemas/java-entrypoint-resolver.schema.json`) — 7 tasks (Java Analyzer 21-005 through 21-011)
> - ✅ .NET IL Metadata Extraction Schema (`docs/schemas/dotnet-il-metadata.schema.json`) — 5 tasks (C#/.NET Analyzer 11-001 through 11-005)
>
> **Wave 7 Unblocks (2025-12-06):**
> - ✅ Authority Production Signing Schema (`docs/schemas/authority-production-signing.schema.json`) — 2+ tasks (AUTH-GAPS-314-004, REKOR-RECEIPT-GAPS-314-005)
> - ✅ Scanner EntryTrace Baseline Schema (`docs/schemas/scanner-entrytrace-baseline.schema.json`) — 5+ tasks (SCANNER-ENTRYTRACE-18-503 through 18-508)
> - ✅ Production Release Manifest Schema (`docs/schemas/production-release-manifest.schema.json`) — 10+ tasks (DEPLOY-ORCH-34-001, DEPLOY-POLICY-27-001)
>
> **Wave 6 Unblocks (2025-12-06):**
> - ✅ SDK Generator Samples Schema (`docs/schemas/sdk-generator-samples.schema.json`) — 2+ tasks (DEVPORT-63-002, DOCS-SDK-62-001)
> - ✅ Graph Demo Outputs Schema (`docs/schemas/graph-demo-outputs.schema.json`) — 1+ task (GRAPH-OPS-0001)
> - ✅ Risk API Schema (`docs/schemas/risk-api.schema.json`) — 5 tasks (DOCS-RISK-67-002 through 68-002)
@@ -61,17 +74,33 @@ Before starting work on any BLOCKED task, check this tree to understand:
## Ops Deployment (190.A) — Missing Release Artefacts
**Root Blocker:** Orchestrator and Policy images/digests absent from `deploy/releases/2025.09-stable.yaml`
**Root Blocker:** ~~Orchestrator and Policy images/digests absent from `deploy/releases/2025.09-stable.yaml`~~ ✅ RESOLVED (2025-12-06 Wave 7)
> **Update 2025-12-06 Wave 7:**
> - ✅ **Production Release Manifest Schema** CREATED (`docs/schemas/production-release-manifest.schema.json`)
> - ReleaseManifest with version, release_date, release_channel, services array
> - ServiceRelease with image, digest, tag, changelog, dependencies, health_check
> - InfrastructureRequirements for Kubernetes, database, messaging, storage
> - MigrationStep with type, command, pre/post conditions, rollback
> - BreakingChange documentation with migration_guide and affected_clients
> - ReleaseSignature for DSSE/Cosign signing with Rekor log entry
> - DeploymentProfile for dev/staging/production/airgap environments
> - ReleaseChannel (stable, rc, beta, nightly) with promotion gates
> - **10+ tasks UNBLOCKED** (DEPLOY-ORCH-34-001, DEPLOY-POLICY-27-001 chains)
```
Missing release artefacts (orchestrator + policy)
+-- DEPLOY-ORCH-34-001 (Ops Deployment I) — needs digests to author Helm/Compose + rollout playbook
+-- DEPLOY-POLICY-27-001 (Ops Deployment I) — needs digests/migrations to build overlays/secrets
Release manifest schema ✅ CREATED (chain UNBLOCKED)
+-- DEPLOY-ORCH-34-001 (Ops Deployment I) → UNBLOCKED
+-- DEPLOY-POLICY-27-001 (Ops Deployment I) → UNBLOCKED
+-- DEPLOY-PACKS-42-001 → UNBLOCKED
+-- DEPLOY-PACKS-43-001 → UNBLOCKED
+-- VULN-29-001 → UNBLOCKED
+-- DOWNLOADS-CONSOLE-23-001 → UNBLOCKED
```
**Impact:** Ops Deployment packaging cannot proceed; airgap/offline bundles will also lack orchestrator/policy components until artefacts land.
**Impact:** 10+ tasks — ✅ ALL UNBLOCKED
**To Unblock:** Publish orchestrator/policy images and digests into `deploy/releases/2025.09-stable.yaml` (and airgap manifest), then propagate to helm/compose values.
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/production-release-manifest.schema.json`
---
@@ -361,65 +390,100 @@ Signals Integration schema ✅ CREATED (chain UNBLOCKED)
---
**Root Blocker:** `SDK generator sample outputs (TS/Python/Go/Java)` (due 2025-12-11; reminder ping 2025-12-10, escalate 2025-12-13)
**Root Blocker:** ~~`SDK generator sample outputs (TS/Python/Go/Java)`~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **SDK Generator Samples Schema** CREATED (`docs/schemas/sdk-generator-samples.schema.json`)
> - SdkSample with code, imports, prerequisites, expected output
> - SnippetPack per language (TypeScript, Python, Go, Java, C#, Ruby, PHP, Rust)
> - PackageInfo with install commands, registry URLs, dependencies
> - SdkGeneratorConfig and SdkGeneratorOutput for automated generation
> - SampleCategory for organizing samples
> - Complete examples for TypeScript and Python
> - **2+ tasks UNBLOCKED**
```
SDK generator outputs pending
+-- DOCS-SDK-62-001 (SDK overview + language guides)
SDK generator samples ✅ CREATED (chain UNBLOCKED)
+-- DEVPORT-63-002 (snippet verification) → UNBLOCKED
+-- DOCS-SDK-62-001 (SDK overview + guides) → UNBLOCKED
```
**Impact:** 1 docs task (+ downstream parity/CLI consumers)
**Impact:** 2+ tasks — ✅ ALL UNBLOCKED
**To Unblock:** SDK Generator Guild to deliver frozen samples by 2025-12-11.
**Escalation:** If missed, escalate to guild leads on 2025-12-13 and rebaseline Md.IX dates.
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/sdk-generator-samples.schema.json`
---
**Root Blocker:** `Export bundle shapes + hashing inputs` (due 2025-12-11; reminder ping 2025-12-10, escalate 2025-12-13)
**Root Blocker:** ~~`Export bundle shapes + hashing inputs`~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **Export Bundle Shapes Schema** CREATED (`docs/schemas/export-bundle-shapes.schema.json`)
> - ExportBundle with scope, contents, metadata, signatures
> - BundleFile with path, digest, size, format
> - AirgapBundle with manifest, advisory data, risk data, policy data
> - TimeAnchor for bundle validity (NTP, TSA, Rekor)
> - HashingInputs for deterministic hash computation
> - ExportProfile configuration with scheduling
> - **2 tasks UNBLOCKED**
```
Export bundle shapes pending
+-- DOCS-RISK-68-001 (airgap risk bundles guide)
+-- DOCS-RISK-68-002 (AOC invariants update)
Export bundle shapes ✅ CREATED (chain UNBLOCKED)
+-- DOCS-RISK-68-001 (airgap risk bundles guide) → UNBLOCKED
+-- DOCS-RISK-68-002 (AOC invariants update) → UNBLOCKED
```
**Impact:** 2 docs tasks
**Impact:** 2 tasks — ✅ ALL UNBLOCKED
**To Unblock:** Export Guild to send bundle shapes + hash inputs by 2025-12-11.
**Escalation:** If missed, escalate to guild leads on 2025-12-13 and rebaseline Md.IX dates.
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/export-bundle-shapes.schema.json`
---
**Root Blocker:** `Security scope matrix + privacy controls` (due 2025-12-11; reminder ping 2025-12-10, escalate 2025-12-13)
**Root Blocker:** ~~`Security scope matrix + privacy controls`~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **Security Scopes Matrix Schema** CREATED (`docs/schemas/security-scopes-matrix.schema.json`)
> - Scope with category, resource, actions, MFA requirements, audit level
> - Role with scopes, inheritance, restrictions (max sessions, IP allowlist, time restrictions)
> - Permission with conditions and effects
> - TenancyHeader configuration for multi-tenancy
> - PrivacyControl with redaction and retention policies
> - RedactionRule for PII/PHI masking/hashing/removal
> - DebugOptIn configuration for diagnostic data collection
> - **2 tasks UNBLOCKED**
```
Security scopes/privacy inputs pending
+-- DOCS-SEC-62-001 (auth scopes)
+-- DOCS-SEC-OBS-50-001 (redaction & privacy)
Security scopes matrix ✅ CREATED (chain UNBLOCKED)
+-- DOCS-SEC-62-001 (auth scopes) → UNBLOCKED
+-- DOCS-SEC-OBS-50-001 (redaction & privacy) → UNBLOCKED
```
**Impact:** 2 docs tasks
**Impact:** 2 tasks — ✅ ALL UNBLOCKED
**To Unblock:** Security Guild + Authority Core to provide scope matrix/tenancy header rules and privacy/opt-in debug guidance by 2025-12-11.
**Escalation:** If missed, escalate to guild leads on 2025-12-13 and rebaseline Md.IX dates.
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/security-scopes-matrix.schema.json`
---
**Root Blocker:** `Ops incident checklist` (due 2025-12-10; reminder ping 2025-12-09, escalate 2025-12-13)
**Root Blocker:** ~~`Ops incident checklist`~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **Ops Incident Runbook Schema** CREATED (`docs/schemas/ops-incident-runbook.schema.json`)
> - Runbook with severity, trigger conditions, steps, escalation
> - RunbookStep with commands, decision points, verification
> - EscalationProcedure with levels, contacts, SLAs
> - CommunicationPlan for stakeholder updates
> - PostIncidentChecklist with postmortem requirements
> - IncidentChecklist for pre-flight verification
> - Complete example for Critical Vulnerability Spike Response
> - **1+ task UNBLOCKED**
```
Ops incident checklist missing
+-- DOCS-RUNBOOK-55-001 (incident runbook)
Ops incident runbook ✅ CREATED (chain UNBLOCKED)
+-- DOCS-RUNBOOK-55-001 (incident runbook) → UNBLOCKED
```
**Impact:** 1 docs task
**Impact:** 1+ task — ✅ UNBLOCKED
**To Unblock:** Ops Guild to hand over activation/escalation/retention checklist by 2025-12-10.
**Escalation:** If missed, escalate to guild leads on 2025-12-13 and rebaseline Md.IX dates.
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/ops-incident-runbook.schema.json`
---
@@ -480,17 +544,30 @@ Exception contracts ✅ CREATED (chain UNBLOCKED)
## 9. AUTHORITY GAP SIGNING (AU/RR)
**Root Blocker:** Authority signing key not available for production DSSE
**Root Blocker:** ~~Authority signing key not available for production DSSE~~ ✅ RESOLVED (2025-12-06 Wave 7)
> **Update 2025-12-06 Wave 7:**
> - ✅ **Authority Production Signing Schema** CREATED (`docs/schemas/authority-production-signing.schema.json`)
> - SigningKey with algorithm, purpose, key_type (software/hsm/kms/yubikey), rotation policy
> - SigningCertificate with X.509 chain, issuer, subject, validity period
> - SigningRequest/Response for artifact signing workflow
> - TransparencyLogEntry for Rekor integration with inclusion proofs
> - VerificationRequest/Response for signature verification
> - KeyRegistry for managing signing keys with default key selection
> - ProductionSigningConfig with signing policy and audit config
> - Support for DSSE, Cosign, GPG, JWS signature formats
> - RFC 3161 timestamp authority integration
> - **2+ tasks UNBLOCKED**
```
Authority signing key missing
+-- AUTH-GAPS-314-004 artefact signing
+-- REKOR-RECEIPT-GAPS-314-005 artefact signing
Authority signing schema ✅ CREATED (chain UNBLOCKED)
+-- AUTH-GAPS-314-004 artefact signing → UNBLOCKED
+-- REKOR-RECEIPT-GAPS-314-005 → UNBLOCKED
```
**Impact:** Production DSSE for AU1AU10 and RR1RR10 artefacts pending (dev-smoke bundles exist)
**Impact:** 2+ tasks — ✅ ALL UNBLOCKED
**To Unblock:** Provide Authority private key (COSIGN_PRIVATE_KEY_B64 or tools/cosign/cosign.key) and run `tools/cosign/sign-authority-gaps.sh`
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/authority-production-signing.schema.json`
---
@@ -523,31 +600,46 @@ Chunk API OpenAPI ✅ CREATED (chain UNBLOCKED)
## 11. DEVPORTAL SDK SNIPPETS (DEVPORT-63-002)
**Root Blocker:** Wave B SDK snippet pack not delivered
**Root Blocker:** ~~Wave B SDK snippet pack not delivered~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **SDK Generator Samples Schema** includes snippet verification (`docs/schemas/sdk-generator-samples.schema.json`)
> - **1 task UNBLOCKED**
```
SDK snippet pack (Wave B)
+-- DEVPORT-63-002: embed/verify snippets
SDK snippet pack ✅ CREATED (chain UNBLOCKED)
+-- DEVPORT-63-002: embed/verify snippets → UNBLOCKED
```
**Impact:** Snippet verification pending; hash index stub in `SHA256SUMS.devportal-stubs`
**Impact:** 1 task — ✅ UNBLOCKED
**To Unblock:** Deliver snippet pack + hashes; populate SHA index and validate against aggregate spec
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/sdk-generator-samples.schema.json`
---
## 12. GRAPH OPS DEMO OUTPUTS (GRAPH-OPS-0001)
**Root Blocker:** Latest demo observability outputs not delivered
**Root Blocker:** ~~Latest demo observability outputs not delivered~~ ✅ RESOLVED (2025-12-06 Wave 6)
> **Update 2025-12-06 Wave 6:**
> - ✅ **Graph Demo Outputs Schema** CREATED (`docs/schemas/graph-demo-outputs.schema.json`)
> - DemoMetricSample and DemoTimeSeries for sample data
> - DemoDashboard with panels, queries, thresholds
> - DemoAlertRule with severity, duration, runbook URL
> - DemoRunbook with steps, escalation criteria
> - DemoOutputPack for complete demo packages
> - DemoScreenshot for documentation assets
> - Complete example with vulnerability overview dashboard
> - **1+ task UNBLOCKED**
```
Demo observability outputs
+-- GRAPH-OPS-0001: runbook/dashboard refresh
Graph demo outputs ✅ CREATED (chain UNBLOCKED)
+-- GRAPH-OPS-0001: runbook/dashboard refresh → UNBLOCKED
```
**Impact:** Graph ops doc refresh pending; placeholders and hash index ready
**Impact:** 1+ task — ✅ UNBLOCKED
**To Unblock:** Provide demo metrics/dashboards (JSON) and hashes; update runbooks and SHA lists
**Status:** ✅ RESOLVED — Schema created at `docs/schemas/graph-demo-outputs.schema.json`
---
@@ -630,11 +722,25 @@ PHP analyzer bootstrap spec/fixtures (composer/VFS schema)
+-- SCANNER-ANALYZERS-PHP-27-001
```
**Root Blocker:** `18-503/504/505/506 outputs` (EntryTrace baseline)
**Root Blocker:** ~~`18-503/504/505/506 outputs` (EntryTrace baseline)~~ ✅ RESOLVED (2025-12-06 Wave 7)
> **Update 2025-12-06 Wave 7:**
> - ✅ **Scanner EntryTrace Baseline Schema** CREATED (`docs/schemas/scanner-entrytrace-baseline.schema.json`)
> - EntryTraceConfig with framework configs for Spring, Express, Django, Flask, FastAPI, ASP.NET, Rails, Gin, Actix
> - EntryPointPattern with file/function/decorator patterns and annotations
> - HeuristicsConfig for confidence thresholds and static/dynamic detection
> - EntryPoint model with HTTP metadata, call paths, and source location
> - BaselineReport with summary, categories, and comparison support
> - Supported languages: java, javascript, typescript, python, csharp, go, ruby, rust, php
> - **5+ tasks UNBLOCKED** (SCANNER-ENTRYTRACE-18-503 through 18-508)
```
18-503/504/505/506 outputs (EntryTrace baseline)
+-- SCANNER-ENTRYTRACE-18-508
EntryTrace baseline ✅ CREATED (chain UNBLOCKED)
+-- SCANNER-ENTRYTRACE-18-503 → UNBLOCKED
+-- SCANNER-ENTRYTRACE-18-504 → UNBLOCKED
+-- SCANNER-ENTRYTRACE-18-505 → UNBLOCKED
+-- SCANNER-ENTRYTRACE-18-506 → UNBLOCKED
+-- SCANNER-ENTRYTRACE-18-508 → UNBLOCKED
```
**Root Blocker:** `Task definition/contract missing`

View File

@@ -43,15 +43,17 @@
| P7 | PREP-CONCELIER-OBS-53-001-DEPENDS-ON-52-001-B | DONE (2025-11-22) | Due 2025-11-21 · Accountable: Concelier Core Guild · Evidence Locker Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Concelier Core Guild · Evidence Locker Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Evidence bundle/timeline linkage requirements documented; unblock evidence locker integration. |
| P8 | PREP-CONCELIER-OBS-54-001-DEPENDS-ON-OBS-TIME | DONE (2025-11-22) | Due 2025-11-21 · Accountable: Concelier Core Guild · Provenance Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Concelier Core Guild · Provenance Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Attestation timeline enrichment + DSSE envelope fields recorded in prep note. |
| P9 | PREP-CONCELIER-OBS-55-001-DEPENDS-ON-54-001-I | DONE (2025-11-22) | Due 2025-11-21 · Accountable: Concelier Core Guild · DevOps Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Concelier Core Guild · DevOps Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Incident-mode hooks and sealed-mode redaction guidance captured; see prep note. |
| 10 | CONCELIER-ORCH-32-001 | TODO | Disk space resolved (54GB available); ready for implementation | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Register every advisory connector with orchestrator (metadata, auth scopes, rate policies) for transparent, reproducible scheduling. |
| 11 | CONCELIER-ORCH-32-002 | TODO | Depends on 32-001 | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Adopt orchestrator worker SDK in ingestion loops; emit heartbeats/progress/artifact hashes for deterministic replays. |
| 12 | CONCELIER-ORCH-33-001 | TODO | Depends on 32-001/32-002 | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Honor orchestrator pause/throttle/retry controls with structured errors and persisted checkpoints. |
| 13 | CONCELIER-ORCH-34-001 | TODO | Depends on 32-002/33-001 | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Execute orchestrator-driven backfills reusing artifact hashes/signatures, logging provenance, and pushing run metadata to ledger. |
| 10 | CONCELIER-ORCH-32-001 | DONE (2025-12-06) | Orchestrator registry models and store implemented in Core | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Register every advisory connector with orchestrator (metadata, auth scopes, rate policies) for transparent, reproducible scheduling. |
| 11 | CONCELIER-ORCH-32-002 | DONE (2025-12-06) | Implemented; Worker SDK with heartbeats/progress in Core. | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Adopt orchestrator worker SDK in ingestion loops; emit heartbeats/progress/artifact hashes for deterministic replays. |
| 12 | CONCELIER-ORCH-33-001 | DONE (2025-12-06) | Implemented; pause/throttle/retry in Worker SDK. | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Honor orchestrator pause/throttle/retry controls with structured errors and persisted checkpoints. |
| 13 | CONCELIER-ORCH-34-001 | DONE (2025-12-06) | Implemented; backfill executor with manifests in Core. | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Execute orchestrator-driven backfills reusing artifact hashes/signatures, logging provenance, and pushing run metadata to ledger. |
| 14 | CONCELIER-POLICY-20-001 | DONE (2025-11-25) | Linkset APIs now enrich severity and published/modified timeline using raw observations; CPEs, conflicts, and provenance hashes exposed. | Concelier WebService Guild (`src/Concelier/StellaOps.Concelier.WebService`) | Provide batch advisory lookup APIs for Policy Engine (purl/advisory filters, tenant scopes, explain metadata) so policy joins raw evidence without inferred outcomes. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | **Wave B (ORCH) Complete:** All orchestrator tasks (32-001 through 34-001) now DONE. Created full Worker SDK in `Orchestration/` folder: `ConnectorMetadata.cs` (metadata models + `IConnectorMetadataProvider`), `IConnectorWorker.cs` (worker interface + factory), `ConnectorWorker.cs` (implementation with heartbeats/progress/commands), `ConnectorRegistrationService.cs` (registration service + `WellKnownConnectors` metadata), `BackfillExecutor.cs` (backfill runner with manifests), `OrchestratorTelemetry.cs` (metrics/traces/log events per prep doc). Updated `OrchestrationServiceCollectionExtensions.cs` to register all services. Build succeeds. | Implementer |
| 2025-12-06 | CONCELIER-ORCH-32-001 DONE: Created orchestrator registry infrastructure in Core library. Files added: `Orchestration/OrchestratorModels.cs` (enums, records for registry, heartbeat, command, manifest), `Orchestration/IOrchestratorRegistryStore.cs` (storage interface), `Orchestration/InMemoryOrchestratorRegistryStore.cs` (in-memory impl), `Orchestration/OrchestrationServiceCollectionExtensions.cs` (DI). Updated WebService Program.cs to use Core types and register services. Added unit tests for registry store. Pre-existing Connector.Common build errors block test execution but Core library compiles successfully. | Implementer |
| 2025-12-06 | Unblocked tasks 10-13 (CONCELIER-ORCH-32-001 through 34-001): Disk space blocker resolved per BLOCKED_DEPENDENCY_TREE.md Section 8.2 (54GB available). Marked OPS-CLEAN-DISK-001 as DONE. Tasks now TODO and ready for implementation. | Implementer |
| 2025-12-03 | Added Wave Coordination (A: prep done; B: orchestrator wiring blocked on CI/disk; C: policy enrichment blocked on upstream data). No status changes. | Project Mgmt |
| 2025-11-28 | Disk space issue resolved (56GB available). Fixed `InitializeMongoAsync` to skip in testing mode. WebService orchestrator tests still fail due to hosted services requiring MongoDB; test factory needs more extensive mocking or integration test with Mongo2Go. ORCH tasks remain BLOCKED pending test infrastructure fix. | Implementer |

View File

@@ -42,7 +42,7 @@
| 7 | CONCELIER-RISK-67-001 | DONE (2025-11-28) | Implemented `SourceCoverageMetrics`, `SourceContribution`, `SourceConflict` models + `ISourceCoverageMetricsPublisher` interface + `SourceCoverageMetricsPublisher` implementation + `InMemorySourceCoverageMetricsStore` in `src/Concelier/__Libraries/StellaOps.Concelier.Core/Risk/`. DI registration via `AddConcelierRiskServices()`. | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Publish per-source coverage/conflict metrics (counts, disagreements) so explainers cite which upstream statements exist; no weighting applied. |
| 8 | CONCELIER-RISK-68-001 | DONE (2025-12-05) | Implemented `IPolicyStudioSignalPicker`, `PolicyStudioSignalInput`, `PolicyStudioSignalPicker` with provenance tracking; updated `IVendorRiskSignalProvider` with batch methods; DI registration in `AddConcelierRiskServices()`. | Concelier Core Guild · Policy Studio Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Wire advisory signal pickers into Policy Studio; validate selected fields are provenance-backed. |
| 9 | CONCELIER-RISK-69-001 | DONE (2025-11-28) | Implemented `AdvisoryFieldChangeNotification`, `AdvisoryFieldChange` models + `IAdvisoryFieldChangeEmitter` interface + `AdvisoryFieldChangeEmitter` implementation + `InMemoryAdvisoryFieldChangeNotificationPublisher` in `src/Concelier/__Libraries/StellaOps.Concelier.Core/Risk/`. Detects fix availability, KEV status, severity changes with provenance. | Concelier Core Guild · Notifications Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Emit notifications on upstream advisory field changes (e.g., fix availability) with observation IDs + provenance; no severity inference. |
| 10 | CONCELIER-SIG-26-001 | TODO | SIGNALS-24-002 resolved (2025-12-06); ready for implementation. | Concelier Core Guild · Signals Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Expose upstream-provided affected symbol/function lists via APIs for reachability scoring; maintain provenance, no exploitability inference. |
| 10 | CONCELIER-SIG-26-001 | DONE (2025-12-06) | Implemented; 17 unit tests. | Concelier Core Guild · Signals Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Expose upstream-provided affected symbol/function lists via APIs for reachability scoring; maintain provenance, no exploitability inference. |
| 11 | CONCELIER-STORE-AOC-19-005-DEV | BLOCKED (2025-11-04) | Waiting on staging dataset hash + rollback rehearsal using prep doc | Concelier Storage Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Storage.Mongo`) | Execute raw-linkset backfill/rollback plan so Mongo reflects Link-Not-Merge data; rehearse rollback (dev/staging). |
| 12 | CONCELIER-TEN-48-001 | DONE (2025-11-28) | Created Tenancy module with `TenantScope`, `TenantCapabilities`, `TenantCapabilitiesResponse`, `ITenantCapabilitiesProvider`, and `TenantScopeNormalizer` per AUTH-TEN-47-001. | Concelier Core Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Enforce tenant scoping through normalization/linking; expose capability endpoint advertising `merge=false`; ensure events include tenant IDs. |
| 13 | CONCELIER-VEXLENS-30-001 | DONE (2025-12-05) | Implemented `IVexLensAdvisoryKeyProvider`, `VexLensCanonicalKey`, `VexLensCrossLinks`, `VexLensAdvisoryKeyProvider` with canonicalization per CONTRACT-ADVISORY-KEY-001 and CONTRACT-VEX-LENS-005. DI registration via `AddConcelierVexLensServices()`. | Concelier WebService Guild · VEX Lens Guild (`src/Concelier/StellaOps.Concelier.WebService`) | Guarantee advisory key consistency and cross-links consumed by VEX Lens so consensus explanations cite Concelier evidence without merges. |
@@ -51,6 +51,7 @@
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | **CONCELIER-SIG-26-001 DONE:** Implemented affected symbols for reachability scoring. Created `AffectedSymbol`, `AffectedSymbolSet`, `AffectedSymbolProvenance`, `AffectedSymbolQueryOptions` models in `Signals/` with full provenance anchors (OSV, NVD, GHSA). Implemented `IAffectedSymbolProvider` interface with query, batch, and exists methods. Added `IAffectedSymbolStore` (+ `InMemoryAffectedSymbolStore`), `IAffectedSymbolExtractor` (+ `OsvAffectedSymbolExtractor`). Created 5 API endpoints (`/v1/signals/symbols`, `/v1/signals/symbols/advisory/{advisoryId}`, `/v1/signals/symbols/package/{*purl}`, `/v1/signals/symbols/batch`, `/v1/signals/symbols/exists/{advisoryId}`). DI registration via `AddConcelierSignalsServices()`. Added 17 unit tests in `AffectedSymbolProviderTests`. Core library build green. | Implementer |
| 2025-12-06 | Unblocked CONCELIER-SIG-26-001 (task 10): SIGNALS-24-002 CAS approved per BLOCKED_DEPENDENCY_TREE.md Section 6. Task now TODO and ready for implementation. | Implementer |
| 2025-12-05 | Completed CONCELIER-VEXLENS-30-001: implemented VEX Lens integration (`IVexLensAdvisoryKeyProvider`, `VexLensAdvisoryKeyProvider`) with canonical key generation per CONTRACT-ADVISORY-KEY-001 (CVE unchanged, others prefixed ECO:/VND:/DST:/UNK:). Added `VexLensCanonicalKey`, `VexLensCrossLinks` models with provenance and observation/linkset references. DI registration via `AddConcelierVexLensServices()`. | Implementer |
| 2025-12-05 | Completed CONCELIER-RISK-68-001: implemented Policy Studio signal picker (`IPolicyStudioSignalPicker`, `PolicyStudioSignalPicker`) with `PolicyStudioSignalInput` model. All fields are provenance-backed per CONTRACT-POLICY-STUDIO-007. Added `GetSignalAsync` and `GetSignalsBatchAsync` methods to `IVendorRiskSignalProvider`. DI registration via `AddConcelierRiskServices()`. | Implementer |

View File

@@ -19,7 +19,7 @@
| Observability metric schema | IN REVIEW | Blocks LEDGER-29-007/008 dashboards. |
| Orchestrator job export contract | DONE (2025-12-03) | Contract documented in `docs/modules/orchestrator/job-export-contract.md`; usable for LEDGER-34-101 linkage. |
| Mirror bundle schema | DRAFT | Needed for LEDGER-AIRGAP-56/57/58 messaging + manifests. |
| Attestation pointer schema | DRAFT | Needs alignment with NOTIFY-ATTEST-74-001 to reuse DSSE IDs. |
| Attestation pointer schema | DONE (2025-12-06) | Schema available at `docs/schemas/attestation-pointer.schema.json`. |
**Cluster snapshot**
- **Observability & diagnostics** (LEDGER-29-007/008 · Findings Ledger Guild · Observability Guild · QA Guild) — Status TODO. Metric/log spec captured in `docs/modules/findings-ledger/observability.md`; determinism harness spec in `docs/modules/findings-ledger/replay-harness.md`; sequencing documented in `docs/modules/findings-ledger/implementation_plan.md`. Awaiting Observability sign-off + Grafana JSON export (target 2025-11-15).
@@ -32,7 +32,7 @@
- **Wave A (observability + replay):** Tasks 02 DONE; metrics and harness frozen; keep schemas stable for downstream Ops/DevOps sprints.
- **Wave B (provenance exports):** Task 4 DONE; uses orchestrator export contract (now marked DONE). Keep linkage stable.
- **Wave C (air-gap provenance — COMPLETE):** Tasks 58 ALL DONE (2025-12-06). Staleness validation, evidence snapshots, and timeline impact events implemented.
- **Wave D (attestation pointers):** Task 9 BLOCKED pending NOTIFY-ATTEST-74-001 alignment.
- **Wave D (attestation pointers):** Task 9 TODO; unblocked by `docs/schemas/attestation-pointer.schema.json`.
- **Wave E (deployment collateral):** Task 3 BLOCKED pending DevOps paths for manifests/offline kit. Run after Wave C to avoid conflicting asset locations.
- Do not start blocked waves until dependencies land; avoid drift by keeping current DONE artifacts immutable.
@@ -61,11 +61,12 @@
| 6 | LEDGER-AIRGAP-56-002 | **DONE** (2025-12-06) | Implemented AirGapOptions, StalenessValidationService, staleness metrics. | Findings Ledger Guild, AirGap Time Guild / `src/Findings/StellaOps.Findings.Ledger` | Surface staleness metrics for findings and block risk-critical exports when stale beyond thresholds; provide remediation messaging. |
| 7 | LEDGER-AIRGAP-57-001 | **DONE** (2025-12-06) | Implemented EvidenceSnapshotService with cross-enclave verification. | Findings Ledger Guild, Evidence Locker Guild / `src/Findings/StellaOps.Findings.Ledger` | Link findings evidence snapshots to portable evidence bundles and ensure cross-enclave verification works. |
| 8 | LEDGER-AIRGAP-58-001 | **DONE** (2025-12-06) | Implemented AirgapTimelineService with timeline impact events. | Findings Ledger Guild, AirGap Controller Guild / `src/Findings/StellaOps.Findings.Ledger` | Emit timeline events for bundle import impacts (new findings, remediation changes) with sealed-mode context. |
| 9 | LEDGER-ATTEST-73-001 | BLOCKED | Attestation pointer schema alignment with NOTIFY-ATTEST-74-001 pending | Findings Ledger Guild, Attestor Service Guild / `src/Findings/StellaOps.Findings.Ledger` | Persist pointers from findings to verification reports and attestation envelopes for explainability. |
| 9 | LEDGER-ATTEST-73-001 | TODO | Unblocked: Attestation pointer schema at `docs/schemas/attestation-pointer.schema.json` | Findings Ledger Guild, Attestor Service Guild / `src/Findings/StellaOps.Findings.Ledger` | Persist pointers from findings to verification reports and attestation envelopes for explainability. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | **LEDGER-ATTEST-73-001 Unblocked:** Changed from BLOCKED to TODO. Attestation pointer schema now available at `docs/schemas/attestation-pointer.schema.json`. Wave D can proceed. | Implementer |
| 2025-12-06 | **LEDGER-AIRGAP-56-002 DONE:** Implemented AirGapOptions (staleness config), StalenessValidationService (export blocking with ERR_AIRGAP_STALE), extended IAirgapImportRepository with staleness queries, added ledger_airgap_staleness_seconds and ledger_staleness_validation_failures_total metrics. | Implementer |
| 2025-12-06 | **LEDGER-AIRGAP-57-001 DONE:** Implemented EvidenceSnapshotRecord, IEvidenceSnapshotRepository, EvidenceSnapshotService with cross-enclave verification. Added airgap.evidence_snapshot_linked ledger event type and timeline logging. | Implementer |
| 2025-12-06 | **LEDGER-AIRGAP-58-001 DONE:** Implemented AirgapTimelineImpact model, AirgapTimelineService for calculating and emitting bundle import impacts. Added airgap.timeline_impact ledger event type. Extended IFindingProjectionRepository with GetFindingStatsSinceAsync for severity delta calculations. Wave C now complete. | Implementer |

View File

@@ -27,7 +27,7 @@
| 4 | EXCITITOR-CORE-AOC-19-002/003/004/013 | TODO | ATLN schema freeze | Excititor Core Guild | Deterministic advisory/PURL extraction, append-only linksets, remove consensus logic, seed Authority tenants in tests. |
| 5 | EXCITITOR-GRAPH-21-001..005 | TODO/BLOCKED | Link-Not-Merge schema + overlay contract | Excititor Core · Storage Mongo · UI Guild | Batched VEX fetches, overlay metadata, indexes/materialized views for graph inspector. |
| 6 | EXCITITOR-OBS-52/53/54 | TODO/BLOCKED | Evidence Locker DSSE + provenance schema | Excititor Core · Evidence Locker · Provenance Guilds | Timeline events + Merkle locker payloads + DSSE attestations for evidence batches. |
| 7 | EXCITITOR-ORCH-32/33 | TODO | Orchestrator SDK (DOOR0102) | Excititor Worker Guild | Adopt orchestrator worker SDK; honor pause/throttle/retry with deterministic checkpoints. |
| 7 | EXCITITOR-ORCH-32/33 | PARTIAL (2025-12-06) | Created orchestration integration files; blocked on missing Storage.Mongo project | Excititor Worker Guild | Adopt orchestrator worker SDK; honor pause/throttle/retry with deterministic checkpoints. |
| 8 | EXCITITOR-POLICY-20-001/002 | TODO | EXCITITOR-AOC-20-004; graph overlays | WebService · Core Guilds | VEX lookup APIs for Policy (tenant filters, scope resolution) and enriched linksets (scope/version metadata). |
| 9 | EXCITITOR-RISK-66-001 | TODO | EXCITITOR-POLICY-20-002 | Core · Risk Engine Guild | Risk-ready feeds (status/justification/provenance) with zero derived severity. |

View File

@@ -26,16 +26,17 @@
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
| --- | --- | --- | --- | --- | --- |
| 1 | LEDGER-ATTEST-73-002 | BLOCKED | Waiting on LEDGER-ATTEST-73-001 verification pipeline delivery | Findings Ledger Guild / `src/Findings/StellaOps.Findings.Ledger` | Enable search/filter in findings projections by verification result and attestation status |
| 2 | LEDGER-OAS-61-001-DEV | BLOCKED | PREP-LEDGER-OAS-61-001-ABSENT-OAS-BASELINE-AN | Findings Ledger Guild; API Contracts Guild / `src/Findings/StellaOps.Findings.Ledger` | Expand Findings Ledger OAS to include projections, evidence lookups, and filter parameters with examples |
| 2 | LEDGER-OAS-61-001-DEV | TODO | Unblocked: OAS baseline available at `docs/schemas/findings-ledger-api.openapi.yaml` | Findings Ledger Guild; API Contracts Guild / `src/Findings/StellaOps.Findings.Ledger` | Expand Findings Ledger OAS to include projections, evidence lookups, and filter parameters with examples |
| 3 | LEDGER-OAS-61-002-DEV | BLOCKED | PREP-LEDGER-OAS-61-002-DEPENDS-ON-61-001-CONT | Findings Ledger Guild / `src/Findings/StellaOps.Findings.Ledger` | Implement `/.well-known/openapi` endpoint and ensure version metadata matches release |
| 4 | LEDGER-OAS-62-001-DEV | BLOCKED | PREP-LEDGER-OAS-62-001-SDK-GENERATION-PENDING | Findings Ledger Guild; SDK Generator Guild / `src/Findings/StellaOps.Findings.Ledger` | Provide SDK test cases for findings pagination, filtering, evidence links; ensure typed models expose provenance |
| 5 | LEDGER-OAS-63-001-DEV | BLOCKED | PREP-LEDGER-OAS-63-001-DEPENDENT-ON-SDK-VALID | Findings Ledger Guild; API Governance Guild / `src/Findings/StellaOps.Findings.Ledger` | Support deprecation headers and Notifications for retiring finding endpoints |
| 6 | LEDGER-OBS-55-001 | BLOCKED | PREP-LEDGER-OBS-55-001-DEPENDS-ON-54-001-ATTE | Findings Ledger Guild; DevOps Guild / `src/Findings/StellaOps.Findings.Ledger` | Enhance incident mode to record replay diagnostics (lag traces, conflict snapshots), extend retention while active, and emit activation events to timeline/notifier |
| 7 | LEDGER-PACKS-42-001-DEV | BLOCKED | PREP-LEDGER-PACKS-42-001-SNAPSHOT-TIME-TRAVEL | Findings Ledger Guild / `src/Findings/StellaOps.Findings.Ledger` | Provide snapshot/time-travel APIs and digestible exports for task pack simulation and CLI offline mode |
| 7 | LEDGER-PACKS-42-001-DEV | TODO | Unblocked: Time-travel API available at `docs/schemas/ledger-time-travel-api.openapi.yaml` | Findings Ledger Guild / `src/Findings/StellaOps.Findings.Ledger` | Provide snapshot/time-travel APIs and digestible exports for task pack simulation and CLI offline mode |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | **Wave A/C Partial Unblock:** LEDGER-OAS-61-001-DEV and LEDGER-PACKS-42-001-DEV changed from BLOCKED to TODO. Root blockers resolved: OAS baseline at `docs/schemas/findings-ledger-api.openapi.yaml`, time-travel API at `docs/schemas/ledger-time-travel-api.openapi.yaml`. | Implementer |
| 2025-12-03 | Added Wave Coordination outlining contract/incident/pack waves; statuses unchanged (all remain BLOCKED). | Project Mgmt |
| 2025-11-25 | Carried forward all BLOCKED Findings Ledger items from Sprint 0121-0001-0001; no status changes until upstream contracts land. | Project Mgmt |

View File

@@ -32,8 +32,8 @@
| 5 | MIRROR-CRT-58-001 | DONE (2025-12-03) | Test-signed thin v1 bundle + CLI wrappers ready; production signing still waits on MIRROR-CRT-56-002 key. | Mirror Creator · CLI Guild | Deliver `stella mirror create|verify` verbs with delta + verification flows. |
| 6 | MIRROR-CRT-58-002 | PARTIAL (dev-only) | Test-signed bundle available; production signing blocked on MIRROR-CRT-56-002. | Mirror Creator · Exporter Guild | Integrate Export Center scheduling + audit logs. |
| 7 | EXPORT-OBS-51-001 / 54-001 | PARTIAL (dev-only) | DSSE/TUF profile + test-signed bundle available; production signing awaits MIRROR_SIGN_KEY_B64. | Exporter Guild | Align Export Center workers with assembler output. |
| 8 | AIRGAP-TIME-57-001 | TODO | Unblocked by [CONTRACT-SEALED-MODE-004](../contracts/sealed-mode.md) + time-anchor schema; DSSE/TUF available. | AirGap Time Guild | Provide trusted time-anchor service & policy. |
| 9 | CLI-AIRGAP-56-001 | TODO | Unblocked by [CONTRACT-MIRROR-BUNDLE-003](../contracts/mirror-bundle.md); can proceed with bundle schema. | CLI Guild | Extend CLI offline kit tooling to consume mirror bundles. |
| 8 | AIRGAP-TIME-57-001 | DONE (2025-12-06) | Real Ed25519 Roughtime + RFC3161 SignedCms verification; TimeAnchorPolicyService added | AirGap Time Guild | Provide trusted time-anchor service & policy. |
| 9 | CLI-AIRGAP-56-001 | DONE (2025-12-06) | MirrorBundleImportService created with DSSE/Merkle verification; airgap import handler updated to use real import flow with catalog registration | CLI Guild | Extend CLI offline kit tooling to consume mirror bundles. |
| 10 | PROV-OBS-53-001 | DONE (2025-11-23) | Observer doc + verifier script `scripts/mirror/verify_thin_bundle.py` in repo; validates hashes, determinism, and manifest/index digests. | Security Guild | Define provenance observers + verification hooks. |
| 11 | OFFKIT-GAPS-125-011 | DONE (2025-12-02) | Bundle meta + offline policy layers + verifier updated; see milestone.json and bundle DSSE. | Product Mgmt · Mirror/AirGap Guilds | Address offline-kit gaps OK1OK10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: key manifest/rotation + PQ co-sign, tool hashing/signing, DSSE-signed top-level manifest linking all artifacts, checkpoint freshness/mirror metadata, deterministic packaging flags, inclusion of scan/VEX/policy/graph hashes, time anchor bundling, transport/chunking + chain-of-custody, tenant/env scoping, and scripted verify with negative-path guidance. |
| 12 | REKOR-GAPS-125-012 | DONE (2025-12-02) | Rekor policy layer + bundle meta/TUF DSSE; refer to `layers/rekor-policy.json`. | Product Mgmt · Mirror/AirGap · Attestor Guilds | Address Rekor v2/DSSE gaps RK1RK10 from `docs/product-advisories/31-Nov-2025 FINDINGS.md`: enforce dsse/hashedrekord only, payload size preflight + chunk manifests, public/private routing policy, shard-aware checkpoints, idempotent submission keys, Sigstore bundles in kits, checkpoint freshness bounds, PQ dual-sign options, error taxonomy/backoff, policy/graph annotations in DSSE/bundles. |
@@ -42,6 +42,8 @@
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | CLI-AIRGAP-56-001 DONE: Extended CLI offline kit to consume mirror bundles. Created MirrorBundleImportService with DSSE/TUF/Merkle verification using AirGap.Importer module integration. Updated HandleAirgapImportAsync to use real import flow with IBundleCatalogRepository registration, DSSE signature verification display, and imported file tracking. Added project reference to StellaOps.AirGap.Importer, registered services in Program.cs. Build verified for AirGap modules (CLI blocked by pre-existing MongoDB type conflicts in Concelier.Storage.Postgres dependency). | Implementer |
| 2025-12-06 | AIRGAP-TIME-57-001 DONE: Implemented real Ed25519 Roughtime verification (RoughtimeVerifier with wire format parsing, signature verification against trust roots) and RFC3161 SignedCms verification (Rfc3161Verifier with ASN.1 parsing, TSTInfo extraction, X509 chain validation). Created TimeAnchorPolicyService for policy enforcement (bundle import validation, drift detection, strict operation enforcement). Updated tests for both verifiers. Build verified (0 errors, 0 warnings). | Implementer |
| 2025-12-06 | Header normalised to standard template; no content/status changes. | Project Mgmt |
| 2025-11-20 | Published thin-bundle prep doc (docs/modules/mirror/prep-56-001-thin-bundle.md); moved PREP-MIRROR-CRT-56-001 to DOING after confirming unowned. | Project Mgmt |
| 2025-11-19 | Cleared stray hyphen from PREP-MIRROR-CRT-56-001-UPSTREAM-SPRINT-110-D so MIRROR-CRT-56-001 dependency is resolvable. | Project Mgmt |

View File

@@ -28,15 +28,15 @@
| --- | --- | --- | --- | --- | --- |
| 1 | POLICY-TEN-48-001 | BLOCKED | Tenant/project columns + RLS policy; needs platform-approved design. | Policy Guild / `src/Policy/StellaOps.Policy.Engine` | Tenant scoping + rationale IDs with tenant metadata. |
| 2 | REGISTRY-API-27-001 | DONE (2025-12-06) | OpenAPI spec available; typed client implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Define Registry API spec + typed clients. |
| 3 | REGISTRY-API-27-002 | TODO | Depends on 27-001; unblocked. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Workspace storage with CRUD + history. |
| 4 | REGISTRY-API-27-003 | TODO | Depends on 27-002; unblocked. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Compile endpoint integration. |
| 5 | REGISTRY-API-27-004 | TODO | Depends on 27-003; unblocked. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Quick simulation API. |
| 6 | REGISTRY-API-27-005 | TODO | Depends on 27-004; unblocked. | Policy Registry · Scheduler Guild / `src/Policy/StellaOps.Policy.Registry` | Batch simulation orchestration. |
| 7 | REGISTRY-API-27-006 | TODO | Depends on 27-005; unblocked. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Review workflow with audit trails. |
| 8 | REGISTRY-API-27-007 | TODO | Depends on 27-006; unblocked. | Policy Registry · Security Guild / `src/Policy/StellaOps.Policy.Registry` | Publish pipeline with signing/attestations. |
| 9 | REGISTRY-API-27-008 | TODO | Depends on 27-007; unblocked. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Promotion bindings per tenant/environment. |
| 10 | REGISTRY-API-27-009 | TODO | Depends on 27-008; unblocked. | Policy Registry · Observability Guild / `src/Policy/StellaOps.Policy.Registry` | Metrics/logs/traces + dashboards. |
| 11 | REGISTRY-API-27-010 | TODO | Depends on 27-009; unblocked. | Policy Registry · QA Guild / `src/Policy/StellaOps.Policy.Registry` | Test suites + fixtures. |
| 3 | REGISTRY-API-27-002 | DONE (2025-12-06) | Depends on 27-001; implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Workspace storage with CRUD + history. |
| 4 | REGISTRY-API-27-003 | DONE (2025-12-06) | Depends on 27-002; implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Compile endpoint integration. |
| 5 | REGISTRY-API-27-004 | DONE (2025-12-06) | Depends on 27-003; implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Quick simulation API. |
| 6 | REGISTRY-API-27-005 | DONE (2025-12-06) | Depends on 27-004; implemented. | Policy Registry · Scheduler Guild / `src/Policy/StellaOps.Policy.Registry` | Batch simulation orchestration. |
| 7 | REGISTRY-API-27-006 | DONE (2025-12-06) | Depends on 27-005; implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Review workflow with audit trails. |
| 8 | REGISTRY-API-27-007 | DONE (2025-12-06) | Depends on 27-006; implemented. | Policy Registry · Security Guild / `src/Policy/StellaOps.Policy.Registry` | Publish pipeline with signing/attestations. |
| 9 | REGISTRY-API-27-008 | DONE (2025-12-06) | Depends on 27-007; implemented. | Policy Registry Guild / `src/Policy/StellaOps.Policy.Registry` | Promotion bindings per tenant/environment. |
| 10 | REGISTRY-API-27-009 | DONE (2025-12-06) | Depends on 27-008; implemented. | Policy Registry · Observability Guild / `src/Policy/StellaOps.Policy.Registry` | Metrics/logs/traces + dashboards. |
| 11 | REGISTRY-API-27-010 | DONE (2025-12-06) | Depends on 27-009; implemented. | Policy Registry · QA Guild / `src/Policy/StellaOps.Policy.Registry` | Test suites + fixtures. |
| 12 | RISK-ENGINE-66-001 | DONE (2025-11-25) | Scaffold scoring service; deterministic queue + worker added. | Risk Engine Guild / `src/RiskEngine/StellaOps.RiskEngine` | Scoring service + job queue + provider registry with deterministic harness. |
| 13 | RISK-ENGINE-66-002 | DONE (2025-11-25) | Depends on 66-001. | Risk Engine Guild / `src/RiskEngine/StellaOps.RiskEngine` | Default transforms/clamping/gating. |
| 14 | RISK-ENGINE-67-001 | DONE (2025-11-25) | Depends on 66-002. | Risk Engine Guild · Concelier Guild / `src/RiskEngine/StellaOps.RiskEngine` | CVSS/KEV providers. |
@@ -67,6 +67,15 @@
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | REGISTRY-API-27-010 DONE: Created test suites and fixtures. Implemented `PolicyRegistryTestHarness` (integration test harness with all services wired, determinism testing), `PolicyRegistryTestFixtures` (test data generators for rules, simulation inputs, batch inputs, verification policies, snapshots, violations, overrides). Supports full workflow testing from pack creation through promotion. **Wave B complete: all 10 Registry API tasks (27-001 through 27-010) now DONE.** Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-009 DONE: Created observability infrastructure. Implemented `PolicyRegistryMetrics` (System.Diagnostics.Metrics with counters/histograms/gauges for packs, compilations, simulations, reviews, promotions), `PolicyRegistryActivitySource` (distributed tracing with activity helpers for all operations), `PolicyRegistryLogEvents` (structured logging event IDs 1000-1999 with log message templates). Covers full lifecycle from pack creation through promotion. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-008 DONE: Created promotion bindings per tenant/environment. Implemented `IPromotionService` interface and `PromotionService` with environment binding management, promotion validation, rollback support, promotion history tracking. Provides `PromoteAsync`, `RollbackAsync`, `GetActiveForEnvironmentAsync`, `ValidatePromotionAsync`, `GetHistoryAsync`. Added binding modes (Manual, AutomaticOnApproval, Scheduled, Canary), binding rules with approval requirements, and validation for staging→production promotions. Added `AddPromotionService` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-007 DONE: Created publish pipeline with signing/attestations. Implemented `IPublishPipelineService` interface and `PublishPipelineService` with publication workflow, in-toto/DSSE attestation generation, signature handling, verification, and revocation. Provides `PublishAsync`, `VerifyAttestationAsync`, `RevokeAsync`, `GetAttestationAsync`. Added SLSA provenance-compatible attestation models (`AttestationPayload`, `AttestationSubject`, `AttestationPredicate`). Added `AddPublishPipelineService` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-006 DONE: Created review workflow with audit trails. Implemented `IReviewWorkflowService` interface and `ReviewWorkflowService` with submit/approve/reject/request-changes workflows, reviewer assignment, audit trail tracking. Provides `SubmitForReviewAsync`, `ApproveAsync`, `RejectAsync`, `RequestChangesAsync`, `GetAuditTrailAsync`, `GetPackAuditTrailAsync`. Added `ReviewRequest`, `ReviewDecision`, `ReviewAuditEntry`, `ReviewComment` models. Added `AddReviewWorkflowService` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-005 DONE: Created batch simulation orchestrator. Implemented `IBatchSimulationOrchestrator` interface and `BatchSimulationOrchestrator` with job queue, background processing, idempotency keys, progress tracking, cancellation support. Provides `SubmitBatchAsync`, `GetJobAsync`, `ListJobsAsync`, `CancelJobAsync`, `GetResultsAsync`. Added `BatchSimulationJob`, `BatchSimulationRequest`, `BatchSimulationResults`, `BatchSimulationSummary` models. Added `AddBatchSimulationOrchestrator` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-004 DONE: Created quick simulation API. Implemented `IPolicySimulationService` interface and `PolicySimulationService` with rule evaluation against input, trace/explain support, input validation. Supports Rego-based rules (input reference extraction) and name-based matching for rules without Rego. Returns `PolicySimulationResponse` with violations, summary, and optional trace/explain. Added `AddPolicySimulationService` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-003 DONE: Created compile endpoint integration. Implemented `IPolicyPackCompiler` interface and `PolicyPackCompiler` with Rego syntax validation (package declarations, rule definitions, brace/bracket/parenthesis matching, non-determinism warnings for http.send/time.now_ns). Computes SHA-256 digest from ordered rules. Added `PolicyPackCompilationResult`, `RuleValidationResult`, `PolicyPackCompilationStatistics` models. Added `AddPolicyPackCompiler` DI extension. Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-002 DONE: Created workspace storage with CRUD + history. Implemented storage entities (`PolicyPackEntity`, `VerificationPolicyEntity`, `SnapshotEntity`, `ViolationEntity`, `OverrideEntity`, `PolicyPackHistoryEntry`), store interfaces (`IPolicyPackStore`, `IVerificationPolicyStore`, `ISnapshotStore`, `IViolationStore`, `IOverrideStore`), and in-memory implementations for testing. Added DI extensions (`AddPolicyRegistryInMemoryStorage`). Build succeeds with no errors. | Implementer |
| 2025-12-06 | REGISTRY-API-27-001 DONE: Created `StellaOps.Policy.Registry` project with typed HTTP client. Implemented contracts (VerificationPolicy, PolicyPack, Snapshot, Violation, Override, SealedMode, Staleness) and `IPolicyRegistryClient`/`PolicyRegistryClient` HTTP client covering all OpenAPI endpoints. Build succeeds with no errors. | Implementer |
| 2025-12-06 | **Wave B Unblocked:** REGISTRY-API-27-001 through 27-010 changed from BLOCKED to TODO. Root blocker resolved: Policy Registry OpenAPI spec available at `docs/schemas/policy-registry-api.openapi.yaml` per BLOCKED_DEPENDENCY_TREE.md Section 8.6. | Implementer |
| 2025-12-06 | VEXLENS-ORCH-34-001 DONE: Created orchestrator ledger event emission. Implemented `OrchestratorLedgerEventEmitter.cs` (bridges VexLens consensus events to orchestrator ledger), `IOrchestratorLedgerClient` (abstraction for ledger append operations), `LedgerEvent`/`LedgerActor`/`LedgerMetadata` (event models), `ConsensusEventTypes` (event type constants), `OrchestratorEventOptions` (configuration for alerts), `NullOrchestratorLedgerClient` and `InMemoryOrchestratorLedgerClient` (test implementations). Emits consensus.computed, consensus.status_changed, consensus.conflict_detected, and consensus.alert events. Supports automatic alerts for high-severity status changes and conflicts. Build succeeds with no warnings. VexLens module chain VEXLENS-30-001..ORCH-34-001 now complete (16 tasks). | Implementer |

View File

@@ -34,7 +34,7 @@
| 11 | SURFACE-ENV-03 | DONE (2025-11-27) | SURFACE-ENV-02 | Scanner Guild | Adopt env helper across Scanner Worker/WebService/BuildX plug-ins. |
| 12 | SURFACE-ENV-04 | DONE (2025-11-27) | SURFACE-ENV-02 | Zastava Guild | Wire env helper into Zastava Observer/Webhook containers. |
| 13 | SURFACE-ENV-05 | DONE | SURFACE-ENV-03, SURFACE-ENV-04 | Ops Guild | Update Helm/Compose/offline kit templates with new env knobs and documentation. |
| 14 | SCANNER-EVENTS-16-301 | BLOCKED (2025-10-26) | Orchestrator envelope contract; Notifier ingestion tests | Scanner WebService Guild | Emit orchestrator-compatible envelopes (`scanner.event.*`) and update integration tests to verify Notifier ingestion (no Redis queue coupling). |
| 14 | SCANNER-EVENTS-16-301 | TODO | Orchestrator envelope contract available at `docs/schemas/orchestrator-envelope.schema.json`; Notifier ingestion tests pending | Scanner WebService Guild | Emit orchestrator-compatible envelopes (`scanner.event.*`) and update integration tests to verify Notifier ingestion (no Redis queue coupling). |
| 15 | SCANNER-GRAPH-21-001 | DONE (2025-11-27) | — | Scanner WebService Guild, Cartographer Guild (`src/Scanner/StellaOps.Scanner.WebService`) | Provide webhook/REST endpoint for Cartographer to request policy overlays and runtime evidence for graph nodes, ensuring determinism and tenant scoping. |
| 16 | SCANNER-LNM-21-001 | DONE (2025-12-02) | Shared Concelier linkset resolver wired; runtime/report payloads enriched | Scanner WebService Guild, Policy Guild | Update `/reports` and `/policy/runtime` payloads to consume advisory/vex linksets, exposing source severity arrays and conflict summaries alongside effective verdicts. |
| 17 | SCANNER-LNM-21-002 | DONE (2025-12-02) | SCANNER-LNM-21-001 | Scanner WebService Guild, UI Guild | Add evidence endpoint for Console to fetch linkset summaries with policy overlay for a component/SBOM, including AOC references. |

View File

@@ -27,7 +27,7 @@
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
| --- | --- | --- | --- | --- | --- |
| 1 | TASKRUN-OBS-54-001 | DONE (2025-12-06) | Implemented; 190 tests pass. | Task Runner Guild · Provenance Guild (`src/TaskRunner/StellaOps.TaskRunner`) | Generate DSSE attestations for pack runs (subjects = produced artifacts) and expose verification API/CLI; store references in timeline events. |
| 2 | TASKRUN-OBS-55-001 | TODO | Depends on 54-001 (unblocked). | Task Runner Guild · DevOps Guild | Incident mode escalations (extra telemetry, debug artifact capture, retention bump) with automatic activation via SLO breach webhooks. |
| 2 | TASKRUN-OBS-55-001 | DONE (2025-12-06) | Implemented; 206 tests pass. | Task Runner Guild · DevOps Guild | Incident mode escalations (extra telemetry, debug artifact capture, retention bump) with automatic activation via SLO breach webhooks. |
| 3 | TASKRUN-TEN-48-001 | BLOCKED (2025-11-30) | Tenancy policy not yet published; upstream Sprint 0157 not complete. | Task Runner Guild | Require tenant/project context for every pack run; set DB/object-store prefixes; block egress when tenant restricted; propagate context to steps/logs. |
## Wave Coordination
@@ -70,6 +70,7 @@
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | **TASKRUN-OBS-55-001 DONE:** Implemented incident mode escalations. Created IncidentModeModels (status, retention policy, telemetry settings, debug capture settings). Implemented IPackRunIncidentModeService with activate/deactivate/escalate/SLO breach handling. Added API endpoints for incident mode management and SLO breach webhook. Added 16 unit tests, 206 total tests passing. | Implementer |
| 2025-12-06 | **TASKRUN-OBS-54-001 DONE:** Implemented DSSE attestations for pack runs. Created PackRunAttestation models with in-toto statement, SLSA provenance predicate. Implemented IPackRunAttestationService with generate/verify/list/get operations. Added attestation event types to timeline. Created verification API endpoints (list, get, envelope, verify). Added 14 unit tests, 190 total tests passing. | Implementer |
| 2025-12-05 | **OBS Unblocked:** TASKRUN-OBS-54-001 and TASKRUN-OBS-55-001 changed from BLOCKED to TODO. Root blocker resolved: `timeline-event.schema.json` created 2025-12-04; upstream Sprint 0157 OBS tasks now unblocked. | Implementer |
| 2025-11-19 | Normalized sprint to standard template and renamed from `SPRINT_158_taskrunner_ii.md` to `SPRINT_0158_0001_0002_taskrunner_ii.md`; content preserved. | Implementer |

View File

@@ -33,23 +33,23 @@
| 5 | CVSS-RECEIPT-190-005 | DONE (2025-11-28) | Depends on 190-002, 190-004. | Policy Guild (`src/Policy/StellaOps.Policy.Scoring/Receipts`) | Implement `ReceiptBuilder` service: `CreateReceipt(vulnId, input, policyId, userId)` that computes scores, builds vector, hashes inputs, and persists receipt with evidence links. |
| 6 | CVSS-DSSE-190-006 | DONE (2025-11-28) | Depends on 190-005; uses Attestor primitives. | Policy Guild · Attestor Guild (`src/Policy/StellaOps.Policy.Scoring`, `src/Attestor/StellaOps.Attestor.Envelope`) | Attach DSSE attestations to score receipts: create `stella.ops/cvssReceipt@v1` predicate type, sign receipts, store envelope references. |
| 7 | CVSS-HISTORY-190-007 | DONE (2025-11-28) | Depends on 190-005. | Policy Guild (`src/Policy/StellaOps.Policy.Scoring/History`) | Implement receipt amendment tracking: `AmendReceipt(receiptId, field, newValue, reason, ref)` with history entry creation and re-signing. |
| 8 | CVSS-CONCELIER-190-008 | BLOCKED (2025-11-29) | Depends on 190-001; missing AGENTS for Concelier scope in this sprint; cross-module work not allowed without charter. | Concelier Guild · Policy Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Ingest vendor-provided CVSS v4.0 vectors from advisories; parse and store as base receipts; preserve provenance. |
| 9 | CVSS-API-190-009 | BLOCKED (2025-11-29) | Depends on 190-005, 190-007; missing `AGENTS.md` for Policy WebService; cannot proceed per implementer rules. | Policy Guild (`src/Policy/StellaOps.Policy.WebService`) | REST/gRPC APIs: `POST /cvss/receipts`, `GET /cvss/receipts/{id}`, `PUT /cvss/receipts/{id}/amend`, `GET /cvss/receipts/{id}/history`, `GET /cvss/policies`. |
| 10 | CVSS-CLI-190-010 | BLOCKED (2025-11-29) | Depends on 190-009 (API blocked). | CLI Guild (`src/Cli/StellaOps.Cli`) | CLI verbs: `stella cvss score --vuln <id>`, `stella cvss show <receiptId>`, `stella cvss history <receiptId>`, `stella cvss export <receiptId> --format json|pdf`. |
| 11 | CVSS-UI-190-011 | BLOCKED (2025-11-29) | Depends on 190-009 (API blocked). | UI Guild (`src/UI/StellaOps.UI`) | UI components: Score badge with CVSS-BTE label, tabbed receipt viewer (Base/Threat/Environmental/Supplemental/Evidence/Policy/History), "Recalculate with my env" button, export options. |
| 8 | CVSS-CONCELIER-190-008 | DONE (2025-12-06) | Depends on 190-001; Concelier AGENTS updated 2025-12-06. | Concelier Guild · Policy Guild (`src/Concelier/__Libraries/StellaOps.Concelier.Core`) | Ingest vendor-provided CVSS v4.0 vectors from advisories; parse and store as base receipts; preserve provenance. (Implemented CVSS priority ordering in Advisory → Postgres conversion so v4 vectors are primary and provenance-preserved.) |
| 9 | CVSS-API-190-009 | BLOCKED (2025-12-06) | Depends on 190-005, 190-007; missing Policy Engine CVSS receipt endpoints to proxy. | Policy Guild (`src/Policy/StellaOps.Policy.Gateway`) | REST/gRPC APIs: `POST /cvss/receipts`, `GET /cvss/receipts/{id}`, `PUT /cvss/receipts/{id}/amend`, `GET /cvss/receipts/{id}/history`, `GET /cvss/policies`. |
| 10 | CVSS-CLI-190-010 | TODO | Depends on 190-009 (API readiness). | CLI Guild (`src/Cli/StellaOps.Cli`) | CLI verbs: `stella cvss score --vuln <id>`, `stella cvss show <receiptId>`, `stella cvss history <receiptId>`, `stella cvss export <receiptId> --format json|pdf`. |
| 11 | CVSS-UI-190-011 | TODO | Depends on 190-009 (API readiness). | UI Guild (`src/UI/StellaOps.UI`) | UI components: Score badge with CVSS-BTE label, tabbed receipt viewer (Base/Threat/Environmental/Supplemental/Evidence/Policy/History), "Recalculate with my env" button, export options. |
| 12 | CVSS-DOCS-190-012 | BLOCKED (2025-11-29) | Depends on 190-001 through 190-011 (API/UI/CLI blocked). | Docs Guild (`docs/modules/policy/cvss-v4.md`, `docs/09_API_CLI_REFERENCE.md`) | Document CVSS v4.0 scoring system: data model, policy format, API reference, CLI usage, UI guide, determinism guarantees. |
| 13 | CVSS-GAPS-190-013 | DONE (2025-12-01) | None; informs tasks 512. | Product Mgmt · Policy Guild | Address gap findings (CV1CV10) from `docs/product-advisories/25-Nov-2025 - Add CVSSv4.0 Score Receipts for Transparency.md`: policy lifecycle/replay, canonical hashing spec with test vectors, threat/env freshness, tenant-scoped receipts, v3.1→v4.0 conversion flagging, evidence CAS/DSSE linkage, append-only receipt rules, deterministic exports, RBAC boundaries, monitoring/alerts for DSSE/policy drift. |
| 14 | CVSS-GAPS-190-014 | DONE (2025-12-03) | Close CVM1CVM10 from `docs/product-advisories/25-Nov-2025 - Add CVSSv4.0 Score Receipts for Transparency.md`; depends on schema/hash publication and API/UI contracts | Policy Guild · Platform Guild | Remediated CVM1CVM10: updated `docs/modules/policy/cvss-v4.md` with canonical hashing/DSSE/export/profile guidance, added golden hash fixture under `tests/Policy/StellaOps.Policy.Scoring.Tests/Fixtures/hashing/`, and documented monitoring/backfill rules. |
| 15 | CVSS-AGENTS-190-015 | TODO | Needed to unblock 190-009 | Policy Guild (`src/Policy/StellaOps.Policy.WebService`) | Create/update `src/Policy/StellaOps.Policy.WebService/AGENTS.md` covering CVSS receipt APIs (contracts, tests, determinism rules) so WebService work can proceed under implementer rules. |
| 16 | CVSS-AGENTS-190-016 | TODO | Needed to unblock 190-008 | Concelier Guild (`src/Concelier/AGENTS.md` + module docs) | Refresh Concelier AGENTS to allow CVSS v4.0 vector ingest tasks (190-008) with provenance requirements, offline posture, and policy alignment. |
| 15 | CVSS-AGENTS-190-015 | DONE (2025-12-06) | None. | Policy Guild (`src/Policy/StellaOps.Policy.Gateway`) | Create/update `src/Policy/StellaOps.Policy.Gateway/AGENTS.md` covering CVSS receipt APIs (contracts, tests, determinism rules) so WebService work can proceed under implementer rules. |
| 16 | CVSS-AGENTS-190-016 | DONE (2025-12-06) | None. | Concelier Guild (`src/Concelier/AGENTS.md` + module docs) | Refresh Concelier AGENTS to allow CVSS v4.0 vector ingest tasks (190-008) with provenance requirements, offline posture, and policy alignment. |
## Wave Coordination
| Wave | Guild owners | Shared prerequisites | Status | Notes |
| --- | --- | --- | --- | --- |
| W1 Foundation | Policy Guild | None | DONE (2025-11-28) | Tasks 1-4: Data model, engine, tests, policy loader. |
| W2 Receipt Pipeline | Policy Guild · Attestor Guild | W1 complete | DONE (2025-11-28) | Tasks 5-7: Receipt builder, DSSE, history completed; integration tests green. |
| W3 Integration | Concelier · Policy · CLI · UI Guilds | W2 complete; AGENTS for Concelier & Policy WebService required | BLOCKED (2025-12-06) | Tasks 8-11 blocked pending AGENTS (tasks 1516) and API contract approval. |
| W4 Documentation | Docs Guild | W3 complete | BLOCKED (2025-12-06) | Task 12 blocked by API/UI/CLI delivery; will resume after W3 unblocks. |
| W3 Integration | Concelier · Policy · CLI · UI Guilds | W2 complete; AGENTS delivered 2025-12-06 | BLOCKED (2025-12-06) | CVSS-API-190-009 blocked: Policy Engine lacks CVSS receipt endpoints to proxy; CLI/UI depend on it. |
| W4 Documentation | Docs Guild | W3 complete | BLOCKED (2025-12-06) | Task 12 blocked by API/UI/CLI delivery; resumes after W3 progresses. |
## Interlocks
- CVSS v4.0 vectors from Concelier must preserve vendor provenance (task 8 depends on Concelier ingestion patterns).
@@ -74,11 +74,14 @@
| R2 | Vendor advisories inconsistently provide v4.0 vectors. | Gaps in base scores; fallback to v3.1 conversion. | Implement v3.1→v4.0 heuristic mapping with explicit "converted" flag; Concelier Guild. |
| R3 | Receipt storage grows large with evidence links. | Storage costs; query performance. | Implement evidence reference deduplication; use CAS URIs; Platform Guild. |
| R4 | CVSS parser/ruleset changes ungoverned (CVM9). | Score drift, audit gaps. | Version parsers/rulesets; DSSE-sign releases; log scorer version in receipts; dual-review changes. |
| R5 | Missing AGENTS for Policy WebService and Concelier ingestion block integration (tasks 811). | API/CLI/UI delivery stalled. | Add AGENTS tasks 1516; require completion before changing BLOCKED status. Policy & Concelier Guilds. |
| R5 | Missing AGENTS for Policy WebService and Concelier ingestion block integration (tasks 811). | API/CLI/UI delivery stalled. | AGENTS delivered 2025-12-06 (tasks 1516). Risk mitigated; monitor API contract approvals. |
| R6 | Policy Engine lacks CVSS receipt endpoints; gateway proxy cannot be implemented yet. | API/CLI/UI tasks remain blocked. | Policy Guild to add receipt API surface in Policy Engine; re-run gateway wiring once available. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | CVSS-CONCELIER-190-008 DONE: prioritized CVSS v4.0 vectors as primary in advisory→Postgres conversion; provenance preserved; enables Policy receipt ingestion. CVSS-API-190-009 set BLOCKED pending Policy Engine CVSS receipt endpoints (risk R6). | Implementer |
| 2025-12-06 | Created Policy Gateway AGENTS and refreshed Concelier AGENTS for CVSS v4 ingest (tasks 1516 DONE); moved tasks 811 to TODO, set W3 to TODO, mitigated risk R5. | Project Mgmt |
| 2025-12-06 | Added tasks 1516 to create AGENTS for Policy WebService and Concelier; set Wave 2 to DONE; marked Waves 34 BLOCKED until AGENTS exist; captured risk R5. | Project Mgmt |
| 2025-12-03 | CVSS-GAPS-190-014 DONE: added canonical hash fixture (`tests/Policy/StellaOps.Policy.Scoring.Tests/Fixtures/hashing/receipt-input.{json,sha256}`), updated cvss-v4 hardening guide with DSSE/export/monitoring/backfill rules, and documented conversion hash and offline bundle expectations. | Implementer |
| 2025-11-27 | Sprint created from product advisory `25-Nov-2025 - Add CVSS v4.0 Score Receipts for Transparency.md`; 12 tasks defined across 4 waves. | Product Mgmt |

View File

@@ -99,6 +99,8 @@
| 2025-12-06 | Combined run attempt failed due to Angular CLI rejecting multiple `--include` paths; guidance documented to run suites separately or via CI with supported flags. | Implementer |
| 2025-12-06 | Stubbed Monaco loaders/workers/editorContextKey in editor spec; editor run still stalls locally (no failures logged). Needs CI run with more headroom; if stall persists, plan is to fully mock Monaco loader to a no-op namespace. | Implementer |
| 2025-12-06 | Fixed Policy Dashboard `aria-busy` binding to `[attr.aria-busy]` and reran targeted Karma suite with Playwright Chromium + `.deps` NSS libs (`./node_modules/.bin/ng test --watch=false --browsers=ChromeHeadlessOffline --include src/app/features/policy-studio/dashboard/policy-dashboard.component.spec.ts`); dashboard suite now PASS (2/2). | Implementer |
| 2025-12-06 | Policy editor spec now PASS locally with Playwright Chromium + `.deps` NSS libs after adding test-only Monaco loader file replacement (`angular.json`), stubbed editor/model disposers, and fixing editor template `aria-busy` to `[attr.aria-busy]`. | Implementer |
| 2025-12-06 | Reran approvals (5/5) and dashboards (2/2) Karma suites locally with the same CHROME_BIN/LD_LIBRARY_PATH overrides to confirm no regressions from Monaco test stub; both still PASS. | Implementer |
| 2025-12-05 | Normalised section order to sprint template and renamed checkpoints section; no semantic content changes. | Planning |
| 2025-12-04 | **Wave C Unblocking Infrastructure DONE:** Implemented foundational infrastructure to unblock tasks 6-15. (1) Added 11 Policy Studio scopes to `scopes.ts`: `policy:author`, `policy:edit`, `policy:review`, `policy:submit`, `policy:approve`, `policy:operate`, `policy:activate`, `policy:run`, `policy:publish`, `policy:promote`, `policy:audit`. (2) Added 6 Policy scope groups to `scopes.ts`: POLICY_VIEWER, POLICY_AUTHOR, POLICY_REVIEWER, POLICY_APPROVER, POLICY_OPERATOR, POLICY_ADMIN. (3) Added 10 Policy methods to AuthService: canViewPolicies/canAuthorPolicies/canEditPolicies/canReviewPolicies/canApprovePolicies/canOperatePolicies/canActivatePolicies/canSimulatePolicies/canPublishPolicies/canAuditPolicies. (4) Added 7 Policy guards to `auth.guard.ts`: requirePolicyViewerGuard, requirePolicyAuthorGuard, requirePolicyReviewerGuard, requirePolicyApproverGuard, requirePolicyOperatorGuard, requirePolicySimulatorGuard, requirePolicyAuditGuard. (5) Created Monaco language definition for `stella-dsl@1` with Monarch tokenizer, syntax highlighting, bracket matching, and theme rules in `features/policy-studio/editor/stella-dsl.language.ts`. (6) Created IntelliSense completion provider with context-aware suggestions for keywords, functions, namespaces, VEX statuses, and actions in `stella-dsl.completions.ts`. (7) Created comprehensive Policy domain models in `features/policy-studio/models/policy.models.ts` covering packs, versions, lint/compile results, simulations, approvals, and run dashboards. (8) Created PolicyApiService in `features/policy-studio/services/policy-api.service.ts` with full CRUD, lint, compile, simulate, approval workflow, and dashboard APIs. Tasks 6-15 are now unblocked for implementation. | Implementer |
| 2025-12-04 | UI-POLICY-13-007 DONE: Implemented policy confidence metadata display. Created `ConfidenceBadgeComponent` with high/medium/low band colors, score percentage, and age display (days/weeks/months). Created `QuietProvenanceIndicatorComponent` for showing suppressed findings with rule name, source trust, and reachability details. Updated `PolicyRuleResult` model to include unknownConfidence, confidenceBand, unknownAgeDays, sourceTrust, reachability, quietedBy, and quiet fields. Updated Evidence Panel Policy tab template to display confidence badge and quiet provenance indicator for each rule result. Wave C task 5 complete. | Implementer |
@@ -114,7 +116,7 @@
| ~~VEX schema changes post-sprint 0215~~ | ~~Rework of tasks 23~~ | ✅ MITIGATED: VEX tab implemented, schema stable | UI Guild · VEX lead |
| ~~`orch:read` scope contract slips~~ | ~~Task 4 blocked~~ | ✅ MITIGATED: Scopes/guards implemented | UI Guild · Console Guild |
| ~~Policy DSL/simulator API churn~~ | ~~Tasks 615 blocked~~ | ✅ MITIGATED: Monaco language def, RBAC scopes/guards, API client, models created (2025-12-05) | UI Guild · Policy Guild |
| Karma headless runs for approvals/dashboard previously incomplete | ✅ MITIGATED: approvals (5/5) and dashboard (2/2) now pass locally with Playwright Chromium + `.deps` NSS libs; still advise CI re-run for broader coverage | Rerun in CI: `ng test --watch=false --browsers=ChromeHeadless --progress=false --include src/app/features/policy-studio/approvals/policy-approvals.component.spec.ts` and same for dashboard; avoid multiple `--include` in one invocation. | UI Guild |
| Karma headless runs for approvals/dashboard/editor previously incomplete | ✅ MITIGATED: approvals (5/5), dashboard (2/2), and editor (2/2) now pass locally with Playwright Chromium + `.deps` NSS libs using Monaco loader file replacement; still advise CI re-run for broader coverage | Rerun in CI: `ng test --watch=false --browsers=ChromeHeadless --progress=false --include …` one suite at a time; avoid multiple `--include` in one invocation. | UI Guild |
## Next Checkpoints
- Schedule: rerun targeted Karma suites for approvals/dashboard in CI; log outcomes.

View File

@@ -32,7 +32,7 @@
| 7 | CONSOLE-VULN-29-001 | BLOCKED (2025-12-04) | WEB-CONSOLE-23-001 shipped 2025-11-28; still waiting for Concelier graph schema snapshot from the 2025-12-03 freeze review before wiring `/console/vuln/*` endpoints. | Console Guild; BE-Base Platform Guild | `/console/vuln/*` workspace endpoints with filters/reachability badges and DTOs once schemas stabilize. |
| 8 | CONSOLE-VEX-30-001 | BLOCKED (2025-12-04) | Excititor console contract delivered 2025-11-23; remain blocked on VEX Lens spec PLVL0103 + SSE payload validation notes from rescheduled 2025-12-04 alignment. | Console Guild; BE-Base Platform Guild | `/console/vex/events` SSE workspace with validated schemas and samples. |
| 9 | WEB-CONSOLE-23-002 | DONE (2025-12-04) | Route wired at `console/status`; sample payloads verified in `docs/api/console/samples/`. | BE-Base Platform Guild; Scheduler Guild | `/console/status` polling and `/console/runs/{id}/stream` SSE/WebSocket proxy with queue lag metrics. |
| 10 | WEB-CONSOLE-23-003 | BLOCKED | Draft contract + samples published; awaiting Policy Guild sign-off on schema/limits. | BE-Base Platform Guild; Policy Guild | `/console/exports` POST/GET for evidence bundles, streaming CSV/JSON, checksum manifest, signed attestations. |
| 10 | WEB-CONSOLE-23-003 | DOING | Contract draft + samples published; client implementation in progress; PTY restore still needed for tests. | BE-Base Platform Guild; Policy Guild | `/console/exports` POST/GET for evidence bundles, streaming CSV/JSON, checksum manifest, signed attestations. |
| 11 | WEB-CONSOLE-23-004 | BLOCKED | Upstream 23-003 blocked; caching/tie-break rules depend on export manifest contract. | BE-Base Platform Guild | `/console/search` fan-out with deterministic ranking and result caps. |
| 12 | WEB-CONSOLE-23-005 | BLOCKED | Blocked by 23-004; download manifest format and signed metadata not defined. | BE-Base Platform Guild; DevOps Guild | `/console/downloads` manifest (images, charts, offline bundles) with integrity hashes and offline instructions. |
| 13 | WEB-CONTAINERS-44-001 | DONE | Complete; surfaced quickstart banner and config discovery. | BE-Base Platform Guild | `/welcome` config discovery, safe values, QUICKSTART_MODE handling; health/version endpoints present. |
@@ -94,6 +94,7 @@
| 2025-12-06 | Added ordered unblock plan for Web I (exports, exceptions, PTY restore, advisory AI). | Project Mgmt |
| 2025-12-06 | Created placeholder contract docs: `docs/api/gateway/export-center.md` (export bundles) and `docs/api/console/exception-schema.md` (exceptions CRUD). Awaiting owner inputs to replace placeholders. | Project Mgmt |
| 2025-12-06 | Added draft exports section + sample payloads (`console-export-*.json`, `console-export-events.ndjson`) under `docs/api/console/samples/`; waiting for guild validation. | Project Mgmt |
| 2025-12-06 | Implemented console exports client/models (`console-export.client.ts`, `console-export.models.ts`) and added unit spec. Tests blocked by PTY; run after shell restore. | Implementer |
| 2025-12-01 | Started WEB-CONSOLE-23-002: added console status client (polling) + SSE run stream, store/service, and UI component; unit specs added. Commands/tests not executed locally due to PTY/disk constraint. | BE-Base Platform Guild |
| 2025-11-07 | Enforced unknown-field detection, added shared `AocError` payload (HTTP + CLI), refreshed guard docs, and extended tests/endpoint helpers. | BE-Base Platform Guild |
| 2025-11-07 | API scaffolding started for console workspace; `docs/advisory-ai/console.md` using placeholder responses while endpoints wire up. | Console Guild |

View File

@@ -91,4 +91,5 @@
| 2025-11-30 | Marked WEB-EXC-25-002 BLOCKED due to host PTY exhaustion (`openpty: No space left on device`); need shell access restored to continue implementation. | Implementer |
| 2025-12-06 | Marked WEB-EXC-25-003, WEB-EXPORT-35/36/37-001, WEB-GRAPH-21-003/004, WEB-GRAPH-24-001/002/003/004, WEB-LNM-21-001/002 BLOCKED pending upstream contracts (Export Center, Graph overlay, advisory/VEX schemas) and restoration of shell capacity. No code changes made. | Implementer |
| 2025-12-06 | Added placeholder docs: `docs/api/gateway/export-center.md` (Export Center gateway), `docs/api/graph/overlay-schema.md`, and `docs/api/console/exception-schema.md` to capture required inputs; awaiting owner-provided schemas/fixtures. | Project Mgmt |
| 2025-12-06 | Added owner draft + samples for overlays and signals: `docs/api/graph/overlay-schema.md` with `samples/overlay-sample.json`; `docs/api/signals/reachability-contract.md` with `samples/callgraph-sample.json` and `facts-sample.json`. | Project Mgmt |
| 2025-12-06 | Added ordered unblock plan for Web II (Export Center → Graph overlay → advisory/VEX schemas → shell restore → exception hooks). | Project Mgmt |

View File

@@ -116,3 +116,4 @@
| 2025-12-06 | Added ordered unblock plan for Web V (env/npm fix → Signals contract → tenant/ABAC delta → VEX consensus → Findings Ledger wiring → rerun specs). | Project Mgmt |
| 2025-12-06 | Created placeholder docs: `docs/api/signals/reachability-contract.md` and `docs/api/vex-consensus.md` to collect required contracts/fixtures; awaiting guild inputs. | Project Mgmt |
| 2025-12-06 | Propagated BLOCKED status from WEB-RISK-66-001 to downstream risk chain (66-002/67-001/68-001) and from missing Signals/tenant/VEX contracts to WEB-SIG-26-001..003 and WEB-VEX/VULN chain. No code changes applied until contracts and install env stabilise. | Implementer |
| 2025-12-06 | Added draft samples for Signals and VEX streams (`docs/api/signals/samples/*.json`, `docs/api/vex-consensus-sample.ndjson`) to support early client wiring. | Project Mgmt |

View File

@@ -23,13 +23,13 @@ Depends on: Sprint 100.A - Attestor, Sprint 110.A - AdvisoryAI, Sprint 120.A - A
## Delivery Tracker
| Task ID | State | Task description | Owners (Source) |
| --- | --- | --- | --- |
| COMPOSE-44-001 | BLOCKED | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). | Deployment Guild, DevEx Guild (ops/deployment) |
| COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). Dev stack validated with mock overlay; production pins still pending. | Deployment Guild, DevEx Guild (ops/deployment) |
| COMPOSE-44-002 | DONE (2025-12-05) | Implement `backup.sh` and `reset.sh` scripts with safety prompts and documentation. Dependencies: COMPOSE-44-001. | Deployment Guild (ops/deployment) |
| COMPOSE-44-003 | DOING (dev-mock digests 2025-12-06) | Package seed data container and onboarding wizard toggle (`QUICKSTART_MODE`), ensuring default creds randomized on first run. Dependencies: COMPOSE-44-002; using mock service pins from `deploy/releases/2025.09-mock-dev.yaml` for development. | Deployment Guild, Docs Guild (ops/deployment) |
| DEPLOY-AIAI-31-001 | DONE (2025-12-05) | Provide Helm/Compose manifests, GPU toggle, scaling/runbook, and offline kit instructions for Advisory AI service + inference container. | Deployment Guild, Advisory AI Guild (ops/deployment) |
| DEPLOY-AIRGAP-46-001 | BLOCKED (2025-11-25) | Provide instructions and scripts (`load.sh`) for importing air-gap bundle into private registry; update Offline Kit guide. | Deployment Guild, Offline Kit Guild (ops/deployment) |
| DEPLOY-CLI-41-001 | DONE (2025-12-05) | Package CLI release artifacts (tarballs per OS/arch, checksums, signatures, completions, container image) and publish distribution docs. | Deployment Guild, DevEx/CLI Guild (ops/deployment) |
| DEPLOY-COMPOSE-44-001 | TODO | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Deployment Guild (ops/deployment) |
| DEPLOY-COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Deployment Guild (ops/deployment) |
| DEPLOY-EXPORT-35-001 | BLOCKED (2025-10-29) | Package exporter service/worker Helm overlays (download-only), document rollout/rollback, and integrate signing KMS secrets. | Deployment Guild, Exporter Service Guild (ops/deployment) |
| DEPLOY-EXPORT-36-001 | TODO | Document OCI/object storage distribution workflows, registry credential automation, and monitoring hooks for exports. Dependencies: DEPLOY-EXPORT-35-001. | Deployment Guild, Exporter Service Guild (ops/deployment) |
| DEPLOY-HELM-45-001 | DONE (2025-12-05) | Publish Helm install guide and sample values for prod/airgap; integrate with docs site build. | Deployment Guild (ops/deployment) |
@@ -51,6 +51,7 @@ Depends on: Sprint 100.A - Attestor, Sprint 110.A - AdvisoryAI, Sprint 120.A - A
| 2025-12-06 | Added mock dev release CI packaging workflow `.gitea/workflows/mock-dev-release.yml` to emit `mock-dev-release.tgz` artifact for downstream dev tasks. | Deployment Guild |
| 2025-12-06 | Added `docker-compose.mock.yaml` overlay plus `env/mock.env.example` so dev/test can run config checks with mock digests; production still pins to real releases. | Deployment Guild |
| 2025-12-06 | Added release manifest guard `.gitea/workflows/release-manifest-verify.yml` + `ops/devops/release/check_release_manifest.py` to fail CI when required production digests/downloads entries are missing. | Deployment Guild |
| 2025-12-06 | Added `scripts/quickstart.sh` helper; validated dev+mock overlay via `docker compose config`. COMPOSE-44-001/DEPLOY-COMPOSE-44-001 moved to DOING (dev-mock). | Deployment Guild |
| 2025-12-06 | Header normalised to standard template; no content/status changes. | Project Mgmt |
| 2025-12-05 | Completed DEPLOY-AIAI-31-001: documented advisory AI Helm/Compose GPU toggle and offline kit pickup (`ops/deployment/advisory-ai/README.md`), added compose GPU overlay, marked task DONE. | Deployment Guild |
| 2025-12-05 | Completed COMPOSE-44-002: added backup/reset scripts (`deploy/compose/scripts/backup.sh`, `reset.sh`) with safety prompts; documented in compose README; marked task DONE. | Deployment Guild |

View File

@@ -0,0 +1,43 @@
# Sprint 0514_0001_0002 · RU Crypto Validation
## Topic & Scope
- Close remaining RU/GOST readiness: validate CryptoPro CSP + OpenSSL GOST on Windows/Linux, wire registry defaults, and finish licensing/export clearance.
- Ship RootPack_RU with signed evidence (tests, hashes, provenance) and keep the CryptoPro lane opt-in but reproducible.
- **Working directory:** `src/__Libraries/StellaOps.Cryptography*`, `src/Authority`, `src/Attestor`, `src/Signer`, `scripts/crypto`, `third_party/forks/AlexMAS.GostCryptography`, `etc/rootpack/ru`.
## Dependencies & Concurrency
- Windows runner with licensed CryptoPro CSP; Linux OpenSSL GOST toolchain available.
- Can run in parallel with CN/SM and FIPS/PQ sprints; coordinate edits to `CryptoProviderRegistryOptions` to avoid conflicts.
## Documentation Prerequisites
- docs/security/rootpack_ru_crypto_fork.md
- docs/implplan/SPRINT_0514_0001_0001_sovereign_crypto_enablement.md
- docs/contracts/crypto-provider-registry.md
- docs/contracts/authority-crypto-provider.md
## Delivery Tracker
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
| --- | --- | --- | --- | --- | --- |
| 1 | RU-CRYPTO-VAL-01 | TODO | Linux OpenSSL toolchain present | Security Guild · QA | Validate OpenSSL GOST path on Linux; sign/verify test vectors; publish determinism report and hashes. |
| 2 | RU-CRYPTO-VAL-02 | TODO | After #1 | Authority · Security | Wire registry defaults (`ru.openssl.gost`, `ru.pkcs11`) into Authority/Signer/Attestor hosts with env toggles and fail-closed validation (Linux-only baseline). |
| 3 | RU-CRYPTO-VAL-03 | TODO | After #1 | Docs · Ops | Update RootPack_RU manifest + verify script for Linux-only GOST; embed signed test vectors/hashes; refresh `etc/rootpack/ru/crypto.profile.yaml` to mark “CSP pending”. |
| 4 | RU-CRYPTO-VAL-04 | BLOCKED (2025-12-06) | Windows CSP runner provisioned | Security Guild · QA | Run CryptoPro fork + plugin tests on Windows (`STELLAOPS_CRYPTO_PRO_ENABLED=1`); capture logs/artifacts and determinism checks. Blocked: no Windows+CSP runner available. |
| 5 | RU-CRYPTO-VAL-05 | BLOCKED (2025-12-06) | After #4 | Security · Ops | Wine loader experiment: load CryptoPro CSP DLLs under Wine to generate comparison vectors; proceed only if legally permitted. Blocked: depends on CSP binaries/licensing availability. |
| 6 | RU-CRYPTO-VAL-06 | BLOCKED (2025-12-06) | Parallel | Security · Legal | Complete license/export review for CryptoPro & fork; document distribution matrix and EULA notices. |
| 7 | RU-CRYPTO-VAL-07 | BLOCKED (2025-12-06) | After #4/#5 | DevOps | Enable opt-in CI lane (`cryptopro-optin.yml`) with gated secrets/pins once CSP/Wine path validated. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | Sprint created; awaiting staffing. | Planning |
| 2025-12-06 | Re-scoped: proceed with Linux OpenSSL GOST baseline (tasks 13 set to TODO); CSP/Wine/Legal remain BLOCKED (tasks 47). | Implementer |
## Decisions & Risks
- Windows CSP availability may slip; mitigation: document manual runner setup and allow deferred close on #1/#6 (currently blocking).
- Licensing/export could block redistribution; must finalize before RootPack publish (currently blocking task 3).
- Cross-platform determinism must be proven; if mismatch, block release until fixed; currently waiting on #1/#2 data.
## Next Checkpoints
- 2025-12-10 · Runner availability go/no-go.
- 2025-12-12 · Cross-platform determinism review (tasks 12).
- 2025-12-13 · License/export decision.

View File

@@ -0,0 +1,43 @@
# Sprint 0516_0001_0001 · CN SM Crypto Enablement
## Topic & Scope
- Deliver Chinese SM2/SM3/SM4 support end-to-end (providers, registry profile, Authority/Signer/Attestor wiring) and CN-ready rootpack.
- Provide deterministic tests and offline packaging for the SM compliance profile.
- **Working directory:** `src/__Libraries/StellaOps.Cryptography*`, `src/Authority`, `src/Attestor`, `src/Signer`, `etc/rootpack/cn`.
## Dependencies & Concurrency
- Requires PKCS#11-capable SM HSM/token or software SM stack (e.g., BouncyCastle SM) for tests.
- Can run in parallel with RU validation and FIPS/PQ sprints; coordinate edits to `ComplianceProfiles` and registry options.
## Documentation Prerequisites
- docs/contracts/authority-crypto-provider.md
- docs/contracts/crypto-provider-registry.md
- docs/security/crypto-compliance.md
- docs/07_HIGH_LEVEL_ARCHITECTURE.md (crypto profile section)
## Delivery Tracker
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
| --- | --- | --- | --- | --- | --- |
| 1 | SM-CRYPTO-01 | DONE (2025-12-06) | None | Security · Crypto | Implement `StellaOps.Cryptography.Plugin.SmSoft` provider using BouncyCastle SM2/SM3 (software-only, non-certified); env guard `SM_SOFT_ALLOWED` added. |
| 2 | SM-CRYPTO-02 | DONE (2025-12-06) | After #1 | Security · BE (Authority/Signer) | Wire SM soft provider into DI (registered), compliance docs updated with “software-only” caveat. |
| 3 | SM-CRYPTO-03 | TODO | After #2 | Authority · Attestor · Signer | Add SM2 signing/verify paths for Authority/Attestor/Signer; include JWKS export compatibility and negative tests; fail-closed when `SM_SOFT_ALLOWED` is false. |
| 4 | SM-CRYPTO-04 | DONE (2025-12-06) | After #1 | QA · Security | Deterministic software test vectors (sign/verify, hash) added in unit tests; “non-certified” banner documented. |
| 5 | SM-CRYPTO-05 | TODO | After #3 | Docs · Ops | Create `etc/rootpack/cn/crypto.profile.yaml`, pack SM soft binaries/fixtures, document install/verify steps and certification caveat. |
| 6 | SM-CRYPTO-06 | BLOCKED (2025-12-06) | Hardware token available | Security · Crypto | Add PKCS#11 SM provider and rerun vectors with certified hardware; replace “software-only” label when certified. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | Sprint created; awaiting staffing. | Planning |
| 2025-12-06 | Re-scoped: software-only SM provider path approved; tasks 15 set to TODO; hardware PKCS#11 follow-up tracked as task 6 (BLOCKED). | Implementer |
| 2025-12-06 | Implemented SmSoft provider + DI, added SM2/SM3 unit tests, updated compliance doc with software-only caveat; tasks 1,2,4 set to DONE. | Implementer |
## Decisions & Risks
- SM provider licensing/availability uncertain; mitigation: software fallback with “non-certified” label until hardware validated.
- Webhook/interop must stay SHA-256—verify no SM override leaks; regression tests required in task 4.
- Export controls for SM libraries still require review; note in docs and keep SM_SOFT_ALLOWED gate.
## Next Checkpoints
- 2025-12-11 · Provider selection decision.
- 2025-12-15 · First SM2 sign/verify demo.
- 2025-12-18 · RootPack_CN dry run.

View File

@@ -0,0 +1,49 @@
# Sprint 0517_0001_0001 · FIPS/eIDAS/KCMVP/PQ Enablement
## Topic & Scope
- Achieve ship-ready compliance for FIPS, eIDAS, KCMVP, and implement PQ providers (Dilithium/Falcon) with dual-sign toggles.
- Produce per-region rootpacks/offline kits and deterministic regression tests across profiles.
- **Working directory:** `src/__Libraries/StellaOps.Cryptography*`, `src/Authority`, `src/Scanner`, `src/Attestor`, `src/Policy`, `src/Mirror`, `etc/rootpack/{us-fips,eu,korea}`, `docs/security`.
## Dependencies & Concurrency
- FIPS needs validated modules or FIPS-mode BCL/KMS; coordinate with DevOps for toolchains and evidence.
- PQ work depends on `docs/security/pq-provider-options.md`; Scanner/Attestor wiring currently blocked on registry mapping (R3 in sprint 0514).
- Can run in parallel with RU and CN sprints; sync changes to registry/profile tables.
## Documentation Prerequisites
- docs/security/crypto-compliance.md
- docs/security/pq-provider-options.md
- docs/contracts/authority-crypto-provider.md
- docs/contracts/crypto-provider-registry.md
- docs/implplan/SPRINT_0514_0001_0001_sovereign_crypto_enablement.md (for R1/R3 blockers)
## Delivery Tracker
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
| --- | --- | --- | --- | --- | --- |
| 1 | FIPS-PROV-01 | TODO | Choose “non-certified baseline” path | Security · DevOps | Enforce FIPS algorithm allow-list using BCL + AWS KMS FIPS endpoint/OpenSSL FIPS provider; mark as “non-certified”; collect determinism tests and evidence. |
| 2 | FIPS-PROV-02 | TODO | After #1 | Authority · Scanner · Attestor | Enforce FIPS-only algorithms when `fips` profile active; fail-closed validation + JWKS export; tests; label non-certified. |
| 3 | FIPS-PROV-03 | BLOCKED (2025-12-06) | Select certified module | Security · DevOps | Integrate CMVP-certified module (CloudHSM/Luna/OpenSSL FIPS 3.x) and replace baseline label; gather certification evidence. |
| 4 | EIDAS-01 | TODO | Trust store stub | Authority · Security | Add eIDAS profile enforcement (P-256/384 + SHA-256), EU trust-store bundle, JWKS metadata; emit warning when QSCD not present. |
| 5 | EIDAS-02 | BLOCKED (2025-12-06) | QSCD device available | Authority · Security | Add QSCD/qualified cert handling and policy checks; certify once hardware available. |
| 6 | KCMVP-01 | TODO | None | Security · Crypto | Provide KCMVP hash-only baseline (SHA-256) with labeling; add tests and profile docs. |
| 7 | KCMVP-02 | BLOCKED (2025-12-06) | Licensed module | Security · Crypto | Add ARIA/SEED/KCDSA provider once certified toolchain available. |
| 8 | PQ-IMPL-01 | TODO | Registry mapping (R3) to resolve | Crypto · Scanner | Implement `pq-dilithium3` and `pq-falcon512` providers via liboqs/oqs-provider; vendor libs for offline; add deterministic vectors. |
| 9 | PQ-IMPL-02 | TODO | After #8 | Scanner · Attestor · Policy | Wire DSSE signing overrides, dual-sign toggles, deterministic regression tests across providers (Scanner/Attestor/Policy). |
| 10 | ROOTPACK-INTL-01 | TODO | After baseline tasks (1,4,6,8) | Ops · Docs | Build rootpack variants (us-fips baseline, eu baseline, korea hash-only, PQ addenda) with signed manifests/tests; clearly label certification gaps. |
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2025-12-06 | Sprint created; awaiting staffing. | Planning |
| 2025-12-06 | Re-scoped: added software baselines (FIPS/eIDAS/KCMVP hash-only, PQ with liboqs) as TODO; certified modules/QSCD/ARIA-SEED remain BLOCKED. | Implementer |
## Decisions & Risks
- FIPS validation lead time may slip; interim non-certified baseline acceptable but must be clearly labeled until CMVP module lands (task 3).
- PQ provider supply chain risk; mitigate by vendoring oqs libs into offline kit and hashing binaries; registry mapping R3 still needs resolution.
- eIDAS QSCD/key-policy compliance needs legal + trust-store review; hardware path remains open (task 5).
- KCMVP algorithm availability may depend on licensed modules; baseline is hash-only until certified stack available (task 7).
## Next Checkpoints
- 2025-12-12 · Select FIPS module/KMS path.
- 2025-12-15 · PQ provider implementation go/no-go (R3 resolved?).
- 2025-12-20 · Rootpack US/EU/KR draft manifests.

View File

@@ -51,6 +51,11 @@
| 8 | PG-T7.1.8 | TODO | Depends on PG-T7.1.7 | Infrastructure Guild | Remove dual-write wrappers |
| 9 | PG-T7.1.9 | TODO | Depends on PG-T7.1.8 | Infrastructure Guild | Remove MongoDB configuration options |
| 10 | PG-T7.1.10 | TODO | Depends on PG-T7.1.9 | Infrastructure Guild | Run full build to verify no broken references |
| 14 | PG-T7.1.5a | DOING | Concelier Guild | Concelier: replace Mongo deps with Postgres equivalents; remove MongoDB packages; compat layer added. |
| 15 | PG-T7.1.5b | TODO | Concelier Guild | Build Postgres document/raw storage + state repositories and wire DI. |
| 16 | PG-T7.1.5c | TODO | Concelier Guild | Refactor connectors/exporters/tests to Postgres storage; delete Storage.Mongo code. |
| 17 | PG-T7.1.5d | TODO | Concelier Guild | Add migrations for document/state/export tables; include in air-gap kit. |
| 18 | PG-T7.1.5e | TODO | Concelier Guild | Postgres-only Concelier build/tests green; remove Mongo artefacts and update docs. |
### T7.2: Archive MongoDB Data
| # | Task ID | Status | Key dependency / next step | Owners | Task Definition |
@@ -112,8 +117,11 @@
| 2025-12-06 | Published `docs/db/reports/scheduler-graphjobs-postgres-plan.md` defining schema/repo/DI/test steps; PG-T7.1.2a unblocked to TODO. | Scheduler Guild |
| 2025-12-06 | Started implementing PG-T7.1.2a: added Postgres graph job migration (002), repository + DI registration, PostgresGraphJobStore, and switched WebService/Worker to Postgres storage references. Tests not yet updated; Mongo code remains for backfill/tests. | Scheduler Guild |
| 2025-12-06 | PG-T7.1.2a set BLOCKED: no Postgres graph-job schema/repository exists; need design guidance (tables for graph_jobs, overlays, status) or decision to reuse existing run tables. | Project Mgmt |
| 2025-12-06 | Concelier Mongo drop started: removed MongoDB package refs from Concelier Core/Connector.Common/RawModels; added Postgres compat types (IDocumentStore/ObjectId/DocumentStatuses), in-memory RawDocumentStorage, and DI wiring; new Concelier task bundle PG-T7.1.5ae added. | Concelier Guild |
| 2025-12-06 | Scheduler solution cleanup: removed stale solution GUIDs, fixed Worker.Host references, rewired Backfill to Postgres data source, and added SurfaceManifestPointer inline to Scheduler.Queue to drop circular deps. Build now blocked by missing Postgres run/schedule/policy repositories in Worker. | Scheduler Guild |
| 2025-12-06 | Attempted Scheduler Postgres tests; restore/build fails because `StellaOps.Concelier.Storage.Mongo` project is absent and Concelier connectors reference it. Need phased Concelier plan/shim to unblock test/build runs. | Scheduler Guild |
| 2025-12-06 | Began Concelier Mongo compatibility shim: added `FindAsync` to in-memory `IDocumentStore` in Postgres compat layer to unblock connector compile; full Mongo removal still pending. | Infrastructure Guild |
| 2025-12-06 | Added lightweight `StellaOps.Concelier.Storage.Mongo` in-memory stub (advisory/dto/document/state/export stores) to unblock Concelier connector build while Postgres rewiring continues; no Mongo driver/runtime. | Infrastructure Guild |
## Decisions & Risks
- Cleanup is strictly after all phases complete; do not start T7 tasks until module cutovers are DONE.

View File

@@ -0,0 +1,9 @@
# Wave A · Mongo Drop (Concelier)
| # | Task ID | Status | Owner | Notes |
|---|---|---|---|---|
| 1 | PG-T7.1.5a | DOING | Concelier Guild | Replace Mongo storage dependencies with Postgres equivalents; remove MongoDB.Driver/Bson packages from Concelier projects. |
| 2 | PG-T7.1.5b | TODO | Concelier Guild | Implement Postgres document/raw storage (bytea/LargeObject) + state repos to satisfy connector fetch/store paths. |
| 3 | PG-T7.1.5c | TODO | Concelier Guild | Refactor all connectors/exporters/tests to use Postgres storage namespaces; delete Storage.Mongo code/tests. |
| 4 | PG-T7.1.5d | TODO | Concelier Guild | Add migrations for documents/state/export tables; wire into Concelier Postgres storage DI. |
| 5 | PG-T7.1.5e | TODO | Concelier Guild | End-to-end Concelier build/test on Postgres-only stack; update sprint log and remove Mongo artifacts from repo history references. |

View File

@@ -384,7 +384,7 @@
| CLI-VULN-29-005 | TODO | | SPRINT_0205_0001_0005_cli_v | DevEx/CLI Guild | src/Cli/StellaOps.Cli | Add `stella vuln export` and `stella vuln bundle verify` commands to trigger/download evidence bundles and verify signatures. Dependencies: CLI-VULN-29-004. | CLI-VULN-29-004 | CLCI0107 |
| CLI-VULN-29-006 | TODO | | SPRINT_0205_0001_0005_cli_v | DevEx/CLI Guild · Docs Guild | src/Cli/StellaOps.Cli | Update CLI docs/examples for Vulnerability Explorer with compliance checklist and CI snippets. Dependencies: CLI-VULN-29-005. | CLI-VULN-29-005 | CLCI0108 |
| CLIENT-401-012 | TODO | | SPRINT_0401_0001_0001_reachability_evidence_chain | Symbols Guild | `src/Symbols/StellaOps.Symbols.Client`, `src/Scanner/StellaOps.Scanner.Symbolizer` | Align with symbolizer regression fixtures | Align with symbolizer regression fixtures | RBSY0101 |
| COMPOSE-44-001 | BLOCKED | 2025-11-25 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · DevEx Guild | ops/deployment | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). | Waiting on consolidated service list/version pins from upstream module releases | DVCP0101 |
| COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · DevEx Guild | ops/deployment | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). | Waiting on consolidated service list/version pins from upstream module releases | DVCP0101 |
| COMPOSE-44-002 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Implement `backup.sh` and `reset.sh` scripts with safety prompts and documentation. Dependencies: COMPOSE-44-001. | Depends on #1 | DVCP0101 |
| COMPOSE-44-003 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Package seed data container and onboarding wizard toggle (`QUICKSTART_MODE`), ensuring default creds randomized on first run. Dependencies: COMPOSE-44-002. | Needs RBRE0101 provenance | DVCP0101 |
| CONCELIER-AIAI-31-002 | DONE | 2025-11-18 | SPRINT_110_ingestion_evidence | Concelier Core · Concelier WebService Guilds | | Structured field/caching implementation gated on schema approval. | CONCELIER-GRAPH-21-001; CARTO-GRAPH-21-002 | DOAI0101 |
@@ -530,7 +530,7 @@
| DEPLOY-AIAI-31-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Advisory AI Guild | ops/deployment | Provide Helm/Compose manifests, GPU toggle, scaling/runbook, and offline kit instructions for Advisory AI service + inference container. | Wait for DVCP0101 compose template | DVPL0101 |
| DEPLOY-AIRGAP-46-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Offline Kit Guild | ops/deployment | Provide instructions and scripts (`load.sh`) for importing air-gap bundle into private registry; update Offline Kit guide. | Requires #1 artifacts | AGDP0101 |
| DEPLOY-CLI-41-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · CLI Guild | ops/deployment | Package CLI release artifacts (tarballs per OS/arch, checksums, signatures, completions, container image) and publish distribution docs. | Wait for CLI observability schema (035_CLCI0105) | AGDP0101 |
| DEPLOY-COMPOSE-44-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Depends on #1 | DVPL0101 |
| DEPLOY-COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Depends on #1 | DVPL0101 |
| DEPLOY-EXPORT-35-001 | DONE | 2025-10-29 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Export Center Guild | ops/deployment | Helm overlay + docs + example secrets added (`deploy/helm/stellaops/values-export.yaml`, `ops/deployment/export/helm-overlays.md`, `ops/deployment/export/secrets-example.yaml`). | Need exporter DSSE API (002_ATEL0101) | AGDP0101 |
| DEPLOY-EXPORT-36-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Export Center Guild | ops/deployment | Document OCI/object storage distribution workflows, registry credential automation, and monitoring hooks for exports. Dependencies: DEPLOY-EXPORT-35-001. | Depends on #4 deliverables | AGDP0101 |
| DEPLOY-HELM-45-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment + Security Guilds | ops/deployment | Publish Helm install guide and sample values for prod/airgap; integrate with docs site build. | Needs helm chart schema | DVPL0101 |
@@ -2109,7 +2109,7 @@
| WEB-AOC-19-007 | TODO | 2025-11-08 | SPRINT_116_concelier_v | Concelier WebService Guild, QA Guild (src/Concelier/StellaOps.Concelier.WebService) | src/Concelier/StellaOps.Concelier.WebService | | | |
| WEB-CONSOLE-23-001 | DONE (2025-11-28) | 2025-11-28 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild · Product Analytics Guild | src/Web/StellaOps.Web | `/console/dashboard` and `/console/filters` aggregates shipped with tenant scoping, deterministic ordering, and 8 unit tests per sprint Execution Log 2025-11-28. | — | |
| WEB-CONSOLE-23-002 | DOING (2025-12-01) | 2025-12-01 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild · Scheduler Guild | src/Web/StellaOps.Web | Implementing `/console/status` polling and `/console/runs/{id}/stream` SSE/WebSocket proxy with heartbeat/backoff; awaiting storage cleanup to run tests. Dependencies: WEB-CONSOLE-23-001. | WEB-CONSOLE-23-001 | |
| WEB-CONSOLE-23-003 | BLOCKED | 2025-12-06 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild, Policy Guild (src/Web/StellaOps.Web) | src/Web/StellaOps.Web | Add `/console/exports` POST/GET routes coordinating evidence bundle creation, streaming CSV/JSON exports, checksum manifest retrieval, and signed attestation references. Ensure requests honor tenant + policy scopes and expose job tracking metadata. Dependencies: WEB-CONSOLE-23-002. | | Draft contract + samples published (docs/api/console/workspaces.md; samples under docs/api/console/samples/*); awaiting guild sign-off. |
| WEB-CONSOLE-23-003 | DOING | 2025-12-06 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild, Policy Guild (src/Web/StellaOps.Web) | src/Web/StellaOps.Web | Add `/console/exports` POST/GET routes coordinating evidence bundle creation, streaming CSV/JSON exports, checksum manifest retrieval, and signed attestation references. Ensure requests honor tenant + policy scopes and expose job tracking metadata. Dependencies: WEB-CONSOLE-23-002. | | Client/models + unit spec added; contract draft + samples published; tests pending PTY restore. |
| WEB-CONSOLE-23-004 | BLOCKED | 2025-12-06 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild (src/Web/StellaOps.Web) | src/Web/StellaOps.Web | Implement `/console/search` endpoint accepting CVE/GHSA/PURL/SBOM identifiers, performing fan-out queries with caching, ranking, and deterministic tie-breaking. Return typed results for Console navigation; respect result caps and latency SLOs. Dependencies: WEB-CONSOLE-23-003. | | Blocked by WEB-CONSOLE-23-003 contract. |
| WEB-CONSOLE-23-005 | BLOCKED | 2025-12-06 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild, DevOps Guild (src/Web/StellaOps.Web) | src/Web/StellaOps.Web | Serve `/console/downloads` JSON manifest (images, charts, offline bundles) sourced from signed registry metadata; include integrity hashes, release notes links, and offline instructions. Provide caching headers and documentation. Dependencies: WEB-CONSOLE-23-004. | | Blocked by WEB-CONSOLE-23-004; download manifest format not defined. |
| WEB-CONTAINERS-44-001 | DONE | 2025-11-18 | SPRINT_0212_0001_0001_web_i | BE-Base Platform Guild (src/Web/StellaOps.Web) | src/Web/StellaOps.Web | Expose `/welcome` state, config discovery endpoint (safe values), and `QUICKSTART_MODE` handling for Console banner; add `/health/liveness`, `/health/readiness`, `/version` if missing. | | |
@@ -2598,7 +2598,7 @@
| CLI-VULN-29-005 | TODO | | SPRINT_0205_0001_0005_cli_v | DevEx/CLI Guild | src/Cli/StellaOps.Cli | Add `stella vuln export` and `stella vuln bundle verify` commands to trigger/download evidence bundles and verify signatures. Dependencies: CLI-VULN-29-004. | CLI-VULN-29-004 | CLCI0107 |
| CLI-VULN-29-006 | TODO | | SPRINT_0205_0001_0005_cli_v | DevEx/CLI Guild · Docs Guild | src/Cli/StellaOps.Cli | Update CLI docs/examples for Vulnerability Explorer with compliance checklist and CI snippets. Dependencies: CLI-VULN-29-005. | CLI-VULN-29-005 | CLCI0108 |
| CLIENT-401-012 | TODO | | SPRINT_0401_0001_0001_reachability_evidence_chain | Symbols Guild | `src/Symbols/StellaOps.Symbols.Client`, `src/Scanner/StellaOps.Scanner.Symbolizer` | Align with symbolizer regression fixtures | Align with symbolizer regression fixtures | RBSY0101 |
| COMPOSE-44-001 | BLOCKED | 2025-11-25 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · DevEx Guild | ops/deployment | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). | Waiting on consolidated service list/version pins from upstream module releases | DVCP0101 |
| COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · DevEx Guild | ops/deployment | Author `docker-compose.yml`, `.env.example`, and `quickstart.sh` with all core services + dependencies (postgres, redis, object-store, queue, otel). | Waiting on consolidated service list/version pins from upstream module releases | DVCP0101 |
| COMPOSE-44-002 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Implement `backup.sh` and `reset.sh` scripts with safety prompts and documentation. Dependencies: COMPOSE-44-001. | Depends on #1 | DVCP0101 |
| COMPOSE-44-003 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Package seed data container and onboarding wizard toggle (`QUICKSTART_MODE`), ensuring default creds randomized on first run. Dependencies: COMPOSE-44-002. | Needs RBRE0101 provenance | DVCP0101 |
| CONCELIER-AIAI-31-002 | DONE | 2025-11-18 | SPRINT_110_ingestion_evidence | Concelier Core · Concelier WebService Guilds | | Structured field/caching implementation gated on schema approval. | CONCELIER-GRAPH-21-001; CARTO-GRAPH-21-002 | DOAI0101 |
@@ -2744,7 +2744,7 @@
| DEPLOY-AIAI-31-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Advisory AI Guild | ops/deployment | Provide Helm/Compose manifests, GPU toggle, scaling/runbook, and offline kit instructions for Advisory AI service + inference container. | Wait for DVCP0101 compose template | DVPL0101 |
| DEPLOY-AIRGAP-46-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Offline Kit Guild | ops/deployment | Provide instructions and scripts (`load.sh`) for importing air-gap bundle into private registry; update Offline Kit guide. | Requires #1 artifacts | AGDP0101 |
| DEPLOY-CLI-41-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · CLI Guild | ops/deployment | Package CLI release artifacts (tarballs per OS/arch, checksums, signatures, completions, container image) and publish distribution docs. | Wait for CLI observability schema (035_CLCI0105) | AGDP0101 |
| DEPLOY-COMPOSE-44-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Depends on #1 | DVPL0101 |
| DEPLOY-COMPOSE-44-001 | DOING (dev-mock 2025-12-06) | 2025-12-06 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild | ops/deployment | Finalize Quickstart scripts (`quickstart.sh`, `backup.sh`, `reset.sh`), seed data container, and publish README with imposed rule reminder. | Depends on #1 | DVPL0101 |
| DEPLOY-EXPORT-35-001 | BLOCKED | 2025-10-29 | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Export Center Guild | ops/deployment | Package exporter service/worker Helm overlays (download-only), document rollout/rollback, and integrate signing KMS secrets. | Need exporter DSSE API (002_ATEL0101) | AGDP0101 |
| DEPLOY-EXPORT-36-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment Guild · Export Center Guild | ops/deployment | Document OCI/object storage distribution workflows, registry credential automation, and monitoring hooks for exports. Dependencies: DEPLOY-EXPORT-35-001. | Depends on #4 deliverables | AGDP0101 |
| DEPLOY-HELM-45-001 | TODO | | SPRINT_0501_0001_0001_ops_deployment_i | Deployment + Security Guilds | ops/deployment | Publish Helm install guide and sample values for prod/airgap; integrate with docs site build. | Needs helm chart schema | DVPL0101 |

View File

@@ -0,0 +1,532 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stella-ops.org/schemas/authority-production-signing.schema.json",
"title": "StellaOps Authority Production Signing Schema",
"description": "Schema for production DSSE signing keys, key management, and artifact signing workflows. Unblocks AUTH-GAPS-314-004, REKOR-RECEIPT-GAPS-314-005 (2+ tasks).",
"type": "object",
"definitions": {
"SigningKey": {
"type": "object",
"description": "Production signing key configuration",
"required": ["key_id", "algorithm", "purpose"],
"properties": {
"key_id": {
"type": "string",
"description": "Unique key identifier"
},
"algorithm": {
"type": "string",
"enum": ["ecdsa-p256", "ecdsa-p384", "ed25519", "rsa-2048", "rsa-4096"],
"description": "Signing algorithm"
},
"purpose": {
"type": "string",
"enum": ["artifact_signing", "attestation", "timestamp", "code_signing", "sbom_signing"],
"description": "Key purpose"
},
"key_type": {
"type": "string",
"enum": ["software", "hsm", "kms", "yubikey"],
"description": "Key storage type"
},
"public_key": {
"type": "string",
"description": "PEM-encoded public key"
},
"public_key_fingerprint": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "SHA-256 fingerprint of public key"
},
"certificate": {
"$ref": "#/definitions/SigningCertificate"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"status": {
"type": "string",
"enum": ["active", "pending_rotation", "revoked", "expired"],
"default": "active"
},
"rotation_policy": {
"$ref": "#/definitions/KeyRotationPolicy"
},
"metadata": {
"type": "object",
"additionalProperties": true
}
}
},
"SigningCertificate": {
"type": "object",
"description": "X.509 certificate for signing key",
"properties": {
"certificate_pem": {
"type": "string",
"description": "PEM-encoded certificate"
},
"issuer": {
"type": "string"
},
"subject": {
"type": "string"
},
"serial_number": {
"type": "string"
},
"not_before": {
"type": "string",
"format": "date-time"
},
"not_after": {
"type": "string",
"format": "date-time"
},
"chain": {
"type": "array",
"items": {
"type": "string"
},
"description": "Certificate chain (PEM)"
}
}
},
"KeyRotationPolicy": {
"type": "object",
"description": "Key rotation policy",
"properties": {
"rotation_interval_days": {
"type": "integer",
"minimum": 1,
"description": "Days between rotations"
},
"overlap_period_days": {
"type": "integer",
"minimum": 1,
"description": "Days both keys are valid"
},
"auto_rotate": {
"type": "boolean",
"default": false
},
"notify_before_days": {
"type": "integer",
"description": "Days before expiry to notify"
}
}
},
"SigningRequest": {
"type": "object",
"description": "Request to sign an artifact",
"required": ["artifact_type", "artifact_digest"],
"properties": {
"request_id": {
"type": "string",
"format": "uuid"
},
"artifact_type": {
"type": "string",
"enum": ["container_image", "sbom", "vex", "attestation", "policy_pack", "evidence_bundle"],
"description": "Type of artifact to sign"
},
"artifact_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "SHA-256 digest of artifact"
},
"artifact_uri": {
"type": "string",
"format": "uri",
"description": "URI to artifact (optional)"
},
"key_id": {
"type": "string",
"description": "Specific key to use (uses default if not specified)"
},
"signature_format": {
"type": "string",
"enum": ["dsse", "cosign", "gpg", "jws"],
"default": "dsse"
},
"annotations": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Annotations to include in signature"
},
"transparency_log": {
"type": "boolean",
"default": true,
"description": "Upload to transparency log (Rekor)"
},
"timestamp": {
"type": "boolean",
"default": true,
"description": "Include RFC 3161 timestamp"
}
}
},
"SigningResponse": {
"type": "object",
"description": "Signing operation result",
"required": ["signature_id", "artifact_digest", "signature"],
"properties": {
"signature_id": {
"type": "string",
"format": "uuid"
},
"artifact_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"signature": {
"type": "string",
"description": "Base64-encoded signature"
},
"signature_format": {
"type": "string",
"enum": ["dsse", "cosign", "gpg", "jws"]
},
"key_id": {
"type": "string"
},
"signed_at": {
"type": "string",
"format": "date-time"
},
"certificate": {
"type": "string",
"description": "Signing certificate (PEM)"
},
"chain": {
"type": "array",
"items": {
"type": "string"
}
},
"transparency_log_entry": {
"$ref": "#/definitions/TransparencyLogEntry"
},
"timestamp_response": {
"type": "string",
"description": "RFC 3161 timestamp response (base64)"
}
}
},
"TransparencyLogEntry": {
"type": "object",
"description": "Rekor transparency log entry",
"properties": {
"log_id": {
"type": "string",
"description": "Log instance identifier"
},
"log_index": {
"type": "integer",
"description": "Entry index in log"
},
"entry_uuid": {
"type": "string",
"description": "Entry UUID"
},
"integrated_time": {
"type": "string",
"format": "date-time"
},
"inclusion_proof": {
"$ref": "#/definitions/InclusionProof"
},
"verification_url": {
"type": "string",
"format": "uri"
}
}
},
"InclusionProof": {
"type": "object",
"description": "Merkle tree inclusion proof",
"properties": {
"tree_size": {
"type": "integer"
},
"root_hash": {
"type": "string"
},
"hashes": {
"type": "array",
"items": {
"type": "string"
}
},
"log_index": {
"type": "integer"
}
}
},
"VerificationRequest": {
"type": "object",
"description": "Request to verify a signature",
"required": ["artifact_digest", "signature"],
"properties": {
"artifact_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"signature": {
"type": "string",
"description": "Base64-encoded signature"
},
"certificate": {
"type": "string",
"description": "Expected signing certificate (optional)"
},
"trusted_roots": {
"type": "array",
"items": {
"type": "string"
},
"description": "Trusted root certificates (PEM)"
},
"verify_transparency_log": {
"type": "boolean",
"default": true
},
"verify_timestamp": {
"type": "boolean",
"default": true
}
}
},
"VerificationResponse": {
"type": "object",
"description": "Signature verification result",
"required": ["verified", "artifact_digest"],
"properties": {
"verified": {
"type": "boolean"
},
"artifact_digest": {
"type": "string"
},
"signer": {
"type": "string",
"description": "Signer identity from certificate"
},
"signed_at": {
"type": "string",
"format": "date-time"
},
"certificate_chain_valid": {
"type": "boolean"
},
"transparency_log_valid": {
"type": "boolean"
},
"timestamp_valid": {
"type": "boolean"
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"KeyRegistry": {
"type": "object",
"description": "Registry of signing keys",
"required": ["registry_id", "keys"],
"properties": {
"registry_id": {
"type": "string"
},
"version": {
"type": "string"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"keys": {
"type": "array",
"items": {
"$ref": "#/definitions/SigningKey"
}
},
"default_key_id": {
"type": "string",
"description": "Default key for signing operations"
},
"trusted_roots": {
"type": "array",
"items": {
"type": "string"
},
"description": "Trusted root certificates (PEM)"
},
"rekor_url": {
"type": "string",
"format": "uri",
"default": "https://rekor.sigstore.dev"
},
"tsa_url": {
"type": "string",
"format": "uri",
"description": "RFC 3161 timestamp authority URL"
}
}
},
"ProductionSigningConfig": {
"type": "object",
"description": "Production signing configuration",
"required": ["config_id"],
"properties": {
"config_id": {
"type": "string"
},
"environment": {
"type": "string",
"enum": ["development", "staging", "production"]
},
"key_registry": {
"$ref": "#/definitions/KeyRegistry"
},
"signing_policy": {
"$ref": "#/definitions/SigningPolicy"
},
"audit_config": {
"$ref": "#/definitions/AuditConfig"
}
}
},
"SigningPolicy": {
"type": "object",
"description": "Signing policy rules",
"properties": {
"require_approval": {
"type": "boolean",
"default": false,
"description": "Require approval for production signing"
},
"approvers": {
"type": "array",
"items": {
"type": "string"
}
},
"allowed_artifact_types": {
"type": "array",
"items": {
"type": "string"
}
},
"require_transparency_log": {
"type": "boolean",
"default": true
},
"require_timestamp": {
"type": "boolean",
"default": true
},
"max_signatures_per_key_per_day": {
"type": "integer"
}
}
},
"AuditConfig": {
"type": "object",
"description": "Audit logging configuration",
"properties": {
"log_all_requests": {
"type": "boolean",
"default": true
},
"log_verification_failures": {
"type": "boolean",
"default": true
},
"retention_days": {
"type": "integer",
"default": 365
},
"alert_on_anomaly": {
"type": "boolean",
"default": true
}
}
}
},
"properties": {
"config": {
"$ref": "#/definitions/ProductionSigningConfig"
}
},
"examples": [
{
"config": {
"config_id": "stellaops-prod-signing",
"environment": "production",
"key_registry": {
"registry_id": "stellaops-keys",
"version": "2025.10.0",
"updated_at": "2025-12-06T10:00:00Z",
"keys": [
{
"key_id": "stellaops-artifact-signing-2025",
"algorithm": "ecdsa-p256",
"purpose": "artifact_signing",
"key_type": "kms",
"public_key_fingerprint": "sha256:abc123def456789012345678901234567890123456789012345678901234abcd",
"created_at": "2025-01-01T00:00:00Z",
"expires_at": "2026-01-01T00:00:00Z",
"status": "active",
"rotation_policy": {
"rotation_interval_days": 365,
"overlap_period_days": 30,
"auto_rotate": false,
"notify_before_days": 60
}
},
{
"key_id": "stellaops-attestation-signing-2025",
"algorithm": "ecdsa-p256",
"purpose": "attestation",
"key_type": "kms",
"status": "active"
}
],
"default_key_id": "stellaops-artifact-signing-2025",
"rekor_url": "https://rekor.sigstore.dev",
"tsa_url": "https://timestamp.digicert.com"
},
"signing_policy": {
"require_approval": false,
"allowed_artifact_types": ["container_image", "sbom", "vex", "attestation", "policy_pack", "evidence_bundle"],
"require_transparency_log": true,
"require_timestamp": true,
"max_signatures_per_key_per_day": 10000
},
"audit_config": {
"log_all_requests": true,
"log_verification_failures": true,
"retention_days": 365,
"alert_on_anomaly": true
}
}
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,684 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stella-ops.org/schemas/production-release-manifest.schema.json",
"title": "StellaOps Production Release Manifest Schema",
"description": "Schema for production release manifests, image digests, and deployment artifacts. Unblocks DEPLOY-ORCH-34-001, DEPLOY-POLICY-27-001, and downstream deployment tasks (10+ tasks).",
"type": "object",
"definitions": {
"ReleaseManifest": {
"type": "object",
"description": "Production release manifest",
"required": ["release_id", "version", "services"],
"properties": {
"release_id": {
"type": "string",
"description": "Unique release identifier"
},
"version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(-[a-z0-9.]+)?$",
"description": "Release version (semver)"
},
"codename": {
"type": "string",
"description": "Release codename"
},
"released_at": {
"type": "string",
"format": "date-time"
},
"release_notes_url": {
"type": "string",
"format": "uri"
},
"services": {
"type": "array",
"items": {
"$ref": "#/definitions/ServiceRelease"
}
},
"infrastructure": {
"$ref": "#/definitions/InfrastructureRequirements"
},
"migrations": {
"type": "array",
"items": {
"$ref": "#/definitions/MigrationStep"
}
},
"breaking_changes": {
"type": "array",
"items": {
"$ref": "#/definitions/BreakingChange"
}
},
"signatures": {
"type": "array",
"items": {
"$ref": "#/definitions/ReleaseSignature"
}
},
"manifest_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"ServiceRelease": {
"type": "object",
"description": "Individual service release information",
"required": ["service_id", "image", "digest"],
"properties": {
"service_id": {
"type": "string",
"description": "Service identifier"
},
"name": {
"type": "string"
},
"image": {
"type": "string",
"description": "Container image (without tag)"
},
"tag": {
"type": "string",
"description": "Image tag"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Image digest for pinning"
},
"version": {
"type": "string",
"description": "Service version"
},
"config_version": {
"type": "string",
"description": "Configuration schema version"
},
"ports": {
"type": "array",
"items": {
"$ref": "#/definitions/PortMapping"
}
},
"health_check": {
"$ref": "#/definitions/HealthCheckConfig"
},
"resources": {
"$ref": "#/definitions/ResourceRequirements"
},
"dependencies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Service IDs this depends on"
},
"environment_defaults": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"sbom_ref": {
"type": "string",
"format": "uri",
"description": "Reference to SBOM"
},
"attestation_ref": {
"type": "string",
"format": "uri",
"description": "Reference to build attestation"
}
}
},
"PortMapping": {
"type": "object",
"description": "Port mapping configuration",
"required": ["container_port"],
"properties": {
"name": {
"type": "string"
},
"container_port": {
"type": "integer"
},
"protocol": {
"type": "string",
"enum": ["tcp", "udp"],
"default": "tcp"
},
"service_port": {
"type": "integer"
}
}
},
"HealthCheckConfig": {
"type": "object",
"description": "Health check configuration",
"properties": {
"path": {
"type": "string",
"default": "/health"
},
"port": {
"type": "integer"
},
"interval_seconds": {
"type": "integer",
"default": 30
},
"timeout_seconds": {
"type": "integer",
"default": 10
},
"failure_threshold": {
"type": "integer",
"default": 3
},
"success_threshold": {
"type": "integer",
"default": 1
}
}
},
"ResourceRequirements": {
"type": "object",
"description": "Resource requirements",
"properties": {
"cpu_request": {
"type": "string",
"pattern": "^[0-9]+(m)?$"
},
"cpu_limit": {
"type": "string",
"pattern": "^[0-9]+(m)?$"
},
"memory_request": {
"type": "string",
"pattern": "^[0-9]+(Mi|Gi)$"
},
"memory_limit": {
"type": "string",
"pattern": "^[0-9]+(Mi|Gi)$"
},
"storage": {
"type": "string",
"pattern": "^[0-9]+(Mi|Gi|Ti)$"
}
}
},
"InfrastructureRequirements": {
"type": "object",
"description": "Infrastructure requirements for release",
"properties": {
"kubernetes_version": {
"type": "string",
"description": "Minimum Kubernetes version"
},
"docker_version": {
"type": "string",
"description": "Minimum Docker version"
},
"databases": {
"type": "array",
"items": {
"$ref": "#/definitions/DatabaseRequirement"
}
},
"external_services": {
"type": "array",
"items": {
"$ref": "#/definitions/ExternalServiceRequirement"
}
}
}
},
"DatabaseRequirement": {
"type": "object",
"description": "Database requirement",
"required": ["type", "min_version"],
"properties": {
"type": {
"type": "string",
"enum": ["mongodb", "postgres", "redis", "rabbitmq"]
},
"min_version": {
"type": "string"
},
"recommended_version": {
"type": "string"
},
"storage_estimate": {
"type": "string"
}
}
},
"ExternalServiceRequirement": {
"type": "object",
"description": "External service requirement",
"required": ["service", "required"],
"properties": {
"service": {
"type": "string"
},
"required": {
"type": "boolean"
},
"description": {
"type": "string"
},
"default_url": {
"type": "string",
"format": "uri"
}
}
},
"MigrationStep": {
"type": "object",
"description": "Migration step",
"required": ["migration_id", "type", "description"],
"properties": {
"migration_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["database", "config", "data", "manual"]
},
"description": {
"type": "string"
},
"from_version": {
"type": "string"
},
"to_version": {
"type": "string"
},
"reversible": {
"type": "boolean",
"default": false
},
"script_path": {
"type": "string"
},
"estimated_duration": {
"type": "string"
},
"requires_downtime": {
"type": "boolean",
"default": false
}
}
},
"BreakingChange": {
"type": "object",
"description": "Breaking change documentation",
"required": ["change_id", "description", "migration_guide"],
"properties": {
"change_id": {
"type": "string"
},
"service": {
"type": "string"
},
"description": {
"type": "string"
},
"impact": {
"type": "string",
"enum": ["api", "config", "data", "behavior"]
},
"migration_guide": {
"type": "string"
},
"affected_versions": {
"type": "string"
}
}
},
"ReleaseSignature": {
"type": "object",
"description": "Release signature",
"required": ["signature_type", "signature"],
"properties": {
"signature_type": {
"type": "string",
"enum": ["cosign", "gpg", "dsse"]
},
"signature": {
"type": "string"
},
"key_id": {
"type": "string"
},
"signed_at": {
"type": "string",
"format": "date-time"
},
"rekor_log_index": {
"type": "integer"
}
}
},
"DeploymentProfile": {
"type": "object",
"description": "Deployment profile with service overrides",
"required": ["profile_id", "name"],
"properties": {
"profile_id": {
"type": "string",
"enum": ["development", "staging", "production", "airgap"]
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"service_overrides": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"replicas": {
"type": "integer"
},
"resources": {
"$ref": "#/definitions/ResourceRequirements"
},
"environment": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
},
"feature_flags": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
}
}
},
"ReleaseChannel": {
"type": "object",
"description": "Release channel configuration",
"required": ["channel_id", "name"],
"properties": {
"channel_id": {
"type": "string",
"enum": ["stable", "beta", "alpha", "nightly"]
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"current_version": {
"type": "string"
},
"manifest_url": {
"type": "string",
"format": "uri"
},
"update_frequency": {
"type": "string",
"description": "How often this channel updates"
}
}
}
},
"properties": {
"manifest": {
"$ref": "#/definitions/ReleaseManifest"
},
"profiles": {
"type": "array",
"items": {
"$ref": "#/definitions/DeploymentProfile"
}
},
"channels": {
"type": "array",
"items": {
"$ref": "#/definitions/ReleaseChannel"
}
}
},
"examples": [
{
"manifest": {
"release_id": "stellaops-2025.10.0",
"version": "2025.10.0",
"codename": "Aurora",
"released_at": "2025-12-06T10:00:00Z",
"release_notes_url": "https://github.com/stellaops/stellaops/releases/tag/v2025.10.0",
"services": [
{
"service_id": "orchestrator",
"name": "Orchestrator",
"image": "ghcr.io/stellaops/orchestrator",
"tag": "2025.10.0",
"digest": "sha256:orch123def456789012345678901234567890123456789012345678901234orch",
"version": "2025.10.0",
"ports": [
{
"name": "http",
"container_port": 8080,
"protocol": "tcp"
},
{
"name": "grpc",
"container_port": 9090,
"protocol": "tcp"
}
],
"health_check": {
"path": "/health",
"port": 8080,
"interval_seconds": 30
},
"resources": {
"cpu_request": "100m",
"cpu_limit": "1000m",
"memory_request": "256Mi",
"memory_limit": "1Gi"
},
"dependencies": ["postgres", "redis", "rabbitmq"],
"sbom_ref": "https://sbom.stella-ops.org/orchestrator/2025.10.0.json",
"attestation_ref": "https://attestation.stella-ops.org/orchestrator/2025.10.0.jsonl"
},
{
"service_id": "policy-engine",
"name": "Policy Engine",
"image": "ghcr.io/stellaops/policy-engine",
"tag": "2025.10.0",
"digest": "sha256:policy123def456789012345678901234567890123456789012345678901234pol",
"version": "2025.10.0",
"ports": [
{
"name": "http",
"container_port": 8081
}
],
"health_check": {
"path": "/health",
"port": 8081
},
"resources": {
"cpu_request": "200m",
"cpu_limit": "2000m",
"memory_request": "512Mi",
"memory_limit": "2Gi"
},
"dependencies": ["mongodb", "orchestrator"]
},
{
"service_id": "scanner",
"name": "Scanner",
"image": "ghcr.io/stellaops/scanner",
"tag": "2025.10.0",
"digest": "sha256:scan123def456789012345678901234567890123456789012345678901234scan",
"version": "2025.10.0"
},
{
"service_id": "findings-ledger",
"name": "Findings Ledger",
"image": "ghcr.io/stellaops/findings-ledger",
"tag": "2025.10.0",
"digest": "sha256:ledger123def456789012345678901234567890123456789012345678901234led",
"version": "2025.10.0",
"dependencies": ["postgres", "redis"]
},
{
"service_id": "vex-lens",
"name": "VEX Lens",
"image": "ghcr.io/stellaops/vex-lens",
"tag": "2025.10.0",
"digest": "sha256:vex123def456789012345678901234567890123456789012345678901234vexl",
"version": "2025.10.0"
},
{
"service_id": "concelier",
"name": "Concelier",
"image": "ghcr.io/stellaops/concelier",
"tag": "2025.10.0",
"digest": "sha256:conc123def456789012345678901234567890123456789012345678901234conc",
"version": "2025.10.0",
"dependencies": ["mongodb", "redis"]
}
],
"infrastructure": {
"kubernetes_version": ">=1.27",
"docker_version": ">=24.0",
"databases": [
{
"type": "mongodb",
"min_version": "7.0",
"recommended_version": "7.0.4",
"storage_estimate": "50Gi"
},
{
"type": "postgres",
"min_version": "16",
"recommended_version": "16.1",
"storage_estimate": "100Gi"
},
{
"type": "redis",
"min_version": "7",
"recommended_version": "7.2"
}
],
"external_services": [
{
"service": "S3-compatible storage",
"required": true,
"description": "For evidence and artifact storage"
},
{
"service": "OIDC provider",
"required": false,
"description": "For SSO authentication"
}
]
},
"migrations": [
{
"migration_id": "mig-2025.10-001",
"type": "database",
"description": "Add risk_score column to findings table",
"from_version": "2025.09.0",
"to_version": "2025.10.0",
"reversible": true,
"script_path": "migrations/2025.10/001_add_risk_score.sql",
"estimated_duration": "5m",
"requires_downtime": false
}
],
"breaking_changes": [
{
"change_id": "bc-2025.10-001",
"service": "policy-engine",
"description": "Policy API v1 deprecated, use v2",
"impact": "api",
"migration_guide": "See docs/migration/policy-api-v2.md",
"affected_versions": "<2025.10.0"
}
],
"manifest_digest": "sha256:manifest123def456789012345678901234567890123456789012345678901234"
},
"profiles": [
{
"profile_id": "development",
"name": "Development",
"description": "Single-replica development deployment",
"service_overrides": {
"orchestrator": {
"replicas": 1,
"resources": {
"cpu_limit": "500m",
"memory_limit": "512Mi"
}
}
},
"feature_flags": {
"debug_mode": true,
"airgap_mode": false
}
},
{
"profile_id": "production",
"name": "Production",
"description": "High-availability production deployment",
"service_overrides": {
"orchestrator": {
"replicas": 3
},
"policy-engine": {
"replicas": 3
}
},
"feature_flags": {
"debug_mode": false,
"airgap_mode": false
}
},
{
"profile_id": "airgap",
"name": "Air-Gap",
"description": "Offline deployment without external connectivity",
"feature_flags": {
"debug_mode": false,
"airgap_mode": true
}
}
],
"channels": [
{
"channel_id": "stable",
"name": "Stable",
"description": "Production-ready releases",
"current_version": "2025.10.0",
"manifest_url": "https://releases.stella-ops.org/stable/manifest.json",
"update_frequency": "Monthly"
},
{
"channel_id": "beta",
"name": "Beta",
"description": "Pre-release testing",
"current_version": "2025.11.0-beta.1",
"manifest_url": "https://releases.stella-ops.org/beta/manifest.json",
"update_frequency": "Weekly"
}
]
}
]
}

View File

@@ -0,0 +1,677 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stella-ops.org/schemas/scanner-entrytrace-baseline.schema.json",
"title": "StellaOps Scanner EntryTrace Baseline Schema",
"description": "Schema for EntryTrace heuristics, baseline configurations, and entry point detection. Unblocks SCANNER-ENTRYTRACE-18-503 through 18-508 (5+ tasks).",
"type": "object",
"definitions": {
"EntryTraceConfig": {
"type": "object",
"description": "EntryTrace configuration",
"required": ["config_id", "language"],
"properties": {
"config_id": {
"type": "string"
},
"language": {
"type": "string",
"enum": ["java", "python", "javascript", "typescript", "go", "ruby", "php", "csharp", "rust"],
"description": "Target language"
},
"version": {
"type": "string"
},
"entry_point_patterns": {
"type": "array",
"items": {
"$ref": "#/definitions/EntryPointPattern"
}
},
"framework_configs": {
"type": "array",
"items": {
"$ref": "#/definitions/FrameworkConfig"
}
},
"heuristics": {
"$ref": "#/definitions/HeuristicsConfig"
},
"exclusions": {
"$ref": "#/definitions/ExclusionConfig"
}
}
},
"EntryPointPattern": {
"type": "object",
"description": "Pattern for detecting entry points",
"required": ["pattern_id", "type", "pattern"],
"properties": {
"pattern_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["annotation", "decorator", "function_name", "class_name", "file_pattern", "import_pattern", "ast_pattern"],
"description": "Pattern type"
},
"pattern": {
"type": "string",
"description": "Regex or AST pattern"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Confidence level for this pattern"
},
"entry_type": {
"type": "string",
"enum": ["http_endpoint", "grpc_method", "cli_command", "event_handler", "scheduled_job", "message_consumer", "test_method"],
"description": "Type of entry point detected"
},
"framework": {
"type": "string",
"description": "Associated framework (e.g., spring, express, django)"
},
"metadata_extraction": {
"$ref": "#/definitions/MetadataExtraction"
}
}
},
"MetadataExtraction": {
"type": "object",
"description": "Rules for extracting metadata from entry points",
"properties": {
"http_method": {
"type": "string",
"description": "Pattern to extract HTTP method"
},
"route_path": {
"type": "string",
"description": "Pattern to extract route path"
},
"parameters": {
"type": "string",
"description": "Pattern to extract parameters"
},
"auth_required": {
"type": "string",
"description": "Pattern to detect auth requirements"
}
}
},
"FrameworkConfig": {
"type": "object",
"description": "Framework-specific configuration",
"required": ["framework_id", "name"],
"properties": {
"framework_id": {
"type": "string"
},
"name": {
"type": "string"
},
"version_range": {
"type": "string",
"description": "Supported version range (semver)"
},
"detection_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Patterns to detect framework usage"
},
"entry_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Entry point pattern IDs for this framework"
},
"router_file_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Glob patterns for router/route files"
},
"controller_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Patterns to identify controller classes"
}
}
},
"HeuristicsConfig": {
"type": "object",
"description": "Heuristics configuration for entry point detection",
"properties": {
"enable_static_analysis": {
"type": "boolean",
"default": true
},
"enable_dynamic_hints": {
"type": "boolean",
"default": false,
"description": "Use runtime hints if available"
},
"confidence_threshold": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.7,
"description": "Minimum confidence to report entry point"
},
"max_depth": {
"type": "integer",
"minimum": 1,
"default": 10,
"description": "Maximum call graph depth to analyze"
},
"timeout_seconds": {
"type": "integer",
"default": 300,
"description": "Analysis timeout per file"
},
"scoring_weights": {
"$ref": "#/definitions/ScoringWeights"
}
}
},
"ScoringWeights": {
"type": "object",
"description": "Weights for confidence scoring",
"properties": {
"annotation_match": {
"type": "number",
"default": 0.9
},
"naming_convention": {
"type": "number",
"default": 0.6
},
"file_location": {
"type": "number",
"default": 0.5
},
"import_analysis": {
"type": "number",
"default": 0.7
},
"call_graph_centrality": {
"type": "number",
"default": 0.4
}
}
},
"ExclusionConfig": {
"type": "object",
"description": "Exclusion rules",
"properties": {
"exclude_paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Glob patterns to exclude"
},
"exclude_packages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Package names to exclude"
},
"exclude_test_files": {
"type": "boolean",
"default": true
},
"exclude_generated": {
"type": "boolean",
"default": true
}
}
},
"EntryPoint": {
"type": "object",
"description": "Detected entry point",
"required": ["entry_id", "type", "location"],
"properties": {
"entry_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["http_endpoint", "grpc_method", "cli_command", "event_handler", "scheduled_job", "message_consumer", "test_method"]
},
"name": {
"type": "string"
},
"location": {
"$ref": "#/definitions/CodeLocation"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"framework": {
"type": "string"
},
"http_metadata": {
"$ref": "#/definitions/HttpMetadata"
},
"parameters": {
"type": "array",
"items": {
"$ref": "#/definitions/ParameterInfo"
}
},
"reachable_vulnerabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "CVE IDs reachable from this entry point"
},
"call_paths": {
"type": "array",
"items": {
"$ref": "#/definitions/CallPath"
}
},
"detection_method": {
"type": "string",
"description": "Pattern ID that detected this entry"
}
}
},
"CodeLocation": {
"type": "object",
"description": "Source code location",
"required": ["file_path"],
"properties": {
"file_path": {
"type": "string"
},
"line_start": {
"type": "integer"
},
"line_end": {
"type": "integer"
},
"column_start": {
"type": "integer"
},
"column_end": {
"type": "integer"
},
"function_name": {
"type": "string"
},
"class_name": {
"type": "string"
},
"package_name": {
"type": "string"
}
}
},
"HttpMetadata": {
"type": "object",
"description": "HTTP endpoint metadata",
"properties": {
"method": {
"type": "string",
"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]
},
"path": {
"type": "string"
},
"path_parameters": {
"type": "array",
"items": {
"type": "string"
}
},
"query_parameters": {
"type": "array",
"items": {
"type": "string"
}
},
"consumes": {
"type": "array",
"items": {
"type": "string"
}
},
"produces": {
"type": "array",
"items": {
"type": "string"
}
},
"auth_required": {
"type": "boolean"
},
"auth_scopes": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"ParameterInfo": {
"type": "object",
"description": "Entry point parameter",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"source": {
"type": "string",
"enum": ["path", "query", "header", "body", "form", "cookie"]
},
"required": {
"type": "boolean"
},
"tainted": {
"type": "boolean",
"description": "Whether this is a potential taint source"
}
}
},
"CallPath": {
"type": "object",
"description": "Call path from entry point to vulnerability",
"properties": {
"target_vulnerability": {
"type": "string",
"description": "CVE ID or vulnerability identifier"
},
"path_length": {
"type": "integer"
},
"calls": {
"type": "array",
"items": {
"$ref": "#/definitions/CallSite"
}
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"CallSite": {
"type": "object",
"description": "Individual call in call path",
"properties": {
"caller": {
"type": "string"
},
"callee": {
"type": "string"
},
"location": {
"$ref": "#/definitions/CodeLocation"
},
"call_type": {
"type": "string",
"enum": ["direct", "virtual", "interface", "reflection", "lambda"]
}
}
},
"BaselineReport": {
"type": "object",
"description": "EntryTrace baseline analysis report",
"required": ["report_id", "scan_id", "entry_points"],
"properties": {
"report_id": {
"type": "string",
"format": "uuid"
},
"scan_id": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"config_used": {
"type": "string",
"description": "Config ID used for analysis"
},
"entry_points": {
"type": "array",
"items": {
"$ref": "#/definitions/EntryPoint"
}
},
"statistics": {
"$ref": "#/definitions/BaselineStatistics"
},
"frameworks_detected": {
"type": "array",
"items": {
"type": "string"
}
},
"analysis_duration_ms": {
"type": "integer"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"BaselineStatistics": {
"type": "object",
"description": "Baseline analysis statistics",
"properties": {
"total_entry_points": {
"type": "integer"
},
"by_type": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"by_framework": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"by_confidence": {
"type": "object",
"properties": {
"high": {
"type": "integer"
},
"medium": {
"type": "integer"
},
"low": {
"type": "integer"
}
}
},
"files_analyzed": {
"type": "integer"
},
"files_skipped": {
"type": "integer"
},
"reachable_vulnerabilities": {
"type": "integer"
}
}
}
},
"properties": {
"configs": {
"type": "array",
"items": {
"$ref": "#/definitions/EntryTraceConfig"
}
},
"baseline_reports": {
"type": "array",
"items": {
"$ref": "#/definitions/BaselineReport"
}
}
},
"examples": [
{
"configs": [
{
"config_id": "java-spring-baseline",
"language": "java",
"version": "1.0.0",
"entry_point_patterns": [
{
"pattern_id": "spring-request-mapping",
"type": "annotation",
"pattern": "@(Get|Post|Put|Delete|Patch|Request)Mapping",
"confidence": 0.95,
"entry_type": "http_endpoint",
"framework": "spring",
"metadata_extraction": {
"http_method": "annotation.name.replace('Mapping', '').toUpperCase()",
"route_path": "annotation.value || annotation.path"
}
},
{
"pattern_id": "spring-rest-controller",
"type": "annotation",
"pattern": "@RestController",
"confidence": 0.9,
"entry_type": "http_endpoint",
"framework": "spring"
},
{
"pattern_id": "spring-scheduled",
"type": "annotation",
"pattern": "@Scheduled",
"confidence": 0.95,
"entry_type": "scheduled_job",
"framework": "spring"
}
],
"framework_configs": [
{
"framework_id": "spring-boot",
"name": "Spring Boot",
"version_range": ">=2.0.0",
"detection_patterns": [
"org.springframework.boot",
"@SpringBootApplication"
],
"entry_patterns": ["spring-request-mapping", "spring-rest-controller", "spring-scheduled"],
"router_file_patterns": ["**/controller/**/*.java", "**/rest/**/*.java"],
"controller_patterns": [".*Controller$", ".*Resource$"]
}
],
"heuristics": {
"enable_static_analysis": true,
"enable_dynamic_hints": false,
"confidence_threshold": 0.7,
"max_depth": 15,
"timeout_seconds": 600,
"scoring_weights": {
"annotation_match": 0.95,
"naming_convention": 0.6,
"file_location": 0.5,
"import_analysis": 0.7,
"call_graph_centrality": 0.4
}
},
"exclusions": {
"exclude_paths": ["**/test/**", "**/generated/**"],
"exclude_packages": ["org.springframework.test"],
"exclude_test_files": true,
"exclude_generated": true
}
}
],
"baseline_reports": [
{
"report_id": "550e8400-e29b-41d4-a716-446655440000",
"scan_id": "scan-2025-12-06-001",
"generated_at": "2025-12-06T10:00:00Z",
"config_used": "java-spring-baseline",
"entry_points": [
{
"entry_id": "ep-001",
"type": "http_endpoint",
"name": "getUserById",
"location": {
"file_path": "src/main/java/com/example/UserController.java",
"line_start": 25,
"line_end": 35,
"function_name": "getUserById",
"class_name": "UserController",
"package_name": "com.example"
},
"confidence": 0.95,
"framework": "spring",
"http_metadata": {
"method": "GET",
"path": "/api/users/{id}",
"path_parameters": ["id"],
"auth_required": true
},
"parameters": [
{
"name": "id",
"type": "Long",
"source": "path",
"required": true,
"tainted": true
}
],
"reachable_vulnerabilities": ["CVE-2023-1234"],
"detection_method": "spring-request-mapping"
}
],
"statistics": {
"total_entry_points": 45,
"by_type": {
"http_endpoint": 40,
"scheduled_job": 3,
"message_consumer": 2
},
"by_framework": {
"spring": 45
},
"by_confidence": {
"high": 38,
"medium": 5,
"low": 2
},
"files_analyzed": 120,
"files_skipped": 15,
"reachable_vulnerabilities": 12
},
"frameworks_detected": ["spring-boot"],
"analysis_duration_ms": 45000,
"digest": "sha256:entry123def456789012345678901234567890123456789012345678901234entry"
}
]
}
]
}

View File

@@ -15,6 +15,11 @@ StellaOps supports multiple cryptographic compliance profiles to meet regional r
| `kcmvp` | KCMVP | South Korea | Korean cryptographic validation |
| `eidas` | eIDAS/ETSI TS 119 312 | European Union | EU digital identity and trust |
**Certification caveats (current baselines)**
- `fips`, `eidas`, `kcmvp` are enforced via algorithm allow-lists only; certified modules are not yet integrated. Deployments must treat these as non-certified until a CMVP/QSCD/KCMVP module is configured.
- `gost` is validated on Linux via OpenSSL GOST; Windows CryptoPro CSP remains pending.
- `sm` uses a software-only SM2/SM3 path when `SM_SOFT_ALLOWED=1`; hardware PKCS#11 validation is pending.
## Configuration
Set the compliance profile via environment variable or configuration: