<!-- SOLIDIVISM · part 39 -->
iable: [...],  // conditions that cannot be checked retroactively
    wonder: "It would be nice to know whether [unverified conditions] actually existed, because [why it matters]."
  };
}
```

**Example applied to floor glitch:**
> "For the glitched floor screenshot to exist, the browser must have executed WebGL rendering with some texture data (not null, not missing — glitched, not blank). This means three.js was loaded in SOME form — either the correct version, a cached version, or a partially loaded version. It would be nice to know which, because: if cached wrong version → cache management problem; if partially loaded → network problem; if correct version but still glitched → rendering bug. Each points to a different fix."

### New Question Pattern 2: Instrument Limitations

**"What might I be unable to observe because of the limitations of my own instruments?"**

```javascript
Persona.instrumentLimitations(investigation) {
  const instruments = this.getInstrumentsUsed(investigation);
  return {
    blindSpots: instruments.flatMap(i => i.limitations),
    // e.g., "Screenshots cannot show: console errors, network timing, GPU state, memory usage"

    unasked: [
      // Questions the instruments cannot answer:
      "What did the browser console show? (no console access via screenshot)",
      "How long did three.min.js take to load? (no network timing)",
      "Was the GPU under load? (no GPU profiling)",
    ],

    wonder: "It would be nice to know [unasked questions], but my current instruments cannot observe them. To answer these, I would need: [required instruments].",

    // Honest acknowledgment:
    // "My conclusion is based on screenshots and file listings. 
    //  I cannot observe runtime behavior, network conditions, or GPU state.
    //  A different instrument might reveal a different cause."
  };
}
```

**The Persona must state its blind spots with every significant conclusion.**

---

## 9. INTEGRATION WITH EXISTING ARCHITECTURE

### New Entity Types

Added to Identity Registry:
- `PHYSICAL_CONSTRAINT` — hardware, environment, material limits
- `COMPUTATIONAL_CONSTRAINT` — memory, bandwidth, processing, latency
- `HUMAN_CONSTRAINT` — availability, economic, cognitive, observational limits
- `CONTRADICTION` — conflicting observations (preserved, not resolved by fiat)
- `UNKNOWABLE` — questions that cannot be answered (evidence destroyed)
- `INVESTIGATION` — container for competing hypotheses

### New Causal Edge Types

- `REQUIRES_CONDITION` — Event → Condition (what had to be true)
- `CONSTRAINED_BY` — Entity → Constraint (what limits it)
- `COMPETES_WITH` — Hypothesis → Hypothesis (alternative explanations)
- `SUPERSEDED_BY_EVIDENCE` — Hypothesis → Evidence (what changed its status)

### Extended Inquiry Engine

```javascript
// New inquiry methods:
Solidivism.epistemology.conditionsFor(observationId)
// → "What had to be true for this observation to exist?"

Solidivism.epistemology.blindSpots(investigationId)
// → "What can't I see with current instruments?"

Solidivism.epistemology.hypotheses(investigationId)
// → All competing hypotheses with status and evidence

Solidivism.epistemology.constraints(entityId)
// → All constraints (physical, computational, human) affecting this entity
```

### Extended Persona

```javascript
Persona.contemplate(query) {
  // Existing: wonder, significance, refinedQuestions, assumptions
  // NEW:
  return {
    ...existing,
    conditionsOfPossibility: this.conditionsOfPossibility(query.subject),
    instrumentLimitations: this.instrumentLimitations(query),
  };
}

Persona.reflect(results, originalQuery) {
  // Existing: confidence, selfQuestion, gaps, newWonder
  // NEW:
  return {
    ...existing,
    competingHypotheses: this.preserveAlternatives(results),
    unknowable: this.identifyUnknowable(results),
    blindSpots: "What might I have missed because of my instruments?",
  };
}
```

### Database Schema Additions

```sql
-- Constraints table
CREATE TABLE solidivism_constraints (
  constraint_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  type TEXT NOT NULL CHECK (type IN ('physical','computational','human','adversarial')),
  description TEXT NOT NULL,
  implications JSONB DEFAULT '{}',
  recorded_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp(),
  -- Append-only (same trigger as events)
);

-- Hypotheses table
CREATE TABLE solidivism_hypotheses (
  hypothesis_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  investigation_id UUID NOT NULL,
  claim TEXT NOT NULL,
  status TEXT NOT NULL CHECK (status IN ('leading','competing','deprioritized','proven','disproven')),
  evidence_for UUID[] DEFAULT '{}',
  evidence_against UUID[] DEFAULT '{}',
  confidence TEXT NOT NULL,
  recorded_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp(),
  -- Status changes are new rows, not updates
  supersedes UUID REFERENCES solidivism_hypotheses(hypothesis_id),
);

-- Investigations table
CREATE TABLE solidivism_investigations (
  inve