backlog · blocked on the design source. Nothing to build until prototype/ says how this looks — filed so the gap is written down, not so it is picked up. Nothing is broken and no card is lost, so this waits for the design to be thought through properly rather than being patched around.
The gap
Every lesson hands over a collectible, and the lesson ending is where a learner sees it. A lesson that is last in its module never plays that ending: the flow branches to the module ending instead (app.jsx — isLastInModule), which shows the module's reward on its back face. So the lesson's own card is collected in silence.
Measured against the shipped banks, that is five cards, one per module:
| Module |
Last lesson |
The card it hands over |
| m1 |
m1l7 |
The Cherry in Section |
| m2 |
m2l6 |
Decaf |
| m3 |
m3l6 |
Caffeine |
| m4 |
m4l7 |
Your Grinder |
| m5 |
m5l6 |
Your First Cup |
The card is still collected and still on the Cards tab. What is missing is the beat where the app says here is what you just earned — in an app whose reward loop is that beat.
Why it is open again
#458 ruled on 31 Aug that "the design has that hole; the app does not take it", and the module ending grew a row reporting the closing lesson's card. #490 restyled both endings onto the 3 Sep drop's anatomy, where the module front is a points line and a freeze line and carries no list — so the row went.
The 3 Sep drop did not revisit this. The branch in app.jsx is unchanged, and the restyled ModuleCompleteScreen takes no lesson-card prop at all. The hole is exactly where #458 found it; only the app's cover for it is gone.
What is owed, and in what order
- The design decides.
prototype/rewards.jsx has no slot for this today. Whether it is a row on the module front, a second face, a line under the points, or deliberately nothing is a design call, and the app should not invent a fourth answer — the last one it invented is what this ticket is undoing.
- Then the app follows, which is small: a row, a field on
ModuleEndingRun, a test.
Not urgent: nothing is broken, no card is lost, and the moment is missing rather than wrong.
Acceptance
backlog· blocked on the design source. Nothing to build untilprototype/says how this looks — filed so the gap is written down, not so it is picked up. Nothing is broken and no card is lost, so this waits for the design to be thought through properly rather than being patched around.The gap
Every lesson hands over a collectible, and the lesson ending is where a learner sees it. A lesson that is last in its module never plays that ending: the flow branches to the module ending instead (
app.jsx—isLastInModule), which shows the module's reward on its back face. So the lesson's own card is collected in silence.Measured against the shipped banks, that is five cards, one per module:
m1l7m2l6m3l6m4l7m5l6The card is still collected and still on the Cards tab. What is missing is the beat where the app says here is what you just earned — in an app whose reward loop is that beat.
Why it is open again
#458 ruled on 31 Aug that "the design has that hole; the app does not take it", and the module ending grew a row reporting the closing lesson's card. #490 restyled both endings onto the 3 Sep drop's anatomy, where the module front is a points line and a freeze line and carries no list — so the row went.
The 3 Sep drop did not revisit this. The branch in
app.jsxis unchanged, and the restyledModuleCompleteScreentakes no lesson-card prop at all. The hole is exactly where #458 found it; only the app's cover for it is gone.What is owed, and in what order
prototype/rewards.jsxhas no slot for this today. Whether it is a row on the module front, a second face, a line under the points, or deliberately nothing is a design call, and the app should not invent a fourth answer — the last one it invented is what this ticket is undoing.ModuleEndingRun, a test.Not urgent: nothing is broken, no card is lost, and the moment is missing rather than wrong.
Acceptance
prototype/states how a module-final lesson's collectible is revealed, or rules that it is not