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 misclassification —
scipyandprometheus_clientmoved fromdevto dedicatedengineandtelemetryoptional groups with try/except import guards and clearImportErrormessages 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 sync —
repository-structure.md:28andcomprehensive-todo-discovery.mdsynced to CLAUDE.md v4.2.3, metrics 1475/94.21%. Commit:d84330a - 3. Update dependency versions —
safety>=2.3.0→>=3.0.0;python-bitcoinlibalready 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 15except Exceptionsites 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:
Governanceactor 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:
Calibratoractor class with drift recalibration (delegates toDriftMonitor.calibrate_thresholds()), Bayesian prior update (delegates toBayesianPosterior.update_prior()), gate parameter proposals with recognized parameter whitelist, approval-gated application workflow, telemetry emission; thread-safe withthreading.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 pattern —
ensure_utc()extracted from 3 workflow files tosrc/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 tosrc/engine/validation.py, replacing ~24 inline checks across 5 engine modules. Files:validation.py,bayesian.py,drift.py,gates.py,utility.py,complexity.pyDeferred: consolidating inline timezone checks in persistence/telemetry (different module boundary).
Medium-term (v1.2.0)
- 10. Production deployment guide —
docs/deployment/production-guide.mdwith 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 calibration —
shadow_mode=Trueonpcw_decide()withShadowResultdataclass, drift monitor integration,SHADOW_EVALUATIONtelemetry, Prometheusmodelabel, CLI--shadowflag, MCPshadow_modeparam. 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 sink —
HTTPEventSink(per-event POST),BatchHTTPSink(batching + retry),http_sink()factory; stdlib-only (urllib.request);AegisConfig.telemetry_url; CLI--telemetry-url; MCPtelemetry_urlparam; 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 connection —
DriftMonitorwired into productionpcw_decide()path: CRITICAL → HALT (non-overridable), WARNING → advisory constraint, NORMAL → no change;_evaluate_drift_policy()+_apply_drift_overrides()helpers;DRIFT_POLICY_ENFORCEDtelemetry;create_drift_monitor()factory; CLI--drift-baseline; MCPdrift_baseline_data;DriftAction/DriftResultre-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/maximumJSON Schema constraints,instructionsfield 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 dashboardAEGIS-Governance-dev, SNS topicaegis-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, S3aegis-governance-audit-dev-164171672016, Secrets Manageraegis/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-mcpathttps://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 (withallow_insecureescape hatch for local dev), MCP_ALLOWED_TELEMETRY_SCHEMESrestricted 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,_metainline delivery,capabilities.experimentalkeyset); 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
Business & Legal (pre-public-release)
- 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 atportal.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.example—STRIPE_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.yamlto 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 docs —
docs/api/rest.mdconflates 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 acrosssrc/cli.py,src/lambda_handler.py,src/aegis_governance/mcp_server.py. Extract to sharedsrc/aegis_governance/result_formatter.pyto 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. Clarifyfeat/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.tscovering/afa/dashboard,/afa/keys,/afa/accountpages. Mirrors main portal E2E structure (11 existing specs). Effort: 2-3 hours - D9. Verify
actions/cacheversion — 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-devSNS topic. Completes Issue #5 Phase 2. - D11. Execute Locust load tests against live API Gateway —
tests/load/locustfile.pywith 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.ymlCI 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.0constraint — Upper bound inpyproject.tomlwill 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.pyexcept ImportErrorblock 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()readssession.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 exclusion —
aegis-deploy.ymltest step included E2E tests requiringh2andaegisSDK not installed in deploy runner. Added--ignore=tests/e2e. Commit:8884a58
Short-term
- S4. Webhook secret dual-path inconsistency (MEDIUM) — Removed redundant
STRIPE_WEBHOOK_SECRETenv var pre-check inapi_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.py—StripeMeterV2with 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 withforce_reprovision). Fixed in Stripe review. - S7. Remove unused
stripenpm + Python packages (LOW) — Removedstripefrom bothaegis-portal/package.json(v18.0.0, unused) andpyproject.toml(>=12.0.0, unused). All Stripe calls use raw HTTP. Fixed in Stripe review.
Long-term
- S8. Add
stripe_customer_idto Customer model (LOW) — Currently lives only on Subscription record. Meter reporting does extra DB read viaget_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.yaml —
tau_warn: 0.3,tau_crit: 0.5with calibration basis documented indocs/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 mapping —
MEASURE onlyExpanded 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.mdprocedures, 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_matrixin 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
Legal remediation (pre-customer deployment)
- 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.mdoperational 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
AuditChainStorewith per-customer partitioning.SELECT FOR UPDATEserializes concurrent appends across Cloud Run instances (0-4). Chain entries recordinstance_id(fromK_REVISIONenv). 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 viaIntegrityErrorcatch + 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 protection —
DualSignatureValidator.create_message_hash()now binds torequested_attimestamp (prevents cross-request replay).SignatureRecordgainsnoncefield (128-bit,secrets.token_hex).OverrideWorkflowtracks_used_noncesset. Clock-skew freshness check rejects future-dated requests (>5 min tolerance).SignatureProviderprotocol unchanged. Backward-compatible serialization (legacy records defaultnonce=""). 12 regression tests. Files:src/workflows/override.py,tests/test_override_coverage.pyCompleted: 2026-04-04
HIGH (Q2 2026)
- N3. Fix RBAC fail-open in override handler —
override_handler.pyL143 changed fromis not None and nottois None or not(fail-closed). Whenrbac_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.pyCompleted: 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 viaGateEvaluator. Including risk in utility viakappa*delta_Rwould double-count it AND penalize risk reduction. MCP DOES acceptrisk_baseline/risk_proposedand they flow correctly to the risk gate throughbuild_pcw_context(). Comment expanded inmcp_server.py. Closed: 2026-04-04
MEDIUM (Q2-Q3 2026)
- N5. Fix TelemetryEmitter thread safety — Added
threading.LocktoTelemetryEmitter:emit()reads/writes shared state under lock, sinks dispatched outside lock (may block on I/O),add_sink/remove_sinksynchronized, 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.pyCompleted: 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.pyEffort: 1 day
LOW (Q3 2026)
- N7. Document PERT variance in interface contract —
src/engine/utility.pyL73-92 uses simplified PERT variance (±22-40% error vs true Beta-PERT). Docstring warning exists butschema/interface-contract.yamldoes not flag the approximation. Fix: Addpert_variance_noteto interface contract. Consider true Beta-PERT whenscipyavailable. Files:schema/interface-contract.yaml,src/engine/utility.pyEffort: 0.5 day - N8. Add per-gate drift thresholds —
src/engine/drift.pyuses globaltau_warning/tau_criticalfor all gates. Gates with different variance profiles (novelty vs quality) would benefit from per-gate thresholds. Fix: Add per-gate override toKLDriftConfig. Files:src/engine/drift.py,src/config.pyEffort: 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-varsto GCP Secret Manager--set-secretson Cloud Run. Setup script:scripts/gcp-secrets-setup.sh. IAM granted to runtime SA + service agent. Legacydeploy-cloud-run.ymldeleted. Files:.github/workflows/aegis-deploy.yml,scripts/gcp-secrets-setup.shCompleted: 2026-04-03 - G2. Restrict WIF scope to specific repos — WIF attribute condition narrowed from
assertion.repository_owner == 'undercurrentai'(any org repo) toassertion.repository in ['undercurrentai/aegis-governance', 'undercurrentai/afa']. SA IAM binding swapped from org-wideprincipalSetto per-repo bindings (defense-in-depth). Files: GCP IAM policy (livegcloudcommands) 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.mdfollowing the AWS template. Files:docs/compliance/VENDOR-RISK-GCP.mdEffort: 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.mdEffort: 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.mdEffort: 2 hours -
G6. Migrate DynamoDB to GCP-native store — All data migrated from
aegis-governance-state-dev(492 items) to Neon PostgreSQL. Dataclasses extracted tocustomer_models.py. All consumers switched tocustomer_pg.CustomerManager. AWS credentials removed from Cloud Run. MCP serverDATABASE_URLgap 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.comvanity 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 isapi.{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) guessedapi.aegis.undercurrentholdings.comafter the portal dashboard advertised it via a broken hardcoded fallback — DNS didn't resolve, customer hitgetaddrinfo ENOTFOUND. Layer 2 hotfix (portal PR #7, commit830d992) 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):
- Confirm DNS control —
undercurrentholdings.comzone 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, needgcloud dnsaccess in the right project. - Verify domain ownership in GCP —
gcloud domains verify undercurrentholdings.com(requires DNS TXT or Search Console). Skip if already verified at org level. - 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. - Add DNS records in Cloudflare (or wherever the zone lives). Propagation <5 min to 1 hour depending on TTL.
- Verify TLS —
curl -v https://api.aegis.undercurrentholdings.com/healthshould return 200 with a Google-managed cert. - 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. - Coordinated cutover PR (single reviewed change per repo, coordinated across both):
aegis-governance/aegis-sdk/src/aegis/_http.py:46— change_PRODUCTION_BASE_URLtohttps://api.aegis.undercurrentholdings.comaegis-governance/docs/api/openapi.yaml:22— update server URL; also update the outdated "AWS API Gateway" label while we're thereaegis-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:407aegis-governance/.env(local dev) —AEGIS_E2E_API_BASEaegis-governance/.github/workflows/aegis-deploy.yml— health check URLaegis-governance/.github/workflows/e2e-customer.yml— target URLaegis-governance/.github/actions/aegis-gate/action.yml— gate endpointaegis-governance/CLAUDE.md§10 "Web Properties" — addapi.aegis.undercurrentholdings.comrowaegis-governance/CLAUDE.md§10 "Live Endpoints" — update the canonical URLportal/app/(portal)/dashboard/getting-started-card.tsx— swap the Layer-2 Cloud Run fallback to the vanity URLportal/.env.example— update bothAEGIS_API_BASE_URLlines (server andNEXT_PUBLIC_*client)- Vercel env vars (both server-side
AEGIS_API_BASE_URLand client-sideNEXT_PUBLIC_AEGIS_API_BASE_URL) — update to the vanity URL - Publish a new SDK version (
aegis-governanceon PyPI) with the new default, note in changelog as non-breaking improvement - Add a ROADMAP completion entry under "Recently Completed"
- 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.
- 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 (merged830d992); portal PR #8 (merged9808f6e); portal PR #9 (merged1200b4d). 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/mcpinstead ofaegis-mcp/mcp, fixed in portal PR #91200b4d). When G12 ships, decide whether to also provision either (a)mcp.aegis.undercurrentholdings.comas 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/mcpfor 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 bothNEXT_PUBLIC_AEGIS_API_BASE_URLandNEXT_PUBLIC_AEGIS_MCP_BASE_URLin the portal. - Confirm DNS control —
-
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 productionCLERK_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 TemplatesAPI (/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 addvalue 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 -rEnstep inundercurrent-core/brand/website/.github/workflows/ci.ymlquality-checks job. Shipped via undercurrent-core PR #12. Catchesyd1xm4ahcg,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.ymlworkflow inundercurrentai/portal. Runs on every PR with no path filter (fast feedback). Shipped via portal PR #12 (413ea79). Closed: 2026-04-10 - G14c. Diff
.env.exampleagainst 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-urlsstep 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. - G14a. Forbid decommissioned URLs in marketing site source — Implemented as
-
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.tsxAFA 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.tsas 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 fromcustomer-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 auditflagged 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) → bumpednext16.2.0→16.2.3andeslint-config-next16.2.0→16.2.3inpackage.json.npm installconfirmedfound 0 vulnerabilities. Build re-verified clean. - 2× MODERATE
hono(IPv6 ipRestriction, toSSG path traversal, serveStatic slash bypass) → resolved automatically bynpm audit fix(non-force) bumpinghono4.12.10→4.12.12and@hono/node-server1.19.12→1.19.13within the existing>=4.12.7override range. Lockfile-only change. - Status: All 3 vulns closed.
npm auditpost-fix returnsfound 0 vulnerabilities. Bumped via portal PR (filed during quality-gate Phase 7 ship). Closed: 2026-04-10
- HIGH
-
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 showedFailed 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.tswrapped the auth callback inclerkMiddleware()and short-circuited inside the callback whenIS_E2E_BYPASSwas true. - But
clerkMiddleware()is a runtime wrapper — it intercepts every request matched byconfig.matcherand 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'spage.goto(). - History: this flake hit
e2e/specs/navigation.spec.ts:52on 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 lineawait page.goto("/dashboard")atnavigation.spec.ts:58was added by joshuakirby on 2026-03-18 (commitf97971c 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_BYPASSis true, instead of always wrapping withclerkMiddleware(). - The
lib/e2e-bypass.tsproduction kill-switch (RT-H1) guaranteesIS_E2E_BYPASSis always false in production: it requiresNODE_ENV=developmentAND throws on boot if the bypass env vars leak intoNODE_ENV=production. So the no-op branch can never affect production deploys. - Production deploys (Vercel
NODE_ENV=production): unchanged — fullclerkMiddleware()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
undefinedfor 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:52withawait page.waitForLoadState("networkidle")after everypage.gototo 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.ymlpaths:filter does NOT includeproxy.ts. While shipping G17, the manualgh workflow runwas required because the path filter only watchesapp/**,lib/**,components/**,e2e/**,package.json,package-lock.json,playwright.config.ts, and.github/workflows/e2e.yml.proxy.tsis auth/middleware code that absolutely should trigger E2E on every change. Addproxy.tsto the filter (and consider addingnext.config.ts,vercel.jsonfor 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
- The previous
-
G14a. CI grep guard for decommissioned URLs (marketing site) (closed 2026-04-10 via undercurrent-core PR #12
62716f8) — AddedForbid decommissioned URLs in customer-facing sourcestep toundercurrent-core/brand/website/.github/workflows/ci.ymlquality-checksjob. Catches:yd1xm4ahcg.execute-api,31dil7zwza.execute-api, any other*.execute-api.*.amazonaws.com,api.aegis.undercurrentholdings.com,YOUR_API_URL,aegis-api/mcpwrong-service routing,aegis-mcp/{evaluate,v1,risk-check}wrong-service routing. CI verified live (quality-checksSUCCESS 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-urlsstep 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/mcpwrong-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.ymlworkflow inundercurrentai/portal. Scoped toapp/,lib/,components/,.env.example(customer-facing source only, excludesnode_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.tsE2E bypass fix) introduced ane2eNoophandler 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 becausenpm run lintin the portal doesn't enforce--max-warnings 0. Fix: addedargsIgnorePattern: "^_",varsIgnorePattern: "^_",caughtErrorsIgnorePattern: "^_"toportal/eslint.config.mjs. Lint warnings dropped 6 → 2 (the remaining 2 are in auto-generatedpublic/wasm/aegis_loader.js— out of scope, tracked separately in portal WASM work). -
G18.
api.undercurrentholdings.comTLS cert mismatch (deferred — user decision required) — DNS resolves toagora-iv-980022636831.us-central1.run.appbut 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 forapi.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). Addeddocs-site/content/docs/resources/advisor.mdxexplaining 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 intodocs-site/content/docs/resources/meta.jsonsidebar nav. Auto-included inllms.txt(28 pages, was 27) via the existinggenerate-llms-txt.mjswalker.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/index404 inllms.txt(low priority) — Bothaegis.undercurrentholdings.com/llms.txtandafa.undercurrentholdings.com/llms.txtreference/docs/indexas the canonical home, but Next.js Fumadocs only generates/docs(not/docs/index). Any crawler honoring thellms.txtinventory logs a spurious 404. Fix in thescripts/generate-llms-txt.mjsgenerator (filter outindexsegments 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 asAEGIS_DISABLE_PUBLIC_DOCSenv var gating the FastAPI constructor'sdocs_url/redoc_url/openapi_urlargs — when truthy, all three return HTTP 404 at the routing layer. Set unconditionally totruein.github/workflows/aegis-deploy.ymlfor every production rollout; default unset (permissive) in local dev / CI. Authoritative OpenAPI spec for external consumers still lives ataegis.undercurrentholdings.com/docs/api/openapi. Added 19 regression tests intests/infra/test_api_docs_disabled.pycovering 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/), andundercurrentholdings.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 #13633eae4) — Deleted 22 orphaned TSX section files (leftover from commitf4909cf) plus 4 orphaned test files intests/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 (phantomdocs.afa.undercurrentholdings.comhostname) and G25 (stale doc paths) resolved automatically because both lived in the deleted dead code. Verification:npm run typecheckclean,npm run lint --max-warnings 0clean,npm run test:unitpasses 31 suites / 1054 tests (down from 35 / ~1250),npm run buildstatic export succeeds without/developers/aegis/andout/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 intheme.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/vsdocs-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) anddocs-site/content/docs/(Fumadocs MDX, deployed toaegis.undercurrentholdings.com). The 2026-04-10 incident exposed the drift risk:YOUR_API_URLplaceholders had to be fixed in BOTH trees independently. Fix: newdocs-site/scripts/check-docs-sync.mjsdiffs 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 indocs-site/.mdx-sync-skip.json. Wired into.github/workflows/docs-consistency.ymlafter theforbid-decommissioned-urlsstep. 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.mdis stale from the pre-Cloud Run era (still says "Lambda function behind API Gateway");docs-site/content/docs/api/openapi.mdxhas the current Cloud Run narrative. Fix: updatedocs/to matchdocs-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.jsonand runnode docs-site/scripts/check-docs-sync.mjsto 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 invoketo Cloud Run + Unkey auth. CI shadow customer provisioned (cust_734077b5dc53, Professional tier).AEGIS_API_KEYsecret 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 ManagerLastAccessedDateshould stop advancing. - G9c. Delete CloudFormation stacks (target: 2026-04-16) — Delete in dependency order:
AegisMonitoringStack-dev→AegisMcpStack-dev→AegisLambdaStack-dev→AegisSharedStack-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-idandaegis-aws-secret-access-keyfrom GCP Secret Manager. RevokeAWS_AEGIS_GATE_ROLE_ARNOIDC 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. Archiveinfra/to branch. Remove boto3 from deps (keep[kms]optional if needed). Updatesrc/cli.pyto remove DynamoDB fallback. Update.env.example, ADR-009 addendum. Effort: 1 hour
- G9a. Migrate shadow workflows (completed 2026-04-08) — 3 CI shadow workflows (libertas-cicd, AgoraIV, AFA) migrated from
- G10. Fix agora-iv container tag —
agora-ivuses:latesttag (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.tsxEffort: 15 min - CR10. Remove
regulatory_reportingfeature references — Removed from portal (lib/types.ts,lib/tier-data.ts,upgrade-form.tsx). Now consistent with aegis-governancetiers.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.tsxRepo: 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.txtCompleted: 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.mdxEffort: 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
cryptographylibrary 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.pyEffort: 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.mdEffort: 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.mdEffort: 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.mdprovides ~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=truerequires Professional+ (natural CI upgrade trigger). CSV compliance export requires Financial Services (regulatory need). Addedhas_feature()andmin_tier_for_feature()helpers totiers.py. Inline checks inapi_server.py(2 insertion points, ~12 lines). 403 responses include tier name + upgrade URL. Files:src/aegis_governance/tiers.py,src/api_server.pyCompleted: 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.tsxCompleted: 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.tsxEffort: 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.mdxEffort: 1 hour
Feature Claim Verification Summary
All core technical claims verified against implementation:
| Category | Claims | Status |
|---|---|---|
| 6 quantitative gates | src/engine/gates.py (898 lines, 6 gates) | VERIFIED |
| Hash-chained audit trail | audit_chain_store.py + Neon PostgreSQL | VERIFIED |
| Post-quantum crypto (ML-DSA-44, ML-KEM-768) | src/crypto/ (5 providers, optional deps) | VERIFIED |
| Two-key override signatures | src/workflows/override.py + dual-sig | VERIFIED |
| PII encryption (12 fields) | src/telemetry/encryption.py (858 lines) | VERIFIED |
| MCP Server (7 tools) | src/aegis_governance/mcp_server.py | VERIFIED |
| REST API + SDK | api_server.py + aegis-sdk/ | VERIFIED |
| Sandbox (10/day, no signup) | sandbox.py + rate limiter | VERIFIED |
| Zero runtime deps (core) | pyproject.toml deps=[] | VERIFIED |
| Performance (p50 <100ms, 100+ eval/s) | Benchmarks: 15-18μs median, 55-61K ops/s | VERIFIED |
| NIST/EU AI Act/ISO 42001/SOC 2/FedRAMP | Artifacts 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: pingoogle-github-actions/auth@v2andsetup-gcloud@v2with commit hashes (only unpinned actions in the repo). Files:.github/workflows/sdk-publish.yml,.github/workflows/docs-deploy.yml,.github/workflows/aegis-deploy.ymlEffort: 1 hour - DX2. Add numpy<2.0 to pyproject.toml [engine] —
Dockerfile.lambda:20pinsnumpy{'<'}2.0butpyproject.toml[engine]group does not.pip install -e ".[engine]"outside Docker may pull numpy 2.x, breaking scipy on older platforms. File:pyproject.tomlEffort: 5 min - DX3. Pin Lambda runtime version —
Dockerfile.lambda:5usespublic.ecr.aws/lambda/python:3.11without patch pin — non-reproducible builds. Fix: Pin topython:3.11.11(or latest 3.11.x). File:Dockerfile.lambdaEffort: 5 min - DX4. Narrow dependency version ranges —
cryptography>=41.0.8,{'<'}48.0.0too permissive (narrow to<43.0.0);coincurve>=18.0.0,{'<'}22.0.0too wide (narrow to<20.0.0). Extends D15 (btclib<2025.0.0). File:pyproject.tomlEffort: 15 min
DX Phase 2: Documentation & Onboarding (no blockers, short-term)
Reduce contributor friction. All items independent.
- DX5. Consolidate environment variable documentation —
api_server.py:33-44docstring lists 10 env vars but ~42 exist acrosssrc/(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.pyEffort: 2 hours - DX6. Fix CLAUDE.md CI validator count — §10 references "9 compliance validators" but
tools/ci/contains 11 (includesaegis_shadow_backfill.pyandgenerate_precommit_config.py). File:CLAUDE.mdEffort: 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.mdEffort: 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 ruffGrules (flake8-logging) to enforce going forward;G201ignored as separate DX item. Completed: 2026-04-07 - DX9. Add @abstractmethod to SerializableMixin —
src/workflows/serialization.py:45-67has 5 methods raisingNotImplementedErrorbut lacks@abstractmethoddecorators — missing implementations caught at runtime instead of class definition time. File:src/workflows/serialization.pyEffort: 30 min - DX10. Narrow exception breadth in schema_validator —
src/telemetry/schema_validator.py:173catches(ImportError, Exception)— theExceptionmakes theImportErrorredundant and swallows unexpected errors. Fix: Narrow to(ImportError, ModuleNotFoundError). File:src/telemetry/schema_validator.pyEffort: 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.lambdaEffort: 2-4 hours
DX Phase 4: Runtime Safety (medium-term)
- DX12. Add drift observation window cleanup —
src/integration/pcw_decide.py:60-67—_drift_observation_windowsdict keyed byid(drift_monitor)can leak memory in long-running processes if monitors are created/destroyed without explicitreset_drift_window(). Fix: UseWeakValueDictionaryor TTL-based eviction. File:src/integration/pcw_decide.pyEffort: 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
| Task | Type | Status | Details |
|---|---|---|---|
| RBAC Enforcement (#7) | Security | ✅ Phase 1 | RBACEnforcer, YAMLRoleResolver, wired into override + pcw_decide |
| Override Audit (#5) | Observability | ✅ Phase 1 | Override telemetry events, AlertSink protocol, LogAlertSink + WebhookAlertSink |
| Performance Benchmarks (#2) | Testing | ✅ Phase 1 | 13 pytest-benchmark functions across 3 files |
| DR Verification (#8) | Reliability | ✅ Phase 1 | Crash recovery tests, hash chain integrity, health CLI |
| Monitoring Infrastructure (#9) | Observability | ✅ Phase 1 | MetricsServer, CLI metrics/health, Grafana + Prometheus configs |
| validate() Refactor (#24) | Tech Debt | ✅ Complete | CC=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
| Stack | AWS Resource | Status | Details |
|---|---|---|---|
| AegisSharedStack-dev | DynamoDB, KMS, S3, Secrets Manager | ✅ DEPLOYED | aegis-governance-state-dev, aegis-governance-audit-dev-164171672016 |
| AegisLambdaStack-dev | Lambda + API Gateway | ✅ DEPLOYED | aegis-evaluate-proposal-dev, REST API with IAM auth |
| AegisMcpStack-dev | ECS Fargate + HTTP API | ✅ DEPLOYED | aegis-mcp-dev (1/1 running), streamable-http transport, public API Gateway + VPC Link (Unkey auth) |
| AegisMonitoringStack-dev | CloudWatch + SNS | ✅ DEPLOYED | Dashboard, 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)
| Task | Type | Status | Details |
|---|---|---|---|
| Rigor Protocol Phase 1 | Bug Fix | ✅ Complete | v3.24.0: 7 fixes (M7, M8, L13, L16, L19, L31, M11 doc) |
| Rigor Protocol Phase 2 | Bug Fix | ✅ Complete | v3.25.0: 17 fixes, 25 regression tests |
| Rigor Protocol Phase 3 | Bug Fix | ✅ Complete | v3.26.0: 13 fixes (M14-M18, L33-L40) |
| Quality Gate Ultrathink | Hardening | ✅ Complete | M1-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)
| Task | Type | Status | Details |
|---|---|---|---|
| Posterior Predictive (NEW-A) | Math Fix | ✅ Complete | ADR-006, compute_posterior_predictive() |
| Covariance Matrix (U1+) | Math Fix | ✅ Complete | cov_pv, cov_pr, cov_vr parameters |
| PERT Variance (P1*) | Documentation | ✅ Complete | Docstring warning ±22-40% error |
| Fail-Closed Default (I1) | Security Fix | ✅ Complete | lcb=float('-inf') |
| Input Validation | Robustness | ✅ Complete | ValueError for invalid std values |
See: Multi-Model Coherence Review for full analysis.
Recently Merged PRs
| PR | Title | Merged Commit | Status |
|---|---|---|---|
| #25 | feat: gap closure sprint — RBAC, alerts, metrics, DR, benchmarks | edc278c | ✅ Merged |
| #23 | feat: AEGIS v1.0 Governance Decision SDK | cfa3783 | ✅ Merged |
| #22 | chore(claude): audit & regenerate CLAUDE.md v4.0.0 | d114f07 | ✅ Merged |
| #21 | Default legacy algorithm on deserialization | cd4572a | ✅ Merged |
| #20 | Fix telemetry timestamp validation for ISO strings | d9ea971 | ✅ Merged |
| #19 | Add structured decision trace to pcw_decide | 7df8bf7 | ✅ Merged |
Open Issues
| # | Title | Priority | Status | Labels | Milestone |
|---|---|---|---|---|---|
| #1 | GAP-DriftThreshold: Calibrate KL Divergence Threshold | MEDIUM | Open — needs production data | GAP, team:risk | v1.2.0+ |
| #2 | GAP-PerfTest: Load-Test Guardrail Service (<500 ms p95) | MEDIUM | Phase 1 complete — needs Locust testing | GAP, team:devops | v1.2.0 |
| #5 | GAP-OverrideAudit: Enhance Override Logging & Alerts | MEDIUM | Phase 1 complete — needs SNS subscriptions | GAP, team:seceng | v1.2.0 |
| #7 | GAP-RBAC-Enforcement: Apply Role-Based Access Controls | MEDIUM | Phase 1 complete — needs IAM integration | GAP, team:seceng | v1.2.0 |
| #8 | GAP-DR-Drill: Test Disaster Recovery Process | LOW | Phase 1 complete — needs multi-region replication | GAP, team:devops | v2.0.0 |
| #9 | GAP-MonitoringDashboard: Implement Guardrail Monitoring Dashboard | LOW | Phase 1 complete — needs Grafana provisioning | GAP, team:devops | v2.0.0 |
Recently Closed Issues
| # | Title | Closed | Notes |
|---|---|---|---|
| #24 | validate() CC=56 refactor | 2026-02-08 | Refactored to CC~6 via data-driven _validate_section() |
| #6 | GAP-TelemetryPrivacy: PII Redaction | 2026-01-31 | 12-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
| Task | PR/Issue | Status |
|---|---|---|
| Timestamp validation fix | PR #20 | ✅ Merged (d9ea971) |
| Signature algorithm preservation | PR #21 | ✅ Merged (cd4572a) |
| Structured decision trace | PR #19 | ✅ Merged (7df8bf7) |
| Fix broken documentation links | Issues #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
| Task | PR/Issue | Status |
|---|---|---|
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] entries | PR #23 | ✅ Complete |
v1.1.0 (Minor - Enhancements)
Target: Q1 2026 Focus: Testing improvements and new features
| Task | Effort | Status | Notes |
|---|---|---|---|
| Mathematical coherence fixes | 8h | ✅ Complete | v3.11.0 (NEW-A, U1+, P1*, I1) |
| Boundary tests for all gates | 4h | ✅ Complete | 77 parametrized BVA tests (tests/test_gate_boundaries.py) |
| Integration test: Proposal → Execution | 8h | ✅ Complete | tests/integration/test_e2e_proposal_lifecycle.py (5 tests) |
| GOVERNANCE actor type | 6h | ✅ Complete | Override orchestration, compliance, emergency halt (41 tests incl. 6 regression) |
| CALIBRATOR actor type | 6h | ✅ Complete | Statistical threshold tuning, approval-gated workflow (69 tests incl. 12 regression) |
v1.2.0 (Minor - Features)
Target: Q2 2026 Focus: Production readiness
| Task | Effort | Status | Notes |
|---|---|---|---|
| Shadow mode deployment prerequisites | 16h | ✅ Complete | pcw_decide(shadow_mode=True), ShadowResult, 44 tests (ROADMAP Item 13) |
| HTTP telemetry sink | 4h | ✅ Complete | HTTPEventSink + BatchHTTPSink + http_sink() factory, config/CLI/MCP wiring, 41 tests (ROADMAP Item 14) |
| Configuration management system | 12h | ✅ Complete | AegisConfig in v1.0.0 (PR #23) |
| Drift detection → policy connection | 4h | ✅ Complete | DriftMonitor wired into pcw_decide; CRITICAL→HALT, WARNING→constraint (ROADMAP Item 15) |
| GAP-DriftThreshold (#1) | TBD | Unblocked | Shadow mode enables data collection; needs 30+ days of observed KL values |
| GAP-PerfTest (#2) | 8h | Phase 1 Complete | Benchmarks established; Locust load testing now possible against live API Gateway |
| GAP-OverrideAudit (#5) | 8h | Phase 1 Complete | Override telemetry + AlertSink protocol; Slack/email sinks pluggable |
| GAP-RBAC-Enforcement (#7) | 12h | Phase 1 Complete | RBACEnforcer + YAMLRoleResolver; IAM integration pluggable via RoleResolver protocol |
| MCP Streamable HTTP transport | 12h | ✅ 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
| Task | Effort | Status | Notes |
|---|---|---|---|
| GAP-L1 Phase 2-3: Grafana dashboards & alerting | 87h | ✅ DEPLOYED | Phases 1-3 code-complete; CloudWatch dashboard + SNS alarms deployed (AegisMonitoringStack-dev) |
| GAP-L2: OpenTelemetry distributed tracing | 16h | ✅ DEPLOYED (foundation) | ADOT sidecar on ECS Fargate; full OTLP span correlation deferred |
| GAP-DR-Drill (#8) | 16h | Phase 1 Complete | DR verification tests + health CLI; live drill now possible against deployed infrastructure |
| GAP-MonitoringDashboard (#9) | 16h | ✅ DEPLOYED | CloudWatch AEGIS-Governance-dev dashboard + Grafana configs available |
| Phase 2 red-team fuzzing | 20h | Infrastructure Ready | Lambda + API Gateway + ECS deployed as live targets |
| Parameter freezing mechanism | 8h | Backlog | Governance compliance |
GAP Status Summary
Completed GAPs
| GAP | Description | Completion | Implementation |
|---|---|---|---|
| GAP-C1 | Decision Logic Divergence | 100% | src/engine/gates.py, src/engine/dual_validation.py |
| GAP-C2 | Override Mechanism | 100% | src/workflows/override.py, src/integration/override_handler.py |
| GAP-C3 | AFABridge Gate Integration | 100% | src/integration/afa_bridge.py |
| GAP-H1 | Parameter Naming | 100% | schema/interface-contract.yaml |
| GAP-H2 | Telemetry Schema | 100% | src/telemetry/schema.py |
| GAP-H3 | RBAC Reconciliation | 100% | schema/rbac-definitions.yaml |
| GAP-M1 | Feedback Timing | 100% | src/engine/drift.py |
| GAP-M2 | Actor Types | 100% | src/actors/ |
| GAP-M3 | Workflow Persistence | 100% | src/workflows/persistence/ |
| GAP-M4 | Signature Format | 100% | src/crypto/ |
| GAP-Q1 | Post-Quantum Signatures | 100% | src/crypto/mldsa.py, hybrid_provider.py |
| GAP-Q2 | Post-Quantum Encryption | 100% | src/crypto/mlkem.py, hybrid_kem.py |
In-Progress GAPs
| GAP | Description | Completion | Phase |
|---|---|---|---|
| GAP-L1 | Unified Monitoring Dashboard | 100% code + deployed | Phases 1-3 code-complete; CloudWatch + SNS deployed; Grafana available via configs |
Planned GAPs
| GAP | Description | Completion | Target |
|---|---|---|---|
| GAP-L2 | Cross-Component Tracing | Foundation deployed | ADOT sidecar running; full OTLP deferred to v2.0.0 |
Remaining Work (Post-Audit 2026-03-20)
| Item | Priority | Status | Details |
|---|---|---|---|
| Stripe business verification | HIGH | COMPLETED | Business verified in Stripe Dashboard (2026-03-21) |
| OpenAPI/Swagger spec | — | COMPLETED | 727-line OpenAPI 3.1.0 spec at docs/api/openapi.yaml, served at GET /openapi.yaml, llms.txt added |
| CodeQL Action v3 → v4 | — | COMPLETED | Migrated to CodeQL Action v4 SHA (2026-03-21) |
| AFA bridge Bayesian gates | — | COMPLETED | GateEvaluator already wired with full Bayesian posteriors + change_type support (2026-03-22) |
Production Readiness Metrics
| Metric | Current | Target | Status |
|---|---|---|---|
| Test Coverage | ~92.0% | 90% | Exceeds |
| Tests Passing | 4124 (2 skipped — E2E, requires service key; 2 skipped — MCP base, cleanup) | All | Pass |
| Security Vulnerabilities | 0 | 0 | Pass |
| CI/CD | All green | All green | Pass |
| Documentation Accuracy | 99.6% | 95% | Exceeds |
| AWS Deployment | 4/4 stacks deployed | All stacks | Pass |
Quick Links
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
- Implementation Plans - EPCC detailed plans
- Shadow Mode Prerequisites - Deployment guide
Research
- Research Index - All research documents
- KL Threshold Calibration - Drift detection tuning
- Market Research & Competitive Landscape - Market sizing, competitors, GTM
- MCP Security Ecosystem Review - CoSAI taxonomy + Red Hat patterns mapped to AEGIS
Analysis
- Comprehensive TODO Discovery - Historical progress
- Test Count Methodology - Test verification
- Cross-Reference Verification - Documentation accuracy
Changelog
| Version | Date | Changes |
|---|---|---|
| 2.0.0 | 2026-03-25 | Bug 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.0 | 2026-03-22 | Compliance 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.0 | 2026-03-22 | Discovery 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.0 | 2026-02-27 | Advisor 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.0 | 2026-02-26 | AgoraIV 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.0 | 2026-02-26 | WCAG 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.0 | 2026-02-26 | Undercurrent 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.0 | 2026-02-25 | Bug 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.0 | 2026-02-25 | Scoring 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.0 | 2026-02-24 | SaaS 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.0 | 2026-02-24 | Transport 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.0 | 2026-02-23 | Bug 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.0 | 2026-02-23 | Bug 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.0 | 2026-02-23 | Bug 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.0 | 2026-02-22 | Bug 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.0 | 2026-02-22 | Bug 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.0 | 2026-02-21 | Bug 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.0 | 2026-02-21 | QG-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.0 | 2026-02-21 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-20 | Bug 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.0 | 2026-02-19 | Bug 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.0 | 2026-02-18 | Bug 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.0 | 2026-02-18 | Bug 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.0 | 2026-02-17 | Quality-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.1 | 2026-02-17 | Bug 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.0 | 2026-02-17 | Scaffold 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.0 | 2026-02-16 | Bug 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.0 | 2026-02-16 | Bug 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.0 | 2026-02-16 | Bug 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.0 | 2026-02-16 | AMTSS 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.0 | 2026-02-16 | CoSAI 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.0 | 2026-02-16 | Bug 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.0 | 2026-02-15 | Quality-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.0 | 2026-02-15 | Bug 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.0 | 2026-02-15 | Bug 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.0 | 2026-02-15 | Bug 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.0 | 2026-02-15 | Rigor: 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.0 | 2026-02-14 | Bug 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.0 | 2026-02-14 | Bug 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.0 | 2026-02-14 | Bug 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.0 | 2026-02-14 | Quality 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.0 | 2026-02-14 | Bug Hunt #16: 9 bugs (4M, 5L), 22 regression tests; 1 deferred (BH16-L5); 2145 tests, 94.56% coverage |
| 1.53.0 | 2026-02-14 | Bug 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.0 | 2026-02-13 | Bug 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.0 | 2026-02-13 | Rigor 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.0 | 2026-02-13 | Bug Hunt #13: 7 bugs (4M, 3L), 16 regression tests |
| 1.49.0 | 2026-02-13 | Quality-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.0 | 2026-02-12 | Bug 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.0 | 2026-02-12 | Quality-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.0 | 2026-02-12 | Bug 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.0 | 2026-02-12 | Quality-Gate Ultrathink (QG58): Docs sync — test metrics updated to 1997 tests, 94.47% coverage across all documentation files |
| 1.44.0 | 2026-02-12 | Bug 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.0 | 2026-02-12 | Quality-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.0 | 2026-02-12 | ROADMAP 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.0 | 2026-02-12 | MCP 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.0 | 2026-02-11 | H-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.0 | 2026-02-11 | Completed 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.0 | 2026-02-11 | Added 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.0 | 2026-02-11 | Post-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.0 | 2026-02-10 | AWS 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.0 | 2026-02-10 | AWS 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.0 | 2026-02-10 | ROADMAP 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.0 | 2026-02-09 | Research 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-09 | ROADMAP 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.0 | 2026-02-08 | Docs-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.0 | 2026-02-08 | ROADMAP 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.0 | 2026-02-08 | ROADMAP 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.0 | 2026-02-08 | ROADMAP 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.0 | 2026-02-08 | Dependency fix: scipy/prometheus_client moved to dedicated engine/telemetry optional groups with graceful degradation; 4 regression tests; 1475 tests, 94.21% coverage |
| 1.21.0 | 2026-02-08 | Added "Next Steps (Ordered Checklist)" section — 19 prioritized items from Discovery Analysis 2026-02-08; single place to find what's next |
| 1.20.0 | 2026-02-08 | Quality-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.0 | 2026-02-08 | Rigor Close Deferrals v2: 4 bugs fixed + 3 closed as intentional; 6 regression tests; 1466 tests, 94.22% coverage |
| 1.18.0 | 2026-02-08 | Bug-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.0 | 2026-02-07 | Docs-sync: Issue #18 closed, changelog alignment, stale reference cleanup |
| 1.16.0 | 2026-02-07 | Bug-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.0 | 2026-02-06 | Gap 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.0 | 2026-02-06 | v1.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.0 | 2026-02-05 | Deferred Bug Fixes v3.34.0: All 17 deferred bugs fixed (1 MEDIUM, 16 LOW); 1037 tests, 94.11% coverage |
| 1.11.0 | 2026-02-05 | Bug 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.0 | 2026-02-05 | Claude-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.0 | 2026-02-04 | Deferred 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.0 | 2026-02-04 | Hybrid 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.0 | 2026-02-04 | Quality Gate v3.28.0: 16 deferred bugs fixed, 4 regression tests added; pip CVE-2026-1703 patched; 916 tests, 93.39% coverage |
| 1.6.0 | 2026-02-04 | Rigor 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.0 | 2026-02-03 | All 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.0 | 2026-01-31 | Bug fixes v3.14.0: empty data validation, timezone-aware datetime, specific exception handling, pipeline refactor; 839 tests, 93.74% coverage |
| 1.3.0 | 2026-01-31 | Mathematical coherence review: ddof parameter, public API usage, GateType enum; 821 tests, 93.34% coverage |
| 1.2.0 | 2026-01-31 | Optional deps installed (btclib, liboqs-python); All 807 tests now pass (0 skipped); Coverage 93.76% |
| 1.1.0 | 2026-01-31 | PRs #19-21 merged; v3.11.0 math fixes complete; ADR-006 added; Test counts updated |
| 1.0.1 | 2026-01-31 | Updated PR #20 status (CI failing); Added ADR-005 to Quick Links |
| 1.0.0 | 2026-01-30 | Initial roadmap creation; Added PRs #19-21; Added open issues; Release milestones; GAP status summary |