The 50OS

Status
in-flight
Tier
Tier 1 — Operating business
Owner
Ryan Colston
Started
2026-05-25
Target launch
TBD

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.

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).

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 ([email protected], 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.pyactor_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 [email protected] 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
Monday June 1, 2026 Pitch goes live to the 27 agents — never sent; superseded by invite-only decision 2026-06-09
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
Wednesday July 1, 2026 Cohort 1 Week 1 starts (Q3 day 1) — moved 2026-07-03 (July 1 passed with invites unsent)
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

  1. Ship the L4+ charter page (smallest piece in the build queue — one public page, "Coming Q4 2026" + qualification line)
  2. 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)
  3. 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:

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

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

Sub-systems

References

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 runninggate_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).