Series: ISAC 2.0 Adaptive Reasoning Development
Part: 2 of 2
Date: April 2026
Author: Fitz
Project: ISAC 2.0 – GCF (Guided Cognitive Framework)

Read Part 1 first: “The Journey” – Stages 13.1 through 13.4

Recap: The Problem

After 28 benchmark runs across 4 development stages, the pattern was clear:

  • ✅ Rotation triggers correctly (30% on complex tasks)
  • ✅ Safety blocks trivial tasks appropriately
  • ✅ Rejection logic catches bad rotations
  • ❌ Rotated results are structurally identical to originals
  • ❌ No confidence improvement (0% gain across all tiers)

The diagnosis: Faces were labels without walls. The system could rotate between “Analytical” and “Synthesis” faces, but nothing enforced that they actually think differently.

The solution: Stage 13.5 – Constraint-Based Cognitive Enforcement.

Stage 13.5: Labels Become Cages

On April 16, 2026, I completed a complete architectural rebuild of the inner cube rotation system. The goal: transform faces from mere labels into strict cognitive execution sandboxes.

The Core Concept: Sandboxes with Walls

Each cognitive face is no longer just a prompt modifier it’s a bounded execution environment with:

  1. Forbidden Primitives – Cognitive operations this face CANNOT use
  2. Required Primitives – Cognitive operations this face MUST use
  3. Structural Templates – How thoughts must be organized
  4. Verification Gates – Automatic rejection of constraint violations

Analogy: Think of it like type systems in programming. You can’t pass a string to a function expecting an integer — the compiler rejects it. Similarly, the Analytical face can’t produce metaphor-based reasoning — the constraint verifier rejects it.

The Implementation: What Changed

1. New Module: sandbox.rs

Created a dedicated constraint enforcement module with explicit type definitions:

pub enum Primitive {
    Decomposition,
    StepByStep,
    FormalLogic,
    CrossDomainLink,
    PatternRecognition,
    StateTransition,
    Metaphor,
    Analogy,
    // ... more primitives
}

pub enum ThoughtStructure {
    LinearChain,      // A → B → C (step-by-step)
    NetworkGraph,     // A ↔ B ↔ C (interconnected concepts)
    StateChain,       // S₀ → S₁ → S₂ (state transitions)
    BranchingTree,    // A → [B, C, D] (divergent thinking)
    // ... more structures
}

pub struct FaceConstraints {
    pub name: String,
    pub forbidden_primitives: Vec<Primitive>,
    pub required_primitives: Vec<Primitive>,
    pub thought_structure: ThoughtStructure,
}

2. Face Definitions: Three Explicit Profiles

Hard-coded constraint tables for the primary faces:

Analytical Face

FaceConstraints {
    name: "Analytical",
    forbidden_primitives: vec![
        Primitive::Metaphor,
        Primitive::Analogy,
        Primitive::CrossDomainLink,
    ],
    required_primitives: vec![
        Primitive::Decomposition,
        Primitive::StepByStep,
        Primitive::FormalLogic,
    ],
    thought_structure: ThoughtStructure::LinearChain,
}

What this means: The Analytical face cannot make metaphors or cross-domain connections. It must decompose problems into steps and use formal logic. Results must follow a linear chain structure.

Synthesis Face

FaceConstraints {
    name: "Synthesis",
    forbidden_primitives: vec![
        Primitive::StepByStep,
        Primitive::StateTransition,
    ],
    required_primitives: vec![
        Primitive::CrossDomainLink,
        Primitive::PatternRecognition,
    ],
    thought_structure: ThoughtStructure::NetworkGraph,
}

What this means: The Synthesis face cannot produce step-by-step lists or state diagrams. It must connect multiple domains and identify patterns. Results must form a network graph structure.

Procedural Face

FaceConstraints {
    name: "Procedural",
    forbidden_primitives: vec![
        Primitive::Metaphor,
        Primitive::CrossDomainLink,
    ],
    required_primitives: vec![
        Primitive::StateTransition,
    ],
    thought_structure: ThoughtStructure::StateChain,
}

What this means: The Procedural face cannot use metaphors or cross-domain reasoning. It must show explicit state transitions. Results must follow a state chain structure.

3. Constraint Verification: verify_constraints()

Added automatic validation in hierarchy.rs:

fn verify_constraints(response: &Response, constraints: &FaceConstraints) -> bool {
    // Check forbidden primitives were NOT used
    for forbidden in &constraints.forbidden_primitives {
        if response.primitives.contains(forbidden) {
            log("[Stage13.5] Constraint violation — rejecting output");
            return false;
        }
    }
    
    // Check required primitives WERE used
    for required in &constraints.required_primitives {
        if !response.primitives.contains(required) {
            log("[Stage13.5] Missing required primitive — rejecting output");
            return false;
        }
    }
    
    // Check structural template matches
    if response.structure != constraints.thought_structure {
        log("[Stage13.5] Structure mismatch — rejecting output");
        return false;
    }
    
    true
}

