VinPropane
1636fdc2cb
NEO-68: Add GET /game/world/recipe-definitions HTTP projection.
...
Wire RecipeDefinitionsWorldApi over IRecipeDefinitionRegistry with schema v1
DTOs, Bruno folder, manual QA, and FrozenEightInIdOrder integration test.
2026-05-24 17:08:15 -04:00
VinPropane
f209636e7e
NEO-66: Fail-fast server recipe catalog load at startup.
...
Add Game/Crafting loader, Slice 3 gate rules, DI registration, and AAA tests
mirroring item/resource-node catalog patterns; cross-check item and skill ids.
2026-05-24 16:41:48 -04:00
VinPropane
0f846f90b9
NEO-63: fix Bruno depletion test node isolation.
...
Use prototype_urban_bulk_delta so earlier alpha gathers in the
collection do not pre-deplete capacity under CI Postgres persistence.
2026-05-24 15:51:32 -04:00
VinPropane
e681857778
NEO-63: wire interact to gather engine and expand registry.
...
Four resource_node anchors; gather denies map to InteractionResponse;
integration tests, Bruno gather/inventory and depletion flows.
2026-05-24 15:44:12 -04:00
VinPropane
2b66df86b8
NEO-60: address code review — register footnote and Bruno comment
...
Extend E3.M1 dependency register note with NEO-57–NEO-60 landed slices;
add StringComparer.Ordinal comment to Bruno ordinal test for parity.
2026-05-24 14:49:15 -04:00
VinPropane
97f8f31682
NEO-60: add GET /game/world/resource-node-definitions endpoint
...
Versioned read-only projection backed by IResourceNodeDefinitionRegistry
with nested yield DTOs, integration test, Bruno, manual QA, and docs.
2026-05-24 14:47:23 -04:00
VinPropane
0384b63046
NEO-58: add fail-fast resource-node catalog load at startup
...
Loader, Slice 2 gates, DI registration, AAA tests, README and plan updates.
Cross-checks yield itemIds against ItemDefinitionCatalog loaded first.
2026-05-24 14:01:29 -04:00
VinPropane
b8ee4b55ee
NEO-55: fix Bruno local module resolution for inventory helper
...
Move helper to scripts/ and whitelist via bruno.json
additionalContextRoots so pre-request require() works in Bruno.
2026-05-23 22:59:58 -04:00
VinPropane
1cbe6302b5
NEO-55: make inventory Bruno tests order-independent
...
Shared inventory-api-helper seeds stock and records baselines in
pre-request scripts; assertions use exact deltas instead of cumulative
at.least checks. Harden C# remove round-trip add assertion.
2026-05-23 22:57:53 -04:00
VinPropane
00ada50b95
NEO-55: fix Bruno GET inventory test for persistent dev player state
...
Assert slot shape rules instead of requiring an all-empty grid when
dev-local-1 already holds items from prior collection runs.
2026-05-23 22:53:50 -04:00
VinPropane
fddbb95a45
NEO-55: address code review suggestions for inventory HTTP
...
Add remove round-trip and invalid_quantity API tests, Bruno remove request,
dependency register NEO-55 footnote, and strike-through review follow-ups.
2026-05-23 22:51:59 -04:00
VinPropane
69327f50b4
NEO-55: player inventory GET/POST HTTP, Bruno, and docs
...
Versioned snapshot read and mutationKind add/remove POST backed by
PlayerInventoryOperations; AAA API tests; Bruno happy path + deny case.
2026-05-23 22:45:27 -04:00
VinPropane
52590fa749
NEO-53: address code review suggestions
...
Register footnote NEO-53, Bruno exact id-order test, test indent fix,
review doc strikethroughs.
2026-05-23 19:12:20 -04:00
VinPropane
08428c4da4
NEO-53: GET world item-definitions, Bruno, docs, and tests
...
Registry-backed read model at /game/world/item-definitions; Bruno
collection, manual QA checklist, README and module alignment updates.
2026-05-23 19:09:46 -04:00
VinPropane
2ba129dca1
NEO-51: Fail-fast item catalog load at server startup.
...
Mirror NEO-34/validate_content.py: *_items.json schema validation,
Slice 1 gate, ItemDefinitionCatalog DI, loader/host tests, Bruno health smoke.
2026-05-17 21:56:09 -04:00
VinPropane
00c5937872
NEO-48: revert WhenWritingNull on skill-progression grant API
...
Keep omit-null reasonCode only on new perk-state responses; restoring
the existing grant endpoint wire format (reasonCode: null on success).
2026-05-17 20:59:37 -04:00
VinPropane
aa83790703
NEO-48: omit null reasonCode from success JSON responses
...
WhenWritingNull on PerkBranchSelectResponse and SkillProgressionGrantResponse
matches hotbar/cast/interaction; fixes Bruno tier1 undefined check.
2026-05-17 20:46:28 -04:00
VinPropane
aba26446d3
NEO-48: address r2 review — atomic fixture, tests, docs
...
Batch skillXp then resetPerkState with XP rollback; 400 for invalid skillXp;
MasteryFixtureApi gate tests; README fixture vs grant semantics; Bruno GET playerId.
2026-05-17 20:37:00 -04:00
VinPropane
ffdbed26f2
NEO-48: dev mastery-fixture API for Bruno state setup
...
Replace fixture player ids with POST …/__dev/mastery-fixture (resetPerkState,
absolute skillXp). Bruno deny tests set state in pre-request on dev-local-1.
Gated to Development/Testing or Game:EnableMasteryFixtureApi.
2026-05-17 20:31:26 -04:00
VinPropane
b72201b1f0
NEO-48: Bruno fixture players for deterministic perk deny tests
...
Seed neo48-perk-fresh and neo48-perk-branch via Game:FixturePlayerIds;
level_too_low uses isolated fresh player, branch_already_chosen sets up
neo48-perk-branch in pre-request instead of skipping on shared state.
2026-05-17 20:26:21 -04:00
VinPropane
f4c3fe86e4
NEO-48: skip level_too_low Bruno when dev player already progressed
...
Pre-request checks salvage level and tier-1 pick; bru.skipRequest avoids
false failure after branch_already_chosen or skill-progression grants.
2026-05-17 20:23:42 -04:00
VinPropane
d5b65c94f6
NEO-48: fix Bruno pre-request baseUrl for branch_already_chosen
...
Use getEnvVar fallback and axios like other collection scripts; Invalid URL
when baseUrl was undefined in pre-request.
2026-05-17 20:22:22 -04:00
VinPropane
3ba8300652
NEO-48: address code review — Bruno deny, API deny tests
...
Add self-contained branch_already_chosen Bruno request, HTTP deny smoke
for unknown track/tier/branch and null-body 400, folder docs for level_too_low.
2026-05-17 20:21:42 -04:00
VinPropane
39c54c3881
NEO-48: perk-state HTTP, Bruno, tests, and docs
...
GET/POST /game/players/{id}/perk-state with versioned JSON, engine-backed
branch selection, PerkStateApiTests, Bruno collection, README, and E2.M3 alignment.
2026-05-17 20:10:31 -04:00
VinPropane
38774a5b39
NEO-47: perk unlock engine, PerkState persistence, and tests
...
Add V004 perk tables, in-memory/Postgres stores, PerkUnlockEngine (tier-1 branch
pick, path-auto tier-2 unlocks), level-up hook in skill XP grants, and AAA tests.
Bruno docs note internal perk reevaluation on level-up (HTTP in NEO-48).
2026-05-17 18:38:41 -04:00
VinPropane
174c390aa4
NEO-46: fail-fast mastery catalog load at server startup.
...
Mirror validate_content.py gates in MasteryCatalogLoader, expose IMasteryCatalogRegistry, cross-check skillIds against the skill catalog, and enforce tierIndex 1..N per track.
2026-05-17 18:06:50 -04:00
VinPropane
95528ae42a
chore: Bruno ability-cast preset reset spawn in pre-request
2026-05-10 19:20:56 -04:00
VinPropane
2a65740316
chore: Bruno gather interact pre-request moves player in range
2026-05-10 19:19:50 -04:00
VinPropane
b9343aeeda
chore: reset dev position in Bruno ability-cast preset
2026-05-10 19:17:09 -04:00
VinPropane
29a6c6d1a7
NEO-41: address code review (E3.M1 status, deny-path test)
2026-05-10 19:13:56 -04:00
VinPropane
c1e77280e3
NEO-41: grant salvage activity XP on resource_node interact
2026-05-10 19:10:35 -04:00
VinPropane
35b666ed60
NEO-40: sync E2.M2 alignment doc; close review feedback
2026-05-10 18:54:17 -04:00
VinPropane
effd234ee3
NEO-40: add progression telemetry hook comment sites
2026-05-10 18:49:40 -04:00
VinPropane
236040a5c2
NEO-39: add data-driven level curve with startup schema validation
...
Replace placeholder XP level math with content-backed thresholds validated in CI and at server boot, and update docs/manual QA/review artifacts to reflect NEO-39 delivery and follow-up fixes.
2026-05-06 23:10:06 -04:00
VinPropane
b2999f3ed9
NEO-38: address review — docs alignment, Bruno deny, README levelUps trim
2026-05-06 22:26:23 -04:00
VinPropane
bab7336e5b
NEO-38: Bruno GET skill progression tolerant of persisted XP
2026-05-06 22:23:11 -04:00
VinPropane
33b2e917e4
NEO-38: skill XP POST grant, persistence, level-up response
2026-05-06 22:17:02 -04:00
VinPropane
a3cbef063c
NEO-37: treat skill progression JSON array order as non-contractual
2026-05-06 21:53:24 -04:00
VinPropane
9cd96a72c3
NEO-37: add skill progression snapshot GET API, tests, Bruno, docs
2026-05-06 21:48:17 -04:00
VinPropane
a0c3599525
NEO-36: address code review (manual QA header, alignment, README, Bruno)
2026-05-04 20:44:52 -04:00
VinPropane
ab597ff350
NEO-36: expose GET /game/world/skill-definitions with tests, Bruno, QA doc
2026-05-04 20:36:06 -04:00
VinPropane
1a9088c77c
NEO-34: fail-fast skill catalog load at server startup
...
Register SkillDefinitionCatalog from content/skills with JsonSchema.Net validation
mirroring validate_content.py and the prototype Slice 1 gate. Resolve paths via
Content:SkillsDirectory or discovery from AppContext.BaseDirectory. Eager-load
after WebApplication build so bad catalogs block startup. Add unit and host
tests, pin test factories to repo skills, document config in server/README, add
manual QA checklist, and extend Bruno GET /health smoke tests.
2026-05-02 19:44:10 -04:00
VinPropane
7d64ed2adc
NEO-32: prune expired cooldown entries on TryGetCooldownEndUtc
2026-04-30 21:58:40 -04:00
VinPropane
f4ba4cdd92
NEO-32: optional NEON_SPRAWL_API_LOG stdout for ability-cast
2026-04-30 21:37:03 -04:00
VinPropane
361a6800d2
NEO-32: cooldown snapshot API, on_cooldown deny, client HUD sync
2026-04-30 21:19:32 -04:00
VinPropane
8a9a9bcf78
NEO-30: address code review follow-ups
2026-04-30 21:04:31 -04:00
VinPropane
b5478782a8
NEO-30: cast funnel telemetry hook sites and docs
2026-04-30 20:59:47 -04:00
VinPropane
7de8e7ecfd
NEO-28: cast target authority, HUD feedback, tests + docs
2026-04-27 21:03:04 -04:00
VinPropane
479d1e1806
NEO-31: Bruno collection metadata, cast script UIDs, review verification notes
2026-04-27 20:50:53 -04:00
VinPropane
eac95f0c27
chore: group Bruno hotbar-loadout and ability-cast under subfolders
2026-04-27 20:27:53 -04:00