AEGISdocs
Resources

AEGIS Roadmap

Single source of truth for AEGIS future work including active PRs, open issues, and release milestones.

Version: 2.6.0 Updated: 2026-04-12 Status: Active Cross-References: README.md, CLAUDE.md

This document is the single source of truth for AEGIS future work, including active PRs, open issues, and release milestones.


Next Steps (Ordered Checklist)

Work through these in order. Check off each item as completed. Source: Discovery Analysis 2026-02-08.

Immediate (no blockers, can start now)

  • 1. Fix dependency misclassificationscipy and prometheus_client moved from dev to dedicated engine and telemetry optional groups with try/except import guards and clear ImportError messages at point of use. Files: pyproject.toml, src/engine/utility.py, src/telemetry/prometheus_exporter.py, README.md, tests/test_optional_deps.py
  • 2. Docs version syncrepository-structure.md:28 and comprehensive-todo-discovery.md synced to CLAUDE.md v4.2.3, metrics 1475/94.21%. Commit: d84330a
  • 3. Update dependency versionssafety>=2.3.0>=3.0.0; python-bitcoinlib already pinned at >=0.12.0 (no change needed). All quality gates pass. File: pyproject.toml, Commit: e2ab0a5
  • 4. Document broad exception catches — Added # Intentional: <reason> comments to 15 except Exception sites across 8 files per CLAUDE.md §3. Commit: fc0b41c

Short-term (v1.1.0)

  • 5. Boundary tests for all gates — 77 parametrized BVA tests verifying comparison operators at exact thresholds for all 6 gates + drift detector. File: tests/test_gate_boundaries.py
  • 6. GOVERNANCE actor type — Override workflow orchestration: Governance actor class with override lifecycle (initiate/sign/approve/reject/expire), compliance checking (complexity gate non-overridable), emergency halt; ultrathink-hardened (halt guards, fail-closed compliance, thread safety). Files: src/actors/governance.py, src/actors/base.py, tests/test_governance_actor.py (41 tests)
  • 7. CALIBRATOR actor type — Statistical threshold tuning: Calibrator actor class with drift recalibration (delegates to DriftMonitor.calibrate_thresholds()), Bayesian prior update (delegates to BayesianPosterior.update_prior()), gate parameter proposals with recognized parameter whitelist, approval-gated application workflow, telemetry emission; thread-safe with threading.Lock; ultrathink-hardened (U-1..U-5). Files: src/actors/calibrator.py, src/actors/base.py, tests/test_calibrator_actor.py (69 tests incl. 12 regression)
  • 8. Extract shared serialization patternensure_utc() extracted from 3 workflow files to src/workflows/serialization.py. Files: serialization.py, consensus.py, override.py, proposal.py
  • 9. Extract shared parameter validation — 4 validators (validate_positive, validate_range, validate_normalized, validate_threshold_ordering) extracted to src/engine/validation.py, replacing ~24 inline checks across 5 engine modules. Files: validation.py, bayesian.py, drift.py, gates.py, utility.py, complexity.py Deferred: consolidating inline timezone checks in persistence/telemetry (different module boundary).

Medium-term (v1.2.0)

  • 10. Production deployment guidedocs/deployment/production-guide.md with Docker, K8s, AWS examples, Docker Compose, HSM integration, multi-region DR, observability setup, production checklist. Files: docs/deployment/production-guide.md, Dockerfile, docker-compose.yaml, monitoring/prometheus/prometheus.yml
  • 11. Migration guide — Parameter recalibration via Calibrator actor, workflow state migration, schema upgrade path, version compatibility matrix. File: docs/deployment/migration-guide.md
  • 12. Performance SLAs — Latency targets (p50 < 100ms, p95 < 500ms, p99 < 1s), throughput baselines, component latency budget, recorded benchmark results. File: docs/deployment/performance-slas.md
  • 13. Shadow mode for KL divergence calibrationshadow_mode=True on pcw_decide() with ShadowResult dataclass, drift monitor integration, SHADOW_EVALUATION telemetry, Prometheus mode label, CLI --shadow flag, MCP shadow_mode param. 44 new tests. Unblocks issue #1. Files: src/integration/pcw_decide.py, src/telemetry/emitter.py, src/telemetry/prometheus_exporter.py, src/cli.py, src/aegis_governance/mcp_server.py, src/aegis_governance/__init__.py, monitoring/prometheus/alerting-rules.yaml, monitoring/prometheus/recording-rules.yaml, tests/integration/test_shadow_mode.py
  • 14. HTTP telemetry sinkHTTPEventSink (per-event POST), BatchHTTPSink (batching + retry), http_sink() factory; stdlib-only (urllib.request); AegisConfig.telemetry_url; CLI --telemetry-url; MCP telemetry_url param; SDK re-exports. 45 new tests. Files: src/telemetry/emitter.py, src/config.py, src/cli.py, src/aegis_governance/mcp_server.py, src/aegis_governance/__init__.py, src/telemetry/__init__.py, tests/telemetry/test_http_sink.py
  • 15. Drift detection → policy connectionDriftMonitor wired into production pcw_decide() path: CRITICAL → HALT (non-overridable), WARNING → advisory constraint, NORMAL → no change; _evaluate_drift_policy() + _apply_drift_overrides() helpers; DRIFT_POLICY_ENFORCED telemetry; create_drift_monitor() factory; CLI --drift-baseline; MCP drift_baseline_data; DriftAction/DriftResult re-exports; null-value filtering; drift-specific next_steps. 39 new tests. Files: src/integration/pcw_decide.py, src/config.py, src/cli.py, src/aegis_governance/mcp_server.py, src/aegis_governance/__init__.py, src/engine/__init__.py, src/telemetry/emitter.py, tests/integration/test_drift_enforcement.py, tests/integration/test_drift_regression.py

Long-term (v2.0.0) — AWS Infrastructure DEPLOYED

  • 16. Agent integration guide & parameter cookbook — (a) docs/integration/parameter-reference.md — comprehensive parameter reference with derivation guidance, domain examples, boundary behavior for all inputs; (b) docs/integration/domain-templates.md — 4 worked examples (trading, CI/CD, content moderation, autonomous agent) with parameter mappings, JSON inputs, gate-by-gate walkthroughs; (c) MCP tool descriptions enriched with semantic context, minimum/maximum JSON Schema constraints, instructions field in initialize response. Files: docs/integration/parameter-reference.md, docs/integration/domain-templates.md, src/aegis_governance/mcp_server.py
  • 17. GAP-L1 Deployment — Grafana deployment, production Prometheus, alert routing (Slack/PagerDuty). Issue #9. DEPLOYED: AegisMonitoringStack-dev — CloudWatch dashboard AEGIS-Governance-dev, SNS topic aegis-governance-alarms-dev, 4 alarms (Lambda errors, Lambda throttles, ECS unhealthy, billing). Grafana/Prometheus observability via ADOT sidecar on ECS Fargate.
  • 18. GAP-L2 — OpenTelemetry distributed tracing. DEPLOYED: ADOT sidecar running on ECS Fargate (AegisMcpStack-dev), configured for Prometheus remote write to AMP. Full OTLP span correlation deferred to production workload phase.
  • 19. Issues #2, #5, #7, #8, #9 Phase 2 — Infrastructure requirements met. DEPLOYED: DynamoDB aegis-governance-state-dev, S3 aegis-governance-audit-dev-164171672016, Secrets Manager aegis/signing-keys-dev, KMS encryption key, IAM auth on API Gateway, SNS alarm topic. Remaining: Slack/email subscription on SNS, multi-region replication, Locust load testing against live API Gateway endpoint.
  • 20. Red-team fuzzing — Phase 2 adversarial testing. DEPLOYED: Cloud Run aegis-api + aegis-mcp at https://aegis-api-980022636831.us-central1.run.app/ available as live targets (migrated from AWS Lambda+ECS, 2026-03-28). Fuzzing execution pending.
  • 20a. MCP hardening (CoSAI/Red Hat) — Per research/003: ✅ (a) MCP audit logging — structured log for every tool invocation; ✅ (b) MCP rate limiting — token bucket/sliding window on mcp_server.py; ✅ (c) TLS enforcement — _validate_sink_url() enforces HTTPS on HTTPEventSink/BatchHTTPSink (with allow_insecure escape hatch for local dev), MCP _ALLOWED_TELEMETRY_SCHEMES restricted to {"https"}; ✅ (d) CoSAI MCP-T cross-reference in CLAUDE.md §11.4.1 (MCP-T1..T12 → AEGIS control matrix); ✅ (e) MCP tool schema signing — AMTSS Protocol v1 (src/crypto/schema_signer.py, ToolSchemaSigner, Ed25519, RFC 8785, _meta inline delivery, capabilities.experimental keyset); research: docs/research/004-mcp-schema-signing-design.md. All 5 sub-items complete.

Infrastructure (ECS MCP)

  • 23. MCP Streamable HTTP transport — Re-enabled (2026-03-13) via FastMCP argparse --transport streamable-http. Public API Gateway (HTTP API) + VPC Link with Unkey Lambda authorizer added to ECS stack. Health check endpoint via @mcp.custom_route("/health"). Files: src/aegis_governance/mcp_server.py, infra/stacks/ecs_stack.py, infra/app.py
  • 21. IP & licensing review — License changed from MIT to BSL 1.1 (2026-03-13). Change Date 2030-03-13, Change License Apache 2.0. Production use requires commercial subscription at portal.undercurrentholdings.com. Remaining: (a) patentability evaluation; (b) trademark feasibility for "AEGIS Governance"; (d) prior art landscape assessment. Files: LICENSE, NOTICE, pyproject.toml
  • 22. Commercialization strategy — Market research complete: AI governance market $300-850M (2025), 35-40% CAGR to $1.5B-$4.8B by 2033. SaaS + BSL model (BSL 1.1 licensed engine, distributed via hosted API, MCP server, and self-service portal). Pricing tiers defined: Community (free), Professional ($3,500/mo), Enterprise ($18,000/mo), Financial Services ($50,000/mo). Files: src/aegis_governance/tiers.py, docs/research/006-pricing-unit-economics.md, docs/research/007-gtm-action-plan-Q2-2026.md
  • 22a. Phase 1: Customer visibility — Customer records in DynamoDB, usage metering with atomic counters, admin CLI (aegis admin), Lambda integration with response headers, provisioning script. Files: src/aegis_governance/customer.py, src/cli.py, src/lambda_handler.py, scripts/provision-customer.py. ADR: ADR-008. Guide: customer-management.md.
  • 22b. Phase 2d: Self-service portal — Customer portal (Next.js 16 + Clerk auth), usage dashboards (quota gauge, daily chart, channel breakdown), API key management (Clerk-stored keys validated against AEGIS API), account/profile management, tier upgrade requests. Directory: aegis-portal/. Live at portal.undercurrentholdings.com.
  • 22c. Phase 3: Monetization — Stripe Billing + Meters, Checkout Sessions, subscription lifecycle webhook, tier enforcement on upgrade/downgrade. Live-mode products and keys configured (2026-03-20). Files: aegis-portal/lib/actions.ts, src/aegis_governance/stripe_webhook.py. ADR: ADR-008.

Discovery Analysis 2026-03-22

Comprehensive 8-agent codebase discovery. Source: 2026-03-22 analysis session (8 parallel agents: TODO scanner, ROADMAP audit, dependency analysis, code quality, test coverage, portal audit, git activity, config review). Project health: excellent — 0 bugs, 4124 tests, ~92% coverage, 12/12 CI workflows green, Grade A code quality.

Immediate (no blockers, can start now)

  • D1. Add annual Stripe price IDs to .env.exampleSTRIPE_PRICE_ID_PROFESSIONAL_ANNUAL, STRIPE_PRICE_ID_ENTERPRISE_ANNUAL, STRIPE_PRICE_ID_FINANCIAL_SERVICES_ANNUAL. Annual billing checkout (actions.ts:309) fails without these; products already created in Stripe Dashboard (CLAUDE.md §9, v4.6.82). Files: aegis-portal/.env.example, Vercel env vars, Secrets Manager
  • D2. Commit .afa.yaml to version control — Project-level AFA agent config (analogous to .github/dependabot.yml). Defines model (Gemini 3 Flash), analysis scope (Python only, excludes tests/docs/spec), guardrails (3 max candidates, auto-commit off, afa/ branch prefix), and budget cap ($50/mo). Committed as shared project policy.
  • D3. Update eslint-config-next — 16.1.6 → 16.2.0 to match Next.js framework version. File: aegis-portal/package.json

