Skip to content

The Reflective Mesh โ€” five actors that watch the cell

Updated: 2026-05-22 Status: 5/5 actors live ยท ticks every 4 s ยท all writes append-only

Reflective Mesh feedback board live in the workbench The mesh's feedback board pinned bottom-right while the workbench loops. Each row is one of the five actors reporting what it sees right now. Owl-AML's "listener says REFUSED (0% CALORIE across 24 judgments)" is the test result the UI Listener sealed on first run.

The Mac Cell would be lonely without people watching it. We can't put real people in the box โ€” so the cell carries five reflective actors that watch its own substrate, all the time, and tell the operator what they see. They do not narrate the cure; they tell you whether the cure is crossing.

This page explains each actor in plain English and points to the substrate row that proves each one is alive.

How the mesh runs

One Swift actor (ReflectiveAgentMesh) boots at app launch from FranklinAppDelegate.applicationDidFinishLaunching and lives forever. Every 4 seconds it ticks. On each tick the five actors observe in parallel, cross-talk briefly, and seal their findings into reflective_mesh_observations (append-only) and onto the always-visible Reflective Feedback Board in the bottom-right of the workbench.

The board is co-resident โ€” never modal, never in your way, always there. You can keep working while the mesh narrates what the cell is doing.

The five actors

1. Inventory Agent

What it watches. discovery_game_definitions + corpus_candidate_inventory + game_licensability_state.

What it tells you. What's ripe for license review (story authored + dossier sealed), what's stalled (story authored, no dossier yet), what's waiting on authoring (candidates in the corpus the cell hasn't promoted to a game).

Why you care. When you sit down at the workbench, the Inventory line tells you the shape of work โ€” "5 games ripe for license review, 50 candidates awaiting authoring" โ€” before you click anything.

2. Attention Agent

What it watches. workbench_operator_turns + workbench_operator_annotations + operator_substrate_notes + operator_substrate_questions + operator_reflection_responses.

What it tells you. What you have been paying attention to. Inferred from your pauses, annotations, rewinds, bookmarks, and questions. The cell builds a watch-set of the games you keep returning to.

Why you care. The cell prioritizes its own work toward your watch-set without you asking. When you annotate "this needs deeper authoring" on a game, the Attention agent flags that game, and Inventory + Handoff + Atom Steward all re-rank their findings to put that game near the top of the board on the next tick.

3. Handoff Agent

What it watches. cure_sector_progress (the 11 ATC-style sectors a cure traverses on its path to a human).

What it tells you. Which cures are stuck at a sector boundary, with the receiving actor unacknowledged. Drug discovery has 11 sectors (discovery โ†’ lab synthesis โ†’ preclinical โ†’ P1 โ†’ P2 โ†’ P3 โ†’ manufacturing โ†’ regulatory โ†’ distribution โ†’ patient care โ†’ post-market). When a cure clears one sector but its handoff to the next is silent, the Handoff agent flags it.

Why you care. The cure isn't real until it reaches a human. The Handoff agent watches the between โ€” the places ATC-style language games actually fail in the real world.

4. Atom Steward (v104)

What it watches. Every row in wb_meaning_atoms + the sidecar atom_vqbit_fields + the edges in cell_node_edges.

What it tells you. A per-atom census: WHOLE / PARTIAL / DARK. An atom is WHOLE when all five vQbit fields are present (c4_binding, s4_projection, entropy_delta, terminal_state_to_human, provenance) and the atom has at least one edge to another atom. PARTIAL means the body exists but some fields are null. DARK means the body is empty.

The Steward will never fabricate a field value to make an atom look WHOLE. A null is honest; a guessed c4_binding is the cancer.

Why you care. The directive that named the Atom Steward into existence said: "the atoms aren't being managed. an atom today is (atom_id, body). that's a leaf, not a node." The Steward turns that discomfort into a number to drive to zero.

5. UI Listener (v105)

What it watches. Every language game in discovery_game_definitions once authored. For each game it picks each receiving person (cure_game_judging_persons) and walks every arc atom, judging whether the meaning crossed.

