Fix Raven Aperture Contamination + Void/Carrier Fallback Failure
Role
Act as a senior TypeScript engineer working in DHCross/Shipyard.
Context
We have a real failed Raven session export showing a product failure that is not primarily a Gemini/provider issue.
In the session:
- LLM provider was Anthropic / Claude Sonnet 4.6, one successful attempt.
- User was discussing Raven architecture: carrier variables, void states, math/poetry boundaries, and the rule “Do not invent the strike.”
- Runtime initially treated this as REPORT_CONTEXT_MODE: SYMBOLIC_MOMENT but promptMode: FIELD_REPORT.
- Astrology adapter failed: adapter_classifier_unavailable, fetch failed.
- Transit outcome was skipped: geometry_unavailable_or_unclassified.
- Airspace compiled: RavenRenderPlan compiled: SOLO_MIRROR | VOID.
- But the render plan still had:
- aperture: TRANSIT
- reportType: SOLO_MIRROR
- voiceRegister: RAVEN_FIELD_REPORT
- geometryStatus: VOID
- mayAskCalibrationQuestion: true
- Prompt was huge and compacted:
- totalCharsBeforeTrim: 106295
- totalCharsAfterTrim: 79920
- wasTruncated: true
- userPromptCompacted: true
- Raven then produced blunt fallback behavior:
- “Manifestation Firewall Breach (Prophecy/Prediction). The generated text was withheld.”
- Later: “Live astrology data did not provide a stable anchor…”
This is aperture/render-plan contamination plus product-hostile fallback behavior.
Goal
Fix the last-example failure mode:
When live astrology geometry is unavailable or unclassified, Raven must not mix TRANSIT / FIELD_REPORT / SOLO_MIRROR contracts, must not ask calibration questions in Solo Mirror / Blueprint lanes, and must degrade gracefully into carrier/void architecture language instead of sterile Manifestation Firewall replacement.
Do not refactor broadly. Make the smallest safe changes with tests.
⸻
Files to Inspect First
Start with:
Also inspect any existing tests around:
- provider payload boundary
- Solo Mirror clockless contract
- aperture separation
- symbolic moment unavailable
- manifestation firewall
- frontstage/backstage guard
- render plan compilation
⸻
Required Fixes
- Solo Mirror / Blueprint Must Be Clockless
Ensure SOLO_MIRROR render plans never inherit TRANSIT aperture.
Expected behavior:
- SOLO_MIRROR should stamp APERTURE: NATAL or equivalent clockless/blueprint aperture.
- SOLO_MIRROR should not hydrate live transit telemetry.
- SOLO_MIRROR should not use RAVEN_FIELD_REPORT voice register.
- SOLO_MIRROR should not carry Symbolic Moment / Field Report timing language.
- SOLO_MIRROR should not allow calibration questions.
Test this directly.
Failing shape to prevent:
{
"reportType": "SOLO_MIRROR",
"aperture": "TRANSIT",
"voiceRegister": "RAVEN_FIELD_REPORT",
"interpretiveFreedom": {
"mayAskCalibrationQuestion": true
}
}
Desired shape:
{
"reportType": "SOLO_MIRROR",
"aperture": "NATAL",
"voiceRegister": "RAVEN_BLUEPRINT",
"interpretiveFreedom": {
"mayAskCalibrationQuestion": false
}
}
Use actual repo enums/types; do not invent incompatible literal names if better canonical values already exist.
⸻
- Symbolic Moment Geometry Failure Must Degrade Gracefully
When the user’s request is architectural/meta-doctrine about Raven’s rules, and live geometry is unavailable, do not return only:
Manifestation Firewall Breach (Prophecy/Prediction). The generated text was withheld.
or:
Live astrology data did not provide a stable anchor...
unless the user specifically asked for a live Symbolic Moment reading that cannot be sampled.
Expected graceful behavior:
- If user is discussing architecture / doctrine / carrier variables:
- answer in Creator/Blueprint/architecture lane,
- acknowledge geometry is unavailable only as context,
- do not force a live Symbolic Moment.
- If user asks for Symbolic Moment and geometry is unavailable:
- say live geometry is unavailable,
- read only permitted carrier/void frame if available,
- explicitly do not promote carrier texture into event geometry,
- invite resampling only as an option, not as the whole answer.
Preferred product language:
No active chamber crossing is available from live geometry in this pass, so I will not invent an event. I can still speak to the carrier layer: what the quiet field is allowed to explain, and what it cannot claim.
Do not use sterile console-only fallback unless generation truly cannot continue.
⸻
- Manifestation Firewall Must Not Block Meta-Architecture Discussion
The uploaded session shows a user saying:
- “Do not invent an event.”
- “Do not promote texture into geometry.”
- “Read the void as void.”
- “Read the carrier as carrier.”
That is not prophecy. That is anti-prophecy / doctrine clarification.
Audit the Manifestation Firewall trigger path.
Fix classification so architecture/meta-doctrine statements about prediction, event claims, or “withheld permission” are not treated as manifestation attempts.
Add tests:
- User says “Do not invent the strike.” → should not trigger Manifestation Firewall.
- User asks “What was withheld?” in this context → answer should explain withheld permission/event-claim, not imply hidden content.
- User describes carrier variables and void rules → should stay in architecture lane.
- Actual event prediction language should still be blocked.
⸻
- FIELD_REPORT Must Not Become the Default Container for Every Symbolic Failure
In the session, REPORT_CONTEXT_MODE: SYMBOLIC_MOMENT coexisted with promptMode: FIELD_REPORT, then the render plan became SOLO_MIRROR | VOID.
Audit the mode/lane resolver.
Expected behavior:
- Symbolic Moment unavailable should not silently become Field Report unless explicitly requested.
- Solo Mirror should not be selected as a void fallback for a Symbolic Moment unless the user is actually asking for Blueprint/Solo Mirror.
- Creator/meta-architecture discussion should not be forced into Field Report just because it mentions Symbolic Moment architecture.
Add telemetry that makes this explicit:
- requested aperture
- resolved aperture
- report type
- fallback report type if any
- reason for fallback
- whether fallback changed aperture
- whether fallback changed voice register
⸻
- Prompt Compaction Must Not Cut the User’s Governing Instruction
In the session:
- total before trim: 106295
- max: 80000
- userPromptCompacted: true
The user’s key instruction was the doctrine itself:
“Do not break faith with the math to preserve the myth… Read the void as void. Read the carrier as carrier.”
Ensure user-supplied governing architecture is preserved over verbose doctrine/history when the turn is meta-architecture.
Audit enforcePromptBudget() usage and block ordering.
Expected priority:
- Current user message
- Active aperture contract
- Current geometry / signal-void state
- Minimal persona law
- Necessary validation law
- Recent history
- Retrieved doctrine / verbose rubrics / examples
Do not let long rubrics crowd out the user’s current architectural instruction.
Add test or debug assertion proving current user message survives compaction intact.
⸻
Non-Goals
Do not:
- Reopen the Gemini architecture decision.
- Add more broad “do not” prompt blocks.
- Add runtime golden examples.
- Make all style validators hard blockers.
- Expand Manifestation Firewall with more broad regex without context.
- Create a ten-section Solo Mirror muzzle.
- Treat every geometry failure as a refusal.
- Treat carrier texture as event geometry.
⸻
Tests Required
Add or update tests covering:
A. Solo Mirror Clockless Contract
Given SOLO_MIRROR render plan:
- aperture is not TRANSIT
- voice register is not RAVEN_FIELD_REPORT
- live transit telemetry is not hydrated
- mayAskCalibrationQuestion is false
B. Symbolic Moment Geometry Failure
Given adapter classifier unavailable / geometry unclassified:
- system does not invent chamber crossings
- system does not claim event geometry
- system can still answer architecture/carrier-layer questions
- output does not collapse into sterile “ask again later” unless truly necessary
C. Manifestation Firewall Anti-Prophecy Context
These should not trigger prophecy firewall:
- “Do not invent the strike.”
- “Do not promote carrier texture into geometry.”
- “What was withheld was permission to invent an event.”
- “Read the void as void.”
These should still trigger or be constrained:
- direct future-event prediction
- manifestation claim
- hidden revelation / secret transit claim
- forced event timeline
D. Mode/Aperture Resolution
Prevent this hybrid:
REPORT_CONTEXT_MODE: SYMBOLIC_MOMENT
promptMode: FIELD_REPORT
RavenRenderPlan: SOLO_MIRROR | VOID
aperture: TRANSIT
voiceRegister: RAVEN_FIELD_REPORT
There should be a single coherent resolved contract, or a visible, intentional degradation.
E. Prompt Budget Preservation
Under a long prompt:
- current user message is preserved intact,
- active aperture contract is preserved,
- compacted content is lower-priority doctrine/history, not the user’s instruction.
⸻
Acceptance Criteria
The fix is accepted when:
- The last-example session would no longer produce “Manifestation Firewall Breach” for anti-prophecy architecture language.
- Solo Mirror / Blueprint lanes cannot inherit Transit / Field Report register.
- Geometry unavailable degrades into honest carrier/void language rather than refusal.
- Aperture/report-type/voice-register cannot form the bad hybrid seen in the session.
- Prompt compaction preserves the live user instruction.
- Smoke tests and typecheck pass.
- New tests would have caught the uploaded-session failure.
Product Rule
Protect the map without removing Raven from the room.
When geometry is absent:
- do not invent the event,
- do not erase carrier texture,
- do not force the wrong aperture,
- do not replace Raven with a console message.
Fix Raven Aperture Contamination + Void/Carrier Fallback Failure
Role
Act as a senior TypeScript engineer working in DHCross/Shipyard.
Context
We have a real failed Raven session export showing a product failure that is not primarily a Gemini/provider issue.
In the session:
This is aperture/render-plan contamination plus product-hostile fallback behavior.
Goal
Fix the last-example failure mode:
When live astrology geometry is unavailable or unclassified, Raven must not mix TRANSIT / FIELD_REPORT / SOLO_MIRROR contracts, must not ask calibration questions in Solo Mirror / Blueprint lanes, and must degrade gracefully into carrier/void architecture language instead of sterile Manifestation Firewall replacement.
Do not refactor broadly. Make the smallest safe changes with tests.
⸻
Files to Inspect First
Start with:
Also inspect any existing tests around:
⸻
Required Fixes
Ensure SOLO_MIRROR render plans never inherit TRANSIT aperture.
Expected behavior:
Test this directly.
Failing shape to prevent:
{
"reportType": "SOLO_MIRROR",
"aperture": "TRANSIT",
"voiceRegister": "RAVEN_FIELD_REPORT",
"interpretiveFreedom": {
"mayAskCalibrationQuestion": true
}
}
Desired shape:
{
"reportType": "SOLO_MIRROR",
"aperture": "NATAL",
"voiceRegister": "RAVEN_BLUEPRINT",
"interpretiveFreedom": {
"mayAskCalibrationQuestion": false
}
}
Use actual repo enums/types; do not invent incompatible literal names if better canonical values already exist.
⸻
When the user’s request is architectural/meta-doctrine about Raven’s rules, and live geometry is unavailable, do not return only:
Manifestation Firewall Breach (Prophecy/Prediction). The generated text was withheld.
or:
Live astrology data did not provide a stable anchor...
unless the user specifically asked for a live Symbolic Moment reading that cannot be sampled.
Expected graceful behavior:
Preferred product language:
No active chamber crossing is available from live geometry in this pass, so I will not invent an event. I can still speak to the carrier layer: what the quiet field is allowed to explain, and what it cannot claim.
Do not use sterile console-only fallback unless generation truly cannot continue.
⸻
The uploaded session shows a user saying:
That is not prophecy. That is anti-prophecy / doctrine clarification.
Audit the Manifestation Firewall trigger path.
Fix classification so architecture/meta-doctrine statements about prediction, event claims, or “withheld permission” are not treated as manifestation attempts.
Add tests:
⸻
In the session, REPORT_CONTEXT_MODE: SYMBOLIC_MOMENT coexisted with promptMode: FIELD_REPORT, then the render plan became SOLO_MIRROR | VOID.
Audit the mode/lane resolver.
Expected behavior:
Add telemetry that makes this explicit:
⸻
In the session:
The user’s key instruction was the doctrine itself:
“Do not break faith with the math to preserve the myth… Read the void as void. Read the carrier as carrier.”
Ensure user-supplied governing architecture is preserved over verbose doctrine/history when the turn is meta-architecture.
Audit enforcePromptBudget() usage and block ordering.
Expected priority:
Do not let long rubrics crowd out the user’s current architectural instruction.
Add test or debug assertion proving current user message survives compaction intact.
⸻
Non-Goals
Do not:
⸻
Tests Required
Add or update tests covering:
A. Solo Mirror Clockless Contract
Given SOLO_MIRROR render plan:
B. Symbolic Moment Geometry Failure
Given adapter classifier unavailable / geometry unclassified:
C. Manifestation Firewall Anti-Prophecy Context
These should not trigger prophecy firewall:
These should still trigger or be constrained:
D. Mode/Aperture Resolution
Prevent this hybrid:
REPORT_CONTEXT_MODE: SYMBOLIC_MOMENT
promptMode: FIELD_REPORT
RavenRenderPlan: SOLO_MIRROR | VOID
aperture: TRANSIT
voiceRegister: RAVEN_FIELD_REPORT
There should be a single coherent resolved contract, or a visible, intentional degradation.
E. Prompt Budget Preservation
Under a long prompt:
⸻
Acceptance Criteria
The fix is accepted when:
Product Rule
Protect the map without removing Raven from the room.
When geometry is absent: