This file defines the initial execution path for Noematics. If you are unsure what to work on next, start here and follow the steps in order.
This is not a roadmap.
This is a commit-order plan.
For broader context and future work, see dev_tasks.md.
Do not skip steps here to work on later tasks.
Before writing code:
- Do not add learning, optimization, or autonomy.
- Do not introduce LLM dependencies.
- Do not invent new terminology.
- Prefer explicit constraints over clever abstractions.
- If something feels philosophical, translate it into an invariant or interface.
If unsure, stop and write a doc, not code.
Objective: Convert conceptual claims into enforceable constraints.
Create docs/invariants.md.
Each invariant must include:
- Name
- Informal description
- Formal statement (math or logic)
- What constitutes a violation
- When it must be checked (creation, interpretation, runtime)
Target: 8–10 invariants max.
Do not proceed until each invariant could plausibly be tested.
Create docs/interpretation.md.
Define interpretation as a function with:
- Explicit inputs
- Explicit outputs
- Allowed side effects (if any)
- Composition rules
- Conflict handling
Answer explicitly:
- Is interpretation pure?
- Are deltas allowed?
- Can interpretations commute?
- How are conflicts surfaced?
Include reference pseudocode.
Avoid implementation detail.
You should be able to answer:
“What would it mean for an implementation to be incorrect?”
If not, stop here and tighten the docs.
Objective: Define the smallest runnable Noematics system.
Create src/noematics/core/interfaces.py.
Required protocols (no more, no less):
NoemaProtocolFieldProtocolMessageProtocolRoutingProtocolAgentProtocolRuntimeProtocol
Rules:
- Interfaces only — no logic
- No inheritance trees
- No helper utilities
If an interface feels “optional”, remove it.
Create src/noematics/core/mic.py.
Constraints:
- ≤ 200 lines total
- Deterministic execution
- Static routing only
- No semantic matching
- No agents with internal state beyond perspective
Must support:
- Round-based execution
- Message passing
- Interpretation hook (even if trivial)
This file is the reference reality check for the entire framework.
Create tests/mic/test_minimal_core.py.
Tests must verify:
- Round progression
- Message delivery
- Interpretation invocation
- Invariant non-violation (even if mocked)
If a test requires mocking philosophy, the spec is wrong.
You can run:
pytest tests/micAnd observe:
- deterministic behavior
- inspectable state
- no magic
Only after MIC is stable:
- Add semantic routing
- Add query/key matching
- Add topology updates
- Add optional LLM-backed interpretation
If MIC breaks, revert.
During first steps, do NOT:
- optimize
- generalize
- parallelize
- abstract for future use
- chase benchmarks
Correctness > clarity > power.
Ask, in order:
- Is this required by an invariant?
- Is this required by the MIC?
- Can this be deferred?
If the answer is “no” three times, don’t build it.