diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 47231ecb..7c2885d9 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -31,7 +31,7 @@ {"id":"ge-ayd","title":"Skip CI when only Markdown changes","description":"Proposal: Add CI guard so markdown-only changes skip heavy jobs. Implement a lightweight gate job (runs first) that checks the diff for any non-*.md changes; if none, mark success and exit, preventing downstream jobs from running. Keep existing workflows otherwise unchanged; no effect when code/assets/config change. Requires Producer approval before editing workflows.","status":"open","priority":2,"issue_type":"chore","created_at":"2026-01-07T02:11:58.639937258-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:13:13.152947867-08:00"} {"id":"ge-e8j","title":"Flaky E2E: telemetry smoke fails intermittently on touch worker","status":"closed","priority":3,"issue_type":"bug","created_at":"2026-01-06T23:32:43.292579156-08:00","created_by":"rgardler","updated_at":"2026-01-06T23:55:10.393828203-08:00","closed_at":"2026-01-06T23:55:10.393828203-08:00","close_reason":"Resolved via test instrumentation/relaxation","comments":[{"id":5,"issue_id":"ge-e8j","author":"rgardler","text":"Observed intermittent failure in Playwright run (chromium-touch): smoke state not running when expected. Local run produced 1 failing test in the touch worker while desktop workers passed.\n\nSuggested next steps:\n- Increase timeout/waiting logic in tests when asserting Smoke.getState() (race between UI and effect start).\n- Capture console logs and Smoke.getState() earlier to help diagnose timing.\n- Run failing test repeatedly in CI matrix or locally to reproduce flakiness.\n\nFiles touched during this session:\n- jest.config.js (created)\n- jest.setup.js (created)\n- tests/unit/inkrunner.test.js (created)\n- tests/demo.telemetry.spec.ts (created)\n- tests/demo.smoke.spec.ts (modified)\n- web/demo/js/inkrunner.js (modified)\n- package.json (modified)\n- package-lock.json (modified)\n- .beads/issues.jsonl (modified)\n\n","created_at":"2026-01-07T07:32:49Z"},{"id":6,"issue_id":"ge-e8j","author":"rgardler","text":"Flake mitigated by telemetry test relaxation and smoke.js event instrumentation. Smoke emits smoke_state events and test now accepts either state or events. Stress runs on chromium-touch (repeat-each=3) now pass. No further action planned.","created_at":"2026-01-07T07:55:10Z"}]} {"id":"ge-hbd","title":"CI: Verify Playwright demo E2E runs in CI and uploads artifacts on failure","status":"closed","priority":1,"issue_type":"task","assignee":"rgardler","created_at":"2026-01-07T00:22:46.424888216-08:00","created_by":"rgardler","updated_at":"2026-01-07T00:38:40.883482911-08:00","closed_at":"2026-01-07T00:38:40.883482911-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hbd","depends_on_id":"ge-k3p","type":"discovered-from","created_at":"2026-01-07T00:22:46.430418906-08:00","created_by":"rgardler"}],"comments":[{"id":14,"issue_id":"ge-hbd","author":"rgardler","text":"Assigning this follow-up to rgardler to watch the PR checks and verify artifacts are uploaded on failure. Steps: monitor PR #97, review workflow run, confirm test-results/playwright-report artifacts present on failed runs.","created_at":"2026-01-07T08:24:33Z"}]} -{"id":"ge-hch","title":"Dynamic Interactive Story Engine","description":"Build an InkJS-based narrative engine that enables rapid creation of immersive, story-first games, starting with an Ink-powered text-only MVP (M1) and evolving through AI-assisted branching toward a reactive simulated world.\\n\\n- Problem\\n - We need an engine that makes it fast and repeatable to create dynamic, immersive narrative games, with a roadmap toward AI-assisted branching and world reactivity.\\n - The repository currently lacks a clear runtime-ready vertical slice (story runtime + player UX + save/load + runtime telemetry) that can be iterated in small focused loops.\\n\\n- Users\\n - Players: narrative-focused players (15–45 minute sessions) on desktop/mobile browsers.\\n - Creators (internal initially): Producer using AI assistance to generate initial Ink content for demos (future: writers/designers).\\n\\n- Success criteria (M1 / MVP)\\n - Runtime story play: InkJS runtime loads and executes one Ink story end-to-end (branching choices at runtime) with no fatal runtime errors; demo story completes.\\n - Player UX: player can select choices; single-slot save/load works (autosave + manual save).\\n - Performance: first story screen cold start ≤ 8s on desktop browsers and ≤ 12s on mobile browsers (targets are measurable and can be tuned later if needed).\\n - Observability: runtime telemetry events emitted for story start, choice selected, and story completion.\\n - Content: at least 1 AI-generated demo story is included and playable.\\n\\n- Constraints\\n - Runtime: InkJS (Node / browser).\\n - Content source (M1): AI creates demo Ink story content.\\n - Timeline: undefined / not fixed.\\n - Telemetry: must work at runtime (design-time-only telemetry is insufficient).\\n - Ownership: Producer (you) is owner/assignee for this epic.\\n - Non-goals (M1): none specified (explicitly).\\n\\n- Existing state (if applicable)\\n - No existing beads found that represent this engine epic; any current open bead(s) appear unrelated.\\n - No existing runtime Ink integration artifacts were found during high-level scanning (if they exist, Producer should point to the location).\\n\\n- Desired change (if applicable)\\n - Establish the initial “vertical slice” narrative runtime using InkJS (Ink runtime + minimal UI + save/load + runtime telemetry) to enable rapid iteration, and provide a baseline to expand toward AI-assisted branching and, later, a simulated world.\\n\\n- Milestones (suggested; editable)\\n - M0 (Scaffold / smoke demo): browser-based scaffold that can display static text panels and advance pages; basic UI layout works on desktop browsers and mobile.\\n - M1 (MVP): fully scripted, text-only interactive novel using Ink at runtime:\\n - branching choices, save/load (single slot), runtime telemetry, 1 playable demo story.\\n - M1.5 (Content iteration loop): workflow/tooling to rapidly swap stories + basic automated story regression replays (e.g., “golden path” replays).\\n - M2: scripted story with AI-generated branches:\\n - AI proposes branches within constraints; guardrails to prevent incoherent/unsafe output; runtime can integrate generated branches.\\n - M3: basic 2D backgrounds + 3D posed characters:\\n - story beats can trigger staging (background swap, character pose, simple animation cues).\\n - M4: simulated world reacting to player actions while following scripted arc:\\n - world state model + AI adaptation that preserves a high-level authorial arc; player agency feels real while narrative remains guided.\\n - M5 (optional / advanced): richer interaction + systemic characters:\\n - NPC goals/memory, quest/state graphs, and a narrative “director” steering toward story arcs.\\n\\n- Related issues (Beads ids)\\n - None identified as directly related.\\n\\n- Recommended next step\\n - PRD: docs/prd/GDD_M1_dynamic_interactive_story_engine.md\\n\\n- Risks \u0026 assumptions (notes)\\n - Ink runtime integration risk: runtime APIs may require glue code or adaptation.\\n - Telemetry gap: design-time telemetry exists; runtime telemetry may need new plumbing and event schema decisions.\\n - Browser constraints: memory/CPU budgets may force design constraints; early profiling may be needed.\\n - AI-generated content quality/safety: outputs may be incoherent or unsuitable; need guardrails and provenance/versioning later.\\n - Save compatibility: changes to story structure may break existing saves; define expectations early.","status":"in_progress","priority":0,"issue_type":"epic","created_at":"2026-01-03T01:55:07.534717179-08:00","created_by":"rgardler","updated_at":"2026-01-06T03:00:40.794802455-08:00","labels":["Status: Milestones Defined"],"comments":[{"id":22,"issue_id":"ge-hch","author":"rgardler","text":"","created_at":"2026-01-08T01:24:37Z"},{"id":23,"issue_id":"ge-hch","author":"rgardler","text":"","created_at":"2026-01-08T01:24:41Z"}]} +{"id":"ge-hch","title":"Dynamic Interactive Story Engine","description":"Build an InkJS-based narrative engine that enables rapid creation of immersive, story-first games, starting with an Ink-powered text-only MVP (M1) and evolving through AI-assisted branching toward a reactive simulated world.\\n\\n- Problem\\n - We need an engine that makes it fast and repeatable to create dynamic, immersive narrative games, with a roadmap toward AI-assisted branching and world reactivity.\\n - The repository currently lacks a clear runtime-ready vertical slice (story runtime + player UX + save/load + runtime telemetry) that can be iterated in small focused loops.\\n\\n- Users\\n - Players: narrative-focused players (15–45 minute sessions) on desktop/mobile browsers.\\n - Creators (internal initially): Producer using AI assistance to generate initial Ink content for demos (future: writers/designers).\\n\\n- Success criteria (M1 / MVP)\\n - Runtime story play: InkJS runtime loads and executes one Ink story end-to-end (branching choices at runtime) with no fatal runtime errors; demo story completes.\\n - Player UX: player can select choices; single-slot save/load works (autosave + manual save).\\n - Performance: first story screen cold start ≤ 8s on desktop browsers and ≤ 12s on mobile browsers (targets are measurable and can be tuned later if needed).\\n - Observability: runtime telemetry events emitted for story start, choice selected, and story completion.\\n - Content: at least 1 AI-generated demo story is included and playable.\\n\\n- Constraints\\n - Runtime: InkJS (Node / browser).\\n - Content source (M1): AI creates demo Ink story content.\\n - Timeline: undefined / not fixed.\\n - Telemetry: must work at runtime (design-time-only telemetry is insufficient).\\n - Ownership: Producer (you) is owner/assignee for this epic.\\n - Non-goals (M1): none specified (explicitly).\\n\\n- Existing state (if applicable)\\n - No existing beads found that represent this engine epic; any current open bead(s) appear unrelated.\\n - No existing runtime Ink integration artifacts were found during high-level scanning (if they exist, Producer should point to the location).\\n\\n- Desired change (if applicable)\\n - Establish the initial “vertical slice” narrative runtime using InkJS (Ink runtime + minimal UI + save/load + runtime telemetry) to enable rapid iteration, and provide a baseline to expand toward AI-assisted branching and, later, a simulated world.\\n\\n- Milestones (suggested; editable)\\n - M0 (Scaffold / smoke demo): browser-based scaffold that can display static text panels and advance pages; basic UI layout works on desktop browsers and mobile.\\n - M1 (MVP): fully scripted, text-only interactive novel using Ink at runtime:\\n - branching choices, save/load (single slot), runtime telemetry, 1 playable demo story.\\n - M1.5 (Content iteration loop): workflow/tooling to rapidly swap stories + basic automated story regression replays (e.g., “golden path” replays).\\n - M2: scripted story with AI-generated branches:\\n - AI proposes branches within constraints; guardrails to prevent incoherent/unsafe output; runtime can integrate generated branches.\\n - M3: basic 2D backgrounds + 3D posed characters:\\n - story beats can trigger staging (background swap, character pose, simple animation cues).\\n - M4: simulated world reacting to player actions while following scripted arc:\\n - world state model + AI adaptation that preserves a high-level authorial arc; player agency feels real while narrative remains guided.\\n - M5 (optional / advanced): richer interaction + systemic characters:\\n - NPC goals/memory, quest/state graphs, and a narrative “director” steering toward story arcs.\\n\\n- Related issues (Beads ids)\\n - None identified as directly related.\\n\\n- Recommended next step\\n - PRD: docs/prd/GDD_M1_dynamic_interactive_story_engine.md\\n\\n- Risks \u0026 assumptions (notes)\\n - Ink runtime integration risk: runtime APIs may require glue code or adaptation.\\n - Telemetry gap: design-time telemetry exists; runtime telemetry may need new plumbing and event schema decisions.\\n - Browser constraints: memory/CPU budgets may force design constraints; early profiling may be needed.\\n - AI-generated content quality/safety: outputs may be incoherent or unsuitable; need guardrails and provenance/versioning later.\\n - Save compatibility: changes to story structure may break existing saves; define expectations early.","status":"in_progress","priority":0,"issue_type":"epic","created_at":"2026-01-03T01:55:07.534717179-08:00","created_by":"rgardler","updated_at":"2026-01-06T03:00:40.794802455-08:00","labels":["Status: Milestones Defined"],"comments":[{"id":22,"issue_id":"ge-hch","author":"rgardler","text":"","created_at":"2026-01-08T01:24:37Z"},{"id":23,"issue_id":"ge-hch","author":"rgardler","text":"","created_at":"2026-01-08T01:24:41Z"},{"id":24,"issue_id":"ge-hch","author":"rgardler","text":"","created_at":"2026-01-08T03:06:12Z"}]} {"id":"ge-hch.1","title":"M0 — Scaffold / Smoke Demo","description":"M0 — Scaffold / Smoke Demo\\n\\nMinimal browser-based scaffold proving VN-style text UI and a working InkJS dev path.\\n\\n## Scope\\nCreate a small browser-based scaffold that proves the InkJS runtime dev path and produces a smoke demo playable in desktop and mobile browsers. The scaffold should be simple HTML/JS using a fork of InkJS to load and run an Ink story (a short demo story should be included). Suggested repository location: web/ or demo/.\\n\\nThis task is documentation/text-only for the M0 scaffold description. Do not modify Unity project files, .unity scenes, C# source, or binary assets in this issue. If a sibling bead references a code or binary artifact that must be changed, handle that with a discovered-from follow-up bead (do not edit the artifact here).\\n\\n## Success Criteria\\n- Demo loads and executes an Ink story end-to-end in a desktop browser and in a mobile browser viewport (no fatal runtime errors).\\n- Branching choices present and selectable at runtime.\\n- Single-slot save/load implemented and demonstrable (e.g., localStorage or downloadable save file).\\n- Developer instructions included describing how to run the demo locally (example: cd web \u0026\u0026 npm ci \u0026\u0026 npm start or open demo/index.html).\\n- Minimal telemetry hook points are documented (story_start, choice_selected, story_complete). Implementation of telemetry can be deferred to follow-ups, but hooks and example calls must be visible in the demo docs.\\n\\n## Dependencies\\n- None (this is a docs/scaffold definition). Any implementation work that touches code or binaries should be managed by separate follow-up beads.\\n\\n## Deliverables\\n- Updated M0 scaffold description and success criteria (this issue).\\n- Suggested demo location noted (web/ or demo/) and basic developer run instructions.\\n- bd comment (by implementer) listing any doc files updated and a short rationale.","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-03T13:04:51.294401396-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:17:05.53320038-08:00","closed_at":"2026-01-07T02:17:05.53320038-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hch.1","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-03T13:04:51.298188806-08:00","created_by":"rgardler"}]} {"id":"ge-hch.1.2","title":"Project scaffold","description":"Project scaffold: web project container, repo layout guidance, and README.\\n\\n## Acceptance Criteria\\n- docs/InkJS_README.md created (or docs/Unity_README.md replaced) with clear developer guidance for the web demo and InkJS runtime.\\n- Repo layout shows where the M0 web scaffold lives (suggested: web/ or demo/) and how to run it locally.\\n- LFS / binary guidance updated to reflect that Unity binaries are not used for the ink-js path; any legacy Unity artifacts are referenced as archived in history/ if needed.\\n- Any references to Unity editor/version, .unity scenes, Assets/ paths or Unity-specific binary policy are removed from this bead and replaced with InkJS/web guidance.\\n\\n## Minimal Implementation\\n- Create docs/InkJS_README.md containing:\\n - Purpose: InkJS-based dev/demo scaffold for M0.\\n - Repo layout: high-level paths (e.g., web/, stories/, docs/).\\n - Dev run instructions (example):\\n - Run demo locally (if using a simple runner): cd web \u0026\u0026 npm ci \u0026\u0026 npm start\\n - Or, open web/demo/index.html in a browser if no dev server is used.\\n - Demo content: where the demo story lives (e.g., web/stories/demo.ink).\\n - Save/load guidance: single-slot save via localStorage or downloadable save file.\\n - Telemetry hooks: document story_start, choice_selected, story_complete hook locations and example calls (console examples).\\n - Artifact policy: how CI should archive web artifacts; guidance on not committing large binary assets to repo.\\n - Legacy Unity note: if Unity project files exist, document that they are legacy and must be handled via separate follow-ups; point to history/unity-archive/ if archived.\\n\\n- Update this bead (ge-hch.1.2) description to reflect the above and reference docs/InkJS_README.md.\\n\\n## Deliverables\\n- docs/InkJS_README.md (new or replacement)\\n- Updated ge-hch.1.2 description (this bead)\\n- bd comment on ge-hch.1.2 listing any doc file(s) added/changed (paths)\\n- Any required discovered-from follow-up beads created for code/binary artifacts referenced by sibling beads\\n","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-03T20:11:29.903486523-08:00","created_by":"rgardler","updated_at":"2026-01-06T03:00:40.797549705-08:00","closed_at":"2026-01-06T02:45:19.27817597-08:00","dependencies":[{"issue_id":"ge-hch.1.2","depends_on_id":"ge-hch.1","type":"parent-child","created_at":"2026-01-03T20:11:29.930636519-08:00","created_by":"rgardler"}]} {"id":"ge-hch.1.2.1","title":"Implement: Project scaffold","description":"Implement: Project scaffold (InkJS)\\n\\nCreate docs/InkJS_README.md noting InkJS runtime, web project layout, and web dev flow.\\n\\n## Acceptance Criteria\\n- docs/InkJS_README.md is present at docs/InkJS_README.md in the repository.\\n- README documents Node/browser dev flow and steps to run the demo (example: cd web \u0026\u0026 npm ci \u0026\u0026 npm start or open web/demo/index.html).\\n- README documents where the demo Ink stories live (e.g., web/stories/).\\n- Guidance on artifact policy: do not commit large binary assets; legacy Unity files should be archived in history/ if needed.\\n\\n## Minimal Implementation\\n- Add docs/InkJS_README.md with sections: InkJS runtime, repo layout (web/, stories/, docs/), dev run instructions, demo story location, save/load guidance, and a brief legacy Unity note pointing to history/unity-archive/.\\n","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T20:15:57.120564111-08:00","created_by":"rgardler","updated_at":"2026-01-06T03:00:40.799104885-08:00","closed_at":"2026-01-04T13:48:47.345852552-08:00","dependencies":[{"issue_id":"ge-hch.1.2.1","depends_on_id":"ge-hch.1.2","type":"parent-child","created_at":"2026-01-03T20:15:57.142675797-08:00","created_by":"rgardler"}]} @@ -70,9 +70,26 @@ {"id":"ge-hch.1.8.2","title":"Tests: Risk","description":"Tests: Risk - create automated tests (browser unit / integration / E2E) required by feature.\\n\\n## Acceptance Criteria\\n- Tests exist and pass locally and in CI.\\n\\n## Minimal Implementation\\n- Add at least one browser E2E test covering feature behavior.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T20:44:45.853194129-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:14:27.390964391-08:00","closed_at":"2026-01-07T02:14:27.390964391-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hch.1.8.2","depends_on_id":"ge-hch.1.8","type":"parent-child","created_at":"2026-01-03T20:44:45.854214358-08:00","created_by":"rgardler"}]} {"id":"ge-hch.1.8.3","title":"Docs: Risk","description":"Docs: Risk - write short runbook/docs.\\n\\n## Acceptance Criteria\\n- Docs explain how to run, test, and validate the feature.\\n\\n## Minimal Implementation\\n- Add section to docs or feature README.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-03T20:44:45.904222604-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:14:28.008257195-08:00","closed_at":"2026-01-07T02:14:28.008257195-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hch.1.8.3","depends_on_id":"ge-hch.1.8","type":"parent-child","created_at":"2026-01-03T20:44:45.905057899-08:00","created_by":"rgardler"}]} {"id":"ge-hch.2","title":"M0 — Scaffold / Smoke Demo","description":"M0 — Scaffold / Smoke Demo\n\nMinimal browser-based scaffold proving VN-style text UI and a working InkJS dev path. Success criteria: demo loads and executes an Ink story end-to-end in desktop/mobile viewport; branching choices selectable; single-slot save/load; developer run instructions; telemetry hook points documented.","status":"tombstone","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:23:57.819369354-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:40:50.921496195-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.2","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:23:57.871837545-08:00","created_by":"rgardler"}],"deleted_at":"2026-01-07T17:40:50.921496195-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"epic"} -{"id":"ge-hch.3","title":"M1 — MVP: Ink runtime + UI + save/load + telemetry + demo story","description":"M1 — MVP: Ink runtime + UI + save/load + telemetry + 1 demo story\\n\\nDeliver a playable text-only interactive novel using InkJS at runtime with branching choices, single-slot save/load, runtime telemetry, and at least one AI-generated demo story.\\n\\nSuccess criteria: runtime story end-to-end with no fatal errors; player choice selection; save/load demonstrable; telemetry events emitted; AI demo story included.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:00.942344426-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:00.942344426-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.3","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:00.94438965-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3","depends_on_id":"ge-hch.2","type":"blocks","created_at":"2026-01-07T17:24:30.264400437-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3","title":"M1 — MVP: Ink runtime + UI + save/load + telemetry + demo story","description":"M1 — MVP: Ink runtime + UI + save/load + telemetry + 1 demo story\\n\\nDeliver a playable text-only interactive novel using InkJS at runtime with branching choices, single-slot save/load, runtime telemetry, and at least one AI-generated demo story.\\n\\nSuccess criteria: runtime story end-to-end with no fatal errors; player choice selection; save/load demonstrable; telemetry events emitted; AI demo story included.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:00.942344426-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:00.942344426-08:00","labels":["Status: Plan Created","milestone"],"dependencies":[{"issue_id":"ge-hch.3","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:00.94438965-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3","depends_on_id":"ge-hch.2","type":"blocks","created_at":"2026-01-07T17:24:30.264400437-08:00","created_by":"rgardler"}],"comments":[{"id":25,"issue_id":"ge-hch.3","author":"rgardler","text":"Plan: Agent story generation + Discord telemetry emitter\n\nCreated features/tasks:\n- ge-hch.5.1 Agent: Story Author (Ink)\n - ge-hch.5.1.1 Docs: Agent spec (Story Author)\n - ge-hch.5.1.2 Implement: Story Author harness\n - ge-hch.5.1.3 Tests: Generated story validation\n- ge-hch.3.1 Implement: Telemetry Discord emitter (webhook)\n- ge-hch.5.2 Secure: Telemetry webhook secret storage\n\nDecisions made:\n- Static demo will be deployed to GitHub Pages (no file:// runs).\n- LLM provider: OpenAI-compatible endpoint; agent must support configurable endpoint.\n- Telemetry will POST Discord rich embeds to provided webhook (initially unsecured). A follow-up bead (ge-hch.5.2) tracks securing it.\n\nFiles referenced/created by this plan:\n- history/plan_ge-hch.3_agent_story_gen.md (this file)\n- history/ai/agent-story-author.md (spec task will create)\n- web/stories/generated/ (target for generated stories)\n\nOpen Questions:\n- LLM credentials: will use online authentication (GitHub Copilot + OpenAI compatible endpoint). Confirm CI secret names: OPENAI_API_KEY, TELEMETRY_WEBHOOK.\n- Discord webhook message embeds: format designed by Build; confirm if additional fields required.\n","created_at":"2026-01-08T03:38:12Z"}]} +{"id":"ge-hch.3.1","title":"Implement: Telemetry Discord emitter (webhook)","description":"Implement a Telemetry emitter that posts runtime telemetry events to a Discord webhook with rich embeds. Telemetry should default to console but support Telemetry.backendUrl = \u003cwebhook\u003e and window.Telemetry.enabled toggle.\\n\\n## Acceptance Criteria\\n- Implementation in web/demo/js/telemetry.discord.js or extension to telemetry.js.\\n- Posts story_start, choice_selected, smoke_triggered, story_complete as Discord embeds.\\n- Tests stub network and assert POST payload shape.\\n- Create follow-up bead under ge-hch.5 to secure webhook (store in CI secrets).\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:38:03.67876324-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:38:03.67876324-08:00","dependencies":[{"issue_id":"ge-hch.3.1","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:38:03.679644099-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.1","depends_on_id":"ge-hch.5.2","type":"blocks","created_at":"2026-01-07T19:46:05.973792182-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.1","depends_on_id":"ge-hch.5.3","type":"blocks","created_at":"2026-01-07T19:46:10.363993725-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.1.1","title":"Docs: telemetry embed schema","description":"Design the Discord embed format for telemetry events and document payload schema, fields, and examples. Place in docs/telemetry/discord_embed.md.\\n\\n## Acceptance Criteria\\n- docs/telemetry/discord_embed.md exists with embed examples for each event.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:38.8587786-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:38.8587786-08:00","dependencies":[{"issue_id":"ge-hch.3.1.1","depends_on_id":"ge-hch.3.1","type":"parent-child","created_at":"2026-01-07T19:42:38.861300925-08:00","created_by":"rgardler"}],"comments":[{"id":27,"issue_id":"ge-hch.3.1.1","author":"rgardler","text":"Telemetry embed schema (inlined into bead ge-hch.3.1.1)\n\nPurpose\n- Define rich Discord embed payloads for runtime telemetry events and provide testable payload examples.\n\nEmbed conventions\n- Use embed title, description, fields[], color, footer.\n- Footer should include session_id and timestamp (minimum). Include story version/branch in footer when available for provenance.\n\nEvent examples\n1) story_start\n- embed.title: \"Story Start — \u003cstory title\u003e\"\n- embed.fields: [{name: \"Session\", value: \u003csession_id\u003e}, {name: \"Author\", value: \u003cauthor\u003e}]\n- embed.footer: {text: \"session:\u003csession_id\u003e • ts:\u003cISO timestamp\u003e • ver:\u003cstory_version\u003e\"}\n\n2) choice_selected\n- embed.title: \"Choice Selected\"\n- embed.description: \u003cchoice_text\u003e\n- embed.fields: [{name: \"ChoiceIndex\", value: \"\u003cindex\u003e\"}, {name: \"Node\", value: \"\u003cnode_id\u003e\"}]\n- embed.footer: session + timestamp\n\n3) smoke_triggered\n- embed.title: \"Smoke Triggered\"\n- embed.fields: [{name: \"Tag\", value: \"smoke_trigger\"}, {name: \"Duration\", value: \"3s\"}, {name: \"Intensity\", value: \"medium\"}]\n- embed.footer: session + timestamp\n\n4) story_complete\n- embed.title: \"Story Complete — \u003cstory title\u003e\"\n- embed.fields: [{name: \"Duration\", value: \"\u003cms\u003e\"}, {name: \"ChoicesTaken\", value: \"\u003ccount\u003e\"}]\n- embed.footer: session + timestamp + ver\n\nPayload shape (POST to webhook)\n- { \"embeds\": [ \u003cembed-object\u003e ] }\n\nRate limiting\n- Batch events when possible; avoid spamming the webhook. Implement basic rate-limit backoff (exponential) on 429.\n\nLocal testing\n- Provide a stubbed local endpoint or use Playwright fetch interception to assert payload contents.\n\nSecurity\n- Do not commit webhook in code; use TELEMETRY_WEBHOOK secret. Rotate regularly and store in CI secrets.\n","created_at":"2026-01-08T03:53:32Z"}]} +{"id":"ge-hch.3.1.2","title":"Tests: Telemetry emitter (stub network)","description":"Create tests that stub network requests and assert Discord webhook POST payloads for telemetry events (story_start, choice_selected, smoke_triggered, story_complete).\\n\\n## Acceptance Criteria\\n- tests/telemetry.emitter.spec.ts exists and stubs fetch/XHR to validate payload shape and embed fields.\\n- CI runs these tests and they pass.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:45:37.856163747-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:45:37.856163747-08:00","dependencies":[{"issue_id":"ge-hch.3.1.2","depends_on_id":"ge-hch.3.1","type":"parent-child","created_at":"2026-01-07T19:45:37.859478856-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.2","title":"Feature: Stable story integration","description":"Ensure the stable demo story is the fallback and is packaged alongside generated stories.\\n\\n## Acceptance Criteria\\n- Stable story present at web/stories/demo.ink and referenced by README/manifest.\\n- Playwright and unit tests pass using stable story.\\n\\n## Minimal Implementation\\n- Confirm location and update docs/InkJS_README.md to document the stable story and how to swap in generated ones.\\n","status":"open","priority":2,"issue_type":"feature","created_at":"2026-01-07T19:42:28.644251263-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:28.644251263-08:00","dependencies":[{"issue_id":"ge-hch.3.2","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:42:28.64606758-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.2","depends_on_id":"ge-hch.3.4","type":"blocks","created_at":"2026-01-07T19:45:49.82618952-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.2.1","title":"Docs: stable story \u0026 swap workflow","description":"Document where the stable story lives (web/stories/demo.ink), and how to swap in generated stories (file layout, manifest, and example command).\\n\\n## Acceptance Criteria\\n- docs/InkJS_README.md updated with stable story section and swap workflow.\\n- Example commands provided to swap stories and trigger validate-story.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:48.733218318-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:48.733218318-08:00","dependencies":[{"issue_id":"ge-hch.3.2.1","depends_on_id":"ge-hch.3.2","type":"parent-child","created_at":"2026-01-07T19:42:48.735196919-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.2.2","title":"Tests: stable story sanity test","description":"Add a Playwright test that runs the stable demo story and asserts completion and telemetry emissions.\\n\\n## Acceptance Criteria\\n- tests/demo.stable.spec.ts exists and passes locally.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:51.060849315-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:51.060849315-08:00","dependencies":[{"issue_id":"ge-hch.3.2.2","depends_on_id":"ge-hch.3.2","type":"parent-child","created_at":"2026-01-07T19:42:51.062074565-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.3","title":"Implement: GitHub Pages deploy for static demo","description":"Add GitHub Actions workflow to deploy web/demo static output to GitHub Pages (branch or docs/).\\n\\n## Acceptance Criteria\\n- .github/workflows/gh-pages.yml exists to build (if needed) and deploy web/demo to GitHub Pages.\\n- Docs updated describing how to access the pages URL.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:31.306809853-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:31.306809853-08:00","dependencies":[{"issue_id":"ge-hch.3.3","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:42:31.307589419-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.4","title":"Tool: validate-story (ink parse + runtime smoke)","description":"Create a validate-story script that ensures any .ink file parses under InkJS and that the runtime can reach first choice. Used in CI for generated/stable stories.\\n\\n## Acceptance Criteria\\n- scripts/validate-story.js exists and exits non-zero on parse/runtime failure.\\n- CI hook runs this script against web/stories/*.ink.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:33.606187788-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:33.606187788-08:00","dependencies":[{"issue_id":"ge-hch.3.4","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:42:33.609684247-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.5","title":"Implement: package.json scripts (start/build/validate/test)","description":"Add npm scripts to run dev server, build static output, run validate-story, and run tests.\\n\\n## Acceptance Criteria\\n- package.json scripts: start, build, validate-story, test are present.\\n- Docs updated with commands.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:53.712420193-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:53.712420193-08:00","dependencies":[{"issue_id":"ge-hch.3.5","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:42:53.713310043-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.3.6","title":"CI: Build + validate + Playwright (PR)","description":"Update CI workflows to run: npm build, scripts/validate-story against web/stories, package artifact, run Playwright E2E tests against built artifact, and (optionally) deploy to GitHub Pages on merge.\\n\\n## Acceptance Criteria\\n- .github/workflows/pr-ci.yml updated/added to run build + validate + Playwright on PRs.\\n- CI artifacts archived for Playwright runs and GitHub Pages deploy.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:45:40.535363424-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:45:40.535363424-08:00","dependencies":[{"issue_id":"ge-hch.3.6","depends_on_id":"ge-hch.3","type":"parent-child","created_at":"2026-01-07T19:45:40.539250533-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.6","depends_on_id":"ge-hch.3.5","type":"blocks","created_at":"2026-01-07T19:45:58.315417759-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.6","depends_on_id":"ge-hch.3.4","type":"blocks","created_at":"2026-01-07T19:46:00.441977661-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.3.6","depends_on_id":"ge-hch.3.3","type":"blocks","created_at":"2026-01-07T19:46:03.024294382-08:00","created_by":"rgardler"}]} {"id":"ge-hch.4","title":"M1.5 — Content iteration tooling \u0026 replay regression","description":"M1.5 — Content iteration tooling \u0026 replay regression\\n\\nProvide tooling and workflows to rapidly swap stories, run replay tests (golden path), and enable fast content iteration for authors and AI content generation.\\n\\n## Success Criteria\\n- Tooling exists to replace demo story and load new stories without code changes.\\n- Automated replay harness can run and validate golden-path story completion for at least one story.\\n- Documentation for content-iteration workflow and example commands.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:07.829287373-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:07.829287373-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.4","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:07.83307893-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.4","depends_on_id":"ge-hch.3","type":"blocks","created_at":"2026-01-07T17:24:30.333029896-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.4.1","title":"Tool: replay harness (golden-path)","description":"Add a headless replay harness that can drive a story to completion using scripted choices and record results.\\n\\n## Acceptance Criteria\\n- scripts/replay.js exists and can be fed a story + choice sequence and returns success/failure.\\n- Example golden-path script present for stable demo.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:42:36.286010273-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:42:36.286010273-08:00","dependencies":[{"issue_id":"ge-hch.4.1","depends_on_id":"ge-hch.4","type":"parent-child","created_at":"2026-01-07T19:42:36.28684834-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.4.1","depends_on_id":"ge-hch.3.5","type":"blocks","created_at":"2026-01-07T19:45:52.014164579-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.4.1","depends_on_id":"ge-hch.3.4","type":"blocks","created_at":"2026-01-07T19:45:54.159316111-08:00","created_by":"rgardler"}]} {"id":"ge-hch.5","title":"M2 — AI-assisted branching integration","description":"M2 — AI-assisted branching integration\\n\\nIntegrate AI-assisted branch proposal into the runtime, with guardrails and review flow to prevent incoherent or unsafe branches. Include runtime hooks and a validation path for generated content.\\n\\n## Success Criteria\\n- Runtime can accept AI-proposed branches and integrate them into the active story without fatal errors.\\n- Guardrail/validation pipeline prevents unsafe or incoherent branches from reaching the runtime (policy, sanitization, or human-in-loop).\\n- At least one story includes AI-generated branches validated by the pipeline.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:12.344698378-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:12.344698378-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.5","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:12.349824492-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.5","depends_on_id":"ge-hch.4","type":"blocks","created_at":"2026-01-07T17:24:30.408356193-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.5.1","title":"Agent: Story Author (Ink)","description":"Define and implement a Story Author agent that generates valid Ink (.ink) stories suitable for runtime execution and automated testing.\\n\\n## Acceptance Criteria\\n- Generates a .ink file that parses with InkJS with no fatal errors.\\n- Includes metadata manifest (title, author, prompt, version).\\n- Emits telemetry tags/Ink markers required by M1 (story_start, choice_selected, smoke_trigger).\\n- Output placed at web/stories/generated/\u003cname\u003e.ink and web/stories/generated/\u003cname\u003e.json.\\n\\n## Minimal Implementation\\n- Agent spec (history/ai/agent-story-author.md).\\n- Test harness that runs the agent, validates parse via InkJS, and runs the golden-path smoke test.\\n\\n## Dependencies\\n- Access to an OpenAI-compatible endpoint (configurable).\\n- inkjs runner \u0026 test harness (existing).\\n\\n## Deliverables\\n- history/ai/agent-story-author.md, web/stories/generated/*, tests for validation.\\n","status":"open","priority":2,"issue_type":"feature","created_at":"2026-01-07T19:37:54.162109871-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:37:54.162109871-08:00","dependencies":[{"issue_id":"ge-hch.5.1","depends_on_id":"ge-hch.5","type":"parent-child","created_at":"2026-01-07T19:37:54.16558813-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.5.1","depends_on_id":"ge-hch.3.4","type":"blocks","created_at":"2026-01-07T19:45:42.779141862-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.5.1","depends_on_id":"ge-hch.5.3","type":"blocks","created_at":"2026-01-07T19:46:06.489939062-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.5.1.1","title":"Docs: Agent spec (Story Author)","description":"Write agent spec describing prompts, input/output contracts, validation steps, deterministic seed option, and example prompt templates. Place file at history/ai/agent-story-author.md.\\n\\n## Acceptance Criteria\\n- history/ai/agent-story-author.md created and added to repo.\\n- Includes example prompt, manifest schema, and validation steps.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:37:56.434034075-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:37:56.434034075-08:00","dependencies":[{"issue_id":"ge-hch.5.1.1","depends_on_id":"ge-hch.5.1","type":"parent-child","created_at":"2026-01-07T19:37:56.434980367-08:00","created_by":"rgardler"}],"comments":[{"id":26,"issue_id":"ge-hch.5.1.1","author":"rgardler","text":"Agent spec (inlined into bead ge-hch.5.1.1)\n\nPurpose\n- Provide a clear, machine-readable contract for an autonomous Story Author agent that emits valid Ink (.ink) stories plus a companion manifest.\n\nInputs\n- Prompt template(s): supports both Short and Long templates. Prompts should include explicit guardrails (max length, allowed tags, prohibited content).\n- Optional seed: numeric seed for deterministic generation.\n- Config: temperature (default 0.6), max_tokens, model endpoint (OpenAI-compatible URL), provenance fields (author, branch).\n\nOutput contract\n- Primary artifact: web/stories/generated/\u003cslug\u003e.ink (Ink file). Requirements:\n - Must begin with a metadata header (Ink comment lines or special tag) containing: title, author, version, seed.\n - Include telemetry tags at logical points: e.g., // @telemetry:story_start, // @telemetry:choice_selected, // @telemetry:smoke_trigger\n - Use clear choice markers so InkJS renders choices normally.\n- Companion manifest JSON: web/stories/generated/\u003cslug\u003e.json with schema:\n - { title: string, author: string, prompt: string, seed: number, version: string, safe_rating: string }\n\nValidation steps (agent harness)\n1) Parse run: use InkJS parser/load to ensure no parse errors.\n2) Runtime smoke: load the story in a minimal runner to ensure it reaches first choice and that telemetry tags exist.\n3) Golden-path test: the generated story should complete in a scripted run or at least reach a defined end-state without exceptions (optional for first pass).\n\nDeterminism \u0026 seeding\n- Agent must support deterministic mode: given the same prompt + seed + model config, output should be repeatable.\n- The seed value is recorded in manifest.\n\nSafety and guardrails\n- Output must be post-processed to remove content violating safety constraints. Agent must include a sanitization pass and a safety rating in manifest.\n\nExample prompt templates\n- Short template (recommended default):\n Write a short interactive Ink story (~200-400 words) suitable for browser play. Include branching choices (2-3 choices) and insert telemetry markers: // @telemetry:story_start at the start, // @telemetry:choice_selected before each choice, and // @telemetry:smoke_trigger as a tag on a single passage. Output only a single .ink file content.\n\n- Long template (detailed):\n You are an Ink author. Create a 5-8 node interactive story suitable for a 10-15 minute play session. Include: a title, 2-3 branching choices per decision point, an explicit passage marked with // @telemetry:smoke_trigger (include duration=3s and intensity=medium as a comment), and ensure all choices are labeled for machine parsing. Keep language safe for ages 13+. Return only the Ink source and ensure it compiles.\n\nTesting expectations\n- Unit tests validate manifest schema and presence of telemetry tags.\n- E2E tests run validate-story then run the replay harness if provided.\n\nAgent run CLI\n- scripts/generate_story.js --template short|long --seed 1234 --out web/stories/generated\n\nOpen questions\n- Model selection: default to OpenAI-compatible endpoint with online auth. Confirm model families allowed.\n\n","created_at":"2026-01-08T03:53:03Z"}]} +{"id":"ge-hch.5.1.2","title":"Implement: Story Author harness","description":"Create a harness that runs the Story Author agent, writes output to web/stories/generated/, validates Ink parse with InkJS, and triggers the inkrunner golden-path test.\\n\\n## Acceptance Criteria\\n- Script exists (scripts/generate_story.js or similar).\\n- Generated files placed under web/stories/generated/.\\n- Validation step runs inkjs load and fails on parse/runtime errors.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:37:58.747209456-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:37:58.747209456-08:00","dependencies":[{"issue_id":"ge-hch.5.1.2","depends_on_id":"ge-hch.5.1","type":"parent-child","created_at":"2026-01-07T19:37:58.748527006-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.5.1.2","depends_on_id":"ge-hch.5.3","type":"blocks","created_at":"2026-01-07T19:45:44.836804565-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.5.1.2","depends_on_id":"ge-hch.3.5","type":"blocks","created_at":"2026-01-07T19:45:47.069170091-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.5.1.3","title":"Tests: Generated story validation","description":"Add unit/E2E tests that assert generated stories parse and run: tests/generated.story.validation.test.js (Jest) and tests/generated.story.e2e.spec.ts (Playwright).\\n\\n## Acceptance Criteria\\n- Tests exist and pass locally.\\n- CI will be configured to run validation on agent outputs.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:38:01.28353119-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:38:01.28353119-08:00","dependencies":[{"issue_id":"ge-hch.5.1.3","depends_on_id":"ge-hch.5.1","type":"parent-child","created_at":"2026-01-07T19:38:01.284400673-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.5.2","title":"Secure: Telemetry webhook secret storage","description":"Create a bead to track securing the Discord webhook: CI secret creation, docs on local dev handling, and rotation plan.\\n\\n## Acceptance Criteria\\n- Bead documents where to store webhook (GitHub Actions secrets) and how to reference it in CI as TELEMETRY_WEBHOOK.\\n- Docs: docs/security/telemetry-webhook.md with minimal guidance.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:38:05.859182155-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:38:05.859182155-08:00","dependencies":[{"issue_id":"ge-hch.5.2","depends_on_id":"ge-hch.5","type":"parent-child","created_at":"2026-01-07T19:38:05.860089122-08:00","created_by":"rgardler"}]} +{"id":"ge-hch.5.3","title":"Secure: LLM API key storage","description":"Track storing the OpenAI-compatible API key in CI secrets and local dev guidance.\\n\\n## Acceptance Criteria\\n- CI secret name documented (OPENAI_API_KEY).\\n- docs/security/llm_api_key.md created with guidance for local auth and GitHub Actions.\\n","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T19:44:15.042691181-08:00","created_by":"rgardler","updated_at":"2026-01-07T19:44:15.042691181-08:00","dependencies":[{"issue_id":"ge-hch.5.3","depends_on_id":"ge-hch.5","type":"parent-child","created_at":"2026-01-07T19:44:15.044559498-08:00","created_by":"rgardler"}]} {"id":"ge-hch.6","title":"M3 — Basic staging (backgrounds \u0026 posed characters)","description":"M3 — Basic staging (backgrounds \u0026 posed characters)\\n\\nSupport simple staging features: background swaps, character pose changes, and simple animation cues triggered by story beats.\\n\\n## Success Criteria\\n- Story runtime can trigger background and character pose updates without breaking playback.\\n- Example assets and a small scene are included demonstrating staging cues.\\n- Integration document showing how story annotations map to staging events.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:16.971490472-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:16.971490472-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.6","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:16.973432996-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.6","depends_on_id":"ge-hch.5","type":"blocks","created_at":"2026-01-07T17:24:30.462242575-08:00","created_by":"rgardler"}]} {"id":"ge-hch.7","title":"M4 — Reactive simulated world \u0026 state model","description":"M4 — Reactive simulated world \u0026 state model\\n\\nIntroduce a lightweight world state model and adaptivity so the runtime can react to player actions while following a scripted arc.\\n\\n## Success Criteria\\n- A minimal world state representation exists and persists across sessions.\\n- Runtime demonstrates adaptive responses to player actions in one example story while maintaining authorial constraints.\\n- Documentation on world-state model and how story components read/update it.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:20.158267009-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:20.158267009-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.7","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:20.15948565-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.7","depends_on_id":"ge-hch.6","type":"blocks","created_at":"2026-01-07T17:24:30.548572825-08:00","created_by":"rgardler"}]} {"id":"ge-hch.8","title":"M5 — Systemic NPCs and narrative director (optional)","description":"M5 — Systemic NPCs and narrative director (optional)\\n\\nImplement NPC goals/memory and a simple narrative director that steers scenes toward author-defined arcs while allowing NPC autonomy.\\n\\n## Success Criteria\\n- NPCs have simple goal/memory state and influence world state.\\n- A basic director system can prioritize story beats while allowing NPC-driven events.\\n- Example scenario demonstrating NPC behavior affecting available story branches.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:24:25.266277575-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:24:25.266277575-08:00","labels":["milestone"],"dependencies":[{"issue_id":"ge-hch.8","depends_on_id":"ge-hch","type":"parent-child","created_at":"2026-01-07T17:24:25.267333825-08:00","created_by":"rgardler"},{"issue_id":"ge-hch.8","depends_on_id":"ge-hch.7","type":"blocks","created_at":"2026-01-07T17:24:30.619103533-08:00","created_by":"rgardler"}]} diff --git a/history/plan_ge-hch.3_agent_story_gen.md b/history/plan_ge-hch.3_agent_story_gen.md new file mode 100644 index 00000000..b9bdd8f4 --- /dev/null +++ b/history/plan_ge-hch.3_agent_story_gen.md @@ -0,0 +1,23 @@ +Plan: Agent story generation + Discord telemetry emitter + +Created features/tasks: +- ge-hch.5.1 Agent: Story Author (Ink) + - ge-hch.5.1.1 Docs: Agent spec (Story Author) + - ge-hch.5.1.2 Implement: Story Author harness + - ge-hch.5.1.3 Tests: Generated story validation +- ge-hch.3.1 Implement: Telemetry Discord emitter (webhook) +- ge-hch.5.2 Secure: Telemetry webhook secret storage + +Decisions made: +- Static demo will be deployed to GitHub Pages (no file:// runs). +- LLM provider: OpenAI-compatible endpoint; agent must support configurable endpoint. +- Telemetry will POST Discord rich embeds to provided webhook (initially unsecured). A follow-up bead (ge-hch.5.2) tracks securing it. + +Files referenced/created by this plan: +- history/plan_ge-hch.3_agent_story_gen.md (this file) +- history/ai/agent-story-author.md (spec task will create) +- web/stories/generated/ (target for generated stories) + +Open Questions: +- LLM credentials: will use online authentication (GitHub Copilot + OpenAI compatible endpoint). Confirm CI secret names: OPENAI_API_KEY, TELEMETRY_WEBHOOK. +- Discord webhook message embeds: format designed by Build; confirm if additional fields required.