What it tells you. Per-game licensability: CALORIE / CURE / REFUSED.

  • CALORIE = the person understood, could retell it accurately, and could act on it.
  • CURE = the person understood but a named gap remains (the gap text is sealed in listener_arc_judgments.what_dark).
  • REFUSED = it did not cross. The Listener names what was missing.

Hard isolation: the Listener judges only from the projection. It does not see substrate, source documents, receipts, or provenance โ€” because the human receiving the cure has none of that. Its ignorance is the instrument.

Why you care. The goal of every language game on the workbench is to get license. The Listener is the cell's own internal human player saying whether the cure can be told to its receiving humans without translation. That answer is the licensability gate.

The board

The Reflective Feedback Board sits pinned to the bottom-right of the workbench. Findings are ordered by urgency (0โ€“1). Each row carries:

  • An icon for the actor (shippingbox for Inventory, eye for Attention, arrow.left.arrow.right for Handoff, atom for Atom Steward, ear for UI Listener).
  • A one-line headline.
  • A short detail.
  • An action hint (e.g. "Press L ยท browse the library").

Click any row to drill into the detail.

Reading the mesh against the substrate

sqlite3 ~/Library/Application\ Support/GaiaFTCL/substrate.sqlite \
  "SELECT agent_kind, headline FROM reflective_mesh_observations
   ORDER BY observed_at_tau_block DESC LIMIT 12"

Every tick seals five rows. The cell remembers what it saw, forever.

sqlite3 ~/Library/Application\ Support/GaiaFTCL/substrate.sqlite \
  "SELECT atom_id, classification, present_fields, edge_count, missing
   FROM atom_steward_observations
   WHERE atom_id LIKE 'atom-game-owl-aml-step%-narr'
   ORDER BY observed_at_tau_block DESC LIMIT 8"

That's the AML test set โ€” the 8 narrative arcs of the AML cure โ€” as the Atom Steward sees them right now.

sqlite3 ~/Library/Application\ Support/GaiaFTCL/substrate.sqlite \
  "SELECT arc_slot, person_role, terminal_state, what_dark
   FROM listener_arc_judgments
   WHERE session_id = (SELECT session_id FROM listener_run_sessions
                       WHERE game_id='owl-aml' ORDER BY started_at_tau_block DESC LIMIT 1)
   ORDER BY judged_at_tau_block"

That's the Listener's table for AML โ€” 8 arcs ร— 3 persons (clinician, patient, regulator) = 24 judgments. The first run reported 0 CALORIE / 14 CURE / 10 REFUSED, naming exactly what was still dark for each person.

What the mesh refuses

The mesh does not auto-author atoms, persons, or arcs. It only observes and reports. Authoring is the cell's job (via DomainArcAuthor) when triggered. The mesh is the witness, not the writer.

The mesh does not call external LLMs. The UI Listener uses on-device Apple FoundationModels. Sovereignty absolute.

The mesh does not force focus. Even when an actor finds a REFUSED game, it does not raise Franklin to the front. The operator's attention is the operator's choice.

Substrate references

Layer Where the truth lives
Mesh ticks reflective_mesh_observations (append-only)
Mesh state reflective_mesh_state (single row, mutable)
Atom Steward audit atom_steward_observations (append-only)
Atom vQbit fields atom_vqbit_fields (sidecar 1:1 with atom_id)
Atom edges cell_node_edges
Listener sessions listener_run_sessions (append-only)
Listener judgments listener_arc_judgments (append-only)
Judging persons cure_game_judging_persons (per game; NOT per sector)
Migration NarratorSchemaV102 (mesh) + V104 (atom steward) + V105 (listener)

Every constitutional invariant on this page is sealed in workbench_compile_receipts rows whose evidence text quotes the operator's directive verbatim.


Federation-cosigned

This page's source is sealed in the GaiaFTCL federation manifest โ€” page SHA-256 9cd49b8e479aa633โ€ฆ, manifest witness a090592e0609adc8โ€ฆ, signed 2026-06-02T18:58:22Z by cell gaiaftcl-mac-cell. Verify with gaiaftcl wiki sign --all and compare wiki-all-signatures.json.