NEO-44: Fix Bruno defeat spine for CI collection order.

Reset prototype target HP before cast chain, use slot 2 to avoid
cooldown pollution, and assert +25 gig XP delta from baseline.
pull/118/head
VinPropane 2026-05-25 12:14:29 -04:00
parent 9d9b53332f
commit 32fbcec766
3 changed files with 24 additions and 9 deletions

View File

@ -5,12 +5,13 @@ meta {
}
docs {
NEO-44 AC spine: pre-request runs four pulse casts on prototype_target_alpha (slot 1, 3.2s between).
Asserts breach xp === 25 and salvage/refine skill xp unchanged from pre-defeat baseline.
NEO-44 AC spine: pre-request resets prototype target HP (NEO-83 fixture), then four pulse casts on alpha (slot 2 — avoids slot 0/1 cooldown from ability-cast and combat-targets folders).
Asserts breach xp increased by 25 from pre-spine baseline; salvage/refine skill xp unchanged.
}
script:pre-request {
const axios = require("axios");
const { resetPrototypeCombatTargets } = require("./scripts/combat-targets-reset-helper.js");
const baseUrl = bru.getEnvVar("baseUrl") || bru.getVar("baseUrl");
const playerId = bru.getEnvVar("playerId") || bru.getVar("playerId");
const jsonHeaders = { headers: { "Content-Type": "application/json" } };
@ -26,6 +27,18 @@ script:pre-request {
bru.setVar("neo44SalvageXpBefore", String(skillBefore.data.skills.find((x) => x.id === "salvage").xp));
bru.setVar("neo44RefineXpBefore", String(skillBefore.data.skills.find((x) => x.id === "refine").xp));
const gigBefore = await axios.get(
`${baseUrl}/game/players/${playerId}/gig-progression`,
jsonHeaders,
);
const breachBefore = gigBefore.data.gigs.find((x) => x.id === "breach");
bru.setVar(
"neo44BreachXpBefore",
String(breachBefore?.xp ?? 0),
);
await resetPrototypeCombatTargets(bru);
await axios.post(
`${baseUrl}/game/players/${playerId}/move`,
{ schemaVersion: 1, target: { x: -5, y: 0.9, z: -5 } },
@ -36,7 +49,7 @@ script:pre-request {
`${baseUrl}/game/players/${playerId}/hotbar-loadout`,
{
schemaVersion: 1,
slots: [{ slotIndex: 1, abilityId: "prototype_pulse" }],
slots: [{ slotIndex: 2, abilityId: "prototype_pulse" }],
},
jsonHeaders,
);
@ -49,7 +62,7 @@ script:pre-request {
const castBody = {
schemaVersion: 1,
slotIndex: 1,
slotIndex: 2,
abilityId: "prototype_pulse",
targetId: "prototype_target_alpha",
};
@ -87,13 +100,14 @@ script:post-response {
}
tests {
test("breach gig xp is 25 after alpha defeat", function () {
test("breach gig xp increases by 25 after alpha defeat", function () {
const body = res.getBody();
expect(res.getStatus()).to.equal(200);
expect(body.mainGigId).to.equal("breach");
const breach = body.gigs.find((x) => x.id === "breach");
expect(breach).to.be.an("object");
expect(breach.xp).to.equal(25);
const breachXpBefore = Number(bru.getVar("neo44BreachXpBefore"));
expect(breach.xp).to.equal(breachXpBefore + 25);
expect(breach.level).to.equal(1);
});

View File

@ -5,6 +5,7 @@ meta {
docs {
NEO-44: read-only gig XP snapshot (combat defeat path — not E2.M2 skill XP).
Run order: Get gig progression → Get gig progression after defeat spine (depends on ability-cast defeat spine setup).
Cross-link: bruno/neon-sprawl-server/ability-cast/
Run order: Get gig progression → Get gig progression after defeat spine (~13s pre-request).
Defeat spine resets prototype target HP via __dev/combat-targets-fixture (same as combat-targets folder) and uses slot 2 to avoid cooldown pollution from earlier folders.
Cross-link: bruno/neon-sprawl-server/ability-cast/ and combat-targets/
}

View File

@ -63,7 +63,7 @@ Fourth accept should show **`targetDefeated": true`**. Fifth cast should deny **
curl -sS "${BASE}/game/players/${ID}/gig-progression"
```
Expect **`breach`** row **`xp` 25** (one defeat transition).
Expect **`breach`** row **`xp`** increased by **25** from the pre-spine baseline (Postgres retains prior totals across the full Bruno collection).
## 5. Verify skill XP unchanged