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 model —
observed(third-party events the agent does not control) andattested(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 chaincstp.linkEvidence- correlate an existing CSTP decision to observed events, stored as attested evidencecstp.mapControls- run the YAML rules engine over stored evidence; returns per-class coverage,insufficient_evidenceentries, andattested_only_controlscstp.exportEvidenceBundle- emit the full bundle as JSON, or PDF with the optionalpdfextracstp.verifyEvidenceChain- verify chain integrity; acceptsexpected_head_hashand 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_EVIDENCEwith 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
F055 Security Hardening
Section titled “F055 Security Hardening”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_chainand must be re-ingested - Hash chain race -
BEGIN IMMEDIATEplus explicitseqserializes concurrent writers db_pathRPC escape removed - the service always uses the server-configuredPROVENANCE_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
F054: CEL Expression Guardrails
Section titled “F054: CEL Expression Guardrails”- CEL conditions - guardrail
conditionaccepts 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 likerequire-architecture-reviewno 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
F030: Circuit Breaker Guardrails
Section titled “F030: Circuit Breaker Guardrails”cstp.listBreakers,cstp.getCircuitState,cstp.resetCircuitand theget_circuit_state/list_breakersMCP tools- Category-specific code-review and architecture-review guardrails replace the earlier broad production guard
- Guardrail
contextis now threaded through both the JSON-RPC and MCP check paths
F051: Docker-Compose Full Stack Demo
Section titled “F051: Docker-Compose Full Stack Demo”demo/brings up CSTP server, ChromaDB, dashboard, and a reference FORGE-protocol MCP agentdemo/seed_data.pygenerates sample decisions
Website
Section titled “Website”- New Nous agent landing page, linked from the top nav
- Mermaid removed from the VitePress build; diagrams are inline SVG
Bug Fixes
Section titled “Bug Fixes”- F041 -
build_wisdom()accepts an optionalnowparameter, 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 passesencoding="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. RuffPLW1514is now enabled to stop the defect class recurring
Packaging
Section titled “Packaging”cel-pythonadded to core dependencies- New
pdfextra (reportlab>=4.0) for F055 PDF bundles, included in[all]
v0.15.0 - SQLite Storage & Performance
Section titled “v0.15.0 - SQLite Storage & Performance”February 21, 2026
SQLite-backed storage with 8-42x performance gains, enriched search results, YAML auto-migration, and dashboard server-side integration.
F050: SQLite Storage Layer
Section titled “F050: SQLite Storage Layer”- 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=sqliteenv var switches backend;CSTP_DB_PATHfor file location - Abstract
DecisionStoreABC - Clean interface for future storage backends
Auto-Migration
Section titled “Auto-Migration”- YAML → SQLite migration on startup - Automatic, safe, uses upserts (re-runnable)
- Standalone migration script -
scripts/migrate_yaml_to_sqlite.pywith 17 tests - Zero data loss - All fields preserved including bridge definitions, tags, reasons, and project context
Performance
Section titled “Performance”- 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
Enriched Search
Section titled “Enriched Search”- Bridge in search results -
DecisionSummarynow 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
Dashboard Integration
Section titled “Dashboard Integration”- Server-side filtering - Dashboard wired to
listDecisions/getStatsAPIs 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
Bug Fixes
Section titled “Bug Fixes”- Fix
dict-typeprojectfield handling in SQLite storage - Fix
reindex_decisions()to delegate toreindex_decision()for full metadata rebuild - Fix deliberation tracking in
pre_actionfor MCP visibility - Fix
safe_auto_link()inpre_actionauto_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.
Multi-Agent Deliberation Isolation
Section titled “Multi-Agent Deliberation Isolation”- Composite tracker keys -
agent:{id}:decision:{id}scoping prevents thought cross-contamination when multiple agents share an MCP connection agent_idon all MCP tools -pre_action,get_session_context,ready,record_thought,log_decisionall acceptagent_idfor attribution and isolationdecision_idscoping -record_thoughtandlog_decisionacceptdecision_idto scope deliberation consumption to specific decisionscstp.debugTracker- Live inspection endpoint for in-memory deliberation state
F049: Live Deliberation Viewer
Section titled “F049: Live Deliberation Viewer”- New
/deliberationdashboard 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
F041: Memory Compaction
Section titled “F041: Memory Compaction”- Semantic decay: full → summary → digest → wisdom compaction levels
cstp.getCompactedandcstp.getWisdomendpoints- Wisdom and compacted results integrated into
get_session_context - Automatic compaction on startup and on review
F044: Agent Work Discovery
Section titled “F044: Agent Work Discovery”cstp.readyendpoint surfaces prioritized cognitive actions- Action types: overdue reviews, calibration drift, stale decisions
- Filter by priority, type, category
F045: Decision Graph Storage Layer
Section titled “F045: Decision Graph Storage Layer”cstp.linkDecisions- typed edges (relates_to,supersedes,depends_on)cstp.getGraph- subgraph queries with depth and edge type filterscstp.getNeighbors- lightweight neighbor queries- Auto-linking on
recordDecisionfrom related decisions - JSONL persistence, NetworkX backend, thread-safe
F048: Multi-Vector-DB Support
Section titled “F048: Multi-Vector-DB Support”VectorStoreandEmbeddingProviderabstractions- ChromaDB and MemoryStore backends
- Factory pattern with
VECTOR_BACKENDenv var
Quality & Process
Section titled “Quality & Process”low-quality-recordingguardrail upgraded to block - Decisions missing tags, pattern, or reasons are now rejectedlog_decisiondemoted to last resort -pre_action(auto_record: true)is the primary recording path- 14+ MCP tools (3 PRIMARY:
pre_action,get_session_context,ready)
Documentation
Section titled “Documentation”- Updated all docs with correct MCP flow:
pre_action→record_thought→update_decision - Multi-agent isolation guide
- Agent system prompt templates updated
- All 33+ feature specs on website
No Breaking Changes
Section titled “No Breaking Changes”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.
Features
Section titled “Features”- F046: Pre-Action Hook - All-in-one
cstp.preActioncombines query, guardrails, calibration, pattern extraction, and optional recording into a single call - F047: Session Context -
cstp.getSessionContextdelivers agent profile, relevant decisions, guardrails, calibration by category, and confirmed patterns in JSON or markdown - F048 P1: Pluggable Storage -
VectorStoreandEmbeddingProviderabstractions 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.recordThoughtfor chain-of-thought steps, quality enforcement guardrail
Dashboard
Section titled “Dashboard”- 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_actionandget_session_contextmarked as PRIMARY entry points- Claude Code / Claude Desktop integration via
npx mcp-remote@latest - Fixed
$ref/$defsschema issues for LLM compatibility
Website
Section titled “Website”- Documentation site at cognition-engines.ai
- VitePress with dark theme, local search, Mermaid diagram support
- Guide, Reference, and Feature Specs sections
Specs Added
Section titled “Specs Added”- 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
No Breaking Changes
Section titled “No Breaking Changes”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.
Features
Section titled “Features”- 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 IDcstp.getReasonStats- reason-type calibration analytics- Agent Quick Start Guide for onboarding other agents
No Breaking Changes
Section titled “No Breaking Changes”All features are additive and backward-compatible.
v0.8.0 - Decision Intelligence Platform
Section titled “v0.8.0 - Decision Intelligence Platform”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