DJ v1: what's left before staff testing

Updated Thursday, Oct 15, 11:40 AM NPT. Round 12 of the push. Built from the merge plan, the QA log, the eval results and each worker's state at this hour.

Every v1 flow runs end to end on the test server. Every PR has had its final review and every finding is fixed. Merge-ready. The final build is on the test server with main merged in, every review and QA finding fixed, and every check green. The eval passed at 96.8%. What's left is yours: say go, and the merge.

Merge-ready stacks in your hands Ready now Say go: Sol tops both stacks up to the latest main (about 45 minutes), then you merge in order.
Then your merge, deploy and switch-on About half a day The server PRs, then the app PRs, in order. DJ ships dark and turns on for staff one switch at a time.
Left for the agents Nothing All workers idle. QA's final visual check passed.
  • Works today. Ask, quote, Buy now, alerts, Buy for me (in parts too), the show's ticket limit, Let DJ price it, sell to an offer, deliveries and payouts, all on the test server with Stripe test money.
  • Reviews and QA. Every finding from the final reviews and QA's recheck is fixed with tests, including one serious app bug: cards drawn at zero height after a cold open, so a fitting price showed no Buy now.
  • Eval passed. 96.8% (211 of 218) on the final build, no hard failures, every reply in the feel check clean. A prompt conflict on "buy this and sell that" and the buy hand-off were fixed using practice cases only.
  • From you. One small call on code comments, then the merge.

The path, step by step

Times are NPT. Blue is moving now, amber waits on you, green is the target.

  1. 1. Main merged into both stacks

    done9 AM
    • Server: main's three migrations and its new seller-fee lock. DJ's "you earn", the sell floor and the offer sale follow it, with tests. One PR now carries its own migration; the schema is proven identical.
    • App: main through all nine app PRs. Still ships over the air.
  2. 2. Every fix, deployed

    done9:15 AM
    • Full database suite 505 passed, 0 failed; 1,404 server unit tests; 2,362 app tests. An account without the DJ flag gets 403 on all 23 routes. 10 opens at once: 0.53 s.
    • The thread opens at its latest message with nothing moving, cards always draw, Ask DJ from a show opens at once, and the receipt is in place as the Approve sheet goes down. Checked frame by frame on the phone.
  3. 3. The gate eval

    passed9:30 AM
    • 96.8% (211 of 218), no hard failures. Conversations 9 of 9; the feel check 68 of 68 clean.
  4. 4. QA's last passes and the final fixes

    done11:40 AM
    • A price-guard hold reads "Selling" with CrowdVolt's words once ("CrowdVolt won't take less than $23 yet"), never "At minimum". A stopped plan's card says only that it stopped. The bar counts match the server. A changed max redraws the open sheet in place.
    • DJ never suggests a price for tickets CrowdVolt won't take. A thread opens at its newest messages: 1.5 s on a loaded app, 3.1 s cold for a 1,000-message history (was 30 s), older messages as you scroll up.
    • CI is green on every app PR. Two checks wait on you: the first app PR's backport label, and the first server PR's migration check, which goes green with the top-up.
  5. 5. Handed to you, merge-ready

    doneThu, Oct 15, 11:40 AM
  6. 6. Your merge and switch-on

    youabout half a day
    • Say when you're about to merge: main moves every hour, so Sol tops the stacks up to the latest main first (about 45 minutes). Then merge the server PRs and the app PRs in order, deploy, and check a non-staff account gets nothing.
    • Add the staff testers to the dj-agent flag by user id, turn the switches on in order, then publish the over-the-air update.

Waiting on you

Settled since the last update: wallet B, the eval budget, and the hero (full photo, boxed only for wide posters).

1. Comments in DJ's server code

py-mkt's rules say no comments or docstrings. DJ adds about 46,000 lines of server code, with about 1,100 comment lines and a docstring on most classes and functions.

Recommended: strip them, to match the repo, in the tidy PR on top. A tool does it and the full suite reruns, so it adds no time. Until you say so, they stay.

2. The merge itself

Only you merge to main. Everything is a draft PR, in the order below, with a per-PR checklist in the merge plan.

What already works on the test server

Checked live by QA, App 2 and Site against the real model, with Stripe test payments.

✓Discovery, quotes with a stepper and ticket types, fees spelled out
✓Buy now through CrowdVolt's own checkout
✓Price alerts, including alerts for a group
✓Buy for me: draft, one-line consent, approve, DJ buys"Bought 6 · $132" across three sellers, with no refresh
✓Buying never waits on a linked accountAt an equal price DJ picks the listing that arrives instantly, and the sheet offers "Link AXS for instant delivery". One plan buys from one platform.
✓The show's ticket limit: capped quotes, refused drafts, plans held and resumed
✓Let DJ price it: list, set a minimum, approve, DJ repricesThe clip on dj.samrid.me
✓Selling to an offer at or above your minimum
✓Deliveries in the dock, nearest first, and "where are my tickets"
✓Payouts card, and "what did I earn"
✓DJ reads your whole account: orders, wallet, listings, sales
✓Non-staff see nothing: all 23 DJ routes answer 403
✓App ships over the air: no native change, no Face ID

Numbers

Eval: held-out run #6 on the frozen market, on the final build, Oct 15 9:30 AM. Tests: the final build on the test server.

96.8%Held-out eval on the final build, 211 of 218, no hard failures
100%Clean replies in the feel check, 68 of 68
505 / 0Full database suite, passed and failed
2,362App tests passing on the final build
0.53 sSlowest DJ screen at 10 opens at once (was 5.2 s)
41Draft PRs in merge order: 27 server, 14 app

The PRs, in merge order

All drafts, none merged. Full list with every file outside DJ on dj.samrid.me/work.

Server (py-mkt)What it adds
#4555Plan tables and rules, nothing reachable
#4556The agent and thread routes, behind the flag
#4557Buy now re-quotes; memory of what they said
#4558Plans, controls, settings, the opener
#4562Cards, server-owned selections
#4560Approving a plan: consent as authority
#4559DJ buys for approved plans (Stripe)
#4576Agent quality, group alerts
#4564Checkout's own quote, projected
#4586Buy for me priced by checkout's quote
#4577DJ knows me: account, threads, dock
#4579Live cards over the socket
#4578Memory, drafts, show follow, artist and venue pages
#4587No split in CrowdVolt's checkout
#4604Buy for me in parts
#4582Let DJ price it
#4603Sell to an offer
#4673Fixes from the final review
#4674Polish from the site takes
#4677The one-cent tie: exact checkout totals
#4678Tidy: imports at the top, no behaviour change
#4680Eval fixes: two things in one message, the buy hand-off
#4679QA fixes: guard holds, a changed draft, cards out of view
#4681Never a price for tickets CrowdVolt won't take
#4683A price-guard hold is CrowdVolt's, never at minimum
#4682Read the thread newest first
#4685A guard hold reads as selling, CrowdVolt's words once
App (mono-volt)What it adds
#3081DJ thread and bar
#3082Screens and sheets
#3083Buy now through checkout
#3085Cards, the subject, one live copy
#3090Live thread and dock
#3092Live cards, catch-up reads
#3098Discovery, Buy for me, sell to offer, approval sheets
#3120Fixes from the final review, and polish
#3122Tests that didn't exit
#3125Cards always draw; the thread opens in place
#3124QA fixes: bar counts, a plan that moved on, list keys
#3127Guard holds, list keys, the sheet redraws in place
#3128Open at the newest messages, older on scroll
#3129A guard hold reads as selling

#3084 Live Activity is parked: it's native, so it waits for a store build.

Switch-on order for staff

Everything is off by default. Each step is watched before the next, and each turns back off on its own.

  1. Deploy dark and check a non-staff account gets 403 everywhere.
  2. Add the staff testers to the dj-agent flag, by user id.
  3. Talking on: quotes, Buy now through checkout, alerts.
  4. Live quote cards and show-change notices.
  5. Buy for me: the staff list for managed buying, the matcher, then buying on. $1,000 a plan, no daily cap.
  6. Let DJ price it, with the auto-pricer on.
  7. Selling to offers, last.

What could move the date

  • A finding in QA's last pass. Each fix and its check takes about an hour.
  • A failure in the full database suite or the QA recheck. That's one fix and one redeploy, about an hour and a half.
  • Usage limits. Sol carries the planned work if Claude runs out. Design calls wait for Claude.
  • Main keeps moving (10 more app commits and a new server migration since this morning's pin). Each is a small top-up right before you merge.

Not in v1

  • Live Activity on the lock screen, until a store build.
  • Face ID on approvals. The one-line consent and Approve stand in.
  • Listing and handing pricing to DJ in one approval, after v1.
  • Split purchases in CrowdVolt's checkout. DJ buys in parts only inside Buy for me.