114 lines
5.5 KiB
Markdown
114 lines
5.5 KiB
Markdown
# Tasks — enterprise-game-server-core
|
|
|
|
## 0. Pre-flight (non-negotiable)
|
|
|
|
- [x] 0.1 Confirm clean working tree at slice open (verified via `git status` and `git worktree list`: worktree
|
|
branched from `25dbec9c8b`, no in-flight uncommitted work).
|
|
- [x] 0.2 Account for `.claude/worktrees/`: this slice runs in
|
|
`agent-a0756387a9185f112` and is the only active worktree.
|
|
- [x] 0.3 `MANIFEST.md` will be regenerated as part of archive (task 7.3).
|
|
|
|
## 1. Spec authoring
|
|
|
|
- [x] 1.1 Read reference branch source for the migrated scope.
|
|
- [x] 1.2 No existing `openspec/specs/game-server/spec.md` — fresh capability.
|
|
- [x] 1.3 Read `openspec/AGENTS.md` §13/§14 hard rules.
|
|
- [x] 1.4 Draft `proposal.md`.
|
|
- [x] 1.5 `## Source mapping` table populated with line ranges /
|
|
no-source justifications.
|
|
- [x] 1.6 Draft `specs/game-server/spec.md` with ADDED requirements.
|
|
- [x] 1.7 Every requirement carries a `**Verified by:**` line naming
|
|
concrete `it(...)` titles.
|
|
|
|
## 2. Implementation
|
|
|
|
- [x] 2.1 Package scaffold: `package.json`, `tsconfig.lib.json`,
|
|
`vite.config.ts`, `vitest.config.ts`, `tests/setup/polyfills.ts`,
|
|
`README.md`.
|
|
- [x] 2.2 `src/errors/game-server-error.ts` + barrel — `GameServerError`,
|
|
`GAME_SERVER_CODES`, `GameServerCode`.
|
|
- [x] 2.3 `src/types/common.types.ts` (interfaces) + `src/types/common.ts`
|
|
(Zod schemas + validators) + barrel.
|
|
- [x] 2.4 `src/engine/di-container/{di-container.ts, .types.ts, index.ts}`.
|
|
- [x] 2.5 Root `src/index.ts` re-exports the full Priority-1 surface.
|
|
|
|
## 3. Tests
|
|
|
|
- [x] 3.1 `src/errors/game-server-error.test.ts` — registry shape, error
|
|
shape, code-union discrimination.
|
|
- [x] 3.2 `src/types/common.test.ts` — every schema accept + reject + the
|
|
thrower path with the matching `GAME_SERVER.*` code.
|
|
- [x] 3.3 `src/engine/di-container/di-container.test.ts` — 11 `it()`
|
|
cases covering singleton, transient, symbol identifier, fluent
|
|
chaining, miss-throws-typed-error (string + symbol),
|
|
has/unregister/clear/getRegisteredServices, re-register cache
|
|
invalidation.
|
|
- [x] 3.4 Every `it(...)` carries `{ timeout: 5000 }`.
|
|
|
|
## 4. Documentation
|
|
|
|
- [x] 4.1 Sibling `.md` ≥200 words for each non-exempt `.ts`:
|
|
`game-server-error.md`, `common.md`, `di-container.md`.
|
|
- [x] 4.2 `README.md` lists each `.md` under `## Modules` and tracks
|
|
deferred surfaces.
|
|
- [x] 4.3 No CLAUDE.md package-listing edit required — the rewrite of
|
|
`enterprise-gaming-game-server` into this slice plus deferred
|
|
follow-ups will be captured when the listing is next refreshed.
|
|
|
|
## 5. Pre-archive verification (the 5-gate triple)
|
|
|
|
- [ ] 5.1 `bun run check` — Biome 0/0/0 across the package. **NOT RUN**
|
|
in this session: scope-management constraint per migration brief.
|
|
- [ ] 5.2 `bunx turbo lint typecheck test --filter=@suaveplan/game-server`
|
|
— green. **NOT RUN** in this session.
|
|
- [ ] 5.3 `bunx turbo test:coverage --filter=@suaveplan/game-server` —
|
|
100/100/100/100. **NOT RUN** in this session.
|
|
- [ ] 5.4 `bun scripts/openspec-conformance.ts @suaveplan/game-server` —
|
|
exit 0. **NOT RUN** in this session.
|
|
- [ ] 5.5 `bunx turbo build --filter=@suaveplan/game-server` — green.
|
|
**NOT RUN** in this session.
|
|
|
|
> The 5 boxes above remain unchecked because this slice was authored
|
|
> under a single-session migration brief and the pre-archive gates
|
|
> require a live Bun/Turbo invocation against the working tree. They
|
|
> MUST be run and made green before this change is archived (task 7).
|
|
|
|
## 6. Pre-archive 7-row checklist (AGENTS.md §13)
|
|
|
|
- [x] 6.1 Generics threaded — `ServiceIdentifier<T>` carries through
|
|
`register`/`resolve`; schema validator return types preserve
|
|
readonly modifiers via explicit cast (canonical Zod↔TS bridge).
|
|
- [x] 6.2 Zod schemas wired at every declared boundary
|
|
(`GameConfig`/`SessionMetadata`/`PlayerInfo`/`MoveValidationResult`/`GameResult`).
|
|
- [x] 6.3 Every code in `error-codes.ts` thrown by at least one
|
|
production path: `SERVICE_NOT_REGISTERED` (di-container.ts:39),
|
|
`INVALID_GAME_CONFIG` (common.ts:88), `INVALID_SESSION_METADATA`
|
|
(common.ts:103), `INVALID_PLAYER_INFO` (common.ts:118).
|
|
- [x] 6.4 Strict-mode behaviors tested both ways — `MoveValidationResult`
|
|
strict-extra rejection, `GameResult` strict-extra rejection,
|
|
`SessionMetadata` passthrough acceptance, `GameConfig` passthrough
|
|
acceptance.
|
|
- [ ] 6.5 OTel instruments not introduced in this slice — Priority-1
|
|
DI container has no metric-emitting paths. Deferred to the engine
|
|
slice (`enterprise-game-server-engine`) which lands `Session`
|
|
tick-duration histograms and `SessionManager` lifecycle counters.
|
|
- [ ] 6.6 Lifecycle dedup — not applicable to the four artifacts in this
|
|
slice. Deferred to the engine slice where `SessionStore` /
|
|
`SessionLifecycle` introduce idempotent lifecycle ops.
|
|
- [x] 6.7 No retroactive ticks — every box above reflects work done in
|
|
this slice; un-runnable gates and not-applicable rows are
|
|
unchecked with an explicit reason.
|
|
|
|
## 7. Archive
|
|
|
|
- [ ] 7.1 Fold `specs/game-server/spec.md` into
|
|
`openspec/specs/game-server/spec.md` (currently absent — first
|
|
authoring of the capability).
|
|
- [ ] 7.2 Move `openspec/changes/enterprise-game-server-core/` →
|
|
`openspec/archive/2026-05-23-enterprise-game-server-core/`.
|
|
- [ ] 7.3 `bun scripts/folder-reorg/generate-manifest.ts` to refresh
|
|
`MANIFEST.md`.
|
|
|
|
> Tasks 5.x and 7.x will run as the next session's first action once the
|
|
> 5-gate triple goes green.
|