diff --git a/lib/server/astrology-mathbrain.js b/lib/server/astrology-mathbrain.js index 9e0bf8cb..0efa108f 100644 --- a/lib/server/astrology-mathbrain.js +++ b/lib/server/astrology-mathbrain.js @@ -47,6 +47,8 @@ const { synastryComparison, calculateSeismograph, formatTransitTable, + mapT2NAspects, + subjectToAPI, } = require('../../src/math-brain/orchestrator.js'); const { compressAspects, @@ -3940,3 +3942,12 @@ exports.handler = async function(event) { }; } }; + +// Export functions needed by seismograph-engine (lazy-loaded to avoid circular deps) +exports.enrichDailyAspects = enrichDailyAspects; +exports.selectPoeticAspects = selectPoeticAspects; +exports.weightAspect = weightAspect; +exports.ASPECT_CLASS = ASPECT_CLASS; +exports.BALANCE_CALIBRATION_VERSION = BALANCE_CALIBRATION_VERSION; +exports.SEISMOGRAPH_VERSION = SEISMOGRAPH_VERSION; +exports.WEIGHTS_LEGEND = WEIGHTS_LEGEND; diff --git a/src/math-brain/orchestrator.js b/src/math-brain/orchestrator.js index 234fb168..59769102 100644 --- a/src/math-brain/orchestrator.js +++ b/src/math-brain/orchestrator.js @@ -35,6 +35,7 @@ const { getTransitsByDateRange, getNatalAspectsData, synastryComparison, + subjectToAPI, } = require('./api-client'); // ============================================================================ @@ -45,6 +46,13 @@ const { formatTransitTable, } = require('./seismograph-engine'); +// ============================================================================ +// RAVEN MAPPER MODULE +// ============================================================================ +const { + mapT2NAspects, +} = require('../raven-lite-mapper'); + // ============================================================================ // ORCHESTRATOR EXPORTS // ============================================================================ @@ -62,10 +70,14 @@ module.exports = { getTransitsByDateRange, getNatalAspectsData, synastryComparison, + subjectToAPI, // Seismograph Engine calculateSeismograph, formatTransitTable, + + // Raven Mapper + mapT2NAspects, }; /** diff --git a/src/math-brain/seismograph-engine.js b/src/math-brain/seismograph-engine.js index 07052856..9d2496b2 100644 --- a/src/math-brain/seismograph-engine.js +++ b/src/math-brain/seismograph-engine.js @@ -15,8 +15,8 @@ const { classifyMagnitude, classifyDirectionalBias, classifyVolatility, - scaleDirectionalBias, } = require('../../lib/reporting/metric-labels'); +const { scaleDirectionalBias } = require('../../lib/reporting/canonical-scaling'); // Lazy-load monolith dependencies to completely break circular reference at static analysis time let enrichDailyAspectsLazy, selectPoeticAspectsLazy, weightAspectLazy; diff --git a/test/astrology-mathbrain.test.js b/test/astrology-mathbrain.test.js index c4ac354c..0dbdfc92 100644 --- a/test/astrology-mathbrain.test.js +++ b/test/astrology-mathbrain.test.js @@ -10,21 +10,66 @@ const path = require('path'); // Mock successful API responses const MOCK_NATAL_RESPONSE = { status: "OK", - data: { subject: { name: "Test Person" }, aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "trine" }] } + data: { + subject: { name: "Test Person" }, + person: { + name: "Test Person", + planets: [ + { name: "Sun", sign: "Taurus", longitude: 45.5, house: 1 }, + { name: "Moon", sign: "Cancer", longitude: 120.3, house: 3 }, + { name: "Mercury", sign: "Taurus", longitude: 50.2, house: 1 }, + { name: "Venus", sign: "Gemini", longitude: 75.1, house: 2 }, + { name: "Mars", sign: "Aries", longitude: 15.4, house: 12 } + ] + }, + aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "trine", orbit: 1.2 }] + }, + aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "trine", orbit: 1.2 }] }; const MOCK_SYNASTRY_RESPONSE = { status: "OK", - data: { first_subject: { name: "Person A" }, second_subject: { name: "Person B" } }, - aspects: [{ p1_name: "Sun", p2_name: "Mars", aspect: "conjunction" }] + data: { + first_subject: { + name: "Person A", + person: { + name: "Person A", + planets: [ + { name: "Sun", sign: "Taurus", longitude: 45.5, house: 1 }, + { name: "Moon", sign: "Cancer", longitude: 120.3, house: 3 } + ] + } + }, + second_subject: { + name: "Person B", + person: { + name: "Person B", + planets: [ + { name: "Sun", sign: "Leo", longitude: 135.2, house: 5 }, + { name: "Mars", sign: "Aries", longitude: 15.4, house: 1 } + ] + } + } + }, + aspects: [{ p1_name: "Sun", p2_name: "Mars", aspect: "conjunction", orbit: 0.8 }] }; const MOCK_COMPOSITE_RESPONSE = { status: "OK", data: { - composite_subject: { name: "Composite" }, - aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "square" }] - } + composite_subject: { + name: "Composite", + person: { + name: "Composite", + planets: [ + { name: "Sun", sign: "Gemini", longitude: 90.1, house: 4 }, + { name: "Moon", sign: "Virgo", longitude: 180.5, house: 7 } + ] + } + }, + aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "square", orbit: 0.4 }] + }, + aspects: [{ p1_name: "Sun", p2_name: "Moon", aspect: "square", orbit: 0.4 }] }; const MOCK_TRANSIT_RESPONSE = {