Skip to content

Changelog

v0.16.0 - Provenance, CEL Guardrails & Circuit Breakers

Section titled “v0.16.0 - Provenance, CEL Guardrails & Circuit Breakers”

Unreleased — merged to main

Audit-grade decision provenance mapped to SR 11-7 and NIST AI RMF, CEL expression guardrails, circuit breakers, and the full-stack Docker demo.

F055: Decision Provenance & Control Evidence

Section titled “F055: Decision Provenance & Control Evidence”

Five new JSON-RPC methods that turn CSTP’s decision history into an artifact an auditor can accept. JSON-RPC only — no MCP tools.

  • Two-class evidence modelobserved (third-party events the agent does not control) and attested (first-party CSTP records). Coverage is reported separately per class; there is no blended percentage anywhere in the API, the JSON bundle, or the PDF
  • cstp.ingestEvidence - ingest observed events (GitHub PR opens, reviews, approvals, merges) into a SHA-256 hash chain
  • cstp.linkEvidence - correlate an existing CSTP decision to observed events, stored as attested evidence
  • cstp.mapControls - run the YAML rules engine over stored evidence; returns per-class coverage, insufficient_evidence entries, and attested_only_controls
  • cstp.exportEvidenceBundle - emit the full bundle as JSON, or PDF with the optional pdf extra
  • cstp.verifyEvidenceChain - verify chain integrity; accepts expected_head_hash and falls back to the last bundle’s head hash so tail truncation is detectable
  • Control frameworks - hand-written YAML rules for SR 11-7 (Federal Reserve MRM), NIST AI RMF 1.0, and CSTP-attested. Mappings are deliberately not ML-inferred
  • Honest gaps - where evidence does not support a control, the mapper emits INSUFFICIENT_EVIDENCE with a plain-English reason instead of stretching the mapping
  • Separate store - SQLite WAL database at PROVENANCE_DB (default ~/.cstp/provenance.db), independent of the decision store

13 verified findings from the PR #193 review were resolved before merge:

  • Injective hash preimage - preimage is now canonical JSON of all six fields (chain format version 2). The previous newline-delimited preimage allowed collisions on embedded newlines. Breaking: version 1 chains fail verify_chain and must be re-ingested
  • Hash chain race - BEGIN IMMEDIATE plus explicit seq serializes concurrent writers
  • db_path RPC escape removed - the service always uses the server-configured PROVENANCE_DB; callers can no longer redirect reads or writes to an arbitrary file
  • Evidence class isolation - mapping rules only match events of their own class
  • Bot approvals fail closed - MV-3 / MEASURE-2.5 require actor_is_human, CM-1 / MANAGE-1.1 require a human approval count above zero
  • Plus seq validation on linkEvidence, checkpoint state-machine fixes, non-dict payload rejection, atomic batch ingest, and collision-resistant bundle filenames
  • CEL conditions - guardrail condition accepts a CEL expression string or {"cel": "..."} alongside the legacy key/value form
  • Reaches action.context.* - fixes the gap where MCP clients could not pass context, so category-specific rules like require-architecture-review no longer always block through MCP
  • Legacy auto-conversion - existing key/value conditions are converted to CEL at evaluation time; no guardrail files need changing and no migration is required
  • Fails open - an expression that fails to compile or raises at runtime is skipped and logged, never treated as a block
  • Compiled once - programs are cached per expression string
  • New dependency - cel-python>=0.4,<1.0, now a core dependency
  • cstp.listBreakers, cstp.getCircuitState, cstp.resetCircuit and the get_circuit_state / list_breakers MCP tools
  • Category-specific code-review and architecture-review guardrails replace the earlier broad production guard
  • Guardrail context is now threaded through both the JSON-RPC and MCP check paths
  • demo/ brings up CSTP server, ChromaDB, dashboard, and a reference FORGE-protocol MCP agent
  • demo/seed_data.py generates sample decisions
  • New Nous agent landing page, linked from the top nav
  • Mermaid removed from the VitePress build; diagrams are inline SVG
  • F041 - build_wisdom() accepts an optional now parameter, removing wall-clock coupling that made the wisdom recency filter fail as fixture dates aged past the compaction threshold
  • Encoding correctness on non-UTF-8 hosts - every text-mode file operation across a2a/, src/, scripts/, and the test suite now passes encoding="utf-8" explicitly. Previously these relied on the platform default, which is cp1252 on Windows: F055 control rules loaded with 10 of 20 entries as mojibake, putting garbled regulatory text into auditor-facing bundles, and decision YAML could round-trip through a mis-decode into storage. Linux CI is UTF-8 by default, so none of it was visible there. Ruff PLW1514 is now enabled to stop the defect class recurring
  • cel-python added to core dependencies
  • New pdf extra (reportlab>=4.0) for F055 PDF bundles, included in [all]

