feat(02-04): ink compilation pipeline + 4 authored Season-1 Ink files + runtime loader
- scripts/compile-ink.mjs: build-time inklecate runner using bundled binary (BLOCKER 4 — uses node_modules/inklecate/bin, not stale -windows/-mac path strings). Assumption A6 verified first-try on Windows; the same binary path resolution works on macOS + Linux per the wrapper's own getInklecatePath convention. - scripts/compile-ink.test.mjs: 3 Vitest cases proving the compiler runs + emits valid JSON with inkVersion. wipe=false for the test path so it can run in parallel with the ink-loader test without racing on the wipe step. - 4 Season-1 .ink files authored in voice (Lura warmth-anchor, gardener-keeper for compost): lura-arrival.ink, lura-mid.ink, lura-farewell.ink, compost-acknowledgements.ink (rewrite of Plan 02-03 scaffolded version into VAR-driven branch shape consumable by the runtime). - src/content/ink-loader.ts: loadInkStory + bindGardenStateToInk + INK_VARIABLE_MAP. Centralized snake_case slot mapping per Pitfall 4. UTF-8 BOM stripped before Story instantiation. - src/content/ink-loader.test.ts: 8 cases — Story instantiation for all 4 beats, fragment_count binding, Pitfall 4 snake_case enforcement, silent skip for stories missing declared vars. - package.json: build now runs compile:ink first; ci chain runs compile:ink before test so ink-loader.test.ts's precondition check passes. - .gitignore: src/content/compiled-ink/ excluded (regenerated on every build). npm run ci exits 0; 11 new tests green (228 total). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// Lura, farewell beat. After the player's 8th harvest (CONTEXT D-14).
|
||||
//
|
||||
// This is the turn — the place where Lura tells you she's leaving and
|
||||
// why, without explaining it. She is still the warmth anchor: she does
|
||||
// NOT cry, she does NOT tell you to be brave, she does NOT make you the
|
||||
// center of her grief. She is a person with somewhere else to be, who
|
||||
// stopped by long enough to make sure you'd be okay without her, and
|
||||
// who trusts you enough to leave.
|
||||
//
|
||||
// Phase 4+ Lura returns at later Seasons; the door this beat closes is
|
||||
// "Lura at the gate every time you harvest," not Lura herself.
|
||||
|
||||
VAR fragment_count = 0
|
||||
VAR last_plant_type = ""
|
||||
|
||||
== farewell ==
|
||||
|
||||
Eight. That's enough. For now.
|
||||
|
||||
I think we both know what this part is.
|
||||
|
||||
I've been putting something off. I think you're far enough along now that I can stop pretending I'm here for the small reasons. There's a thing I have to go and see for myself, and I don't get to bring you with me, and I don't get to tell you about it before I know.
|
||||
|
||||
You don't need me at the gate every day. You haven't for a while.
|
||||
|
||||
The garden persists. Some of it is mine. Most of it is yours now.
|
||||
|
||||
I'll come back when there's something to bring you. Take your time.
|
||||
|
||||
-> END
|
||||
Reference in New Issue
Block a user