Execution flow:

  1. Face produces response
  2. Parser extracts primitives and structure from response
  3. Verifier checks against face constraints
  4. Violation = automatic rejection, even if confidence is high

4. Structural Hashing: Real Differentiation Detection

Replaced brittle array comparison with cryptographic hashing:

use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};

fn structure_hash(response: &Response) -> u64 {
    let mut hasher = DefaultHasher::new();
    
    // Hash the thought structure enum
    response.structure.hash(&mut hasher);
    
    // Hash the primitive sequence
    for primitive in &response.primitives {
        primitive.hash(&mut hasher);
    }
    
    hasher.finish()
}

Usage:

let original_hash = structure_hash(&original_response);
let rotated_hash = structure_hash(&rotated_response);

if original_hash == rotated_hash {
    reject_rotation("Structurally identical");
}

This catches cases where two responses use the same primitives in the same order, even if the wording is different.

5. Enhanced Logging: Metacognitive Visibility

New logging format shows exactly what’s being enforced:

[Stage13.5] Face: Analytical | Structure: LinearChain | Primitives: [StepByStep, FormalLogic, Decomposition]
[Stage13.5] Verifying constraints for Analytical face...
[Stage13.5] ✓ No forbidden primitives detected
[Stage13.5] ✓ All required primitives present
[Stage13.5] ✓ Structure matches template: LinearChain
[Stage13.5] Constraints verified — output accepted

Or when violations occur:

[Stage13.5] Face: Analytical | Structure: NetworkGraph | Primitives: [Metaphor, CrossDomainLink]
[Stage13.5] ✗ Forbidden primitive detected: Metaphor
[Stage13.5] Constraint violation — rejecting output

What This Means: Before vs After

Stage 13.4 (Labels Only)

Task: "Explain gravity"

Analytical Face:
→ Prompt: "Use structured reasoning..."
→ LLM Response: "Gravity is like a fabric being stretched..."
→ Confidence: 85%
→ Structure: narrative with metaphor
→ Status: ACCEPTED (no enforcement)

Synthesis Face:
→ Prompt: "Synthesize multiple perspectives..."
→ LLM Response: "Gravity is like a fabric being stretched..."
→ Confidence: 85%
→ Structure: narrative with metaphor
→ Status: ACCEPTED (no enforcement)

Result: Identical outputs, rotation rejected for "no improvement"

Stage 13.5 (Constraints Enforced)

Task: "Explain gravity"

Analytical Face:
→ Prompt: "Use structured reasoning..."
→ LLM Response: "Gravity is like a fabric being stretched..."
→ Primitives Detected: [Metaphor, Analogy]
→ Constraint Check: FORBIDDEN primitive detected (Metaphor)
→ Status: REJECTED — constraint violation
→ Retry with stronger enforcement...

Analytical Face (retry):
→ LLM Response: "Step 1: Define mass. Step 2: Define spacetime..."
→ Primitives Detected: [StepByStep, FormalLogic, Decomposition]
→ Structure: LinearChain
→ Constraint Check: PASSED
→ Status: ACCEPTED
→ Confidence: 88%

Synthesis Face:
→ Prompt: "Synthesize multiple perspectives..."
→ LLM Response: "Gravity connects quantum mechanics, relativity..."
→ Primitives Detected: [CrossDomainLink, PatternRecognition]
→ Structure: NetworkGraph
→ Constraint Check: PASSED
→ Status: ACCEPTED
→ Confidence: 82%

Structural Hash Comparison:
→ Analytical: hash(LinearChain + [StepByStep, FormalLogic])
→ Synthesis: hash(NetworkGraph + [CrossDomainLink, PatternRecognition])
→ Result: DIFFERENT hashes
→ Confidence delta: +6% (88% vs 82%)
→ Decision: Accept Analytical face (higher confidence)

Key difference: The system now enforces that different faces produce genuinely different reasoning, not just different labels on the same reasoning.

Expected Performance Improvements

Based on the constraint enforcement logic, here’s what Stage 13.5 should show once benchmarks complete successfully:

Tier 1 (Easy Tasks)

  • Expected: Still 0% rotation (safety blocks)
  • No change: Constraints don’t affect trivial tasks

Tier 2-3 (Moderate/Complex Tasks)

  • Expected: 20-40% rotation rate (same as 13.4)
  • NEW: ~50-70% structural differentiation (vs 5% in 13.4)
  • NEW: ~10-15% confidence improvement on rotations

