A 22-subsystem symbolic processing architecture implementing recursive-generative organizational bodies through typed symbolic values, async message passing, and four-phase process loops.
The name encodes the system’s theoretical commitment: Organon (instrument of thought), Noumenon (the thing-in-itself, beyond mere appearance), Ontogenetic (the development of being through time), Morphe (form as structuring principle). Together: an instrument for apprehending the deep forms through which symbolic entities develop.
Package:
autogenrec(AutoGenRec — Recursive-Generative Organizational Body)
| Problem Statement | Core Concepts | Architecture | Installation & Usage | Examples | Downstream Implementation | Validation | Roadmap | Cross-References | Contributing | License | Author & Contact |
Most symbolic processing frameworks treat symbols as inert data: strings with lookup tables, tokens with embeddings, or nodes in static graphs. They lack a model for how symbolic meaning develops — how a narrative fragment accrues provenance, how a rule compiles into executable form, how a dream-symbol decays into echo and is eventually archived or transformed into currency.
Existing approaches fall into predictable traps:
Ontogenetic Morphe addresses the gap between these paradigms. It provides a typed symbolic processing architecture where every value carries provenance and lineage, every signal has physical properties (strength, threshold, attenuation), every subsystem follows the same recursive lifecycle, and the whole system communicates through a single async message bus with topic-based routing.
The core insight is that symbolic processing is not a pipeline but a metabolism — a recursive cycle of intake, processing, evaluation, and integration that mirrors biological ontogenesis. Each subsystem is a specialized organ within a larger body, and the body’s coherence emerges from the message bus, not from a central controller.
Every computation in the system follows a single abstract protocol defined by ProcessLoop[InputT, OutputT, ContextT]:
INTAKE → PROCESS → EVALUATE → INTEGRATE
↑ │
└────────────────────┘
(feedback: should_continue)
The evaluate phase returns a boolean should_continue flag, creating a natural recursion: a subsystem keeps cycling until its own evaluation criteria are satisfied. This is not an arbitrary design choice — it models the recursive self-modification that characterizes living systems. A rule compiler does not simply compile; it compiles, evaluates the result, and recompiles if the output fails its own criteria.
The generic type parameters (InputT, OutputT, ContextT) ensure that each subsystem’s loop is fully typed. A SymbolicInterpreter takes SymbolicValue in and produces interpreted structures out; a CodeGenerator takes compiled rules in and produces executable artifacts out. The type system prevents cross-wiring at the interface level.
SymbolicValue is the atomic unit of meaning in the system — a frozen Pydantic model carrying:
NARRATIVE, DREAM, RULE, PATTERN, TOKEN, CURRENCY, MASK, SIGNAL, ECHO, REFERENCE, ARCHIVE, CONFLICT, RESOLUTION, NODE, ROUTE, THRESHOLD, PROCESS, CONSUMPTION, EVOLUTION, LOCATION, AUDIENCE, ACADEMIA, ANTHOLOGYderive() method creates a new value linked to its parent, building a directed acyclic graph of symbolic lineageThis is not a tagged union for dispatch convenience. The type system reflects an ontological claim: these 23 categories constitute the morphological vocabulary of the system. A DREAM value behaves differently from a RULE value not because of arbitrary business logic but because dreams and rules have different ontogenetic trajectories — dreams decay into echoes, rules compile into executable form.
The system distinguishes three message primitives with distinct physical semantics:
strength, threshold, and attenuation. A signal propagates only when strength >= threshold, and its strength decreases by the attenuation factor at each hop. This models attention, salience, and the natural filtering that prevents every subsystem from responding to every event.EchoHandler subsystem manages echo persistence and retrieval.MessageBus provides async pub/sub using anyio (backend-agnostic: works with both asyncio and trio). Topic matching supports two wildcard patterns:
* matches exactly one topic segment (e.g., subsystem.*.started matches subsystem.interpreter.started)# matches zero or more segments (e.g., value.# matches value.created, value.derived.from.dream, etc.)This is deliberately modeled on AMQP topic exchanges, but implemented in-process with zero network overhead. The bus is the system’s nervous system — all inter-subsystem communication flows through it, making the entire communication topology observable, interceptable, and testable.
Every subsystem extends ProcessLoop with a managed lifecycle state machine:
CREATED → STARTING → RUNNING → STOPPING → STOPPED
Transitions are enforced: you cannot call process() on a STOPPED subsystem, and start() is idempotent on a RUNNING one. Each subsystem maintains its own statistics (messages sent/received, processing cycles, errors) and declares its topic subscriptions at construction time.
The Orchestrator creates all 22 subsystems, starts them concurrently via anyio task groups, and provides ordered shutdown. This concurrent lifecycle management is the difference between 22 independent scripts and a coherent organism.
Organized into 8 functional categories:
| Category | Subsystems | Role |
|---|---|---|
| Meta | AnthologyManager | Manages collections of symbolic works across subsystems |
| Core Processing | SymbolicInterpreter, RuleCompiler, CodeGenerator | Intake → interpretation → compilation → executable output |
| Value Economy | ValueExchangeManager, BlockchainSimulator, ProcessMonetizer | Symbolic value creation, exchange, provenance ledger, monetization |
| Identity | MaskGenerator, AudienceClassifier | Identity construction, persona management, audience segmentation |
| Temporal | TimeManager, EvolutionScheduler, LocationResolver | Temporal coordination, evolutionary scheduling, spatial context |
| Data | ReferenceManager, ArchiveManager, EchoHandler | Reference tracking, archival, echo decay management |
| Conflict | ConflictResolver, ArbitrationEngine | Contradiction detection, multi-party arbitration |
| Routing | NodeRouter, SignalThresholdGuard | Message routing, signal strength filtering |
| Transformation | ProcessConverter, ConsumptionManager | Format conversion, consumption tracking |
| Academic | AcademiaManager | Citation management, academic output formatting |
This is not a microservices decomposition — it is an anatomical decomposition. Each subsystem exists because the symbolic processing domain requires a distinct organ for that function, not because of scaling or deployment concerns.
The subsystems communicate exclusively through the message bus. There are no direct imports between subsystem modules. This means:
anyio>=4.0, pydantic>=2.0, structlog>=24.0, python-ulid>=2.0# From source
git clone https://github.com/organvm-i-theoria/organon-noumenon--ontogenetic-morphe.git
cd organon-noumenon--ontogenetic-morphe
pip install -e ".[dev]"
import anyio
from autogenrec.core.symbolic import SymbolicValue, ValueType
from autogenrec.core.messaging import MessageBus, Message
from autogenrec.orchestrator import Orchestrator
async def main():
# Create a symbolic value
dream = SymbolicValue(value_type=ValueType.DREAM, content="recursive mirror")
# Derive a new value with lineage tracking
pattern = dream.derive(value_type=ValueType.PATTERN, content="self-reference detected")
# Start the full 22-subsystem orchestrator
orchestrator = Orchestrator()
async with orchestrator:
# Publish a message to the bus
await orchestrator.bus.publish(
"value.created",
Message(payload=pattern)
)
anyio.run(main)
# Run tests
pytest
# Type checking
mypy src/
# Linting
ruff check src/
# Property-based tests (via Hypothesis)
pytest tests/ -m hypothesis
The repository includes 5 example scripts demonstrating progressively complex usage:
The full system demo is the canonical integration test — it demonstrates that the message bus topology works end-to-end without any subsystem holding a direct reference to another.
Ontogenetic Morphe provides the theoretical substrate for concrete applications across the organ system:
SymbolicValue with DREAM, NARRATIVE, and MASK types as the semantic layer beneath generative processes. The MaskGenerator subsystem directly supports identity-construction workflows in performance and experiential art.ValueExchangeManager, BlockchainSimulator, and ProcessMonetizer subsystems provide a typed value-economy framework that can underpin SaaS product logic, particularly for platforms involving digital asset provenance or process-based billing.Orchestrator pattern and MessageBus architecture serve as a reference implementation for the governance and routing layer, demonstrating how autonomous subsystems coordinate without central control.The dependency direction is strictly I → II → III: downstream organs may import from Ontogenetic Morphe, but this library has zero dependencies on any other organ’s code.
src/ tree| Criterion | Status |
|---|---|
| All 22 subsystems instantiate and start | Passing |
| ProcessLoop generic types enforce at boundaries | Passing |
| SymbolicValue.derive() maintains provenance DAG | Passing |
| Signal attenuation below threshold produces Echo | Passing |
| MessageBus wildcard matching (*, #) | Passing |
| Full system demo completes without deadlock | Passing |
Ontogenetic Morphe draws on and departs from several traditions:
Contributions are welcome. The architecture is designed for extensibility — new subsystems can be added by:
Subsystem with appropriate generic type parametersProcessLoop methodsOrchestratorPlease ensure all contributions include:
See the org-level contributing guidelines for code of conduct and PR process.
MIT License. See LICENSE for details.
@4444J99 — Creator of the eight-organ creative-institutional system.