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
+5 -2
View File
@@ -3,6 +3,7 @@
#include <stdlib.h>
#include <string.h>
#include "narrative.h"
#include "reading_io.h"
#include "significance.h"
@@ -12,7 +13,7 @@ static void print_usage(const char *prog) {
"Reads a DailyReading in deck-engine's --format json shape - from the\n"
"given file, or from stdin if no file is given (or it is \"-\") - and\n"
"prints a significance report: the day's overall level and the top\n"
"aspects driving it.\n\n"
"aspects driving it, each with a short narrative note.\n\n"
"Typical use:\n"
" dist/deck-engine ... --format json | %s\n"
" dist/deck-engine ... --format json > reading.json && %s reading.json\n",
@@ -115,7 +116,8 @@ int main(int argc, char **argv) {
DailyInterpretation interp;
interpret_daily_reading(&reading, &interp);
printf("Day significance: %s\n", day_level_name(interp.day_level));
printf("Day significance: %s (%d/%d)\n", day_level_name(interp.day_level),
interp.day_level + 1, DAY_SIGNIFICANCE_COUNT);
if (interpretation_deserves_framing(&interp)) {
printf("(a major transit today - worth a deeper Celtic Cross look)\n");
}
@@ -137,6 +139,7 @@ int main(int argc, char **argv) {
printf(" %s natal %s", aspect_display_name(a->type), body_display_name(a->natal_planet));
print_body_in_sign(&reading.natal.bodies[a->natal_planet]);
printf(" (orb %.1f\xc2\xb0, score %.2f)\n", a->orb, item->score);
narrative_print(stdout, " ", a, reading.transits.bodies[a->transiting_planet].house);
}
return 0;
}