The 50OS
The Listing Legends operating system for the L1-L3 agent. Two protocols (Database + Prospecting), a daily ritual, a weekly plan, a public scoreboard, a quarterly cycle. The 50 is Carruth's deal-count target. The OS is the operating system the team runs on.
North star (stated 2026-06-09): The 50OS becomes a scalable product — a desktop app / coaching platform through which Ry (and eventually other coaches) manages 100-200 agents, not a hand-run program for one team. Cohort 1 is the manual prototype. Build implication: every Cohort 1 artifact (enrollment, baselines, gates, plans, self-reports, reviews, scoreboard) is data-first in BigQuery from day one, so the handbook-glued v1 can be re-skinned as product UI instead of rebuilt. Coach-driven judgment stays; coach-driven bookkeeping must not.
Why
Listing Legends has 70% of the chassis a world-class coaching program needs. Daily Sales Check, Hump Day newsletter, Pace Check, 1x1s, the agent ladder, the handbook site, DealBot, Mojo Bridge. What's missing is the connective tissue: a weekly plan ritual, a measurable rubric, a public scoreboard, a documented progression, a fixed onboarding cohort. Agent inconsistency, listings going stale, and a vague next-rung problem all trace back to the same gap.
The 50OS synthesizes Ricky Carruth's 50-deals system (database, weekly email, ABS metric, volume, 3-7 year compounding) with Brandon Mulrenin's Reverse Selling (12 question types, Qualifying Question, Preview Appointment, 8-week sequence, A.R.P. objection handling) into one operating system that plugs into what already exists. It is the execution loop on top of the Sales Team Playbook.
Verified current state — 2026-07-15
Linear is the authoritative execution tracker: 50OS project. This hub holds durable context and decisions; historical notes below are not current status unless reconciled into Linear and verified against live state.
- Project health: At risk. The application platform is operating, but the cohort coaching loop is not.
- Live adoption evidence: 7 active enrollments, 1 intake submission, 3 Monday Plans, 0 Daily Numbers self-reports, 0 gate evaluations, and 288 tracked usage events in the prior 14 days.
- Launch date: RESOLVED (Ry, 2026-07-24) — Cohort 1 clock is July 6, 2026. Live
the50os.enrollment(BQ-verified 2026-07-24): 5 Cohort-1 agents start 2026-07-06; Donovan Broadus starts 2026-06-29 (pipeline test); Ry's own row 2026-06-29 (non-cohort).cycle_math.cycle_weekconfirms Week 3 as of 7/24. The "August 1" note elsewhere in this file refers to the 90-day BUILD-FREEZE start, not the cohort. Decision recorded on RYR-163. - Execution order: RYR-163 cohort clock → RYR-164 activate rituals and gate evaluation → RYR-165 backups and managed DDL → RYR-157 blocking system tests → RYR-166 public funnel repair.
- Architecture: RYR-103 is backlog. Runner stability and auto-deploy are complete; service extraction and staging remain, behind activation and data safety.
Historical build log
Design locked 2026-05-25. Cohort 1 internal pitch built 2026-05-26 (Hormozi $100M Offers structure). All five MVP build decisions locked 2026-05-26. Cohort 1 launches Monday July 6, 2026 (moved from July 1 — Ry 2026-07-03; the four cohort enrollment.start_date rows updated to 2026-07-06 in BQ same day, 4 rows verified; Donovan's intentional 6/29 pipeline-test start unchanged). MVP build underway — the data-first spine shipped 2026-06-13 (see Update below).
- Status: in-flight
- Last update: 2026-07-07 (later) — Darius Gregory onboarded as a full 50OS agent (agent #10, first mid-cohort add) + his Agent Dive report built, hosted + surfaced. Canonical
new_agent.pyonboarding (MR !1195, post-merge main green; handbook deployed w/ Access —Agent — darius-gregorypolicy live,/darius-gregory/302-gates; "Team Darius" chat + WPG board provisioned;actor_rosterrow role=agent L1) →enroll.pyinto 2026Q3 Cohort 1 (start 2026-07-06,is_cohort1, active). Single-agent Agent Dive (trailing 90d, 22 held consults; not turned off = Tier 1 Resolved) → 6th Q3 coaching report, hosted (app.the50os.com/static/coaching-darius-gregory-q3.html, R2-backed) +/appcard live (see 2026-07-07 (later) Update). Prior: 2026-07-07 — logout menu + version-aware reload shipped to/app, both live-verified end-to-end (see 2026-07-07 Update). Prior: 2026-07-04 (afternoon) — Work-through-the-Linear-list sprint (Ry: "finish all of these items"): 14 issues moved in one day. Closed with live evidence: RYR-91/92/93/94/95/96 (shipped-but-untracked polish + one dup), RYR-90, RYR-83, RYR-44, RYR-46 (new:enroll.pyidempotent enrollment CLI, MR !1104 merged), RYR-45 (new:usage_eventsadoption seam — live rowryan-colston, opened, /appBQ-verified; image696e79ddserving). RYR-80 today screen live (MR !1105 + bump; Today card + ABS gauge + ritual checks + "Tell Ry" report button, all browser-verified; issue stays open only for the D6 KV cache + LTE check). RYR-43'slib/notifications.pybuilt + tested (MR !1111 open with auto-merge armed at last check — verify merged before calling it shipped); Module 2 draft merged to_drafts/(MR !1109, awaits Ry's voice pass); adoption-plan + vacation-test drafts on RYR-88/89; Mojo per-seat pricing on RYR-84. Test-pollution fix MR !1110 merged (local pytest could write prod BQ via ADC — now structurally mocked). Awaiting Ry: the50os.com→Resend go, RYR-97 Access option, synthetic-row DELETE. Prior: 2026-07-04 (morning) — Decision session CLOSED (RYR-87 Done, all D1–D13 locked) + web-push spine LIVE. D2 (PWA-only install) ratified on Ry's overnight evidence: the installed PWA was still logged in the next morning (Access session persists in standalone, no Safari eviction). D1 (PWA web-push channel) ratified same day on a shipped prototype (MR !1102 + bump, gateway image0ecbf947live-verified this session):/sw.js+ roster-gated/app/pushtest page +the50os.push_subscriptions(org_id per seam rule 1) + VAPID keys (private in SMwpg-vapid-private-key, raw base64url NOT PEM) — Ry received test pushes on his iPhone including a server-initiated send ({"sent":1,"failed":[]}observed this session). RYR-43's notification voice builds on this spine. Also 2026-07-04: /app strip links fixed to in-app routes (ABS List →/app/abs, Your Board →/board; MR !1100/!1101, image0abdd926, live-verified). §E's LTE latency check folds into RYR-80. Prior: 2026-07-03 — Handbook→app migration EXECUTED + CLOSED (RYR-69 Done): app.the50os.com is the agent front door — slug/shared 301s live-verified in an authenticated browser, ABS perf fixed (~0.7s vs 3+s), board folded in; see the 2026-07-03 evening Update below. Same day: Intake + Baseline Proof shipped (RYR-71 Done). Prior: 2026-06-23 — 50OS Phase 3 watchdog SHIPPED. A scheduled Cloud Run Job (request-watchdog,*/10, independent of the runners) detects per-request failure (stuck / failed-exhausted / pending-too-long) on the CMA + showing queues, escalates to the POS Ops Alerts Chat space, and stampsescalated_atso the surface renders honest 🟠 — making "We're on it" TRUE. Verified live end-to-end (fail-closed + happy-path: escalation landed in the space → stamp → 🟠 → idempotent re-run). MRs !737/!738; #76 closed;systems/request-watchdog/README.md. Also 2026-06-23 (later): Monday Plan → ops-room Chat ping shipped (MRs !766/!767, live image4908ab7c) and Donovan enrolled as the first / pre-launch enrollment test. Prior: 2026-06-22 — 50OS status surface shipped (Phase 2).app.the50os.com/appnow renders each agent/admin their unified status — every request + review item with its lifecycle state (Needs you / In progress / Ready), server-rendered frommaster_data.v_all_requests+v_needs_review+weekly_game_plansthroughunified_state. Ends "silent-success-only." Live render confirmed for a rostered agent. MRs !732/!733/!734; image70247ada. See Update below. Prior: 2026-06-21 — 50OS application surface shipped (Phase 1).app.the50os.comis live: a strong-auth gated app (Cloudflare Access → keyless WIF → private gateway, identity re-verified server-side + role-resolved fromactor_roster) carrying the/app/whoamiidentity pipe + the pureunified_statemapping module. Prior: 2026-06-20 — ABS List tooling shipped (the Database Protocol's daily ABS list is now a live handbook page mirroring FUB'sABStag; see Handbook Site). Prior: 2026-06-13 — MVP data-first spine shipped (systems/the50os/) + 50OS Path surfaces live on the handbook. - Historical blocker (recorded before the current enrollment rows existed): Cohort 1 invite list. This is retained as build history, not current project status. The current launch-date decision is tracked in RYR-163.
Update 2026-07-07 (later) — Darius Gregory onboarded as a full 50OS agent + single-agent Agent Dive, hosted + surfaced. Ry: "add an agent to the 50OS today" → then "do an /agent-dive for him so he has the same report the other agents do." Onboarding via the canonical new_agent.py flow (ADDING-AN-AGENT.md): Darius Gregory (darius.gregory@orchard.com, FUB user 1368, team 38, dim_agent active/auto-matched) was a handbook viewers: entry only — now a full agent. Registry agents: block + removed from viewers + content/darius-gregory/_agent.yaml (L1; board + "Team Darius" chat wired; stats sheet deliberately skipped — no setters yet); functions/api/_roster.js regenerated. MR !1195 merged; post-merge main pipeline #2659811017 green. Google artifacts created directly (not handed off, per the runbook): "Team Darius" Chat space (spaces/AAQASTjKj6o, Darius added) + WPG board sheet (shared Darius=commenter / pos-cloud-functions SA=writer; provision_agent_board.py registered → agent_boards row). Full deploy.py from main → prod + Access sync; verified live this turn: /darius-gregory/ 302-gates to cloudflareaccess, Agent — darius-gregory policy present. load_roster.py → actor_roster row (role=agent, L1, board+chat URLs). enroll.py … --cycle 2026Q3 --start 2026-07-06 --cohort1 --backfill → enrollment row active (BQ-verified) — first mid-cohort add; Darius is agent #10 (prior 9). Agent Dive (single-agent, trailing 90 days): Inbox-Zero check = NOT turned off (7/1 MM Digest: Tier 1 · Resolved, 2 overdue; 7/6 T2 escalation names only Ro Smith). Read all 22 held consults via Claude-in-Chrome. Diagnosis: capable closer with strong listing execution (5 live deals — Regina Granado, Richard Morrison, Paul Heric, Claudia/Elizabeth) + a post-consult follow-up leak (8 warm/switchable sellers zero-or-tapered; most urgent = Airaj Waheed, delisted from her competitor the same day, 19-day gap). Amber lead-intake flag (~8 consults/mo, 22/quarter, under 30 — he's not turned off, so lever = volume, not "get back on"). Report built on the canonical design-system template (~/.claude/skills/agent-dive/references/report-template), render-verified (headless screenshot reviewed), hosted at app.the50os.com/static/coaching-darius-gregory-q3.html (Access-gated — curl 302; pushed to the the50os-coaching-reports R2 bucket, box tracks 6; wrangler deploy restored 6/6 from R2). pos_coaching.coaching_artifacts row inserted (BQ-verified) → /app "Needs you" card + /board coaching section will surface for Darius on next login. 6th Q3 coaching report (after Marissa, Brandon, Donovan, Precious, Paul Harding). Open loop: Darius's booking link (calendar_link) is unset — he must mint his own Google Calendar appointment-schedule link; his dashboard "Schedule" chip stays inactive until he sends it (external TODO on the agent, per the runbook).
Update 2026-07-07 — two /app hardening ships (logout menu + version-aware reload), both live-verified end-to-end. (1) Account menu + logout on the /app topbar — the agent chip became a tappable button opening "Signed in as {login email}" + a Log out row → Cloudflare's /cdn-cgi/access/logout (clears the Access session; no app-side session exists, so this is the whole mechanism). Shows the caller's real Access email even under super-admin impersonation. First logout affordance for signed-in users (previously only on the 403 page). MRs !1182 (code) / !1183 (bump), image 132a5bf0; verified live in an authenticated browser (menu opens above the island, olive logout, email correct). Design-system compliant (tokens only, 44px targets, olive-only accent). (2) Version-aware reload — new uncached GET /app/version reports the live Cloud Run K_REVISION; the /app refocus handler now reloads when the deployed build differs from the page's data-build stamp, so a deploy propagates on the next reopen instead of waiting out the blind 5-min timer. Layered, not replaced (Ry's call): a sessionStorage one-shot guard caps auto-reload at once per build (no reload loop while the edge cache serves stale HTML, 60s fresh / 5m stale), and the existing time-based reload stays as the convergence backstop. MRs !1188 (code) / !1190 (bump), image 4fe0f091. Empirically closed on prod via a zero-drift probe revision (gcloud run deploy --revision-suffix, same image): witnessed the full state machine live — reload fires on a real revision change (guard set), lands on a stale edge page, second refocus is guard-suppressed (no loop), fresh load converges to the new build. Both features TDD'd (red-watched-fail), ruff-clean, both post-merge main pipelines green. Specs: docs/superpowers/specs/2026-07-07-50os-account-menu-logout-design.md + 2026-07-07-50os-version-aware-reload-design.md. Note: commit_sha is only a revision label (not runtime-readable) — K_REVISION is the runtime build token. Note: pre-freeze work (the freeze start was pushed July 1 → Aug 1 on 2026-07-07). Current serving revision is the transient probe pos-work-product-gateway-vrprobe1 (same image 4fe0f091, zero drift, auto-replaced by the next real deploy).
Update 2026-07-03 (evening) — Handbook→app migration EXECUTED end-to-end and CLOSED (RYR-69 Done). Ry's call ("Let's just do the whole migration now"): all Phases 0–5 shipped in one evening, cutover deployed and live-verified via authenticated browser this session. app.the50os.com is now the agent front door. Verified live at close: every agent home root (handbook.rycolston.com/<slug>, 9 agents, exact roots only) 301s → app.the50os.com/app; /abs → /app/abs (ABS List renders); slug subtrees (/marissa-tah/start/) deliberately stay handbook-hosted — no splat; shared static groups (/agent-scripts, /workbook, /playbook, /sops) 301 to their app twins; Access posture monitor green on all routes, both hosts. What shipped: Worker strangler router + curriculum assets; /app Path hub with quick-actions pills (Offer Intake / Make a Request / ABS List / Your Board), pull-to-refresh + PWA install; /app/abs read-write (FUB tag round-trip verified both directions live); team roll-up; /board folded into the app (JWT audiences cross-accepted, Access parity confirmed). ABS speed fixed same evening (identity lookup moved to master_data.dim_agent; measured ~0.7s warm / ~0.9s cold vs the 3+s Ry reported; shim 31045c57). Design note: the /app hub is roster-only by design; same night (Ry request) his personal email was added to his roster row via a new optional extra_emails registry key (MR !1099, roster reloaded, BQ row shows both emails, hub render as ry@rycolston.com verified live in-browser) — so both emails now work. Still open, soak-gated: retire redirect on board.rycolston.com; RYR-97 (gmail admins can't pass Access). Full evidence: Linear RYR-69 closing comment. Next build: RYR-80 today-screen foundation.
Update 2026-07-03 (later same day) — Intake + Baseline Proof SHIPPED and live-verified (RYR-71 Done). Intake form live at https://tally.so/r/QKyo81 — wording Ry-approved, why_now reworded same day to "What do you want to be different about this next year vs your last two years?" (verified on the live page). Tables the50os.intake_submissions + baseline_snapshots created in BQ (bq-verified). The hourly /ingest-50os-forms endpoint now runs intake ingest → baseline snapshot sweep → Intake Brief email + ops Chat ping, deployed on WPG revision 00086-7cc at 100% traffic (gcloud-verified). Live E2E on Ry's own enrollment row PASSED: intake row landed; all 6 enrollments' intake baselines computed (5 cohort agents match the RYR-90 dry-run values, notes clean; set-to-book from pos_analytics.agent_metrics_daily); brief rendered in the work inbox with a correct neutral says-vs-shows flag; Chat ping landed in POS Ops Alerts; two ingest re-fires inserted 0 (idempotency proven live). Week-12 "after" snapshots fire automatically on day 84 per enrollment. Two live-found bugs fixed same day (Tally list-shaped MULTIPLE_CHOICE answers; details + full build record in Linear RYR-71 comments; MRs !1074/!1076, deploys !1075/!1077). Remaining human step: Ry's invite email carrying the form link. Phase 2 (exit form + Proof Card) designed-for, deferred to ~week 10.
Update 2026-06-23 — 50OS Phase 3 watchdog SHIPPED. "We're on it" is now real machinery, not a decorative badge. A scheduled Cloud Run Job (request-watchdog, every 10 min, running independently of the scraper runners so it's alive when they're dead) sweeps cma_requests + showing_activity_requests for the three failure modes the agent never saw — stuck mid-run, failed after 3 tries, never picked up — posts one escalation to an ops Chat room, and stamps escalated_at so the Phase-2 surface renders honest 🟠 only after a real escalation fired (no decorative badges). Built TDD (22 unit tests), plan-reviewed (gate findings fixed + independently re-verified against live BQ/GCP), shipped via MRs !737 (code) + !738 (image-pin bootstrap), deployed via tf-manual-apply. Live: the job + */10 scheduler + a dedicated least-privilege request-watchdog@ SA + a heartbeat dead-man's-switch. Verified in production: job executes, the SA reads the tables + writes its heartbeat, and fail-closed proven — a synthetic FAILED/retries=3 row was detected, the escalation posted, got a non-2xx, and escalated_at stayed NULL (no unbacked 🟠). Happy-path verified live 2026-06-23: the ops Chat webhook is wired to the new POS Ops Alerts space (spaces/AAQAbTRTfCc) — a synthetic stuck request escalated, the message landed in the space, escalated_at stamped, the surface rendered 🟠, and a re-run posted no duplicate (idempotent). Three hard-won Cloud Run Job deploy gotchas captured in ~/rylobasic/infra/cloud-run-services/deploys.md. Tracking rylobasic#76 closed. New code: systems/request-watchdog/; live IDs in its README. Downwind: #77 (notification voice), #78 (in-app actions + play).
Update 2026-06-23 (later) — Monday Plan ops-room Chat ping + first live enrollee. New Monday Plan submissions now post a best-effort summary into the ops room (the50os/notify_plan_chat, reusing the existing WATCHDOG_OPS_CHAT_WEBHOOK; a THE50OS_PLAN_CHAT_WEBHOOK override is wired so coaching pings can move off the shared ops channel later). Shipped TDD (10 unit tests) via MRs !766 (code) + !767 (image-pin deploy), live image 4908ab7c. Also fixed a latent build gap — systems/the50os + systems/agent_onboarding were COPYd into the WPG image but unwatched by build-paths.sh, so a 50OS-only change wouldn't have rebuilt the image. Donovan Broadus is now the first the50os.enrollment row — enrolled manually (2026Q3, start 2026-06-29, is_cohort1=TRUE) as the intentional pre-launch live test of the enrollment pipeline, with his 2026-06-23 Monday Plan backfilled into plan_submissions (cycle_week 0, pre-start). Consequence to know: enrollment is no longer empty, so the spine no longer no-ops — Donovan's handbook Path now paints live cycle data and the hourly ingest processes his submissions ~1 week ahead of the July 1 cohort (intended, Ry's call 2026-06-23). The README that documents this still needs the ping noted (systems/the50os/README.md).
Update 2026-06-22 — 50OS status surface shipped (Phase 2 of the unified status layer). app.the50os.com/app is now live: a per-actor status page that ends "silent-success-only." It server-renders every request + review item with its unified lifecycle state — grouped Needs you → In progress → Ready, plus a "This week" play card — reading master_data.v_all_requests (CMA + buyer-showing requests, role-scoped: agents see work targeted at them, admins/setters see what they submitted) + work_product.v_needs_review + pos_coaching.weekly_game_plans, each mapped through the Phase-1 unified_state. No materializer, no new BQ table — the parallel request-unification work made v_all_requests a CI-policed read-time view, so Phase 2 collapsed to three cheap view queries + a pure render (the board's load_board_rows pattern). GET / → 307 /app (fixed the bare-root 404). Built TDD (20 unit + 3 gateway TestClient tests); shipped via MRs !732 (code, image 70247ada) / !733 (tfvars deploy, revision 00062-8td) / !734 (docs). Verified end-to-end through production: fail-closed 403 for an authenticated-but-unrostered identity, and the rostered 200 render confirmed live (Ry's @orchard.com view showed his 3 COMPLETE items under "Ready"). Tracking issue rylobasic#75 closed. Downwind: #76 (per-request watchdog → "we're on it"), #77 (notification voice), #78 (in-app actions + play). New code: systems/fifty-os-app/{status_envelope,status_sources,app_render}.py; live IDs in systems/fifty-os-app/README.md + Web Properties.
Update 2026-06-21 — 50OS application surface shipped (Phase 1 of the unified status layer). app.the50os.com is now the gated 50OS application surface — the "software retains" layer agents/admins/setters log into. Phase 1 stands up the hard part: a strong-auth identity pipe cloned from the proven board.rycolston.com keyless-WIF recipe (Cloudflare Access → WIF token-exchange → private IAM-locked pos-work-product-gateway, Access JWT re-verified server-side, email → role via work_product.actor_roster), exposed as GET /app/whoami, plus the pure unified_state mapping module that the coming status surface + notification library both consume. Built subagent-driven (6 tasks, each TDD'd + reviewed, final opus whole-branch review); shipped via MRs !697/!698. This is the start of the the50os.com "Phase 2 gated tooling" migration — board.rycolston.com folds in later. Roadmap (Phases 2–6: status envelope, the per-request watchdog, the one notification voice, in-app actions + weekly play, instrumentation) and the locked design: ~/rylobasic/docs/superpowers/specs/2026-06-21-50os-unified-status-design.md (+ Phase 1 plan alongside). New code: systems/fifty-os-app/, domains/app-the50os-com/. Resource IDs in Web Properties.
Update 2026-06-13 — MVP data-first spine shipped. The backend the cohort tooling runs on is built and tested in systems/the50os/: the BigQuery dataset + DDL, both Tally ingests (Monday Plan and the daily Conversations/ABSs numbers), the gate evaluator, the quarterly cycle math, and the Path KV sync that feeds the handbook. The 50OS Path now renders on handbook.rycolston.com (goal cards, Your Cycle, modules, cycle view, and the gate). So the data-first build decisions (Monday Plan → BQ, daily self-report → BQ, gates) are now live as code ahead of the July 1 launch; what remains is wiring the gated forms/scoreboard pages and the public the50os.com surfaces.
Update 2026-06-20 — ABS List tooling shipped. The Database Protocol's daily "ABS list maintained daily" ritual is now a real surface: a gated handbook page (/abs/) that mirrors each agent's Follow Up Boss ABS tag — they see and manage their Active Buyers & Sellers from the handbook, in sync with FUB both directions (add here → tags ABS in FUB; tag in FUB → shows here). Backend is the public pos-fub-abs HMAC shim. So an ABS metric the curriculum only described is now something the team can actually keep. Full record + resource IDs: Handbook Site decisions log (2026-06-20).
2026-05-30 — Playbook ↔ 50OS reconciliation pass. Confirmed the 50OS layers a Carruth operating system (Database Protocol, ABS, the Fundamentals, 8-week sequence) on top of the manual's Hormozi+Mulrenin "what to say" layer, and quietly diverges from the manual on three Week-1 teachings: north-star metric, funnel vocabulary, and call-one posture. Metric divergence resolved (contacts/day = lever, ABS = gauge, phase-dependent); funnel + posture resolutions proposed, pending confirm. The manual's stale monorepo duplicate was deleted (vault now canonical, MR !225); the manual's "Know Your Number" note was fixed to volume-first. Full handoff + verified evidence: 2026-05-30-playbook-50os-reconciliation.
Web addresses (decided 2026-05-31)
the50os.com was acquired 2026-05-31. Option 1 now, Option 2 later. Public surfaces live on the50os.com (auth-free); internal cohort tooling stays gated at handbook.rycolston.com/50os/ until a Phase 2 migration. Full rationale: 2026-05-31-the50os-com-address-architecture. Build plan: 2026-05-31-the50os-com-operating-business.
| Surface | Address | Auth | Status |
|---|---|---|---|
| Ads-funnel / VSL landing | the50os.com | public | scaffolded + deployed to the50os.pages.dev 2026-05-31; copy + apex attach pending |
| L4+ charter | the50os.com/l4-plus (moved off handbook) | public | pending |
| Public scoreboard (cohort) | handbook.rycolston.com/50os/scoreboard | Cloudflare Access (27) | pending — stays on handbook (Phase 1) |
| Monday Plan form | handbook.rycolston.com/50os/monday-plan | Access | pending |
| Daily self-report | handbook.rycolston.com/50os/ (form) | Access | pending |
| Module map | handbook.rycolston.com index | Access | pending |
the50os.com week-1 job (answer B): the cold-traffic / ads-funnel landing for prospects, lead-capture/booking CTA — NOT the internal 27-agent pitch page.
Phase 2 (Option 2 upgrade) — AGENT FRONT DOOR COMPLETE 2026-07-03 (RYR-69 Done). The migration onto app.the50os.com executed end-to-end: agent home roots + shared content 301 from the handbook, ABS is /app/abs, board.rycolston.com folded in — all live-verified in an authenticated browser 2026-07-03 (see that evening's Update). Slug subtrees (per-agent /start/, /level/, practice-offers) remain handbook-hosted by design; the board.rycolston.com retire redirect is soak-gated.
Migration design (2026-06-23): the full handbook→app agent front-door migration is now designed and version-controlled — ~/rylobasic/docs/superpowers/specs/2026-06-23-50os-handbook-to-app-migration-design.md (MR !749). Locked: entire agent front door onto app.the50os.com; hybrid rendering (server-render stateful surfaces, static content served as Worker assets behind one Access app); strangler / parallel-run cutover (per-route build → parallel-run → verify-by-observed-behavior → 301 → soak → retire; rollback = remove the 301); safe-anytime (no July-1 dependency); setter/admin surfaces stay a separate track; team roll-up is a first-class agent-board feature anchored on actor_roster (admin tasks ship now via sop_events; setter calls + appointments are data-capture prerequisites, not surface work). Each cutover guard is mapped to a documented past failure mode. Awaiting Ry's spec review before the implementation plan.
Cohort 1 timeline
2026-06-09 revision: the June 1 pitch to all 27 agents was never sent. Decision: Cohort 1 is invite-only — a selected subset, not the full team. The pitch doc's audience line and the Hormozi scarcity step both get stronger under selection, but the original June 1 / June 15 dates below are void. New invite list, pitch date, and reply deadline pending; July 1 launch target stood until revised 2026-07-03 → Monday July 6.
2026-06-25 LOCKED — Cohort 1 = 5 invitees: Donovan Broadus, Marissa Tah, Brandon Plummer, Precious Jefferson, Paul Harding. (Donovan already enrolled 2026-06-23 as the pipeline test; the other 4 have not yet been sent invites — activation move #2.) Framed as an internal, free proof-manufacturing run measured on set-to-book recovery, not a paid launch. Also locked 2026-06-25: a 90-day build freeze (no new systems; activate what's already built). FREEZE start pushed July 1 → August 1 (Ry 2026-07-07) — so July stayed an open build window and everything shipped 7/1–7/7 is pre-freeze, in-scope. (This August 1 date is the freeze, NOT the Cohort 1 launch — cohort clock is July 6 per RYR-163, resolved 2026-07-24.) Source: 2026-06-25-activation-week-checklist + 2026-06-25-90day-flywheel-strategy.
| Date | What |
|---|---|
| List LOCKED 2026-06-25 | The 5: Donovan Broadus, Marissa Tah, Brandon Plummer, Precious Jefferson, Paul Harding (invites to the other 4 not yet sent) |
| TBD | Reply deadline. Commitment doc signed + 15-min call booked. |
| TBD → June 30 | 15-min commitment calls with Ry |
| Monday July 6, 2026 | Cohort 1 Week 1 starts (Ry 2026-07-03; BQ enrollment.start_date updated same day) |
| Friday September 25, 2026 | Rubric exam (last weekday of Week 12; set 2026-07-03, Ry-delegated call) |
| Sunday September 27, 2026 | Cohort 1 Week 12 ends (12 weeks from 7/6) |
| Friday October 2, 2026 | Q1 in-person half-day (graduation + Q2 kickoff) — first Friday after the cycle (set 2026-07-03, Ry-delegated call; nothing calendared yet) |
Next 3 actions
- Ship the L4+ charter page (smallest piece in the build queue — one public page, "Coming Q4 2026" + qualification line)
- Build the Database Play engine (Phase 1, Ry-only) — the automated Database Protocol email; design + 14-task plan done, see gitlab #81 (Module 1 curriculum already SHIPPED 2026-06-22, MR !739)
- Build the Monday Plan Tally form + webhook → BQ pipeline + listing-dropdown Cloud Function
Decisions log
Three walkthroughs locked the design, the pitch, and the MVP build:
- 2026-05-25 design walkthrough. Section 17 lists all 11 locked design decisions (resolved contradictions + open questions).
- 2026-05-26 pitch build. Appendix lists the Hormozi 8-step walkthrough decisions.
- 2026-05-26 MVP build decisions (below).
- 2026-05-30 Playbook ↔ 50OS reconciliation (handoff). Vault is canonical for the training manual (monorepo duplicate deleted, MR !225). Metric model locked: contacts/day = lever, ABS = gauge, phase-dependent. Open: draft the crosswalk (funnel + posture resolutions pending confirm); decide the manual's live role (A vault-only / B publish subset = the
/agent/migration / C author the deferred Listing Consult). - 2026-06-22 — Module 1 (The Database) shipped. Authored in Ry's voice + full teaching prose, live on handbook.rycolston.com for all agents (MR !739). Weekly-email standard = the Tuesday 4-week rotation (neighborhood numbers / Deal of the Week withhold / local news / personal update); ABS = 0-6 months tracked daily; source coach names out. Ry's automated version = the Database Play (gitlab #81; spec
Roadmap/plans/2026-06-22-database-play.md).
MVP build decisions (locked 2026-05-26)
| # | Decision | Resolution |
|---|---|---|
| A | Monday Plan fields | 3 numbers (Dials / Conversations / ABSs added) + auto-populated script focus + listing dropdown from BQ + free text action. No additional fields. Tally + webhook → BQ. |
| B | Daily self-report mechanism | Tally form (2 fields: Conversations + ABSs added). Webhook to BQ + auto-post to cohort's Google Chat space. Dials and Contacts come from Mojo Bridge. |
| C | Scoreboard auth | Cloudflare Access. Allowlist = 27 agent work emails. Google SSO. |
| D | Module 1 voice | Ry's voice. Same as pitch + existing handbook. |
| E | L4+ charter wording | Single public page at /50os/l4-plus/. Content: "Coming Q4 2026" + one line on qualification. Marissa not named publicly. Her actual L4+ content addressed later. |
Locked vocabulary
- The Fifty's Fundamentals. The 10 operating beliefs that anchor the curriculum. Introduced two per module across Modules 1-5. Integration in Module 6.
- The Database Protocol. Team-wide standard. Tuesday email forever (4-week rotation, shipped in Module 1 2026-06-22), ABS list, Thursday buyer addendum. Ry's automated version = the Database Play engine (gitlab #81).
- The Prospecting Protocol. Channel-specific. Named scripts, Qualifying Question, Preview Appointment, 8-week sequence, A.R.P.
- Doctor identity is out. Real-estate-native framing only. The Fundamentals carry the worldview.
- Source names are scoped (set 2026-06-22, scoped 2026-06-23). Source-coach/influencer names (Carruth, Mulrenin, Srivatsaa, Hormozi, or any other) are OUT on cold consumer surfaces (the public the50os.com landing; cold paid ads to people who don't know the coaches) and inside the delivered curriculum/product, where the OS is presented as Ry's integrated system, not a re-skin. Names are allowed in agent-to-agent marketing and ad creative (a warm audience where citing the coaches is credibility by association) and in internal/curator/recipe/design docs. Rule of thumb: cite the influences in warm marketing, own the system in the product and to cold traffic. The cold-consumer half was applied to the50os.com on 2026-06-23 (MR !753); the
ads/system stays as built under the warm half.
Open issues
No GitLab project yet. Pre-build punch list lives in synthesis doc Section "MVP scope" and Section 14 (build list of 7).
Build list (each item carries its address — public = the50os.com, gated = handbook/50os/):
- [ ] [the50os.com] Public ads-funnel / VSL landing — lead-capture/booking CTA. Scaffolded + deployed to the50os.pages.dev 2026-05-31; copy + apex attach pending. (Was not in the original handbook spec; added when the50os.com was acquired.)
- [ ] [handbook/50os/ — gated] Monday Plan form (Tally, embedded at handbook.rycolston.com/50os/monday-plan/, webhook → Cloud Function → BQ for data sync. Listing dropdown sourced from existing BQ listings runner per-agent.)
- [ ] [handbook/50os/ — gated] Daily self-report form (Tally, 2 fields — Conversations + ABSs added — since Dials and Contacts come from Mojo Bridge. Webhook fires both to BQ for data and to the cohort's Google Chat space for visibility.)
- [ ] [handbook/50os/ — gated] Public scoreboard page at handbook.rycolston.com/50os/scoreboard/ (Cloudflare Access auth, allowlist of 27 agent work emails)
- [ ] [handbook/50os/ — gated] Module-rubric column in Pace Check
- [ ] [handbook — gated] Module-of-the-week section in Hump Day newsletter
- [ ] [handbook/50os/ — gated] Module map on handbook index
- [ ] [the50os.com] L4+ charter page at the50os.com/l4-plus/ (public, single page. Content: "Coming Q4 2026" + one line on what L4+ is + how to qualify (graduate L1-L3). Marissa not named publicly. Her actual L4+ content addressed later.)
- [ ] [handbook — gated] 30-min new-hire onboarding session calendar series (template)
Backlog — Linear-tracked (the ticket is the record; this is a pointer, not a status):
- [ ] RYR-261 — submit a property to Orchard Offers from a 50OS form. Scoped and decided 2026-07-24, not started. Agent picks a FUB contact; the Deal Hub link on that contact resolves the whole property record; the agent types only price + six condition ratings. Reference material landed on main 2026-07-24 in MR !1717 (git ls-tree origin/main confirmed both paths present that day): the API contract at data-platforms/orchard-offers/API.md, the FUB→Deal Hub bridge at data-platforms/fub/docs/deal-hub-bridge.md, and the spec registered in the monthly API drift audit (infra/dev-tools/api-audit-engine, name: orchard-offers). Blocked on nothing technical — Ry picks the pilot agent when someone next needs to submit a property.
Backlog — future features (surfaced in the 2026-06-23 handbook→app migration design docs/superpowers/specs/2026-06-23-50os-handbook-to-app-migration-design.md):
- [ ] Team roll-up: admin tasks (READY — work_product.sop_events GROUP BY agent, admin_id) → per-agent card on the agent board. Ships with the migration's roll-up phase.
- [ ] Team roll-up: setter-booked appointments (PREREQ — fub_appointments attributes to the owning agent; setters aren't FUB users, so "which setter booked it" needs a new capture path).
- [ ] Team roll-up: setter calls/dials (PREREQ — no per-setter column in mojo_raw.call_detail + zero dials captured; needs setters on the Mojo account under their own identity + persisted Mojo roster + a name→setter→agent crosswalk).
- [ ] Setter/admin SURFACE migration onto app.the50os.com (separate track from the agent front-door migration — D5 of the migration spec; the roll-up does NOT depend on it).
- [ ] Embed Tally intake in-app (vs. today's deep-links) — deferred; YAGNI until the front door proves out.
When build kicks off, create a GitLab label 50os and migrate the punch list to issues. (Label 50os created 2026-06-23.)
Sub-projects
- Setter Workbook System — per-setter 30-day handbooks at handbook.rycolston.com. The Setter-track delivery surface for the curriculum.
- Sales Operational Playbooks — the New Consultation Scheduled system + decision tree, live at handbook.rycolston.com/playbook/.
- Handbook Site — handbook.rycolston.com itself: the multi-tenant site that hosts the curriculum, playbooks, and setter workbooks.
Sub-systems
- Ads system — top-of-funnel ads across 2 archetypes (Team Lead / Coachable Agent). Built on Carruth+Mulrenin synthesis (same DNA as the curriculum) + Hormozi organic→paid methodology. Lives at
Projects/The 50OS/ads/. Sister systems: recruiting ads · Capri consumer ads. See ads/README for the index. - Payroll — semi-monthly pay for agents' setters/admins; same make-a-request family as CMA / Buyer Showing Activity (WPG-served,
sop_eventsattribution,actor_rosterroster)./run-payrollcomputes base ($4/hr × 4-hr weekday shifts) + $5/appointment and drafts the per-agent emails for review; thepayroll_ledgertracks each row pending → sent → received with unpaid periods auto-carried as back pay. Confirm surfaces on the gated app (app.the50os.com/app/pay): agents tap Mark sent, setters/admins tap Confirm received, reached from a Your Pay link on their handbook home. Banking (PII) stays only in Secret Manager — never git or BigQuery. Code:~/rylobasic/systems/payroll/. Shipped 2026-07-01.
References
- Strategy doc: 2026-05-25-coaching-curriculum-synthesis (canonical design, includes week-by-week curriculum spec in Section 7)
- Cohort 1 pitch: pitch-cohort-1-internal
- Source material: Ricky Carruth 50 Deals · Mulrenin FSBO Conversion System · Reverse Selling Scriptbook · Hormozi 100M Offers Implementation Guide
- Existing playbook: Sales Team Playbook (raw source content the modules pull from)
- Related projects: Listing Legends Daily Practice · Handbook Site · Agent Newsletter · Team Pulse Digest · Marissa Tah (L4+ Cohort 0)
- Reference: reference_agent_competency_ladder (L1-L7, the 50OS binds gates to L1-L3)
- Curriculum prose layer: Real Estate - Curriculum — 9-chapter narrative companion to the Real Estate MOC, aligned to the 7-Level ladder. Frameworks across the 9 chapters map cleanly to L1-L3 gates (the 50OS scope) and L4-L5 gates (the L4+ charter scope). When building module content, cite the curriculum chapter that teaches the relevant framework.
-
Code home: public site
~/rylobasic/domains/the50os-com/(the50os.com, Pages projectthe50os). Internal tooling: handbook repo~/rylobasic/domains/handbook-rycolston-com/under/50os/. -
2026-07-01 — Launch-day ingest hardening (MR !1010, proven live): MERGE-claim idempotent forms ingest (double-run inserted:0, zero dup pings), notify_claims dedup for un-rostered submission alerts, fail-soft extraction, cycle-scoped Path gates, app-Worker WIF 502 guards (v 5e1a0bbc). Decision (Ry 2026-07-01): Team Payroll lives under this project — semi-monthly /run-payroll + /app/pay ledger (pending→sent→received), hardened same day (MR !1006: banking-missing warnings, compare-and-set marks; Anthony Lee wired in (June already paid directly — NO back pay carried; Ry 2026-07-01)).
2026-07-04/05 overnight sprint — the three pillars (verified live this session)
All three remaining epic pillars shipped, audited on the live app at phone viewport, and closed in Linear with evidence: - Scoreboard (/app/scoreboard, RYR-79 Done): four self-report funnel columns + machine listings from the daily NTREIS pull (v_agent_active_listings), ritual binaries, as-of stamp, degraded state (fired honestly twice during the audit), dispute→ops-ping exercised end-to-end. Four-number Daily Numbers capture implemented same night (Tally form A7Qbxo + table + ingest — the 6/29 decision, previously unimplemented). - My Stuff (/app/mystuff, RYR-77 Done): delivered-artifact history off v_all_requests, filter chips exercised live, honest empty/degraded states. - Native forms (/app/plan + /app/numbers, RYR-76 Done for the two rituals): login identity (no email field), cycle-derived script focus, NTREIS listing picker, 50-dial floor rejected live in program words, idempotent via ingest MERGE claims; Tally parallel until retired. CMA/showing + voice-recording forms remain Tally (follow-up noted on the issue). - Pay page restyled to the design system (RYR-78 item 2, via parallel Opus agent, verified live). - Two audit-caught bugs fixed + redeployed same night: scoreboard SQL invented enrollment.display_name (now joins actor_roster; SQL validated against live BQ pre-ship); native forms rejected enrolled agents whose Access login email differs from enrollment email (now bridges roster emails array). - Serving revision at audit close: 308fc4e0. Earlier same day: KV edge cache (26–35ms /app, RYR-80 Done), chat one-voice grammar live (needs-fix pings the submitter; synthetic sends self-label TEST), ADR-0008 ratified, RYR-88/89 ratified+Done. - 2026-07-05: RYR-43 CLOSED — all five emitters through lib.notifications (plan ping, intake brief sender, watchdog agent reassurance joined receipts + chat pings); gateway + watchdog job both on 059b8bf0, verified live; job gained WPG_CHAT_WEBHOOKS env + IAM. Handbook deployed (corrected Daily Numbers copy, Debbie pages dropped). Mockup + doc paper trail committed (MRs !1143/!1144). - 2026-07-05 evening: pre-launch app audit + all 7 findings fixed, shipped, live-verified (two-agent iPhone/HTTP audit → plan → three fix agents → MRs !1152–!1156, !1158, !1159). Highlights: handbook migration redirects had been silently disabled by the day's earlier handbook deploy — restored AND made default-ON so a routine deploy can't drop them again; ABS list now resolves extra_emails logins to the roster primary email (ry@ works); PWA manifest un-blocked (crossorigin=use-credentials); review queue purged of 138 hourly canary rows (215→77 real items, excluded_events widened by submitter); the50os.com Privacy/Terms live (Ry-approved copy); wrangler [build] hook now re-exports worker assets on every deploy (stale-ship trap closed). Gateway on 97a5f75c. Residual cosmetic: ABS page head lacks favicon link (probes /favicon.ico 404). Executed plan: 2026-07-05-50os-app-audit-fixes.
2026-07-16 — Full audit → Overhaul Spec (RYR-167)
44-agent ultracode audit of every 50OS commit + subsystem (7 readers → 6 lenses → adversarial verify; 28 findings survived with file-level evidence). Headline: the coaching engine isn't running — gate_eval.run() was never built; the50os.gate_evaluations has 0 rows against 7 enrollments (live BQ query this session); Path bars render against the empty table; scoreboard tiering unimplemented; no ritual-missed enforcement; no coach team view. Full spec written and filed: RYR-167 ("50OS Overhaul") with two documents — Overhaul Spec (6 workstreams A–F, 4 phases, freeze posture per phase) and Findings Index + 131KB evidence attachment. Nothing built yet — spec only. Phase 1 order: gate honesty render → gate_eval.run() → canary → ritual sweep. (Hub note: entries 7/6–7/15 — launch day, coaching cards, notification fixes, island redesign — live in auto-memory project_50os.md, not yet backfilled here.)
2026-07-16 (evening) — Coaching engine ON (RYR-167 Phase 1 tranche 1)
Same-day execution of the morning's spec, all statuses live-verified in-session: A3 three-state gate honesty on Path (● not yet evaluated vs real values — confirmed in-browser on Ry's /app), A1 gate_eval.run() hourly via /ingest-50os-forms (kickstart: 7/7 agents, 28 gate rows, immediate re-run inserted 0 — gate_evaluations no longer empty; identity via dim_agent only), A2 watchdog freshness probe on new the50os.gate_eval_runs (proving execution: ok; needed a the50os dataEditor grant, MR !1432, tf-manual-apply green). RYR-173 UX quick-wins shipped same wave (44px tap targets measured live; scoreboard quiet-week banner). MRs !1424, !1426, !1432; WPG at fe830e55. First real gate data: 1 agent has a first listing signed this cycle, 3 pass the trailing-12mo 7-UC gate. Next: A4 ritual sweep + B1 + B4 (batch 2, recon done). RYR-164 stays open on its ritual-visibility done-bar items.
2026-07-16 (night) — Phase 1 closed: rituals enforced, proof data guarded
Batch 2 shipped on MR !1437 and live-verified (deployed image 652a7ff7; scheduler cron confirmed 0 7-19 * * 1-5 CT via gcloud this session):
- Ritual nudges live (A4): miss your Monday Plan → chat+push nudge Monday 11 AM CT; miss Daily Numbers → nudge 7 PM CT weekdays; Ry gets a one-line miss digest in the ops room. At-most-once per (agent, ritual, day) via notify_claims. Kill switch THE50OS_RITUAL_SWEEP_DISABLED=1; cutoff hours are env vars. Acceptance proven with a 🧪 synthetic to Ry only (nudged:1 → skipped_claimed:1), synthetic claims then deleted.
- Baseline snapshots fail loud (B1): identity through dim_agent (shared identity.py); unresolved agent → honest NULLs + ops alert, never plausible zeros; per-run parity assertion (this session: 7 intake keys = 7 active enrollments).
- Tally ingest contracts (B4): renamed/deleted form labels now skip the ingest loudly + alert once, instead of silently writing Nones (kills the RYR-160 class).
Phase 1 of RYR-167 (A3, A1, A2, A4, B1, B4) is fully shipped. RYR-164 remains open on the coach view (A6, Phase 2) only. Watch item: first real 7 PM numbers window tonight proves the push leg on the deployed image.
2026-07-24 — Machine dials pilot LIVE + full 4-role UX review shipped
All statuses below verified live this session (structured gcloud/bq/curl checks, not assumed).
- Machine-derived dials (RYR-200) LIVE for the pilot (Ry + Donovan). Dials/contacts/conversations are no longer self-reported for the pilot — a machine pull off FUB's internal reporting API (
/api/v1/reports/agentActivityvia a Browserbase authed context) writesthe50os.machine_dials, and the scoreboard prefers it per-agent behindFLAG_MACHINE_DIALS(live =pilot, the two pilot emails; source tfvars matches, no drift). Hourly Cloud Run Jobmachine-dials-puller, scheduler ENABLED0 7-19 * * 1-5CT; heartbeat now registered inhealth_check.pyso a dead pull pages instead of silently freezing the board. Only ABS-adds stays self-reported (no machine source) — the numbers form already renders ABS-only for a flagged agent; flipping the flagpilot→onmakes that universal with zero code (RYR-248 Task 3, targets kept). Runbook:systems/the50os/docs/machine-dials-runbook.md. Bug caught en route + fixed:sync_rosternever setteam_id(Brad Ford invisible to team queries since Feb, Gavin since June). Follow-up: RYR-205 (proactive canary for the FUB endpoint). - Full 4-role UX review of app.the50os.com → fixes shipped + specs filed. Rendered every page each role reaches (coach/agent/admin/setter) with real data at 375px, one opus reviewer per role, every finding re-verified against live code before acting. Shipped live (WPG
0bd02c3e): back-bar/hub-link color standardized on the design-system brand olive-700 (the earlier#5c6b3awas off-token); coach dispute-button gated to member view; coach-worklist clean fatal-error + Retry; ABS page on brand tokens + top/bottom back + retry; 3 redundant "Your Path" cards removed; red badge for genuine failures (vs the generic purple dot); Monday-Plan compliance-checkbox section. Plus the "address - address" self-duplication bug root-caused to av_all_requestsview join (a data-side bug — address-only CMA requests wrote the address intocustomer_nametoo) — fixed at the view (also fixes My Stuff + push notifications), live-verified. - Filed to Linear from the review: RYR-248 (pay board reachable for admin/setter + itemized + pay-date/method; archive stale "Needs You" cards via a WPG-owned
request_dismissalsside table; numbers ABS-only — full spec doc attached), RYR-247 (coach-page jargon legend), RYR-249 (agent-hub single-CTA hierarchy pass), RYR-251 (CMA producer persists address-as-customer_name, the root cause behind the view guard). Scoreboard rank semantics: closed (Ry 2026-07-24) — no separate work; the in-flight scoreboard-tally change fixes the root (the board ranks ondials DESC, but dials are empty self-report for non-pilot agents, so the order looks arbitrary — machine dials as the source makes the sort meaningful).