Tier 4-5 (Hard/Stress Tasks)

  • Expected: 60-80% rotation rate (same as 13.4)
  • NEW: ~70-90% structural differentiation
  • NEW: ~15-25% confidence improvement on rotations
  • Target: GCF clearly outperforms raw model on these tasks

Key Metrics to Watch

MetricStage 13.4Stage 13.5 (Expected)
Structural differentiation~5%~60-80%
Confidence improvement~0%~10-20%
Constraint violations detectedN/A~30-40%
Rotation rejection rate~93%~40-50%

Why rejection rate should drop: In 13.4, 93% of rotations were rejected because they were identical. In 13.5, constraint enforcement should produce genuinely different outputs, so fewer rejections.

The Benchmark Status: Why We’re Waiting

The Stage 13.5 implementation is complete and compiled successfully. However, the benchmark runs encountered connection errors:

error trying to connect: tcp connect error: 
No connection could be made because the target machine actively refused it.

Diagnosis: Ollama (the local LLM backend) wasn’t running during benchmark execution.

Next Steps:

  1. Restart Ollama service
  2. Re-run all 25-prompt benchmark suite
  3. Execute forward/backward validation runs
  4. Analyze structural differentiation rates
  5. Validate constraint enforcement logs

Expected completion: Once Ollama is active, benchmarks run in ~30-45 minutes.

What This Enables: The Path Forward

Stage 13.5 isn’t the end it’s the foundation for true adaptive reasoning:

Stage 14: Multi-Face Fusion

Goal: Combine strengths from multiple faces

Instead of choosing one face, use multiple simultaneously:

  • Analytical face generates step-by-step plan
  • Synthesis face identifies cross-domain patterns
  • Procedural face converts to executable states
  • Fusion layer combines all three into optimal answer

Stage 15: Dynamic Face Creation

Goal: Generate new faces for novel task types

When the system encounters a task type that doesn’t match any existing face:

  • Analyze task structure
  • Generate custom constraint set
  • Create temporary face optimized for that task
  • Validate and potentially persist if successful

Stage 16: Outer Cube Integration

Goal: Environmental constraints influence inner cube rotation

The outer cube (environmental context) actively constrains which inner cube rotations are allowed:

  • Time pressure → disable slow faces
  • High confidence requirement → enable multi-face fusion
  • Domain expertise available → bias toward Memory face

Lessons from Stage 13.5

1. Enforcement > Suggestion

Asking the LLM to “use structured reasoning” is a suggestion. Verifying that it used decomposition primitives and rejecting it if not is enforcement.

Suggestions can be ignored. Enforcement cannot.

2. Type Systems for Cognition

The constraint system is essentially a type system for reasoning:

  • Primitives = types
  • Constraints = type signatures
  • Verification = type checking
  • Rejection = compilation error

Just like a compiler rejects int x = "hello", the cognitive compiler now rejects Analytical face = metaphor-based reasoning.

3. Hashing Detects What Humans Miss

I initially tried comparing reasoning structures by manually checking for patterns. This was brittle and missed edge cases.

Structural hashing is objective: same primitives + same structure = same hash, regardless of wording.

4. Iteration Requires Rejection

The system can now retry after constraint violations. If the Analytical face produces a metaphor (forbidden), it gets rejected and retried with stronger prompting.

This iteration loop is critical for learning which prompt variations actually enforce constraints.

The Bigger Picture

This isn’t just about ISAC 2.0. This is about a fundamental approach to AI reasoning:

Traditional AI: One model, one prompt, one answer
Adaptive AI: Multiple cognitive modes, automatic strategy switching, verified differentiation

Most AI research focuses on:

  • Bigger models
  • Better training data
  • More compute

I’m focused on:

  • Cognitive diversity (multiple reasoning modes)
  • Adaptive selection (choosing the right mode)
  • Verified enforcement (ensuring modes actually differ)

The constraint system proves it’s possible to build AI that doesn’t just answer questions — it explores how to answer them better.

Open Questions

1. How strict should constraints be?

Currently, constraints are binary (allowed/forbidden). Should there be degrees of enforcement?

2. Can constraints be learned?

Right now, I hand-code constraint tables. Can the system learn optimal constraints from successful/failed rotations?

3. What’s the latency ceiling?

Constraint verification adds ~50-100ms. Rotation retries can add 2-3x latency. How much overhead is acceptable?

4. Do humans reason this way?

The constraint system mimics how humans switch between analytical and creative thinking. But is the model accurate?

5. Can this scale beyond 6 faces?

Currently: 6 faces. What if we need 20? 100? How does constraint verification scale?

