fix(consult): attach transit windows and VedAstro minute snapshots
Consult only copied Sade Sati and never searched trigger dates; V9 score left official minute identity unevaluated. Search a 90-day slow-planet window and run two-candidate snapshots with timeout staying not_evaluated. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -258,7 +258,7 @@ const timingKeys = new Set([
|
||||
"boundaries", "boundarycount", "start", "end", "startyear", "endyear", "iscurrent",
|
||||
"activationdescription", "sign", "lord", "planet", "name", "strength", "score", "source",
|
||||
"method", "confidence", "confidencecap", "summary", "conclusion", "fingerprint",
|
||||
"charadasha", "transits", "sadesati", "triggers", "window", "sequence", "durationyears",
|
||||
"charadasha", "transits", "sadesati", "triggers", "triggercount", "searchperiod", "window", "sequence", "durationyears",
|
||||
"fromage", "toage", "phase", "phasename", "moonsign", "saturnsign", "intensity", "active",
|
||||
"date", "target", "kind", "orb", "boundary", "claimboundary",
|
||||
]);
|
||||
@@ -357,6 +357,43 @@ function projectTechniqueAudit(value: unknown): ModelOutputValue | undefined {
|
||||
return rows.length ? rows : undefined;
|
||||
}
|
||||
|
||||
function projectWesternTechnique(value: unknown): ModelOutputValue | undefined {
|
||||
const row = record(value);
|
||||
if (!Object.keys(row).length) return undefined;
|
||||
const projected: { [key: string]: ModelOutputValue } = {};
|
||||
for (const key of [
|
||||
"status", "boundary", "target_date", "start_date", "end_date", "target_year", "return_date", "event_count",
|
||||
] as const) {
|
||||
const scalar = boundedPrimitive(row[key]);
|
||||
if (scalar !== undefined) projected[key] = scalar;
|
||||
}
|
||||
if (Array.isArray(row.aspects)) {
|
||||
const aspects = row.aspects.slice(0, 6).map((item) => {
|
||||
const aspect = record(item);
|
||||
const compact: { [key: string]: ModelOutputValue } = {};
|
||||
for (const key of ["transit_planet", "natal_point", "aspect", "orb"] as const) {
|
||||
const scalar = boundedPrimitive(aspect[key]);
|
||||
if (scalar !== undefined) compact[key] = scalar;
|
||||
}
|
||||
return compact;
|
||||
}).filter((item) => Object.keys(item).length);
|
||||
if (aspects.length) projected.aspects = aspects;
|
||||
}
|
||||
if (Array.isArray(row.windows)) {
|
||||
const windows = row.windows.slice(0, 6).map((item) => {
|
||||
const window = record(item);
|
||||
const compact: { [key: string]: ModelOutputValue } = {};
|
||||
for (const key of ["transit_planet", "natal_point", "aspect", "start_date", "end_date", "min_orb"] as const) {
|
||||
const scalar = boundedPrimitive(window[key]);
|
||||
if (scalar !== undefined) compact[key] = scalar;
|
||||
}
|
||||
return compact;
|
||||
}).filter((item) => Object.keys(item).length);
|
||||
if (windows.length) projected.windows = windows;
|
||||
}
|
||||
return Object.keys(projected).length ? projected : undefined;
|
||||
}
|
||||
|
||||
function projectWesternSpectrum(value: unknown): ModelOutputValue | undefined {
|
||||
const spectrum = record(value);
|
||||
if (!Object.keys(spectrum).length) return undefined;
|
||||
@@ -378,13 +415,8 @@ function projectWesternSpectrum(value: unknown): ModelOutputValue | undefined {
|
||||
if (Object.keys(techniques).length) {
|
||||
const compact: { [key: string]: ModelOutputValue } = {};
|
||||
for (const [name, layer] of Object.entries(techniques)) {
|
||||
const row = record(layer);
|
||||
const projected: { [key: string]: ModelOutputValue } = {};
|
||||
for (const key of ["status", "boundary"] as const) {
|
||||
const scalar = boundedPrimitive(row[key]);
|
||||
if (scalar !== undefined) projected[key] = scalar;
|
||||
}
|
||||
if (Object.keys(projected).length) compact[name] = projected;
|
||||
const projected = projectWesternTechnique(layer);
|
||||
if (projected !== undefined) compact[name] = projected;
|
||||
}
|
||||
if (Object.keys(compact).length) output.techniques = compact;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ When reference_transparency is present:
|
||||
- evidence_contract.must_use_layers is the executed shortlist for this answer. A placement, yoga, dasha boundary, or transit that is not in this packet was not delivered: do not invent it from model knowledge.
|
||||
- Do not paste that Technique Audit Table into the spoken answer. The product UI renders it collapsed from the delivered rows. This is the one audit surface; do not also dump JSON.
|
||||
- local_layers.dasha_sub_periods carries the antardasha boundaries inside the running mahadasha. When it is present, use those boundaries and never say sub-periods were not calculated; when it is absent, say so once instead of implying the calculation broke.
|
||||
- local_layers.transits.search_period is the searched observation window. When it is present, an empty triggers list means no exact contact in that window, not that transits were skipped. Quote only delivered trigger dates; do not invent a retrograde or exact hit that is not in triggers.
|
||||
- Treat evidence_contract.answer_policy as a hard output contract. When can_answer_precise_timing is false, provide only direction or structure and do not state a month, date, or guaranteed timing outcome.
|
||||
- Treat answer_policy.deterministic_claims_forbidden_for as a hard prohibition. Do not use a restricted technique to make a deterministic conclusion. reference_only, partial, blocked, research_only_blocked, and partial_registry_only are commercial claim boundaries, not validated capabilities.
|
||||
- Treat rectification.boundary=not_auto_rectified as final: a candidate time or score is not a verified birth time and must not be presented as one.
|
||||
|
||||
@@ -110,6 +110,8 @@ test("projects only bounded server-selected evidence to the model", () => {
|
||||
transits: {
|
||||
status: "executed",
|
||||
sade_sati: { phase: "none", moon_sign: "Taurus", saturn_sign: "Pisces" },
|
||||
search_period: { start: "2026-07-14", end: "2026-10-12" },
|
||||
triggers: [{ date: "2026-08-21", planet: "Saturn", target: "Moon", kind: "exact_hit", orb: 0.08 }],
|
||||
boundary: "observation windows, not guaranteed events",
|
||||
},
|
||||
},
|
||||
@@ -168,7 +170,13 @@ test("projects only bounded server-selected evidence to the model", () => {
|
||||
western_spectrum: {
|
||||
status: "executed",
|
||||
natal: { sun: "Aries", moon: "Taurus", ascendant: "Leo" },
|
||||
techniques: { transits: { status: "executed" } },
|
||||
techniques: {
|
||||
transits: {
|
||||
status: "executed",
|
||||
target_date: "2026-07-14",
|
||||
aspects: [{ transit_planet: "saturn", natal_point: "moon", aspect: "square", orb: 0.4 }],
|
||||
},
|
||||
},
|
||||
},
|
||||
vedastro_cross_check: {
|
||||
status: "executed",
|
||||
@@ -237,6 +245,9 @@ test("projects only bounded server-selected evidence to the model", () => {
|
||||
assert.equal(serialized.includes("Venus"), true);
|
||||
assert.equal(serialized.includes("sade_sati"), true);
|
||||
assert.equal(serialized.includes("Taurus"), true);
|
||||
assert.equal(serialized.includes("2026-08-21"), true);
|
||||
assert.equal(serialized.includes("search_period"), true);
|
||||
assert.equal(serialized.includes('"square"'), true);
|
||||
const mustUse = output.evidence_contract.must_use_layers;
|
||||
assert.equal(Array.isArray(mustUse), true);
|
||||
assert.equal((mustUse as string[]).includes("Yogas"), true);
|
||||
|
||||
@@ -28,6 +28,8 @@ test("web consult compute and projection keep the live skill's locally computed
|
||||
assert.match(workflow, /yogas: context\.local_layers\.yogas/);
|
||||
assert.match(workflow, /arudha_padas: context\.local_layers\.arudha_padas/);
|
||||
assert.match(workflow, /chara_dasha: context\.local_layers\.chara_dasha/);
|
||||
assert.match(attach, /_search_consultation_transit_triggers/);
|
||||
assert.match(attach, /search_transit_triggers/);
|
||||
assert.match(workflow, /transits: context\.local_layers\.transits/);
|
||||
assert.match(workflow, /must_use_layers/);
|
||||
assert.match(instructions, /must_use_layers is the executed shortlist/);
|
||||
|
||||
@@ -29,6 +29,7 @@ test("product voice keeps skill technique density without dumping JSON", () => {
|
||||
assert.match(mastra, /Do not paste that Technique Audit Table into the spoken answer/);
|
||||
assert.match(mastra, /must_use_layers is the executed shortlist/);
|
||||
assert.match(mastra, /do not invent it from model knowledge/);
|
||||
assert.match(mastra, /search_period is the searched observation window/);
|
||||
assert.match(mastra, /Do not announce a skipped-domain inventory/);
|
||||
assert.doesNotMatch(mastra, /Name the domains you did cover, say plainly that the remaining ones were not calculated/);
|
||||
assert.doesNotMatch(mastra, /2-5 short paragraphs/);
|
||||
|
||||
Reference in New Issue
Block a user