Repository navigation
engine: fullCharge + selfStatus primitives, audit prose-drift cleanup (kit-audit follow-ups) - #146
Merged
Merged
Conversation
…ge proxy
New trigger kind {kind:'fullCharge'} dispatches only on charged pulls
(the charge fire-path's release). Charge weapons in-sim release
exclusively at full charge, so for the 14 migrated SR/RL units this is
inert BY MECHANISM (every fire-path pull of theirs — including
charge-class swap states and cinderella's mag-dump — carries
charged=true); regression over the graded comps confirms byte-identity,
and the new trigger-kinds matrix pins both the equivalence (RL carrier)
and the new expressiveness (an MG carrier's fullCharge block stays
silent where shotFired fires per pull).
Migrated 25 blocks whose kit line says "Full Charge" across:
ade-agent-bunny, anis-star, bready, cinderella, diesel-winter-sweets,
eunhwa-tactical-upgrade, helm, liberalio, maiden-ice-rose,
maxwell-ordinary-mechanic, milk-blooming-bunny, mint, prika,
snow-white-heavy-arms. Kit-silent triggers (mari S2) and
counted/stance shapes (hitCount, chargeCounter, crust) stay as they
were. fullCharge joins APPLICATION_NONGEN_TRIGGERS (a per-shot rider
shape), the structural validator's TRIGGERS + PER_PULL sets, the
offline kit-parser mapping, and the two battery scripts' trigger sets.
Override note/caveat prose updated to describe the shipped encoding
(the "no full-charge trigger in the type system" claims dissolve; the
landing/effective-range residues stay ⚑-flagged).
Follow-up from docs/kit-faithfulness-audit-2026-08-23.md §5.1
(owner-directed 2026-08-24).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…us side channel
New effect {kind:'selfStatus', name, durationSec} + block gate
requiresSelfStatus: a kit-named status window kept ON the unit
(per-(unit,name) map, max-extend), the ally-side sibling of
targetStatus. Wired through the structural validator (EFFECTS, shape
check, producer/consumer order pairing as its own family) and the
fb-count-matrix gauge census (no-emission, status-window-only).
Migrated asuka-wille's Annihilation State off the boss-targetStatus
proxy her own caveat flagged as a name-keyed side channel (judge
gotcha 3): burst now opens selfStatus on herself, the S1 proc gates on
requiresSelfStatus. Behavior-identical for her — window frames are the
same and her 28-pin spec suite passes unchanged — and the cross-unit
false-read hazard is structurally gone. New engine spec
(self-status.test.ts) pins the gate window plus BOTH isolation
directions. Also deleted her note's stale "left unenacted" claim about
the reload clamp the JSON has shipped since the gauntlet (audit §6).
Follow-up from docs/kit-faithfulness-audit-2026-08-23.md §5.2/§1
(owner-directed 2026-08-24).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Current-state override-prose ruling (2026-07-22, delete on sight) applied to the contradictions the 2026-08-23 kit-faithfulness audit flagged (§6): - anchor-innocent-maid: the "collapsed to ONE heal event" ⚑ contradicted the shipped heal ticks:8 block (fix landed 2026-07-17 per its caveat). - phantom: ⚑2 narrated the superseded durationShots:2 encoding against the shipped :1 + engine grant-frame carve-out. - mihara-bonding-chain: "FOLDED into the 12-stack average" vs the shipped discrete hitCount:40 block + live pool; header board figure 1.034 updated to the post-live-pool 1.179 its own caveat records. - drake: pre-treasure/pre-perPull narrative values (hitRatePct 11.85, hitCount 100, flatDamage 1254) aligned to shipped 20.09 / hitCount 10 perPull / 3009.6 (treasure reconcile already in the header). - flora: dropped the "stack-increment has no engine primitive" clause — the addStack block ships. - ada: "interleave to exactly 1/s" corrected to the engine's actual paired-tick spacing (damage-identical, count-identical). No block/value changes — validators green, all six unit suites green (116 tests), kit-status mirrors re-synced per-unit via --sync-mirrors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
STATE.md gains the fullCharge trigger row, the requiresSelfStatus gate row, and the rider-exclusion mention; engine-modeling-gaps primitive census regenerated via doc-drift --update (105 primitives / 69 rows). targetStatusCensus (the verify.sh names gate) learns the selfStatus family: a requiresSelfStatus gate with no same-unit selfStatus producer of the exact name is an ERROR (per-unit channel — there is no legitimate future-cross-producer reading, unlike the boss channel). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
45 units audited read-only (top 5 B3 per element at the 8/12 DPS-chart cell solo.eleweak.c100.8of12 + top 20 buffer-board generic supports) by 9 parallel agents comparing kit prose vs override blocks vs engine. Verified: no hidden recording-fitted values conflicting with kit remain in the slice. Recorded: hidden-divergence list, disclosed-but-material open items, systemic engine-primitive gaps, note-prose staleness sweep. QUEUE.md gains a pointer; the mihara-bonding-chain mirror finding is cross-referenced to its existing 2026-08-17 localization, not re-opened. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs/handoffs/2026-08-24-kit-audit-primitive-followups.md records what landed on this branch and every open thread with its gate (mechanical: fullCharge roster tail, note palimpsests; measurement/owner-gated: status-end trigger, consumeStatus, stack-mirror snapshot, prika/ccw sentinel windows, flora sides, mint HELD, cinderella G1, HR→core). QUEUE.md audit item updated to point here. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ale-claim sweep
Cross-family review (kimi-code/k3, FIX-BEFORE-MERGE) fixes:
- web/src/App.tsx triggerLabel: 'per full charge' case — the migrated
units' buff lines rendered '(conditional)' instead of a per-shot-class
label (web build + smoke green).
- validate-structural: a selfStatus effect on a target-'enemy' block is
now a structural ERROR (resolveTargets({enemy}) returns [] — the
status would apply to nobody while the same-unit census still saw a
syntactic producer); census comment records the future ERROR→WARN
split for cross-unit grants.
- Swept 14 overrides whose notes still claimed "the engine has no
self-status gate/channel" (several citing the retired asuka-wille
boss-status proxy as precedent) — each now names the 2026-08-24
selfStatus channel and keeps only its still-true residual constraint;
rei-ayanami-tentative-name + rem flagged as the remaining carriers of
the retired proxy (mechanical migration candidates, follow-ups doc).
- Three per-pull enumeration comments gain fullCharge; mirrors +
unmodeled-review regenerated.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tFired count basis - maiden's note carried a second, earlier stale "no self-status GATE" sentence the round-1 sweep missed (self-contradictory within one note) — rewritten to the feed-not-the-gate framing; mirror re-synced. - 7 new test pins for the previously-unpinned validator behaviors: fullCharge TRIGGERS membership, selfStatus enemy-target rejection, the asuka-wille-shaped producer/consumer acceptance, the same-slot self-status order warning, and the census same-unit rule (missing producer errors, cross-unit producer does not satisfy, same-unit pair passes). - STATE.md shotFired row re-based to a verifiable file count (28, post-migration) instead of the stale unverified "~21 units". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Owner-directed follow-up to the 2026-08-23 top-board kit-faithfulness audit ("start work on the missing primitives and the note prose drift"). Both primitives encode already-answered modeling questions (literal kit lines / owner-ruled behavior), so per the 2026-08-11 standing ruling this skipped /scientific-method and went through cross-family /code-review instead — kimi-code/k3, three rounds, final verdict CLEAN (audit trail in scratchpad/gates/2026-08-24-kit-audit-primitives/).
What this adds
1.
fullChargetrigger primitive — fires only on charged pulls. Retires the bareshotFiredproxy for "Activates when performing/attacking with a Full Charge attack" kit lines: 25 blocks across 14 audited-slice SR/RL units migrated (ade-agent-bunny, anis-star, bready, cinderella, diesel-winter-sweets, eunhwa-tactical-upgrade, helm, liberalio, maiden-ice-rose, maxwell-ordinary-mechanic, milk-blooming-bunny, mint, prika, snow-white-heavy-arms). Inert by mechanism for these units (the charge fire-path releases exclusively at full charge, incl. charge-class swap states and cinderella's mag-dump); regression over graded comps is byte-identical, and the trigger-kinds matrix pins both the equivalence (RL carrier) and the new expressiveness (an MG carrier's fullCharge block stays silent).2.
selfStatuseffect +requiresSelfStatusgate — per-(unit, name) self-mode windows. Migrates asuka-wille's Annihilation State off the boss-targetStatusproxy her own caveat flagged as a cross-unit side channel (judge gotcha 3). Behavior-identical for her (28-pin suite unchanged); both isolation directions pinned in a new engine spec; the names census now errors on a same-unit-unproduced gate, and a selfStatus on an enemy-targeted block is a structural error (it would apply to nobody).3. Note-prose drift cleanup (audit §6 + review-round-1 sweep): stale narration contradicting shipped blocks deleted on anchor-innocent-maid, phantom, mihara-bonding-chain, drake, flora, ada, asuka-wille; 14 further overrides claiming "the engine has no self-status gate/channel" rewritten to name the new channel while keeping only still-true residual constraints. Kit-status mirrors re-synced per-unit; STATE.md + engine-modeling-gaps census synced; unmodeled-review regenerated.
4. Follow-ups doc —
docs/handoffs/2026-08-24-kit-audit-primitive-followups.mditemizes every open thread with its gate: the fullCharge roster tail (~20 units, per-line verification needed; zwei SG caution), rei-ayanami-tentative-name + rem as the remaining carriers of the retired boss-status proxy, the measurement/owner-gated primitives (status-end trigger, consumeStatus, stack-mirror snapshot, sentinel-duration retirement), flora sides:2, mint duet gating (HELD), cinderella G1, the HR→core measurement, parser-baseline drift, and the two note palimpsests. QUEUE.md points at it.Blast radius
Zero damage-model movement: verify.sh green including the pinned regression (byte-identical graded comps) and board-hash parity; web build + smoke green (the one user-visible change is the "per full charge" trigger label the review caught). No DECISIONS entries — no game-behaviour ruling changed, so no patch-notes draft accompanies this (nothing player-facing moved; flagging per the pre-push hook).
Includes the audit findings doc commit (cherry-picked from local main so the branch is self-contained).
🤖 Generated with Claude Code