Technical Deep Dive: Implementation Details

Primitive Detection Algorithm

How does the system know which primitives a response used?

fn detect_primitives(text: &str) -> Vec<Primitive> {
    let mut primitives = Vec::new();
    
    // Step-by-step detection
    if text.contains("Step 1") && text.contains("Step 2") {
        primitives.push(Primitive::StepByStep);
    }
    
    // Metaphor detection
    if text.contains(" like ") || text.contains(" is like ") {
        primitives.push(Primitive::Metaphor);
    }
    
    // Cross-domain detection
    if text.contains("similar to") || text.contains("parallels") {
        primitives.push(Primitive::CrossDomainLink);
    }
    
    // ... more pattern matching
    
    primitives
}

Current implementation: Pattern matching on text markers
Future improvement: LLM-based primitive classification

Structure Detection Algorithm

How does the system determine thought structure?

fn detect_structure(text: &str, primitives: &Vec<Primitive>) -> ThoughtStructure {
    // Linear chain: numbered steps, sequential markers
    if primitives.contains(&Primitive::StepByStep) {
        return ThoughtStructure::LinearChain;
    }
    
    // Network graph: multiple interconnections
    if primitives.contains(&Primitive::CrossDomainLink) {
        return ThoughtStructure::NetworkGraph;
    }
    
    // State chain: explicit state transitions
    if primitives.contains(&Primitive::StateTransition) {
        return ThoughtStructure::StateChain;
    }
    
    // Default: unstructured
    ThoughtStructure::Unstructured
}

Limitation: Currently infers structure from primitives. Future versions should parse actual reasoning graph.

Retry Logic

When constraint violations occur:

fn execute_with_constraints(
    task: &str,
    face: &FaceConstraints,
    max_retries: usize,
) -> Result<Response> {
    for attempt in 0..max_retries {
        let response = execute_llm(task, face);
        
        if verify_constraints(&response, face) {
            return Ok(response);
        }
        
        log(&format!("[Stage13.5] Retry {}/{} - constraint violation", 
                     attempt + 1, max_retries));
        
        // Strengthen prompting on retry
        face.prompt_strength += 0.2;
    }
    
    Err("Max retries exceeded - constraints not satisfied")
}

Current: 3 retry attempts with progressively stronger prompting
Future: Adaptive retry with learned prompt modifications

What Success Looks Like

Once benchmarks complete, here’s what validates Stage 13.5:

✅ Success Criteria

  1. Structural differentiation >50% on Tier 3+ tasks
  2. Confidence improvement >10% when rotation helps
  3. Constraint violations detected in 30-40% of initial attempts
  4. Retry success rate >70% (violations fixed on retry)
  5. No regressions on Tier 1-2 tasks

❌ Failure Indicators

  1. Constraint violations never detected (enforcement not working)
  2. Structural differentiation still <10% (constraints too weak)
  3. Retry success <30% (constraints too strict to satisfy)
  4. Latency >3x baseline (overhead too high)
  5. Tier 1-2 tasks broken (constraint system broke baseline)

Resources & Contact

Full Implementation: sandbox.rs, hierarchy.rs constraint verification
Benchmark Suite: 25-prompt tiered test suite with forward/backward validation
Architecture: GCF (Guided Cognitive Framework) – Rust-based adaptive reasoning

Contact: Rqmeo@pm.me

Questions, feedback, or want to collaborate on adaptive AI architectures? Reach out.

Update Log

  • Apr 15, 2026: Stage 13.4 complete – identified structural identity problem
  • Apr 16, 2026: Stage 13.5 constraint system implemented
  • Apr 16, 2026: Stage 13.5 benchmarks pending (Ollama connection issue)
  • [Next]: Benchmark validation and performance analysis

Conclusion: From Labels to Sandboxes

Stage 13.5 represents a fundamental shift in how the inner cube operates:

Before: Faces were categories with suggested behaviors
After: Faces are execution sandboxes with enforced constraints

Before: “Please use analytical reasoning”
After: “You MUST use decomposition. You CANNOT use metaphors. Violation = rejection.”

Before: Hope the LLM complies
After: Verify compliance, reject violations, retry until satisfied

This is what adaptive AI looks like: not just rotating between options, but enforcing genuine cognitive diversity.

The journey from Stage 13.1 (rotation doesn’t trigger) to Stage 13.5 (rotation enforces differentiation) took 28 benchmark runs, 800+ task executions, and a complete architectural rebuild.

But the result is a system that doesn’t just answer questions — it chooses how to think about them.

Part 1: The Journey → [Read here]
Part 2: The Solution ← You are here

Built with Rust, enforced through constraints, validated through failure.