Summary
Implement The Loom Engine first at the boundary between computed aspects and Raven prose.
This should not live in the frontend, and it should not be buried inside the final LLM prompt. The correct insertion point is the composer layer where raw transit geometry becomes structured meaning.
Target pipeline:
aspects[]
→ scoreForces()
→ assignNarrativeRoles()
→ buildLoomPayload()
→ ravenComposer()
Or, at the product level:
transitGeometry → BalanceMeter → LoomEngine → RavenVoice
The Loom is not a replacement for Raven. It is the deterministic pressure-narrative layer beneath Raven: the machine that makes the myth stay honest.
First aperture to implement
Start with Symbolic Moment / NOW_PULSE, not Weather or Relational.
Reason: Symbolic Moment is the cleanest aperture. It has an exact timestamp, a smaller aspect set, and less risk of sprawling narrative. Once the Loom works there, it can extend to Today Field, Symbolic Weather, and shared/relational corridors.
Recommended first module
Create:
Core exports:
buildPressureNarrative(aspects, telemetry, chamberMap)
assignNarrativeRoles(scoredAspects)
buildPressureUnit(aspect, telemetry, chamber)
renderLoomPayload(narrative)
Minimum viable Loom payload
type LoomPayload = {
aperture: "NOW_PULSE" | "TODAY_FIELD" | "SYMBOLIC_WEATHER";
timestamp: string;
anchor: string;
dominantChamber: string;
opening?: PressureNarrativeUnit;
throne: PressureNarrativeUnit;
crossPressure?: PressureNarrativeUnit[];
supportCurrent?: PressureNarrativeUnit[];
backRoom?: PressureNarrativeUnit;
publicRoom?: PressureNarrativeUnit;
balanceTone: {
magnitude: number;
directionalBias: number;
volatility: number;
coherence: number;
integrationBias?: number;
biasInterpretation: string;
};
overreachBoundary: string[];
observationWindow: string;
quietCondition: string;
};
First deterministic rules
- Throne = highest force among valid aspects.
- Opening = fastest active personal/moon aspect, preferably applying or exact.
- CrossPressure = strongest square/opposition/quincunx.
- SupportCurrent = strongest trine/sextile.
- BackRoom = strongest 4th/8th/12th activation.
- PublicRoom = strongest 10th/11th activation.
- Dominant chamber = chamber with highest summed force.
- Quiet condition = generated from low magnitude or weak coherence, never improvised.
What Raven receives
Raven should not receive a bag of aspects. She should receive a structured Loom payload such as:
{
"throne": "Clean action-current opens in The Commons.",
"crossPressure": "The body presses against identity in The Horizon.",
"supportCurrent": "Tenderness can move through craft and value.",
"backRoom": "Big meaning is forming backstage.",
"publicRoom": "Visible direction is changing shape.",
"balanceTone": "available current with tender exposure",
"forbiddenClaims": [
"do not predict outcome",
"do not infer motives",
"do not call this fate",
"do not turn pressure into event"
]
}
Raven translates. Raven does not invent the underlying narrative structure.
First test case
Use the June 11 DH Symbolic Moment.
Expected Loom output:
- Opening: Moon square Sun — body/self friction.
- Throne: Sun sextile Mars — clean action-current.
- Support: Chiron trine Venus — tenderness through craft.
- BackRoom: Jupiter conjunct Mercury in 12th — big meaning backstage.
- PublicRoom: Uranus in 10th — public direction shifting.
- Narrative: movement is available, but it wants one honest line rather than the whole master plan.
If the Loom produces that without Raven improvising it, the architecture is working.
Acceptance criteria
loomEngine.ts or equivalent module exists in the composer/backend layer, not the frontend.
- Symbolic Moment generation calls the Loom between geometry scoring and Raven prose generation.
- Raven receives a structured Loom payload, not only raw aspects.
- Narrative roles are assigned deterministically and testably.
- The June 11 DH Symbolic Moment fixture produces the expected role assignments.
- Quiet/low-signal conditions are generated deterministically from telemetry/coherence, not improvised by Raven.
- Forbidden claims / overreach boundaries are passed forward with the Loom payload.
- Existing Balance Meter logic is reused where possible rather than duplicated.
Implementation notes
This is architecture, not just prompt engineering. The purpose is to make Raven's prose accountable to computed structure. The model can still speak beautifully, but it should be translating a deterministic pressure map rather than freely choosing what matters.
Summary
Implement The Loom Engine first at the boundary between computed aspects and Raven prose.
This should not live in the frontend, and it should not be buried inside the final LLM prompt. The correct insertion point is the composer layer where raw transit geometry becomes structured meaning.
Target pipeline:
Or, at the product level:
The Loom is not a replacement for Raven. It is the deterministic pressure-narrative layer beneath Raven: the machine that makes the myth stay honest.
First aperture to implement
Start with Symbolic Moment / NOW_PULSE, not Weather or Relational.
Reason: Symbolic Moment is the cleanest aperture. It has an exact timestamp, a smaller aspect set, and less risk of sprawling narrative. Once the Loom works there, it can extend to Today Field, Symbolic Weather, and shared/relational corridors.
Recommended first module
Create:
Core exports:
Minimum viable Loom payload
First deterministic rules
What Raven receives
Raven should not receive a bag of aspects. She should receive a structured Loom payload such as:
{ "throne": "Clean action-current opens in The Commons.", "crossPressure": "The body presses against identity in The Horizon.", "supportCurrent": "Tenderness can move through craft and value.", "backRoom": "Big meaning is forming backstage.", "publicRoom": "Visible direction is changing shape.", "balanceTone": "available current with tender exposure", "forbiddenClaims": [ "do not predict outcome", "do not infer motives", "do not call this fate", "do not turn pressure into event" ] }Raven translates. Raven does not invent the underlying narrative structure.
First test case
Use the June 11 DH Symbolic Moment.
Expected Loom output:
If the Loom produces that without Raven improvising it, the architecture is working.
Acceptance criteria
loomEngine.tsor equivalent module exists in the composer/backend layer, not the frontend.Implementation notes
This is architecture, not just prompt engineering. The purpose is to make Raven's prose accountable to computed structure. The model can still speak beautifully, but it should be translating a deterministic pressure map rather than freely choosing what matters.