DR McCulloch← WORK

A CRITICAL EDITION · GORONWY / LÚRONWY–MÍHARÁE

The Living
Tapestry

a tapestry alive with the whispers of the Sidhea self-hosted, privacy-first agentic-AI system

The tapestry is alive with the whispers of the Sidhe, the murmurs of gatherings and the thrums that echo through the realms.README.md, line 3 · serial comma removed per house style

Goronwy watches your computer (browser, Google Workspace, system), classifies every event by sensitivity, keeps the private ones on a local mind and lets the general ones travel to the cloud, then sings the result to your desktop and phone. Over that real engineering I have laid a complete Celtic process-philosophy myth: schemas are Covenants, events are Lyrics, notifications are Songs and four weavers do the work. This edition prints the real material and lets you read it in either voice, then play the system’s signature datum, a 66-thread loom, as an instrument.

Read this edition in
the weaver’s tongue
Enter the loom

I · THE ARGUMENT

Beneath the fiction runs real process philosophy, drawn from Whitehead’s occasions and Simondon’s individuation. Entities in the tapestry are not static substances but ongoing processes of becoming, each constituted by its relations, its history of lyrics given and received.

There is no entity beneath the process.
The process is the entity.

README.md, line 110

Occasion
The fundamental unit, not a thing but a happening. Occasions perish as they occur, but their effects propagate through the weave.
Prehension
How an occasion grasps what came before. The knower does not receive a message in isolation but feels the entire history that produced it.
Concrescence
A lyric does not exist and then get transmitted. It concresces (assembles itself from the potentials available) and in that assembling becomes actual.
Metastability
A state rich with potential but not yet resolved. The tapestry is never in equilibrium; it holds tensions that will discharge into new forms.

II · THE FOUR WEAVERS

Four give voice to what would otherwise stay unheard.

Two are woven into the running system today; the other two are still the warp: foundational threads named and begun in the source but not yet crossed by the weft, so they never surface in the connectivity data. This edition leaves them absent on purpose. The philosophy holds that an entity becomes itself only through the relations it doesn’t yet have, and a weaver with no threads is exactly what that looks like. Press a warp weaver below and its unwoven threads shimmer on the loom.

Míharáe

The Perceiver

Míharáe listens to the whispers of the future, perceiving the unspoken lyrics hidden within the tapestry.

Watches your digital realm: the browser, the Google Workspace, the system underneath. Classifies each whisper by sensitivity, keeps the private ones close and lets general murmurs travel, then routes them on.

handlers/miharae · services/miharae27 threads woven

Lúronwy

The Voice

They take the whispers moving through the tapestry and shape them into something that can travel. Their songs carry across realms. What was silent becomes heard.

Turns perceptions into songs (notifications sung to desktop and WhatsApp) and into actions that give weight to connections, always undoable. Resonates the tapestry across every device.

handlers/luronwy · services/luronwy20 threads woven

Éofránna

The Mender

They move among frayed edges and scattered voices, drawing what is broken toward what is whole. Their presence is quiet. The mending happens anyway.

Would assemble scattered context from RAG, activities and tasks into one coherent whole before it reaches Míharáe. In the source the warp is laid, though the weft has not yet crossed it.

handlers/eofranna · services/eofrannawarp, not yet individuated

Chibuelassa

The Pathway

A pathway stretched between worlds that should not touch but must. They exist only in motion. No origin, no destination — only the space between. To encounter Chibuelassa is to already be somewhere else.

Would fetch context from the vector store and disparate sources and carry it to Éofránna. RAG retrieval is begun, though the activity and task adapters still return empty, so it is barely woven into the data yet.

handlers/chibuelassa · services/chibuelassawarp, not yet individuated

III · THE LOOM

The Tapestry is a unidirectional weighted adjacency matrix, so play it.

Twenty-seven components down the side, the same twenty-seven across the top. Read down a row and you have a known that transmits; read across a column and you have a knower that perceives. Each lit knot where they cross is a real thread from the source data, coloured by the realm that sends it and glowing at its comms-weight. Choose a flow and a lyric concresces: a mote of light travels the lit knots hop by hop, and each hop reads out as a stanza.

Pluck a flow · watch a lyric concresce hop by hop

silentburning
27components woven
66threads / lyrics
3.8average weight
6heaviest thread

Processing Handler is the most-connected known, with 8threads leaving it. Config Repository is the most-depended-upon knower, with 14 threads arriving at it. Of the 66 threads, Míharáe carries 27, Lúronwy 20, the shared weave15 and the world beyond the veil 4.

An editor’s note on the record. The project’s own summary in component-connectivity-matrix.md reports 28 components / 52 connections and names the Event Bus most-connected and the Activity Repository most-depended-upon. Counted straight from the primary source (the CSV), the figures differ:27 components, 66 threads, with Processing Handler andConfig Repository at the extremes. This edition prints the CSV’s numbers and flags the discrepancy rather than smoothing it over.

On weight, two meanings must not be conflated. The CSV weights (0–6) are engineering intensity, a comms estimate of frequency plus data volume. The myth’s own weight is a different metric entirely: how closely illocutionary force matches perlocutionary effect, a 0-to-1 measure of a speech act landing as intended. The glow of each knot here is the comms-weight, not the poetic one. Do not let the numbers pretend to be the poem. One real thread carries a weight of exactly 0 (Data Classifier loading its rules from Config), a nearly silent whisper that still counts as a thread.

IV · THE CONCORDANCE

Where the code meets the fiction, every word is renamed.

The renaming is a one-to-one mapping the codebase actually enforces, taken verbatim frompackages/shared/src/covenants/README.md. The register switch at the top of the edition rewrites every named term live: the same text read in two voices, machine dimmed on the left, myth dimmed on the right.

