Keith Solomon
8bec9baab6
feat(combat): wade visual + smoke test budget
2026-07-27 00:10:53 -05:00
Keith Solomon
09f2bda924
feat(combat): water traversal costs 3 and ends the turn
2026-07-26 23:38:13 -05:00
Keith Solomon
fb06da3f28
feat(combat): forest concealment roll, only on Forest terrain
2026-07-26 23:12:16 -05:00
Keith Solomon
241195bbc5
feat(combat): flanking bonus caps at +30, diagonal allies do not count
2026-07-26 22:51:13 -05:00
Keith Solomon
4cc457c231
feat(combat): to-hit roll, ±15% damage variance, crits, and new log format
2026-07-26 21:41:53 -05:00
Keith Solomon
2ea8cfd83d
fix: CSRF flow ships the raw token, not the HMAC cookie
2026-07-26 11:01:36 -05:00
Keith Solomon
47dc95fa56
feat: add MatchActionSupport for shared CSRF/turn/state verification
2026-07-26 00:36:49 -05:00
Keith Solomon
3d8c1cfdb2
feat: add TurnToken HMAC for match-action anti-cheat
2026-07-25 22:39:29 -05:00
Keith Solomon
a0dcff2c2a
fix: round-trip match objectives through ScenarioSerializer
2026-07-25 22:21:25 -05:00
Keith Solomon
61abb93e59
fix: align upload-asset URL contract end-to-end
...
- ImageUploadService::store() now returns /assets/uploads/<token>/<file>
so the URL the upload handler emits matches the new GET route.
- public/index.php registers a dedicated GET /assets/uploads/{userToken}/{filename}
route; the legacy /assets/{kind}/{filename} is kept as a fallback.
- GetAssets reads the upload token from $request->server['__uploads_token']
(the front controller threads it that way) instead of the cookies bag.
- Adds GetAssets unit tests for the upload-token happy path and a
token-mismatch 404, plus a FullFlowTest step that uploads and re-fetches
the asset through the front controller.
2026-07-06 23:21:33 -05:00
Keith Solomon
0f4a220e70
feat: add ScenarioDraft form-field adapter
2026-07-06 18:49:33 -05:00
Keith Solomon
c24964ff96
feat: add image upload service
2026-07-06 18:36:34 -05:00
Keith Solomon
6399e2d86c
feat: add image content validator
2026-07-06 18:32:50 -05:00
Keith Solomon
288c42e176
feat: add JSON serializer for scenarios and match state
2026-07-06 18:20:01 -05:00
Keith Solomon
8b83df60cd
feat: add Http router
2026-07-06 17:58:56 -05:00
Keith Solomon
3263975d2a
feat: add Request and Response value objects
2026-07-06 17:52:29 -05:00
Keith Solomon
9ce0c2ac20
feat: add CSRF token store and verifier
2026-07-06 17:44:41 -05:00
Claude
67de6dab75
feat: add output escaping helpers
2026-07-06 17:35:58 -05:00
Keith Solomon
39b15c35da
refactor: tighten useAbility and Scenario archetype lookup
...
Final-review-driven changes (Tasks 6/M1, I1 from the ledger):
- Drop the redundant abilities-list check in CombatEngine::useAbility.
By construction (Scenario::__construct enforces the allowlist), any
ability the unit 'knows' is also archetype-allowed; the second check
alone is sufficient and removes a dead code path.
- Update testUseAbilityRejectsAnAbilityTheArchetypeForbids to assert the
'Unit archetype forbids that ability.' message it actually exercises.
- Compute $template once in Scenario::__construct's per-unit loop and
drop the redundant catalog lookup on the next line.
2026-07-05 20:33:03 -05:00
Keith Solomon
12f5c0bd3a
test: cover scenario to match flow with ability and objective
2026-07-05 20:23:28 -05:00
Keith Solomon
6fffaa2306
feat: validate scenario deployment zones and objectives
2026-07-05 20:11:35 -05:00
Keith Solomon
84fb175c0c
feat: resolve objective control and objective victory
2026-07-05 20:06:27 -05:00
Keith Solomon and Keith Solomon
6befe7b3e2
feat: support curated abilities and objective victory
2026-07-05 19:49:06 -05:00
Keith Solomon
088e85c9b4
feat: model scenarios and start match snapshots
2026-07-05 19:27:22 -05:00
Keith Solomon
e70b60696c
feat: track archetype, abilities, and buff on unit state
2026-07-05 19:05:03 -05:00
Keith Solomon
88149ab1cf
feat: catalog curated abilities and definitions
2026-07-05 18:47:20 -05:00
Keith Solomon
0ac8c06c5e
feat: catalog curated unit archetypes and templates
2026-07-05 18:41:53 -05:00
Keith Solomon
fef22d7b56
fix: guard invalid turn transitions
2026-07-04 16:07:36 -05:00
Keith Solomon
acfbbf4a91
feat: add alternating team turns
2026-07-04 16:02:49 -05:00
Keith Solomon
7588b304e1
refactor: reuse position distance for attacks
2026-07-04 15:58:29 -05:00
Keith Solomon
3c6359243a
feat: resolve attacks and elimination victory
2026-07-04 15:53:57 -05:00
Keith Solomon
3eba823e52
fix: enforce executable movement state
2026-07-04 15:47:29 -05:00
Keith Solomon
1550e2920b
feat: validate and resolve unit movement
2026-07-04 15:37:05 -05:00
Keith Solomon
5297b41208
fix: enforce immutable match state invariants
2026-07-04 15:33:05 -05:00
Keith Solomon
94560da5b4
test: verify original match remains unchanged
2026-07-04 15:25:06 -05:00
Keith Solomon
0c5e824942
feat: model immutable combat state
2026-07-04 15:23:00 -05:00
Keith Solomon
4421c5ae32
test: strengthen battlefield boundary coverage
2026-07-04 15:19:06 -05:00
Keith Solomon
b789f1b61f
fix: validate battlefield reachability inputs
2026-07-04 15:15:08 -05:00
Keith Solomon
189be5bc64
feat: model battlefield terrain and movement costs
2026-07-04 15:08:40 -05:00