docs(03-08): complete gap-closure event parameter plan

This commit is contained in:
unanmed 2026-09-10 18:52:29 +08:00
parent 82687b2f56
commit 3509be39dd

View File

@ -0,0 +1,168 @@
---
phase: 03-data-completion
plan: 08
subsystem: data-state-events
tags: [events, anon-tokyo, null-safety, vitest]
# Dependency graph
requires:
- phase: 03-data-completion
provides: Eight approved event built-in registrations and their locked parameter contracts
provides:
- Shared runtime parameter guard for all eight registered event built-ins
- Real registration-table nullish regression coverage with mutation assertions
affects: [03-VERIFICATION, Phase 3 data closure]
# Actuals (#2632)
actuals:
tokens: 897
tasks: 2
commits: 3
plan_head_before: 4dd28759d8988414a4ec916aa94271fcd370819a
# Tech tracking
tech-stack:
added: []
patterns:
- Runtime object guard at the AnonTokyo registration adapter before field parsing
- Explicit Reflect.apply helper for testing real BuiltInFunction.func values
key-files:
created: []
modified:
- packages-user/data-state/src/event/index.ts
- packages-user/data-state/src/event/event.test.ts
key-decisions:
- "Guard nullish and non-object parameters only at the shared registration seam, preserving all eight names, signatures, parsers, implementations, and await behavior."
- "Exercise null and undefined through the actual createEventBuiltinRegistrations() functions rather than testing implementation helpers directly."
patterns-established:
- "Malformed runtime parameters stop before Object.getOwnPropertyDescriptor or event mutation."
requirements-completed: [DATA-01]
coverage:
- id: D1
description: "All eight approved AnonTokyo event registrations safely resolve void for nullish runtime parameters before parsing."
requirement: DATA-01
verification:
- kind: unit
ref: "packages-user/data-state/src/event/event.test.ts#safely resolves nullish parameters through every registered built-in"
status: pass
- kind: integration
ref: "pnpm exec vitest run packages-user/data-state/src/event/event.test.ts packages-user/data-system/src/event/eventDispatch.test.ts"
status: pass
human_judgment: false
- id: D2
description: "Existing valid event behavior, registration order, async waiting, and missing-target safe failures remain covered and green."
requirement: DATA-01
verification:
- kind: unit
ref: "packages-user/data-state/src/event/event.test.ts#event built-ins"
status: pass
- kind: other
ref: "pnpm test:ci packages-user/data-common packages-user/data-base packages-user/data-system packages-user/data-state"
status: pass
human_judgment: false
# Metrics
duration: 6 min
completed: 2026-09-10
status: complete
commits: 3
---
# Phase 3 Plan 8 Summary
**Null-safe runtime guards and real registration-table regression coverage for all eight approved event built-ins**
## Performance
- **Duration:** 6 min
- **Started:** 2026-09-10T18:45:00+08:00
- **Completed:** 2026-09-10T18:51:15+08:00
- **Tasks:** 2
- **Files modified:** 2
## Accomplishments
- Added a shared `createBuiltin` boundary guard that returns resolved `void` for nullish or otherwise non-object runtime parameters before parser property access
- Added a focused real-registration `eventSetBlock(null)` regression and a matrix covering null and undefined for all eight approved registrations
- Preserved the locked built-in names, parameter contracts, valid parsing, awaited event behavior, registration order, and state mutation semantics
## Task Commits
Each task was committed atomically:
1. **Task 1: GAP-03-02 guard the registered event built-in entry seam** - `95df6a0` (fix)
2. **Task 2: GAP-03-02 nullish regression matrix for all eight registrations** - `f8cae08` (test)
Additional quality commit:
3. **Prettier/CRLF normalization for changed event files** - `82687b2` (style)
**Plan metadata:** pending final metadata commit
## Files Created/Modified
- `packages-user/data-state/src/event/index.ts` - shared runtime parameter guard at the registration adapter
- `packages-user/data-state/src/event/event.test.ts` - actual registration seam null/undefined matrix and unchanged-state assertions
## Decisions Made
- Kept the correction at the registration boundary so the approved public contracts and underlying implementations remain unchanged
- Used an explicit runtime invocation helper based on `Reflect.apply` to pass nullish values through real `BuiltInFunction.func` values without weakening public interfaces or adding an `any` escape
## Deviations from Plan
### Auto-fixed Issues
**1. [Rule 3 - Blocking] Applied required CRLF and Prettier formatting**
- **Found during:** Overall quality-gate checks after Task 2
- **Issue:** The first patch left the two changed files in a formatting state rejected by the repository ESLint/Prettier checks
- **Fix:** Ran Prettier write on only the two plan-owned files and committed the resulting line-ending/layout normalization
- **Files modified:** `packages-user/data-state/src/event/index.ts`, `packages-user/data-state/src/event/event.test.ts`
- **Verification:** Focused ESLint, Prettier check, and focused event tests passed
- **Committed in:** `82687b2`
---
**Total deviations:** 1 auto-fixed (Rule 3: 1)
**Impact on plan:** Required formatting correction only; no scope or runtime contract expansion.
## Verification
- `pnpm exec vitest run packages-user/data-state/src/event/event.test.ts` — passed, 10 tests
- `pnpm exec vitest run packages-user/data-state/src/event/event.test.ts packages-user/data-system/src/event/eventDispatch.test.ts` — passed, 16 tests
- `pnpm test:ci packages-user/data-common packages-user/data-base packages-user/data-system packages-user/data-state` — passed, 18 files / 100 tests
- `pnpm exec tsx script/check-data-type.ts` — passed with 0 in-scope data-package diagnostics; 27 pre-existing outside-scope diagnostics reported
- `pnpm exec tsx script/check-data-circular.ts` — passed with 0 cycles
- `pnpm exec eslint packages-user/data-state/src/event/index.ts packages-user/data-state/src/event/event.test.ts` — passed
- `pnpm exec prettier --check packages-user/data-state/src/event/index.ts packages-user/data-state/src/event/event.test.ts` — passed
## Issues Encountered
- The type gate continues to report the repository's known 27 diagnostics outside the four data-package scope; the scoped gate passed and no changed event file was implicated.
- Existing tests emit expected warnings for intentionally missing event ids and unknown fixture tiles; all assertions passed.
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- GAP-03-02 is closed: all eight real registered built-ins resolve safely for both `null` and `undefined` without state mutation.
- Locked event contracts and valid awaited behavior remain intact.
- `.planning/STATE.md` and `.planning/ROADMAP.md` were intentionally not modified per the execution request.
---
*Phase: 03-data-completion*
*Completed: 2026-09-10*
## Self-Check: PASSED
- Summary file exists
- Task commits `95df6a0`, `f8cae08`, and formatting commit `82687b2` are present in git history
- Focused tests, four-package data suite, type gate, circular gate, ESLint, and Prettier checks passed