Short-term (this week)

  • D4. Merge or close feat/dogfood-shadow-ci — Branch was fully merged into main (ancestor check confirmed). All deliverables on main: tools/ci/aegis_shadow_evaluate.py, docs/integration/dogfooding-guide.md, shadow CI workflow step, backfill script. Local branch deleted 2026-04-04. Completed: 2026-04-04
  • D5. Clarify REST API Lambda split in docsdocs/api/rest.md conflates evaluation endpoints (Lambda 1: src/lambda_handler.py/evaluate, /risk-check, /health) with customer endpoints (Lambda 2: src/aegis_governance/customer_api.py/customer/*). Add section headers distinguishing the two Lambda functions. File: docs/api/rest.md
  • D6. Extract decision serialization_safe_round() + _decision_to_dict() duplicated across src/cli.py, src/lambda_handler.py, src/aegis_governance/mcp_server.py. Extract to shared src/aegis_governance/result_formatter.py to prevent divergence. Code quality audit rated this MODERATE priority. Effort: 1-2 hours
  • D7. Clean up stale branches — 5 fix branches from March 14-16 (fix/qg75-deploy-test-mlkem-mock, fix/qg76-docs-sync-followup, fix/qg76-crypto-hardening-gap-c1-c2, fix/docs-sync-bsl-terminology, fix/rest-api-docs-alignment) + 4 Dependabot branches. Clarify feat/portal-brand-redesign (remote-only) — delete if superseded by portal work already on main.

Medium-term (this sprint)

  • D8. Add AFA portal E2E tests — Create aegis-portal/e2e/specs/afa-product.spec.ts covering /afa/dashboard, /afa/keys, /afa/account pages. Mirrors main portal E2E structure (11 existing specs). Effort: 2-3 hours
  • D9. Verify actions/cache version — Already at latest (v5.0.4, no v6 exists). No change needed.
  • D10. Set up SNS subscriptions for alarm routing — Slack/email on aegis-governance-alarms-dev SNS topic. Completes Issue #5 Phase 2.
  • D11. Execute Locust load tests against live API Gateway — tests/load/locustfile.py with direct Lambda invocation, 5 proposal templates, SLA validation (p50<100ms, p95<500ms, p99<1s). Initial results: /evaluate p50=470ms cross-region (in-region est. ~70-100ms), 0% error rate. Completes Issue #2 Phase 2.

Long-term (backlog)

  • D12. Collect 30+ days KL divergence data for threshold calibration. Issue #1. Shadow evaluation active on 4 repos (aegis-governance, libertas-cicd, AgoraIV, afa) via aegis-shadow.yml CI workflow (deployed 2026-03-24). CalibrationTriggerEvaluator wired into pcw_decide() for automated trigger detection. Clock started 2026-03-24.
  • D13. Provision Grafana dashboards — CloudWatch deployed (AEGIS-Governance-dev); Grafana provisioning pending. Issue #9 Phase 2.
  • D14. Multi-region DR setup — Cross-region DynamoDB replication for disaster recovery. Issue #8 Phase 2.
  • D15. Plan for btclib <2025.0.0 constraint — Upper bound in pyproject.toml will expire; monitor btclib releases for v2025+ compatibility. File: pyproject.toml
  • D16. Shadow → enforcement transition — Once KL data collected (D12), transition AEGIS from shadow to enforcement mode for the first time. Blocked by D12.

Stripe Integration Review (2026-04-01)

Deep review of portal.veiltide.com → portal.undercurrentholdings.com Stripe integration. Context7-verified against authoritative Stripe API docs. PR #61.

Completed

  • S1. Webhook signature bypass on ImportError (CRITICAL)api_server.py except ImportError block silently accepted unverified webhook events. Changed to return 500 (fail-closed). 2 AST regression tests. Commit: f180b67
  • S2. Checkout session metadata mismatch (HIGH) — Portal set subscription_data[metadata] but _handle_checkout_completed() reads session.metadata — different Stripe objects (Context7-confirmed). Added session-level metadata to both AEGIS and AFA checkout actions. 2 regression tests. Commit: 8a03e67
  • S3. Deploy workflow E2E exclusionaegis-deploy.yml test step included E2E tests requiring h2 and aegis SDK not installed in deploy runner. Added --ignore=tests/e2e. Commit: 8884a58

Short-term

  • S4. Webhook secret dual-path inconsistency (MEDIUM) — Removed redundant STRIPE_WEBHOOK_SECRET env var pre-check in api_server.py. _verify_stripe_signature() now handles both env var and Secrets Manager ARN paths. Returns 401 when no secret configured (fail-closed).
  • S5. Billing Meters V2 migration (HIGH) — New src/aegis_governance/stripe_meter.pyStripeMeterV2 with session-based auth (/v2/billing/meter-event-stream), 14-min proactive refresh, thread-safe caching, 401 retry, idempotency keys. Replaces V1 inline code. Lambda verified inactive via CloudWatch (0 real API traffic). 16 new tests.
  • S6. Pre-existing E2E failure: test_b01_provision_customer (LOW) — Test now accepts both 200 and 201 (server returns 200 for existing customers with force_reprovision). Fixed in Stripe review.
  • S7. Remove unused stripe npm + Python packages (LOW) — Removed stripe from both aegis-portal/package.json (v18.0.0, unused) and pyproject.toml (>=12.0.0, unused). All Stripe calls use raw HTTP. Fixed in Stripe review.

Long-term

  • S8. Add stripe_customer_id to Customer model (LOW) — Currently lives only on Subscription record. Meter reporting does extra DB read via get_subscription() fallback. Adding to Customer would eliminate the extra lookup. Files: src/aegis_governance/customer.py, src/aegis_governance/customer_pg.py, src/aegis_governance/stripe_webhook.py

Compliance Remediation (Audit 2026-03-22)

Five-framework compliance audit (NIST AI RMF, EU AI Act, ISO 42001, SOC 2, FedRAMP). AI-specific frameworks fully compliant. Operational security frameworks have documentation complete but exercises deferred. Legal soundness audit found 6 critical + 4 moderate outward-facing language issues. Tasks below close all gaps in dependency order.

Audit results: NIST AI RMF OPERATIONAL (3 STRONG, 1 MODERATE) | EU AI Act COMPLIANT (15/15) | ISO 42001 COMPLIANT (7/7) | SOC 2 PARTIAL (38/42 implemented, 29/42 tested) | FedRAMP PARTIAL (30/31 implemented, exercises deferred)

Immediate (no blockers)

  • C1. Add KL divergence thresholds to interface-contract.yamltau_warn: 0.3, tau_crit: 0.5 with calibration basis documented in docs/integration/parameter-reference.md. Closes NIST MEASURE gap (threshold calibration). Files: schema/interface-contract.yaml, docs/integration/parameter-reference.md
  • C2. Create NIST AI RMF full mappingMEASURE only Expanded to all 72 subcategories across all 4 functions (GOVERN, MAP, MEASURE, MANAGE) via adversarial audit (2026-04-03). 45/72 IMPLEMENTED, 17 PARTIAL, 6 GAP, 4 N/A. 8 code-documentation discrepancies identified (see N1-N8 below). Files: docs/compliance/nist-ai-rmf-{govern,map,manage}-mapping.md, docs/compliance/nist-ai-rmf-coverage-summary.md, docs/compliance/nist-ai-rmf-audit-2026-04.md, docs/compliance/DECOMMISSIONING.md

Short-term (Q2 2026)

  • C3. Execute first quarterly access review — Follow docs/compliance/ACCESS-REVIEW.md procedures, capture baseline metrics, document findings. Closes SOC 2 CC4.2 + FedRAMP AC-2. Effort: 4 hours
  • C4. Execute BCP/DRP backup restoration test — Follow docs/compliance/BCP-DRP.md §4-5 (updated for GCP Cloud Run primary + AWS legacy fallback), verify RTO < 4h and RPO < 1h. Closes SOC 2 A1.2 + FedRAMP CP-9/10. Effort: 8 hours
  • C5. Execute IRP tabletop exercise — Scenario: governance invariant violation. Follow docs/compliance/IRP.md §5. Closes SOC 2 CC8.1 + FedRAMP IR-4/5. Effort: 4 hours
  • C6. Add decision accuracy metrics to telemetry — Gate precision/recall tracking: gate_accuracy_matrix in telemetry. Closes NIST MEASURE accuracy gap. Effort: 8-10 hours
  • C7. Retain external legal counsel — Required for GDPR breach notification, regulatory interpretation. Open item in docs/compliance/IRP.md §3. Effort: External

Medium-term (Q3 2026)

  • C8. External TEVV audit — Third-party validation of ai/technical_file/testing/tev_report.md. Advances NIST AI RMF OPERATIONAL → VALIDATED. Effort: External
  • C9. SOC 2 Type 2 audit preparation — 3-month evidence package from C3-C5. Engage auditor for 12-month observation (Q4 2026 → Q4 2027). Requires: C3, C4, C5, C18 (segregation of duties) complete. Effort: External
  • C10. Document break-glass emergency access procedures — Gap in ACCESS-REVIEW.md §5. Root account rotation + emergency runbook. Closes FedRAMP IA-5 + IR-1. Effort: 2-3 hours
  • C11. Pre-draft DSR notification templates — Access, deletion, objection templates for DSR-PRIVACY-OPERATIONS.md. Closes SOC 2 P4.1. Effort: 3-4 hours
  • C12. Compliance language alignment — "compliance-ready" → "compliance-aligned" across all 3 repos. Partially applied v1.99.0; full sweep completed 2026-04-04 (CR1). Closes legal findings L1-L5. Completed: 2026-04-04
  • C13. Add AI agent disclaimer to llms.txt — Prevent downstream compliance misrepresentation: "These artifacts do not constitute certification." Closes L5.
  • C14. Redact single-operator IRP dependency from public docs — Move docs/compliance/ai-governance.md operational limitations to internal documentation. Closes L6.
  • C15. Add SLA + licensing disclaimers to customer docs — SLA disclaimer on onboarding health check, BSL 1.1 production license callout. Closes L7, L10.
  • C16. Soften README marketing claims — Replace "giving enterprises confidence" with "evaluate proposals through quantitative gates"; use ranges ("4000+ tests"); qualify "tamper-evident". Closes L1, L8.
  • C17. Add date stamps to rate limit tables — "Current as of YYYY-MM-DD. Subject to change." Closes L9.

Long-term (pre-customer deployment)

  • C18. Team expansion for segregation of duties — Single-operator across all compliance roles. SOC 2/FedRAMP require multi-person approval gates for customer-facing SaaS. Effort: Organizational

NIST AI RMF Audit Code Remediation (2026-04-03)

Adversarial code-documentation reconciliation identified 8 discrepancies where documentation claims exceed code reality. Source: docs/compliance/nist-ai-rmf-audit-2026-04.md §3.

CRITICAL (before customer deployment)

  • N1. Persist audit chain to database — Decision audit chain now persisted to Neon PostgreSQL via AuditChainStore with per-customer partitioning. SELECT FOR UPDATE serializes concurrent appends across Cloud Run instances (0-4). Chain entries record instance_id (from K_REVISION env). Three admin endpoints: /admin/audit-chain/verify/{customer_id}, /admin/audit-chain/entries/{customer_id}, /admin/audit-chain/status/{customer_id}. In-memory fallback preserved for sandbox evaluations and DB unavailability. Genesis race condition handled via IntegrityError catch + retry. 32 regression tests. Files: src/aegis_governance/audit_chain_store.py (new), src/aegis_governance/models_pg.py, src/api_server.py, tests/test_audit_chain_store.py (new) Completed: 2026-04-04
  • N2. Add override replay protectionDualSignatureValidator.create_message_hash() now binds to requested_at timestamp (prevents cross-request replay). SignatureRecord gains nonce field (128-bit, secrets.token_hex). OverrideWorkflow tracks _used_nonces set. Clock-skew freshness check rejects future-dated requests (>5 min tolerance). SignatureProvider protocol unchanged. Backward-compatible serialization (legacy records default nonce=""). 12 regression tests. Files: src/workflows/override.py, tests/test_override_coverage.py Completed: 2026-04-04

HIGH (Q2 2026)

  • N3. Fix RBAC fail-open in override handleroverride_handler.py L143 changed from is not None and not to is None or not (fail-closed). When rbac_enforcer=None, override requests are now REJECTED instead of silently bypassing authorization. 3 regression tests + 4 existing tests updated to use permissive mock enforcer. Files: src/integration/override_handler.py, tests/test_override_handler.py Completed: 2026-04-04
  • N4. Closed as by-design — All three transports (CLI L348, Lambda L894, MCP L165) intentionally zero out risk in utility synthesis (_pert(0.0)) because the risk gate evaluates risk independently via GateEvaluator. Including risk in utility via kappa*delta_R would double-count it AND penalize risk reduction. MCP DOES accept risk_baseline/risk_proposed and they flow correctly to the risk gate through build_pcw_context(). Comment expanded in mcp_server.py. Closed: 2026-04-04

MEDIUM (Q2-Q3 2026)

  • N5. Fix TelemetryEmitter thread safety — Added threading.Lock to TelemetryEmitter: emit() reads/writes shared state under lock, sinks dispatched outside lock (may block on I/O), add_sink/remove_sink synchronized, sinks list snapshot before iteration. Docstring updated from "NOT thread-safe" to "Thread-safe". 3 regression tests (concurrent emit, add-during-emit, AST docstring check). Files: src/telemetry/emitter.py, tests/telemetry/test_emitter.py Completed: 2026-04-04
  • N6. Distribute sandbox rate limiting — Sandbox rate limit is in-memory per Cloud Run instance, resets on restart. Under auto-scaling, users can exceed 10/day by hitting different instances. Fix: Migrate limiter state to Redis (Upstash) or Neon. Files: src/aegis_governance/sandbox.py Effort: 1 day

LOW (Q3 2026)

  • N7. Document PERT variance in interface contractsrc/engine/utility.py L73-92 uses simplified PERT variance (±22-40% error vs true Beta-PERT). Docstring warning exists but schema/interface-contract.yaml does not flag the approximation. Fix: Add pert_variance_note to interface contract. Consider true Beta-PERT when scipy available. Files: schema/interface-contract.yaml, src/engine/utility.py Effort: 0.5 day
  • N8. Add per-gate drift thresholdssrc/engine/drift.py uses global tau_warning/tau_critical for all gates. Gates with different variance profiles (novelty vs quality) would benefit from per-gate thresholds. Fix: Add per-gate override to KLDriftConfig. Files: src/engine/drift.py, src/config.py Effort: 1 day

GCP Infrastructure Security (2026-04-03)

Live infrastructure deep dive (GCP + AWS) identified critical security gaps. Source: GCP gcloud audit + AWS aws CLI verification on 2026-04-03.

CRITICAL (immediate)

  • G1. Migrate secrets to GCP Secret Manager — 8 secrets (Unkey, Stripe, AWS IAM, Neon DATABASE_URL, service key) migrated from plaintext --set-env-vars to GCP Secret Manager --set-secrets on Cloud Run. Setup script: scripts/gcp-secrets-setup.sh. IAM granted to runtime SA + service agent. Legacy deploy-cloud-run.yml deleted. Files: .github/workflows/aegis-deploy.yml, scripts/gcp-secrets-setup.sh Completed: 2026-04-03
  • G2. Restrict WIF scope to specific repos — WIF attribute condition narrowed from assertion.repository_owner == 'undercurrentai' (any org repo) to assertion.repository in ['undercurrentai/aegis-governance', 'undercurrentai/afa']. SA IAM binding swapped from org-wide principalSet to per-repo bindings (defense-in-depth). Files: GCP IAM policy (live gcloud commands) Completed: 2026-04-03

HIGH (Q2 2026)

  • G3. Create GCP vendor risk assessment — GCP is the primary compute vendor (5 Cloud Run services) with zero formal risk assessment. AWS (the assessed vendor) is now secondary. Fix: Create docs/compliance/VENDOR-RISK-GCP.md following the AWS template. Files: docs/compliance/VENDOR-RISK-GCP.md Effort: 4 hours

  • G4. Create Neon vendor risk assessment — Neon PostgreSQL holds all customer data (shared across 3 services) with zero assessment. Fix: Create docs/compliance/VENDOR-RISK-Neon.md. Files: docs/compliance/VENDOR-RISK-Neon.md Effort: 3 hours

  • G5. Create Unkey vendor risk assessment — Unkey is the auth gateway for all protected routes with zero assessment. Fix: Create docs/compliance/VENDOR-RISK-Unkey.md. Files: docs/compliance/VENDOR-RISK-Unkey.md Effort: 2 hours

  • G6. Migrate DynamoDB to GCP-native store — All data migrated from aegis-governance-state-dev (492 items) to Neon PostgreSQL. Dataclasses extracted to customer_models.py. All consumers switched to customer_pg.CustomerManager. AWS credentials removed from Cloud Run. MCP server DATABASE_URL gap fixed. DynamoDB table preserved read-only for G9. Migration script: scripts/migrate_dynamodb_to_neon.py. Completed: 2026-04-04

  • G12. Provision api.aegis.undercurrentholdings.com vanity domain — Cloud Run exposes the raw project-ID URL (aegis-api-980022636831.us-central1.run.app) directly to customers. Industry standard for API-first SaaS is api.{company}.{tld} (Stripe, OpenAI, Anthropic, Twilio, GitHub, Resend, Linear, Vercel, Cloudflare, Postmark, SendGrid). Raw cloud URLs read as "prototype" in enterprise security reviews and tie customer integrations to the GCP project ID (blocks future migrations without customer re-integration). Triggered by incident 2026-04-10: customer (wali.khan@agentect.com) guessed api.aegis.undercurrentholdings.com after the portal dashboard advertised it via a broken hardcoded fallback — DNS didn't resolve, customer hit getaddrinfo ENOTFOUND. Layer 2 hotfix (portal PR #7, commit 830d992) pointed the fallback at the canonical Cloud Run URL to unblock; this item finishes the work.

    Ordered steps (separate tracked work item, own PR, own verification):

    1. Confirm DNS controlundercurrentholdings.com zone is with Cloudflare or Google Cloud DNS (per user recollection). Verify before running any DNS-touching command. If Cloudflare, need API token or dashboard access; if Google Cloud DNS, need gcloud dns access in the right project.
    2. Verify domain ownership in GCPgcloud domains verify undercurrentholdings.com (requires DNS TXT or Search Console). Skip if already verified at org level.
    3. Create Cloud Run domain mapping: gcloud run domain-mappings create --service=aegis-api --domain=api.aegis.undercurrentholdings.com --region=us-central1 --project=undercurrent-production. GCP returns required CNAME/A records.
    4. Add DNS records in Cloudflare (or wherever the zone lives). Propagation <5 min to 1 hour depending on TTL.
    5. Verify TLScurl -v https://api.aegis.undercurrentholdings.com/health should return 200 with a Google-managed cert.
    6. Run full E2E suite against new hostname: AEGIS_E2E_API_BASE=https://api.aegis.undercurrentholdings.com AEGIS_E2E_SERVICE_KEY="..." pytest tests/e2e/ -v --tb=short -x.
    7. Coordinated cutover PR (single reviewed change per repo, coordinated across both):
      • aegis-governance/aegis-sdk/src/aegis/_http.py:46 — change _PRODUCTION_BASE_URL to https://api.aegis.undercurrentholdings.com
      • aegis-governance/docs/api/openapi.yaml:22 — update server URL; also update the outdated "AWS API Gateway" label while we're there
      • aegis-governance/docs-site/content/docs/** — all customer docs (REST quickstart, API index, dogfooding guide, MCP tools, deployment index, rest.md, quickstart-rest.md, onboarding.md, production-guide.md)
      • aegis-governance/docs/integration/dogfooding-guide.md:380, docs/deployment/production-guide.md:407
      • aegis-governance/.env (local dev) — AEGIS_E2E_API_BASE
      • aegis-governance/.github/workflows/aegis-deploy.yml — health check URL
      • aegis-governance/.github/workflows/e2e-customer.yml — target URL
      • aegis-governance/.github/actions/aegis-gate/action.yml — gate endpoint
      • aegis-governance/CLAUDE.md §10 "Web Properties" — add api.aegis.undercurrentholdings.com row
      • aegis-governance/CLAUDE.md §10 "Live Endpoints" — update the canonical URL
      • portal/app/(portal)/dashboard/getting-started-card.tsx — swap the Layer-2 Cloud Run fallback to the vanity URL
      • portal/.env.example — update both AEGIS_API_BASE_URL lines (server and NEXT_PUBLIC_* client)
      • Vercel env vars (both server-side AEGIS_API_BASE_URL and client-side NEXT_PUBLIC_AEGIS_API_BASE_URL) — update to the vanity URL
      • Publish a new SDK version (aegis-governance on PyPI) with the new default, note in changelog as non-breaking improvement
      • Add a ROADMAP completion entry under "Recently Completed"
    8. Keep the Cloud Run URL working indefinitely as a secondary endpoint. Do NOT take it down. Old SDK versions, cached customer integrations, and the Layer-2 hotfix fallback must keep working.
    9. Add a CLAUDE.md §9 changelog entry for the cutover (next version bump), documenting the 2026-04-10 incident as root cause and the domain provisioning as the fix.

    Related artifacts: Incident plan ~/.claude/plans/ethereal-chasing-steele.md; customer audit /tmp/aegis-incident-2026-04-10-audit.md; portal PR #7 (merged 830d992); portal PR #8 (merged 9808f6e); portal PR #9 (merged 1200b4d). Effort: 1-2 days (mostly DNS propagation waits and coordinated PR review)

    MCP custom domain planning: G12 originally only addressed the REST API (api.aegis.undercurrentholdings.com). The 2026-04-10 incident also exposed that the dashboard MCP snippet was pointing at the wrong Cloud Run service (aegis-api/mcp instead of aegis-mcp/mcp, fixed in portal PR #9 1200b4d). When G12 ships, decide whether to also provision either (a) mcp.aegis.undercurrentholdings.com as a separate vanity host for the MCP server, OR (b) merge both REST and MCP under a single host with path-based routing (api.aegis.undercurrentholdings.com/v1/... for REST, api.aegis.undercurrentholdings.com/mcp for MCP) by deploying a Cloud Run-fronted load balancer that routes to the two services. Recommend (a) for simplicity — separate services, separate hostnames, mirrors the current Cloud Run deployment. The cutover PR for G12 must update both NEXT_PUBLIC_AEGIS_API_BASE_URL and NEXT_PUBLIC_AEGIS_MCP_BASE_URL in the portal.

  • G13a. Clerk email + SMS template audit (closed 2026-04-10 via Clerk Backend API automated audit) — Initial plan called for dashboard click-through. Context7 + Exa research discovered that Clerk has a Backend API for templates: GET /v1/templates/email, GET /v1/templates/email/{slug}, and same for /templates/sms. This enabled a 120-line stdlib-only Python script (/tmp/clerk-template-audit.py) that authenticated via the existing production CLERK_SECRET_KEY (sk_live_* from portal Vercel env) and swept every template for the URL bug-class pattern. Result: 24 email templates + 7 SMS templates = 31 total. ALL CLEAN. Zero stale URL patterns. Templates are Clerk stock defaults (no customization / no AEGIS branding). Brand customization is a separate concern, not in scope for the URL bug-class audit.

  • G13b / G26. Stripe customer email template audit (deferred — Playwright MCP disconnect blocked) — Stripe has no API to retrieve customer email body content. Only Invoice Rendering Templates API (/v1/invoice_rendering_templates) for PDF invoices, plus Branding API for logos/colors. Receipt/subscription/refund email bodies are server-rendered by Stripe based on transaction data + branding settings with no read access. Requires Playwright dashboard navigation with user auth pause. Attempted during Layer 5 but the Playwright MCP server disconnected mid-session, blocking completion. Schedule manually with user in a future session. Effort: 1 hour (includes 2FA pause window).

  • G14. CI guardrails against the customer-facing URL bug class (triggered by 2026-04-10 incident; three sub-items closed across three repos; see G14a, G14b, G14d below) — The 2026-04-10 incident shipped twice in one session: once as the original placeholder bug and once as my own remediation defect (a vercel env add value with a trailing newline that the build baked into the rendered curl snippet). Both should be caught by automation, not code review. Status after Layer 5: G14a (marketing site) + G14b (portal) + G14d (docs-site + docs/) all shipped and verified in CI. G14c (env var sync check) deferred as lower-value after the 3 grep guards closed the bug class at the source level. See sub-items below.

    • G14a. Forbid decommissioned URLs in marketing site source — Implemented as grep -rEn step in undercurrent-core/brand/website/.github/workflows/ci.yml quality-checks job. Shipped via undercurrent-core PR #12. Catches yd1xm4ahcg, 31dil7zwza, wildcard *.execute-api.*.amazonaws.com, api.aegis.undercurrentholdings.com, YOUR_API_URL, and wrong-service routing patterns. Closed: 2026-04-10
    • G14b. Portal CI grep guard for decommissioned URLs — Implemented as dedicated .github/workflows/url-drift-guard.yml workflow in undercurrentai/portal. Runs on every PR with no path filter (fast feedback). Shipped via portal PR #12 (413ea79). Closed: 2026-04-10
    • G14c. Diff .env.example against Vercel project on PR (deferred — lower value after grep guards closed the bug class) — Would require a Vercel access token in CI secrets and is orthogonal to the grep guards that actually protect the customer surface. Revisit only if a regression makes it past G14a/b/d. Effort: 3 hours.
    • G14d. docs-site + docs/ CI grep guard — Implemented as forbid-decommissioned-urls step in .github/workflows/docs-consistency.yml. Shipped via aegis-governance PR #74. Closed: 2026-04-10

    Related: postmortem write-up captured in /tmp/aegis-incident-2026-04-10-audit.md (9+ lessons learned). Total shipped: 3 CI grep guards across 3 repos.

  • G15. Architectural fix: centralize customer-facing endpoints in a single registry (triggered by 2026-04-10 incident; identified during quality-gate /ultrathink phase) — The 2026-04-10 incident shipped THREE distinct bugs in the same class across three separate files (getting-started-card.tsx, key-usage-guide.tsx, getting-started-card.tsx AFA variant). The systemic root cause is that each customer-facing TSX file independently encodes its own API URLs as constants or env var fallbacks. There is no central registry, no cross-checking, and no architectural mechanism to enforce consistency between code, .env.example, Vercel project state, and live endpoints. Each new dashboard card or onboarding page is a new opportunity for the same bug.

    Architectural fix: introduce lib/customer-endpoints.ts as the single source of truth for all URLs the portal advertises to customers. Pattern:

    // lib/customer-endpoints.ts
    export const CUSTOMER_ENDPOINTS = {
      aegis: {
        rest: requireUrl(process.env.NEXT_PUBLIC_AEGIS_API_BASE_URL, "https://aegis-api-980022636831.us-central1.run.app"),
        mcp:  requireUrl(process.env.NEXT_PUBLIC_AEGIS_MCP_BASE_URL, "https://aegis-mcp-980022636831.us-central1.run.app"),
        docs: "https://aegis.undercurrentholdings.com",
      },
      afa: {
        rest: requireUrl(process.env.NEXT_PUBLIC_AFA_API_BASE_URL, "https://api.afa.undercurrentholdings.com"),
        docs: "https://afa.undercurrentholdings.com",
      },
    } as const;
    
    function requireUrl(envValue: string | undefined, fallback: string): string {
      const v = (envValue || fallback).trim();
      if (!v.startsWith("https://") || v.includes(" ") || v.includes("\n")) {
        throw new Error(`Invalid customer endpoint: ${JSON.stringify(v)}`);
      }
      return v;
    }

    Migration: All existing customer-facing TSX components (app/(portal)/dashboard/getting-started-card.tsx, app/(portal)/keys/key-usage-guide.tsx, app/afa/dashboard/getting-started-card.tsx, plus any future ones) replace their inline constants with imports from customer-endpoints.ts.

    Pairs naturally with G14: the CI checks in G14a/b/c can be scoped to just the registry file (single source of truth) rather than scanning every TSX file individually.

    Why not done as part of the 2026-04-10 hotfix: refactor scope, not hotfix scope. Three PRs already shipped under time pressure during a live incident; introducing a new abstraction during emergency response would have added risk without improving the immediate fix. Tracked here for the next portal sprint. Effort: 4 hours (registry + helper + migration + tests + .env.example sync). Repo: portal. Depends on: G14 ideally lands first to enforce the new pattern via CI, OR ships in same PR for atomicity.

  • G16. Portal dependency vulnerability remediation (identified during quality-gate /review phase 2026-04-10; closed during quality-gate /full-validation 2026-04-10)npm audit flagged 3 pre-existing vulnerabilities. Closed during quality-gate Phase 5 full-validation iteration:

    • HIGH next@16.0.0-beta.0 - 16.2.2 (DoS via Server Components, GHSA-q4gf-8mx6-v5v3) → bumped next 16.2.016.2.3 and eslint-config-next 16.2.016.2.3 in package.json. npm install confirmed found 0 vulnerabilities. Build re-verified clean.
    • 2× MODERATE hono (IPv6 ipRestriction, toSSG path traversal, serveStatic slash bypass) → resolved automatically by npm audit fix (non-force) bumping hono 4.12.104.12.12 and @hono/node-server 1.19.121.19.13 within the existing >=4.12.7 override range. Lockfile-only change.
    • Status: All 3 vulns closed. npm audit post-fix returns found 0 vulnerabilities. Bumped via portal PR (filed during quality-gate Phase 7 ship). Closed: 2026-04-10
  • G17. Portal proxy.ts: stop initializing Clerk middleware in E2E bypass mode (identified during quality-gate Phase 7 CI investigation 2026-04-10; closed in same session) — While shipping the 2026-04-10 incident hotfixes, the post-merge E2E run for portal PR #9 failed on mobile-safari with Error: page.goto: Navigation to "http://localhost:3000/dashboard" is interrupted by another navigation to "http://localhost:3000/dashboard". Console showed Failed to fetch RSC payload for /clerk-sync-keyless?returnUrl=/dashboard. Falling back to browser navigation. TypeError: Load failed.

    Root cause investigation (full causal chain in portal CLAUDE.md §9 v1.5.x changelog and KNOWN_ISSUES URL-FLAKE-1):

    • The previous proxy.ts wrapped the auth callback in clerkMiddleware() and short-circuited inside the callback when IS_E2E_BYPASS was true.
    • But clerkMiddleware() is a runtime wrapper — it intercepts every request matched by config.matcher and runs Clerk's keyless sync infrastructure regardless of whether the inner callback returns early.
    • On mobile-safari (WebKit), the keyless sync fetch occasionally fails with TypeError: Load failed (a known WebKit + streaming response issue), and Clerk falls back to a full browser navigation that races with Playwright's page.goto().
    • History: this flake hit e2e/specs/navigation.spec.ts:52 on portal PRs #7, #8, #9 (and earlier). PRs #7 and #8 retried-passed; PR #9 unluckily exhausted all 3 retries; PR #10 retried-passed. The line await page.goto("/dashboard") at navigation.spec.ts:58 was added by joshuakirby on 2026-03-18 (commit f97971c fix(e2e): reset mobile nav loop to clean state each iteration) as a fix for an earlier flake class — proving this test has had documented mobile-safari instability for months.

    Fix (portal proxy.ts):

    • Conditionally export a no-op handler when IS_E2E_BYPASS is true, instead of always wrapping with clerkMiddleware().
    • The lib/e2e-bypass.ts production kill-switch (RT-H1) guarantees IS_E2E_BYPASS is always false in production: it requires NODE_ENV=development AND throws on boot if the bypass env vars leak into NODE_ENV=production. So the no-op branch can never affect production deploys.
    • Production deploys (Vercel NODE_ENV=production): unchanged — full clerkMiddleware() runs as before.
    • E2E test runs only (Vercel preview with bypass vars never set; only Playwright dev server with all 3 bypass conditions): no-op handler returns undefined for every request, Clerk's keyless sync never initializes, the race condition is eliminated.

    Companion future work (defense-in-depth, not blocking):

    • G17a: harden e2e/specs/navigation.spec.ts:52 with await page.waitForLoadState("networkidle") after every page.goto to make ANY navigation race resilient (independent of which auth provider is active). Not strictly necessary after G17 lands, but follows the principle of "tests should not depend on external timing assumptions". Effort: 30 min.
    • G17b: portal .github/workflows/e2e.yml paths: filter does NOT include proxy.ts. While shipping G17, the manual gh workflow run was required because the path filter only watches app/**, lib/**, components/**, e2e/**, package.json, package-lock.json, playwright.config.ts, and .github/workflows/e2e.yml. proxy.ts is auth/middleware code that absolutely should trigger E2E on every change. Add proxy.ts to the filter (and consider adding next.config.ts, vercel.json for similar reasons). Effort: 5 min.

    Status: Closed in same session. Portal PR (filed during quality-gate Phase 7 ship after the user explicitly authorized "do what you think is logical, graceful, elegant, robust"). Closed: 2026-04-10

  • G14a. CI grep guard for decommissioned URLs (marketing site) (closed 2026-04-10 via undercurrent-core PR #12 62716f8) — Added Forbid decommissioned URLs in customer-facing source step to undercurrent-core/brand/website/.github/workflows/ci.yml quality-checks job. Catches: yd1xm4ahcg.execute-api, 31dil7zwza.execute-api, any other *.execute-api.*.amazonaws.com, api.aegis.undercurrentholdings.com, YOUR_API_URL, aegis-api/mcp wrong-service routing, aegis-mcp/{evaluate,v1,risk-check} wrong-service routing. CI verified live (quality-checks SUCCESS on PR #12). Also closed dead-code cleanup of 8 broken AWS Lambda URLs in 4 orphaned section files.

  • G14d. CI grep guard for decommissioned URLs (docs-site + docs/) (closed 2026-04-10 via aegis-governance PR #74) — Added forbid-decommissioned-urls step to .github/workflows/docs-consistency.yml. POSIX ERE portable pattern (no bounded quantifiers) catches: yd1xm4ahcg, 31dil7zwza, any *.execute-api.*.amazonaws.com, api.aegis.undercurrentholdings.com, YOUR_API_URL, aegis-api/mcp wrong-service routing, aegis-mcp/{evaluate,v1,risk-check} wrong-service routing. Scope: docs-site/content/docs/ + docs/. Exclusions: ROADMAP.md, roadmap.mdx, llms-full.txt, changelog.md, docs/claude/** (all intentional meta-references). Tested locally with 5 positive + 3 negative test cases. CI verified live on PR #74.

  • G14b. CI grep guard for decommissioned URLs (portal) (closed 2026-04-10 via portal PR #12 413ea79) — New .github/workflows/url-drift-guard.yml workflow in undercurrentai/portal. Scoped to app/, lib/, components/, .env.example (customer-facing source only, excludes node_modules/, .next/, e2e/, CLAUDE.md, KNOWN_ISSUES.md). Same POSIX ERE pattern as G14a/G14d. Runs on every PR with NO path filter (fast feedback <30s, independent of the slower E2E workflow). Completes the G14 CI guardrail trifecta: G14a ✓ marketing site, G14d ✓ docs-site + docs/, G14b ✓ portal — the bug class is now blocked from reappearing at the CI level across all 3 customer-facing repos where it was found during the 2026-04-10 incident.

  • G14e. Portal lint underscore-prefix convention (closed 2026-04-10 via portal PR #13 daa5d7c) — Side finding from quality-gate Phase 5 full-validation. Portal PR #11 (proxy.ts E2E bypass fix) introduced an e2eNoop handler whose signature takes _req: NextRequest (required by the type sig, body unused). Portal's eslint did NOT honor the _ prefix convention, so the warning slipped through because npm run lint in the portal doesn't enforce --max-warnings 0. Fix: added argsIgnorePattern: "^_", varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_" to portal/eslint.config.mjs. Lint warnings dropped 6 → 2 (the remaining 2 are in auto-generated public/wasm/aegis_loader.js — out of scope, tracked separately in portal WASM work).

  • G18. api.undercurrentholdings.com TLS cert mismatch (deferred — user decision required) — DNS resolves to agora-iv-980022636831.us-central1.run.app but the Cloud Run cert SAN does not include this hostname → browser cert error (NET::ERR_CERT_COMMON_NAME_INVALID) for anyone hitting the URL. Not currently referenced from any customer-facing copy verified by Layer 5 Tier 2 crawl, but the DNS record exists. Two valid fixes: (a) delete the DNS record (cleaner if there's no active use); (b) provision a Cloud Run domain mapping for api.undercurrentholdings.com → agora-iv with managed cert. Decide intent before fixing. Effort: 15 min once decided.

  • G19. AEGIS Advisor promoted to docs nav (closed 2026-04-11 via aegis-governance PR #79 606d1a3) — User chose Promote (not noindex / not delete). Added docs-site/content/docs/resources/advisor.mdx explaining what the Advisor is, when to use it, how the 8 wizard steps map to the 6 gates, privacy handling, and cross-links to the full SDK / REST / MCP / GitHub Action docs. Wired into docs-site/content/docs/resources/meta.json sidebar nav. Auto-included in llms.txt (28 pages, was 27) via the existing generate-llms-txt.mjs walker. docs-site/public/advisor/ SPA itself untouched — it works correctly, uses the canonical Cloud Run URL (verified clean during Layer 5), and needed no changes.

  • G20. Fumadocs /docs/index 404 in llms.txt (low priority) — Both aegis.undercurrentholdings.com/llms.txt and afa.undercurrentholdings.com/llms.txt reference /docs/index as the canonical home, but Next.js Fumadocs only generates /docs (not /docs/index). Any crawler honoring the llms.txt inventory logs a spurious 404. Fix in the scripts/generate-llms-txt.mjs generator (filter out index segments or rewrite to /docs). Effort: 15 min.

  • G20 + G21. Disable Swagger UI in prod (closed 2026-04-11 via aegis-governance PR #78 dd0aa77) — User chose Disable Swagger UI in prod, keep openapi.yaml in docs only. Implemented as AEGIS_DISABLE_PUBLIC_DOCS env var gating the FastAPI constructor's docs_url / redoc_url / openapi_url args — when truthy, all three return HTTP 404 at the routing layer. Set unconditionally to true in .github/workflows/aegis-deploy.yml for every production rollout; default unset (permissive) in local dev / CI. Authoritative OpenAPI spec for external consumers still lives at aegis.undercurrentholdings.com/docs/api/openapi. Added 19 regression tests in tests/infra/test_api_docs_disabled.py covering the truthy/falsy env var matrix, the three disabled routes, and the operational endpoints (/health, /openapi.yaml) remaining accessible.

  • G22. LinkedIn URL inconsistency across web properties (low priority, cosmetic) — Three different LinkedIn identifiers referenced across aegis.undercurrentholdings.com/llms.txt (linkedin.com/company/108736059), aegis.undercurrentholdings.com/llms-full.txt (linkedin.com/company/undercurrent-holdings/), and undercurrentholdings.com/about/ (linkedin.com/in/kevin-choate/ + linkedin.com/in/kirby-joshua/). Pick a canonical company URL and update all references. Effort: 30 min.

  • G23 + G24 + G25. Dead code cleanup in undercurrent-core/brand/website/src/components/sections/developers/ (closed 2026-04-11 via undercurrent-core/brand/website PR #13 633eae4) — Deleted 22 orphaned TSX section files (leftover from commit f4909cf) plus 4 orphaned test files in tests/unit/ that tested ONLY the deleted components (developer-doc-sections.test.tsx, developer-layouts.test.tsx, developer-navigation.test.tsx, developer-sections.test.tsx). Net: 26 files deleted, 6271 lines removed. G24 (phantom docs.afa.undercurrentholdings.com hostname) and G25 (stale doc paths) resolved automatically because both lived in the deleted dead code. Verification: npm run typecheck clean, npm run lint --max-warnings 0 clean, npm run test:unit passes 31 suites / 1054 tests (down from 35 / ~1250), npm run build static export succeeds with out/developers/aegis/ and out/developers/afa/ both rendering.

  • G23b. Orphan CSS cleanup in undercurrent-core/brand/website/src/theme.css (follow-up to G23) — ~20 CSS classes (e.g., aegis-card-number, aegis-compliance-table, afa-tier-cta) that were referenced only by the deleted components still live in theme.css. Removing them requires tracing which classes are referenced by the 2 remaining landing pages (aegis-landing-page.tsx, afa-landing-page.tsx) vs which are genuinely orphaned. Scoped out of G23 to keep the deletion PR focused. Effort: 30 min.

  • G27. docs/ vs docs-site/content/docs/ divergence CI sync-check (closed 2026-04-11 via aegis-governance PR #80) — Two parallel markdown trees: docs/ (plain markdown, visible on GitHub + scraped by LLMs) and docs-site/content/docs/ (Fumadocs MDX, deployed to aegis.undercurrentholdings.com). The 2026-04-10 incident exposed the drift risk: YOUR_API_URL placeholders had to be fixed in BOTH trees independently. Fix: new docs-site/scripts/check-docs-sync.mjs diffs the 13 known shared file pairs, normalizes out frontmatter + blank lines, computes line-level LCS delta, and fails CI when any pair drifts past 10% without a documented entry in docs-site/.mdx-sync-skip.json. Wired into .github/workflows/docs-consistency.yml after the forbid-decommissioned-urls step. First run found 5 DRIFT pairs — all grandfathered into the skip list with rationales (2 intentional: api/github-action, onboarding; 3 grandfathered for reconciliation: api/openapi, quickstart-rest, quickstart-sdk). Tested locally: injected synthetic drift → exit 1; reverted → exit 0.

  • G27b. Reconcile 3 grandfathered drift pairs from G27 (follow-up to G27, tracked in docs-site/.mdx-sync-skip.json) — Three files in the G27 skip list are marked GRANDFATHERED (not INTENTIONAL) and should eventually be re-synced:

    • api/openapi: docs/api/openapi.md is stale from the pre-Cloud Run era (still says "Lambda function behind API Gateway"); docs-site/content/docs/api/openapi.mdx has the current Cloud Run narrative. Fix: update docs/ to match docs-site/.
    • getting-started/quickstart-rest: docs/ leads with /sandbox/evaluate, docs-site/ leads with /health. Pick one structure, align both.
    • getting-started/quickstart-sdk: docs/ has a "Sandbox Mode (No Signup Required)" section; docs-site/ omits it in favor of an authenticated example. Pick one, align both.

    After reconciliation, remove each entry from .mdx-sync-skip.json and run node docs-site/scripts/check-docs-sync.mjs to confirm the pair drops back below the 10% threshold. Effort: 1-2 hours (mostly content decisions, not code).

MEDIUM (Q2-Q3 2026)

  • G7. Create Stripe vendor risk assessment — Stripe processes live payments across 3 services (same live key shared). Fix: Create docs/compliance/VENDOR-RISK-Stripe.md. Effort: 2 hours
  • G8. Create GitHub vendor risk assessment — GitHub holds source code, CI/CD secrets, and WIF trust. Fix: Create docs/compliance/VENDOR-RISK-GitHub.md. Effort: 2 hours
  • G9. AWS resource decommission — Phased teardown of dormant AWS infrastructure. Shadow workflows migrated to Cloud Run on 2026-04-08.
    • G9a. Migrate shadow workflows (completed 2026-04-08) — 3 CI shadow workflows (libertas-cicd, AgoraIV, AFA) migrated from aws lambda invoke to Cloud Run + Unkey auth. CI shadow customer provisioned (cust_734077b5dc53, Professional tier). AEGIS_API_KEY secret set in all 3 repos. All verified live (proceed).
    • G9b. Verify Lambda invocations at zero (target: 2026-04-15) — 7-day soak period. Check: aws cloudwatch get-metric-statistics --namespace AWS/Lambda --metric-name Invocations --dimensions Name=FunctionName,Value=aegis-evaluate-proposal-dev. DynamoDB item count should remain 492. Secrets Manager LastAccessedDate should stop advancing.
    • G9c. Delete CloudFormation stacks (target: 2026-04-16) — Delete in dependency order: AegisMonitoringStack-devAegisMcpStack-devAegisLambdaStack-devAegisSharedStack-dev. Pre-check: empty S3 bucket, verify KMS key not shared, confirm DynamoDB data in Neon. Effort: 1 hour
    • G9d. Clean up GCP-side AWS remnants (target: 2026-04-16) — Delete aegis-aws-access-key-id and aegis-aws-secret-access-key from GCP Secret Manager. Revoke AWS_AEGIS_GATE_ROLE_ARN OIDC trust. Effort: 15 min
    • G9e. Code cleanup (target: 2026-04-17) — Delete: Dockerfile.lambda, src/lambda_handler.py, src/aegis_governance/unkey_authorizer.py, src/aegis_governance/customer.py, scripts/migrate_dynamodb_to_neon.py. Archive infra/ to branch. Remove boto3 from deps (keep [kms] optional if needed). Update src/cli.py to remove DynamoDB fallback. Update .env.example, ADR-009 addendum. Effort: 1 hour
  • G10. Fix agora-iv container tagagora-iv uses :latest tag (non-reproducible deploys) while all other services use digest-pinned images. Fix: Pin to SHA digest. Effort: 0.5 hour
  • G11. Set up GCP Cloud Monitoring dashboards — Zero monitoring dashboards configured on GCP. All observability relies on default Cloud Run console metrics. Fix: Create dashboards for request rate, latency, error rate, instance count across all 5 services. Effort: 2 hours

Cross-Property Copy Remediation (Audit 2026-04-04)

Adversarial copy audit across 4 web properties (docs-site, portal, developers site, main website). 8 critical, 9 high, 8 medium findings. Source: adversarial compliance review plan.

Immediate (no blockers — copy changes only)

  • CR1. Complete C12 compliance language sweep — "compliance-ready" → "compliance-aligned" across 3 repos. aegis-governance (4 files), portal (3 files) completed 2026-04-04. undercurrent-core had no instances. Completed: 2026-04-04
  • CR2. Add qualifier to trust bars — "Aligned with:" prefix + FedRAMP → "FedRAMP High" across docs-site (3 files), portal (2 files), developers site (2 files). Completed: 2026-04-04
  • CR3. Fix quantum-resistant superlative — "the only" → "the first" + Ed25519/ML-DSA hybrid clarification. Market research confirms defensible. Completed: 2026-04-04
  • CR4. Fix LIBERTAS "live from day one" — → "built in from day one" across 5 locations (deep-dive, product-cards, capabilities, layout FAQ, libertas page meta). Completed: 2026-04-04
  • CR5. Remove unsourced statistics — Removed "5-10×", "~87%", "months to weeks" from LIBERTAS copy. Replaced with qualified language ("measurably fewer failures", "higher deployment capacity", "compress compliance timelines"). AFA stats ("~60% of issues", "23% engineering time") remain — tracked separately. Completed: 2026-04-04
  • CR6. Fix EU AI Act deadline — "enforcement deadline" → "full enforcement" (partial enforcement already active). Completed: 2026-04-04
  • CR7. Drop "Operational" from SOC 2 description — "Runbook templates aligned to trust criteria" across docs-site + developers site. Completed: 2026-04-04

Short-term (this week)

  • CR8. Verify AFA "9 gates" claim — VERIFIED: AFA genuinely has 9 gates (AEGIS 6 + Entropy + Supply Chain + KPI Alignment). Source: AFA/src/afa/gates/engine.py. No copy changes needed. Completed: 2026-04-04
  • CR9. Fix portal AFA "priority support" claim — Developer tier upgrade banner claims support not in tier spec. File: portal afa/dashboard/page.tsx Effort: 15 min
  • CR10. Remove regulatory_reporting feature references — Removed from portal (lib/types.ts, lib/tier-data.ts, upgrade-form.tsx). Now consistent with aegis-governance tiers.py. Completed: 2026-04-04
  • CR11. Soften "100% logging coverage" claim — Changed to "comprehensive logging coverage for all evaluation paths." Completed: 2026-04-04
  • CR12. Agora IV on About page — Remove mention or add "(coming soon)". Repo: undercurrent-core Effort: 15 min

Medium-term (this sprint)

  • CR13. Add inline compliance disclaimers — Added "Aligned with:" qualifier and "Not a certification claim" disclaimer to 3 developer-facing pages: aegis-landing-page.tsx (badge section), aegis-overview-section.tsx (compliance table intro), libertas-capabilities-section.tsx (SOC2/PCI-DSS/HIPAA). Portal pricing page and docs-site compliance page already had proper qualifiers. Repo: undercurrent-core (brand/website submodule) Completed: 2026-04-04
  • CR14. Verify team credentials — Gather supporting evidence for specific claims on team page: BMW dealer rankings (internal BMW reporting data), Claude Code token count (Anthropic dashboard), product count, QuarryX backtest methodology. Most claims are verifiable with internal data — assemble the evidence, then decide if copy needs clarification or just citation. File: brand/website/src/components/sections/team-section.tsx Repo: undercurrent-core Effort: 2 hours
  • CR15. Rebuild llms-full.txt — Regenerated from updated MDX content (roadmap DX phases, D4 completion, README quickstart update). File: docs-site/public/llms-full.txt Completed: 2026-04-04
  • CR16. Update compliance page for FedRAMP High — Note FedRAMP High as target baseline, FIPS 140-3 PQC module gap (industry-wide, earliest Q2 2027), classical FIPS crypto path planned. File: docs-site/content/docs/compliance/index.mdx Effort: 1 hour

FedRAMP High Readiness (Long-term)

Technological alignment for FedRAMP High authorization. Formal 3PAO engagement deferred until organizational readiness (C18: team expansion). FIPS 140-3 validated PQC modules unavailable industry-wide until Q2 2027+ (CIQ NSS module target). Budget: $250K-$3M+ for authorization process. Only 48 cloud services hold FedRAMP High authorization as of March 2026.

Critical path: F1-F3 (FIPS crypto + policies, no blockers) ─┐ C3-C5 (exercises) → C18 (team expansion) ─┴→ F4 (SSP) → F5 (3PAO)

Medium-term (Q2-Q3 2026 — no external dependencies)

  • F1. Add FIPS-approved classical crypto provider — ECDSA P-256 signatures + ECDH P-384 key agreement using OpenSSL FIPS module (via Python cryptography library with FIPS backend). This becomes the FedRAMP-compliant crypto path; PQC hybrid remains as optional/additional. NIST-recommended "crypto agility" approach for the gap period. New files: src/crypto/ecdsa_fips_provider.py, src/crypto/ecdh_fips_provider.py Effort: 3-5 days
  • F2. FIPS 199 security categorization — Formal categorization of AEGIS information types per NIST SP 800-60. Required for FedRAMP SSP. New file: docs/compliance/FIPS-199-categorization.md Effort: 4 hours
  • F3. Create MA and PS policies — Maintenance (MA) and Personnel Security (PS) are complete gaps in the FedRAMP control family assessment. No code changes, documentation only. New files: docs/compliance/MAINTENANCE-POLICY.md, docs/compliance/PERSONNEL-SECURITY.md Effort: 6 hours

Long-term (Q3-Q4 2026 — depends on C18, F1)

  • F4. Draft System Security Plan (SSP) — FedRAMP SSP template with control implementation narratives for all 421 High baseline controls. docs/compliance/system-description.md provides ~70% of system description. Effort: 4-8 weeks Blocked by: F1, F2, F3, C18
  • F5. Engage 3PAO for readiness assessment — Pre-assessment gap analysis before formal authorization pursuit. Budget: $50K-$100K for readiness assessment alone. Effort: External Blocked by: F4
  • F6. Monitor FIPS 140-3 PQC module availability — Track CIQ NSS module (target Q2 2027), wolfSSL wolfCrypt PQC, and CMVP Modules in Process list. When first validated PQC module ships, trigger migration from F1 classical crypto to PQC+classical hybrid under FIPS. Effort: Ongoing monitoring

Feature Accuracy & Tier Enforcement (Audit 2026-04-04)

Rigor audit of all customer-facing feature claims across docs-site, portal, developers site, and README. 50+ claims audited against implementation code. Source: adversarial feature-accuracy review with code-documentation reconciliation.

Audit results: 35 VERIFIED | 10 QUALIFIED (limitations disclosed) | 5 OPEN (copy remediation) | 0 FALSE | 1 UNVERIFIED-DEFENSIBLE ("first" PQC governance platform)

CRITICAL: Tier Feature Enforcement (Pre-Revenue Blocker)

src/aegis_governance/tiers.py defines 4 tiers with feature flags (4/9/15/18 features), but zero feature enforcement exists in the codebase — feature flags are metadata only. Any bearer token can use Enterprise/Financial Services features (shadow_mode, crypto_overrides, RBAC, PQ crypto). Only rate limits (Unkey) and API key count limits are enforced. This is by-design for Phase 1 (visibility only), but must be resolved before publishing per-tier feature differentiation on pricing pages.

  • T1. Implement tier feature gating in API server — Hybrid model (research-backed): core evaluation universal, 2 features gated. shadow_mode=true requires Professional+ (natural CI upgrade trigger). CSV compliance export requires Financial Services (regulatory need). Added has_feature() and min_tier_for_feature() helpers to tiers.py. Inline checks in api_server.py (2 insertion points, ~12 lines). 403 responses include tier name + upgrade URL. Files: src/aegis_governance/tiers.py, src/api_server.py Completed: 2026-04-05
  • T2. Add tier enforcement tests — 21 tests: 11 tier helper tests, 5 shadow_mode gating tests, 5 compliance export gating tests. Per-tier Unkey mock fixtures. Files: tests/test_tier_enforcement.py (new, 21 tests) Completed: 2026-04-05
  • T3. Sync portal tier data with tiers.py — Portal (undercurrentai/portal) has its own tier definitions that must match. Automate or document the sync process. Repo: undercurrentai/portal Effort: 2 hours

Remaining Copy Remediation (from Audit 2026-04-04)

  • CR9. Fix portal AFA "priority support" claim — Removed "and priority support" from AFA Community plan upgrade banner. Feature does not exist in tier spec. Repo: undercurrentai/portal, File: afa/dashboard/page.tsx Completed: 2026-04-04
  • CR12. Agora IV on About page — Remove mention or add "(coming soon)". Repo: undercurrent-core Effort: 15 min
  • CR13. Add inline compliance disclaimers — Added "Aligned with:" qualifier and "Not a certification claim" disclaimer to 3 developer-facing pages: aegis-landing-page.tsx (badge section), aegis-overview-section.tsx (compliance table intro), libertas-capabilities-section.tsx (SOC2/PCI-DSS/HIPAA). Portal pricing page and docs-site compliance page already had proper qualifiers. Repo: undercurrent-core (brand/website submodule) Completed: 2026-04-04
  • CR14. Verify team credentials — Gather supporting evidence for specific claims on team page: BMW dealer rankings, Claude Code token count, product count, QuarryX backtest methodology. Repo: undercurrent-core, File: brand/website/src/components/sections/team-section.tsx Effort: 2 hours
  • CR16. Update compliance page for FedRAMP High — Note FedRAMP High as target baseline, FIPS 140-3 PQC module gap (industry-wide, earliest Q2 2027), classical FIPS crypto path planned. File: docs-site/content/docs/compliance/index.mdx Effort: 1 hour

Feature Claim Verification Summary

All core technical claims verified against implementation:

CategoryClaimsStatus
6 quantitative gatessrc/engine/gates.py (898 lines, 6 gates)VERIFIED
Hash-chained audit trailaudit_chain_store.py + Neon PostgreSQLVERIFIED
Post-quantum crypto (ML-DSA-44, ML-KEM-768)src/crypto/ (5 providers, optional deps)VERIFIED
Two-key override signaturessrc/workflows/override.py + dual-sigVERIFIED
PII encryption (12 fields)src/telemetry/encryption.py (858 lines)VERIFIED
MCP Server (7 tools)src/aegis_governance/mcp_server.pyVERIFIED
REST API + SDKapi_server.py + aegis-sdk/VERIFIED
Sandbox (10/day, no signup)sandbox.py + rate limiterVERIFIED
Zero runtime deps (core)pyproject.toml deps=[]VERIFIED
Performance (p50 <100ms, 100+ eval/s)Benchmarks: 15-18μs median, 55-61K ops/sVERIFIED
NIST/EU AI Act/ISO 42001/SOC 2/FedRAMPArtifacts in ai/, docs/compliance/QUALIFIED

Developer Experience & CI Hygiene (Discovery 2026-04-04)

Comprehensive 6-agent codebase discovery (TODO scanner, code quality audit, ROADMAP audit, dependency/CI analysis, docs-code contradiction finder, feature completeness analysis). Project health: A+ — 0 TODOs, 4874 tests, ~94.89% coverage, all features production-deployed, zero deferred bugs.

Sequencing principle: DX items first (unblock contributors and reduce onboarding friction), then operational hardening.

DX Phase 1: CI & Build Reliability (no blockers, immediate)

All items are independent — can be done in parallel. Fixes supply chain risk, install correctness, and build reproducibility.

  • DX1. Update outdated GitHub Actions — 5 actions across 3 workflows behind by 1-2 major versions. Supply chain risk (unpinned google actions) + missing security patches. sdk-publish.yml: checkout@v4→v6, setup-python@v5→v6. docs-deploy.yml: checkout@v5→v6, setup-node@v4→v5. aegis-deploy.yml: pin google-github-actions/auth@v2 and setup-gcloud@v2 with commit hashes (only unpinned actions in the repo). Files: .github/workflows/sdk-publish.yml, .github/workflows/docs-deploy.yml, .github/workflows/aegis-deploy.yml Effort: 1 hour
  • DX2. Add numpy<2.0 to pyproject.toml [engine]Dockerfile.lambda:20 pins numpy{'<'}2.0 but pyproject.toml [engine] group does not. pip install -e ".[engine]" outside Docker may pull numpy 2.x, breaking scipy on older platforms. File: pyproject.toml Effort: 5 min
  • DX3. Pin Lambda runtime versionDockerfile.lambda:5 uses public.ecr.aws/lambda/python:3.11 without patch pin — non-reproducible builds. Fix: Pin to python:3.11.11 (or latest 3.11.x). File: Dockerfile.lambda Effort: 5 min
  • DX4. Narrow dependency version rangescryptography>=41.0.8,{'<'}48.0.0 too permissive (narrow to <43.0.0); coincurve>=18.0.0,{'<'}22.0.0 too wide (narrow to <20.0.0). Extends D15 (btclib <2025.0.0). File: pyproject.toml Effort: 15 min

DX Phase 2: Documentation & Onboarding (no blockers, short-term)

Reduce contributor friction. All items independent.

  • DX5. Consolidate environment variable documentationapi_server.py:33-44 docstring lists 10 env vars but ~42 exist across src/ (AEGIS_KMS_KEY_ID, AEGIS_HSM_PIN, AEGIS_HSM_PKCS11_LIB, AEGIS_HSM_TOKEN_LABEL, AEGIS_HSM_WRAPPING_KEY_LABEL, AEGIS_HSM_WRAPPED_PRIVATE_KEY, AEGIS_KMS_WRAPPED_PRIVATE_KEY, AEGIS_CUSTOMER_ID, AEGIS_MCP_ALLOWED_HOSTS, AEGIS_AUDIT_BUCKET, AEGIS_MASTER_KEK_PUBLIC, DATABASE_URL, K_REVISION, AWS_DEFAULT_REGION, Secrets Manager ARN variants, etc.). Fix: Update docstring with all variables grouped by required/optional/Cloud Run/Lambda/legacy. File: src/api_server.py Effort: 2 hours
  • DX6. Fix CLAUDE.md CI validator count — §10 references "9 compliance validators" but tools/ci/ contains 11 (includes aegis_shadow_backfill.py and generate_precommit_config.py). File: CLAUDE.md Effort: 5 min
  • DX7. Fix CLAUDE.md changelog timeline — v4.6.117 entry shows "4737 → 4768" but its input baseline should match v4.6.116's output (4768). The v4.6.116 entry then shows "4769 → 4788" (removing 2 DynamoDB tests). Verify which baseline is correct via git history. Historical record only — current count (4788) is correct everywhere else. File: CLAUDE.md Effort: 15 min

DX Phase 3: Code Quality & Consistency (short-term)

Improve codebase consistency for contributors. DX8-DX10 independent; DX11 is a standalone migration.

  • DX8. Standardize logger formatting — Converted 88 f-string logger calls to %-style lazy formatting across 20 files in src/. Enabled ruff G rules (flake8-logging) to enforce going forward; G201 ignored as separate DX item. Completed: 2026-04-07
  • DX9. Add @abstractmethod to SerializableMixinsrc/workflows/serialization.py:45-67 has 5 methods raising NotImplementedError but lacks @abstractmethod decorators — missing implementations caught at runtime instead of class definition time. File: src/workflows/serialization.py Effort: 30 min
  • DX10. Narrow exception breadth in schema_validatorsrc/telemetry/schema_validator.py:173 catches (ImportError, Exception) — the Exception makes the ImportError redundant and swallows unexpected errors. Fix: Narrow to (ImportError, ModuleNotFoundError). File: src/telemetry/schema_validator.py Effort: 15 min
  • DX11. Upgrade Dockerfiles to Python 3.12-slim — All 3 Dockerfiles use python:3.11-slim. Python 3.11 enters security-only mode May 2026 (next month). CI matrix already tests 3.9-3.12. Files: Dockerfile, Dockerfile.api, Dockerfile.lambda Effort: 2-4 hours

DX Phase 4: Runtime Safety (medium-term)

  • DX12. Add drift observation window cleanupsrc/integration/pcw_decide.py:60-67_drift_observation_windows dict keyed by id(drift_monitor) can leak memory in long-running processes if monitors are created/destroyed without explicit reset_drift_window(). Fix: Use WeakValueDictionary or TTL-based eviction. File: src/integration/pcw_decide.py Effort: 2 hours

Cross-Section Execution Sequence (2026-04-04)

Logical ordering across all open items, incorporating dependency chains and DX-first prioritization.

Week 1 — COMPLETE (DX1-DX4: CI actions, numpy, Lambda pin, dep ranges)

Week 2 — COMPLETE (DX5-DX7: env var docs, validator count, changelog fix)
  CR9, CR12 (quick copy fixes, 30 min total — remaining from Week 2)

Week 3 (Code quality + Dockerfile migration):
  DX8  (logger formatting)  ─┐
  DX9  (abstractmethod)      │ All independent, ~2 hours total
  DX10 (exception breadth)  ─┘
  DX11 (Python 3.12-slim)       ← 2-4 hours, test against CI matrix
  G10  (agora-iv container tag, 30 min)

Week 4 (Vendor risk assessments — parallelizable):
  G3 (GCP)    ─┐
  G4 (Neon)    │ 5 docs + dashboards, ~15 hours total
  G5 (Unkey)   │ Follow AWS template
  G7 (Stripe)  │
  G8 (GitHub) ─┘
  G11 (GCP Cloud Monitoring dashboards)

Week 5-6 (Compliance drills — sequential):
  C3  (access review, 4h)
  C10 (break-glass procedures, 3h)
  C4  (BCP/DRP test, 8h)           ← depends on C10
  C5  (IRP tabletop, 4h)
  C11 (DSR templates, 4h)

Week 6+ (Medium-term operational — no blockers):
  DX12 (drift window cleanup)
  N6   (distribute sandbox rate limit)
  C6   (decision accuracy metrics, 10h)
  S8   (stripe_customer_id on Customer model)
  G9   (AWS resource cleanup — includes DynamoDB decommission)
  CR9, CR12 (quick copy fixes — portal + undercurrent-core, 30 min)
  CR13 (compliance disclaimers), CR14 (credentials), CR16 (FedRAMP page)
  D10  (SNS alarm subscriptions)
  F1   (FIPS classical crypto, 3-5 days)  ─┐ No blockers — start
  F2   (FIPS 199 categorization, 4h)       │ early to unblock F4
  F3   (MA/PS policies, 6h)               ─┘

Pre-Revenue (before publishing pricing page — blocks paid tier launch):
  T1   (tier feature gating, 2-3 days) ← pricing strategy decision first
  T2   (tier enforcement tests, 1 day) ← blocked by T1
  T3   (portal tier data sync, 2h)     ← blocked by T1

Post-D12 (~2026-04-24, after 30-day KL data collection):
  D12 → D16 (shadow → enforcement transition)
  D13 (Grafana dashboards)
  N7  (PERT variance documentation)
  N8  (per-gate drift thresholds)

Strategic (Q3-Q4 2026, blocked by C18 team expansion):
  F4 (SSP, 4-8 weeks) ← blocked by F1+F2+F3+C18 → F5 (3PAO)
  C7 (external legal counsel)
  C8 (external TEVV audit)
  C9 (SOC 2 Type 2 prep) ← depends on C3+C4+C5+C18
  F6 (monitor FIPS PQC modules — ongoing)
  D14 (multi-region DR)
  D15 (btclib constraint planning)

Recently Completed

Gap Closure Sprint (PR #25) — Phase 1 Complete

TaskTypeStatusDetails
RBAC Enforcement (#7)Security✅ Phase 1RBACEnforcer, YAMLRoleResolver, wired into override + pcw_decide
Override Audit (#5)Observability✅ Phase 1Override telemetry events, AlertSink protocol, LogAlertSink + WebhookAlertSink
Performance Benchmarks (#2)Testing✅ Phase 113 pytest-benchmark functions across 3 files
DR Verification (#8)Reliability✅ Phase 1Crash recovery tests, hash chain integrity, health CLI
Monitoring Infrastructure (#9)Observability✅ Phase 1MetricsServer, CLI metrics/health, Grafana + Prometheus configs
validate() Refactor (#24)Tech Debt✅ CompleteCC=56 → CC~6 via data-driven _validate_section()

Metrics (at PR #25 merge): 1997 tests, 94.47% coverage, 6 issues addressed + 13 rigor findings + 11 bug-hunt #5 + 6 bug-hunt #6 + 6 bug-hunt #8 + 8 bug-hunt #9 + 2 ultrathink + 5 QG-ultrathink-10 + shadow mode + HTTP sink + drift enforcement + MCP HTTP transport + H-1 SSRF fix + MCP hardening + TLS enforcement + parameter cookbook + QG56 ultrathink + QG57 ultrathink + BH10 (7 bugs)

AWS Deployment (ROADMAP Items 16-20) — DEPLOYED

StackAWS ResourceStatusDetails
AegisSharedStack-devDynamoDB, KMS, S3, Secrets Manager✅ DEPLOYEDaegis-governance-state-dev, aegis-governance-audit-dev-164171672016
AegisLambdaStack-devLambda + API Gateway✅ DEPLOYEDaegis-evaluate-proposal-dev, REST API with IAM auth
AegisMcpStack-devECS Fargate + HTTP API✅ DEPLOYEDaegis-mcp-dev (1/1 running), streamable-http transport, public API Gateway + VPC Link (Unkey auth)
AegisMonitoringStack-devCloudWatch + SNS✅ DEPLOYEDDashboard, 4 alarms, SNS topic

API Endpoint: https://aegis-api-980022636831.us-central1.run.app/ Routes: POST /evaluate, POST /risk-check, GET /health

Completed (v3.26.0 — Rigor Protocol)

TaskTypeStatusDetails
Rigor Protocol Phase 1Bug Fix✅ Completev3.24.0: 7 fixes (M7, M8, L13, L16, L19, L31, M11 doc)
Rigor Protocol Phase 2Bug Fix✅ Completev3.25.0: 17 fixes, 25 regression tests
Rigor Protocol Phase 3Bug Fix✅ Completev3.26.0: 13 fixes (M14-M18, L33-L40)
Quality Gate UltrathinkHardening✅ CompleteM1-M4, L4: input validation, error handling

Metrics: 1689 tests, 94.60% coverage, 103/103 bugs fixed (100% fix rate)

Previously Completed (v3.11.0-v3.13.0)

TaskTypeStatusDetails
Posterior Predictive (NEW-A)Math Fix✅ CompleteADR-006, compute_posterior_predictive()
Covariance Matrix (U1+)Math Fix✅ Completecov_pv, cov_pr, cov_vr parameters
PERT Variance (P1*)Documentation✅ CompleteDocstring warning ±22-40% error
Fail-Closed Default (I1)Security Fix✅ Completelcb=float('-inf')
Input ValidationRobustness✅ CompleteValueError for invalid std values

See: Multi-Model Coherence Review for full analysis.

Recently Merged PRs

PRTitleMerged CommitStatus
#25feat: gap closure sprint — RBAC, alerts, metrics, DR, benchmarksedc278c✅ Merged
#23feat: AEGIS v1.0 Governance Decision SDKcfa3783✅ Merged
#22chore(claude): audit & regenerate CLAUDE.md v4.0.0d114f07✅ Merged
#21Default legacy algorithm on deserializationcd4572a✅ Merged
#20Fix telemetry timestamp validation for ISO stringsd9ea971✅ Merged
#19Add structured decision trace to pcw_decide7df8bf7✅ Merged

Open Issues

#TitlePriorityStatusLabelsMilestone
#1GAP-DriftThreshold: Calibrate KL Divergence ThresholdMEDIUMOpen — needs production dataGAP, team:riskv1.2.0+
#2GAP-PerfTest: Load-Test Guardrail Service (<500 ms p95)MEDIUMPhase 1 complete — needs Locust testingGAP, team:devopsv1.2.0
#5GAP-OverrideAudit: Enhance Override Logging & AlertsMEDIUMPhase 1 complete — needs SNS subscriptionsGAP, team:secengv1.2.0
#7GAP-RBAC-Enforcement: Apply Role-Based Access ControlsMEDIUMPhase 1 complete — needs IAM integrationGAP, team:secengv1.2.0
#8GAP-DR-Drill: Test Disaster Recovery ProcessLOWPhase 1 complete — needs multi-region replicationGAP, team:devopsv2.0.0
#9GAP-MonitoringDashboard: Implement Guardrail Monitoring DashboardLOWPhase 1 complete — needs Grafana provisioningGAP, team:devopsv2.0.0

Recently Closed Issues

#TitleClosedNotes
#24validate() CC=56 refactor2026-02-08Refactored to CC~6 via data-driven _validate_section()
#6GAP-TelemetryPrivacy: PII Redaction2026-01-3112-field PII encryption via HybridKEM

Sprint Update (PR #25): Issues #2, #5, #7, #8, #9 have Phase 1 code-side implementations complete. AWS infrastructure now DEPLOYED (4 CDK stacks live in us-west-2). Remaining work: Slack/email SNS subscriptions, multi-region replication, Locust load testing against live endpoints. Issues #6, #18, #24 closed. Milestone "Guardrail β-to-Prod" due date updated to 2026-06-30.


Release Roadmap

v1.0.1 (Patch - Pre-Release Bug Fixes) ✅ RELEASED

Released: 2026-01-31 (pre-release fixes merged before v1.0.0 SDK release) Focus: Bug fixes merged

TaskPR/IssueStatus
Timestamp validation fixPR #20✅ Merged (d9ea971)
Signature algorithm preservationPR #21✅ Merged (cd4572a)
Structured decision tracePR #19✅ Merged (7df8bf7)
Fix broken documentation linksIssues #14-18✅ Fixed (0f18c71)

v1.0.0 (Major - SDK Release) ✅ RELEASED

Released: 2026-02-06 (PR #23, commit cfa3783) Focus: Governance Decision SDK — public API, CLI, MCP server

TaskPR/IssueStatus
AegisConfig frozen dataclass (src/config.py)PR #23✅ Complete
CLI entry point (src/cli.py, aegis command)PR #23✅ Complete
Public API facade (src/aegis_governance/__init__.py)PR #23✅ Complete
MCP server (src/aegis_governance/mcp_server.py)PR #23✅ Complete
79 new tests (config, CLI, facade, MCP)PR #23✅ Complete
4 runnable examples (examples/)PR #23✅ Complete
README rewrite (SDK positioning)PR #23✅ Complete
pyproject.toml [project.scripts] entriesPR #23✅ Complete

v1.1.0 (Minor - Enhancements)

Target: Q1 2026 Focus: Testing improvements and new features

TaskEffortStatusNotes
Mathematical coherence fixes8h✅ Completev3.11.0 (NEW-A, U1+, P1*, I1)
Boundary tests for all gates4h✅ Complete77 parametrized BVA tests (tests/test_gate_boundaries.py)
Integration test: Proposal → Execution8h✅ Completetests/integration/test_e2e_proposal_lifecycle.py (5 tests)
GOVERNANCE actor type6h✅ CompleteOverride orchestration, compliance, emergency halt (41 tests incl. 6 regression)
CALIBRATOR actor type6h✅ CompleteStatistical threshold tuning, approval-gated workflow (69 tests incl. 12 regression)

v1.2.0 (Minor - Features)

Target: Q2 2026 Focus: Production readiness

TaskEffortStatusNotes
Shadow mode deployment prerequisites16h✅ Completepcw_decide(shadow_mode=True), ShadowResult, 44 tests (ROADMAP Item 13)
HTTP telemetry sink4h✅ CompleteHTTPEventSink + BatchHTTPSink + http_sink() factory, config/CLI/MCP wiring, 41 tests (ROADMAP Item 14)
Configuration management system12h✅ CompleteAegisConfig in v1.0.0 (PR #23)
Drift detection → policy connection4h✅ CompleteDriftMonitor wired into pcw_decide; CRITICAL→HALT, WARNING→constraint (ROADMAP Item 15)
GAP-DriftThreshold (#1)TBDUnblockedShadow mode enables data collection; needs 30+ days of observed KL values
GAP-PerfTest (#2)8hPhase 1 CompleteBenchmarks established; Locust load testing now possible against live API Gateway
GAP-OverrideAudit (#5)8hPhase 1 CompleteOverride telemetry + AlertSink protocol; Slack/email sinks pluggable
GAP-RBAC-Enforcement (#7)12hPhase 1 CompleteRBACEnforcer + YAMLRoleResolver; IAM integration pluggable via RoleResolver protocol
MCP Streamable HTTP transport12h✅ Complete--transport http on aegis-mcp-server; POST /mcp (JSON-RPC single + batch), /health endpoint; internal ALB; origin validation; SSRF protection; 50 new tests (ROADMAP Item 23)

v2.0.0 (Major - Backlog)

Target: 2026 H2 Focus: Operational excellence

TaskEffortStatusNotes
GAP-L1 Phase 2-3: Grafana dashboards & alerting87h✅ DEPLOYEDPhases 1-3 code-complete; CloudWatch dashboard + SNS alarms deployed (AegisMonitoringStack-dev)
GAP-L2: OpenTelemetry distributed tracing16h✅ DEPLOYED (foundation)ADOT sidecar on ECS Fargate; full OTLP span correlation deferred
GAP-DR-Drill (#8)16hPhase 1 CompleteDR verification tests + health CLI; live drill now possible against deployed infrastructure
GAP-MonitoringDashboard (#9)16h✅ DEPLOYEDCloudWatch AEGIS-Governance-dev dashboard + Grafana configs available
Phase 2 red-team fuzzing20hInfrastructure ReadyLambda + API Gateway + ECS deployed as live targets
Parameter freezing mechanism8hBacklogGovernance compliance

GAP Status Summary

Completed GAPs

GAPDescriptionCompletionImplementation
GAP-C1Decision Logic Divergence100%src/engine/gates.py, src/engine/dual_validation.py
GAP-C2Override Mechanism100%src/workflows/override.py, src/integration/override_handler.py
GAP-C3AFABridge Gate Integration100%src/integration/afa_bridge.py
GAP-H1Parameter Naming100%schema/interface-contract.yaml
GAP-H2Telemetry Schema100%src/telemetry/schema.py
GAP-H3RBAC Reconciliation100%schema/rbac-definitions.yaml
GAP-M1Feedback Timing100%src/engine/drift.py
GAP-M2Actor Types100%src/actors/
GAP-M3Workflow Persistence100%src/workflows/persistence/
GAP-M4Signature Format100%src/crypto/
GAP-Q1Post-Quantum Signatures100%src/crypto/mldsa.py, hybrid_provider.py
GAP-Q2Post-Quantum Encryption100%src/crypto/mlkem.py, hybrid_kem.py

In-Progress GAPs

GAPDescriptionCompletionPhase
GAP-L1Unified Monitoring Dashboard100% code + deployedPhases 1-3 code-complete; CloudWatch + SNS deployed; Grafana available via configs

Planned GAPs

GAPDescriptionCompletionTarget
GAP-L2Cross-Component TracingFoundation deployedADOT sidecar running; full OTLP deferred to v2.0.0

Remaining Work (Post-Audit 2026-03-20)

ItemPriorityStatusDetails
Stripe business verificationHIGHCOMPLETEDBusiness verified in Stripe Dashboard (2026-03-21)
OpenAPI/Swagger specCOMPLETED727-line OpenAPI 3.1.0 spec at docs/api/openapi.yaml, served at GET /openapi.yaml, llms.txt added
CodeQL Action v3 → v4COMPLETEDMigrated to CodeQL Action v4 SHA (2026-03-21)
AFA bridge Bayesian gatesCOMPLETEDGateEvaluator already wired with full Bayesian posteriors + change_type support (2026-03-22)

Production Readiness Metrics

MetricCurrentTargetStatus
Test Coverage~92.0%90%Exceeds
Tests Passing4124 (2 skipped — E2E, requires service key; 2 skipped — MCP base, cleanup)AllPass
Security Vulnerabilities00Pass
CI/CDAll greenAll greenPass
Documentation Accuracy99.6%95%Exceeds
AWS Deployment4/4 stacks deployedAll stacksPass

Integration Guides

  • Parameter Reference - Complete parameter reference with derivation guidance
  • Domain Templates - Worked examples for 4 domains (trading, CI/CD, content moderation, autonomous agents)

Implementation

Research

Analysis


Changelog

VersionDateChanges
2.0.02026-03-25Bug Hunt #51: 9 bugs fixed (1H, 5M, 3L), 19 regression tests; BH51-B1 Unkey meta null crash (Lambda authorizer hot path), BH51-B2 CalibrationTrigger repr deadlock (Lock→RLock), BH51-B3 cooldown defeated (evaluate never set _last_trigger_time), BH51-B4 subscription_deleted missing Unkey downgrade, BH51-B5 _track_usage bills on 400/500, BH51-B6 audit chain coherent forgery (stored hash→recomputed), BH51-B7 subscription_created missing Unkey sync, BH51-B8 CRITICAL drift no warning reset, BH51-B9 _STRIPE_KEY no lock; deployed v1.1.1; 4247 tests, ~92% coverage
1.99.02026-03-22Compliance Remediation: 5-framework audit (NIST AI RMF, EU AI Act, ISO 42001, SOC 2, FedRAMP) + legal soundness audit. 18 remediation tasks (C1-C18) added. AI frameworks compliant; SOC 2/FedRAMP partial (exercises deferred Q2 2026). 6 critical legal findings (overclaiming, compliance-ready language, missing disclaimers) tracked as C12-C17
1.98.02026-03-22Discovery Analysis 2026-03-22: 8-agent comprehensive codebase audit consolidated into ROADMAP. 16 items across 4 time horizons (D1-D16). 1 critical (annual Stripe env vars), 1 moderate (decision serialization duplication), AFA E2E gaps, stale branches, operational next steps. Project health: 0 bugs, 4124 tests, ~92% coverage, 12/12 CI workflows green
1.97.02026-02-27Advisor step validation: canProceed(step) + updateNextButton() for all 8 wizard steps, navigation guards on nextStep()/showReview(), startOver() button reset fix; 3377 tests, ~95.0% coverage
1.96.02026-02-26AgoraIV Integration GAPs 1-5 resolved: middleware facade exports (10 symbols), 67 contract tests in test_agoraiv_contract.py, 20 facade import tests, integration contract v1.1.0 docs sync (GAPs 1-5 marked Resolved); 3377 tests, ~95.0% coverage
1.95.02026-02-26WCAG 2.1 AA accessibility: 6 font sizes bumped to 13px minimum, :focus-visible outlines on all interactive elements, skip-to-content link, prefers-reduced-motion media query, ARIA roles/labels/states on domain cards + progress bar + wizard sections + loading/results screens; all 8 color pairs pass AA contrast ratios; 3041 tests, ~94.9% coverage
1.94.02026-02-26Undercurrent Holdings brand applied to mkdocs site and Advisor wizard — dark slate theme, neon green accent, AlphaLyrae/D-DIN fonts, infinity logo, brand favicons; 13 files (4 fonts, 5 images, 1 new CSS, 2 modified CSS/HTML, 1 modified YAML); WCAG AA verified; deployed to aegis.undercurrentholdings.com
1.93.02026-02-25Bug Hunt #45 (Hybrid): 6 fixes (1 Codex, 2M, 2L + 1 ultrathink), 31 regression tests; BH45-Codex-M1 proposal metadata deep copy, BH45-M1 MCP risk_score eager eval transport parity, BH45-M2 BayesianPosterior update_prior validation, BH45-T1 update_prior bool guard, BH45-L1 PipelineConfig int validation, BH45-L2 PipelineConfig enum validation; 3029 tests, ~94.8% coverage
1.92.02026-02-25Scoring Guide MCP Tool + Advisor v2: aegis_get_scoring_guide with 5-domain derivation guidance, Advisor rewrite with domain funnel + factual rubric + real API calls, demo API key provisioned; 2998 tests, ~94.8% coverage
1.91.02026-02-24SaaS Commercialization Sprint: API key auth + usage plans (CDK), tenant context extraction (Lambda), customer provisioning script, OpenAPI 3.1 spec, mkdocs-material docs site (10 pages), PyPI trusted publishing, SECURITY.md, CHANGELOG.md; pyproject.toml v1.1.0; 2967 tests, ~94.8% coverage
1.90.02026-02-24Transport Parity Fix: 15 gaps closed across CLI/MCP/Lambda (GAP 2-4 CRITICAL: MCP missing bool flags, GAP 1 metadata, GAP 6-8 inputSchema + Lambda telemetry, GAP 12 strict impact, GAP 15 UUID session, GAP 17 SSRF, GAP 18-22 output fields); new telemetry/url_validation.py shared module; 2958 tests, ~94.8% coverage
1.89.02026-02-23Bug Hunt #44 (Hybrid): 4 fixes (1 Codex, 2M, 1L), 15 regression tests; BH44-Codex-M1 schema_signer chain state corruption, BH44-M1 calibrator utility_threshold constraint, BH44-M2 proposer TypeError catch, BH44-L1 pcw_decide drift alias; 2923 tests, ~94.8% coverage
1.88.02026-02-23Bug Hunt #43 (Hybrid): 11 fixes (2 Codex, 5M, 4L) + 1 ultrathink fix, 31 regression tests; BH43-Codex-M1 analyst gate exception handling, BH43-Codex-M2 analyst quality_subscores TypeError, BH43-M1 CLI null subscores crash, BH43-M2 ComplexityBreakdown bool fields, BH43-M3 value_variance negative floor, BH43-M4+M5 pipeline ingest() aliasing, BH43-L1 CLI metric alias null, BH43-L2 utility value_low_conf NaN, BH43-L3 utility covariance NaN, BH43-L4 ProposalWorkflow from_dict cls(), QG-T1 from_dict evaluation_result; 2908 tests, ~94.8% coverage
1.87.02026-02-23Bug Hunt #42 (Hybrid): 13 fixes (3 Codex, 6M, 2L + 2 ultrathink), 29 regression tests; BH42-M1 complexity mutable default, BH42-M2 calibrator novelty_k positive, BH42-M3 prometheus NaN latency, BH42-M4 prometheus NaN KL divergence, BH42-M5 emitter correlation_id or-falsy, BH42-M6 lambda shadow_mode bool, BH42-L1 pcw_decide posterior or-falsy, BH42-L2 afa_bridge posterior or-falsy, BH42-Codex-M1 auth falsy fail-open, BH42-Codex-M2 allow_abstain bool, BH42-Codex-L1 checkpoint collision retry, QG-T1 MCP shadow_mode parity, QG-T2 analyst confidence or-falsy; 2877 tests, 94.81% coverage
1.86.02026-02-22Bug Hunt #41 (Hybrid): 7 bugs (1 Codex + 4M, 2L), 33 regression tests; BH41-M1 analyst None subscores saw_non_null (analyst.py), BH41-M2 validate_range check_nan default False→True (validation.py), BH41-M3 schema_signer _prev_digests atomic commit (schema_signer.py), BH41-M4 consensus DEFER excluded from required_missing (consensus.py), BH41-L1 calibrator list_proposals lock-snapshot race (calibrator.py), BH41-L2 emitter correlation_id or-coercion (emitter.py), BH41-Codex complexity_floor bool guard (complexity.py); QG verify: ruff B017 narrowed, black format, mypy attr-defined; 2848 tests, 94.82% coverage
1.85.02026-02-22Bug Hunt #40 (Hybrid): 9 bugs (4M, 5L), 40 regression tests; BH40-M1 quality_subscores empty-list bypass (Codex+Claude), BH40-M2 BatchHTTPSink.stop() lock-before-join race, BH40-M3 validate_normalized bool guard missing, BH40-M4 _parse_mcp_rate_limit string-fractional truncation, BH40-L1 GateEvaluator negative threshold values disable gates, BH40-L2 _parse_kl_drift_dict string-fractional window_days, BH40-L3 stdio size guard char vs byte count, BH40-L4 get_decision_history truthy agent_id bypass, BH40-L5 DEKRotator readers without lock; 2815 tests, 94.78% coverage
1.84.02026-02-21Bug Hunt #39: 13 bugs (1H, 6M, 6L), 54 regression tests; BH39-H1 chain root forgery, BH39-M1/M3 lock-before-join, BH39-M2 TOCTOU, BH39-M4 inf trigger factor, BH39-M5 NaN utility, BH39-M6/L5 float truncation, BH39-L1 from_dict cls.new, BH39-L2 novelty_k=0, BH39-L3 JSON-RPC §4.1, BH39-L4 bip322 length, BH39-Codex-2 memory_sink maxlen=0; 2775 tests, 94.77% coverage
1.83.02026-02-21QG-UT1: GateEvaluator(trigger_confidence_prob=True) silently accepted via validate_range inclusive upper bound (True==1.0); explicit bool guard added; 2721 tests, 94.78% coverage
1.82.02026-02-21Bug Hunt #38 (Hybrid): 6 bugs (1H, 4M, 1L), 35 regression tests; BH38-H1 key_store.py Python 3.10+ async-with SyntaxError on 3.9 (+ fmt:off guard), BH38-M1 UtilityCalculator bool-is-int bypass (phi_S/phi_D/gamma/kappa/migration_budget), BH38-M2 GateEvaluator bool-is-int bypass (trigger factors + thresholds), BH38-M3 CalibrationProposal + _validate_gate_param bool bypass, BH38-M4 MetricsServer.stop() lock held during join, BH38-L1 BatchHTTPSink non-int params (Codex); 2720 tests, 94.78% coverage
1.81.02026-02-20Bug Hunt #37: 6 bugs (3M, 3L) -- BayesianPosterior NaN, emergency_halt audit, calibrator novelty_N0, PipelineConfig float, ThreePointEstimate bool, DriftMonitor window_days; 2685 tests, 94.76% coverage
1.80.02026-02-20Bug Hunt #36 (Hybrid): 6 bugs (4M, 2L), 17 regression tests; QG Ultrathink: 2 findings (2L); BH36-M1 Lambda or pattern falsy bypass (Codex), BH36-M2 mark_completed non-enum state injection, BH36-M3 CLI or estimated_impact, BH36-M4 MCP or estimated_impact, BH36-L1 complexity_tax bool guard, BH36-L2 proposal_summary or pattern; 2659 tests, 94.74% coverage
1.79.02026-02-20Bug Hunt #35 (Hybrid): 6 bugs (4M, 2L), 22 regression tests; QG Ultrathink: 4 findings (4L), 19 regression tests; BH35-M1 check_and_mark_expired terminal state downgrade (Codex), BH35-M2 RBAC NaN signer_count bypass, BH35-M3 PipelineConfig flush_interval no validation, BH35-M4 BatchHTTPSink flush_interval no validation, BH35-L1 PipelineConfig bool-is-int, BH35-L2 DEKCache ttl_seconds no validation; 2642 tests, 94.79% coverage
1.78.02026-02-20Bug Hunt #34 (Hybrid): 5 bugs (4M, 1L), 14 regression tests; BH34-M1 DriftMonitor num_bins float accepted, BH34-M2 CLI cmd_evaluate missing TypeError catch, BH34-M3 DualSignatureValidator expiration_hours upper bound, BH34-M4 TelemetryPipeline worker_loop inconsistent state, BH34-L1 AegisConfig.from_dict() telemetry_url type coercion; 2601 tests, 94.79% coverage
1.77.02026-02-20Bug Hunt #33 (Hybrid): 5 bugs (5M), 15 regression tests; BH33-M1 config._parse_flat_numeric non-numeric type silently accepted, BH33-M2 config._from_raw_dict DIRECT param non-numeric type, BH33-M3 DriftMonitor.evaluate() unfiltered window, BH33-M4 OverrideWorkflow failed_gates no defensive copy, BH33-M5 mark_completed() state_data desync (Codex); 2587 tests, 94.80% coverage
1.76.02026-02-20Bug Hunt #32 (Hybrid): 3 bugs (2M, 1L), 20 regression tests; BH32-M1 DriftMonitor constructor negative/Inf threshold parity, BH32-M2 calibrator negative threshold governance bypass, BH32-L1 KLDriftConfig window_days validation; 2572 tests, 94.80% coverage
1.75.02026-02-20Bug Hunt #31 (Hybrid) + QG73 Ultrathink: 4 bugs (1M, 3L) + 2 QG73 findings (1M, 1L), 22 regression tests; BH31-M1 MCP caller_id non-string guard, BH31-L1 Lambda threshold dict.get() null, BH31-L2 ConsensusConfig fractional minimum, BH31-L3 DualSignatureValidator fractional minimum; QG73-L1 CLI agent_id transport parity, QG73-M1 AFABridge timeout fractional minimum; 2552 tests, 94.80% coverage
1.74.02026-02-19Bug Hunt #30 (Hybrid) + QG72 Ultrathink: 5 bugs (2M, 3L) + 4 QG72 findings (2M, 2L), 12 regression tests; BH30 dict.get() null gotcha transport parity (CLI/MCP/Lambda), AFABridge float limit, pipeline config mutation; QG72 remaining null gaps; 2530 tests, 94.76% coverage
1.73.02026-02-18Bug Hunt #29 (Hybrid) + QG71 Ultrathink: 8 bugs (3M, 5L) + 3 QG71 findings (3L), 26 regression tests; BH29-M1 estimated_impact case bypass, BH29-M2 executor TOCTOU, BH29-M3 calibrator novelty_k zero; QG71 MCP null guards + drain broadening; 2518 tests, 94.76% coverage
1.72.02026-02-18Bug Hunt #28 (Hybrid) + QG70 Ultrathink: 5 bugs (3M, 2L) + 3 QG70 findings (3L), 22 regression tests; BH28-M1 consensus quorum revert, BH28-M2 governance expired override eviction, BH28-M3 CLI risk alias priority; QG70 config bool coercion + drift baseline Inf; 2492 tests, 94.73% coverage
1.71.02026-02-17Quality-Gate QG69 Ultrathink: 1 finding (1M), 7 regression tests; QG69-M1 MCP+CLI drift_baseline_data isfinite transport parity; 2470 tests, 94.73% coverage
1.70.12026-02-17Bug Hunt #27 (Hybrid): 4 bugs (3M, 1L), 13 regression tests; BH27-M1 (resume_or_create ID propagation), BH27-M2 (_from_raw_dict string-to-float), BH27-M3 (Lambda/MCP null bypass), BH27-L4 (Lambda drift_baseline isfinite); 2470 tests, 94.73% coverage
1.70.02026-02-17Scaffold Adoption: Engineering Standards ai_scaffold_package v2.1.1 (50 files); ai/ (8 artifacts), docs/compliance/ (7 runbooks), tools/ci/ (9 validators), GitHub (templates, workflows, 15 labels), Makefile, .pre-commit-config; 100% placeholder elimination; CLAUDE.md v4.5.33; 2448 tests, 94.83% coverage
1.69.02026-02-16Bug Hunt #26 (Hybrid): 4 bugs (3M, 1L), 18 regression tests; BH26-M1 (validate_positive bool-is-int — Codex), BH26-M2 (bayesian update_prior variance overflow), BH26-M3 (RBAC bool constraint None fail-open), BH26-L1 (complexity delta NaN/Inf propagation); 0 deferred bugs; 2448 tests, 94.83% coverage
1.68.02026-02-16Bug Hunt #25 (Hybrid): 6 bugs (3M, 3L), 18 regression tests; BH25-M1 (analyst utility components null), BH25-M2 (CLI risk_score transport parity), BH25-M3 (drift histogram large-magnitude), BH25-L1 (analyst risk_delta/profit_delta null — Codex), BH25-L2 (bayesian overflow), BH25-L3 (config string NaN); PLR0912: _parse_flat_numeric() helper; 0 deferred bugs; 2430 tests, 94.81% coverage
1.67.02026-02-16Bug Hunt #24 (Hybrid) + QG68 Ultrathink: 10 bugs (4M, 6L), 26 regression tests; BH24-M1 (analyst _evaluate_utility_gate null guard), BH24-M2 (Lambda _float bool), BH24-M3 (MCP _float_arg bool), BH24-M4 (CLI _parse_proposal bool), BH24-L1 (drift evaluate baseline bool), BH24-L2 (override add_signature bool), BH24-L3 (MCP risk_check threshold null), BH24-L4 (config mcp_rate_limit bool), BH24-L5 (pcw_decide quality_subscores null), BH24-L6 (analyst profit_baseline null); QG68: analyst utility null guards; 0 deferred bugs; 2412 tests, 94.80% coverage
1.66.02026-02-16AMTSS Protocol v1 — MCP Tool Schema Signing: src/crypto/schema_signer.py (ToolSchemaSigner, SigningKeyPair, compute_tool_digest), Ed25519 per-tool + manifest dual signing, RFC 8785 canonicalization, _meta inline delivery, capabilities.experimental keyset; MCP server integration (tools/list proofs + initialize keyset); research doc 004-mcp-schema-signing-design.md; Claude-GPT dialogue (GPT 5.2 Pro xhigh); QG ultrathink: 5+4 findings fixed (manifest duplicate-name bypass, _meta stripping, statement type validation, digest chain, strict base64url + QG67: null sig crash, NaN canonicalization, manifest revision increment, signing error log level); ROADMAP 20a(e) complete — all 5 MCP hardening sub-items done; 2386 tests, 94.74% coverage
1.65.02026-02-16CoSAI MCP-T Cross-Reference: CLAUDE.md §11.4.1 MCP-T1..T12 threat mapping (9 STRONG, 2 MODERATE, 1 PARTIAL); ROADMAP 20a(d) complete; docs-only; 2304 tests, 94.63% coverage
1.64.02026-02-16Bug Hunt #23 (Hybrid): 7 bugs (3M, 4L), 29 regression tests; BH23-M1 (CLI drift baseline bool), BH23-M2 (CLI quality_subscores empty list), BH23-M3 (Calibrator eviction race), BH23-L1 (CLI subscores type check), BH23-L2 (BayesianPosterior prior_mean NaN/Inf), BH23-L3 (ConsensusWorkflow check_timeout), BH23-L4 (KeyStore audit lock TOCTOU); 0 deferred bugs; 2304 tests, 94.63% coverage
1.63.02026-02-15Quality-Gate QG66 Ultrathink: 2 findings (2L), 2 regression tests; UT-1 MCP empty subscores parity, UT-2 MCP non-numeric string crash; 2275 tests, 94.63% coverage
1.62.02026-02-15Bug Hunt #22 (Hybrid): 8 bugs (4M, 4L), 20 regression tests; BH22-M1 (override reject() wall-clock), BH22-M2 (MCP quality_subscores extraction), BH22-M3 (DriftMonitor update_thresholds validation), BH22-M4 (persistence re-completion guard), BH22-L1 (drift_baseline_data bool guard), BH22-L2 (governance override eviction), BH22-L3 (afa_bridge string-as-iterable), BH22-L4 (analyst null subscores); 0 deferred bugs; 2273 tests, 94.64% coverage
1.61.02026-02-15Bug Hunt #21 (Hybrid): 8 bugs (3M, 5L), 16 regression tests; BH21-M1 (KLDriftConfig post_init), BH21-M2 (Lambda subscores bool), BH21-M3 (AFABridge subscores validation), BH21-L1 (DriftMonitor window_days), BH21-L2 (Calibrator unbounded proposals), BH21-L3 (shadow eval key collision), BH21-L4 (drift status label cardinality), BH21-L5 (MCP 405 Allow header); 0 deferred bugs; 2273 tests, 94.64% coverage
1.60.02026-02-15Bug Hunt #20 (Hybrid) + QG65 Ultrathink: 9 bugs (7M, 2L) + 5 QG65 fixes; 22 regression tests total; durable non-dict crash, override mutable sharing, base64 strict (override+crypto+lambda), consensus voter aliasing + timeout overflow, pcw_decide trace crash, encryption base64, config window_days, transport bool guards, CLI risk/subscore bool guards; 2236 tests, 94.68% coverage
1.59.02026-02-15Rigor: Resolve All Deferred Bugs — fixed BH16-L5 (WorkflowTransition.verify_hash standalone false negatives, added previous_hash column), closed BH15-L6 (Lambda telemetry by-design); 8 regression tests; 0 deferred bugs remaining; 2214 tests, 94.68% coverage
1.58.02026-02-14Bug Hunt #19 (Hybrid): 5 bugs (2M, 3L), 12 regression tests; proposal.py from_dict mutable aliasing, override key rotation TOCTOU, afa_bridge bool guard + non-boolean execution flags + null authorization crash; 2206 tests, 94.68% coverage
1.57.02026-02-14Bug Hunt #18 (Hybrid): 7 bugs (3M, 4L), 25 regression tests; lambda_handler/cli non-boolean control flags, config flat key NaN/Inf validation, bayesian ddof bool, consensus config bool guards, afa_bridge timeout_hours bool; 2194 tests, 94.61% coverage
1.56.02026-02-14Bug Hunt #17 (Hybrid): 6 bugs (1M, 5L), 13 regression tests; afa_bridge risk_check transport parity, config NaN/Inf validation, ensure_utc timezone conversion, BatchHTTPSink negative max_retries, governance emergency_halt; 2169 tests, 94.60% coverage
1.55.02026-02-14Quality Gate #62 (Ultrathink): 6 findings (1M, 5L), 11 regression tests; afa_bridge isfinite, config kl_drift NaN validation, lambda null subscores; 2156 tests, 94.58% coverage
1.54.02026-02-14Bug Hunt #16: 9 bugs (4M, 5L), 22 regression tests; 1 deferred (BH16-L5); 2145 tests, 94.56% coverage
1.53.02026-02-14Bug Hunt #15 (Hybrid): 8 bugs (2M, 6L), 22 regression tests + Quality Gate #61 (Ultrathink): 7 findings (4M, 3L), 5 fixed + 8 regression tests; CLI observation_values sanitization; 2123 tests, 94.53% coverage
1.52.02026-02-13Bug Hunt #14 (Hybrid): 3 bugs (3M) — ConsensusConfig bool timeout_hours, DualSignatureValidator expiration_hours validation, Lambda quality_subscores isfinite parity; 2101 tests, 94.54% coverage
1.51.02026-02-13Rigor Close Deferrals v3: closed all 5 deferred bugs (BH12-L2 fixed + QG60-6/7/8/9 documented/accepted-risk); 0 deferred remaining; 2091 tests, 94.52% coverage
1.50.02026-02-13Bug Hunt #13: 7 bugs (4M, 3L), 16 regression tests
1.49.02026-02-13Quality-Gate Ultrathink (QG60): 5 fixes — validate_positive Inf FAIL-OPEN, UtilityCalculator gamma/kappa/migration_budget Inf, MCP POST 404 body drain, MCP 413 connection close, ThreePointEstimate Inf; SDK facade Calibrator/Governance exports; 2072 tests, 94.50% coverage
1.48.02026-02-12Bug Hunt #12 (Hybrid): 10 bugs (1H, 7M, 2L) — GateEvaluator NaN governance lockout, complexity analyze NaN, Lambda _float NaN/Inf parity, risk_check NaN, ExecutionPlan NaN timeout, CalibrationProposal data_window, config null params, proposal to_dict mutable leak; 2053 tests, 94.52% coverage
1.47.02026-02-12Quality-Gate Ultrathink (QG59): 12 fixes from 21 findings (8M, 4L) — NaN trigger_factor bypass, trigger_confidence_prob fail-OPEN, YAML null crash, CalibrationProposal NaN/Inf, analyst coerce NaN strings, proposer PERT NaN/Inf, MCP _float_arg NaN/Inf, emitter dropped-event semantics; 2031 tests, 94.52% coverage
1.46.02026-02-12Bug Hunt #11 (Hybrid): 10 bugs (8M, 2L) — CLI null subscores/phase, calibrator capability check, governance halt override cancel, consensus NaN timeout, MCP POST /health body, pipeline PII encryptor bypass, BatchHTTPSink batch_size=0, utility lcb_alpha NaN, stdio strip order; 2009 tests, 94.49% coverage
1.45.02026-02-12Quality-Gate Ultrathink (QG58): Docs sync — test metrics updated to 1997 tests, 94.47% coverage across all documentation files
1.44.02026-02-12Bug Hunt #10 + QG57: validate_positive/validate_threshold_ordering NaN guards, stdio MCP size limit, CLI null-coalesce, Lambda phase type guard + drift baseline guard, governance emergency_halt lock atomicity, MCP drift baseline guard; 1997 tests, 94.47% coverage
1.43.02026-02-12Quality-Gate Ultrathink (QG56): stdio batch array support, WebhookAlertSink TLS enforcement, URL whitespace stripping, mcp_rate_limit negative clamp; 1978 tests, 94.47% coverage
1.42.02026-02-12ROADMAP Items 16 + 20a(c): TLS enforcement on HTTPEventSink/BatchHTTPSink (_validate_sink_url() + allow_insecure escape hatch), MCP _ALLOWED_TELEMETRY_SCHEMES restricted to {"https"}, parameter reference guide, domain integration templates (4 domains), MCP tool description enrichment with instructions field + JSON Schema min/max constraints; closes CoSAI MCP-T7 gap (G2); 1964 tests, 94.47% coverage
1.41.02026-02-12MCP Hardening Phase 1 (ROADMAP Item 20a): Token bucket rate limiter + structured audit logging; closes CoSAI MCP-T10 and MCP-T12 gaps; 1948 tests, 94.59% coverage
1.40.02026-02-11H-1 SSRF hex/decimal IP bypass fix: resolve-then-validate via socket.getaddrinfo(), _is_forbidden_ip() uses not is_global (blocks CGNAT 100.64/10); M-3 Slowloris timeout (30s per-connection); 14 regression tests; 1923 tests, 94.62% coverage
1.39.02026-02-11Completed ROADMAP Item 23: MCP Streamable HTTP transport — stdlib http.server implementation (zero new deps), POST /mcp (JSON-RPC single + batch), origin validation, internal ALB, 50 new tests (1909 total, 94.63%), deferred SSE/sessions/resumability
1.38.02026-02-11Added ROADMAP Item 23: MCP Streamable HTTP transport — MCP spec (2025-03-26) already standardizes network transport; updated KNOWN_ISSUES.md with resolution path and spec references; added to v1.2.0 release roadmap and Next Steps checklist
1.37.02026-02-11Post-deployment security hardening: 17 ultrathink findings fixed (3H, 11M, 3L) — CORS restriction, script injection fixes (env vars + heredoc delimiters), error message sanitization, IAM least-privilege (Scan/PutObjectAcl removed), ADOT pinned v0.41.2, CDK approval broadening, billing alarm all stages, deploy test gate; 1859 tests, 94.54% coverage
1.36.02026-02-10AWS Deployment Complete: All 4 CDK stacks deployed to us-west-2 (AegisSharedStack-dev, AegisLambdaStack-dev, AegisMcpStack-dev, AegisMonitoringStack-dev); Items 17-20 updated to DEPLOYED; 7 deployment bugs fixed (cdk.json context, pyproject py-modules, Dockerfile pins, ECS ALB removal, Lambda cyclic refs, CloudWatch math, CDK protocol); added AWS Deployment section to Active Work; added ADR-007 to Quick Links; 1859 tests, 94.55% coverage
1.35.02026-02-10AWS Deployment Infrastructure (ROADMAP Items 16-20): Hybrid Lambda+ECS CDK stacks, src/lambda_handler.py, Dockerfile.lambda, aegis-deploy.yml, aegis-gate action, ADR-007; ultrathink hardening (U-1 null subscores, U-2 injection fix); 42 new tests; 1859 tests, 94.55% coverage
1.34.02026-02-10ROADMAP Item 15: Drift detection → policy connection — DriftMonitor wired into production pcw_decide() path (CRITICAL→HALT, WARNING→constraint, NORMAL→no change); _evaluate_drift_policy() + _apply_drift_overrides() helpers; DRIFT_POLICY_ENFORCED telemetry; CLI --drift-baseline; MCP drift_baseline_data; SDK re-exports; 39 new tests; 1817 tests, 94.56% coverage
1.33.02026-02-09Research 003: MCP Security Ecosystem Review — CoSAI MCP-T1..T12 taxonomy (12 threat categories, ~40 threats, 11 control families) + Red Hat enterprise MCP architecture (4-stage progressive promotion) mapped to AEGIS controls; identified 6 gaps (MCP audit logging, rate limiting, TLS enforcement, tool schema signing, shadow server detection, SPIFFE identity); added ROADMAP Item 20a (MCP hardening)
1.32.02026-02-09ROADMAP Item 22: Market research & competitive landscape — AI governance market sizing ($300-850M → $1.5-4.8B), 7 direct + 6 adjacent competitors profiled, unique positioning matrix, regulatory timeline (EU AI Act Aug 2026), open core pricing model, go-to-market strategy
1.31.02026-02-09ROADMAP Item 14: HTTP telemetry sink — HTTPEventSink (per-event POST), BatchHTTPSink (batching + retry + background flush), http_sink() factory; AegisConfig.telemetry_url; CLI --telemetry-url; MCP telemetry_url param; SDK re-exports; stdlib-only (urllib.request); 45 new tests; 1778 tests, 94.44% coverage
1.30.02026-02-09ROADMAP Item 13: Shadow mode for KL divergence calibration — shadow_mode keyword param on pcw_decide(), ShadowResult dataclass, DriftMonitor/TelemetryEmitter integration, Prometheus mode label + shadow counter, CLI --shadow flag, MCP shadow_mode param, SDK re-export, alerting/recording rule filters; 44 new tests; 1733 tests, 94.48% coverage
1.29.02026-02-09ROADMAP Items 10-12: Production deployment guide (docs/deployment/production-guide.md), migration guide (docs/deployment/migration-guide.md), performance SLAs with recorded benchmarks (docs/deployment/performance-slas.md); Dockerfile + docker-compose.yaml + Prometheus scrape config; no code changes
1.28.02026-02-09ROADMAP Item 7: CALIBRATOR actor type — statistical threshold tuning with drift recalibration, Bayesian prior update, gate parameter proposals, approval-gated application, recognized parameter whitelist, telemetry emission; ultrathink-hardened (U-1..U-5); ActorRole.CALIBRATOR + ActorCapabilities; 69 new tests (12 regression); 1689 tests, 94.60% coverage
1.27.02026-02-09ROADMAP Item 6: GOVERNANCE actor type — override orchestration (initiate/sign/approve/reject/expire), compliance checking (complexity gate non-overridable), emergency halt; ultrathink-hardened (halt guards, fail-closed compliance, thread safety); ActorRole.GOVERNANCE + ActorCapabilities; 41 new tests; 1620 tests, 94.36% coverage
1.26.02026-02-08Docs-Sync Audit: Fixed GAP-L1 status (66%→code-complete), repo-structure tree (6 files added), telemetry schema v2.0→v2.1.0, stale counts, TD-2/TD-3 resolved, gap-analysis changelog gaps, ActorBase→Actor, duplicate sections merged
1.25.02026-02-08ROADMAP Items 8 & 9: DRY extraction — ensure_utc() shared across 3 workflows, 4 validation helpers shared across 5 engine modules; 27 new tests; deferred: persistence/telemetry timezone consolidation; 1579 tests, 94.31% coverage
1.24.02026-02-08ROADMAP Item 5: 77 boundary tests for all 6 gates + drift detector via @pytest.mark.parametrize; verifies comparison operators at exact thresholds; 1552 tests, 94.27% coverage
1.23.02026-02-08ROADMAP Items 2-4: docs version sync committed, safety 2.3→3.x upgrade, broad exception catch documentation (15 sites, 8 files); 1475 tests, 94.21% coverage
1.22.02026-02-08Dependency fix: scipy/prometheus_client moved to dedicated engine/telemetry optional groups with graceful degradation; 4 regression tests; 1475 tests, 94.21% coverage
1.21.02026-02-08Added "Next Steps (Ordered Checklist)" section — 19 prioritized items from Discovery Analysis 2026-02-08; single place to find what's next
1.20.02026-02-08Quality-Gate Ultrathink #10: 5 MEDIUM bugs fixed (Bayesian overflow, pipeline validator exception, executor rollback retry); 7 regression tests; 1475 tests, 94.21% coverage
1.19.02026-02-08Rigor Close Deferrals v2: 4 bugs fixed + 3 closed as intentional; 6 regression tests; 1466 tests, 94.22% coverage
1.18.02026-02-08Bug-Hunt #9 + Ultrathink: 8 bugs fixed (4M, 4L) + 2 ultrathink findings (T-1 critical, T-4 low); 19 regression tests; 1466 tests, 94.22% coverage
1.17.02026-02-07Docs-sync: Issue #18 closed, changelog alignment, stale reference cleanup
1.16.02026-02-07Bug-Hunt #8: 6 bugs fixed (config YAML drop, drift histogram, Bayesian NaN, consensus premature rejection, pipeline buffer, repository async); 8 regression tests; 1398 tests, 94.13% coverage
1.14.02026-02-06Gap closure sprint: issues #24, #2, #7, #5, #8, #9; new modules (rbac.py, alert.py, metrics_server.py); RBAC wired into override + pcw_decide; monitoring/ configs; 115 new tests; 1390 tests, 93.98% coverage
1.13.02026-02-06v1.0 SDK Release: PR #23 merged — AegisConfig, CLI, facade, MCP server, 79 new tests, 4 examples, README rewrite; 1172 tests, 94.61% coverage
1.12.02026-02-05Deferred Bug Fixes v3.34.0: All 17 deferred bugs fixed (1 MEDIUM, 16 LOW); 1037 tests, 94.11% coverage
1.11.02026-02-05Bug Hunt v3.32.0: Codex+Claude hybrid bug-hunt, 5 bug fixes (bayesian zero-override, prometheus idempotent, override rejection metadata, proposal exporter DI); 956 tests, 93.63% coverage
1.10.02026-02-05Claude-GPT Dialogue v3.31.0: phi_S/phi_D Single Source of Truth, KNOWN_ISSUES.md cleanup (L45→Intentional, L7→HSM mitigation), docs-consistency.yml CI workflow; 946 tests, 93.48% coverage
1.9.02026-02-04Deferred Bug Fix v3.30.0: L44 type coercion validation in analyst.py, L49 audit_mode for timing side-channel mitigation in hybrid_provider.py; 946 tests, 93.48% coverage
1.8.02026-02-04Hybrid Bug Hunt v3.29.0: H-WF-001 consensus fix, H-WF-003 pipeline thread safety, M24/M25 crypto validation, M-ENG-005 exception handling; 931 tests, 93.48% coverage
1.7.02026-02-04Quality Gate v3.28.0: 16 deferred bugs fixed, 4 regression tests added; pip CVE-2026-1703 patched; 916 tests, 93.39% coverage
1.6.02026-02-04Rigor Protocol complete (v3.24.0-v3.26.0): 60/62 bugs fixed (97% fix rate); Quality Gate hardening; 910 tests, 93.48% coverage
1.5.02026-02-03All LOW severity bugs fixed (L1-L9): bounded deques, public gate API, scipy z-score, input validation, thread-safe singleton, timezone parsing, docstring updates; 867 tests, 93.81% coverage
1.4.02026-01-31Bug fixes v3.14.0: empty data validation, timezone-aware datetime, specific exception handling, pipeline refactor; 839 tests, 93.74% coverage
1.3.02026-01-31Mathematical coherence review: ddof parameter, public API usage, GateType enum; 821 tests, 93.34% coverage
1.2.02026-01-31Optional deps installed (btclib, liboqs-python); All 807 tests now pass (0 skipped); Coverage 93.76%
1.1.02026-01-31PRs #19-21 merged; v3.11.0 math fixes complete; ADR-006 added; Test counts updated
1.0.12026-01-31Updated PR #20 status (CI failing); Added ADR-005 to Quick Links
1.0.02026-01-30Initial roadmap creation; Added PRs #19-21; Added open issues; Release milestones; GAP status summary

On this page

Next Steps (Ordered Checklist)Immediate (no blockers, can start now)Short-term (v1.1.0)Medium-term (v1.2.0)Long-term (v2.0.0) — AWS Infrastructure DEPLOYEDInfrastructure (ECS MCP)Business & Legal (pre-public-release)Discovery Analysis 2026-03-22Immediate (no blockers, can start now)Short-term (this week)Medium-term (this sprint)Long-term (backlog)Stripe Integration Review (2026-04-01)CompletedShort-termLong-termCompliance Remediation (Audit 2026-03-22)Immediate (no blockers)Short-term (Q2 2026)Medium-term (Q3 2026)Legal remediation (pre-customer deployment)Long-term (pre-customer deployment)NIST AI RMF Audit Code Remediation (2026-04-03)CRITICAL (before customer deployment)HIGH (Q2 2026)MEDIUM (Q2-Q3 2026)LOW (Q3 2026)GCP Infrastructure Security (2026-04-03)CRITICAL (immediate)HIGH (Q2 2026)MEDIUM (Q2-Q3 2026)Cross-Property Copy Remediation (Audit 2026-04-04)Immediate (no blockers — copy changes only)Short-term (this week)Medium-term (this sprint)FedRAMP High Readiness (Long-term)Medium-term (Q2-Q3 2026 — no external dependencies)Long-term (Q3-Q4 2026 — depends on C18, F1)Feature Accuracy & Tier Enforcement (Audit 2026-04-04)CRITICAL: Tier Feature Enforcement (Pre-Revenue Blocker)Remaining Copy Remediation (from Audit 2026-04-04)Feature Claim Verification SummaryDeveloper Experience & CI Hygiene (Discovery 2026-04-04)DX Phase 1: CI & Build Reliability (no blockers, immediate)DX Phase 2: Documentation & Onboarding (no blockers, short-term)DX Phase 3: Code Quality & Consistency (short-term)DX Phase 4: Runtime Safety (medium-term)Cross-Section Execution Sequence (2026-04-04)Recently CompletedGap Closure Sprint (PR #25) — Phase 1 CompleteAWS Deployment (ROADMAP Items 16-20) — DEPLOYEDCompleted (v3.26.0 — Rigor Protocol)Previously Completed (v3.11.0-v3.13.0)Recently Merged PRsOpen IssuesRecently Closed IssuesRelease Roadmapv1.0.1 (Patch - Pre-Release Bug Fixes) ✅ RELEASEDv1.0.0 (Major - SDK Release) ✅ RELEASEDv1.1.0 (Minor - Enhancements)v1.2.0 (Minor - Features)v2.0.0 (Major - Backlog)GAP Status SummaryCompleted GAPsIn-Progress GAPsPlanned GAPsRemaining Work (Post-Audit 2026-03-20)Production Readiness MetricsQuick LinksIntegration GuidesImplementationResearchAnalysisChangelog