February 21, 2026

SQLite-backed storage with 8-42x performance gains, enriched search results, YAML auto-migration, and dashboard server-side integration.

  • SQLite backend with WAL mode - Full ACID compliance, concurrent reads, ~900 lines of battle-tested storage code
  • Normalized schema - Separate tables for tags, reasons, bridge definitions, and deliberation traces
  • FTS5 full-text search - Keyword search on decision text, context, and tags
  • Factory pattern - CSTP_STORAGE=sqlite env var switches backend; CSTP_DB_PATH for file location
  • Abstract DecisionStore ABC - Clean interface for future storage backends
  • YAML → SQLite migration on startup - Automatic, safe, uses upserts (re-runnable)
  • Standalone migration script - scripts/migrate_yaml_to_sqlite.py with 17 tests
  • Zero data loss - All fields preserved including bridge definitions, tags, reasons, and project context
  • queryDecisions: 0.37s (was 3.16s with YAML — 8.5x faster)
  • getCalibration: 0.06s (was 2.54s — 42x faster)
  • getDecision: 5.8ms (was 27ms — 4.7x faster)
  • listDecisions: 6.7ms, getStats: 8ms
  • Bridge in search results - DecisionSummary now includes structure/function bridge definitions (~200 bytes each)
  • Enriched pre_action - Relevant decisions include outcome, reasons, and lessons learned
  • Deliberation on-demand - Full traces (2-5KB) only via getDecision, not in list results
  • Server-side filtering - Dashboard wired to listDecisions/getStats APIs instead of client-side YAML scanning
  • Decision detail page - Full text, recorded_by attribution, strength bars, graph neighbor links
  • Calibration service refactored - Uses DecisionStore.list() instead of YAML file globbing
  • Fix dict-type project field handling in SQLite storage
  • Fix reindex_decisions() to delegate to reindex_decision() for full metadata rebuild
  • Fix deliberation tracking in pre_action for MCP visibility
  • Fix safe_auto_link() in pre_action auto_record path

v0.14.0 - Multi-Agent Isolation & Live Deliberation

Section titled “v0.14.0 - Multi-Agent Isolation & Live Deliberation”

February 16, 2026

Multi-agent deliberation isolation, live deliberation viewer dashboard, memory compaction, decision graph with auto-linking, and quality enforcement.

  • Composite tracker keys - agent:{id}:decision:{id} scoping prevents thought cross-contamination when multiple agents share an MCP connection
  • agent_id on all MCP tools - pre_action, get_session_context, ready, record_thought, log_decision all accept agent_id for attribution and isolation
  • decision_id scoping - record_thought and log_decision accept decision_id to scope deliberation consumption to specific decisions
  • cstp.debugTracker - Live inspection endpoint for in-memory deliberation state
  • New /deliberation dashboard page with real-time tracker state
  • Session cards organized by composite key with agent/decision badges
  • HTMX auto-refresh (5s) with Alpine.js expand state preservation
  • Color-coded by age (fresh/stale), type badges for input sources
  • Composite key parsing links decision IDs to detail pages
  • Semantic decay: full → summary → digest → wisdom compaction levels
  • cstp.getCompacted and cstp.getWisdom endpoints
  • Wisdom and compacted results integrated into get_session_context
  • Automatic compaction on startup and on review
  • cstp.ready endpoint surfaces prioritized cognitive actions
  • Action types: overdue reviews, calibration drift, stale decisions
  • Filter by priority, type, category
  • cstp.linkDecisions - typed edges (relates_to, supersedes, depends_on)
  • cstp.getGraph - subgraph queries with depth and edge type filters
  • cstp.getNeighbors - lightweight neighbor queries
  • Auto-linking on recordDecision from related decisions
  • JSONL persistence, NetworkX backend, thread-safe
  • VectorStore and EmbeddingProvider abstractions
  • ChromaDB and MemoryStore backends
  • Factory pattern with VECTOR_BACKEND env var
  • low-quality-recording guardrail upgraded to block - Decisions missing tags, pattern, or reasons are now rejected
  • log_decision demoted to last resort - pre_action(auto_record: true) is the primary recording path
  • 14+ MCP tools (3 PRIMARY: pre_action, get_session_context, ready)
  • Updated all docs with correct MCP flow: pre_actionrecord_thoughtupdate_decision
  • Multi-agent isolation guide
  • Agent system prompt templates updated
  • All 33+ feature specs on website

