SCHEMA-FACTORY
"Deterministic checks first, LLM second."
Build, lint, ingest, compose, and generate context for Drescher-style schemas.
Why This Exists
Gary Drescher's schema mechanism is strongest when it has:
- •Prescriptive schema-schema — what valid schemas must look like
- •Deterministic layer — evaluate and refine before asking the LLM
- •Context generator — emit only needed patterns and evidence
The goal is hybrid orchestration: Python does deterministic work, Cursor/LLM handles synthesis, MOOLLM stays explicit about what came from where.
Key Files
| File | Purpose |
|---|---|
SCHEMA-SCHEMA.yml | Drives linting and ingestion |
schema_tool.py | CLI for all operations |
examples/schema-example.yml | Compact schema set |
examples/henry-minsky-blocksworld.yml | Classic microworld data |
Quick Use
# Validate schemas python3 schema_tool.py lint examples/schema-example.yml # Compose action chain toward goal python3 schema_tool.py compose --schemas examples/schema-example.yml --goal postgres-running # Generate LLM context bundle python3 schema_tool.py context --schemas examples/schema-example.yml --goal pyvision-running
Methods
LINT
Validate schema against schema-schema.
Input: One or more schema files (YAML)
Output: Pass/fail + diagnostics
Emits: schema_lint
Checks: Required fields, type validation, reliability range, non-empty context/result
python3 schema_tool.py lint my-schemas.yml
INGEST
Update schemas from experience logs or observed transitions.
Input: Experience logs
Output: Updated schema set + evidence counts
Emits: schema_ingest
Deterministic: No LLM calls; only schema updates
python3 schema_tool.py ingest experience-log.yml --into my-schemas.yml
COMPOSE
Build action chain toward goal.
Input: Schema set + goal
Output: Composed action chain + rationale
Emits: schema_compose
python3 schema_tool.py compose --schemas my-schemas.yml --goal target-state
CONTEXT
Generate compact context bundle for LLM synthesis.
Input: Schema set + goal + optional focus items
Output: Compact context bundle
Emits: context_generate
Includes: id, action, context, result, reliability, extended_context, extended_results
python3 schema_tool.py context --schemas my-schemas.yml --goal target-state --focus item1,item2
Schema Structure
schema:
id: "unique-identifier"
action: "what-the-schema-does"
context:
- precondition-1
- precondition-2
result:
- postcondition-1
reliability: 0.85 # 0.0-1.0
# Optional
extended_context: [...]
extended_results: [...]
evidence_count: 47
marginal_attribution: {...}
Principles
- •Deterministic checks first, LLM second — Python validates before synthesis
- •Emit events for traceability — Know what happened where
- •Prefer small, explicit context bundles — Don't dump everything
- •Schema-schema can evolve — Via the same learning loop it governs
The Schema-Schema
The SCHEMA-SCHEMA.yml defines what valid schemas must look like:
- •Required fields and their types
- •Reliability range constraints
- •Context/result non-empty rules
- •Extension field patterns
This is prescriptive — schemas that don't match get lint errors.
Integration with LLM
The factory provides deterministic foundation for LLM reasoning:
# 1. Python validates and composes schema_factory compose --goal postgres-running # 2. Output becomes LLM context "Here are the relevant schemas and a proposed action chain..." # 3. LLM synthesizes and refines "Based on these schemas, I recommend..." # 4. Results feed back into ingest schema_factory ingest --experience new-observations.yml
Dovetails With
- •../schema-mechanism/ — Theoretical foundation (Drescher)
- •../experiment/ — Schemas drive experiment design
- •../debugging/ — Schema failures are bugs to investigate
- •../planning/ — Schema composition is planning
"Validate structure. Compose plans. Generate context. Let the LLM shine where it should."