docs: participatory competition pivot spec + plan - #328
Draft
FlyM1ss wants to merge 3 commits into
Draft
Conversation
Open Track: users enter the leaderboard by submitting a trading instruction, run through the house LLMAgentStrategy harness at fixed season settings (Nemotron, temp 0, $10k, DJIA-30, one-month window). Two loops: the existing backtest engine stays the cheap iteration sandbox; a new deploy_user_entry() beside it produces the official, H6-guarded, comparable curve. The published Model Track curves are frozen; the Open Track carries its own house reference instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two boards (Replay qualifier + weekly Forward Season) replace the single fixed replay. Corrects the harness analysis: engine and leaderboard share one PortfolioManager and one branch in make_trading_decision_with_llm, so the divergence is parametric, not architectural. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 0 is a gate, not a PR: a $4.97 two-model probe that must show instruction quality moves the return before Phase 2 is built. Phase 1 ships display only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
FlyM1ss
added a commit
that referenced
this pull request
Aug 15, 2026
Settles the two naming questions the grilling session left open, and fixes two honesty bugs the name change exposed. Naming - The board is the **Live Trading Leaderboard** (was the working title "Live Season"). The tab, the board title and the About card all use it. - The tab key and API period become `live`. `season` and `daily` stay as aliases in NAV_VIEW_MAP, showCompetitionPanel, migrateSavedNavState and loadLeaderboardData, so ?view= deep links and saved localStorage from either earlier name land on the successor board. An unrecognised competitionTab matches no boot-CSS rule and no panel, so the failure mode being avoided is a blank Competition page, not a wrong tab. - The current season is Season 0, the shakedown season; Season 1 is the first that counts. Season 0 is falsy `season?.number ? ... : 'Season —'` renders Season 0 as *no season at all* — silently, and only for the season shipping right now. Both render sites now go through displayedSeasonNumber(), which does an explicit Number.isFinite check. Guarded by a source-shape test, because a test that passes 3 cannot see this bug. Two claims the UI was making and should not have been - The subtitle fell back to `window.start_date` for its "last completed" date, so the board printed "last completed 2026-04-15" — a specific, plausible, entirely invented advance date sitting directly under the banner saying no season has run. That fallback is gone; only daily_status carries a real advance, and preview suppresses it outright. - The season strip said "Next advance: nightly after the 16:00 ET close" unconditionally, promising a job that is not deployed. In preview it now reads "No advance scheduled". "Live" is itself a claim, so the About card qualifies it: simulated trading on real market data, no broker account, no real capital, no order leaving the system. PR #328 puts brokered execution in non-goals and execution/paper_backend.py is still a stub, so a board named for live trading that never says "simulated" is the UI promising something the system does not do. A guard test pins that disclaimer. 2866 passed, 78 skipped. Verified in a browser against a scratch-DB backend: ?period=live really does come back as period=contest, the preview banner fires, and none of the season chrome renders on the Competition board (checked via getComputedStyle, not element.hidden — a class-level `display` outranks the UA [hidden] rule and the attribute lies about it). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9cV2UzLgdTVmwcHLAtJeA
FlyM1ss
added a commit
that referenced
this pull request
Aug 15, 2026
Race.tsx sold "Race on the live leaderboard / Paper trading on live markets. Watch your agent climb against the community" over bullets promising live prices and rankings that update as agents trade. Every clause was false. Board entries come from the curated config/leaderboard.json roster, so no user agent is on any board and no entry path exists; Competition is a fixed historical window, so its prices are not live and its rankings do not move; brokered execution is a PR #328 non-goal with execution/paper_backend.py still a stub. Now names the two boards the app actually serves, and discloses that the Live Trading Leaderboard is in preview for Season 0 -- the landing-side half of the board's own preview banner, since nothing renders that banner one page upstream. The claim survived because its guard was scoped one file too narrowly: test_band_makes_no_paper_trading_claim bans paper[\s-]?trad in WhyCare.tsx only, so it lived on in the neighbouring section. New guards read the shipped bundle, not the TSX, so an unbuilt edit fails rather than passing against stale text. Bundle rebuilt per dashboard/landing/README.md; only the JS and CSS hashes moved (the logo is byte-identical) and the hand-written auth layer is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9cV2UzLgdTVmwcHLAtJeA
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.
DO NOT MERGE until the team has signed off — this sets platform direction, not just docs.
Docs only. No code, no schema, no routes.
What this is. ATL's hook becomes a participatory leaderboard: users write one trading instruction, run it against the same harness the house entries use, and see where they land.
Two boards, deliberately separate:
Two things worth a reviewer's attention:
HourlyBacktesterandLLMAgentStrategyboth build the samePortfolioManagerand callmake_trading_decision_with_llm, which has a singleif pipeline:branch. The divergence is parametric, not architectural — so "your leaderboard entry runs the same code as your agent" is a fact we can enforce, not a promise. The spec's earlier claim that the paths didn't share a template was wrong and is corrected.Scope. Plan covers Phase 0 + Phase 1 only. Phase 1 adds no tables and no routes — it seeds six house entries as config and puts the live board above the fold. Phases 2 and 3 are scoped at the end of the plan and get their own plans once the gate resolves.
Blocked on: the probe spend, and Allan's sign-off on renumbering the
01/02/03landing storyline (Task 8).Files:
docs/superpowers/specs/2026-08-09-participatory-competition-design.md,docs/superpowers/plans/2026-08-09-participatory-competition-phase-0-1.md.🤖 Generated with Claude Code