Skip to content

The mascot's points burst: #16 said drop it, #160 renumbered it instead #212

Description

@maximsan

This was generated by AI during triage.

Half of this is superseded by #518. The pose is drawn again, on the terms this ticket rejected: the amount is passed in, required with the state and rejected without it, so the mascot still names no payout of its own. What stands is the rest — no v1 moment that already celebrates gets a second one wired into it, so nothing calls the pose. It waits for Coffee Duel's round-complete beat, where the design puts it.

Follow-up owed by #160. A disposition of #16 that #160 was built to implement, and missed.

What #16 ruled

roasty_particles.dart:171 hardcodes a '+15 XP' particle matching no rule in the app — not perStep, not the module bonus. It goes with the toast.

and, in the same comment's disposition table:

'+15 XP' in roasty_particles.dart:171 Dropped Matches no rule in the app; a hardcoded string

What #160 did instead

Renumbered it. The vocabulary sweep rewrote the literal to '+10 PTS' and named it a placeholder constant, which fixed the word and left the defect — a payout hardcoded into painted art. Ten is no more read from a rule than fifteen was.

It is invisible to tooling: the particles file is excluded from no-magic-number, and that exclusion is justified for coordinates, not for payouts.

Why deleting is the answer, not parameterizing

The pose has never rendered. CompanionReaction.xpGained is fired by nothing; RoastyState.xp is reachable only through it. So no learner has seen the wrong number, and nothing would have caught it.

The alternative — keep the pose and pass the real payout in, as the design does (roasty.jsx:575 renders +{pointsAmount} PTS) — was considered and rejected at triage. The lesson result screen already plays CompanionReaction.lessonComplete, and §5.1 puts points on that same screen. Wiring a second celebration into one moment is a design decision about what happens to the first, which is scope this ticket has no business carrying.

This ticket therefore deletes. If a points-earned moment is ever wanted, it is authored deliberately against a screen that has room for it — not inherited from an unreferenced pose carrying a stale number.

Related

The unwired-pose gap is broader than this ticket and is split out to #219: correct, wrong and cardEarned are also fired from nowhere, and §5.1 asks for the first two by name.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions