WolfDavid commited on
Commit
3710182
Β·
1 Parent(s): f8cc609

docs(01-03): restore the crash-recovery position clobbered by begin-phase

Browse files

`state begin-phase` rewrites Current Position generically and reset it to
"Plan: 1 of 10", dropping the record that 01-03 is mid-execution with
Tasks 1-2 already committed. An executor reading that would restart the
plan from Task 1 and rewrite files that are already correct.

Files changed (1) hide show
  1. .planning/STATE.md +6 -12
.planning/STATE.md CHANGED
@@ -3,8 +3,8 @@ gsd_state_version: 1.0
3
  milestone: v1.0
4
  milestone_name: milestone
5
  status: executing
6
- stopped_at: "Session crashed mid-execution of 01-03 (avatar transport seam). Tasks 1 and 2 are complete and committed (94a5b15, 7146e75); Tasks 3 and 4 have not been started. Resume by executing 01-03 from Task 3."
7
- last_updated: "2026-08-27T00:00:00.000Z"
8
  progress:
9
  total_phases: 6
10
  completed_phases: 0
@@ -35,21 +35,15 @@ Plan: 4 of 10 (3 complete, 01-03 in flight at Task 3 of 4)
35
  > | 3 | `avatar.js`, `avatar-iframe.js`, `stage.html`, `demo-konnichiwa.wav`, `avatar_component.py`, `app.py` | **Not started β€” none of these files exist** |
36
  > | 4 | `tests/test_transport_seam.py`, `tests/e2e/test_stage_standalone.py`, `tests/e2e/test_facade_parity.py` | **Not started** |
37
  >
38
- > **Resume at Task 3.** Tasks 1-2 were spot-checked against their acceptance criteria at resume and pass: the `?deps=three@0.185.1` pin appears exactly once, no import map exists anywhere in `avatar/`, `lipsync.js` has no `setTimeout`, and `facade.js` is the only file matching `window.Avatar =`.
39
  >
40
  > **Two corrections the Task 3/4 executor needs:**
41
  > 1. **`avatar/vrm-stage.js:64` contains the word "Gradio" in a comment.** Task 4's `test_stage_core_is_gradio_free` greps the lowercase token `gradio`, so the capitalised word passes today β€” but it violates the rule's intent and breaks the moment that check is made case-insensitive. Reword it while writing Task 4.
42
- > 2. **`boot()` has an emit-ordering problem the plan does not call out.** Task 3 step 2 calls `mountStage(canvas, props.vrmUrl, emit)`, but `emit` does not exist until `installFacade` returns it at step 5. The transport needs a deferred emit β€” a local function that buffers events (or forwards to a mutable reference) until the real bus is installed. This applies to **both** transports.
43
  >
44
  > Also note Task 2's acceptance criterion `grep -ci "gradio\|element\|props\|THREE" avatar/facade.js avatar/turn-loop.js` returns 0 is **unsatisfiable as literally written**: `threeInstanceCount` is a mandated `__debug` key and contains the substring `three`. The actual enforced test (`test_shared_modules_are_gradio_free`) checks only `gradio`, `gradio_api`, `server.` and `trigger(`, all of which genuinely are absent. Trust the test, not the prose.
