Raxx · internal docs

internal · gated ↑ index

Trading-Core Track Pitch — 2026-05-03

Prepared by raxx-pm-bot. For Kristerpher's review before dispatch.


Epic survey summary

Epic Sub-cards filed? Groomed + ready-for-dev? One-day slice available? Blockers
#85 Options chain viewer + iron condor builder None No (epic only, needs-grooming) No Architecture not scoped; no sub-cards exist
#90 In-window trade simulator None No (epic only, needs-grooming) No Depends on #85 Phase 2 as prerequisite
#183 Multi-tenant Alpaca None No (design research, not implementation) No Open design questions unresolved; regulatory flags
#245 Trade-Lifecycle Assistant None No (blocked label; architect design required first) No Architecture doc required before any dev cards
#256 Securities-only MBT v1 10 sub-cards (#257–#266) Partial — 5 groomed, 5 need-grooming; 3 ready-for-dev Yes #197 attorney sign-off (launch gate only, not dispatch gate)
#270 Market Calendar Service None filed yet (epic names 9 sub-cards) No (sub-cards described but not yet created as issues) No Sub-cards not filed; grooming pass needed first
#469 Onboarding Wizard Sub-cards referenced but not found as open issues No No Q1/Q2 open questions unresolved (trial vs paywall, plan names)
#495 Hybrid broker model None No (aggregator vendor choice unresolved) No Which aggregator to evaluate first — operator decision

Verdict: Only #256 MBT v1 has groomed, sized, dispatch-ready sub-cards today. Every other epic either lacks sub-cards, has unresolved architecture, or is blocked on an operator decision.


Primary track: MBT v1 Polish Sprint — anchor #256

Theme

Complete the MBT v1 sub-card set so that at end of day Kristerpher can walk through the full Antlers application as a first-time user and find zero stub copy, zero broken states, and a working options feature gate — putting MBT v1 into legal-review-and-ship posture.

Completion end-state

