docs(03-13): complete direct event body plan

This commit is contained in:
unanmed 2026-09-11 13:32:08 +08:00
parent 7315681272
commit d9a7faa5b9

View File

@ -0,0 +1,177 @@
---
phase: 03-data-completion
plan: 13
subsystem: data-state-events
tags: [events, anon-tokyo, statements, vitest]
# Dependency graph
requires:
- phase: 03-data-completion
provides: Module-owned event built-ins and the existing AnonTokyo interpreter
provides:
- Direct Statement[] execution for eventInsertEvent
- Preserved ordered event-id execution for eventInsertEvents
- Corrected event contract and regression coverage for the structural supersession
affects: [03-VERIFICATION, Phase 3 data closure]
# Actuals (#2632)
actuals:
tokens: 1452
tasks: 2
commits: 2
plan_head_before: fcff1c57af03073277e0444102701bb76462365d
# Tech tracking
tech-stack:
added: []
patterns:
- Direct AnonTokyo interpreter execution for temporary Statement[] bodies
- Separate direct-body and event-store id-sequence paths
key-files:
created: []
modified:
- packages-user/data-state/src/event/event.ts
- packages-user/data-state/src/event/types.ts
- packages-user/data-state/src/event/event.test.ts
- .planning/phases/03-data-completion/03-EVENT-CONTRACT.md
key-decisions:
- "eventInsertEvent accepts Statement[] and executes it with the existing interpreter, without event-store access or id resolution."
- "eventInsertEvents remains the only ordered event-id sequence operation."
- "Legacy/save architecture, replay synchronization, and user-owned @shouldReplay() placement remain untouched."
patterns-established:
- "Temporary inline event bodies use the existing interpreter with { custom: {} } and the current IBlockEventEnv."
requirements-completed: [DATA-01]
coverage:
- id: D1
description: "eventInsertEvent executes an inline Statement[] body through the existing interpreter and mutates the event layer without an event-store id."
requirement: DATA-01
verification:
- kind: unit
ref: "packages-user/data-state/src/event/event.test.ts#awaits id sequences and executes a direct statement body"
status: pass
- kind: other
ref: "Structural source gate distinguishing direct-body execution from eventInsertEvents and event-store lookup"
status: pass
human_judgment: false
- id: D2
description: "eventInsertEvents retains its ordered event-id sequence behavior alongside the corrected single-body path."
requirement: DATA-01
verification:
- kind: unit
ref: "packages-user/data-state/src/event/event.test.ts#awaits id sequences and executes a direct statement body"
status: pass
- kind: integration
ref: "packages-user/data-system/src/event/eventDispatch.test.ts"
status: pass
human_judgment: false
# Metrics
duration: 10 min
completed: 2026-09-11
status: complete
commits: 2
---
# Phase 3 Plan 13 Summary
**Direct AnonTokyo Statement[] execution for eventInsertEvent while preserving the multi-ID eventInsertEvents path**
## Performance
- **Duration:** 10 min
- **Started:** 2026-09-11T05:20:00Z
- **Completed:** 2026-09-11T05:30:05Z
- **Tasks:** 2
- **Files modified:** 4
## Accomplishments
- Changed `eventInsertEvent` to accept an `anon-tokyo` `Statement[]` body and await direct execution through the existing interpreter with the current event environment
- Removed single-body event-store lookup and delegation to `eventInsertEvents`, while leaving the ordered ID path unchanged
- Added direct-body mutation coverage and updated `03-EVENT-CONTRACT.md` to record the superseding contract
## Task Commits
Each task was committed atomically:
1. **Task 1: CORR-03-04 execute a Statement[] body directly** - `2f14d8a` (fix)
2. **Task 2: CORR-03-04 prove direct-body execution and preserve id sequences** - `7315681` (test)
**Plan metadata:** pending final metadata commit
## Files Created/Modified
- `packages-user/data-state/src/event/event.ts` - direct body interpreter execution with the existing bounded insertion guard
- `packages-user/data-state/src/event/types.ts` - `Statement[]` parameter contract for `eventInsertEvent`
- `packages-user/data-state/src/event/event.test.ts` - inline built-in mutation and preserved ID-sequence regression coverage
- `.planning/phases/03-data-completion/03-EVENT-CONTRACT.md` - corrected single-body contract
## Decisions Made
- Applied supersession S-03: the single event operation is an inline `Statement[]` body, not an event ID wrapper
- Kept `eventInsertEvents` as the existing event-store-backed ordered ID operation
- Did not modify legacy/save architecture, replay synchronization, or user-owned `@shouldReplay()` placement
## Deviations from Plan
### Auto-fixed Issues
**1. [Rule 3 - Blocking] Applied required formatting corrections**
- **Found during:** Task 1 verification
- **Issue:** The two implementation files initially failed the plan's Prettier gate
- **Fix:** Ran the repository Prettier formatter on the task-owned implementation files
- **Files modified:** `packages-user/data-state/src/event/event.ts`, `packages-user/data-state/src/event/types.ts`
- **Verification:** Scoped Prettier check passed
- **Committed in:** `2f14d8a`
**2. [Rule 1 - Bug] Corrected the inline Statement[] test fixture for AnonTokyo values**
- **Found during:** Task 2 verification
- **Issue:** A string tile parameter was interpreted as an expression by AnonTokyo, and the event-store missing lookup returns `null` rather than `undefined`
- **Fix:** Used the numeric tile literal from the fixture and asserted the store lookup returns `null`
- **Files modified:** `packages-user/data-state/src/event/event.test.ts`
- **Verification:** Focused event tests passed with 14 tests
- **Committed in:** `7315681`
---
**Total deviations:** 2 auto-fixed (1 Rule 1, 1 Rule 3)
**Impact on plan:** Both fixes were limited to the planned files and verification path; no scope creep.
## Issues Encountered
- The scoped type gate reported 27 pre-existing diagnostics outside the four data packages and 0 in-scope diagnostics; it exited successfully.
- No authentication or human-action blocker occurred.
## Verification
- Direct-body structural source gate — passed: no delegation to `eventInsertEvents` and no single-body `store.getEvent` lookup
- Statement contract gate — passed: `types.ts` imports `Statement` from `anon-tokyo`; contract records `Statement[]`
- `pnpm exec prettier --check packages-user/data-state/src/event/event.ts packages-user/data-state/src/event/types.ts packages-user/data-state/src/event/event.test.ts` — passed
- `pnpm exec vitest run packages-user/data-state/src/event/event.test.ts` — passed, 1 file / 8 tests
- `pnpm exec vitest run packages-user/data-state/src/event/event.test.ts packages-user/data-system/src/event/eventDispatch.test.ts` — passed, 2 files / 14 tests
- `pnpm exec tsx script/check-data-type.ts` — passed, 0 in-scope diagnostics (27 outside scope)
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- CORR-03-04 is closed: inline event bodies execute directly through AnonTokyo and the multi-ID path remains separate
- No blocker remains for this plan. `STATE.md` and `ROADMAP.md` were intentionally not modified per user instruction
---
*Phase: 03-data-completion*
*Completed: 2026-09-11*
## Self-Check: PASSED
- Summary file exists
- Task commits `2f14d8a` and `7315681` are present in git history
- Plan commit ledger reports 2 commits after `plan_head_before`
- Structural, focused Vitest, formatting, and scoped type gates passed