Skip to content

Holocron v1.4.3

Choose a tag to compare

@github-actions github-actions released this 11 May 15:06
· 4 commits to main since this release

Dashboard navigation patch. After v1.4.2 fixed the Briefing tab, clicking Story / People / Galaxy / Workshop tabs crashed the page with Cannot read properties of undefined (reading 'toLocaleString') (and other variants depending on the tab). A wide schema-drift audit found that almost every consumed array shape had drifted in LLM-emitted data.json — scenes used {n, tension} instead of {id, tensionPlanned, actualWords, targetWords}, plot threads used scenes instead of events, foreshadow used {at, of, payload} instead of {seed, plantedAt, payoffAt, status}, structural beats used {scene, beat} instead of {chapterId, name, desc}, factions used stateAtStart instead of state, continuity flags used scene instead of chapterId, subagent runs and timeline both used at instead of date — and so on. Each different drift crashed a different tab.

Fixing the skill spec alone wouldn't have unblocked the user, because the project already had drifted data on disk. The fix is a normalization layer in the dashboard template that maps known drifted keys to schema keys once at load time, before any tab renders.

Added

  • templates/dashboard/index.htmlnormalizeData(d) function that runs once after the JSON loader resolves data.json (and before React mounts). Renames the observed drift patterns for chapters[], recentActivity[], acts.actN.scenes[], plotThreads[], foreshadow[], structuralBeats[], factions[], locations[], forceTraditions[], continuityFlags[], subagentRuns[], timeline[]. Adds sensible defaults for fields the schema requires but a drifted emission may have omitted (chapterId, actualWords, targetWords, empty arrays for anchor / appearance lists). Idempotent — schema-conforming data passes through unchanged. The skill spec's data.schema.json remains the authoritative shape; this layer just stops the cascade of per-tab crashes when a regen drifts.