45
-
46
- **Completed:** 01-02 (local foundations β€” pytest/ruff on Python 3.12.12, Git LFS armed, `--space-url` plumbing, audio fixtures), 01-04 (Japanese voice β€” VOICEVOX assets via LFS, `synthesize()`, `requirements.txt`, ground-truth fixtures), and 01-01 (hosting + VRM gates β€” **both human checkpoints are now closed**). **VOIC-01 is Complete.** The plan counter is a count, not a plan ID: "Plan 4 of 10" does not mean 01-03 is done.
47
- **Both Phase-1 human gates are cleared.** The Space is live at `WolfDavid/japanese-learning-avatar` on ZeroGPU (`requested: zero-a10g`, public, 48 h sleep); `SPACE_URL` is `https://wolfdavid-japanese-learning-avatar.hf.space` and is recorded in `docs/HOSTING.md`. `avatar/assets/tutor.vrm` is committed through LFS. Nothing is deployed to the Space yet β€” it serves 503 (`NO_APP_FILE`) until 01-05 pushes an app.
48
- **Next actionable:** 01-03 (avatar transport seam), 01-05 (deploy β€” now fully unblocked: it has the hosting decision, the `space` remote, and `requirements.txt`), and 01-06 (viseme timeline) are all unblocked.
49
-
50
- > **Plan 01-05 owns the Space `README.md` and must fix two front-matter values that Space creation auto-generated wrong:** `sdk_version: 6.26.0` β†’ **6.22.0** (to match `requirements.txt`) and `python_version: '3.12'` β†’ **3.12.12** (ZeroGPU provides only 3.10.13 and 3.12.12). Details in `docs/HOSTING.md` Β§ "Open handoff to plan 01-05".
51
-
52
- > **Before writing `visemes.py` in 01-06, read `docs/VOICEVOX-SETUP.md` Β§ "Frame quantisation".** 01-RESEARCH.md's formula is wrong for `speedScale != 1.0`; the corrected form and its evidence are recorded there and in the Blockers/Concerns section below.
53
 
54
  ## Performance Metrics
55
 
 
3
  milestone: v1.0
4
  milestone_name: milestone
5
  status: executing
6
+ stopped_at: 01-03 mid-execution. Tasks 1-2 complete and committed; Tasks 3-4 not started. See the table under "Current Position".
7
+ last_updated: "2026-08-27T11:44:52.247Z"
8
  progress:
9
  total_phases: 6
10
  completed_phases: 0
 
35
  > | 3 | `avatar.js`, `avatar-iframe.js`, `stage.html`, `demo-konnichiwa.wav`, `avatar_component.py`, `app.py` | **Not started β€” none of these files exist** |
36
  > | 4 | `tests/test_transport_seam.py`, `tests/e2e/test_stage_standalone.py`, `tests/e2e/test_facade_parity.py` | **Not started** |
37
  >
38
+ > **Resume at Task 3. Do NOT re-do Tasks 1-2** β€” their files exist and are committed. They were spot-checked against their acceptance criteria at resume and pass: the `?deps=three@0.185.1` pin appears exactly once, no import map exists anywhere in `avatar/`, `lipsync.js` has no `setTimeout`, and `facade.js` is the only file matching `window.Avatar =`.
39
  >
40
  > **Two corrections the Task 3/4 executor needs:**
41
  > 1. **`avatar/vrm-stage.js:64` contains the word "Gradio" in a comment.** Task 4's `test_stage_core_is_gradio_free` greps the lowercase token `gradio`, so the capitalised word passes today β€” but it violates the rule's intent and breaks the moment that check is made case-insensitive. Reword it while writing Task 4.
42
+ > 2. **`boot()` has an emit-ordering problem the plan does not call out.** Task 3 step 2 calls `mountStage(canvas, props.vrmUrl, emit)`, but `emit` does not exist until `installFacade` returns it at step 5. The transport needs a deferred emit β€” a local function that buffers events (or forwards through a mutable reference) until the real bus is installed. This applies to **both** transports.
43
  >
44
  > Also note Task 2's acceptance criterion `grep -ci "gradio\|element\|props\|THREE" avatar/facade.js avatar/turn-loop.js` returns 0 is **unsatisfiable as literally written**: `threeInstanceCount` is a mandated `__debug` key and contains the substring `three`. The actual enforced test (`test_shared_modules_are_gradio_free`) checks only `gradio`, `gradio_api`, `server.` and `trigger(`, all of which genuinely are absent. Trust the test, not the prose.
45
+ >
46
+ > **Do not push to the `space` remote during this phase.** It is the only remote this repo has and pushing triggers a Space rebuild; deployment is plan 01-05's job.
 
 
 
 
 
 
47
 
48
  ## Performance Metrics
49