Mesh key layout
NovusLens keeps its working state in the key-value storeKey-value storeStorage where a named key points to a value. Reading that key retrieves the value currently stored under it. of the MyceliumMyceliumThe application infrastructure underneath NovusLens. Its connected services exchange updates and keep the ordered structural log. meshMeshA set of connected Mycelium services that exchange updates and keep the NovusLens log.. Every key it writes sits under the conway/ prefix. The prefix comes from the Conway+ framework name, so it stays in the code and in the keys. The product itself is NovusLens.
The mesh also has reserved prefixes that belong to the substrateSubstrateThe shared Mycelium software beneath NovusLens. It stores records and lets NovusLens components exchange them.. NovusLens never writes under them. Every key is built by key() in keys.py and checked by assert_ours() before it is written. The check refuses any key outside conway/ and any key under one of the reserved prefixes below. Keys are built from slash-free parts, so a key’s shape stays visible at each call site.
The reserved prefixes, as the guard lists them in apps/mesh/src/conway_mesh/__init__.py, are:
agent/ audit/ cap/ cap-group/ ckpt/
ckptw/ clog/ comp/ consensus/ control/
facts/ gcap/ grp/ history/ installable/
llm/ lock/ log/ mailbox/ manifest/
prompts/ req/ schemas/ skills/ svc/
sys/ test/ tools/ tuple/ wiki/There is one exception. The MCPMCPModel Context Protocol: a standard way for an AI application to discover and call named tools supplied by another program. tool registration writes tools/<tool>/<node>, which the substrate’s gatewayGatewayA service that accepts requests and passes them into another system. The Mycelium gateway gives NovusLens access to the mesh. serves to MCP clients. The substrate owns that prefix and asks for the write, so the helper does not pass it through the guard.
Key families
Names in the table are the patterns the helpers in keys.py build. Where a helper is not used, the table says which module builds the key.
| Key pattern | What is stored | Written by | Read by |
|---|---|---|---|
conway/commit/{org} | The structural commitGit commitA recorded set of changes. In a software repository it identifies a code version; in the twin log it records a change to the model or its evidence. stream: cellCellA box on the map that stands for a team, service, supplier or AI agent. It is a unit you can inspect, not necessarily a department or a person., edge, findingFindingA difference in the records that needs a decision. It includes its sources and can describe a slow handoff, disputed fact or missing owner. and provenanceProvenanceThe record of where a value came from, who stated it and when. Every value keeps this record. events, ordered by the mesh’s hybrid logical clockHybrid logical clockA number attached to a log entry to order it against other entries. It combines clock time with a counter, so entries can be ordered even when clocks do not agree exactly.. It is the audit trail as well as the feed for the read modelRead modelThe database tables used by the map, Ask and Find. NovusLens rebuilds these tables from its history of recorded changes.. | TwinWriter.commit in twin.py, which appends to the stream. | The PostgresPostgresThe database software that stores the tables read by the NovusLens screens, along with document bodies, access records and protected personnel records. materialiserMaterialiserThe component that reads recorded changes in order and updates the database. It records its place so it can continue after a restart. in materialiser.py, the correctorCorrectorThe NovusLens component that compares measurements with recorded statements and adds observations and differences to the log. in corrector.py and the seed walk in seed_walk.py. |
conway/org/{org}/cell/{cell}/requires/{capability} | The consumer side of a live dependencyDependencyA link where one unit needs something from another. A dependency is not a reporting line: it shows where work relies on something else.. The value is a marker. The bare form without an org is kept for older readers. | TwinWriter.write_edge in twin.py. | Not read by any module in apps/ that this pass traced. No reader was identified for this page. |
conway/telemetry/{org}/edge/{capability} | The latest observed lead timeLead timeThe elapsed time between starting a request or handoff and completing it. for an edge, with its sourceSourceA document, interview statement, measurement or export that supports a value. Each source has a date and a stated scope., sample size and time of observation. The newest write replaces the previous value. | acquire.py from acquired feeds, synthetic.py for simulated feeds and seed_walk.py for the demonstration org. | telemetry.py (read_edge_telemetry and read_all_edge_telemetry), which the corrector calls. |
conway/telemetry/{org}/cell/{cell} | The latest Complexity, Agility and RecoverabilityRecoverabilityThe R in C/A/R: how well a team or service restores acceptable service after a failure. Recovery times and tested alternatives can supply evidence. (C/A/RC/A/RThree separate scores for a team or service: Complexity, Agility and Recoverability. Each uses current evidence and the customer’s stated scoring rules.) scores for one cell, with a pointer to its evidence artefactArtifactA stored source file or evidence body that a record can cite. Keeping the exact content lets a reader check what supported the record. and the calibrationCalibrationThe customer's own rule that turns raw figures, such as a gauge, a workflow history or an incident log, into a C/A/R score. A score moves when the calibration moves, and the change is recorded. used. The newest write replaces the previous value. | metrics_acquire.py and synthetic.py. | telemetry.py (read_cell_telemetry and read_all_cell_telemetry), which the corrector calls. |
conway/evidence/{org}/{artifact} | A lean pointer to an evidence artefact. The readable body is stored in Postgres, not in the mesh. | IngestIngestRead supplied records or documents and add their information to NovusLens, after the required checks. modules such as domain_ingest.py, and the reasoning service in operations.py. | Not read back through this helper in the code traced for this page. No reader was identified for this page. |
conway/contest/{capability}/{run} | The history of conflicting accounts of a dependency in one run. | No caller in apps/. | No caller in apps/. |
conway/authoritative/{consumer~provider~capability}/{fencing token} | The handoffHandoffWork or information passed from one team or service to another. Its measured or stated completion time determines the dependency class. selected by the correctionCorrectionA change to a recorded value or record. The earlier version stays in the history, and any conclusion that depended on it is checked again. pass, written once per fencing tokenFencing tokenA number that identifies a turn to update shared data. NovusLens rejects an earlier correction’s writes after a newer correction is applied.. The helper takes a capabilityCapabilityWhat a team can provide or an agent can do. NovusLens records the claim and the evidence that supports it. and a run scopeScopeThe work, data, activity or access that a rule, statement or calculation covers. For access, it names the records an account can see. For team measures, “Own operations” covers the selected unit. “Including descendants” adds the units beneath it., and the corrector passes a composite string as the capability. | corrector.py, through a write agreed by the mesh nodes. | Nothing reads it back. The corrector’s comment says the protection against a stale holder is the fencing token on each edge event, not this record. |
conway/telemetry/{org}/car-axis/ | A scan prefix for the per-axis C/A/R observations. It is built in car_axes.py with keys.key, not by a named helper in keys.py. | Not found in apps/ outside the defining module. | Not found in apps/ outside the defining module. |
conway/telemetry/{org}/network-flow/ | A scan prefix for network-flow feeds. It is built in flow_acquire.py with keys.key. | Not found in apps/ outside the defining module. | Not found in apps/ outside the defining module. |
conway/estate/presence/{id} | Presence records for the simulated estateSimulated estateA set of example agents supplied for testing and demonstrations. Their findings carry the label “(simulated estate)”. Real customer reports do not carry that label.. The prefix is a string constant in sim_estate.py. | sim_estate.py. | Not found in apps/ for this prefix. |
conway/estate/boundary/{id} | Boundary records for estate members. The prefix is a string constant in boundary_acquire.py, which also scans it. | sim_estate.py, including a rogue example for the demonstration. | boundary_acquire.py, which scans the prefix. |
tools/{tool}/{node} | An MCP tool registration. This is the one write outside conway/. | conway_reasoning/mcp.py, through mcp_tool_registration. | The substrate’s gateway, which serves it to MCP clients. |
Reading the table
Every key family under conway/ is a last-write-winsLast-write-winsA rule for competing updates in which the update with the latest ordering stamp supplies the stored value. record unless the table says otherwise. The commit stream is the exception. It is append-only and ordered, and the read model rebuilds from it. The corrector treats telemetryTelemetryMeasurements and activity records sent by a running system, such as ticket timings, network traffic or workflow results. as evidence to compare against the structural model. It does not treat a telemetry record as a decision.
Keys hold references, not evidence bodies. Writes have size limits, so a large body goes to Postgres and the key holds a pointer.