feat(ui): fun-while-dying slice 3 — honest demise scorecard + comedic awards - #18
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…death toll Reviewer Minor: awards highlight used isHuman() (tags all hotseat human slots) while the rest of the screen is player1-only. Unify on player1; multi-human per-player scorecards remain out of scope. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟢 Claude BugBot Analysis
Reviewed the diff (docs, CSS, Winners.tsx, new demise.ts module, and tests) and verified event field names, WinOutcome variants, and CSS class references against the engine types and existing code — no genuine defects found.
No bugs were detected in this PR.
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.
What
"Fun while dying" slice 3 (final slice) — makes the endgame honest and turns death into the reward. Fixes the playability assessment's core legibility failure (C1): a pyrrhic "winner" is just the last leader to die, yet the Winners screen crowned a corpse with "X WINS." UI + one pure derived module; no engine change.
Changes
LAST TO FALL: Xreplaces the pyrrhicX WINS(everyone's dead — nobody won). Survivor keepsX WINS(a real win); apocalypse keepsWINNER: NOBODY. Hero stamp matches.src/ui/util/demise.ts(new, pure) — derives comedic superlative awards from the game log + final leaders + outcome: DEADLIEST · BIGGEST BANG · TRIGGER HAPPY · DIED FIRST · LAST ONE STANDING / LAST TO FALL (mutually exclusive; both omitted for apocalypse). Deterministic, cast-order tie-breaks, awards with no qualifier omitted. PlushumanDemiseLine— an honest one-line epitaph (survived / was the last to fall / was eliminated, with pop lost + hits).Sample copy: DIED FIRST — "Set the tone. The tone was 'dead.'" · LAST ONE STANDING — "Outlasted everyone. That's the whole prize." · TRIGGER HAPPY — "N launches. Subtlety: none."
Verified
npm run typecheckclean;npm run test:run→ 448 tests green (13 new demise tests + updated Winners tests).src/ui/**+tests/ui/**— zero engine files;checkOutcome/WinOutcome/scoreStateuntouched, so hard-mode lookahead is unaffected.isHuman(), which tagged every hotseat human), matching the epitaph + death-toll convention; multi-human per-player scorecards remain out of scope.event.from(nottarget) and that Final-Retaliation damage still lands as ordinary log events (not lost).Spec:
docs/superpowers/specs/2026-07-26-fun-while-dying-slice3-demise-scorecard-design.md· Plan:docs/superpowers/plans/2026-07-26-fun-while-dying-slice3-demise-scorecard.mdCompletes the 3-slice "fun while dying" effort (slices 1 #17, 2 #16).
🤖 Generated with Claude Code