Raxx · internal docs

internal · gated ↑ index

Raxx v1.0 Production Release — Ship Plan

Authored: 2026-05-04 UTC
Owner: Kristerpher
Status: Operator review required before Wave 1 dispatch
Parent epic: #94 Production Release v1.0


1. What v1.0 Means

Raxx v1.0 is not a feature-completeness milestone. It is a trust milestone.

The product thesis (from memory: project_structure_gap_thesis.md, project_strategic_position.md): Raxx fills the structure gap — it enforces the entry/credit/exit structure the user already decided on, before emotion gets a vote. That is not an AI product and it is not an Alpaca product. It is an automation layer that the user controls, backed by their own broker.

Three things must be true on launch day:

  1. A real user can self-onboard. Kristerpher can walk through raxx.app as a first-time visitor, hit the same door every customer will hit, connect a paper-trading broker account, and have a working dashboard. The operator shortcut path is not launch.

  2. MBT v1 (securities-only) is shippable and stable. This is the launch flagship per #256. Options-backtest stays gated behind ENABLE_OPTIONS_BACKTEST=false. The backtesting and trading surfaces are polished — not prototypes.

  3. The operator can run the platform safely. Token rotation does not fail silently (#907). Deploys are traceable (#731). The console shows real status for every surface (#146). The operator is not manually SSH-ing or running ad hoc heroku config:set to recover from incidents.

What v1.0 explicitly is NOT:

The epic #94 was written when the platform was "runs on my laptop." The intent is unchanged but the scope is now larger. The original #94 scope (Heroku deploy, docs site, marketing site, platform live) is subsumed into the wave structure below.


2. Epic Categorization

2a. Critical Path — must ship before public launch

These epics block the first real user from self-onboarding or the operator from running the platform safely.

Epic Title Why Critical
#94 Production Release v1.0 Meta-epic — the gates below close this
#256 MBT v1 — securities-only launch Launch flagship; defines what customers come to use
#907 Velvet — centralized token + rotation service Rotation is visibly broken (#891); platform cannot run safely without it
#908 Velvet scaffold (sub-card of #907) First Velvet milestone; blocks all subsequent Velvet work
#731 Console-driven deploy flow Without this, every prod deploy is a manual CLI operation with no audit trail
#146 raxx-console (parent) Operator control plane; must be production-stable before launch
#581 status.raxx.app Customers need a place to check service health; required for trust
#707 FreeScout productionization First customer email must land; broken email pipeline = broken support = broken trust
#469 Onboarding Wizard Self-onboarding is the launch criterion; without this, there is no v1.0
#582 getraxx.com launch readiness Marketing site must be indexable; waitlist backend wired; noindex header removed
#270 Market Calendar Service v1 Backtest + trade-lifecycle engine depend on it; required for MBT v1 polish pass
#988 Console self-deploy web layer Blocks #731 full implementation; operator gets kicked off platform on self-deploy without it
#798 Staging-to-prod flag promotion flow Required for safely gating ENABLE_OPTIONS_BACKTEST and future flags before launch

2b. Launch-Window — ship in first 30 days post-launch

Not blocking first user, but needed before the platform feels complete for early adopters.

Epic Title Why Launch-Window
#651 support.raxx.app Customer-facing support portal; important but FreeScout ops (#707) must come first
#871 Console-version manager (drop env-switcher) Console UX cleanup; architectural correctness; safe post-launch with workaround in place
#780 P5 detail drawer Polish for console dashboard; not blocking
#500 Workflow UUID tracing Critical for support transparency at scale; not needed for first customer but needed before volume
#482 demo.raxx.app Open-flow demo for conversion; getraxx.com (#582) comes first
#204 Founders Promo Cohort mechanics and engagement loop; requires onboarding (#469) to ship first
#985 Deploy button pulsing ring UX polish; post-launch
#270 (Phase 2) Market Calendar RSS alerts + cutover Phase 1 is critical-path; Phase 2 alerts are launch-window

2c. Post-v1.0 — defer; not required for first paying customer

Epic Title Reason for Deferral
#183 Multi-tenant Alpaca architecture BYOB hybrid model (#495) satisfies v1.0; full multi-tenant is v2
#495 Hybrid broker model (BYOB) Alpaca-default is sufficient for v1.0; BYOB unlocks broader market but is not gating
#403 Billing console (customer revenue) No paying customers at v1.0; Stripe integration is a v1.1 requirement
#757 Billing telemetry (operator vendor costs) Feasibility study concluded: scope-down or defer (#908 BLR finding)
#80 AI-Assisted Trading Explicitly post-v1.0 per product thesis; AI augments, does not headline
#78 Exploration Platform Platform for individual traders — v2 product surface
#85 Options chain viewer + iron condor builder Valuable but not required for securities-only MBT v1.0
#90 In-window trade simulator Post-MBT; future product surface
#245 Trade-Lifecycle Assistant Blocked (depends on live trading data + ML layer); post-v1.0
#167 Raxx iOS companion Explicitly non-goal in #94; post-v1.0
#250 Passkey E2E encryption Blocked; architecture design not complete; post-v1.0
#120 Brand + site redesign Confidence Engine direction is locked; cosmetic pass is launch-window; full redesign is post
#161 NDA + digital-signature portal Attorney-bound; required for investor/partner conversations, not first-customer flow
#148 Business formation + compliance Required before revenue; can proceed in parallel with engineering; not a code blocker
#417 Target-adapter framework Superseded by Velvet (#907); close after #907 ships
#253 Automated credential rotation pipelines Superseded by Velvet (#907); close after #907 ships
#970 CF Access Workspace OIDC IDP swap Phase 1 RBAC refinement; important but post-launch; current one-time-pin posture is adequate for solo operator
#925 GITHUB_API_SECRETS_TOKEN provision Immediate fix (PR partially merged); completes as part of Wave 1 token ops
#986 AFFECTED_SITES bug Superseded by Velvet v2 (#907) — Mode A handler is deprecated when Velvet ships
#987 CF_PAGES_DEPLOY_TOKEN expiry Operational rotation needed now; handled as immediate operator action, not a wave card

Note on #148 and #161: per memory feedback_human_to_human_drive.md, attorney-bound items get separate handling and must not block engineering work that can proceed independently. Entity formation and NDA portal are on a parallel legal track; the engineering wave plan does not wait on them.


3. Critical-Path Wave Sequence

Four waves of parallelizable work. Each wave is a logical grouping of work that can be dispatched simultaneously once its prior-wave gate is cleared. Wave duration is in feature-dev-days, defined as one agent-fleet working day (single developer + agents; no external team).

Wave 1 — Platform Foundation (Days 1–6)

Theme: Get the infrastructure layer safe so every subsequent wave can ship without incident.

Gate: Wave 1 must be complete before Wave 2 dispatches. These are the pre-conditions for everything else.

Epic / Card Work Parallelizable with
#907 / #908 Velvet scaffold: Heroku app pair + Postgres + manifest loader Independent; start immediately
#907 / B2 Velvet DB: rotation_jobs v2 schema + rotation_job_consumers Depends on B1 (scaffold)
#907 / B10 Velvet auth: stage-endpoint auth middleware Depends on B1
#907 / B3 Velvet bus: service-bus core, fan-out, SSE Depends on B2 + B10
#907 / B4 Velvet adapter: Postmark (first end-to-end rotation proof) Depends on B3
#907 / B5 Velvet adapter: Heroku config-var Depends on B3
#988 Console self-deploy web layer (architect in flight) Independent; runs in parallel with Velvet scaffold
#731 Console deploy flow (deploy button + callback plumbing) Depends on #988 design output
#270 Market Calendar Service v1 (Blueprint inside Raptor) Independent; parallelizable with all of above
#925 GITHUB_API_SECRETS_TOKEN secrets:write provision (partial PR already merged) Independent; complete immediately

Dependencies: None — Wave 1 is the root.
Pending input: #988 architect output (in flight — do not block Wave 1 start; proceed with Velvet and Market Calendar in parallel while design resolves).
Estimated duration: 5–6 feature-dev-days.

Operator decisions required before Wave 1 dispatches:

Wave 2 — Rotation Completion + Console Stability (Days 7–12)

Theme: Velvet is functional for real rotations; console is a stable operator surface.

Gate: Wave 1 complete (Velvet scaffold live, B3 service bus shipped, #731 deploy flow working, #988 web layer shipped).

Epic / Card Work Parallelizable with
#907 / B6 Velvet adapter: GitHub Actions secret (PUT_ENCRYPTED + NaCl) With B7, B8, B9
#907 / B7 Velvet UI: stage-wizard modal (3-panel + revocation) With B6, B8
#907 / B8 Velvet adapter: Cloudflare DNS (operator-manual per OQ7 decision) With B6, B7
#907 / B9 Velvet API: revocation flow + rotation_leaked Slack alert With B6, B7, B8
#907 / B12 Velvet: testing flow automation + throwaway token lifecycle With B6–B9 after B3
#907 / B13 Velvet: GET /rotations history endpoint With B6–B9
#146 Console parent — P5 dashboard tile stabilization, RBAC groundwork Parallel with Velvet work
#798 Staging-to-prod flag promotion flow Depends on #146 console stability; parallel with Velvet
#871 Console-version manager (drop env-switcher) Parallel with Velvet adapters
#707 FreeScout productionization (email pipeline, branding, daily backup) Independent; parallel with all
#984 FreeScout module install redesign (research in flight) Depends on #984 research output; parallel once resolved

Dependencies: Wave 1 complete.
Pending input: #984 FreeScout module install research (in flight — if the right install path is confirmed, cards dispatch; if blocked, FreeScout module work moves to interim and the email-pipeline portion of #707 proceeds without it).
Estimated duration: 5–6 feature-dev-days.

Operator decisions required before Wave 2 dispatches:

Wave 3 — Customer-Facing Surfaces (Days 13–20)

Theme: The surfaces a customer actually touches. Self-onboarding works. Marketing site is live. Status page is up.

Gate: Wave 2 complete (Velvet rotation is functional and safe; console is stable; FreeScout email pipeline is green).

Epic / Card Work Parallelizable with
#256 MBT v1 polish — all Antlers pages, loading/empty/error states, options-backtest gate Independent; start this wave
#469 Onboarding Wizard — passkey registration UI, email verify, broker connect, first-run dashboard Parallel with #256
#582 getraxx.com launch readiness — legal copy, Privacy Policy, ToS, waitlist backend, noindex removal Parallel with #256, #469
#581 status.raxx.app — surface taxonomy wired, 3P upstream status, market time widget, FreeScout ticket mirror Depends on #707 (FreeScout ops must be stable); parallel with #256, #469
#270 (Phase 2) Market Calendar RSS alerts + MarketTimeWidget cutover Depends on Wave 1 Phase 1 completion

Dependencies: Wave 2 complete. For #581: #707 must be at email-pipeline-green before the FreeScout ticket-mirror feature is built.
Estimated duration: 6–8 feature-dev-days (largest wave; most customer-facing work).

Operator decisions required before Wave 3 dispatches:

Wave 4 — Launch Gate + Go-Live (Days 21–26)

Theme: Every critical-path item is shipped and smoke-tested. The noindex header is removed. The waitlist is open.

Gate: Wave 3 complete. All critical-path acceptance criteria pass. Attorney sign-off on marketing copy received.

Epic / Card Work Parallelizable with
#94 (close gate) Full critical-path smoke test: self-onboarding end-to-end, Velvet rotation drill, deploy via console, status page health check Sequential — final gate
#582 (final) Remove noindex header from getraxx.com; submit sitemap to Google After attorney sign-off
#581 (final) Verify all surface taxonomy wired; market time widget live; FreeScout ticket mirror smoke test After #581 Wave 3 cards
#146 (final) Console production hardening smoke test After all Wave 2 console work
#907 / B11 Velvet operator runbook v2 + handler-author guide After B4, B5, B9
#907 / B14 Deprecate PR #906 Heroku handler behind off-flag After B5, B7
#907 / B15 SSM Parameter Store integration (passwords) — if OQ resolution allows Depends on D2 path shape OQ (existing card); may slip to post-v1.0
Docs API reference + getting-started doc (per original #94 scope) Parallel with smoke testing

Dependencies: Wave 3 complete.
Estimated duration: 4–5 feature-dev-days.

Operator decisions required before Wave 4 dispatches:

Total estimated duration: 21–26 feature-dev-days

With a solo developer plus agent fleet at current velocity, this maps to approximately 5–7 calendar weeks assuming no major architectural re-work.


4. Operator Decisions Master List

Every decision below has a wave dependency. The "blocks" column shows which wave cannot start (or cannot close) until the decision is made. Decisions are ordered by urgency.

Immediate (before Wave 1 dispatches)

# Decision Wave blocked Options Recommendation
D1 CF_PAGES_DEPLOY_TOKEN rotation (#987) Wave 1 CI reliability Manual CF dashboard rotation; enter new value in Infisical Do it today. Not a wave card, just an operator task.
D2 Velvet OQ4: partial-distribute threshold Wave 1 (B3 service bus core) A: any failure blocks. B: per-consumer required flag Option B. Minimal YAML addition; prevents low-priority consumer failure from blocking critical Heroku rotation.
D3 Velvet OQ5: force-revoke authorization Wave 1 (B9) A: single-operator type-to-confirm. B: 4-eyes pattern Option A. Solo operator platform at v1.0; 4-eyes requires RBAC work not yet done.
D4 Velvet OQ7: Cloudflare token rotation method Wave 1 (B8, subscription manifest activation) A: Velvet-guided CF dashboard walkthrough. B: OPERATOR_MANUAL form Option A or B — both are acceptable; the manifest entry is already drafted for OPERATOR_MANUAL. Decide before B8 is dispatched.
D5 Velvet OQ9: rotation_leaked escalation path Wave 1 (B9, B7) A: Slack alert only. B: Slack + auto-FreeScout ticket Option B for a solo operator. Same pattern as Status page "Investigate" button.
D6 #988 self-deploy web layer approach Wave 1 (#731 depends on this) A: CF Pages edge worker + cross-env polling. B: other architect proposal Await architect output (in flight). Approve before #731 feature cards dispatch.

Before Wave 2

# Decision Wave blocked Options Recommendation
D7 Velvet OQ2: healthcheck timeout Wave 2 (B3 manifest format finalization) A: 15s uniform. B: per-consumer configurable YAML field Option B. Future-proofs the manifest without changing the API contract.
D8 Velvet OQ3: distribute fan-out concurrency Wave 2 (B3) A: parallel max_concurrency=4. B: sequential Option A. Heroku config-var PATCHes triggering dyno restarts are expected; parallel is fine.
D9 #984 FreeScout module install path Wave 2 (#984 fix card, #707 completion) Research in flight; decision is: approve the proposed install path once research returns Approve immediately when research returns. No engineering decision to pre-make.
D10 Velvet OQ8: PR #906 retirement scope Wave 2 (B14) A: include PR #906 removal in v2 slate as B14. B: separate epic under #81 Option A. It is a single feature-flag flip; include in v2 slate.

Before Wave 3

# Decision Wave blocked Options Recommendation
D11 #469 broker-connect scope at v1.0 Wave 3 (onboarding wizard broker step) A: paper trading only. B: paper + live Alpaca Option A for v1.0. Live Alpaca connect adds credential-handling complexity; launch on paper, unlock live in 30-day window.
D12 #256 options-backtest gate copy Wave 3 (#256 polish) "Coming soon — data licensing in progress" or other message Approve message text before #256 polish card dispatches.
D13 #582 attorney sign-off on marketing copy Wave 3 / Wave 4 (noindex removal) Attorney review track (parallel) Do not let this block Wave 3 engineering; ensure attorney consult is booked this week so approval is in hand by Wave 3 close.

Before Wave 4

# Decision Wave blocked Options Recommendation
D14 Go/no-go walkthrough on staging Wave 4 launch Personal self-onboarding walkthrough by Kristerpher Required before noindex removed. Schedule at Wave 3 close.
D15 #148 entity formation status confirmation Wave 4 (noindex removal / waitlist open) A: formation complete. B: launch as sole proprietor under named risk Confirm status before waitlist opens. Legal track, not engineering.
D16 Velvet B15: SSM Parameter Store — D2 path shape Wave 4 (B15) Depends on OQ on existing card re: path shape convention If unresolved by Wave 4, B15 slips to post-v1.0. Not blocking launch.

5. In-Flight Work Mapped to Waves

#988 Console self-deploy web layer (architect designing, in flight)

Wave assignment: Wave 1 (output gates Wave 1 #731 sub-cards).
Status: Architect has the design brief; three options enumerated (CF Pages edge worker, cross-env polling, other). Design output expected before Wave 1 dispatches.
Action: Do not block Wave 1 on this. Start Velvet (#908) and Market Calendar (#270) immediately. When the architect returns the design, Kristerpher approves the approach and #731 cards dispatch in parallel.
If delayed past Wave 1: #731 deploy flow ships without the self-deploy web layer; the operator accepts the "kicked off the platform on self-deploy" behavior until Wave 2.

#907 Velvet (fast-track plan confirmed, in flight)

Wave assignment: Wave 1 (B1–B5, B10) + Wave 2 (B6–B9, B12–B13) + Wave 4 (B11, B14, B15).
Status: Design locked 2026-05-03. Subscription manifest committed. ADRs 0037–0040 filed. B1 (#908) is the immediate first card.
Action: Dispatch B1 (#908) as soon as OQ4, OQ5, OQ7, OQ9 decisions are made (D2–D5 above). These are the only pre-conditions for B1.
Open questions still blocking B3 specifically: OQ1 (static manifest only — current design is locked per ADR-0040; no decision needed unless Kristerpher wants to reopen), OQ6 (testing flow audit logging — propose Option A: log with label; no decision needed unless Kristerpher disagrees).

#984 FreeScout module install redesign (research in flight)

Wave assignment: Wave 2 (FreeScout module fix), but #707 email-pipeline work in Wave 2 can proceed without the module fix.
Status: Research dispatched 2026-05-04. FreeScout instance is rebuilt (54.146.13.200). Ten paid modules are unattributed; correct install procedure under investigation.
Action: If research returns before Wave 2 dispatch, include the fix card in Wave 2 alongside #707. If research is still unresolved at Wave 2 dispatch, ship #707 email-pipeline work and tag the module install as an interim operational gap tracked separately. Do not hold the full #707 epic for module attribution.
Risk: If modules require a specific install path (e.g., SSH access, specific artisan invocation), the research output may generate a new card rather than a simple fix. Wave 2 scope absorbs that card.


6. Epic Dependency Graph (critical path only)

Wave 1 (Days 1-6)
  #908 Velvet scaffold ──────────────────────────────────────────┐
    └─ B2 DB schema                                              │
        └─ B3 Service bus core ───────────────────────────────── ├─ Wave 2
            ├─ B4 Postmark adapter (Wave 1 proof)                │
            └─ B5 Heroku adapter (Wave 1)                        │
  #988 Self-deploy design ──────────────────────────────────────┘
    └─ #731 Console deploy flow (Wave 1 close / Wave 2 start)
  #270 Market Calendar v1 (Wave 1, independent)
  #925 GH token provision (Wave 1, immediate, independent)

Wave 2 (Days 7-12)
  B6 GH Actions adapter ──────────────────────────────────────── ┐
  B7 Stage-wizard UI ─────────────────────────────────────────── ├─ Wave 3
  B8 CF DNS adapter ──────────────────────────────────────────── │
  B9 Revocation flow ─────────────────────────────────────────── │
  #146 Console stability ──────────────────────────────────────── │
  #798 Flag promotion flow ────────────────────────────────────── │
  #707 FreeScout email pipeline ──────────────────────────────── ┘

Wave 3 (Days 13-20)
  #256 MBT v1 polish ─────────────────────────────────────────── ┐
  #469 Onboarding Wizard ──────────────────────────────────────── ├─ Wave 4
  #582 getraxx.com readiness ──────────────────────────────────── │
  #581 status.raxx.app ────────────────────────────────────────── ┘

Wave 4 (Days 21-26)
  Smoke testing → go/no-go → noindex removal → waitlist open

7. Epics Explicitly Superseded or De-Duplicated

The following epics should be commented on and closed after the named replacement ships:

Epic to close Superseded by Close when
#417 Target-adapter framework #907 Velvet After B5 (Heroku adapter) ships
#253 Automated credential rotation pipelines #907 Velvet After B9 (revocation flow) ships
Legacy Velvet v1 cards #914, #915, #916 Velvet v2 B4, B5+B6, B8 After respective v2 adapters ship

Kristerpher should not dispatch any work against #417 or #253. They are dead epics as of the Velvet v2 design lock.


8. Solo-Developer Constraint Notes

All sequencing above assumes: - One developer (Kristerpher) reviewing and approving agent-output PRs - Agent fleet (architect, feature-developer, card-groomer) operating on isolated worktrees - PRs branch from main per memory feedback_pr_base_main.md - No external team members; all decisions are Kristerpher's

Practical implications: - Wave 1 can dispatch multiple parallel cards simultaneously (Velvet B1, #988 design, #270, #925) without blocking — the agent fleet handles parallel execution - The bottleneck is Kristerpher's PR review queue. At peak parallelism (Wave 2, ~4–5 open PRs simultaneously), review cadence is the critical path, not the engineering work itself - Recommend: batch PR reviews at 2x daily rather than reviewing each immediately; this keeps agent throughput high without context-switching overhead


9. Immediate Actions for Kristerpher (Today, 2026-05-04 UTC)

In priority order:

  1. Rotate CF_PAGES_DEPLOY_TOKEN (#987) manually in the CF dashboard. Enter new value in Infisical. This unblocks internal-docs deploys and is a 10-minute operator task.

  2. Make OQ4, OQ5, OQ7, OQ9 decisions (D2–D5 above). These are the only gates before #908 (Velvet scaffold) dispatches. Each is a one-line decision; all recommendations are in Section 4.

  3. Review #988 architect output when it arrives and approve the web-layer approach (D6). Do not wait on this before starting the rest of Wave 1.

  4. Book attorney consult for marketing copy review (#582 attorney gate, D13). This must be in flight by end of this week so approval is in hand by Wave 3 close (~Day 20).

  5. Confirm #148 entity formation status (D15). Even if formation is incomplete, confirm whether you are proceeding to launch as a sole proprietor so that decision is made explicitly, not by accident.


Appendix: Open Questions from Velvet v2-rotation-flows.md

For reference: the Velvet OQ table from the design doc, with v1.0 ship-plan disposition:

OQ Question Disposition for v1.0
OQ1 Static manifest only vs runtime API? Closed — ADR-0040 locks static only. No decision needed.
OQ2 Healthcheck timeout per consumer Decision D7 — before Wave 2. Recommend Option B (configurable).
OQ3 Fan-out parallel vs sequential Decision D8 — before Wave 2. Recommend Option A (parallel, max_concurrency=4).
OQ4 Partial distribute threshold Decision D2 — before Wave 1. Recommend Option B (per-consumer required flag).
OQ5 Force-revoke authorization Decision D3 — before Wave 1. Recommend Option A (single operator, type-to-confirm).
OQ6 Testing flow audit logging Propose Option A (log with label, filterable). Kristerpher to confirm or silence.
OQ7 Cloudflare token rotation method Decision D4 — before Wave 1. Either option acceptable; manifest entry drafted.
OQ8 PR #906 retirement timeline Decision D10 — before Wave 2. Recommend Option A (include in v2 slate as B14).
OQ9 rotation_leaked escalation path Decision D5 — before Wave 1. Recommend Option B (Slack + auto-FreeScout ticket).