From 6d38303542fda10e700dc15a6a43a4cb664635bb Mon Sep 17 00:00:00 2001 From: Ross Gardler Date: Wed, 7 Jan 2026 17:24:43 -0800 Subject: [PATCH 1/2] bd sync: 2026-01-07 17:24:43 --- .beads/issues.jsonl | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 68d37e8b..5d9328e7 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,5 +1,5 @@ {"id":"ge-1qd","title":"Track .beads/issues.jsonl in repo to enable bd sync","status":"closed","priority":1,"issue_type":"chore","created_at":"2026-01-03T00:38:09.856060926-08:00","created_by":"rgardler","updated_at":"2026-01-03T01:36:09.196632851-08:00","closed_at":"2026-01-03T01:36:09.196632851-08:00"} -{"id":"ge-1x8","title":"Wrap-up: handoff notes and follow-ups (telemetry \u0026 CI)","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T01:23:49.255685142-08:00","created_by":"rgardler","updated_at":"2026-01-07T01:23:49.255685142-08:00","dependencies":[{"issue_id":"ge-1x8","depends_on_id":"ge-hch.1.6","type":"discovered-from","created_at":"2026-01-07T01:23:49.267228872-08:00","created_by":"rgardler"}]} +{"id":"ge-1x8","title":"Wrap-up: handoff notes and follow-ups (telemetry \u0026 CI)","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-07T01:23:49.255685142-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:20:17.460720304-08:00","closed_at":"2026-01-07T02:20:17.460720304-08:00","close_reason":"Closed","dependencies":[{"issue_id":"ge-1x8","depends_on_id":"ge-hch.1.6","type":"discovered-from","created_at":"2026-01-07T01:23:49.267228872-08:00","created_by":"rgardler"}]} {"id":"ge-2cw","title":"Implement: save/load single-slot","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-05T23:10:10.678709101-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:16:09.173674006-08:00","closed_at":"2026-01-07T02:16:09.173674006-08:00","close_reason":"Closed","dependencies":[{"issue_id":"ge-2cw","depends_on_id":"ge-hch.1.2.2","type":"discovered-from","created_at":"2026-01-05T23:10:10.680548961-08:00","created_by":"rgardler"}],"comments":[{"id":21,"issue_id":"ge-2cw","author":"rgardler","text":"Wrap-up note: session ended; save/load single-slot work remains in_progress. Ensure tests for save/load are included in play-mode test plan (ge-hch.1.7).","created_at":"2026-01-07T09:23:49Z"}]} {"id":"ge-2l3","title":"Add root README.md","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T15:07:40.976724877-08:00","created_by":"rgardler","updated_at":"2026-01-06T15:10:16.026352254-08:00","closed_at":"2026-01-06T15:10:16.026352254-08:00","close_reason":"Done"} {"id":"ge-37f","title":"Unit tests: inkrunner core","description":"Jest unit tests for inkrunner core functions: appendText, renderChoices, handleTags, save/load.\\n\\nAcceptance criteria:\\n- Jest tests covering appendText, renderChoices, handleTags, save/load are added under tests/unit.\\n- Tests run locally with npm test and pass.\\n- CI runs these tests and they pass in PR.","status":"closed","priority":1,"issue_type":"task","assignee":"rgardler","created_at":"2026-01-06T23:08:51.310245756-08:00","created_by":"rgardler","updated_at":"2026-01-07T00:05:37.443487481-08:00","closed_at":"2026-01-07T00:05:37.443487481-08:00","close_reason":"Completed","comments":[{"id":4,"issue_id":"ge-37f","author":"rgardler","text":"Added unit tests (tests/unit/inkrunner.test.js), Jest config, Playwright E2E test (tests/demo.telemetry.spec.ts), and small demo runner changes. Local npm test passed (unit + demo). See files changed in commit.","created_at":"2026-01-07T07:30:57Z"},{"id":7,"issue_id":"ge-37f","author":"rgardler","text":"Telemetry flake resolved: smoke.js now emits smoke_state events; telemetry test accepts either running/remaining/duration or smoke events. Stress-run on chromium-touch repeat-each=3 passes. npm test (unit + demo) passing.","created_at":"2026-01-07T07:55:20Z"},{"id":8,"issue_id":"ge-37f","author":"rgardler","text":"Opened PR #96 (Add inkrunner unit tests and stabilize telemetry smoke). Contains jest/jsdom unit tests for inkrunner, smoke.js instrumentation emitting smoke_state events, and telemetry Playwright test stabilization. npm test passes (unit + demo).","created_at":"2026-01-07T07:56:54Z"},{"id":9,"issue_id":"ge-37f","author":"rgardler","text":"Unit tests for inkrunner core verified locally (npm test). Coverage: appendText, renderChoices (click/touch), handleTags (smoke trigger), saveState, loadState. Tests present at tests/unit/inkrunner.test.js; runtime demo e2e also ran (playwright). No code changes made in this session. Closing this bead as completed for the unit test acceptance criteria.","created_at":"2026-01-07T08:01:07Z"},{"id":10,"issue_id":"ge-37f","author":"rgardler","text":"PR #96 merged. All work landed on main. Follow-up bead ge-k3p covers CI for Playwright E2E.","created_at":"2026-01-07T08:04:32Z"}]} @@ -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"} +{"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.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"}]} @@ -69,8 +69,15 @@ {"id":"ge-hch.1.8.1","title":"Implement: Risk","description":"Implement: Risk - code, prefabs, editor scripts as required.\\n\\n## Acceptance Criteria\\n- Implementation produces the minimal functionality described in the feature acceptance criteria.\\n\\n## Minimal Implementation\\n- Deliver the smallest end-to-end code required.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T20:44:45.80003094-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:14:27.180099272-08:00","closed_at":"2026-01-07T02:14:27.180099272-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hch.1.8.1","depends_on_id":"ge-hch.1.8","type":"parent-child","created_at":"2026-01-03T20:44:45.801328409-08:00","created_by":"rgardler"}]} {"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":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:23:57.819369354-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:23:57.819369354-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"}]} +{"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.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.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.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"}]} {"id":"ge-k3p","title":"CI: Playwright E2E workflow","description":"Add GitHub Actions workflow to run Playwright E2E (demo) on PRs and main.\\n\\n## Scope\\n- CI job to install dependencies (npm ci) and Playwright browsers (npx playwright install).\\n- Run npm run test:unit and npm run test:demo (start-server-and-test) on linux runner.\\n- Upload Playwright artifacts (videos, traces, screenshots) on failure.\\n- Trigger on pull_request to main and push to main; allow workflow_dispatch.\\n- Keep runtime reasonable (consider single-project run on PR, full matrix optional on main).\\n\\n## Acceptance Criteria\\n- Workflow file exists in .github/workflows and runs successfully in CI.\\n- Playwright browsers installed via npx playwright install (with deps).\\n- npm run test:unit and npm run test:demo succeed in CI or fail the build.\\n- Artifacts (test-results) uploaded on failure for debugging.\\n","status":"closed","priority":1,"issue_type":"chore","created_at":"2026-01-07T00:02:19.895681457-08:00","created_by":"rgardler","updated_at":"2026-01-07T00:44:21.9279524-08:00","closed_at":"2026-01-07T00:44:21.9279524-08:00","close_reason":"Closed","comments":[{"id":11,"issue_id":"ge-k3p","author":"rgardler","text":"Added GitHub Actions workflow .github/workflows/playwright.yml: checkout, setup-node 20 with npm cache, npm ci, npx playwright install --with-deps, npm run test:unit, npm run test:demo, upload artifacts on failure. Local run: npm test (unit + demo) passing.","created_at":"2026-01-07T08:18:39Z"},{"id":12,"issue_id":"ge-k3p","author":"rgardler","text":"Opened PR https://github.com/TheWizardsCode/GEngine/pull/97 for Playwright CI workflow. Summary: checkout, setup-node 20 with npm cache, npm ci, npx playwright install --with-deps, npm run test:unit, npm run test:demo, upload artifacts on failure. Local: npm test passed.","created_at":"2026-01-07T08:19:11Z"},{"id":13,"issue_id":"ge-k3p","author":"rgardler","text":"Wrap-up by Ship (DevOps AI):\\n- Verified branch: ge-k3p/playwright-ci (tracked to origin).\\n- Ran unit tests: npm run test:unit (jest) -\u003e PASS (7 tests).\\n- Did NOT run demo Playwright E2E locally (requires Playwright browsers / longer runtime); recommend running in CI (ge-ngf / ge-k3p acceptance criteria include npx playwright install).\\n- No files were modified in this session.\\n- No new beads created. Follow-ups: ensure GitHub Actions workflow (.github/workflows/playwright.yml) is added (see ge-ngf) and that CI runs 'npx playwright install' before tests.\\n- Commands run during wrap-up: git rev-parse --abbrev-ref HEAD; git status; npm run test:unit; bd ready; bd show (used earlier).\\nFiles touched: none.\\nNext steps for the next session: create or open PR for .github/workflows/playwright.yml (ge-k3p / ge-ngf), validate Playwright browsers install in CI, run demo E2E in CI and upload artifacts on failure.\\n","created_at":"2026-01-07T08:22:36Z"},{"id":15,"issue_id":"ge-k3p","author":"rgardler","text":"PR #97 merged; CI Playwright workflow landed. Cleaned git stashes (2 entries) after review to prevent stale beads DB. TODO resolved: follow-up ge-hbd remains open to monitor artifacts behavior.","created_at":"2026-01-07T08:33:33Z"}]} -{"id":"ge-ngf","title":"CI: Playwright E2E","description":"Add GitHub Actions workflow to run Playwright E2E tests.\\n\\nAcceptance criteria:\\n- Workflow file .github/workflows/playwright.yml runs on PRs and main.\\n- Workflow runs: npm ci, npx playwright install, npm test (demo e2e).\\n- On PR a job runs tests and reports status to PR.","status":"open","priority":1,"issue_type":"task","assignee":"rgardler","created_at":"2026-01-06T23:08:53.428619454-08:00","created_by":"rgardler","updated_at":"2026-01-06T23:08:53.428619454-08:00"} +{"id":"ge-ngf","title":"CI: Playwright E2E","description":"Add GitHub Actions workflow to run Playwright E2E tests.\\n\\nAcceptance criteria:\\n- Workflow file .github/workflows/playwright.yml runs on PRs and main.\\n- Workflow runs: npm ci, npx playwright install, npm test (demo e2e).\\n- On PR a job runs tests and reports status to PR.","status":"closed","priority":1,"issue_type":"task","assignee":"rgardler","created_at":"2026-01-06T23:08:53.428619454-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:20:17.470750673-08:00","closed_at":"2026-01-07T02:20:17.470750673-08:00","close_reason":"Closed"} {"id":"ge-nzz","title":"Make root README InkJS-only","description":"Remove Unity references from the root README.md and focus it on InkJS/web demo usage and tests.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-06T15:12:16.621516991-08:00","created_by":"rgardler","updated_at":"2026-01-06T15:13:37.065401561-08:00","closed_at":"2026-01-06T15:13:37.065401561-08:00","close_reason":"Done"} {"id":"ge-osd","title":"Restore original demo story for smoke tests","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-01-06T22:09:37.056596959-08:00","created_by":"rgardler","updated_at":"2026-01-06T22:10:00.371743266-08:00","closed_at":"2026-01-06T22:10:00.371743266-08:00","close_reason":"Done","comments":[{"id":1,"issue_id":"ge-osd","author":"rgardler","text":"Fixed smoke tests broken by demo story changes by adding web/stories/test.ink (pre-903f044 demo story) and routing /stories/demo.ink to that file in Playwright.\n\nChanges:\n- web/stories/test.ink\n- tests/demo.smoke.spec.ts\n\nCommands:\n- npm test","created_at":"2026-01-07T06:09:54Z"}]} {"id":"ge-s2q","title":"Implement: web/demo skeleton (InkJS integration)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-05T23:10:10.569697121-08:00","created_by":"rgardler","updated_at":"2026-01-06T02:46:13.725365368-08:00","closed_at":"2026-01-06T02:46:13.725374498-08:00","dependencies":[{"issue_id":"ge-s2q","depends_on_id":"ge-hch.1.2.2","type":"discovered-from","created_at":"2026-01-05T23:10:10.574207891-08:00","created_by":"rgardler"}]} From c80615eb10de6f89986b4e8aa8f1602f19ccb4e1 Mon Sep 17 00:00:00 2001 From: Ross Gardler Date: Wed, 7 Jan 2026 17:42:35 -0800 Subject: [PATCH 2/2] beads: add milestone child epics for ge-hch (M0..M5) --- .beads/issues.jsonl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 5d9328e7..47231ecb 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -69,7 +69,7 @@ {"id":"ge-hch.1.8.1","title":"Implement: Risk","description":"Implement: Risk - code, prefabs, editor scripts as required.\\n\\n## Acceptance Criteria\\n- Implementation produces the minimal functionality described in the feature acceptance criteria.\\n\\n## Minimal Implementation\\n- Deliver the smallest end-to-end code required.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T20:44:45.80003094-08:00","created_by":"rgardler","updated_at":"2026-01-07T02:14:27.180099272-08:00","closed_at":"2026-01-07T02:14:27.180099272-08:00","close_reason":"Completed","dependencies":[{"issue_id":"ge-hch.1.8.1","depends_on_id":"ge-hch.1.8","type":"parent-child","created_at":"2026-01-03T20:44:45.801328409-08:00","created_by":"rgardler"}]} {"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":"open","priority":1,"issue_type":"epic","created_at":"2026-01-07T17:23:57.819369354-08:00","created_by":"rgardler","updated_at":"2026-01-07T17:23:57.819369354-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"}]} +{"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.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.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"}]}