At end of day, Kristerpher can:

  1. Open frontend/trademaster_ui/ in a browser pointed at backend_v2/
  2. Navigate every page — Backtest, Backtesting, Historical Data, StrategyComparison, Settings, Trading — and find: finalized copy, loading skeletons, friendly empty states, human-readable error messages, correct responsive layout at 1280 / 1440 / 375px
  3. Observe that any options-backtest entry point shows the "coming soon" panel, not a broken form — confirmed by ENABLE_OPTIONS_BACKTEST=false in env
  4. Confirm Settings shows a masked credential UX and an explicit live-mode confirmation modal
  5. Confirm Trading shows a persistent paper-mode badge and options screening results with symbol / delta / IV / DTE
  6. Pull up docs/qa/mbt-v1-launch-checklist.md (from #265) and verify all seven user flows are documented with a sign-off row
  7. Confirm getraxx.com feature list accurately describes the MBT v1 scope (#266 — can run in parallel or follow-on)

The parent epic #256 stays open until attorney sign-off (#197) lands. But after today's sprint, every technical card in the milestone is merged — nothing left to build, only legal to clear.

Card sequence

Wave 0 — must land first (unblocks everything)

Card Title Size Label status Agent
#257 Add ENABLE_OPTIONS_BACKTEST feature gate — backend guard + frontend coming-soon panel s needs-grooming feature-developer (after groomer pass)

257 is the linchpin. Settings (#264), Trading (#263), and the launch checklist (#265) all reference the feature-flags endpoint it introduces. It needs one grooming pass before dispatch (flag discovery question in the card's own risks section — is /api/settings sufficient or does a new /api/feature-flags endpoint need to be added?).

Decision needed before dispatch: Does /api/settings already expose feature flags, or does #257 need to add a new /api/feature-flags endpoint? Answer determines scope size. Current card says "new endpoint or equivalent" — groomer should lock this.

Wave 1 — parallelizable after #257 merges (or can start with hard-coded flag=false assumption)

Card Title Size Label status Agent
#264 Polish Settings page — feature-flag read-only state, broker-mode switcher, credential UX s groomed ux-polisher
#262 Polish StrategyComparison page — copy, states, horizontal-scroll at mobile s groomed ux-polisher
#263 Polish Trading page — options trading and screening UX, paper-mode indicator, error states m groomed ux-polisher

264 and #262 are clean s-size, fully groomed, ready-for-dev today. #263 is m but groomed — assign to a separate ux-polisher invocation so it can run in parallel with #264 and #262.

Wave 2 — parallelizable, some still need grooming

Card Title Size Label status Agent
#259 Polish Historical Data page — copy, states, data-range note, responsive layout s needs-grooming ux-polisher (after groomer pass)
#258 Polish Backtest and Backtesting pages — copy, states, responsive layout m needs-grooming ux-polisher (after groomer pass)
#261 Polish SetupWizard — first-run flow, validation, credential confirmation, edge cases m needs-grooming ux-polisher (after groomer pass)
#260 Polish Dashboard — remove stub widgets, wire real data, per-widget states m needs-grooming feature-developer (data wiring, not just polish)

260 (Dashboard) is the most complex Wave 2 card — removing stub widgets requires backend wiring, not just copy. Assign feature-developer, not ux-polisher. The other three are polish-only; after a quick groomer pass they are straightforward ux-polisher dispatches.

Wave 3 — closing artifacts

Card Title Size Label status Agent
#265 MBT v1 launch checklist — E2E flow walkthrough, regression matrix, staging smoke test s groomed, ready-for-dev feature-developer or Kristerpher self-executes
#266 Update getraxx.com copy for MBT v1 — securities backtest, options coming soon s groomed, ready-for-dev ux-polisher or marketing pass

265 requires Wave 1 cards to be in a reviewable state before the walkthrough rows can be signed off. Can be drafted in parallel; sign-off is the blocking step. #266 requires Kristerpher's copy approval before merge per its AC.

Agent assignments

Agent Cards
card-groomer (dispatch first) #257, #259, #258, #261 — grooming pass to clear needs-grooming before dev starts
feature-developer #257 (Wave 0 gate), #260 (Dashboard data wiring)
ux-polisher #264, #262, #263 (Wave 1, parallel), then #259, #258, #261 (Wave 2 after groomer)
Kristerpher / ux-polisher #265 (launch checklist draft + self-sign-off), #266 (copy approval gate)

Acceptance

curl/API:

curl -s http://localhost:5001/api/settings | jq '.feature_flags.ENABLE_OPTIONS_BACKTEST'
# expected: false

curl -s http://localhost:5001/api/backtest/options \
  -H "Content-Type: application/json" \
  -d '{"symbol":"SPY"}' | jq '.error'
# expected: "options_backtest_unavailable"
# status: 403

Click test (Kristerpher walks through):

Tests that pass:

Risks

  1. #257 scope ambiguity on the feature-flags endpoint. The card says "new /api/feature-flags endpoint or equivalent" — if developer chooses to add a new endpoint, it adds 30-60 min and may require coordination with #264 and #263. Mitigation: groomer locks the answer before #257 dispatches. Low risk if resolved upfront, high if not.

  2. #260 Dashboard data wiring is underspecified. "Remove stub widgets, wire real data" could be 1 day or 3 depending on how many stub widgets exist and what backend endpoints they need. The card is m but has needs-grooming — if the groomer discovers it is actually l, it should be pulled from today's track and deferred. Mitigation: groomer scopes stub widget count explicitly before dev starts.

  3. Alpaca paper intermittency for #263 Trading page test. The Trading card's own risks note Alpaca paper has intermittent options support. Testing may be flaky in staging. Mitigation: document known limitations in the PR; do not block merge on Alpaca intermittency as long as the UI surfaces the error gracefully.

  4. Attorney sign-off (#197) is not in scope for today. MBT v1 cannot GA without it. This sprint clears every technical card; the timeline to close #197 is outside today's track. Risk: Kristerpher assumes technical completion = launch readiness. Mitigation: #265 launch checklist section 4 explicitly gates on #197; make sure Kristerpher reads that before calling MBT v1 shipped.

  5. #266 getraxx.com copy lives in what repo? The card itself flags this as an open question. If getraxx.com is in a separate repo, the ux-polisher agent will need that repo's context before dispatch. Mitigation: Kristerpher confirms the repo before dispatching #266.

Open decisions blocking dispatch

Decision Needed for Options
D1: Does /api/settings already surface feature flags, or does #257 need a new /api/feature-flags endpoint? #257 Wave 0 gate; affects #264 and #263 (a) Reuse /api/settings — no new endpoint needed; (b) Add /api/feature-flags — clean separation, 30-60 min extra. Recommendation: (a) unless settings endpoint is already overloaded.
D2: How many stub widgets are on the Dashboard (#260)? Whether #260 fits in one day Groomer needs to read the current Dashboard component and enumerate stubs. If it is more than 3-4 stubs requiring new backend endpoints, #260 becomes a 2-day card and should be deferred to a follow-on day rather than held in today's sprint.
D3: What repo does getraxx.com live in? #266 dispatch If it is a separate repo, confirm before dispatching. If it is inside this monorepo, no issue.

Secondary track (clean parallel option): #270 Market Calendar — grooming-only pass

If bandwidth allows a parallel thread, the best use of remaining PM/groomer time today is a grooming-only pass on #270 Market Calendar Service — filing the 9 named sub-cards (MCS-1 through MCS-9) as proper issues so they are dispatch-ready for a future sprint. The epic body already has full specifications for each sub-card; this is transcription + acceptance-criteria hardening work, not design work.

Why this is a clean parallel: no decisions are needed. PR #269 locked all design decisions. PR #242 (grace-window) must land before MCS-7 but that does not block filing the other 8 cards today. The sub-cards are independent enough that a groomer + PM can produce them while the feature-developer and ux-polisher are executing the MBT v1 wave.

End-state for the secondary track: 9 new issues filed under #270, each with title / user story / acceptance criteria / risks / non-goals, groomed and sized per the epic's size guidance. The Market Calendar epic goes from "named but unactionable" to "ready to drop into a sprint any day this week."

Constraint: do not dispatch any MCS feature-developer cards today. The secondary track is grooming-only. Execution follows after #242 (grace-window) merges.


Deferred (reasons given)