Method: code/config audit only. Deterministic, compiler-style logic preferred. LLMs treated as optional and absent unless wired. All claims cite file paths and symbols.
SEA-DSL is treated as the canonical semantic code for SEA-Forge; projections and compiler outputs must be derived from SEA-DSL rather than the other way around.
services/workbench-bff/src/adapters/behavior_normalizer.py:BehaviorNormalizer, services/workbench-bff/src/api/behavior_routes.py)EvidenceArtifact in governance-runtime that can be repurposed, but the persistence adapter for it is missing. (services/workbench-bff/src/adapters/ops_runner.py:_get_audit_log_path, services/workbench-bff/src/adapters/remediation_engine.py:_log_audit, libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py:EvidenceArtifact, libs/governance-runtime/application/src/gen/commands/collect_evidence_command.py:EvidenceArtifactRepositoryPort)services/workbench-bff/src/adapters/behavior_normalizer.py, services/workbench-bff/src/adapters/behavior_correlator.py, services/workbench-bff/src/adapters/behavior_drift_classifier.py).sea → AST → IR → Manifest, but no code to generate .sea from evidence/assertions. (just/62-compiler.just, tools/ast_to_ir.py, tools/ir_to_manifest.py, tools/sea_new_context.py [template writer])tools/ir_to_kgs.py. Protobuf projection is available via the SEA CLI directly from .sea models (Domainforge sea project --format protobuf), so no IR→proto compiler is required. (tools/ir_to_kgs.py, domainforge/sea-core/src/cli/project.rs)rg results show no S3 client code)| Step | Existing Code (paths + symbols) | Readiness | Notes |
|---|---|---|---|
| 1) Evidence ingestion connectors (Okta, GitHub, CI/CD; Jira optional) | None found. Only generic HTTP + GitHub PR automation unrelated to evidence ingestion: services/workbench-bff/src/adapters/pr_creator.py:GitHubPRCreator |
Missing | No source connectors. A new ingestion service/adapter layer required. |
| 2) Append-only Evidence Ledger (metadata DB + raw payload object store) | Partial patterns: JSONL append-only audit logs in services/workbench-bff/src/adapters/ops_runner.py:_get_audit_log_path, services/workbench-bff/src/adapters/remediation_engine.py:_log_audit; EvidenceArtifact entity + command port exists in governance-runtime: libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py:EvidenceArtifact, libs/governance-runtime/application/src/gen/commands/collect_evidence_command.py:EvidenceArtifactRepositoryPort |
Partial | EvidenceArtifact repository adapter file referenced by tests but missing: libs/governance-runtime/adapters/src/gen/evidence_artifact_repository.py (imported in libs/governance-runtime/adapters/tests/integration/test_evidence_artifact_repository_integration.py). No object store. |
| 3) Deterministic parsing of evidence → typed features | OTLP normalization: services/workbench-bff/src/adapters/behavior_normalizer.py:BehaviorNormalizer and parsing helpers (OTLP trace/log/metric parsing). |
Partial | Works for telemetry evidence; does not cover GitHub/Okta/CI payloads. |
| 4) Deterministic semantic compiler/inference → ObservedAssertions | Correlation & drift rules: services/workbench-bff/src/adapters/behavior_correlator.py:BehaviorCorrelator, services/workbench-bff/src/adapters/behavior_drift_classifier.py |
Partial | Outputs correlation/drift, not ObservedAssertion schema. Can be mapped deterministically to ObservedAssertion. |
| 5) Declared intent ingestion (deterministic parsing; optional LLM extraction) | None found for document parsing or LLM-assisted extraction. LLM runtime exists but not wired to intent ingestion: services/llm-provider/src/main.py, services/llm-provider/src/adapters/litellm_adapter.py |
Missing | No doc/PDF parser or declared-intent pipeline. |
| 6) Deterministic SEA-DSL emitter (.evidence_observed.sea, .declared_intent.sea, .spec.sea) | Compiler pipeline exists in reverse: .sea → AST → IR → manifest (just/62-compiler.just, tools/ast_to_ir.py, tools/ir_to_manifest.py). Template writer example: tools/sea_new_context.py |
Missing | Need deterministic emitter to write .sea from assertions. |
| 7) SEA-DSL projections (Protobuf + RDF/Turtle/XML) | RDF/Turtle from IR: tools/ir_to_kgs.py (emits RDF triples, supports SHACL). Protobuf: SEA CLI sea project --format protobuf (Domainforge). Knowledge Graph service: services/knowledge-graph/src/api/routes.py |
Partial | RDF export achievable via IR pipeline; protobuf export available from .sea via SEA CLI. |
services/workbench-bff/src/adapters/pr_creator.py:GitHubPRCreator)services/a2a/src/api/routes.py:APIRouter)libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py:EvidenceArtifact)libs/governance-runtime/application/src/gen/commands/collect_evidence_command.py:CollectEvidenceHandlerImpl)libs/governance-runtime/adapters/tests/integration/test_evidence_artifact_repository_integration.py → libs/governance-runtime/adapters/src/gen/evidence_artifact_repository.py)services/workbench-bff/src/adapters/ops_runner.py:_audit_log, services/workbench-bff/src/adapters/remediation_engine.py:_log_audit)services/workbench-bff/src/adapters/behavior_normalizer.py:BehaviorNormalizer)services/workbench-bff/src/models.py:BehaviorEvidenceModel)services/workbench-bff/src/adapters/behavior_correlator.py:BehaviorCorrelator)services/workbench-bff/src/adapters/behavior_drift_classifier.py)services/knowledge-graph/src/adapters/oxigraph_adapter.py:_project_behavior_evidence)services/llm-provider/src/adapters/litellm_adapter.py:LiteLLMAdapter).sea → AST/IR/manifest. (just/62-compiler.just, tools/ast_to_ir.py, tools/ir_to_manifest.py).sea files (not evidence-based). (tools/sea_new_context.py:write)tools/ir_to_kgs.py:_ir_to_triples, _compute_snapshot_id)docs/handbooks/SEA_DSL_Handbook/Syntax_Reference.md)rg results; no code paths)libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py, missing adapter file referenced by tests)_execute_logic). (libs/governance-runtime/application/src/gen/commands/collect_evidence_command.py:CollectEvidenceHandlerImpl)services/workbench-bff/src/api/behavior_routes.py)tools/sea_new_context.py is only template writer)rg search)1) Define append-only evidence ledger models in a new handwritten module (avoid src/gen/**):
services/workbench-bff/src/adapters/evidence_ledger.py or a new services/evidence-ledger/ module.services/workbench-bff/src/api/database.py and services/workbench-bff/src/adapters/behavior_indexer.py.EvidenceEvent table with insert-only semantics and hash chain (pattern from services/workbench-bff/src/api/audit.py:AuditEvent._compute_hash).2) Implement EvidenceArtifact repository adapter (handwritten)
libs/governance-runtime/adapters/src/evidence_artifact_repository.py.EvidenceArtifactRepositoryPort from libs/governance-runtime/application/src/gen/commands/collect_evidence_command.py.libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py:EvidenceArtifact.3) Wire CollectEvidence handler with deterministic logic
libs/governance-runtime/application/src/collect_evidence_handler_impl.py and bind it in your HTTP route wiring (avoid editing generated routes in libs/governance-runtime/adapters/src/gen/http/routes.py).4) Add connector adapters (deterministic)
libs/<ctx>/adapters/ or a new services/evidence-ingest/ service.httpx (already used in repo) for HTTP calls, avoid new frameworks. (services/policy-gateway/src/api/routes.py uses httpx)EvidenceEvent + raw payload storage reference.5) Reuse BehaviorNormalizer for telemetry evidence
BehaviorNormalizer for deterministic features. (services/workbench-bff/src/adapters/behavior_normalizer.py:BehaviorNormalizer)6) Define ObservedAssertion & DeclaredAssertion schemas
schemas/events/ mirroring required fields, reusing schemas/events/governance/evidence-artifact.schema.json as structure reference.7) Implement deterministic SEA-DSL emitter
tools/emit_sea_from_assertions.py that writes .evidence_observed.sea, .declared_intent.sea, .spec.sea using stable ordering and formatting (pattern from tools/sea_new_context.py).8) RDF projection via existing pipeline
just sea-parse → tools/ast_to_ir.py → tools/ir_to_kgs.py to output RDF/Turtle.9) Use SEA CLI for protobuf projection
sea project --format protobuf directly on .sea models (Domainforge). No IR-based emitter needed.No existing S3/Garage integration found. Add a generic ObjectStore port + GarageS3 adapter.
put_bytes(key: str, bytes: bytes, content_type: str) -> strget_bytes(key: str) -> bytesexists(key: str) -> boolGarageS3ObjectStoreAdapter using S3-compatible API.GARAGE_S3_ENDPOINT, GARAGE_S3_REGION, GARAGE_S3_ACCESS_KEY, GARAGE_S3_SECRET_KEY, GARAGE_S3_BUCKET, GARAGE_S3_PATH_STYLE.raw_ref URI in ledger.boto3 (Python) or aws-sdk-s3 (Rust) only if needed; otherwise implement basic signed S3 requests with httpx (more work but no extra deps). No existing S3 clients are present.Reuse (existing):
schemas/events/governance/evidence-artifact.schema.json → base for EvidenceEvent metadata (artifactId, artifactType, evidenceHash, submittedAt, contentRef).libs/governance-runtime/domain/src/gen/entities/evidence_artifact.py:EvidenceArtifact → append-only entity for evidence metadata.services/workbench-bff/src/models.py:BehaviorEvidenceModel → deterministic feature model for telemetry evidence.Propose (new, minimal):
schemas/events/evidence/evidence-event.schema.json (aligned to your EvidenceEvent shape).schemas/events/assertions/observed-assertion.schema.json and declared-assertion.schema.json (aligned to provided target shapes).Goal: deterministic .sea emission from Observed/Declared assertions with stable ordering.
tools/emit_sea_from_assertions.py (new, handwritten).docs/specs/<ctx>/<ctx>.evidence_observed.seadocs/specs/<ctx>/<ctx>.declared_intent.seadocs/specs/<ctx>/<ctx>.spec.seajust sea-validate, just sea-parse, tools/ast_to_ir.py.Minimal tests to prove the pipeline:
1) Connector ingests sample payload → EvidenceEvent written
services/workbench-bff/tests/test_evidence_ledger.py (new)tests/fixtures/evidence/github_sample.json (new)just test-python (or pytest services/workbench-bff/tests/test_evidence_ledger.py -v)2) Compiler produces stable ObservedAssertions
services/workbench-bff/tests/test_observed_assertions.py (new)services/workbench-bff/src/adapters/behavior_normalizer.py, behavior_correlator.py).pytest services/workbench-bff/tests/test_observed_assertions.py -v3) SEA emitter produces deterministic .sea files
tools/tests/test_sea_emitter_determinism.py (new)pytest tools/tests/test_sea_emitter_determinism.py -v4) SEA validation passes
just sea-validate docs/specs/<ctx>/<ctx>.evidence_observed.seajust sea-parse docs/specs/<ctx>/<ctx>.evidence_observed.seasea CLI used in just/62-compiler.just is available in the environment; it is not part of this repo. (just/62-compiler.just:sea-validate, sea-parse)services/workbench-bff).infra/ for Garage.