Skip to content

New units: — kit-autonomy gauntlet - #154

Draft
Infernal-Crack-LED wants to merge 20 commits into
mainfrom
kit-autonomy-newunits-2026-10-29
Draft

Infernal-Crack-LED wants to merge 20 commits into
mainfrom
kit-autonomy-newunits-2026-10-29

Conversation

@Infernal-Crack-LED

Copy link
Copy Markdown
Owner

Automated by the daily new-unit watch (~/.nikke-newunit-autopilot/run.sh): bakery-bot's sync seeded new units; nikke-sim synced them and ran the kit-autonomy gauntlet per unit (Claude-only model routing).

Units

Gauntlet results

Marian: Queen (marian-queen) — GO — faithfulness 1.0 — tier 2

  • What it does: S1 fires seven 125.51% spears every 4s (interval). Each hit applies Open Wounds to the boss: Damage Taken +5.05%, permanent, non-stacking, plus the named status. Her burst cast re-applies it. S2 opens Penetrant Wish on her own cast for 10s: every 2 in-state rounds she fires a 14.06% core strike, and the spear interval drops to 2s. At Full Burst entry she gets Core Damage +24.64% if in state, or Sequential Damage +85.17% if not (ownBurstGate notCast). Burst: full reload, ATK +78.4%, Attack Damage +78.14% for 10s, and a 1346.4% nuke.
  • Engine: no change. Every line uses an existing primitive.
  • GAP: MG Ramp-Up Speed ▲100% has no wind-up speed modifier in the engine. Logged as engine-modeling-gaps §23, with an opt-in mgRampSpeedPct proposed after a focus recording. Only ~1s of one post-reload climb falls inside her window.
  • Evidence: S2a tests 38 passed + 1 GAP skip, every counterfactual RED (S2d). S5 blind tests run 14/14 green against the override. S6 blind override structurally identical. S7 GO 1.0 (claude-fable-5-1, binding) and GO 1.0 (claude-fable-5). Same-family only (Claude).
  • S2c fix: both S2b reviewers and S6 read the 2-attack count as in-state only, so I set countScope: 'gated' before landing.
  • Owner spot-check, scope: the 14.06% strike is core-eligible at the MG core rate 0.95, not a guaranteed core (one reviewer read it as guaranteed, ~5% of strike damage). Open Wounds is assumed non-stacking.
  • Owner spot-check, duration and trigger identity: Penetrant Wish runs 10s from her own cast (not Full Burst entry). The first spear volley fires at t=4s by engine convention, not t=0.
  • Board: no recording and no graded comp includes her. regression.ts output is byte-identical with and without her override. Control comp sim total ≈1.44B (normals 500M / spears 443M / strikes 431M / nuke 67M).
  • ⚠ Already broken at base 9aab2f0 (today's sync), not caused by this unit: red-hood is missing from characters.json. That crashes regression.ts (PA MiKa), board-read, kit-status --refresh and ranks:all, and with the sync data causes 7 regression drifts and ~47 vitest failures. Those failures are identical with and without this unit's changes. Expect verify.sh RED until the sync is fixed.
  • Because --refresh crashes, I added her kit-status row in the --refresh entry shape and then ran --gauntlet. Unit pages and sitemap got her entries only; the sync fallout for other units is left for batch reconciliation.
  • Leftover: a throwaway worktree /tmp/mq-basewt (the hook blocked forced removal). Clean it up with rm -rf /tmp/mq-basewt && git worktree prune; it is logged in docs/handoffs/autonomous-edit-queue.md.

Rapunzel: Sanctuary (rapunzel-sanctuary) — GO — faithfulness 1.0 — tier 2

  • Override: each full-charge shot heals all allies (a recovery event; the HP amount isn't modelled) and adds a 220.7% hit on the boss (plain hit, can crit, not core). At every Full Burst entry, self + "Into the Fray" allies get Attack Damage ▲27.45% and ATK ▲29.17% of her ATK for 10s. Her own burst cast gives all allies ATK ▲34.84% of her ATK for 10s. Charge-speed immunity via charFixes.statImmunities. 31/31 unit tests green; simSupported: true.
  • Engine primitive: a new opt-in target, alliesInStatus (statusPrefix, includeSelf), for "self and all allies in the Into the Fray state" (commit 535abad). Code review by claude-fable-5-1 returned FIX-BEFORE-MERGE; the fixes landed in a2f5bcf (a roster-wide producer warning in the validator, a ranks-page guard). scripts/regression.ts output is byte-identical with and without the engine change and the override.
  • Owner action: no shipped override emits an "Into the Fray: …" status yet, so both Full-Burst-entry buffs reach only her today. For the buffs to reach Marian: Queen / Scarlet: Goddeath, marian-queen needs a battle-start selfStatus "Into the Fray: Sharpened Resolve" and "Penetrant Wish" renamed in full, and scarlet-goddeath needs "Into the Fray: Serene Mind". Exact edits are in docs/engine-modeling-gaps.md §24. I didn't make them: other units' overrides are outside this run's authority.
  • Unmodelled lines:
    • Nanoparticle Injection branch (revive, +40s burst cooldown, Consumption DEF): unreachable, because nobody is incapacitated in v1.
    • Shared shield and Goddess Blessing DEF: these need Full Charge held ≥1s, which the sim never does. Same precedent as rapunzel-pure-grace, guilty-mighty-bunny and sin-swift-bunny.
  • Owner spot-check:
    • SCOPE: Into the Fray allies only (dormant until the edits above).
    • DURATION: all grants 10s; the immunity is whole-fight here vs from her first full-charge shot in-game.
    • TRIGGER-IDENTITY: the 27.45 / 29.17 buffs fire at every Full Burst, including ones she sat out; the 34.84 buff fires on her own cast; check whether auto ever holds a charge.
  • Reviewers: S2b fable-5 and fable-5-1 agreed with the driver's spec on every line. S6 matched on every damage line. Both S5 and S6 put the held-charge lines on every full-charge shot, which both judges rejected. S5's blind tests (after a one-line harness-wiring fix) passed 7/10 against the override: 2 RED are that held-charge proxy, 1 is a noFb arm the engine ignores by design.
  • Board: no recording and no graded comp, so no A/B numbers. The 7 regression snapshot drifts and the 5 failing ranks tests already fail at this branch's base: the sync dropped red-hood.
  • Skipped / leftovers:
    • Full verify.sh not run (left to the wrapper).
    • Two tagged stash entries (rapsanct-*) left because git stash drop is hook-blocked; they duplicate committed work and are noted in docs/handoffs/autonomous-edit-queue.md.
    • The untracked scarlet-goddeath portraits were left alone.

Scarlet: Goddeath (scarlet-goddeath) — NO SUMMARY (session died or hit a ceiling) — see /Users/maxwellsutton/Library/Logs/nikke-newunit-watch/run-20261029T060005

Roster test pins

roster test pins — 2026-10-29 sync: NOTHING COMMITTED (upstream data regression, not pinnable)

  • The sync (9aab2f0) is broken upstream, so I updated no pins. It added marian-queen / rapunzel-sanctuary / scarlet-goddeath, but it also dropped red-hood (her override is still in src/skills/overrides/red-hood.json; she's also gone from gauge-per-shot.json, archetype-tags.json and tsareena-build.json) and set rl3 + releaseDate to null on about 196 of 205 characters (rl3: 0 nulls before, 196 after; all 21 Treasure dates are gone). This looks like bakery-bot's Synergy attributes/rows going missing. Pinning it would write the bad data into the tests.
  • Typecheck is green. scripts/tests without units/: 43 failed / 1407 passed in 15 files. The same 5 drift suites all pass at HEAD~1, so the sync caused these failures:
    • red-hood gone: census-kit-numbers (2), census-unmodeled-entries (2), convert-excess, stage-targeting, ranks/b1b2dps (4), battery/multihit-crediting, and probably gauge-source-census (its fixture names red-hood).
    • releaseDate nulled: data/release-dates (22), share/new-favorite-items (4).
    • Gauge/frame drift: element-control and charge-counter-gates (2). Most likely red-hood or rl3 going missing; I didn't isolate which.
    • New units: ranks/sustain (rapunzel-sanctuary is tagged healer and has no SUSTAIN_TABLE entry, so it needs modeling, not a pin). share/sitemap-drift and serve-api/serve-headers (sitemap 404) changed with the roster too, but I left the sitemap alone because regenerating it would lock in red-hood's removal.
  • Before any PR: fix the upstream DB (or sync.ts's matching) and re-run npm run sync, or revert the sync's red-hood/rl3/releaseDate losses. Don't push this branch as it stands.
  • Untracked new-unit portraits in web/public/img/portraits/ were left as they were (not mine).

Gate

bash scripts/verify.sh: RED (log on the owner's Mac: /Users/maxwellsutton/Library/Logs/nikke-newunit-watch/run-20261029T060005/verify.log)

Same-family provenance: every blind/judge role ran on a Claude model (no Kimi/Qwen access) — a GO is weaker evidence than a cross-family GO; spot-check the scope / duration / trigger-identity lines.

🤖 Generated with Claude Code

Infernal-Crack-LED and others added 20 commits October 29, 2026 06:00
Daily new-unit watch (~/.nikke-newunit-autopilot): `npm run sync` against bakery-bot's DB added
these units; their char-extracts are the characters.json entries minus nicknames. Per-unit gauntlet
commits follow.
Premise: every kit line of Marian: Queen (P1-P7 + P8 MG ramp-up GAP) read from the SL10
blablalink prose in characters.json; RED verified (resolveSkills throws: no override).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-5 + claude-fable-5-1)

Both blind reviewers converged with the S2a spec on every line's disposition, trigger identity
(burstCast for Penetrant Wish / the burst-use Open Wounds), the ownBurstGate:'notCast' proxy for the
NOT-in-state FB branch, and the MG Ramp-Up Speed GAP. Same-family only (Claude).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…GAP skip)

Every line encoded with existing primitives (interval + skillCooldownReductionSec, targetStatus
'Open Wounds' + permanent damageTakenPct, selfStatus 'Penetrant Wish' gating hitCount core strikes
and the FB-entry Core Damage branch, ownBurstGate notCast for the NOT-in-state Sequential branch).
MG Ramp-Up Speed is the one GAP (no wind-up-speed modifier; engine-modeling-gaps). Block-order
fixture regenerated: Penetrant Wish producer-first, as P4/P6 pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…trant Wish counterfactual

Arm 1 (no override) RED; arm 2 36 passed / 1 GAP skip, every DISCRIMINATING case RED against its
named nearest-wrong encoding. Adds the central-trap counterfactual both S2b reviewers named.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…untScope gated (S2c fix)

S2b fable-5, S2b fable-5-1 and S6 opus-5 all read 'Activates after performing 2 normal attacks'
as a count belonging to the Penetrant Wish state (only in-state rounds accrue) — the driver's S2a
had the ungated counter. Resolved toward the prose; tests still 36/36 + 1 GAP skip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…+ convergence run

S5 blind tests run against the shipped override after the one-line onEvent→cfg wiring fix:
14 passed / 4 FLAG skips (convergence). S6 blind override matches structurally (differences:
one merged 878.57% gaugeHits-7 volley vs seven 125.51% hits — damage-neutral; perPull; selfStatus
name; ownBurstGate:'cast' vs requiresSelfStatus for the IN branch — equivalent). Spec test adds
the cumulative ⌊in-window rounds/2⌋ pin + the ungated-counter counterfactual (38 + 1 GAP skip).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cket rebuilt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… GO 1.0 (claude-fable-5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d modifier (marian-queen GAP)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….0 / 1.0

NEW unit, MG / Attacker / Fire / Pilgrim, Burst III cd 40s (no base `marian` in the roster). Tier 2.
Driver Claude Opus 5.5; Claude-only routing (owner 2026-10-02): S2b claude-fable-5 + claude-fable-5-1,
S5/S6 claude-opus-5, S7 claude-fable-5-1 (binding) + claude-fable-5 — same-family evidence only.
No engine change. MG Ramp-Up Speed ▲100% is the one GAP (engine-modeling-gaps §23).

Land: simSupported true; kit-status row added in the --refresh entry shape (a full --refresh crashes
on the base sync's missing `red-hood`) then --gauntlet; unit page, sitemap entry, unmodeled-review
mirror, doc-drift census + bucket matrix regenerated (marian-queen rows only — the sync's fallout for
other units is left to the batch reconciliation); DECISIONS entry for the status-negation proxy, the
gated strike counter and the core-strike rate; manual-review doc; portraits.
Board-inert: scripts/regression.ts output is byte-identical with and without her override (its 7 drifts
+ the PA MiKa crash are pre-existing on base 9aab2f0 — `red-hood` dropped by the sync).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ate" (for rapunzel-sanctuary)

New target {kind:'alliesInStatus', statusPrefix, includeSelf?}: the allies whose kit-NAMED
self-status window (the `selfStatus` / `requiresSelfStatus` channel, unit.selfStatuses) is OPEN at
the apply frame (expiry > frame — the same open test as the requiresSelfStatus gate) and whose name
starts with statusPrefix, so one prefix covers a family of named modes ("Into the Fray" →
"Into the Fray: Serene Mind", "Into the Fray: Sharpened Resolve", …); includeSelf adds the owner
unconditionally. Sibling of the other ally selectors (alliesOfElement/…/adjacentAlly). Validator
rejects a missing/blank statusPrefix (it would match every open status); web targetLabel names it.
Pinned by scripts/tests/engine/allies-in-status.test.ts (open/lapsed/other-name/self cases).

Inert for every existing override (no carrier until rapunzel-sanctuary lands):
scripts/regression.ts output is byte-identical with and without this commit (7 pre-existing
snapshot drifts at HEAD — moran, cinderella, neon-vision-eye, trina, anis-star, chisato, noir —
are unchanged by it). Engine edit owner-approved 2026-10-02 (new-unit watch standing exception).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uilder CDR guard (for rapunzel-sanctuary)

Addresses the claude-fable-5-1 code review of 535abad (FIX-BEFORE-MERGE):
- validate-structural targetStatusCensus: alliesInStatus is the one cross-unit READER of self
  statuses, so its producers are scanned roster-wide; a statusPrefix that no override's selfStatus
  name starts with is a WARNING (the target then selects nobody but includeSelf) — warning, not
  error, because the family's members may legitimately be unmodeled. Pinned in
  scripts/tests/validate-structural.test.ts (no producer / other-unit prefix producer / non-prefix
  producer).
- src/ranks/buffer.ts hasAllyCdr: alliesInStatus no longer counts as an ally-facing burstCdr for the
  enabler detection (synthetic carries never open a named status). Inert today (no carrier authors
  burstCdr on it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ne code review result

scripts/tests/units/rapunzel-sanctuary.test.ts: one group per kit line L1–L11 (26 tests), all RED
against "no override" (new unit). Tier 2 (burstCast-vs-fullBurstEnter identity, the status-scoped
"self and all allies in the Into the Fray state" target, a receiving-side charge-speed immunity).
scripts/kit-autonomy/reviews/rapunzel-sanctuary.engine-review.json: claude-fable-5-1 code review of
535abad (FIX-BEFORE-MERGE → fixed in a2f5bcf).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
src/skills/overrides/rapunzel-sanctuary.json — S1 full-charge heal (allies, event) + Full-Burst-entry
attackDamagePct 27.45 10s; S2 Full-Burst-entry casterAtkPct 29.17 10s + full-charge flatDamage 220.7;
both FB-entry grants target alliesInStatus {statusPrefix 'Into the Fray', includeSelf}; burst
(burstCast) all allies casterAtkPct 34.84 10s; charFixes.statImmunities ['chargeSpeedPct'].
Unreachable (no incapacitation in v1: Nanoparticle Injection branch, +40s cooldown, Consumption
state) and charge-hold (shield, Goddess Blessing DEF) lines verbatim in `unmodeled`; ⚑1–⚑3 in note.
Tests: S2b-reconciled additions (rider not core-eligible; one burst grant per ally per cast), a
two-B2 fixture for the Full Bursts she sits out, and counterfactual arms for L3/L5/L8/L9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…able-5-1, claude-opus-5) + S2d matrix

- S2b ×2 (fable-5, fable-5-1): converge with the driver spec on every line (dispositions, the
  alliesInStatus 'Into the Fray' + includeSelf target, burstCast keying of the burst, the
  unreachable/charge-hold UNMODELED set, the 6-line load-bearing set).
- S5 (opus-5) blind tests, verbatim + an .adapted copy whose ONLY change is the harness fix
  opts.onEvent → opts.cfg.onEvent (the verbatim file collects no events). Adapted run vs the shipped
  override: 7 pass / 3 fail / 3 skip. RED: S2-a shield + S2-b Goddess Blessing DEF (the blind
  writers proxied "Full Charge maintained for 1 or more seconds" onto fullCharge — the nearest-wrong
  both S2b reviewers named; driver keeps them UNMODELED: the sim never holds a charge), and S2-d's
  noFb counterfactual arm (noFb on an override effect is engine-inert under the default, so that arm
  cannot move damage — a blind-test defect, not a divergence).
- S6 (opus-5) blind override: identical to the driver's on every damage line; diverges only on the
  same two charge-hold lines (+ a redundant crit:true — riders are crit-eligible by default).
- S2d matrix: scripts/kit-autonomy/reviews/rapunzel-sanctuary.verify.txt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pins (31/31)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing) / GO 1.0 (claude-fable-5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ithfulness 1.0 / 1.0

NEW unit, RL / Supporter / Fire / Pilgrim, Burst II cd 40s (not the base `rapunzel` nor
`rapunzel-pure-grace`). Tier 2. Driver Claude Opus 5.5; Claude-only routing (owner 2026-10-02): S2b
claude-fable-5 + claude-fable-5-1, S5/S6 claude-opus-5, S7 claude-fable-5-1 (binding) + claude-fable-5,
engine review claude-fable-5-1 — same-family evidence only.

Engine: new opt-in target alliesInStatus (535abad; review FIX-BEFORE-MERGE → fixed in a2f5bcf) for
"self and all allies in the Into the Fray state". Open dependency (engine-modeling-gaps §24): no shipped
override emits an "Into the Fray: …" selfStatus yet, so her Full-Burst-entry grants reach only her until
marian-queen / scarlet-goddeath carry the statuses.

Land: simSupported true; kit-status row (refresh entry shape) then --gauntlet; unit page, sitemap
entry, unmodeled-review mirror, doc-drift census + bucket matrix (rapunzel-sanctuary / alliesInStatus
rows only — the sync's red-hood/scarlet-goddeath fallout is left to the batch reconciliation); STATE.md
alliesInStatus row; DECISIONS entry; engine-modeling-gaps §24; manual-review doc; portraits; edit-queue
note for two leftover tagged stash entries.
Board-inert: scripts/regression.ts output is byte-identical to the pre-engine base with the engine
change + her override (its 7 drifts are pre-existing — `red-hood` dropped by the sync).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant