F024: Bridge-Definitions for Decisions
Status: Proposed Origin: Minsky, Society of Mind, Ch 12.13 (Bridge-Definitions) Author: Emerson Date: 2026-02-08
Core Insight
Section titled “Core Insight”“Our best ideas are often those that bridge between two different worlds!”
- Minsky, 12.13
A decision has two faces:
- Structure - what pattern was used, what it looks like (files, tools, code shapes, configurations)
- Function - what problem it solves, what purpose it serves (goals, constraints, tradeoffs)
Today CSTP stores a flat decision text and context. These mix structure and function together, making it hard to search from either direction. Bridge-definitions separate them so you can query:
- “I see this pattern (structure) - what is it for?” (structure -> function)
- “I have this problem (function) - what patterns solve it?” (function -> structure)
Design
Section titled “Design”Phase 1: Schema + Storage
Section titled “Phase 1: Schema + Storage”Add two optional fields to RecordDecisionRequest:
@dataclassclass BridgeDefinition: """Minsky Ch 12 bridge-definition: connects structure to function.""" structure: str # What it looks like / recognizable pattern function: str # What problem it solves / purpose tolerance: list[str] # Features that DON'T matter (Ch 12.3) enforcement: list[str] # Features that MUST be present (Ch 12.3) prevention: list[str] # Features that MUST NOT be present (Ch 12.3)Usage in record call:
{ "decision": "Used fail-open pattern for deliberation tracking", "bridge": { "structure": "try/except around telemetry calls, catch Exception, log debug, return default", "function": "prevent observability failures from breaking core API paths", "tolerance": ["log level", "specific exception types", "return value shape"], "enforcement": ["must catch all exceptions", "must log for debugging", "must return safe default"], "prevention": ["must not swallow errors silently without logging", "must not re-raise"] }}YAML output:
bridge: structure: "try/except around telemetry calls, catch Exception, log debug, return default" function: "prevent observability failures from breaking core API paths" tolerance: - "log level" - "specific exception types" enforcement: - "must catch all exceptions" - "must log for debugging" prevention: - "must not swallow errors silently"Phase 2: Dual Indexing
Section titled “Phase 2: Dual Indexing”Index both structure and function into ChromaDB embeddings so queries from either side find matches.
Update build_embedding_text():
if request.bridge: parts.append(f"Structure: {request.bridge.structure}") parts.append(f"Function: {request.bridge.function}")Add query filter bridgeSide:
"structure"- boost structure field similarity (I recognize this pattern)"function"- boost function field similarity (I need to solve this problem)"both"(default) - search across both equally
Phase 3: Auto-Extraction (Optional)
Section titled “Phase 3: Auto-Extraction (Optional)”For decisions recorded without explicit bridge fields, use the existing decision + context + reasons to auto-extract structure/function:
- Structure hints: file paths, tool names, code patterns, configuration details
- Function hints: “to solve”, “to prevent”, “to enable”, reason text
This could be a background job that enriches older decisions, or a real-time extraction during recordDecision.
Phase 4: Bridge Analytics
Section titled “Phase 4: Bridge Analytics”New endpoint cstp.getBridgeStats:
- Most reusable structures (patterns that solve multiple problems)
- Most common functions (problems solved by multiple patterns)
- Orphan structures (patterns without clear function)
- Orphan functions (problems without known patterns)
- Bridge strength: how often a structure-function pair leads to success
Implementation Plan
Section titled “Implementation Plan”Phase 1 (Core - 1 PR)
Section titled “Phase 1 (Core - 1 PR)”-
BridgeDefinitiondataclass indecision_service.py- Fields:
structure,function,tolerance,enforcement,prevention from_dict()/to_dict()methods- All fields optional strings/lists
- Fields:
-
Add
bridgefield toRecordDecisionRequest- Optional
BridgeDefinition | None - Parse from
bridgekey in JSON-RPC params - Support both camelCase and snake_case
- Optional
-
YAML persistence
- Add
bridge:section to decision YAML output - Backward compatible - old decisions without bridge still work
- Add
-
MCP schema
- Add
BridgeSchematomcp_schemas.py - Wire into
log_decisiontool input
- Add
-
Embedding text
- Include structure + function in
build_embedding_text() - Weight structure and function equally
- Include structure + function in
-
CLI
cstp.py record --structure "..." --function "..."- Optional
--tolerance,--enforcement,--prevention
-
Tests
- Bridge parsing, YAML round-trip, embedding inclusion
Phase 2 (Search - 1 PR)
Section titled “Phase 2 (Search - 1 PR)”-
Query filter
bridgeSide- Add to
QueryFiltersInputand_build_query_params() - When
bridgeSide=structure, prepend “Structure: “ to query for embedding similarity - When
bridgeSide=function, prepend “Function: “ to query
- Add to
-
cstp.getDecisionresponse- Include full bridge in decision detail
Phase 3 (Auto-Extract - 1 PR, optional)
Section titled “Phase 3 (Auto-Extract - 1 PR, optional)”- Heuristic extractor
- Regex/keyword-based extraction from decision text + context
- Run on
recordDecisionif no explicit bridge provided - Mark as
bridge_auto: true(like deliberation_auto)
Phase 4 (Analytics - 1 PR, optional)
Section titled “Phase 4 (Analytics - 1 PR, optional)”cstp.getBridgeStatsendpoint- Most reused structures/functions
- Bridge strength (success correlation)
Compatibility
Section titled “Compatibility”- Fully backward compatible - bridge is optional
- Old decisions without bridge still query normally
- New decisions with bridge get richer search results
- No breaking changes to existing API
Relation to Other Features
Section titled “Relation to Other Features”- F023 (Deliberation Traces): Deliberation captures HOW you decided. Bridge captures WHAT you decided in dual form.
- F020 (Reasoning Trace): Reasoning trace is sequential steps. Bridge is a static dual description.
- Ch 18 (Parallel Bundles): Reasons are parallel evidence. Bridge connects that evidence to outcomes.
- Ch 21 (Pronomes): Pronomes separate assignment from action. Bridge separates structure from function.
Open Questions
Section titled “Open Questions”- Should
tolerance/enforcement/preventionbe in Phase 1 or deferred? They add richness but also complexity. - Should auto-extraction (Phase 3) be opt-in or default?
- Should we retroactively enrich existing decisions?