Skip to content

feat(bets): the bets board, on the goal it belongs to (v0.454.0) - #853

Merged
vikasprogrammer merged 1 commit into
mainfrom
feat/bets-board
Oct 5, 2026
Merged

vikasprogrammer merged 1 commit into
mainfrom
feat/bets-board

Conversation

@vikasprogrammer

Copy link
Copy Markdown
Owner

What

A Bets tab beside Tasks in the goal room — phase 6.1 of docs/bets-plan.md. Every attempt at that goal's number, in lanes (Proposed · Running · Judged · Closed), each card carrying:

  • hypothesis + lever chip
  • day N of M against the bet's window, and the date it judges
  • lift so far — Σ(the bet's own assets' values) − baseline — against what it predicted
  • the verdict pill once the arithmetic has run (met ok-tone, short warning-tone, no_signal neutral — painting "untested" red is the most misleading thing this board could do)
  • the lesson, and the assets as links with each one's value, "unmeasured" where there is none, and a marker when it was never indexed

Owner/admin get Judge now on a running bet and Keep / Expand / Kill on a judged one, each requiring the lesson the server also requires (the server is the only validator; its error is surfaced verbatim). verdict and observedLift are displayed and never offered as an input, matching the agent lane.

Two layout decisions made against the real page

I rendered the board against a copy of the live instapods DB and screenshotted it rather than reasoning about it:

  1. It belongs in the main column, not the sidebar. First cut put it in the goal room's 320px right rail, where four lanes are ~70px wide and the (empty) main column sat beside it. It is now a tab.
  2. Lanes size themselves, and an empty lane is not drawn. The main column is ~750px on a 1440 laptop — measured, not guessed — so a fixed four-column grid gives 170px lanes full of truncated URLs. auto-fit, minmax(250px, 1fr) plus dropping empty lanes (named in one line underneath) gives the work the full width: on the live goal, four running bets and nothing else, the Running lane now spans the column.

Testing

Server side went in with v0.453.1 (PATCH /api/bets/:id, POST /api/bets/:id/judge, and the auth-gate fix), covered by scripts/bets-test.cjs — 43 assertions, including that an owner PATCHing observedLift: 99 changes nothing. Full npm run test:governance passes; cd web && npm run build passes.

🤖 Generated with Claude Code

A Bets tab beside Tasks in the goal room: every attempt at that goal's number in
lanes, each card carrying the hypothesis, day N of M of its window, the lift
measured on the bet's OWN assets against what it predicted, the verdict pill,
the lesson, and the assets as links with their values.

Owner/admin get Judge now on a running bet and Keep / Expand / Kill on a judged
one, each needing the lesson the server also demands. verdict and observedLift
are displayed, never offered as an input — the board cannot be used to talk a
number into existence any more than the agent lane can.

Two layout calls made against a screenshot of the real goal rather than in the
abstract: the board lives in the main column (a four-lane board in the 320px
rail is 70px lanes), and lanes size themselves with empty ones dropped to a
single line — the main column is ~750px on a laptop, where a fixed four-column
grid gives 170px of truncated URLs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vikasprogrammer
vikasprogrammer merged commit 6104510 into main Oct 5, 2026
1 check passed
@vikasprogrammer
vikasprogrammer deleted the feat/bets-board branch October 5, 2026 06:34
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