All features are additive. agent_id defaults to "mcp-client" when not provided. Existing clients work unchanged.


v0.11.0 - Pre-Action API, Dashboard & Website

Section titled “v0.11.0 - Pre-Action API, Dashboard & Website”

February 15, 2026

A complete agent workflow in two calls: pre_action (query + guardrails + record in one shot) and get_session_context (full cognitive context for session start). Plus a production dashboard, pluggable vector storage, and a documentation website.

  • F046: Pre-Action Hook - All-in-one cstp.preAction combines query, guardrails, calibration, pattern extraction, and optional recording into a single call
  • F047: Session Context - cstp.getSessionContext delivers agent profile, relevant decisions, guardrails, calibration by category, and confirmed patterns in JSON or markdown
  • F048 P1: Pluggable Storage - VectorStore and EmbeddingProvider abstractions extracted from hardcoded ChromaDB/Gemini; in-memory backend for testing
  • F027: Decision Quality - Tags, patterns, quality scoring, smart bridge extractors for better retrieval
  • F028: Reasoning Capture - cstp.recordThought for chain-of-thought steps, quality enforcement guardrail
  • Full web dashboard (Flask + HTMX + Alpine.js + Chart.js)
  • Decision explorer with search, filters, and detail views
  • Calibration charts, analytics overview, date filter presets
  • Dark theme design system
  • 11 MCP tools (up from 7) via Streamable HTTP at /mcp
  • pre_action and get_session_context marked as PRIMARY entry points
  • Claude Code / Claude Desktop integration via npx mcp-remote@latest
  • Fixed $ref/$defs schema issues for LLM compatibility
  • Documentation site at cognition-engines.ai
  • VitePress with dark theme, local search, Mermaid diagram support
  • Guide, Reference, and Feature Specs sections
  • F029-F032: Research-driven specs (task routing, circuit breakers, trust scoring, error tracking)
  • F033-F034: Censor layer, decomposed confidence
  • F035-F039: Multi-agent federation (state transfer, reasoning continuity, collective innovation, protocol stack)
  • F040-F045: Beads-inspired specs (task graphs, memory compaction, dependencies, distributed merge, work discovery, graph storage)
  • F048: Multi-vector-DB support

All features are additive. Existing JSON-RPC and MCP clients work unchanged.


v0.10.0 - Decision Intelligence with Auto-Capture

Section titled “v0.10.0 - Decision Intelligence with Auto-Capture”

February 8, 2026

Every decision now automatically captures its full cognitive context - deliberation traces, bridge-definitions, and related decision links - with zero client changes.

  • F022: MCP Server - 7 native MCP tools at /mcp
  • F023: Deliberation Traces - auto-capture query/check as structured inputs
  • F024: Bridge-Definitions - structure/function dual descriptions with directional search
  • F025: Related Decisions - auto-populated graph edges from query results
  • cstp.getDecision - full decision details by ID
  • cstp.getReasonStats - reason-type calibration analytics
  • Agent Quick Start Guide for onboarding other agents

All features are additive and backward-compatible.

February 5, 2026

  • CSTP server with JSON-RPC 2.0 API
  • Hybrid retrieval (BM25 + semantic)
  • Drift alerts and confidence variance monitoring
  • Docker deployment with dashboard