Add narrative text and a day-significance rank to the interpreter

Each of the day's top significant transits now gets a short sentence
describing what it classically means and which area of life its house
governs, condensed from Sepharial's Transits and Planetary Periods
(1920, public domain) plus a small table of traditional house
significations. The day-level line also shows its rank out of the 4
defined levels, e.g. "Notable (2/4)". Docs (CLAUDE.md, README,
docs/input-output-format.md, docs/reading.md) updated to match,
including a full worked example in docs/reading.md.
This commit is contained in:
ml
2026-07-05 21:05:53 +02:00
parent 1136e3257a
commit 41422adf98
11 changed files with 476 additions and 41 deletions
+46
View File
@@ -0,0 +1,46 @@
#ifndef DECK_NARRATIVE_H
#define DECK_NARRATIVE_H
#include <stdio.h>
/* Header-only dependency on the engine, same policy as significance.h -
* see its comment for why. */
#include "../../engine/src/astro.h"
/* Condensed, public-domain descriptions of what each transiting planet
* classically signifies, sourced from Sepharial's "Transits and
* Planetary Periods" (1920, public domain - res/Transits_and_Planetary_
* Periods.pdf), Chapter VIII "Effects of Transits" (pp. 60-61). The
* chapter's own structure - a base description of the planet's transit,
* plus a "well aspected"/"badly aspected" addendum - maps directly onto
* transiting-planet + aspect-type, our existing Aspect fields, so no new
* engine data is needed to use it.
*
* The Moon and Pluto aren't covered by that chapter (fast lunar transits
* were outside a year-ahead-forecasting book's scope; Pluto wasn't
* discovered until 1930, a decade after this book) - their text in
* narrative.c is original, written for this project in a matching
* voice, not drawn from Sepharial.
*
* Prints a narrative sentence for `aspect`'s transiting planet to `out`,
* indented with `indent` and followed by a newline - or prints nothing
* if the source material has no text applicable to this planet/aspect
* combination (e.g. an exactly neutral conjunction to a planet whose
* only text is a "well/badly aspected" addendum, like the Sun). A
* conjunction is treated as neutral - neither the "harmonious" nor the
* "discordant" addendum is shown for it - since Sepharial's own text
* says a conjunction "takes the nature of what it conjoins," something
* this data doesn't model.
*
* `transiting_house` is the whole-sign house (1-12) the transiting
* planet currently occupies in the natal chart - i.e.
* reading->transits.bodies[aspect->transiting_planet].house - and names
* *which area of life* the transit is playing out in, the standard,
* personalized way transits are read (see astro.h's own house-field
* comment). Pass a value outside 1-12 (e.g. the "no data" sentinel `0`
* used elsewhere - see reading_io.c's parse_bodies()) to omit that
* framing and print the planet's narrative on its own. */
void narrative_print(FILE *out, const char *indent, const Aspect *aspect,
int transiting_house);
#endif