zabir@texashotelmgt.com exists in prod with role owner and signed in today, 2026-07-16 (prod auth.users + profiles query, 2026-07-16). His role already shows the full Acquisitions & Market nav group. What he gets is a solid read-and-triage surface: browse the kanban, open any deal, move stages, pass deals, add a deal, edit asking price, write a thesis, drop broker documents.
What he cannot do is the thing the pipeline is actually for: originate an underwriting. The model is an Excel workbook in Drive, built by a bespoke Python script that Claude writes per deal, and the two bridges between the UI and that workbook are launchd workers on your Mac Mini. If you and Claude stop, the pipeline freezes at "viewer mode" for everyone else.
Recommended order: fix his profile today (10 min), add job-status visibility so his UI edits are trustworthy (1 session), then generalize model creation so a dropped T-12 + STR builds the workbook without a hand-written script (the real unlock, 1-2 weeks). Access-control hardening can wait until you invite anyone below partner level.
Nav group "Acquisitions & Market" (src/lib/nav-config.ts:108-117): Deal Pipeline (/app/deals kanban), Hotel Intelligence, Deal Staging, Tax Intel. Off-nav deal routes: deal detail (9 tabs), compare, and the mobile Deal Walk mode (src/App.tsx:67, 86-88). Visible only to roles owner, managing_partner, and analyst (nav-config.ts:124-137); every other role, including the JWT default staff, sees none of it.
The app deliberately never computes model math (comment at src/components/deal/DealAssumptionsTab.tsx:21-28). The calculator is the V5 underwriting workbook in Drive; scripts/sync-model.mjs is the one-way bridge from workbook to Supabase, and everything financial in the UI is a display of that sync.
| Action | In-app today | Where / why |
|---|---|---|
| Browse pipeline, open deals, compare, Deal Walk | Yes | Deals.tsx, DealDetail.tsx (9 tabs), DealCompare.tsx, DealWalk.tsx |
| Move deal stage, pass with reason | Yes | useUpdateDealStage (src/hooks/useHotelIntel.ts:729) |
| Add a deal (manual or file-drop with identity resolution) | Yes | AddDealModal.tsx → useCreateDealReference (useHotelIntel.ts:763) |
| Edit asking price, thesis, recommendation; walk observations | Yes | Inline edit shipped and committed (DealDetail.tsx:82-100; vault note 2026-07-11); Decision tab (DealDetail.tsx:870-944) |
| Staging triage: add lead, dismiss, promote to deal | Yes | DealStaging.tsx, usePromoteDealStaging (useHotelIntel.ts:862) |
| Upload broker docs (T-12, STAR, OM) | Queues only | Inserts deal_intake_jobs; nothing happens unless deal-intake-worker.mjs is running on the Mac Mini (launchd, 60s poll) |
| Edit underwriting assumptions (deal dials) | Queues only | Inserts deal_model_edit_jobs; applied by model-edit-worker.mjs on the Mac Mini against the Drive workbook |
| Create / populate the underwriting model | No | Hand-written per-deal scripts: ~/agents-runtime/scripts/fill_h150_model.py, fill_h155, fill_h156, fill_h158, fill_h129_h133, etc. Claude reads seller P&Ls, STR PDFs, HCAD, then writes the script |
| Enter or correct financials (T-12, CapEx, STR monthly) | No | deal_annual_financials, deal_capex_years, deal_str_monthly have no UI write path; written only by sync-model.mjs / ingest-deal-star.mjs |
| See whether a queued edit or upload actually processed | No | No job-status surface; failed or stalled jobs queue silently |
All paths verified in the repo today by a full code sweep; write paths cross-checked against Supabase RLS policies (live pg_policies query, 2026-07-16).
fill_hXXX_model.py against the V5 template.DealAssumptionsTab.tsx:21-28).deal-intake-worker.mjs (classifies uploads, files to Drive, triggers sync) and model-edit-worker.mjs (applies UI assumption edits to the workbook, re-syncs). Single point of failure, needs Mac Mini awake + Drive creds + repo .env.deal_references.model_*, deal_annual_financials, … ↓~/agents-runtime/scripts/ today). Zabir can add a deal shell and drop files, but no model appears without you.016_deal_references.sql:36-43: FOR ALL USING tenant_id = tenant_id(), granted to all authenticated users). The AccessMatrix settings page (AccessMatrix.tsx) is display-only. Irrelevant for Zabir as a partner; a real blocker before inviting analysts or GMs anywhere near deals.owner or move to managing_partner per the access spec (22-user-access-controls.md seeds him as managing_partner); both see the full deal nav.| Phase | Work | Effort | What it unlocks for Zabir |
|---|---|---|---|
| 0 · Today | Set his assigned_properties (all 15 or the DFW set) and confirm role. Give him a 30-minute walkthrough plus a one-page guide: what each tab means, which numbers are editable, that assumption edits take a few minutes to apply. |
10 min + walkthrough | Full read/triage use immediately: stage moves, passes, theses, walk mode, staging triage. |
| 1 · This week | Job-status visibility: show queued/processing/done/failed on the Assumptions tab and intake dropzone (both tables already have status columns), plus a worker-heartbeat alert when either launchd job goes quiet. | 1 session | His edits and uploads become trustworthy. Kills the "is it broken?" support loop, which is the #1 cause of tools getting abandoned by a second user. |
| 2 · 1-2 weeks | Generalize model origination: extend the intake worker so a classified T-12 + STR on a new deal auto-builds the workbook from the V5 template (build_uw_model_template.py generalized), with a review step instead of a bespoke script. Stopgap alongside: a simple in-app financials entry form for when parsing fails. Then move both workers off the Mac Mini to a hosted runner (or supervised cloud cron) so the chain survives your machine. |
The big lift | Zabir can originate a deal end to end: drop broker package, get a draft model, turn the dials, read the proforma. You and Claude become reviewers, not the assembly line. |
| 3 · Before wider invites | Real enforcement: role-guard the deal routes, add role-based RLS write policies so analyst is actually read-only, wire or delete the dead visibleTo metadata in nav-config. |
1-2 sessions | Safe to invite Junaid, Aadil, or an analyst without them being able to silently rewrite the pipeline. |
My honest take on scope: Phases 0-1 make Zabir a productive second set of eyes this week for near-zero cost. Phase 2 is the only thing that makes the pipeline genuinely usable "besides you," and it is worth doing before polishing anything else in the deal surface. Phase 3 is not a Zabir problem at all; do not let it jump the queue.