TapestryMachineMeaning
CovenantSchemaA sacred agreement defining the structure a lyric must take. From the ontology: "Eternal objects are pure potentials—the form a lyric might take before it takes it."
In AccordValidWhen data harmonises with its covenant. The known and knower are in agreement.
DiscordInvalidWhen data breaks from its covenant. The thread is broken.
Seek AccordValidateThe act of checking whether data is in accord with a covenant.
LoomRegistryWhere covenants are held, ready to be drawn for weaving.
LyricEventA unit of communication between known and knower.
KnownProducerThe entity transmitting a lyric — a matrix row.
KnowerConsumerThe entity receiving and perceiving a lyric — a matrix column.
RealmDomainA non-physical space: Miharae’s realm, Luronwy’s realm, the Tapestry.

The types of lyric

WhisperActivity eventA lyric from the orgán (computer) perceived by awareness. Miharae perceives whispers.
SongNotificationA lyric that Luronwy transforms from whispers and sends across realms.
ResonanceSync eventWhen songs echo across multiple devices, keeping the tapestry in harmony.
PulseHealth eventThe heartbeat of the tapestry itself.
ThreadConfig eventThe threads that bind and configure the weave.

V · THE UNWOVEN WARP

In tapestry weaving, the warp is the set of foundational vertical threads that must be set up first, held taut on the loom, before any weaving can begin — the backbone of every tapestry. Without the warp properly laid, no weaving can occur.docs/phase-5-eofrannas-warp.md

Éofránna’s context-assembly and Chibuelassa’s retrieval are begun in the source but do not yet appear as threads in the matrix. They sit in the pre-individual field: present as potential, not yet resolved into relations. Faking them into a dense graph would have been easy and dishonest, so they stay dim here, drawn as the unwoven band flanking the loom. An entity does not pre-exist its relations; it individuates through them, and until the weft crosses these two have almost nothing to individuate through. Alongside them, STUBS_AND_PLACEHOLDERS.md lists the actions that still return a promise without keeping it:

  • Calendar eventEmits action:calendar:create and returns success, though nothing reaches Google Calendar yet.
  • Email draftEmits action:email:draft and returns success, though nothing reaches Gmail yet.
  • Daily summaryReturns the literal string Daily summary for ${date}, because the LLM has not been asked yet.
  • Discover devicesAlways returns [], because mDNS discovery is warp, not weft.
  • Pair with codeCreates a fake device and stores it, without any real P2P handshake yet.

Already woven, for the record: task creation calls the real Google Tasks API, and the Ollama test genuinely fetches localhost:11434. The mending happens anyway, slowly.

VI · A SPECIMEN OF THE SOURCE

A Covenant is where the two voices are literally the same file.

One leaf of the real source, reproduced verbatim with its marginalia. A Covenant names its@realm, its @known and its @knower in the tapestry’s tongue in the JSDoc above, then the Zod object below enforces that shape in the machine’s.

/**
 * Lúronwy Song Covenants
 *
 * Covenants for songs in Lúronwy's realm. Songs are what Lúronwy creates
 * from whispers—notifications that carry across realms to reach the user.
 *
 * @module covenants/luronwy/song
 *
 * @terminology
 * - **Song**: A notification that Lúronwy composes from whispers and sends
 *   across realms. "Lúronwy gives voice to what Míharáe perceives. They take
 *   the whispers moving through the tapestry and shape them into something
 *   that can travel."
 * - **Channel**: The pathway through which songs travel (WhatsApp, desktop).
 * - **Verse**: The structure of a song (its rules and conditions).
 *
 * @realm luronwy
 * @known Processing handler, action handler
 * @knower Notification service, WhatsApp client, desktop notifier
 *
 * @see docs/specs/notification-system.md for technical specification
 */
export const songCovenant = z.object({
  id: uuidCovenant,
  type: songTypeCovenant,
  priority: songPriorityCovenant,
  title: nonEmptyStringCovenant,
  body: nonEmptyStringCovenant,
  channels: z.array(songChannelCovenant).min(1),
  activityId: uuidCovenant.optional(),
  actionId: uuidCovenant.optional(),
  createdAt: dateCovenant,
  sentAt: dateCovenant.optional(),
  acknowledgedAt: dateCovenant.optional(),
  dismissedAt: dateCovenant.optional(),
  metadata: metadataCovenant,
});

packages/shared/src/covenants/luronwy/song.covenant.ts · lines 1–79, verbatim

VII · THE DESCENT OF A WHISPER

One whisper falls through nine hands.

The nine steps of the real Data Flow from ARCHITECTURE.md, set in two columns, the weaver’s gloss beside the engineering. Steps three and four are dimmed: they belong to the two weavers still in warp.

  1. 1MíharáeMíharáe listens.Activity detected — browser, workspace or system.
  2. 2MíharáeMíharáe perceives the pattern.Data classified: sensitive, internal or general.
  3. 3Chibuelassa · warpThe pathway between worlds is opened.Context fetched from RAG and other sources.
  4. 4Éofránna · warpWhat is broken is drawn toward what is whole.Context assembled and mended.
  5. 5MíharáeMíharáe adjusts the nodes.Routed to the appropriate LLM — local or cloud.
  6. 6MíharáeMíharáe illuminates the threads.Processed and analysed.
  7. 7LúronwyLúronwy shapes the whisper into a song.Notifications generated if actionable.
  8. 8LúronwyThe song gives weight to a connection.Actions taken if approved.
  9. 9LúronwyLúronwy captures the essence.Feedback collected and learned from.