5.7 KiB
Code review — NEO-76 prototype AbilityDef catalog + CI
Date: 2026-05-24
Scope: Branch NEO-76-e5m1-prototype-backlog · commits 510d711–9b11a52 vs origin/main
Base: origin/main
Follow-up: Code review findings addressed — duplicate catalog row removed; module register table + E5.M1 status aligned.
Verdict
Approve with nits — schema, validate_content.py gates, docs, and catalog now pass CI; ready for merge.
Summary
The branch decomposes Epic 5 Slice 1 into the E5M1 backlog (NEO-76–NEO-86, NEO-44), adds kickoff + implementation plans, and lands content-only E5M1-01: ability-def.schema.json, prototype_abilities.json, and ability validation in scripts/validate_content.py following NEO-50/NEO-65 patterns. Documentation updates (E5.M1 freeze table, content/README.md, CT.M1, alignment register, epic backlog link) are thorough and match kickoff decisions. No server/C#/client code — appropriate for this story.
Documentation checked
| Document | Result |
|---|---|
docs/plans/NEO-76-implementation-plan.md |
Matches — kickoff table, schema shape, CI constant name, file list, and reconciliation AC complete; catalog passes duplicate-id validation. |
docs/plans/E5M1-prototype-backlog.md · E5M1-01 |
Matches — E5M1-01 AC checked and landed note present; content passes CI. |
docs/decomposition/modules/E5_M1_CombatRulesEngine.md |
Matches — freeze table, Linear slug table, CI rules, and Status In Progress aligned with alignment register. |
docs/decomposition/modules/CT_M1_ContentValidationPipeline.md |
Matches — ability catalog PR gate paragraph added. |
docs/decomposition/modules/documentation_and_implementation_alignment.md |
Matches — E5.M1 row added In Progress / NEO-76 landed. Register update appropriate when work starts. |
docs/decomposition/modules/module_dependency_register.md |
Matches — E5.M1 Linear note below Epic 5 table; E5.M2–E5.M4 rows render correctly; E5.M1 In Progress. |
docs/decomposition/epics/epic_05_pve_combat.md |
Matches — Slice 1 backlog link to E5M1-prototype-backlog.md. |
content/README.md |
Matches — abilities/ row + E5 Slice 1 freeze paragraph. |
docs/decomposition/modules/client_server_authority.md |
N/A — no runtime authority changes; content-only. |
| Full-stack epic decomposition | Matches — E5M1-01 is server/content only; client counterparts NEO-85 / NEO-86 documented in backlog (not required for this issue). |
Blocking issues
DuplicateDone. Trailing duplicate row removed;prototype_pulseincontent/abilities/prototype_abilities.json— The catalog has five rows;prototype_pulseappears twice (lines 4–9 and 32–37). Runningpython scripts/validate_content.pyexits non-zero withduplicate ability id 'prototype_pulse'. This violates E5M1-01 AC (“exactly four prototype ability ids; duplicateidfails CI”) and will fail.github/workflows/pr-gate.yml. Remove the trailing duplicate row so the file contains exactly the four frozen ids.validate_content.pyreports 4 unique ability id(s).
Suggestions
-
FixDone. Note moved below full Epic 5 table; E5.M1 status In Progress.module_dependency_register.mdEpic 5 table layout — The E5.M1 note paragraph sits between the E5.M1 and E5.M2 table rows, which breaks the markdown table. Move the note below the Epic 5 table (same pattern as other epic footnotes) so E5.M2–E5.M4 rows render in the table. -
Align E5.M1 module Status with alignment register —Done. E5.M1 module Status row updated to In Progress with NEO-76 landed note.documentation_and_implementation_alignment.mdlists E5.M1 as In Progress;E5_M1_CombatRulesEngine.mdsummary Status still reads Planned. Mirror the E3.M* pattern (module page status note when catalog lands).
Nits
Nit: Duplicate-id error message cites the same file twice (Deferred — acceptable per original review; no change.… in content/abilities/prototype_abilities.json and content/abilities/prototype_abilities.json) — acceptable; same-file duplicates are rare in normal authoring.Nit:Done. Catalog fix makes reconciliation accurate; CI green.NEO-76-implementation-plan.mdreconciliation and backlog checkboxes are marked complete while CI currently fails — update after catalog fix or note “pending catalog fix” until green.
Verification
# From repo root (venv recommended)
python3 -m venv .venv-content && .venv-content/bin/pip install -r scripts/requirements-content.txt
.venv-content/bin/python scripts/validate_content.py
# Expect: content OK … 1 ability catalog file(s) … 4 unique ability id(s)
# CI parity
# pr-gate.yml runs the same script after pip install -r scripts/requirements-content.txt
Four unique ids match PROTOTYPE_E5M1_ABILITY_IDS and PrototypeAbilityRegistry allowlist (prototype_pulse, prototype_guard, prototype_dash, prototype_burst).