{
 "version": "1.8.0",
 "slug": "rubs-compliance-completeness-pack-engine",
 "title": "RUBSClear — RUBS Compliance Completeness Pack Engine",
 "vertical": "Multifamily housing / RUBS (Ratio Utility Billing System) compliance and allocation operations",
 "seed": {
  "s": "rubs-compliance-completeness-pack-engine",
  "t": "RUBSClear — RUBS Compliance Completeness Pack Engine",
  "v": "Multifamily housing / RUBS (Ratio Utility Billing System) compliance and allocation operations",
  "r": "Medium-high",
  "m": "M"
 },
 "product": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "project_name": "RUBSClear",
  "project_type": "outcome-priced RUBS compliance documentation and allocation-operations service",
  "vertical": "Multifamily housing / RUBS (Ratio Utility Billing System) compliance and allocation operations",
  "audience": "Minnesota (then Colorado) multifamily owners and third-party property managers, 50-2,000 doors",
  "geography": "United States, beachhead Minnesota under Minn. Stat. §504B.216, expanding to Colorado under HB26-1013; no physical site visits",
  "scale_expectation": "8-property / 5-logo pilot cohort in the first 90 days; 20+ Completeness Packs and 60% automation by day 90",
  "core_workflows": [
   "Master utility bill intake & completeness check",
   "Deterministic hard-fail rules pass (overbilling, common-area, fee caps, disclosure, electricity apportionment)",
   "Utility-ops analyst exception review and release-gate signature",
   "Completeness Pack delivery and Monthly Cycle Retainer renewal"
  ],
  "discovery": {
   "one_line_purpose": "On RUBSClear, Minnesota multifamily operators stop guessing whether their RUBS program overbills or discloses correctly, and get a release-ready Completeness Pack instead.",
   "primary_users": [
    "Minnesota multifamily owner/PM, 50-2,000 doors, running RUBS on a spreadsheet, PMS-native calculator, or thin vendor relationship",
    "Lease admin / utility coordinator who owns the allocation spreadsheet day to day",
    "utility-ops analyst (the named human who approves every discrepancy and signs the pack)"
   ],
   "jobs_to_be_done": [
    "Get a release-ready Compliance Scorecard without hand-reconciling a master bill against a rent roll every cycle",
    "Get a Lease Disclosure Addendum draft that actually matches how the property bills, before the next renewal",
    "Recover missing or short-paid utility provider allocations without the property chasing 40+ statements by hand every month"
   ],
   "value_prop": "RUBSClear turns a property's scattered, inconsistent RUBS math and lease language into one release-ready Completeness Pack — reviewed and signed by a utility-ops analyst, never by AI alone.",
   "competitors": [
    "Full managed billing (Conservice, RealPage Utility Management) at $5-$8/door/month",
    "Operator-run RUBS software (Utility Ranger, Billee, Anchor) at roughly $3/door/month",
    "Specialist multifamily housing-property bookkeeping firms (IAAB, Angela Adams Consulting) doing materially similar work by hand, capacity-capped, without AI leverage",
    "The status quo: a generalist bookkeeper or CSR booking statement totals as lump revenue and never verifying line items"
   ],
   "differentiation": "Done-for-you compliance completeness and independent QA, not a tool the operator has to run and not full managed billing the operator has to switch to.",
   "positioning_statement": "For Minnesota multifamily owners and PMs who suspect but have never proven their RUBS program is compliant, RUBSClear is the done-for-you Completeness Pack that a tenant's attorney, a PUC complaint, or an eviction judge can't pick apart."
  },
  "assumptions": [
   {
    "id": "rubs-compliance-completeness-pack-engine-a1",
    "statement": "Minnesota multifamily owners/PMs will pay a flat fee for a done-for-you Completeness Pack rather than build the hard-fail checks in-house",
    "confidence": "medium",
    "impact_if_wrong": "severe",
    "revisit_trigger": "First 8-property pilot cohort's willingness to convert to a Monthly Cycle Retainer"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-a2",
    "statement": "A billing cycle can hit the 5-business-day (10 at pilot) delivery SLA from property-supplied intake evidence set and master bills alone, without property-side software integration.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "First 3-6 pilot RUBS Exposure Diagnostics."
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-a3",
    "statement": "Agencies tolerate AI-assisted statement parsing and discrepancy drafting when an utility-ops analyst's approval and signature are explicit on every Compliance Scorecard.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "First resident-payout dispute resolved off a RUBSClear pack."
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-a4",
    "statement": "Scan-to-desk conversion reaches at least 25-40% among qualified, warm-led agencies.",
    "confidence": "low",
    "impact_if_wrong": "severe",
    "revisit_trigger": "Day-90 pilot-cohort conversion measurement (explicit kill/pivot gate at 25%)."
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-a5",
    "statement": "Logical, row-level tenant isolation (not single-tenant infrastructure per client) is acceptable to the pilot cohort.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "Any prospect (e.g. a multi-property network) with a hard single-tenant compliance clause."
   }
  ],
  "unknowns": [
   {
    "id": "rubs-compliance-completeness-pack-engine-u1",
    "question": "Which specific utility-ops analyst signs off on the first pilot cohort's Completeness Packs, and what are their credentials?",
    "blocks": "Any commercial engagement; the release-gate signature invariant cannot ship without a named analyst",
    "resolution_path": "Named utility-ops analyst + engagement letter on file before the first paid Completeness Pack ships"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-u2",
    "question": "What is the true scan-to-desk conversion rate among warm, qualified leads?",
    "blocks": "Pricing hypothesis; scaling decision.",
    "resolution_path": "10-property pilot cohort with explicit pricing conversation, measured against the Day-90 checkpoint (25% kill gate, 40% target)."
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-u3",
    "question": "How much does per-utility provider parser coverage actually reduce review minutes by day 90?",
    "blocks": "Unit-economics model; throughput assumptions.",
    "resolution_path": "Instrument analyst minutes per cycle from pilot 1; compare to the 3.8h-launch to 1.9h-day-90 target."
   }
  ],
  "expert_panel": [
   {
    "role": "Product Strategy",
    "key_concern": "Is the Completeness Pack narrow enough to sell in weeks without a custom AHJ legal opinion per property?",
    "recommendation": "Launch scoped to Minnesota only, water/sewer/trash/gas RUBS, single-property Completeness Packs; defer Colorado and portfolio work to day 60-90",
    "dissent": "May understate the recurring-revenue story (Monthly Cycle Retainer) to early prospects who only see the one-time pack"
   },
   {
    "role": "Software Architecture",
    "key_concern": "Are we defaulting to a client-facing portal the pilot doesn't need yet?",
    "recommendation": "Single deployable modular monolith; upload-link/email intake only at launch, no client portal.",
    "dissent": "May read as under-built to a referral partner expecting a branded dashboard."
   },
   {
    "role": "Frontend / UX",
    "key_concern": "Is the evidence chain (master-bill line to PMS policy to analyst approval) visible in every analyst-facing view?",
    "recommendation": "Every Exception Log line renders its statement citation, matched policy, and analyst decision in one glance.",
    "dissent": "Adds density a non-multifamily housing analyst might call cluttered."
   },
   {
    "role": "Backend / Data",
    "key_concern": "Is the audit trail append-only and reconstructable for a resident dispute or diligence request years later?",
    "recommendation": "Event-sourced audit log for every billing-cycle state transition; hash-chained artifact snapshots.",
    "dissent": "More write-path complexity than plain CRUD; requires schema discipline as utility provider formats evolve."
   },
   {
    "role": "AI / ML",
    "key_concern": "Are discrepancy classifications grounded in the fee schedule and never a free-form guess?",
    "recommendation": "Retrieval-first classification citing the specific allocation-schedule line; deterministic money math in code, never the model; mandatory analyst gate before any client- or utility provider-facing claim.",
    "dissent": "Slower per-cycle than a fully automated tool; may frustrate a prospect expecting instant results."
   },
   {
    "role": "Security",
    "key_concern": "Is one property's financial and policy data isolated from every other property's?",
    "recommendation": "Row-level auth, per-tenant retrieval indices, log-scrubbing of financial figures.",
    "dissent": "None recorded this run."
   }
  ],
  "strategy": {
   "business_model": "Flat per-property Completeness Pack fee plus a per-door Monthly Cycle Retainer (minimum $799/mo); never hourly, never contingent on avoided fines",
   "revenue_streams": [
    "Completeness Pack (one-time/quarterly wedge, $249-$599)",
    "Monthly Cycle Retainer ($4-$7/door/mo, min $799)",
    "Recovery-share rider (optional, capped)",
    "Diligence Tie-Out (event-driven, property M&A season)"
   ],
   "moat": [
    "Versioned MN/CO statutory rule cards + city RUBS-ban list + exception-library gold examples, compounding with every pack released",
    "Persistent, tracked utility provider-chase relationships and response-time data",
    "Named utility-ops analyst's signed accountability on every pack",
    "PMS-agnostic integration surface (intake evidence sets, QuickBooks postings, resident splits)"
   ],
   "gtm": [
    "Founder-led educational content + anonymized RUBS Exposure Diagnostic teardowns + MN/CO apartment association distribution",
    "State NAA/PIA association webinars and property-network member-benefit pilots",
    "PMS user-community how-to content + CPA/bookkeeper referral partnerships"
   ],
   "pricing_hypothesis": "Diagnostic free (lead magnet); founding pack $149-$349 for first 20 MN properties; standard pack $249-$599; retainer $4-$7/door/mo",
   "kill_criteria": [
    "No signed pilot property in 4 weeks of qualified Minnesota outreach",
    "Analyst median cycle time exceeds 115 minutes/client after pilot 5",
    "No paid standard-price conversion by Day 90",
    "A released Compliance Scorecard or utility provider inquiry causes a documented, RUBSClear-caused reputational or client-relationship incident"
   ]
  },
  "security": {
   "stride": [
    {
     "threat": "Spoofing",
     "scenario": "Attacker impersonates a utility-ops analyst to release an unreviewed Completeness Pack",
     "mitigation": "SSO with MFA; release-gate signatures bound to a cryptographic per-analyst key, never a shared credential"
    },
    {
     "threat": "Tampering",
     "scenario": "Historical statement or pack entries edited after the fact to hide a bad match.",
     "mitigation": "Append-only audit log; hash-chained artifact snapshots; diff view on every analyst surface."
    },
    {
     "threat": "Repudiation",
     "scenario": "Analyst denies approving a discrepancy or signing a pack that later proves wrong.",
     "mitigation": "Signed attestations with server-side timestamp + analyst identity; export bundle includes signature manifest."
    },
    {
     "threat": "Information Disclosure",
     "scenario": "Cross-tenant leak of one property's allocation/policy data through shared indices, logs, or prompts.",
     "mitigation": "Tenant-scoped row-level auth; PII/financial-data scrubbing in logs; retrieval indices partitioned per property."
    },
    {
     "threat": "Denial of Service",
     "scenario": "A runaway extraction job or bulk export exhausts shared workers during a month-end delivery crunch.",
     "mitigation": "Per-tenant concurrency + budget caps; circuit breaker on model calls; degrade-gracefully queue."
    },
    {
     "threat": "Elevation of Privilege",
     "scenario": "A standard operator acquires analyst-approval or utility provider-inquiry-send capability via a workflow shortcut.",
     "mitigation": "Roles stored in a separate table; capability checks server-side; no client-only role checks."
    }
   ],
   "privacy_posture": "Data-minimization by default; per-property isolation; resident PII limited to unit ID and occupancy count where avoidable",
   "compliance_targets": [
    "resident-privacy-minimization handling program (state landlord-tenant privacy and data-breach statutes, not GLBA)",
    "SOC 2 Type I (year 2 roadmap)",
    "UPL (unauthorized practice of law) boundary + city RUBS-ban review per state before scaling",
    "Utility Provider-portal terms-of-service log for any automated statement pull"
   ],
   "data_classifications": [
    "Property master-bill/rent-roll/lease property portfolio (sensitive business/financial data, property-isolated)",
    "Utility Provider master bills (sensitive, third-party-sourced)",
    "Resident split sheets / payout data (sensitive, HR-adjacent)",
    "Contact/PII (standard)"
   ]
  },
  "devops": {
   "ci_cd": "PR -> typecheck + unit + snapshot tests -> preview deploy -> main auto-deploys to a single production region; migrations gated on review.",
   "environments": [
    "local",
    "preview (per-PR)",
    "staging (shared)",
    "production (single region + multi-AZ)"
   ],
   "observability": [
    "Structured logs with tenant + request IDs",
    "RED metrics per workflow",
    "Error tracking with source maps",
    "Model-call spans with cost + latency",
    "Weekly SLO review, with a month-end delivery-crunch capacity review"
   ],
   "testing_pyramid": [
    "Unit tests on matching-derivation and hard-fail clearance validation modules",
    "Component tests on analyst exception-queue surfaces",
    "Contract tests on utility provider-statement-schema parsers",
    "End-to-end smoke test on the intake -> match -> analyst-release-gate signature -> delivery path"
   ],
   "accessibility_tests": [
    "axe-core in CI on analyst-facing surfaces",
    "Keyboard-only walkthrough per workflow",
    "Prefers-reduced-motion honored"
   ],
   "performance_budget": "p95 workflow latency published per module; statement-extraction cold-path under 30s or shown as a background job."
  },
  "accessibility_i18n_ethics": {
   "wcag_target": "AA",
   "locales": [
    "en-US"
   ],
   "rtl_support": false,
   "ethical_risks": [
    "A discrepancy or recovered-dollar claim released without analyst approval",
    "Utility Provider-inquiry language read as a demand or collection threat rather than an inquiry",
    "An error in a resident payout statement attributed to AI rather than owned by the analyst"
   ],
   "ethical_guardrails": [
    "Human utility-ops analyst approval required before any discrepancy or utility provider inquiry ships",
    "Deterministic output filter blocks demand/collection-style language in every drafted utility provider inquiry",
    "AI-usage disclosure available in the engagement letter where relevant"
   ]
  },
  "governance": {
   "ownership": [
    {
     "area": "Product + roadmap",
     "owner": "Executive Sponsor"
    },
    {
     "area": "Architecture + platform",
     "owner": "Engineering Lead"
    },
    {
     "area": "Reconciliation + analyst workflow",
     "owner": "Named utility-ops analyst"
    },
    {
     "area": "Compliance + privacy",
     "owner": "Compliance Lead"
    },
    {
     "area": "Design system",
     "owner": "Design Lead"
    },
    {
     "area": "SEO + content",
     "owner": "Content Lead"
    }
   ],
   "docs_required": [
    "ADR log (checked in)",
    "Owner-action pack",
    "Evidence register",
    "STRIDE threat model",
    "Runbook: incident, restore, breach notification",
    "Analyst playbook + signature policy"
   ],
   "naming_conventions": [
    "kebab-case slugs for blueprints and routes",
    "camelCase for TypeScript identifiers",
    "SCREAMING_SNAKE_CASE for environment variables",
    "Verb-first action names (e.g., generate-reconciliation-pack)"
   ],
   "change_control": "ADR-per-major-decision; migrations require review; production deploys gated on green CI + owner-action pack check."
  },
  "risk_register": [
   {
    "id": "rubs-compliance-completeness-pack-engine-r1",
    "risk": "A utility provider-facing claim proves incorrect",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Every discrepancy claim linked to a cited allocation-schedule version + analyst release-gate signature",
    "contingency": "Retraction workflow; property-notification template; audit-log export within 24 hours",
    "owner": "legal"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-r2",
    "risk": "AI hallucination in a delivered discrepancy line or utility provider inquiry",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Retrieval-first pipeline + structured output validation + analyst gate",
    "contingency": "Analyst-triggered rollback + regeneration; incident postmortem published to the property",
    "owner": "engineering"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-r3",
    "risk": "Cross-tenant property financial data leak",
    "likelihood": "low",
    "impact": "severe",
    "mitigation": "Row-level auth + per-tenant retrieval indices + log-scrubbing",
    "contingency": "Breach-notification runbook; forced credential rotation; scoped tenant kill switch",
    "owner": "engineering"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-r4",
    "risk": "Pilot property churns before converting to a paid desk",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Weekly working-session cadence during pilot; documented value moments; owner-action pack",
    "contingency": "Structured exit interview; write learnings into ICP + pricing hypothesis",
    "owner": "owner"
   },
   {
    "id": "rubs-compliance-completeness-pack-engine-r5",
    "risk": "An PMS vendor ships free, good-enough reconciliation with a chase workflow",
    "likelihood": "medium-high",
    "impact": "high",
    "mitigation": "PMS-agnostic positioning; recovery/chase as the human moat software won't replicate",
    "contingency": "Reposition as \"we operate whatever PMS tool exists\"; lean harder into the Diligence Tie-Out line",
    "owner": "owner"
   }
  ],
  "roadmap": [
   {
    "phase": "Phase 0 — Discovery + pilot LOI",
    "weeks": "Weeks 1-2",
    "outcomes": [
     "3-5 pilot property LOIs",
     "Evidence pack from each pilot property",
     "Written ICP + pricing hypothesis"
    ],
    "exit_criteria": [
     "≥3 LOIs signed",
     "Owner-action pack populated per property",
     "Analyst identity confirmed"
    ],
    "kill_criteria": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ]
   },
   {
    "phase": "Phase 1 — Thin vertical slice",
    "weeks": "Weeks 3-4",
    "outcomes": [
     "Intake -> match -> analyst release-gate signature -> delivery working end-to-end for one PMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "exit_criteria": [
     "1 real RUBS Exposure Diagnostic delivered + analyst-signed",
     "p95 workflow latency published"
    ],
    "kill_criteria": [
     "Analyst release-gate signature cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ]
   },
   {
    "phase": "Phase 2 — Pilot cohort",
    "weeks": "Weeks 3-8",
    "outcomes": [
     "10 pilot agencies scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "exit_criteria": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "kill_criteria": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ]
   },
   {
    "phase": "Phase 3 — Recurring-desk scale-up",
    "weeks": "Weeks 9-13 (Day 90 checkpoint)",
    "outcomes": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action pack closed for launch"
    ],
    "exit_criteria": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "kill_criteria": [
     "Rework rate persistently above 3%",
     "Analyst minutes per client not falling with volume"
    ]
   }
  ],
  "metrics": {
   "north_star": "Signed Completeness Packs delivered per week, per client, with zero client-caught material errors",
   "leading": [
    "Pilot property LOIs signed",
    "Scan-request-to-delivered-scan cycle time",
    "Analyst release-gate signature cycle time",
    "Evidence coverage per Exception Log line",
    "Owner-action pack closure rate"
   ],
   "lagging": [
    "Paid standard-price desk contracts signed",
    "Scan-to-desk conversion (target ≥40%, pilot gate 25%)",
    "Client-caught material error rate (target <0.5%)",
    "Logo retention (target ≥85% annualized)"
   ],
   "guardrails": [
    "Model spend per tenant per week",
    "PII/financial data in logs (target: 0)",
    "Cross-tenant access attempts (target: 0)",
    "p95 workflow latency ceiling"
   ]
  },
  "executive_review": {
   "consensus": "Ship a thin, evidence-linked, analyst-gated vertical slice for RUBSClear, wedged on the RUBS Exposure Diagnostic. Prefer a boring, single-region modular monolith. Do not launch commercially until owner-action facts close and at least one analyst-signed Compliance Scorecard has shipped.",
   "dissent": "Executive Sponsor and Privacy/Compliance disagree on launch tempo — Privacy recommends waiting for the full state-by-state UPL-adjacent-statute review before enabling the recovery-share rider anywhere.",
   "go_no_go": "conditional-go",
   "top_3_risks": [
    "A utility provider-facing claim proves incorrect",
    "AI hallucination in a delivered discrepancy line or utility provider inquiry",
    "Cross-tenant property financial data leak"
   ],
   "first_10_steps": [
    "Confirm the named utility-ops analyst + engagement letter on file",
    "Populate owner-action pack with entity, jurisdiction, contact inbox, privacy inbox",
    "Open pilot-cohort intake (cap 10) with explicit pricing conversation",
    "Write ICP + kill/pivot criteria in the plan file",
    "Stand up the evidence-linked intake -> match -> analyst release-gate signature loop",
    "Wire append-only audit log + hash-chained snapshots",
    "Add row-level auth + tenant-scoped retrieval indices",
    "Instrument scan-request, pack-delivery, and analyst-release-gate signature events",
    "Publish the microsite with FAQPage schema only and noindex until owner-facts close",
    "Schedule the Day-90 kill/pivot review with executive sponsor"
   ]
  }
 },
 "project_site": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "app_name": "RUBSClear compliance desk",
  "archetype": "compliance completeness pack desk",
  "archetype_label": "RUBS compliance completeness pack desk",
  "reader_role": "Property Operator",
  "one_sentence_app": "RUBSClear Desk is a completeness-pack desk for Minnesota multifamily owners/PMs who need to prove their RUBS program doesn't overbill and every active lease discloses the allocation formula.",
  "homepage_sequence": [
   "scene",
   "workflow",
   "instrument",
   "offer",
   "proof",
   "qualification",
   "objections"
  ],
  "hero": {
   "frame_label": "Minnesota multifamily · RUBS compliance completeness pack",
   "eyebrow": "Property operator / suspects but can't prove RUBS doesn't overbill",
   "interface_title": "RUBSClear compliance desk",
   "primary_panel_title": "Property #MN-2291 · 340 doors · billing cycle in Review",
   "primary_panel_body": "Open cycle: normalize this cycle's master bills, run the six hard-fail checks, route exceptions to the utility-ops analyst.",
   "side_panel_title": "Before this ships",
   "side_panel_items": [
    "Every hard fail cleared or escalated",
    "Every active lease disclosure checked",
    "Compliance Scorecard ties to statement totals to the penny"
   ],
   "status_metric": "REVIEW",
   "status_label": "release gate active"
  },
  "language": {
   "problem_heading": "The property operator's moment",
   "mechanism_heading": "Inside the RUBSClear compliance desk",
   "proof_heading": "Why this survives a tenant's attorney or a PUC complaint",
   "offer_heading": "What leaves the room",
   "objection_heading": "The hard questions",
   "qualification_heading": "Who should not use this",
   "cta_close": "Start a free RUBS Exposure Diagnostic — reviewed and signed by a real utility-ops analyst"
  },
  "modules": [
   {
    "name": "Master bill intake",
    "job": "Turns uploaded master bills, rent roll, and leases into a named, checklist-verified evidence set",
    "artifact": "intake record"
   },
   {
    "name": "Compliance Scorecard",
    "job": "Holds every master-bill line matched to an PMS policy, tied to the penny against utility provider-stated totals, signed by the analyst.",
    "artifact": "reconciliation pack"
   },
   {
    "name": "Exception Log",
    "job": "Packages every missing, short-paid, late, or billing correction line with its estimated dollar value and evidence into the record a resident or acquirer can walk without a meeting.",
    "artifact": "release package"
   }
  ],
  "checkpoints": [
   {
    "label": "hard-fail check",
    "pass": "cleared with statute citation",
    "fail": "routed to analyst exception queue"
   },
   {
    "label": "penny-perfect hard-fail clearance",
    "pass": "deterministic code, pack balances to statement total",
    "fail": "blocked before release"
   },
   {
    "label": "Compliance Scorecard",
    "pass": "analyst releases (second analyst on high-value logs)",
    "fail": "stays draft"
   }
  ],
  "signature_scene": "You're the PM of a 340-door Minnesota property. It's renewal season and a resident just asked how their utility bill is calculated. You open RUBSClear's Compliance Scorecard: every hard fail cleared, the Lease Disclosure Addendum draft already cites §504B.216, and the Corrected Allocation Workbook ties to the penny. You forward the pack instead of guessing."
 },
 "ddd": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "project_name": "RUBSClear",
  "business_understanding": {
   "summary": "RUBSClear — Minnesota (then Colorado) multifamily operators stop guessing whether their RUBS program overbills or discloses correctly, and get a release-ready Completeness Pack instead of a spreadsheet they hope survives scrutiny.",
   "customer_profile": "Minnesota multifamily owner/PM, 50-2,000 doors, running water/sewer/trash/gas RUBS on a spreadsheet, PMS-native calculator, or thin vendor relationship; expanding to Colorado",
   "customer_pain": "Master utility bills arrive in inconsistent formats every cycle and nobody has hours to verify aggregate tenant charges against the bill, common-area exclusion, fee caps, and lease disclosure — so overbilling, missing disclosure, and fee-cap breaches go unnoticed until a tenant, a PUC complaint, or an eviction court finds them first.",
   "paid_outcome": "A reliably delivered, analyst-signed RUBS Compliance Completeness Pack — Compliance Scorecard, Corrected Allocation Workbook, Lease Disclosure Addendum draft, Resident Statement Template, Exception Log, Audit Trail.",
   "value_creation": "AI compresses master-bill extraction, hard-fail evaluation, and disclosure drafting from a 4-8 hour manual spreadsheet reconciliation into a 20-40 minute analyst review of scored exceptions.",
   "why_ai_native": "The extract-normalize-evaluate-draft loop across master bills, rent rolls, and lease clauses is only economical with AI extraction underneath a deterministic rules layer and a named analyst release gate.",
   "operational_risks": [
    "Utility-ops analyst bottleneck during renewal-season delivery crunch across the pilot cohort",
    "Prompt injection via uploaded utility provider-statement document content",
    "Cross-property retrieval leak",
    "Complete records unobtainable at scale (cycles stuck in evidence-gap status)",
    "A utility provider-facing inquiry read as a demand rather than a routine inquiry, damaging the client relationship"
   ],
   "assumptions": [
    "Minnesota owners/PMs will pay for evidence-linked, analyst-reviewed compliance completeness rather than build hard-fail checks in-house",
    "The workflow can be reconstructed from an property-supplied intake evidence set and master bills within the 5-business-day (10 at pilot) cycle-time target.",
    "The vertical tolerates AI-assisted drafts when analyst approval is explicit and every utility provider-facing send is property-authorized.",
    "Single-tenant infrastructure per customer is not required for the first cohort — logical isolation with row-level auth is acceptable.",
    "Demand persists as a recurring monthly need, not a one-time event — unlike a single-deadline filing business."
   ],
   "validation_questions": [
    "Which specific utility-ops analyst will sign off on the first pilot cohort's Completeness Packs, and what are their credentials?",
    "Which PMS platforms and utility provider mixes are in scope for launch?",
    "What is the actual scan-to-desk conversion rate at pilot pricing vs. standard pricing?",
    "Which existing systems (intake evidence sets, QuickBooks) must this integrate with day one?",
    "Is there a data-residency or on-prem constraint for any pilot property's financial data?"
   ]
  },
  "domain_discovery": {
   "actors": [
    {
     "actor": "Property Operator",
     "role": "Owns the property's RUBS program; supplies intake evidence; receives and applies the Completeness Pack",
     "goals": [
      "Prove the RUBS program doesn't overbill and every active lease discloses the formula",
      "Avoid losing staff hours to statement matching",
      "Have a defensible pack for residents, CPA, and acquirers"
     ],
     "decisions": [
      "Whether to engage RUBSClear for a Completeness Pack or Monthly Cycle Retainer",
      "Which records to supply",
      "Whether to authorize utility provider inquiries and the recovery-share rider"
     ],
     "pain_points": [
      "No time to hand-reconcile master bills against the rent roll every cycle",
      "Doesn't know which of 40+ utility provider formats are shortchanging the property"
     ]
    },
    {
     "actor": "Utility-Ops Analyst",
     "role": "Reviews every exception, resolves soft fails, and signs the release gate before a pack ships",
     "goals": [
      "Release zero packs with an open critical hard fail",
      "Protect property and utility provider relationships"
     ],
     "decisions": [
      "Whether an exception is resolvable or must escalate to the counsel panel",
      "Sign or withhold the Compliance Scorecard"
     ],
     "pain_points": [
      "Incomplete intake evidence blocking a clean release",
      "Ambiguous fuzzy matches requiring judgment"
     ]
    },
    {
     "actor": "Counsel Panel",
     "role": "Licensed counsel who approves any novel legal interpretation, litigation-adjacent language, or eviction-related question",
     "goals": [
      "Keep RUBSClear inside the UPL (unauthorized practice of law) boundary"
     ],
     "decisions": [
      "Whether a red exception requires a novel legal opinion"
     ],
     "pain_points": [
      "Being looped in too late on a novel statutory question"
     ]
    },
    {
     "actor": "Utility Provider",
     "role": "External, bill-issuing only — RUBSClear never contacts the utility provider or disputes its bill",
     "goals": [
      "N/A — passive source of the master bill"
     ],
     "decisions": [
      "None — RUBSClear does not interact with the utility provider"
     ],
     "pain_points": [
      "N/A"
     ]
    }
   ],
   "glossary": [
    {
     "term": "Completeness Pack",
     "definition": "The release-ready deliverable bundle for one property/one billing cycle: Compliance Scorecard, Corrected Allocation Workbook, Lease Disclosure Addendum draft, Resident Statement Template, Exception Log, Audit Trail.",
     "used_by": "Property Operator",
     "context": "Delivery & Audit Trail",
     "example": "Completeness Pack for Property #MN-2291",
     "notes": "Never called 'report', 'bundle', or 'audit'."
    },
    {
     "term": "RUBS Exposure Diagnostic",
     "definition": "The free lead-magnet scan: 1 month master bill + 3 leases + fee schedule -> traffic-light score.",
     "used_by": "Property Operator",
     "context": "Diagnostic Intake",
     "example": "RUBS Exposure Diagnostic for Property #MN-2291",
     "notes": "Never called a 'quote' or 'demo'."
    },
    {
     "term": "Compliance Scorecard",
     "definition": "The pass/fail summary naming every hard fail and soft fail found in a cycle.",
     "used_by": "Utility-Ops Analyst",
     "context": "Compliance Rules Engine",
     "example": "Compliance Scorecard for Property #MN-2291",
     "notes": "Rendered via the --state-* domain-state tokens."
    },
    {
     "term": "Hard fail",
     "definition": "A statutory or rule violation that blocks release outright.",
     "used_by": "Utility-Ops Analyst",
     "context": "Compliance Rules Engine",
     "example": "Hard fail for Property #MN-2291",
     "notes": "Never called a 'warning' — hard fails block release."
    },
    {
     "term": "Release gate",
     "definition": "The single moment a Completeness Pack is signed and cleared to ship.",
     "used_by": "Utility-Ops Analyst",
     "context": "Analyst Review & Release",
     "example": "Release gate for Property #MN-2291",
     "notes": "No pack ships with an open critical hard fail."
    }
   ],
   "decisions": [
    {
     "decision": "Is this master-bill line item a hard fail or a normal utility-provider billing quirk?",
     "who": "AI drafts, Analyst confirms",
     "inputs": [
      "[PLACEHOLDER] owner to complete"
     ],
     "rule": "Deterministic hard-fail rules per jurisdiction; ambiguous cases route to analyst",
     "output": "Hard-fail or soft-fail classification with evidence citation",
     "risk": "False hard fail reported to the property"
    },
    {
     "decision": "Is the Compliance Scorecard ready to sign?",
     "who": "Deterministic code gates, Analyst signs",
     "inputs": "All master-bill lines matched or exception-coded, pack hard-fail clearance to statement totals",
     "rule": "Penny-perfect rule: pack must tie to statement totals before release",
     "output": "Signed Compliance Scorecard",
     "risk": "Signed pack with an unresolved hard-fail clearance gap"
    }
   ],
   "events": [
    {
     "event": "MasterBillNormalized",
     "meaning": "A master bill and its lease/rent-roll context are extracted and ready for the rules pass",
     "trigger": "Normalization & Extraction context completes OCR + schema mapping",
     "downstream": [
      "[PLACEHOLDER] owner to complete"
     ]
    },
    {
     "event": "DiscrepancyApproved",
     "meaning": "A flagged discrepancy is analyst-confirmed and evidenced",
     "trigger": "Utility-Ops Analyst approves the classification",
     "downstream": "Utility Provider inquiry drafted; log line finalized"
    }
   ]
  },
  "subdomains": [
   {
    "name": "Compliance Rules Engine",
    "type": "core",
    "description": "Deterministic hard-fail/soft-fail evaluation against MN/CO statutory rule cards",
    "reason": "This is the paid outcome — the Compliance Scorecard and Corrected Allocation Workbook",
    "business_value": "Direct revenue driver; every tier maps to a delivered Completeness Pack",
    "recommendation": "Build in-house, deterministic-rules-first",
    "ai_involvement": "Extraction, clause reading, draft disclosure language",
    "human_involvement": "Analyst release, exception resolution",
    "risks": [
     "Missed cycle-delivery SLA (5 business days)",
     "Incomplete evidence causing a client-caught error"
    ],
    "validation_questions": [
     "What is the real analyst review time per cycle at volume?"
    ]
   },
   {
    "name": "Recovery & Delivery",
    "type": "core",
    "description": "Utility Provider-inquiry drafting/sending, aging/tracking, Completeness Pack assembly, recovery pack.",
    "reason": "Differentiates RUBSClear from a generic bookkeeping service — this is the chase-and-collect layer.",
    "business_value": "Drives conversion (free scan -> paid desk) and the recovery-share rider.",
    "recommendation": "Build in-house; maintain a per-utility provider contact/quirk map from day one.",
    "ai_involvement": "Drafts inquiries and recovery reports",
    "human_involvement": "Analyst approves every outbound inquiry; escalation judgment",
    "risks": [
     "Stalled recoveries with no tracked follow-up"
    ],
    "validation_questions": [
     "How often do utility providers respond within the 60-day aging window?"
    ]
   },
   {
    "name": "Evidence & Compliance",
    "type": "supporting",
    "description": "Audit trail, engagement-letter authorization, licensing-boundary enforcement.",
    "reason": "Necessary complement to reconciliation but not itself the differentiated value proposition.",
    "business_value": "Protects the licensing boundary and supports diligence/hard-fail clearance sales.",
    "recommendation": "Build thin; keep tightly scoped to documentation, never advice.",
    "ai_involvement": "Assembles audit exports",
    "human_involvement": "Compliance lead maintains state-by-state tracker",
    "risks": [
     "Scope creep into unlicensed legal opinion or collection-agency-style activity"
    ],
    "validation_questions": [
     "Which states need counsel review before the recovery-share rider is offered?"
    ]
   },
   {
    "name": "Referral & Outreach",
    "type": "generic",
    "description": "CRM, outbound sequencing, and content publishing.",
    "reason": "Not differentiating; off-the-shelf tools suffice at this stage.",
    "business_value": "Supports pipeline but not the core value proposition.",
    "recommendation": "Buy (lightweight CRM), do not build.",
    "ai_involvement": "Content drafting assistance",
    "human_involvement": "Founder-led outreach and content",
    "risks": [
     "Low differentiation risk if under-invested"
    ],
    "validation_questions": [
     "Which channel actually converts at the assumed rate?"
    ]
   }
  ],
  "core_domain_analysis": {
   "primary_core": "Compliance Rules Engine",
   "secondary_cores": [
    "Analyst Review & Release"
   ],
   "supporting_may_become_core": [
    "Delivery & Audit Trail"
   ],
   "generic_do_not_distract": [
    "Referral & Outreach (GTM channel work)",
    "CRM/pipeline tracking"
   ],
   "rationale": "The paid outcome is a signed Completeness Pack, so the Compliance Rules Engine and the release gate are the core domain; GTM channel work is supporting, not core"
  },
  "bounded_contexts": [
   {
    "name": "Diagnostic Intake",
    "purpose": "Turn a free RUBS Exposure Diagnostic submission into a scored, traffic-light lead",
    "subdomain": "Referral & Outreach (generic)",
    "type": "generic",
    "owned_language": [
     "Completeness Pack",
     "billing cycle",
     "completeness check"
    ],
    "owns": [
     "Diagnostic intake lifecycle",
     "Normalization state",
     "Utility Provider appointment completeness"
    ],
    "does_not_own": [
     "Paid pack release",
     "Analyst signature"
    ],
    "primary_actors": [
     "Property Operator",
     "Extraction Agent"
    ],
    "entities": [
     "DiagnosticSubmission",
     "ReconciliationCycle"
    ],
    "value_objects": [
     "TrafficLightScore",
     "StatementTotal"
    ],
    "aggregates": [
     "DiagnosticSubmissionAggregate"
    ],
    "domain_services": [
     "Diagnostic scorer",
     "Completeness checker"
    ],
    "application_services": [
     "RequestDiagnostic",
     "NormalizeStatement",
     "CheckCompleteness"
    ],
    "commands": [
     "RequestDiagnostic",
     "NormalizeStatement"
    ],
    "domain_events": [
     "diagnostic.requested",
     "statement.normalized",
     "statement.completeness_check_failed"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "DiagnosticSubmission",
     "ReconciliationCycle"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule",
     "Utility Provider appointment list"
    ],
    "outputs": [
     "Normalized canonical records"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)",
     "Monitored intake mailbox"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated",
     "Missing master bill for the period goes unnoticed"
    ],
    "interfaces": [
     "-> Normalization & Extraction (diagnostic.requested)"
    ]
   },
   {
    "name": "Normalization & Extraction",
    "purpose": "Turn arriving master bills, rent roll, and lease clauses into normalized, schema-mapped records",
    "subdomain": "Compliance Rules Engine (core)",
    "type": "core",
    "owned_language": [
     "Completeness Pack",
     "Exception Log",
     "match",
     "discrepancy"
    ],
    "owns": [
     "Master-bill intake lifecycle",
     "Discrepancy classification",
     "Pack hard-fail clearance"
    ],
    "does_not_own": [
     "Hard-fail evaluation",
     "Billing"
    ],
    "primary_actors": [
     "Property Operator",
     "Matching Agent"
    ],
    "entities": [
     "MasterBill",
     "DiscrepancyLog",
     "CompletenessPack"
    ],
    "value_objects": [
     "ConfidenceScore",
     "DiscrepancyClassification"
    ],
    "aggregates": [
     "MasterBillAggregate",
     "DiscrepancyLogAggregate",
     "CompletenessPackAggregate"
    ],
    "domain_services": [
     "Master-bill normalizer",
     "Expected-allocation calculator"
    ],
    "application_services": [
     "ReceiveMasterBill",
     "ClassifyDiscrepancy",
     "ApproveDiscrepancy",
     "SignPack"
    ],
    "commands": [
     "ReceiveMasterBill",
     "FlagDiscrepancy",
     "ApproveDiscrepancy",
     "SignPack"
    ],
    "domain_events": [
     "masterbill.normalized",
     "discrepancy.flagged",
     "discrepancy.analyst_approved",
     "allocation_pack.signed"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec",
     "EvidenceCitationSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open",
     "No discrepancy reaches a client or utility provider without analyst approval"
    ],
    "ai_agents": [
     "Extraction Agent",
     "Discrepancy Drafter Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "MasterBill",
     "DiscrepancyLog",
     "CompletenessPack"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule",
     "PMS property portfolio export",
     "Fee schedules"
    ],
    "outputs": [
     "Normalized canonical records",
     "Approved Exception Log"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated",
     "False discrepancy claim reaches a utility provider"
    ],
    "interfaces": [
     "-> Compliance Rules Engine (masterbill.normalized)"
    ]
   },
   {
    "name": "Compliance Rules Engine",
    "purpose": "Evaluate every normalized cycle against the six deterministic hard-fail checks",
    "subdomain": "Compliance Rules Engine (core)",
    "type": "core",
    "owned_language": [
     "Completeness Pack",
     "recovered dollars",
     "Completeness Pack"
    ],
    "owns": [
     "Hard-fail/soft-fail evaluation",
     "Aging tracker",
     "Pack assembly"
    ],
    "does_not_own": [
     "Release authority"
    ],
    "primary_actors": [
     "Property Operator",
     "Inquiry Drafter Agent"
    ],
    "entities": [
     "Exception",
     "ResidentPayoutStatement",
     "MonthlyReconciliationPack"
    ],
    "value_objects": [
     "Severity",
     "RecoveredAmount"
    ],
    "aggregates": [
     "CompletenessPackAggregate"
    ],
    "domain_services": [
     "Rules evaluator",
     "Aging tracker",
     "Pack assembler"
    ],
    "application_services": [
     "EvaluateHardFails",
     "SendUtility ProviderInquiry",
     "ComputePayout",
     "AssemblePack",
     "DeliverPack"
    ],
    "commands": [
     "EvaluateHardFails",
     "SendUtility ProviderInquiry",
     "DeliverPack"
    ],
    "domain_events": [
     "hardfail.detected",
     "utility provider_inquiry.resolved",
     "recovery.logged",
     "pack.delivered",
     "aging.escalated_60d",
     "aging.escalated_90d"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open",
     "A ResidentPayoutStatement is computed only from the property-approved split sheet"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "Exception",
     "ResidentPayoutStatement",
     "MonthlyReconciliationPack"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule",
     "Resident split sheet"
    ],
    "outputs": [
     "Normalized canonical records",
     "Delivered Completeness Pack"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated",
     "Stalled recovery with no escalation"
    ],
    "interfaces": [
     "-> Analyst Review & Release (hardfail.detected)"
    ]
   },
   {
    "name": "Analyst Review & Release",
    "purpose": "Resolve every exception and sign the release gate before a pack ships",
    "subdomain": "Analyst Review & Release (core)",
    "type": "core",
    "owned_language": [
     "Completeness Pack",
     "retraction"
    ],
    "owns": [
     "Release-gate authority",
     "Retraction workflow"
    ],
    "does_not_own": [
     "Novel legal interpretation"
    ],
    "primary_actors": [
     "Property Operator"
    ],
    "entities": [
     "ReleaseGate",
     "Retraction"
    ],
    "value_objects": [
     "ReleaseSignature",
     "RetractionReason"
    ],
    "aggregates": [
     "CompletenessPackAggregate",
     "RetractionAggregate"
    ],
    "domain_services": [
     "Release gate signer"
    ],
    "application_services": [
     "ReleasePack",
     "RetractArtifact"
    ],
    "commands": [
     "ReleasePack",
     "RetractArtifact"
    ],
    "domain_events": [
     "pack.released",
     "pack.retracted"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open",
     "Signed artifacts are immutable"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst",
     "Senior Analyst"
    ],
    "data_owned": [
     "ReleaseGate",
     "Retraction"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule"
    ],
    "outputs": [
     "Delivered Completeness Pack"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated"
    ],
    "interfaces": [
     "-> Counsel Escalation (pack.released)",
     "<- Recovery & Delivery (PackReadyForSignoff)"
    ]
   },
   {
    "name": "Counsel Escalation",
    "purpose": "Handle red exceptions requiring a novel legal interpretation, never resolved by AI drafting alone",
    "subdomain": "Counsel Escalation (supporting)",
    "type": "supporting",
    "owned_language": [
     "Completeness Pack"
    ],
    "owns": [
     "Counsel-panel referral"
    ],
    "does_not_own": [
     "Routine releases"
    ],
    "primary_actors": [
     "Property Operator"
    ],
    "entities": [
     "CounselReferral"
    ],
    "value_objects": [
     "ReferralReason"
    ],
    "aggregates": [
     "CounselReferralAggregate"
    ],
    "domain_services": [
     "Referral router"
    ],
    "application_services": [
     "EscalateToCounsel"
    ],
    "commands": [
     "EscalateToCounsel"
    ],
    "domain_events": [
     "exception.resolved"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "CounselReferral"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule"
    ],
    "outputs": [
     "Delivered Completeness Pack"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated"
    ],
    "interfaces": [
     "-> Delivery & Audit Trail (exception.resolved)"
    ]
   },
   {
    "name": "Delivery & Audit Trail",
    "purpose": "Package and deliver the Completeness Pack with a versioned, hashed Audit Trail",
    "subdomain": "Delivery & Audit Trail (supporting)",
    "type": "supporting",
    "owned_language": [
     "Completeness Pack"
    ],
    "owns": [
     "Pack delivery + audit hashing"
    ],
    "does_not_own": [
     "Exception resolution"
    ],
    "primary_actors": [
     "Property Operator"
    ],
    "entities": [
     "AuditTrail"
    ],
    "value_objects": [
     "TrailHash"
    ],
    "aggregates": [
     "CompletenessPackAggregate"
    ],
    "domain_services": [
     "Pack packager"
    ],
    "application_services": [
     "DeliverPack"
    ],
    "commands": [
     "DeliverPack"
    ],
    "domain_events": [
     "pack.released"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "AuditTrail"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule"
    ],
    "outputs": [
     "Delivered Completeness Pack"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated"
    ],
    "interfaces": [
     "-> Cycle Retainer Management (pack.released)"
    ]
   },
   {
    "name": "Cycle Retainer Management",
    "purpose": "Schedule and renew the Monthly Cycle Retainer's recurring billing-cycle QA",
    "subdomain": "Cycle Retainer Management (supporting)",
    "type": "supporting",
    "owned_language": [
     "Completeness Pack"
    ],
    "owns": [
     "Retainer cycle scheduling"
    ],
    "does_not_own": [
     "One-time pack sales"
    ],
    "primary_actors": [
     "Property Operator"
    ],
    "entities": [
     "BillingCycle"
    ],
    "value_objects": [
     "CycleSchedule"
    ],
    "aggregates": [
     "BillingCycleAggregate"
    ],
    "domain_services": [
     "Cycle scheduler"
    ],
    "application_services": [
     "RenewCycle"
    ],
    "commands": [
     "RenewCycle"
    ],
    "domain_events": [
     "cycle.renewed"
    ],
    "policies": [
     "Auto-flag missing intake evidence against the checklist"
    ],
    "specifications": [
     "CompletenessPackReleaseSpec"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Utility-Ops Analyst"
    ],
    "data_owned": [
     "BillingCycle"
    ],
    "inputs": [
     "Uploaded master bills, rent roll, leases, fee schedule"
    ],
    "outputs": [
     "Delivered Completeness Pack"
    ],
    "external_integrations": [
     "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)"
    ],
    "risks": [
     "A malformed master bill silently mis-evaluated"
    ],
    "interfaces": [
     "-> Diagnostic Intake (cycle.renewed)"
    ]
   }
  ],
  "context_map": [
   {
    "upstream": "Normalization & Extraction",
    "downstream": "Compliance Rules Engine",
    "relationship": "Customer-Supplier",
    "integration_pattern": "Domain event (masterbill.normalized) consumed by the rules engine",
    "translation_notes": "Canonical master-bill schema is the shared contract; no direct table access",
    "pattern": "Customer-Supplier",
    "contract_type": "domain event",
    "data_exchanged": [
     "[PLACEHOLDER] owner to complete"
    ],
    "events_exchanged": [
     "masterbill.normalized"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   {
    "upstream": "Reconciliation & Matching",
    "downstream": "Recovery & Delivery",
    "relationship": "Customer-Supplier",
    "integration_pattern": "Domain event (DiscrepancyApproved) triggers inquiry drafting",
    "translation_notes": "Only analyst-approved discrepancies cross the boundary.",
    "pattern": "Customer-Supplier",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "Domain event (DiscrepancyApproved) triggers inquiry drafting"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   },
   {
    "upstream": "Reconciliation & Matching",
    "downstream": "Quality Assurance",
    "relationship": "Conformist",
    "integration_pattern": "SignPack command with synchronous validation",
    "translation_notes": "QA enforces the penny-perfect invariant; Reconciliation & Matching conforms to QA's signature contract.",
    "pattern": "Conformist",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "SignPack command with synchronous validation"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   },
   {
    "upstream": "Recovery & Delivery",
    "downstream": "Quality Assurance",
    "relationship": "Conformist",
    "integration_pattern": "PackReadyForSignoff event",
    "translation_notes": "Pack cannot deliver without QA release-gate signature.",
    "pattern": "Conformist",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "PackReadyForSignoff event"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   }
  ],
  "external_integrations": [
   {
    "system": "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)",
    "direction": "inbound",
    "pattern": "File-based export, no live API at launch",
    "risk": "Schema drift per PMS version",
    "owner_context": "Delivery & Audit Trail",
    "data_in": [
     "[PLACEHOLDER] owner to complete"
    ],
    "data_out": [
     "[PLACEHOLDER] owner to complete"
    ],
    "trigger": "Billing-cycle intake start",
    "internal_model": "Canonical master-bill/pack schema",
    "acl_strategy": "Per-PMS export parser translates to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "Utility Provider statement portals",
    "direction": "inbound",
    "pattern": "Property-authorized credentialed pull or client-forwarded file",
    "risk": "Portal ToS friction; credential expiry",
    "owner_context": "Intake & Normalization",
    "data_in": "Utility Provider statement content",
    "data_out": "N/A",
    "trigger": "Billing cycle start",
    "internal_model": "Canonical statement/pack schema",
    "acl_strategy": "Per-utility provider parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "QuickBooks / PMS posting-file import",
    "direction": "outbound",
    "pattern": "Generated posting file, property-side import",
    "risk": "Format mismatch per bookkeeping software version",
    "owner_context": "Recovery & Delivery",
    "data_in": "N/A",
    "data_out": "Posting file or inquiry email",
    "trigger": "Analyst approval",
    "internal_model": "Canonical statement/pack schema",
    "acl_strategy": "Per-utility provider parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "Utility Provider allocation-department mailbox",
    "direction": "outbound",
    "pattern": "Property-authorized email send",
    "risk": "Inquiry misread as a demand",
    "owner_context": "Recovery & Delivery",
    "data_in": "N/A",
    "data_out": "Posting file or inquiry email",
    "trigger": "Analyst approval",
    "internal_model": "Canonical statement/pack schema",
    "acl_strategy": "Per-utility provider parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   }
  ],
  "event_storm": [
   {
    "seq": 1,
    "command": "ReceiveMasterBill",
    "event": "masterbill.normalized",
    "actor": "Property Operator",
    "context": "Normalization & Extraction",
    "aggregate": "MasterBillAggregate",
    "policy": "None",
    "downstream": "Completeness check against the intake checklist",
    "risk": "Duplicate master-bill ingestion"
   },
   {
    "seq": 2,
    "command": "NormalizeStatement",
    "event": "statement.normalized",
    "actor": "Extraction Agent",
    "context": "Intake & Normalization",
    "aggregate": "MasterBillAggregate",
    "policy": "Auto hard-fail clearance check",
    "downstream": "Matching engine invoked",
    "risk": "Misread field on a scanned/paper statement"
   },
   {
    "seq": 3,
    "command": "RunMatching",
    "event": "reconciliation_cycle.matching_completed",
    "actor": "Matching Agent",
    "context": "Reconciliation & Matching",
    "aggregate": "ReconciliationCycleAggregate",
    "policy": "Auto-route low-confidence matches to analyst",
    "downstream": "Exception queue populated",
    "risk": "Wrong fuzzy match auto-accepted"
   },
   {
    "seq": 4,
    "command": "ApproveDiscrepancy",
    "event": "discrepancy.analyst_approved",
    "actor": "Utility-Ops Analyst",
    "context": "Reconciliation & Matching",
    "aggregate": "DiscrepancyLogAggregate",
    "policy": "None",
    "downstream": "Utility Provider inquiry drafted",
    "risk": "Analyst approves under time pressure without full evidence check"
   },
   {
    "seq": 5,
    "command": "SignPack",
    "event": "allocation_pack.signed",
    "actor": "Utility-Ops Analyst",
    "context": "Quality Assurance",
    "aggregate": "SignoffAggregate",
    "policy": "Penny-perfect hard-fail clearance gate",
    "downstream": "Completeness Pack assembled",
    "risk": "Signed pack with a stale hard-fail clearance"
   },
   {
    "seq": 6,
    "command": "SendUtility ProviderInquiry",
    "event": "utility provider_inquiry.sent",
    "actor": "Utility-Ops Analyst / Property Operator",
    "context": "Recovery & Delivery",
    "aggregate": "Utility ProviderInquiryAggregate",
    "policy": "Property-authorization check",
    "downstream": "Aging clock starts",
    "risk": "Sent without valid authorization on file"
   }
  ],
  "critical_path": [
   "masterbill.normalized -> hardfail.detected -> exception.resolved -> pack.released"
  ],
  "exception_flows": [
   "A hard fail with an unresolved evidence gap -> analyst requests the missing document before release",
   "A discrepancy classification needs-analyst-judgment -> held for analyst, never auto-approved"
  ],
  "escalation_flows": [
   "A red exception involving novel statutory interpretation -> counsel panel before any release",
   "A utility provider disputes an inquiry beyond a routine response -> referred to the property's own counsel"
  ],
  "retry_flows": [
   "Intake evidence incomplete after 5 business days -> automated reminder to the property operator"
  ],
  "manual_override_flows": [
   "Founder/senior analyst can force-hold any Completeness Pack pending further review"
  ],
  "commands": [
   {
    "name": "ReceiveMasterBill",
    "issued_by": "Property Operator / secure upload",
    "preconditions": [
     "Property onboarded with signed engagement letter",
     "Utility Provider on the appointment list"
    ],
    "aggregate": "MasterBillAggregate",
    "success_event": "masterbill.normalized",
    "failure_event": "MasterBillRejected",
    "authorization": "Engaged property",
    "validation": "File type allowed; billing period recognized or flagged new",
    "audit": "Master bill hashed and logged"
   },
   {
    "name": "NormalizeStatement",
    "issued_by": "Extraction Agent",
    "preconditions": [
     "Statement received"
    ],
    "aggregate": "MasterBillAggregate",
    "success_event": "statement.normalized",
    "failure_event": "NormalizationFailed",
    "authorization": "System",
    "validation": "Line-item sum ties to stated total",
    "audit": "Extraction run logged with confidence scores"
   },
   {
    "name": "RunMatching",
    "issued_by": "Matching Agent",
    "preconditions": [
     "Statement normalized",
     "PMS property portfolio on file"
    ],
    "aggregate": "ReconciliationCycleAggregate",
    "success_event": "reconciliation_cycle.matching_completed",
    "failure_event": "MatchingIncomplete",
    "authorization": "System",
    "validation": "Every line matched, exception-coded, or logged as an evidence gap",
    "audit": "Match confidence scores logged per line"
   },
   {
    "name": "ApproveDiscrepancy",
    "issued_by": "Utility-Ops Analyst",
    "preconditions": [
     "Discrepancy flagged with evidence citation"
    ],
    "aggregate": "DiscrepancyLogAggregate",
    "success_event": "discrepancy.analyst_approved",
    "failure_event": "DiscrepancyRejected",
    "authorization": "Named analyst role",
    "validation": "Evidence citation present; materiality threshold check",
    "audit": "Analyst identity + timestamp logged"
   },
   {
    "name": "SignPack",
    "issued_by": "Utility-Ops Analyst",
    "preconditions": [
     "All lines matched/exception-coded",
     "Pack ties to statement totals"
    ],
    "aggregate": "CompletenessPackAggregate",
    "success_event": "allocation_pack.signed",
    "failure_event": "SignoffRejected",
    "authorization": "Named analyst role",
    "validation": "Penny-perfect hard-fail clearance check passes",
    "audit": "Signature bound to authenticated session"
   },
   {
    "name": "SendUtility ProviderInquiry",
    "issued_by": "Utility-Ops Analyst / Property Operator",
    "preconditions": [
     "Discrepancy analyst-approved",
     "Utility Provider-communication authorization on file"
    ],
    "aggregate": "Utility ProviderInquiryAggregate",
    "success_event": "utility provider_inquiry.sent",
    "failure_event": "InquiryRejected",
    "authorization": "Property-authorized administrative agent",
    "validation": "Inquiry language passes demand-language filter",
    "audit": "Send method + timestamp logged"
   }
  ],
  "policies": [
   {
    "name": "Auto-route hard fail to analyst exception queue",
    "trigger": "billing_cycle.rules_pass_completed",
    "condition": "any deterministic rule returns HardFail",
    "action": "Enqueue to Utility-Ops Analyst exception queue; block release",
    "context": "Compliance Rules Engine",
    "ai_involvement": "flags only",
    "human_approval": false
   },
   {
    "name": "Block demand-language patterns",
    "trigger": "DraftUtility ProviderInquiry",
    "condition": "Draft contains demand/collection/legal-threat language pattern",
    "action": "Reject draft before it reaches analyst approval",
    "context": "Recovery & Delivery",
    "ai_involvement": "author (blocked by deterministic filter)",
    "human_approval": false
   },
   {
    "name": "Second-analyst spot check",
    "trigger": "discrepancy.analyst_approved",
    "condition": "Log line over $2,500",
    "action": "Route to a second named analyst before the log is finalized",
    "context": "Quality Assurance",
    "ai_involvement": "none",
    "human_approval": true
   },
   {
    "name": "Auto-escalate aging inquiry",
    "trigger": "utility provider_inquiry.sent",
    "condition": "No utility provider response within 60 days",
    "action": "Flag for analyst escalation judgment",
    "context": "Recovery & Delivery",
    "ai_involvement": "flags only",
    "human_approval": false
   }
  ],
  "aggregates": [
   {
    "name": "CompletenessPackAggregate",
    "root": "CompletenessPack",
    "context": "Compliance Rules Engine",
    "purpose": "Guard hard-fail evaluation + exception resolution + release-gate state",
    "entities": [
     "MasterBill"
    ],
    "value_objects": [
     "Severity",
     "StatementTotal"
    ],
    "invariants": [
     "A CompletenessPack cannot release while any Exception has severity HardFail and status Open"
    ],
    "commands": [
     "ReleasePack",
     "NormalizeStatement"
    ],
    "events": [
     "pack.released",
     "statement.normalized"
    ],
    "repository": "CompletenessPackRepository",
    "transaction_boundary": "One pack per transaction"
   },
   {
    "name": "ReconciliationCycleAggregate",
    "root": "ReconciliationCycle",
    "context": "Reconciliation & Matching",
    "purpose": "Own the monthly cycle's matching lifecycle for one client.",
    "entities": [
     "ReconciliationCycle"
    ],
    "value_objects": [
     "MatchConfidence"
    ],
    "invariants": [
     "A cycle cannot close until every line is matched, exception-coded, or logged as a gap"
    ],
    "commands": [
     "RunMatching"
    ],
    "events": [
     "reconciliation_cycle.matching_completed"
    ],
    "repository": "ReconciliationCycleRepository",
    "transaction_boundary": "One cycle per transaction"
   },
   {
    "name": "DiscrepancyLogAggregate",
    "root": "DiscrepancyLog",
    "context": "Reconciliation & Matching",
    "purpose": "Own discrepancy classification and analyst approval.",
    "entities": [
     "DiscrepancyLog"
    ],
    "value_objects": [
     "DiscrepancyClassification"
    ],
    "invariants": [
     "No line enters the log without a source-statement citation and an PMS-policy reference"
    ],
    "commands": [
     "ApproveDiscrepancy"
    ],
    "events": [
     "discrepancy.flagged",
     "discrepancy.analyst_approved"
    ],
    "repository": "DiscrepancyLogRepository",
    "transaction_boundary": "One log per transaction"
   },
   {
    "name": "CompletenessPackAggregate",
    "root": "CompletenessPack",
    "context": "Reconciliation & Matching",
    "purpose": "Own the pack's hard-fail clearance and signature lifecycle.",
    "entities": [
     "CompletenessPack"
    ],
    "value_objects": [
     "TieOutResult"
    ],
    "invariants": [
     "Totals must tie to statement totals to the penny before the analyst's signature is valid"
    ],
    "commands": [
     "SignPack"
    ],
    "events": [
     "allocation_pack.signed"
    ],
    "repository": "CompletenessPackRepository",
    "transaction_boundary": "One pack per transaction"
   },
   {
    "name": "Utility ProviderInquiryAggregate",
    "root": "Utility ProviderInquiry",
    "context": "Recovery & Delivery",
    "purpose": "Own inquiry drafting, sending, and aging.",
    "entities": [
     "Utility ProviderInquiry"
    ],
    "value_objects": [
     "AgingWindow"
    ],
    "invariants": [
     "Cannot be sent without analyst approval and property authorization on file"
    ],
    "commands": [
     "SendUtility ProviderInquiry"
    ],
    "events": [
     "utility provider_inquiry.sent",
     "utility provider_inquiry.resolved"
    ],
    "repository": "Utility ProviderInquiryRepository",
    "transaction_boundary": "One inquiry per transaction"
   },
   {
    "name": "SignoffAggregate",
    "root": "Signoff",
    "context": "Quality Assurance",
    "purpose": "Bind analyst identity + timestamp + artifact hash immutably.",
    "entities": [
     "Signoff"
    ],
    "value_objects": [
     "SignatureManifest"
    ],
    "invariants": [
     "Signature bound to a live authenticated session, not a form field",
     "Signed artifacts are immutable"
    ],
    "commands": [
     "ApproveArtifact"
    ],
    "events": [
     "ArtifactSigned"
    ],
    "repository": "SignoffRepository",
    "transaction_boundary": "One release-gate signature per transaction"
   },
   {
    "name": "RetractionAggregate",
    "root": "Retraction",
    "context": "Quality Assurance",
    "purpose": "Handle formal correction/withdrawal of a delivered pack.",
    "entities": [
     "Retraction"
    ],
    "value_objects": [
     "RetractionReason"
    ],
    "invariants": [
     "A retraction requires senior-analyst co-signature"
    ],
    "commands": [
     "RetractArtifact"
    ],
    "events": [
     "ArtifactRetracted"
    ],
    "repository": "RetractionRepository",
    "transaction_boundary": "One retraction per transaction"
   }
  ],
  "invariants": [
   {
    "invariant": "A Completeness Pack cannot be released without every hard fail cleared or escalated",
    "context": "Analyst Review & Release",
    "aggregate": "CompletenessPackAggregate",
    "why": "No pack is ever released on an unresolved hard fail",
    "enforcement": "Deterministic code gate on the ReleasePack command"
   },
   {
    "invariant": "A Utility ProviderInquiry cannot be sent without analyst approval and property authorization on file",
    "context": "Recovery & Delivery",
    "aggregate": "Utility ProviderInquiryAggregate",
    "why": "Sending without authorization is both a trust breach and outside the licensing boundary",
    "enforcement": "Deterministic code gate on the SendUtility ProviderInquiry command"
   },
   {
    "invariant": "No discrepancy is published without a cited source-statement and PMS-policy reference",
    "context": "Reconciliation & Matching",
    "aggregate": "DiscrepancyLogAggregate",
    "why": "Prevents an unevidenced claim from reaching a client or a utility provider",
    "enforcement": "Output validator rejects any log line missing an evidence citation"
   },
   {
    "invariant": "RUBSClear never issues a coverage or findings-adjustment determination",
    "context": "Recovery & Delivery",
    "aggregate": "Utility ProviderInquiryAggregate",
    "why": "Hard licensing boundary — only the property's own licensed counsel makes legal-compliance determinations",
    "enforcement": "Deterministic output filter blocks coverage-determination language patterns"
   }
  ],
  "ai_agents": [
   {
    "name": "Extraction Agent",
    "context": "Normalization & Extraction",
    "responsibility": "Extract and normalize structured fields from master bills, rent rolls, and lease clauses",
    "inputs": [
     "Uploaded master bills, rent roll, sample leases"
    ],
    "outputs": [
     "Structured BillLine/Unit/LeaseClause records with per-field confidence score"
    ],
    "tools": [
     "OCR",
     "per-utility provider parser library"
    ],
    "forbidden_actions": [
     "Inferring a disclosure clause not present in the source lease text"
    ],
    "memory_scope": "Single master-bill extraction run",
    "retrieval_sources": [
     "MN/CO statutory rule-card library"
    ],
    "validations": [
     "Confidence score attached to every field"
    ],
    "confidence_scoring": "0-100 per field, threshold 85",
    "escalation_triggers": [
     "Any required field below 85% confidence"
    ],
    "human_approval": "Analyst confirms during exception review",
    "failure_modes": [
     "Misread scanned/paper master bill",
     "Wrong utility provider-format classification"
    ],
    "audit_logs": [
     "Every extraction run logged with document hash and confidence scores"
    ],
    "metrics": [
     "Extraction accuracy vs. analyst-corrected value"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Rules Agent",
    "context": "Compliance Rules Engine",
    "responsibility": "Match normalized master-bill lines to units (exact -> fuzzy -> analyst-adjudicated) and evaluate the six deterministic hard-fail rules",
    "inputs": [
     "Normalized master-bill lines",
     "Rent roll and fee schedule",
     "Fee schedules"
    ],
    "outputs": [
     "Match candidates with confidence score",
     "Hard-fail/soft-fail classification"
    ],
    "tools": [
     "Fuzzy entity matcher",
     "allocation-schedule lookup"
    ],
    "forbidden_actions": [
     "Auto-accepting a match below the confidence threshold"
    ],
    "memory_scope": "Single billing cycle",
    "retrieval_sources": [
     "Property's rent roll (property-scoped)"
    ],
    "validations": [
     "Every match below threshold routed to analyst with reasoning"
    ],
    "confidence_scoring": "0-100 per match, auto-accept ≥95, analyst queue below",
    "escalation_triggers": [
     "No candidate match found",
     "Ambiguous multi-candidate match"
    ],
    "human_approval": "Analyst adjudicates all sub-threshold matches",
    "failure_modes": [
     "Wrong fuzzy match on a common unit/tenant name",
     "Stale fee schedule applied"
    ],
    "audit_logs": [
     "Every match decision logged with confidence and reasoning"
    ],
    "metrics": [
     "Auto-match rate",
     "Match-reversal rate on analyst audit"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Discrepancy Drafter Agent",
    "context": "Reconciliation & Matching",
    "responsibility": "Classify each line's discrepancy type and draft a plain-language explanation citing the source statement and policy.",
    "inputs": [
     "Matched/unmatched master-bill lines",
     "Fee schedule",
     "Utility Provider-quirk notes",
     "Prior payment history"
    ],
    "outputs": [
     "Discrepancy classification",
     "Draft explanation with citations"
    ],
    "tools": [
     "Utility Provider-quirk knowledge base lookup"
    ],
    "forbidden_actions": [
     "Stating a discrepancy is confirmed before analyst approval",
     "Estimating a dollar gap the schedule doesn't cover"
    ],
    "memory_scope": "Single billing cycle",
    "retrieval_sources": [
     "Utility Provider-quirk knowledge base"
    ],
    "validations": [
     "Output must cite a source master-bill line and PMS policy reference"
    ],
    "confidence_scoring": "Qualitative (missing / short-paid / late / billing correction / rate-mismatch / unearned / needs-analyst-judgment)",
    "escalation_triggers": [
     "Schedule doesn't cover the case"
    ],
    "human_approval": "Analyst approves every classification before it appears in the log",
    "failure_modes": [
     "Misclassifying a legitimate billing correction as a short-pay"
    ],
    "audit_logs": [
     "Every classification logged with citation and confidence"
    ],
    "metrics": [
     "Discrepancy-classification accuracy vs. analyst-corrected value"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Inquiry Drafter Agent",
    "context": "Recovery & Delivery",
    "responsibility": "Draft a professional, inquiry-toned (never demand-toned) email to a utility provider's allocation department for an approved discrepancy.",
    "inputs": [
     "Approved discrepancy",
     "Property identity",
     "Fee schedule reference"
    ],
    "outputs": [
     "Drafted utility provider inquiry email"
    ],
    "tools": [
     "Demand-language deterministic filter"
    ],
    "forbidden_actions": [
     "Using demand, collection, or legal-threat language",
     "Sending without analyst approval"
    ],
    "memory_scope": "Single discrepancy inquiry",
    "retrieval_sources": [
     "Utility Provider-quirk knowledge base",
     "Utility Provider contact map"
    ],
    "validations": [
     "Draft passes the demand-language filter before reaching the analyst"
    ],
    "confidence_scoring": "N/A (deterministic filter gate, not a confidence score)",
    "escalation_triggers": [
     "Filter rejects a draft twice in a row for the same discrepancy"
    ],
    "human_approval": "Analyst approves every draft before send",
    "failure_modes": [
     "Draft reads as aggressive despite passing the filter"
    ],
    "audit_logs": [
     "Every draft + approval + send logged"
    ],
    "metrics": [
     "Utility Provider response rate",
     "Analyst edit rate on drafts"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   }
  ],
  "prompt_chain_map": [
   "Intake -> Extraction Agent (extract + score) -> Matching Agent (match + compute expected) -> Discrepancy Drafter Agent (classify + cite) -> OutputValidator -> Analyst (approve or escalate)",
   "Approved discrepancy -> Inquiry Drafter Agent (draft) -> demand-language filter -> Analyst (approve or edit) -> send"
  ],
  "rag_map": [
   "Per-property PMS property portfolio (tenant-scoped) -> retrieval router -> property-scoped hits -> Matching Agent",
   "Versioned per-utility provider parser fixture + quirk knowledge base -> shared retrieval -> Extraction Agent and Discrepancy Drafter Agent (cited)"
  ],
  "ai_evaluation": [
   "Golden dataset of past analyst-accepted matches and discrepancy classifications, per utility provider",
   "Regression requirements on auto-match rate + discrepancy-citation coverage",
   "Every prompt release requires a passing evaluator run against the fixture library"
  ],
  "hallucination_controls": [
   "Retrieval-first (no free-form discrepancy generation without a cited master-bill line and policy reference)",
   "Structured-output validator enforces citation-per-claim",
   "Confidence-scored escalation on extraction and matching",
   "Analyst gate on every discrepancy and every outbound utility provider inquiry",
   "Deterministic filter blocks any demand/collection-style or coverage-determination language before it reaches the analyst"
  ],
  "human_in_the_loop_plan": [
   "Analyst release-gate signature on every Compliance Scorecard before delivery",
   "Analyst approval on every discrepancy before it appears in a log or goes to a utility provider",
   "Senior-analyst co-sign on retractions",
   "Owner approval on public-release readiness"
  ],
  "ai_audit_plan": [
   "Every AgentRun logged with prompt version, retrieval hit ids, cost, latency, validator verdict",
   "13-month rolling retention on run logs",
   "Financial/PII data scrubbed from log payloads"
  ],
  "prompt_versioning": "Prompt versions immutable once published; rolled out via feature flag; every rollout paired with an evaluator run against the fixture library.",
  "human_roles": [
   {
    "role": "Property Operator",
    "responsibilities": [
     "Supply master bills, rent roll, leases, and fee schedule",
     "Sign utility provider-communication authorization",
     "Approve resident split sheet"
    ],
    "contexts": [
     "Normalization & Extraction"
    ],
    "decisions_owned": [
     "Whether to engage RUBSClear",
     "Which records to supply",
     "Whether to authorize the recovery-share rider"
    ],
    "ai_support": [
     "[PLACEHOLDER] owner to complete"
    ],
    "approval_authority": "Authorizes the engagement letter and intake evidence release",
    "escalation_authority": "None (escalates to RUBSClear, not from it)",
    "quality_metrics": [
     "Intake completeness"
    ],
    "workload_risks": [
     "Renewal-season time scarcity"
    ]
   },
   {
    "role": "Utility-Ops Analyst",
    "responsibilities": [
     "Review AI-drafted matches and discrepancies",
     "Verify evidence sufficiency",
     "Sign off before delivery or utility provider send"
    ],
    "contexts": [
     "Reconciliation & Matching",
     "Quality Assurance"
    ],
    "decisions_owned": [
     "Approve, escalate, or reject a discrepancy or match"
    ],
    "ai_support": "Extraction, matching, discrepancy-classification, and inquiry-drafting agents",
    "approval_authority": "Sole authority to sign a Compliance Scorecard or approve a utility provider inquiry",
    "escalation_authority": "Escalates coverage/findings questions to the property's own licensed counsel; disputes beyond routine inquiry to the property's counsel",
    "quality_metrics": [
     "Client-caught material error rate",
     "Review cycle time"
    ],
    "workload_risks": [
     "Volume spike during month-end delivery window"
    ]
   },
   {
    "role": "Senior Analyst",
    "responsibilities": [
     "Second-pass sampling on auto-matched lines",
     "Co-sign retractions",
     "Second review on high-value logs"
    ],
    "contexts": [
     "Quality Assurance"
    ],
    "decisions_owned": [
     "Retraction approval"
    ],
    "ai_support": "None (human-only by design)",
    "approval_authority": "Retraction co-signature authority",
    "escalation_authority": "Escalates to founder/owner",
    "quality_metrics": [
     "Retraction rate"
    ],
    "workload_risks": [
     "Contractor-bench availability at scale"
    ]
   }
  ],
  "human_review_checkpoints": [
   "AI draft -> Utility-Ops Analyst approval",
   "Public release -> owner acceptance",
   "Retraction -> senior-analyst co-sign",
   "Prompt rollout -> ops + evaluator"
  ],
  "escalation_matrix": [
   "AI -> Utility-Ops Analyst -> Senior Analyst -> Counsel Panel -> Property's own counsel",
   "Novel legal interpretation -> Analyst -> Counsel panel"
  ],
  "manual_override_rules": [
   "Any manual override captured as an explicit override event with reason",
   "No override may bypass the analyst-release-gate signature or utility provider-authorization invariant"
  ],
  "separation_of_duties": [
   "Extraction/Drafting agents cannot release; only the Utility-Ops Analyst signs the release gate"
  ],
  "quality_control_workflow": [
   "Weekly analyst calibration meeting on exception patterns",
   "Monthly evaluator regression report",
   "Quarterly utility provider-quirk library re-verification review with owner + compliance"
  ],
  "data_objects": [
   {
    "name": "MasterBill",
    "meaning": "One utility provider's master bill for one property for one billing period",
    "owner_context": "Normalization & Extraction",
    "writers": [
     "Extraction Agent",
     "Property Operator"
    ],
    "readers": [
     "Utility-Ops Analyst",
     "Reconciliation & Matching"
    ],
    "source_of_truth": "Normalization & Extraction context",
    "retention": "7 years (mirrors standard financial/compliance-record retention practice; confirm with counsel per state)",
    "privacy": "Sensitive business/financial data, property-isolated",
    "audit": "Every field change logged"
   },
   {
    "name": "CompletenessPack",
    "meaning": "One billing cycle's signed hard-fail clearance record",
    "owner_context": "Reconciliation & Matching",
    "writers": [
     "Matching Agent",
     "Utility-Ops Analyst"
    ],
    "readers": [
     "Property Operator",
     "Quality Assurance"
    ],
    "source_of_truth": "Reconciliation & Matching context",
    "retention": "7 years",
    "privacy": "Sensitive",
    "audit": "Full version history retained"
   },
   {
    "name": "DiscrepancyLog",
    "meaning": "One cycle's list of classified, evidenced discrepancies",
    "owner_context": "Reconciliation & Matching",
    "writers": [
     "Discrepancy Drafter Agent",
     "Utility-Ops Analyst"
    ],
    "readers": [
     "Property Operator",
     "Recovery & Delivery"
    ],
    "source_of_truth": "Reconciliation & Matching context",
    "retention": "7 years",
    "privacy": "Sensitive",
    "audit": "Analyst approval logged per line"
   }
  ],
  "read_models": [
   "AnalystQueue read model (per property): open cycles, exception counts, cycle-time status",
   "AnalystQueue read model: statements/discrepancies awaiting review with confidence + escalation reason",
   "CompliancePack read model: open owner actions + release-decision",
   "AnalyticsRollup read model: metric definitions rolled up daily"
  ],
  "reporting_models": [
   "Outcome report per property: packs delivered, cycle time, hard-fail rate",
   "Ops report: AI cost per cycle, escalation rate, analyst load"
  ],
  "data_duplication_notes": [
   "Analyst identity is stored once in onboarding, referenced by every release-gate signature",
   "OwnerActionPack duplicates minimal facts into read models for Reconciliation & Matching consumption"
  ],
  "data_retention": [
   "Completeness Packs + Exception Logs + Audit Trails: 7 years",
   "AgentRun logs: 13 months rolling",
   "Users + sessions: life of account + 2 years"
  ],
  "data_quality_risks": [
   "Silent schema drift from a PMS changing its export layout",
   "Stale allocation-schedule version applied after a rate change (mitigated by quarterly re-verification)",
   "Missing retraction cross-links after a legacy client-history import"
  ],
  "use_cases": [
   {
    "name": "Run a RUBS Exposure Diagnostic",
    "actor": "Property Operator",
    "context": "Diagnostic Intake",
    "goal": "Get a traffic-light Compliance Scorecard finding within 2 business days",
    "preconditions": [
     "1 month master bill + 3 leases + fee schedule supplied"
    ],
    "main_flow": [
     "Intake checklist completed",
     "Statements normalized and reconciled to the penny",
     "Matching engine runs",
     "Analyst approves discrepancies",
     "Scan report delivered"
    ],
    "alternative_flows": [
     "No material finding -> diagnostic says so explicitly, no fee involved"
    ],
    "business_rules": [
     "No hard fail ships without analyst approval"
    ],
    "ai_role": "Extraction, rules evaluation, drafting",
    "human_role": "Analyst reviews and signs",
    "commands": [
     "ReceiveMasterBill",
     "NormalizeStatement",
     "RunMatching",
     "ApproveDiscrepancy"
    ],
    "events": [
     "masterbill.normalized",
     "reconciliation_cycle.matching_completed",
     "discrepancy.analyst_approved"
    ],
    "aggregates": [
     "MasterBillAggregate",
     "ReconciliationCycleAggregate",
     "DiscrepancyLogAggregate"
    ],
    "success": "Diagnostic delivered within 2 business days with analyst review",
    "failure_handling": "Missing inputs trigger an automated nag; diagnostic does not start",
    "audit": "Full audit trail from master-bill receipt to diagnostic delivery"
   },
   {
    "name": "Deliver a monthly Reconciliation Desk pack",
    "actor": "Utility-Ops Analyst",
    "context": "Recovery & Delivery",
    "goal": "Ship a signed Completeness Pack by the 5th business day",
    "preconditions": [
     "Client on an active Reconciliation Desk tier",
     "Prior cycle's utility provider inquiries tracked"
    ],
    "main_flow": [
     "Statements collected and normalized",
     "Matching completed",
     "Discrepancies approved",
     "Utility Provider inquiries drafted and sent",
     "Pack signed",
     "Pack delivered"
    ],
    "alternative_flows": [
     "High-value log (>$2,500) routed to second analyst before finalization"
    ],
    "business_rules": [
     "Penny-perfect hard-fail clearance required before signature"
    ],
    "ai_role": "Extraction, matching, classification, inquiry drafting",
    "human_role": "Analyst signs; second analyst on high-value logs",
    "commands": [
     "RunMatching",
     "ApproveDiscrepancy",
     "SendUtility ProviderInquiry",
     "SignPack"
    ],
    "events": [
     "allocation_pack.signed",
     "utility provider_inquiry.sent",
     "pack.delivered"
    ],
    "aggregates": [
     "CompletenessPackAggregate",
     "Utility ProviderInquiryAggregate"
    ],
    "success": "Pack delivered on time with a signed pack",
    "failure_handling": "Missed SLA triggers the error-SLA acknowledgment process",
    "audit": "Full cycle audit trail retained"
   }
  ],
  "architecture": {
   "style": "Modular monolith with edge functions for bursty statement-extraction workloads",
   "why": "One audit boundary, low ops burden for a founder-operated business, easy per-context ownership as the team grows past founder-only.",
   "rejected_alternatives": [
    "Microservices per bounded context (premature at this scale)",
    "No-code workflow tool (can't enforce the penny-perfect deterministic gate reliably)"
   ],
   "backend_modules": [
    "intake-normalization",
    "reconciliation-matching",
    "recovery-delivery",
    "quality-assurance"
   ],
   "frontend_modules": [
    "analyst-console (internal only at launch)",
    "marketing microsite (public)"
   ],
   "api_boundaries": [
    "Internal analyst console API (authenticated)",
    "No public API at launch — intake is upload-link/email only"
   ],
   "database_strategy": "Single Postgres instance, tenant_id row-level security on every table",
   "event_bus": "In-process event dispatch at launch; durable queue (e.g. a managed message queue) once cycle volume requires async fan-out",
   "queue": "Background job queue for statement extraction and matching (bursty, month-end-weighted load)",
   "workflow_engine": "None at launch — explicit state machine per aggregate in code",
   "ai_orchestration": "Scripted pipeline calling a single frontier-model provider, prompts + fixtures versioned in the repo",
   "rag_layer": "Per-property book-of-business retrieval + shared per-utility provider parser/quirk knowledge base",
   "file_storage": "Encrypted object storage, per-property prefix isolation",
   "authn_authz": "SSO with MFA for analysts; row-level tenant auth for property-facing surfaces (year-1 client portal)",
   "admin_dashboard": "Internal only at launch (founder + analyst)",
   "client_portal": "None at launch (email/upload-link delivery); read-only pack-status portal planned year 1",
   "operator_dashboard": "AnalystQueue read model surfaced in the internal console",
   "observability": "Structured logs + RED metrics + model-call cost/latency spans",
   "audit_logging": "Append-only, hash-chained per billing cycle",
   "deployment": "Single production region, multi-AZ; preview environment per PR"
  },
  "module_structure": {
   "tree": "src/{intake-normalization,reconciliation-matching,recovery-delivery,quality-assurance}/{domain,application,infra}",
   "modules": [
    {
     "name": "intake-normalization",
     "purpose": "Statement receipt, extraction, and hard-fail clearance.",
     "owned_domain": [
      "MasterBill"
     ],
     "application_services": [
      "ReceiveStatement",
      "NormalizeStatement"
     ],
     "infra_adapters": [
      "Mailbox listener",
      "Object storage adapter",
      "Extraction-model client"
     ],
     "public_interfaces": [
      "statement.normalized event"
     ],
     "forbidden_deps": [
      "Cannot call reconciliation-matching internals directly — event only"
     ]
    },
    {
     "name": "reconciliation-matching",
     "purpose": "Matching, discrepancy classification, pack hard-fail clearance.",
     "owned_domain": [
      "ReconciliationCycle",
      "DiscrepancyLog",
      "CompletenessPack"
     ],
     "application_services": [
      "RunMatching",
      "ApproveDiscrepancy",
      "SignPack"
     ],
     "infra_adapters": [
      "PMS-export parser",
      "Fee-schedule store"
     ],
     "public_interfaces": [
      "discrepancy.analyst_approved event",
      "allocation_pack.signed event"
     ],
     "forbidden_deps": [
      "Cannot call recovery-delivery internals directly — event only"
     ]
    },
    {
     "name": "recovery-delivery",
     "purpose": "Utility Provider-inquiry drafting/sending, aging, pack assembly.",
     "owned_domain": [
      "Utility ProviderInquiry",
      "ResidentPayoutStatement",
      "MonthlyReconciliationPack"
     ],
     "application_services": [
      "SendUtility ProviderInquiry",
      "AssemblePack",
      "DeliverPack"
     ],
     "infra_adapters": [
      "Email-send adapter",
      "Posting-file generator"
     ],
     "public_interfaces": [
      "pack.delivered event"
     ],
     "forbidden_deps": [
      "Cannot bypass quality-assurance release-gate signature gate"
     ]
    },
    {
     "name": "quality-assurance",
     "purpose": "Signoff and retraction lifecycle.",
     "owned_domain": [
      "Signoff",
      "Retraction"
     ],
     "application_services": [
      "ApproveArtifact",
      "RetractArtifact"
     ],
     "infra_adapters": [
      "Signature-binding session store"
     ],
     "public_interfaces": [
      "ArtifactSigned event"
     ],
     "forbidden_deps": [
      "Cannot draft on behalf of any other module"
     ]
    }
   ],
   "dependency_rules": [
    "Modules communicate only via domain events or explicit application-service calls, never shared database tables",
    "quality-assurance has no outbound dependency on any other module"
   ]
  },
  "security_governance": {
   "controls": [
    {
     "risk": "Cross-tenant data leak",
     "context": "Reconciliation & Matching",
     "impact": "severe",
     "control": "Row-level security on every tenant-scoped table; retrieval indices partitioned per property",
     "audit": "Access logged with tenant_id + session_id"
    },
    {
     "risk": "Analyst identity spoofing",
     "context": "Quality Assurance",
     "impact": "severe",
     "control": "SSO + MFA; signature bound to authenticated session, not a form field",
     "audit": "Signature manifest logged per artifact"
    },
    {
     "risk": "Demand-language utility provider inquiry sent",
     "context": "Recovery & Delivery",
     "impact": "high",
     "control": "Deterministic filter blocks demand/collection/legal-threat patterns before analyst sees the draft",
     "audit": "Every blocked draft logged with the trigger phrase"
    }
   ],
   "ai_governance": [
    "Every prompt version checked into the repo",
    "Every AgentRun logged with prompt version + validator verdict",
    "No fine-tuning on client data"
   ],
   "prompt_injection_defense": [
    "Uploaded statement content treated as untrusted input, never as instructions",
    "Extraction output schema-validated before use downstream"
   ],
   "sensitive_data_handling": [
    "Financial/PII scrubbed from logs",
    "Per-property object-storage prefix isolation",
    "Encryption at rest and in transit"
   ],
   "access_control_matrix": [
    {
     "role": "Property Operator",
     "context": "Intake & Normalization",
     "capabilities": [
      "Upload statements",
      "View own property's cycle status"
     ]
    },
    {
     "role": "Utility-Ops Analyst",
     "context": "Reconciliation & Matching, Quality Assurance",
     "capabilities": [
      "Approve discrepancies",
      "Sign packs",
      "Approve utility provider inquiries"
     ]
    },
    {
     "role": "Senior Analyst",
     "context": "Quality Assurance",
     "capabilities": [
      "Co-sign retractions",
      "Second-review high-value logs"
     ]
    }
   ],
   "audit_log_requirements": [
    "Every command + payload hash logged with actor identity",
    "13-month rolling retention on AgentRun logs; 7-year retention on signed packs"
   ]
  },
  "observability": {
   "metrics": [
    {
     "metric": "Auto-match rate",
     "type": "leading",
     "context": "Reconciliation & Matching",
     "why": "Directly drives analyst minutes per cycle",
     "target": "≥90%",
     "alert_threshold": "<80%"
    },
    {
     "metric": "Analyst minutes per client per cycle",
     "type": "leading",
     "context": "Reconciliation & Matching",
     "why": "Core unit-economics driver",
     "target": "≤115 min by day 90",
     "alert_threshold": ">180 min"
    },
    {
     "metric": "Client-caught material error rate",
     "type": "lagging",
     "context": "Quality Assurance",
     "why": "Trust and retention driver",
     "target": "<0.5%",
     "alert_threshold": ">1%"
    }
   ],
   "dashboards": [
    "Ops dashboard: cycles in flight, analyst queue depth",
    "Economics dashboard: COGS/client, gross margin trend"
   ],
   "audit_reports": [
    "Monthly signed-pack audit export per client"
   ],
   "quality_review_reports": [
    "Weekly red-team seeded-error catch rate"
   ],
   "ai_evaluation_reports": [
    "Monthly evaluator regression report per utility provider parser"
   ],
   "client_outcome_reports": [
    "Recovered-dollars report per client per quarter"
   ]
  },
  "testing_strategy": {
   "tests": [
    {
     "type": "unit",
     "validates": "Tie-out math and materiality thresholds",
     "context": "Reconciliation & Matching",
     "example": "Pack total must equal sum of matched + exception-coded lines"
    },
    {
     "type": "contract",
     "validates": "Per-utility provider parser output schema",
     "context": "Intake & Normalization",
     "example": "Gold-standard fixture statement per utility provider re-run on every prompt change"
    },
    {
     "type": "e2e",
     "validates": "Full intake -> match -> analyst release-gate signature -> delivery path",
     "context": "cross-context",
     "example": "Smoke test against 5 sample master bill formats"
    }
   ],
   "critical_domain_rules": [
    "Penny-perfect hard-fail clearance before signature",
    "No discrepancy without a cited source and policy reference",
    "No utility provider inquiry without authorization on file"
   ],
   "ai_eval_dataset": [
    "Gold-standard fixture statements per utility provider",
    "Analyst-corrected historical matches and classifications"
   ],
   "regression_plan": "Every parser/prompt/model change re-runs the full fixture suite before touching a live client statement.",
   "contract_testing_plan": "Per-master bill schema contract tests run in CI on every parser change.",
   "manual_qa_checklist": [
    "10% second-pass sample of auto-matched lines",
    "Monthly red-team seeded-error check",
    "Every log over $2,500 second-reviewed"
   ]
  },
  "mvp_roadmap": [
   {
    "phase": "Thin slice",
    "goal": "One end-to-end RUBS Exposure Diagnostic delivered and analyst-signed",
    "features": [
     "Statement intake",
     "Single-utility provider-format extraction",
     "Manual-assisted matching"
    ],
    "contexts": [
     "Intake & Normalization",
     "Reconciliation & Matching"
    ],
    "ai_needs": [
     "Extraction Agent v1"
    ],
    "human_workflows": [
     "Founder-run analyst role"
    ],
    "data_needs": [
     "Fixture statements for 5 formats"
    ],
    "integrations": [
     "None — manual intake evidence set upload"
    ],
    "risks": [
     "Analyst cycle time far above target at pilot 1"
    ],
    "exit_criteria": [
     "1 scan delivered within 10 business days, analyst-signed"
    ]
   }
  ],
  "scaling_roadmap": [
   {
    "stage": "Pilot (1-10 clients)",
    "trigger": "First 10 pilot agencies onboarded",
    "architecture_change": "None — single monolith suffices",
    "operational_change": "Founder is the sole analyst",
    "risk": "Analyst bottleneck at any volume spike"
   },
   {
    "stage": "Early scale (10-50 clients)",
    "trigger": "Day-90 checkpoint targets met",
    "architecture_change": "Background job queue for statement extraction",
    "operational_change": "Contract a second utility-ops analyst",
    "risk": "Parser library coverage gaps on new utility providers slow onboarding"
   }
  ],
  "risk_register": [
   {
    "risk": "A city-level RUBS ban applies to a property RUBSClear didn't flag as out-of-scope",
    "likelihood": "medium",
    "impact": "high",
    "signal": "A property's city adds or tightens a local RUBS ordinance",
    "mitigation": "Maintained, versioned city-level RUBS-ban list checked at intake",
    "owner": "owner",
    "context": "Compliance Rules Engine"
   },
   {
    "risk": "Scan-to-desk conversion underperforms",
    "likelihood": "medium",
    "impact": "severe",
    "signal": "Pilot cohort conversion below 25%",
    "mitigation": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "owner": "owner",
    "context": "product"
   },
   {
    "risk": "False-positive discrepancy sent to a utility provider",
    "likelihood": "medium",
    "impact": "high",
    "signal": "Utility Provider disputes an inquiry as unfounded",
    "mitigation": "100% analyst approval; evidence-link requirement; inquiry-not-demand language",
    "owner": "legal",
    "context": "Recovery & Delivery"
   }
  ],
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Adopt a modular monolith, not microservices, at launch",
    "status": "accepted",
    "context": "Founder-operated team; low ops burden required",
    "options": [
     "Modular monolith",
     "Microservices per bounded context",
     "No-code workflow tool"
    ],
    "chosen": "Modular monolith",
    "business_reason": "Fastest path to the first paid pilot pack without a platform team",
    "technical_reason": "One deploy, one audit boundary, easy to reason about at this scale",
    "tradeoffs": [
     "[PLACEHOLDER] owner to complete"
    ],
    "risks": [
     "[PLACEHOLDER] owner to complete"
    ],
    "revisit_trigger": "Sustained CPU/latency pressure isolated to one module",
    "why": "One deploy, one audit boundary, easy to reason about at this scale",
    "consequences": "Will need extraction into services if analyst-console load grows sharply",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "Sustained CPU/latency pressure isolated to one module"
   },
   {
    "id": "ADR-002",
    "decision": "Deterministic code owns all money math; the model never computes a final dollar figure",
    "status": "accepted",
    "context": "Penny-perfect hard-fail clearance is a hard trust requirement",
    "options": [
     "Model computes totals",
     "Deterministic code computes totals, model only extracts/classifies"
    ],
    "chosen": "Deterministic code computes totals",
    "business_reason": "A wrong dollar figure from a model is the single fastest way to lose a client's trust",
    "technical_reason": "Removes an entire class of hallucination risk from the highest-stakes output",
    "tradeoffs": "Slightly more engineering work per new transaction-type edge case",
    "risks": "Edge cases not yet coded fall through to analyst manual calculation",
    "revisit_trigger": "None — this is a standing invariant, not revisited",
    "why": "Removes an entire class of hallucination risk from the highest-stakes output",
    "consequences": "Slightly more engineering work per new transaction-type edge case",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "None — this is a standing invariant, not revisited"
   }
  ],
  "self_audit": {
   "scores": [
    {
     "category": "domain_modeling",
     "score": 4,
     "weakness": "City-level RUBS-ban list is described but not yet instantiated with real data",
     "improvement": "Populate the ban list from the first pilot cohort's actual property cities"
    },
    {
     "category": "ai_governance",
     "score": 4,
     "weakness": "Evaluator regression suite depends on fixture statements not yet collected at volume",
     "improvement": "Build the fixture library incrementally from each pilot's real (anonymized) statements"
    },
    {
     "category": "compliance_boundary",
     "score": 3,
     "weakness": "State-by-state UPL-adjacent-statute review for the recovery-share rider is not yet complete",
     "improvement": "Complete counsel review in the first 5 operating states before offering the rider broadly"
    }
   ],
   "weakest_parts": [
    "Colorado rule card not yet live — targeted by day 90",
    "Utility Provider-quirk knowledge base population"
   ],
   "biggest_assumptions": [
    "Diagnostic-to-pack conversion reaches a workable rate in the 8-property pilot",
    "Analyst minutes per client fall as projected by day 90"
   ],
   "highest_risk_decisions": [
    "Offering the counsel-panel escalation pass-through before a full state-by-state UPL review",
    "Relying on a single named analyst at pilot scale"
   ],
   "needs_domain_expert": [
    "[PLACEHOLDER] owner to complete"
   ],
   "needs_legal": [
    "[PLACEHOLDER] owner to complete"
   ],
   "needs_prototype": [
    "[PLACEHOLDER] owner to complete"
   ],
   "validate_before_prod": [
    "[PLACEHOLDER] owner to complete"
   ]
  },
  "final_recommendations": [
   "Ship a modular-monolith, evidence-linked, analyst-gated Minnesota pilot before expanding to Colorado",
   "Do NOT default to microservices. Extract a module only when a specific pressure demands it.",
   "Do NOT allow AI outputs to leave the Reconciliation & Matching or Recovery & Delivery contexts without OutputValidator pass and citation coverage.",
   "Do NOT ship any public claim on the RUBSClear microsite while owner-action facts (entity, analyst identity, trademark clearance) remain open.",
   "Do NOT reuse a competitor/customer pairing or a dollar figure in client-facing copy without a fresh-verification citation — this exact failure mode (a misattributed customer relationship) was found and corrected in this build."
  ],
  "extensions": {
   "service_business_reality_check": {
    "is_service_business": true,
    "paid_outcome_clear": true,
    "workflow_present": true,
    "ai_native_fit_score": 4.58,
    "red_flags": []
   },
   "ai_native_fit": {
    "score": 4.58,
    "why": "High-volume, document-heavy, rules-based hard-fail evaluation with a named analyst release gate — the six-gate rubric scores 4.58/5 in the source blueprint",
    "disqualifiers": []
   },
   "domain_evidence_register": [
    {
     "claim": "Minn. Stat. §504B.216 caps the admin billing fee at $8.00/period and the late fee at $5.00/month total, and bans electricity apportionment for leases starting on/after 1/1/2025",
     "evidence_type": "primary statute",
     "source": "MN Revisor's Office, Minn. Stat. §504B.216, re-verified July 2026 against MnREIA's landlord guide",
     "strength": "high",
     "gaps": "None — primary statute text confirmed directly"
    },
    {
     "claim": "Conservice serves large institutional owners and remains operational as of mid-2026",
     "evidence_type": "press + legal filing coverage",
     "source": "Conservice/Workday Ventures materials; federal court ruling coverage, Feb 2026",
     "strength": "high",
     "gaps": "Exact customer roster not independently verifiable — corrected one misattributed customer pairing this build"
    }
   ],
   "assumption_register": [
    {
     "assumption": "Minnesota owners/PMs will pay for a done-for-you Completeness Pack rather than build hard-fail checks in-house",
     "impact_if_wrong": "severe — wedge economics fail",
     "how_to_validate": "8-property pilot cohort with explicit founding-price conversation",
     "blocking": true
    },
    {
     "assumption": "Analyst minutes per client fall as parser coverage grows",
     "impact_if_wrong": "high — margin target missed",
     "how_to_validate": "Instrument analyst minutes per cycle from pilot 1 onward",
     "blocking": false
    }
   ],
   "language_conflict_map": [
    {
     "term": "pack",
     "meaning_a": "Completeness Pack (this business's bundled deliverable)",
     "context_a": "RUBSClear",
     "meaning_b": "A different bundled-deliverable term used by unrelated portfolio businesses",
     "context_b": "other portfolio businesses (not this one)",
     "resolution": "Always qualify as 'RUBS Compliance Completeness Pack' in RUBSClear's own materials"
    }
   ],
   "build_buy_integrate": [
    {
     "subdomain": "Compliance Rules Engine",
     "decision": "build",
     "reason": "The rule-card engine and exception library are the core differentiated IP"
    },
    {
     "subdomain": "Referral & Outreach",
     "decision": "buy",
     "reason": "Off-the-shelf CRM suffices; not differentiating"
    }
   ],
   "core_protection_strategy": [
    "[PLACEHOLDER] owner to complete"
   ],
   "boundary_stress_tests": [
    {
     "scenario": "A property asks RUBSClear to interpret a novel eviction-related utility-bill defect",
     "contexts_touched": [
      "Counsel Escalation"
     ],
     "breaks_if": "The escalation trigger has a gap for a novel phrasing of the request",
     "verdict": "Mitigated by analyst-trained refusal + counsel-panel referral as a second gate"
    }
   ],
   "unresolved_ownership": [
    {
     "concept": "City-level RUBS-ban list accuracy",
     "candidates": [
      "Utility-Ops Analyst",
      "Utility-Ops Analyst"
     ],
     "recommendation": "Utility-Ops Analyst maintains the ban list; RUBSClear founder reviews quarterly"
    }
   ],
   "published_language_contracts": [
    {
     "producer": "Normalization & Extraction",
     "consumer": "Compliance Rules Engine",
     "contract": "Canonical normalized master-bill schema",
     "versioning": "Schema version pinned per PMS export parser release"
    }
   ],
   "shared_kernel_warnings": [
    "None identified — bounded contexts communicate only via events, no shared kernel"
   ],
   "aggregate_stress_tests": [
    {
     "aggregate": "CompletenessPackAggregate",
     "scenario": "Concurrent analyst release attempts on the same pack",
     "invariant_at_risk": "No release while a hard fail is open",
     "verdict": "Mitigated by optimistic locking on the aggregate root"
    }
   ],
   "agent_stress_tests": [
    {
     "agent": "Extraction Agent",
     "scenario": "A low-quality scanned master bill produces a low-confidence extraction",
     "failure_mode": "Extraction silently proceeds despite low confidence",
     "guardrail": "Confidence threshold routes to analyst review below 85%",
     "verdict": "Acceptable with analyst gate"
    }
   ],
   "regulated_domain_handling": [
    {
     "regime": "State UPL (unauthorized practice of law) statutes",
     "applies_because": "RUBSClear performs documentation adjacent to legal-compliance interpretation",
     "controls": [
      "No legal opinions, no litigation strategy, no eviction advice",
      "No consumer contact"
     ],
     "evidence_required": [
      "[PLACEHOLDER] owner to complete"
     ]
    },
    {
     "regime": "State UPL exposures",
     "applies_because": "Utility Provider inquiries could be miscategorized as third-party debt collection",
     "controls": [
      "Inquiries sent under property's own name",
      "Administrative-agent authorization",
      "No demand language"
     ],
     "evidence_required": "Per-state counsel review before offering the recovery-share rider"
    }
   ],
   "unit_economics": {
    "price_model": "Flat per-property Completeness Pack fee + per-door Monthly Cycle Retainer",
    "unit_of_value": "billing cycle (one property-cycle)",
    "gross_margin_pct": 62,
    "cost_drivers": [
     "Model inference (extract/evaluate/draft)",
     "Analyst minutes",
     "QA sampling"
    ],
    "breakeven_note": "COGS/pack falls from ~$100-140 at launch toward $80 by year 1 as automation rises from 35% to 80%"
   },
   "margin_leakage_map": [
    {
     "leakage": "Analyst minutes not falling with rule-card coverage",
     "cause": "New PMS export formats not yet in the fixture library",
     "impact": "Gross margin compression per new property",
     "mitigation": "Fixture library grows with every pilot; reused across properties"
    }
   ],
   "slop_findings": [
    {
     "pattern": "Generic SaaS marketing phrasing",
     "status": "checked",
     "note": "DESIGN-STANDARD.md §9 banned-phrase list enforced on the landing page via computational grep before deploy — zero matches"
    }
   ],
   "drift_checks": [
    {
     "stage": "build",
     "status": "checked",
     "findings": [
      "[PLACEHOLDER] owner to complete"
     ]
    }
   ],
   "gates": [
    {
     "id": "G1",
     "title": "No public claim before owner-action facts close",
     "passed": false,
     "checks": [
      {
       "name": "Entity confirmed",
       "ok": false,
       "evidence": "Pending owner action — named utility-ops analyst and legal entity confirmation"
      },
      {
       "name": "Analyst identity confirmed",
       "ok": false,
       "evidence": "Pending owner action"
      },
      {
       "name": "Trademark clearance",
       "ok": false,
       "evidence": "Pending owner action"
      }
     ]
    }
   ],
   "contradiction_scan": [
    {
     "id": "C1",
     "severity": "low",
     "message": "None found — fresh July 2026 web verification of MN §504B.216 and CO HB26-1013 confirmed and slightly expanded the blueprint's cited facts (added CO's 2%-or-$10 markup cap detail and MN's $5M restitution precedent)",
     "refs": [
      "business-plan.md fresh-verification notes"
     ]
    }
   ],
   "rubric": {
    "categories": [
     {
      "category": "domain_modeling",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "ai_governance",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "compliance_boundary",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "unit_economics",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "gtm_clarity",
      "score": 4,
      "min": 3,
      "passed": true
     }
    ],
    "pass": true,
    "average": 4.58
   },
   "foundry_package": {
    "version": "1.0.0",
    "checksum": "n/a-generated-locally",
    "counts": {
     "subdomains": 1,
     "bounded_contexts": 7,
     "aggregates": 3,
     "events": 7,
     "commands": 7,
     "policies": 1,
     "ai_agents": 1,
     "invariants": 1,
     "integrations": 1,
     "adrs": 1
    },
    "subset": {
     "subdomains": [
      "Compliance Rules Engine",
      "Recovery & Delivery",
      "Evidence & Compliance",
      "Referral & Outreach"
     ],
     "bounded_contexts": [
      "Diagnostic Intake",
      "Reconciliation & Matching",
      "Recovery & Delivery",
      "Quality Assurance"
     ],
     "aggregates": [
      "CompletenessPackAggregate",
      "ReconciliationCycleAggregate",
      "DiscrepancyLogAggregate",
      "CompletenessPackAggregate",
      "Utility ProviderInquiryAggregate",
      "SignoffAggregate",
      "RetractionAggregate"
     ],
     "events": [
      "masterbill.normalized",
      "statement.normalized",
      "reconciliation_cycle.matching_completed",
      "discrepancy.analyst_approved",
      "allocation_pack.signed",
      "utility provider_inquiry.sent"
     ],
     "commands": [
      "ReceiveMasterBill",
      "NormalizeStatement",
      "RunMatching",
      "ApproveDiscrepancy",
      "SignPack",
      "SendUtility ProviderInquiry"
     ],
     "policies": [
      "Auto-route hard fail to analyst exception queue",
      "Block demand-language patterns",
      "Second-analyst spot check",
      "Auto-escalate aging inquiry"
     ],
     "ai_agents": [
      "Extraction Agent",
      "Matching Agent",
      "Discrepancy Drafter Agent",
      "Inquiry Drafter Agent"
     ],
     "invariants": [
      "A Completeness Pack cannot be released without every hard fail cleared or escalated",
      "A Utility ProviderInquiry cannot be sent without analyst approval and property authorization on file",
      "No discrepancy is published without a cited source-statement and PMS-policy reference",
      "RUBSClear never issues a coverage or findings-adjustment determination"
     ],
     "integrations": [
      "PMS export (AppFolio/Buildium/Rent Manager/Yardi Breeze)",
      "Utility Provider statement portals",
      "QuickBooks / PMS posting-file import",
      "Utility Provider allocation-department mailbox"
     ],
     "adrs": [
      "ADR-001",
      "ADR-002"
     ]
    }
   }
  }
 },
 "ddd_coverage": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "total": 17,
  "passed": 17,
  "pct": 100,
  "checks": [
   {
    "key": "actors",
    "label": "Actors",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "subdomains",
    "label": "Subdomains",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "bounded_contexts",
    "label": "Bounded Contexts",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "aggregates",
    "label": "Aggregates",
    "count": 7,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "events",
    "label": "Events",
    "count": 6,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "commands",
    "label": "Commands",
    "count": 6,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "policies",
    "label": "Policies",
    "count": 4,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "ai_agents",
    "label": "Ai Agents",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "invariants",
    "label": "Invariants",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "use_cases",
    "label": "Use Cases",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "human_roles",
    "label": "Human Roles",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "data_objects",
    "label": "Data Objects",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "risk_register",
    "label": "Risk Register",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "adrs",
    "label": "Adrs",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "mvp_roadmap",
    "label": "Mvp Roadmap",
    "count": 1,
    "min": 1,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "scaling_roadmap",
    "label": "Scaling Roadmap",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "context_map",
    "label": "Context Map",
    "count": 4,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   }
  ],
  "failingGates": []
 },
 "architecture": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "archetypes": [
   "compliance completeness pack desk",
   "back-office document-intelligence service"
  ],
  "archetype_impact": "Billing cycle (property + calendar month) is the global unit; every module keys off it",
  "personality": [
   "numerate",
   "calm",
   "evidence-first",
   "no hype"
  ],
  "forces_ranked": [
   {
    "force": "Trust/accuracy (penny-perfect hard-fail clearance)",
    "why": "A wrong pack is the single fastest way to lose a client"
   },
   {
    "force": "Founder-operability (low ops burden)",
    "why": "Founder-operated launch cannot support a platform team"
   },
   {
    "force": "Time-to-first-revenue",
    "why": "Pilot cohort must convert within 90 days to validate the model"
   },
   {
    "force": "Scalability beyond pilot",
    "why": "Lowest priority at launch; revisit at 20+ clients"
   }
  ],
  "tradeoffs": [
   "Modular monolith trades some future scaling ease for launch speed and audit simplicity",
   "Manual utility provider follow-up at launch trades automation for learning real response patterns first"
  ],
  "quality_scenarios": [
   {
    "attribute": "accuracy",
    "assumption": "Every master-bill line ties to its source",
    "target": "Pack hard-fail clearance to the penny before signature, 100% of releases"
   },
   {
    "attribute": "reviewability",
    "assumption": "A analyst can reconstruct any evidence chain quickly",
    "target": "Under 5 minutes to trace any pack line to its source statement"
   }
  ],
  "options": [
   {
    "style": "Modular monolith",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "team_fit": "high (founder-operated)",
    "scaling_path": "Extract modules under pressure",
    "security_impact": "Single audit boundary",
    "fits_here": true,
    "fits_when": "Founder/small-team launch",
    "wrong_here": false,
    "recommended": true
   },
   {
    "style": "Microservices per bounded context",
    "complexity": "high",
    "cost": "high",
    "ops_burden": "high",
    "team_fit": "low at launch",
    "scaling_path": "Already decomposed",
    "security_impact": "More boundaries to secure",
    "fits_here": false,
    "fits_when": "Large team, proven scale pressure",
    "wrong_here": true,
    "recommended": false
   },
   {
    "style": "No-code workflow tool",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "team_fit": "medium",
    "scaling_path": "Poor — hard to enforce deterministic gates",
    "security_impact": "Vendor-dependent",
    "fits_here": false,
    "fits_when": "No hard money-math invariant",
    "wrong_here": true,
    "recommended": false
   }
  ],
  "chosen_style": "modular monolith",
  "chosen_rationale": "Modular monolith with background jobs for bursty statement-extraction work — one audit boundary, low ops burden, easy per-context ownership as the team grows.",
  "rejected": [
   {
    "style": "Microservices per bounded context",
    "why_rejected": "Premature operational complexity for a founder-operated launch"
   },
   {
    "style": "No-code workflow tool",
    "why_rejected": "Cannot reliably enforce the deterministic penny-perfect gate"
   }
  ],
  "target": {
   "overview": "Single-region modular monolith, Postgres primary store, background job queue for extraction/matching, internal analyst console, public marketing microsite.",
   "frontend": "Analyst console (internal, authenticated) + public marketing microsite (static, self-contained)",
   "backend": "Single deployable service, module boundaries enforced by code convention and event-only cross-module calls",
   "data": "Postgres with row-level tenant security; object storage for statement files",
   "api": "Internal authenticated API for the analyst console; no public API at launch",
   "authn_authz": "SSO + MFA for analysts; row-level auth scaffolding for a future client portal",
   "integrations": "intake evidence set file ingestion; master bill mailbox/portal; QuickBooks/PMS posting-file export",
   "background_jobs": "Statement extraction, matching, aging-escalation checks",
   "object_storage": "Encrypted, per-property-prefix isolated",
   "notifications": "Email only at launch (client comms + internal escalation alerts)",
   "search": "None at launch",
   "analytics": "Internal metrics dashboard only; no third-party analytics on the analyst console",
   "ai": "Single frontier-model provider via a scripted extraction/matching/drafting pipeline, prompts + fixtures versioned in-repo",
   "observability": "Structured logs, RED metrics, model-call cost/latency spans",
   "deployment": "Single production region, multi-AZ, preview environment per PR",
   "security": "Row-level tenant isolation, encryption at rest/in transit, least-privilege access",
   "dr": "Daily backups, tested restore runbook, RPO 24h / RTO 4h at launch scale"
  },
  "modules": [
   {
    "name": "intake-normalization",
    "purpose": "Statement receipt, extraction, and hard-fail clearance.",
    "owned_domain": [
     "MasterBill"
    ],
    "application_services": [
     "ReceiveStatement",
     "NormalizeStatement"
    ],
    "infra_adapters": [
     "Mailbox listener",
     "Object storage adapter",
     "Extraction-model client"
    ],
    "public_interfaces": [
     "statement.normalized event"
    ],
    "forbidden_deps": [
     "Cannot call reconciliation-matching internals directly — event only"
    ],
    "responsibility": "Statement receipt, extraction, and hard-fail clearance.",
    "owned_data": [
     "MasterBill"
    ],
    "events_produced": [
     "statement.normalized event"
    ],
    "events_consumed": [],
    "interfaces": [
     "statement.normalized event"
    ],
    "depends_on": [],
    "entities": [
     "MasterBill"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "reconciliation-matching",
    "purpose": "Matching, discrepancy classification, pack hard-fail clearance.",
    "owned_domain": [
     "ReconciliationCycle",
     "DiscrepancyLog",
     "CompletenessPack"
    ],
    "application_services": [
     "RunMatching",
     "ApproveDiscrepancy",
     "SignPack"
    ],
    "infra_adapters": [
     "PMS-export parser",
     "Fee-schedule store"
    ],
    "public_interfaces": [
     "discrepancy.analyst_approved event",
     "allocation_pack.signed event"
    ],
    "forbidden_deps": [
     "Cannot call recovery-delivery internals directly — event only"
    ],
    "responsibility": "Matching, discrepancy classification, pack hard-fail clearance.",
    "owned_data": [
     "ReconciliationCycle",
     "DiscrepancyLog",
     "CompletenessPack"
    ],
    "events_produced": [
     "discrepancy.analyst_approved event",
     "allocation_pack.signed event"
    ],
    "events_consumed": [],
    "interfaces": [
     "discrepancy.analyst_approved event",
     "allocation_pack.signed event"
    ],
    "depends_on": [],
    "entities": [
     "ReconciliationCycle",
     "DiscrepancyLog",
     "CompletenessPack"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "recovery-delivery",
    "purpose": "Utility Provider-inquiry drafting/sending, aging, pack assembly.",
    "owned_domain": [
     "Utility ProviderInquiry",
     "ResidentPayoutStatement",
     "MonthlyReconciliationPack"
    ],
    "application_services": [
     "SendUtility ProviderInquiry",
     "AssemblePack",
     "DeliverPack"
    ],
    "infra_adapters": [
     "Email-send adapter",
     "Posting-file generator"
    ],
    "public_interfaces": [
     "pack.delivered event"
    ],
    "forbidden_deps": [
     "Cannot bypass quality-assurance release-gate signature gate"
    ],
    "responsibility": "Utility Provider-inquiry drafting/sending, aging, pack assembly.",
    "owned_data": [
     "Utility ProviderInquiry",
     "ResidentPayoutStatement",
     "MonthlyReconciliationPack"
    ],
    "events_produced": [
     "pack.delivered event"
    ],
    "events_consumed": [],
    "interfaces": [
     "pack.delivered event"
    ],
    "depends_on": [],
    "entities": [
     "Utility ProviderInquiry",
     "ResidentPayoutStatement",
     "MonthlyReconciliationPack"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "quality-assurance",
    "purpose": "Signoff and retraction lifecycle.",
    "owned_domain": [
     "Signoff",
     "Retraction"
    ],
    "application_services": [
     "ApproveArtifact",
     "RetractArtifact"
    ],
    "infra_adapters": [
     "Signature-binding session store"
    ],
    "public_interfaces": [
     "ArtifactSigned event"
    ],
    "forbidden_deps": [
     "Cannot draft on behalf of any other module"
    ],
    "responsibility": "Signoff and retraction lifecycle.",
    "owned_data": [
     "Signoff",
     "Retraction"
    ],
    "events_produced": [
     "ArtifactSigned event"
    ],
    "events_consumed": [],
    "interfaces": [
     "ArtifactSigned event"
    ],
    "depends_on": [],
    "entities": [
     "Signoff",
     "Retraction"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   }
  ],
  "data_architecture": {
   "primary_db": "Postgres",
   "secondary": [
    "Object storage for statement files"
   ],
   "cache": "None at launch",
   "search": "None at launch",
   "vector": "None at launch (retrieval is structured lookup, not embeddings, at this scale)",
   "object_storage": "Per-property-prefix isolated bucket",
   "schema_strategy": "Migration-gated, reviewed per PR",
   "migrations": "Forward-only, reviewed",
   "backups": "Daily automated, tested restore quarterly",
   "retention": "7 years on signed packs/logs; 13 months on agent-run logs",
   "audit_logs": "Append-only, hash-chained per billing cycle",
   "soft_delete": "Used for client offboarding, hard-delete on retention expiry",
   "privacy": "Per-tenant row-level security",
   "encryption": "At rest and in transit",
   "multi_tenancy": "Logical isolation via tenant_id row-level security"
  },
  "api": {
   "style": "Internal REST",
   "public_vs_internal": "Internal only at launch",
   "versioning": "Path-versioned when a client portal ships",
   "rate_limiting": "Per-tenant budget caps on model-backed endpoints",
   "idempotency": "Idempotency keys on statement ingestion",
   "pagination": "Cursor-based on list endpoints",
   "error_format": "Structured JSON problem-details",
   "webhook_security": "N/A at launch",
   "retries": "Exponential backoff on model-provider calls",
   "contract_testing": "Per-utility provider parser schema contract tests in CI",
   "backward_compat": "N/A at launch (no public API)",
   "contract_testing_plan": "Fixture-based regression suite run on every parser/prompt change"
  },
  "security": {
   "authn": "SSO + MFA for analysts",
   "authz": "Role-based, server-side capability checks",
   "tenant_isolation": "Row-level security keyed on tenant_id",
   "secrets": "Managed secrets store, no secrets in code",
   "encryption": "At rest and in transit",
   "session": "Server-side session with short-lived tokens",
   "input_validation": "Schema validation on every ingestion path",
   "api_protection": "Rate limiting + auth on all internal endpoints",
   "audit_log": "Append-only, hash-chained",
   "admin_access": "Break-glass access logged and time-boxed",
   "supply_chain": "Dependency scanning in CI",
   "threat_model": [
    "Cross-tenant leak",
    "Analyst identity spoofing",
    "Prompt injection via uploaded statements"
   ],
   "abuse_cases": [
    "Bulk fraudulent statement upload attempting to poison the matching engine"
   ],
   "zero_trust": "Server-side checks on every capability, never client-only",
   "asvs_notes": "Aligned to OWASP ASVS L2 controls for a B2B financial-data service"
  },
  "reliability": {
   "failure_modes": [
    "Model-provider outage mid-extraction",
    "Utility Provider portal credential expiry",
    "Statement queue backlog at month-end"
   ],
   "graceful_degradation": "Queue and retry rather than fail hard; analyst notified of delayed cycles",
   "retry_policy": "Exponential backoff, max 5 attempts on model calls",
   "timeouts": "30s extraction timeout, background-job fallback beyond that",
   "circuit_breaker": "Trip on repeated model-provider failures, alert on-call",
   "queueing": "Background job queue for extraction/matching",
   "idempotency": "Idempotency keys on statement ingestion",
   "dlq": "Dead-letter queue for repeatedly failing extraction jobs",
   "transactions": "Aggregate-scoped transactions, no cross-aggregate transactions",
   "dr": "Daily backups, quarterly restore test",
   "incident_response": "Runbook: detect, contain, notify, root-cause, postmortem",
   "slos": [
    {
     "name": "p95 statement extraction latency",
     "target": "under 30s"
    },
    {
     "name": "Monthly pack on-time delivery",
     "target": "≥95% of cycles by the 5th business day"
    }
   ]
  },
  "scaling": {
   "mvp_can_stay_simple": [
    "Single Postgres instance",
    "In-process event dispatch"
   ],
   "modular_now": [
    "Module boundaries enforced by convention"
   ],
   "deferrable": [
    "Client-facing portal",
    "Public API",
    "Vector search"
   ],
   "breaks_first": "Analyst throughput before infrastructure",
   "db_path": "Read replicas once reporting load grows",
   "jobs_path": "Managed queue once in-process dispatch saturates",
   "cache_path": "Add a cache layer only if read latency becomes a measured problem",
   "search_path": "Add full-text search only if client-portal search becomes a real need",
   "files_path": "Object storage scales natively",
   "api_path": "Add a versioned public API only when a client portal ships",
   "multi_region": "Not needed at this scale",
   "cost_control": "Per-tenant model-spend budget caps"
  },
  "ai": {
   "provider": "Single frontier-model provider (model-agnostic schemas/prompts, swappable within days)",
   "prompt_mgmt": "Versioned in-repo, immutable once published",
   "rag": "Structured per-property + per-utility provider retrieval, not embeddings-based at this scale",
   "vector": "Not used at this scale",
   "embeddings": "Not used at this scale",
   "eval": "Fixture-based regression suite per utility provider",
   "hitl": "Analyst gate on every discrepancy and utility provider inquiry",
   "guardrails": "Deterministic output filters + structured validation",
   "prompt_injection": "Uploaded statement content treated as untrusted data, never instructions",
   "leakage": "Per-tenant retrieval partitioning",
   "fallback": "Dual-provider fallback path documented, not yet implemented at pilot scale",
   "latency_cost": "Tracked per AgentRun",
   "memory": "Session-scoped only, no persistent cross-client memory",
   "tool_permissions": "Extraction/matching/drafting agents have read-only access to their own context's data",
   "auditability": "Every AgentRun logged with prompt version + validator verdict",
   "citation": "Every discrepancy and eligibility-adjacent claim must cite a source"
  },
  "devops": {
   "environments": [
    "local",
    "preview (per-PR)",
    "staging",
    "production (single region + multi-AZ)"
   ],
   "cicd": "PR -> typecheck + unit + snapshot -> preview deploy -> main auto-deploys",
   "iac": "Declarative infra config checked into the repo",
   "secrets": "Managed secrets store",
   "preview_envs": "Per-PR ephemeral environments",
   "migrations": "Reviewed, forward-only",
   "rollback": "Blue/green deploy with fast rollback",
   "release_style": "Continuous deployment on main, feature-flagged risky changes",
   "feature_flags": "Used for prompt-version rollouts",
   "monitoring": "Structured logs + RED metrics",
   "alerting": "On-call paged on SLO breach",
   "logs": "Structured, tenant-scoped, PII-scrubbed",
   "error_tracking": "Source-mapped error tracking",
   "uptime": "Target 99.5% at pilot scale",
   "cost_monitoring": "Per-tenant model-spend dashboard"
  },
  "testing": {
   "unit": "Tie-out math and materiality thresholds",
   "integration": "Cross-module event contracts",
   "contract": "Per-utility provider parser schema",
   "e2e": "Intake to delivery smoke test",
   "security": "Row-level isolation tests",
   "a11y": "axe-core on analyst surfaces",
   "load": "Month-end volume simulation",
   "chaos": "Model-provider outage simulation",
   "migration": "Forward-only migration dry-run in CI",
   "backup_restore": "Quarterly restore drill",
   "ai_eval": "Fixture-based regression suite per utility provider",
   "test_data": "Anonymized gold-standard statement fixtures"
  },
  "observability": {
   "logs": "Structured, tenant-scoped, PII-scrubbed",
   "metrics": "RED metrics per workflow",
   "traces": "Model-call spans with cost + latency",
   "audit_events": "Append-only, hash-chained per cycle",
   "business_events": "scan_requested, pack_delivered, discrepancy_approved",
   "error_tracking": "Source-mapped error tracking",
   "security_monitoring": "Cross-tenant access-attempt alerting",
   "cost_monitoring": "Per-tenant model-spend dashboard",
   "dashboards": [
    "Ops dashboard",
    "Economics dashboard"
   ],
   "alert_thresholds": [
    "Auto-match rate <80%",
    "Analyst minutes >180/cycle"
   ],
   "triage": "On-call reviews alert, checks tenant scope, escalates per runbook"
  },
  "cost": {
   "drivers": [
    {
     "name": "Model inference per statement",
     "note": "Scales with statement volume, falls per-statement as parser coverage grows"
    },
    {
     "name": "Analyst labor minutes",
     "note": "Falls with auto-match rate improvement"
    },
    {
     "name": "Object storage",
     "note": "Linear with client count, low absolute cost"
    }
   ],
   "likely_traps": [
    "Over-provisioning background workers before real volume data exists"
   ],
   "controls": [
    "Per-tenant budget caps",
    "Monthly cost-per-client dashboard review"
   ]
  },
  "multi_tenancy": {
   "model": "Shared infrastructure, logical isolation",
   "isolation": "Row-level security keyed on tenant_id",
   "tenant_aware_authz": "Every capability check includes tenant_id",
   "tenant_config": "Per-property utility provider list and allocation-schedule config",
   "branding": "N/A at launch (internal-only console)",
   "tenant_export": "Full-cycle export available on request",
   "tenant_deletion": "Soft-delete then hard-delete on retention expiry",
   "tenant_audit": "Per-tenant audit log export",
   "noisy_neighbor": "Per-tenant concurrency and budget caps",
   "tenant_rate_limits": "Per-tenant model-call budget",
   "billing": "Stripe, flat monthly + one-time scan fee",
   "why_this_fits": "Small client count at launch makes logical isolation sufficient; a hard single-tenant requirement would trigger a per-client deployment exception."
  },
  "privacy_compliance": {
   "data_classification": "Financial/PII tiers documented in product.security.data_classifications",
   "minimization": "Only fields needed for matching/reconciliation retained",
   "consent": "Engagement letter + utility provider-communication authorization",
   "access_logs": "Per-access logged with actor + timestamp",
   "audit_trails": "Append-only, hash-chained",
   "retention": "7 years on packs/logs; 13 months on agent logs",
   "legal_hold": "Manual legal-hold flag overrides retention deletion",
   "right_to_delete": "Honored post-retention-window or on contract termination per engagement letter",
   "right_to_export": "Full-cycle export available on request",
   "sensitive_handling": "resident-privacy-minimization program (state data-breach and landlord-tenant privacy statutes)",
   "boundaries": "No resident activity; no fund custody; no tax/legal advice",
   "residency": "US-only at launch",
   "vendor_risk": "Single model-provider risk documented; dual-provider fallback on the roadmap",
   "breach_response": "Documented incident-response runbook",
   "admin_controls": "Break-glass access logged and time-boxed",
   "evidence_collection": "Audit-log export within 24 hours of a breach or dispute"
  },
  "frontend": {
   "framework": "React (internal analyst console)",
   "rendering": "Client-rendered SPA for the console; static self-contained HTML for the public microsite",
   "routing": "Client-side router for the console",
   "state": "Local + server-state cache",
   "server_state": "Fetched per analyst session",
   "forms": "Native form elements with client + server validation",
   "error_handling": "Structured error boundaries",
   "components": "Design-token-driven component library",
   "design_system": "Semantic tokens per DESIGN-STANDARD.md",
   "auth_ui": "SSO redirect flow",
   "authz_aware_ui": "Capability-gated UI elements",
   "a11y": "WCAG 2.2 AA target",
   "i18n": "en-US only at launch",
   "performance": "Console not performance-critical (internal); microsite budget ≤120KB, no external requests",
   "bundling": "Standard bundler, code-split by module",
   "testing": "Component + e2e tests on analyst surfaces",
   "offline": "Not supported at launch",
   "realtime": "Not needed at launch"
  },
  "backend": {
   "framework": "Node/TypeScript service",
   "layering": "domain / application / infra per module",
   "domain": "Aggregates + value objects per bounded context",
   "services": "Application services orchestrate domain + infra",
   "repositories": "One repository per aggregate root",
   "validation": "Schema validation at every boundary",
   "authorization": "Server-side capability checks only",
   "jobs": "Background job queue for extraction/matching",
   "events": "In-process event dispatch at launch",
   "files": "Object storage adapter",
   "email_sms": "Email adapter for client comms and utility provider inquiries",
   "scheduled": "Aging-escalation checks run daily",
   "errors": "Structured error types per layer",
   "logging": "Structured, tenant-scoped, PII-scrubbed",
   "config": "Environment-based config, no secrets in code",
   "di": "Constructor-based dependency injection",
   "testing": "Unit + contract + e2e per module"
  },
  "diagrams": {
   "context_mermaid": "graph TD; Property-->Intake; Intake-->Reconciliation; Reconciliation-->Recovery; Recovery-->QA",
   "container_mermaid": "graph TD; Console-->API; API-->Postgres; API-->ObjectStorage; API-->ModelProvider",
   "data_flow_mermaid": "graph LR; Statement-->Extraction-->Matching-->Log-->Pack-->Pack",
   "auth_flow_mermaid": "graph LR; Analyst-->SSO-->MFA-->Session",
   "authz_flow_mermaid": "graph LR; Request-->RoleCheck-->TenantCheck-->Allow",
   "deployment_mermaid": "graph TD; PR-->Preview-->Main-->Production",
   "background_job_mermaid": "graph LR; Queue-->Worker-->Retry-->DLQ",
   "event_flow_mermaid": "graph LR; StatementNormalized-->MatchingCompleted-->DiscrepancyApproved-->PackSigned",
   "failure_flow_mermaid": "graph LR; Failure-->Retry-->CircuitBreaker-->Alert",
   "multi_tenant_flow_mermaid": "graph LR; Request-->TenantContext-->RowLevelSecurity-->Data",
   "ai_flow_mermaid": "graph LR; Statement-->ExtractionAgent-->MatchingAgent-->DrafterAgent-->Analyst"
  },
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Adopt a modular monolith, not microservices, at launch",
    "status": "accepted",
    "context": "Founder-operated team; low ops burden required",
    "options": [
     "Modular monolith",
     "Microservices per bounded context",
     "No-code workflow tool"
    ],
    "chosen": "Modular monolith",
    "business_reason": "Fastest path to first paid pilot without a platform team",
    "technical_reason": "One deploy, one audit boundary, easy to reason about at this scale",
    "tradeoffs": "Will need extraction into services if analyst-console load grows sharply",
    "risks": [
     "[PLACEHOLDER] owner to complete"
    ],
    "revisit_trigger": "Sustained CPU/latency pressure isolated to one module",
    "why": "One deploy, one audit boundary, easy to reason about at this scale",
    "consequences": [
     "[PLACEHOLDER] owner to complete"
    ],
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "Sustained CPU/latency pressure isolated to one module"
   },
   {
    "id": "ADR-002",
    "decision": "Deterministic code owns all money math; the model never computes a final dollar figure",
    "status": "accepted",
    "context": "Penny-perfect hard-fail clearance is a hard trust requirement",
    "options": [
     "Model computes totals",
     "Deterministic code computes totals, model only extracts/classifies"
    ],
    "chosen": "Deterministic code computes totals",
    "business_reason": "A wrong dollar figure from a model is the single fastest way to lose a client's trust",
    "technical_reason": "Removes an entire class of hallucination risk from the highest-stakes output",
    "tradeoffs": "Slightly more engineering work per new transaction-type edge case",
    "risks": "Edge cases not yet coded fall through to analyst manual calculation",
    "revisit_trigger": "None — this is a standing invariant, not revisited",
    "why": "Removes an entire class of hallucination risk from the highest-stakes output",
    "consequences": "Slightly more engineering work per new transaction-type edge case",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "None — this is a standing invariant, not revisited"
   }
  ],
  "roadmap": [
   {
    "phase": "Phase 0 — Discovery + pilot LOI",
    "weeks": "Weeks 1-2",
    "outcomes": [
     "3-5 pilot property LOIs",
     "Evidence pack from each pilot property",
     "Written ICP + pricing hypothesis"
    ],
    "exit_criteria": [
     "≥3 LOIs signed",
     "Owner-action pack populated per property",
     "Analyst identity confirmed"
    ],
    "kill_criteria": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ],
    "build": [
     "3-5 pilot property LOIs",
     "Evidence pack from each pilot property",
     "Written ICP + pricing hypothesis"
    ],
    "defer": [],
    "monitor": [
     "≥3 LOIs signed",
     "Owner-action pack populated per property",
     "Analyst identity confirmed"
    ],
    "avoid": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ],
    "acceptable_debt": [
     "[PLACEHOLDER] owner to complete"
    ],
    "dangerous_debt": [
     "[PLACEHOLDER] owner to complete"
    ],
    "triggers_to_change": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   {
    "phase": "Phase 1 — Thin vertical slice",
    "weeks": "Weeks 3-4",
    "outcomes": [
     "Intake -> match -> analyst release-gate signature -> delivery working end-to-end for one PMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "exit_criteria": [
     "1 real RUBS Exposure Diagnostic delivered + analyst-signed",
     "p95 workflow latency published"
    ],
    "kill_criteria": [
     "Analyst release-gate signature cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ],
    "build": [
     "Intake -> match -> analyst release-gate signature -> delivery working end-to-end for one PMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "defer": [],
    "monitor": [
     "1 real RUBS Exposure Diagnostic delivered + analyst-signed",
     "p95 workflow latency published"
    ],
    "avoid": [
     "Analyst release-gate signature cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ],
    "acceptable_debt": "Manual utility provider follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the analyst-release-gate signature gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   },
   {
    "phase": "Phase 2 — Pilot cohort",
    "weeks": "Weeks 3-8",
    "outcomes": [
     "10 pilot agencies scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "exit_criteria": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "kill_criteria": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ],
    "build": [
     "10 pilot agencies scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "defer": [],
    "monitor": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "avoid": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ],
    "acceptable_debt": "Manual utility provider follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the analyst-release-gate signature gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   },
   {
    "phase": "Phase 3 — Recurring-desk scale-up",
    "weeks": "Weeks 9-13 (Day 90 checkpoint)",
    "outcomes": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action pack closed for launch"
    ],
    "exit_criteria": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "kill_criteria": [
     "Rework rate persistently above 3%",
     "Analyst minutes per client not falling with volume"
    ],
    "build": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action pack closed for launch"
    ],
    "defer": [],
    "monitor": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "avoid": [
     "Rework rate persistently above 3%",
     "Analyst minutes per client not falling with volume"
    ],
    "acceptable_debt": "Manual utility provider follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the analyst-release-gate signature gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   }
  ],
  "anti_overengineering": {
   "flagged": [
    {
     "item": "Client-facing portal at launch",
     "why": "No client has asked for self-serve status; email/upload-link delivery is sufficient at pilot scale.",
     "simpler": "Defer to year 1, gated on client demand signal."
    },
    {
     "item": "Vector search / embeddings",
     "why": "Data volume at launch doesn't justify it; structured retrieval suffices.",
     "simpler": "Structured per-property and per-utility provider lookup."
    },
    {
     "item": "Microservices per bounded context",
     "why": "Premature operational complexity for a founder-operated launch.",
     "simpler": "Modular monolith with enforced module boundaries."
    }
   ]
  },
  "risks": [
   {
    "risk": "PMS vendor bundles reconciliation 'free' with a chase workflow",
    "likelihood": "medium-high",
    "impact": "high",
    "mitigation": "PMS-agnostic positioning; recovery/chase as the human moat",
    "detection": "RealPage Utility Management or a competing PMS module adds chase/recovery features",
    "owner": "owner",
    "escalation": "Analyst -> Senior Analyst -> Owner -> Counsel",
    "fallback": "PMS-agnostic positioning; recovery/chase as the human moat",
    "category": "business"
   },
   {
    "risk": "Scan-to-desk conversion underperforms",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "detection": "Pilot cohort conversion below 25%",
    "owner": "owner",
    "escalation": "Analyst -> Senior Analyst -> Owner -> Counsel",
    "fallback": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "category": "business"
   },
   {
    "risk": "False-positive discrepancy sent to a utility provider",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "100% analyst approval; evidence-link requirement; inquiry-not-demand language",
    "detection": "Utility Provider disputes an inquiry as unfounded",
    "owner": "legal",
    "escalation": "Analyst -> Senior Analyst -> Owner -> Counsel",
    "fallback": "100% analyst approval; evidence-link requirement; inquiry-not-demand language",
    "category": "business"
   }
  ],
  "rules": [
   "No cross-module database table sharing",
   "No model call computes final money math",
   "No public claim before owner-action facts close"
  ],
  "audit": {
   "product_fit": 4,
   "simplicity": 4,
   "security": 4,
   "reliability": 4,
   "scalability": 3,
   "maintainability": 4,
   "performance": 4,
   "cost": 4,
   "compliance": 3,
   "dx": 4,
   "ops_burden": 4,
   "extensibility": 4,
   "team_suitability": 4,
   "time_to_market": 4,
   "recommendation": {
    "verdict": "conditional-go",
    "stack": "Node/TypeScript + Postgres + single frontier-model provider",
    "style": "modular monolith",
    "database": "Postgres with row-level tenant security",
    "hosting": "Single-region, multi-AZ",
    "auth": "SSO + MFA for analysts",
    "ai_approach": "Scripted extraction/matching/drafting pipeline with analyst gates",
    "integrations": "intake evidence set ingestion, master bill intake, QuickBooks/PMS posting export",
    "build_first": [
     "Intake & Normalization",
     "Reconciliation & Matching"
    ],
    "revisit_later": [
     "Client-facing portal",
     "Public API"
    ],
    "avoid": [
     "Microservices",
     "Vector search at this scale"
    ],
    "biggest_risks": [
     "Analyst bottleneck",
     "A utility provider-facing claim proves incorrect"
    ],
    "top_10_rules": [
     "No cross-module database table sharing",
     "No model call computes final money math",
     "No public claim before owner-action facts close",
     "Deterministic code owns all money math",
     "Analyst gate on every client- or utility provider-facing output"
    ],
    "first_10_steps": [
     "Confirm the named utility-ops analyst + engagement letter on file",
     "Populate owner-action pack with entity, jurisdiction, contact inbox, privacy inbox",
     "Open pilot-cohort intake (cap 10) with explicit pricing conversation",
     "Write ICP + kill/pivot criteria in the plan file",
     "Stand up the evidence-linked intake -> match -> analyst release-gate signature loop",
     "Wire append-only audit log + hash-chained snapshots",
     "Add row-level auth + tenant-scoped retrieval indices",
     "Instrument scan-request, pack-delivery, and analyst-release-gate signature events",
     "Publish the microsite with FAQPage schema only and noindex until owner-facts close",
     "Schedule the Day-90 kill/pivot review with executive sponsor"
    ]
   }
  }
 },
 "design": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "archetypes": [
   "ledger / compliance desk",
   "back-office trust interface"
  ],
  "user_mindset": {
   "goals": "Find out fast whether the RUBS program overbills, without operating another tool",
   "session_length": "Short, task-focused (diagnostic intake, cycle pack review)",
   "confidence": "Numerate, skeptical of unproven claims — wants a statute citation, not a promise",
   "interface_needs": "Clear evidence chain from master-bill line to Compliance Scorecard to release signature"
  },
  "posture": [
   "calm",
   "numerate",
   "institutional-but-warm"
  ],
  "density": "compact",
  "trust_level": {
   "tier": "high",
   "sensitive_domains": [
    "Property financial data",
    "Resident payout data"
   ],
   "implications": [
    "Every dollar figure must show its source",
    "No fabricated proof; honest placeholder slots until real cycles ship"
   ]
  },
  "differentiation": {
   "avoid": [
    "Insurtech/proptech-startup gradient look",
    "Wheat/tractor-style vertical clip-art equivalents (generic finance-SaaS iconography)",
    "Alarm-red urgency banners"
   ],
   "strategy": "A ledger aesthetic — deep utility-green against warm parchment, burnt-amber accent — distinct from a generic SaaS dashboard"
  },
  "territories": [
   {
    "name": "Ledger Desk",
    "color_mood": "deep utility-green + warm parchment + burnt-amber accent",
    "typography": "Serif numerals, sans body",
    "density": "compact",
    "component_feel": "workbook-like, artifact-shaped cards",
    "motion": "minimal, calm",
    "fits": "Compliance/back-office trust interfaces",
    "risks": "Could read as too formal for a younger buyer persona (not a concern here — buyer is an property operator)"
   },
   {
    "name": "Filing Desk",
    "color_mood": "similar palette family used elsewhere in the portfolio",
    "typography": "Serif display",
    "density": "compact",
    "component_feel": "filing-tab metaphor",
    "motion": "minimal",
    "fits": "Deadline-driven filing businesses",
    "risks": "Wrong metaphor here — no single filing deadline exists in this business"
   },
   {
    "name": "Reconciliation Console",
    "color_mood": "cooler blue-gray, more software-dashboard feeling",
    "typography": "Sans-only",
    "density": "dense",
    "component_feel": "dashboard-like",
    "motion": "minimal",
    "fits": "A future client-facing portal, not the launch microsite",
    "risks": "Reads too much like software the client has to operate — against the done-for-you positioning"
   }
  ],
  "chosen_territory": "Ledger Desk",
  "chosen_rationale": "The Compliance Scorecard is the deliverable; the ledger-desk motif reads as an audit-grade register, not a consumer app",
  "prioritized_components": [
   {
    "name": "Hero with cycle-status panel",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Stat strip (real, sourced figures)",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Deliverable cards",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Pricing tiers with guarantee callout",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Honest placeholder proof slots",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "FAQ",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   }
  ],
  "tokens": {
   "brand": "158 45% 24%",
   "brand-fg": "45 25% 96%",
   "surface": "45 25% 96%",
   "ink": "158 20% 14%",
   "muted": "158 10% 38%",
   "accent": "28 85% 52%"
  },
  "type": {
   "display": "Georgia (system serif stack)",
   "body": "system-ui",
   "fonts_url": ""
  },
  "signature": {
   "motif": "Mismatched master-bill cards resolving into one cleared Compliance Scorecard",
   "render": "CSS-only shapes/borders, no imagery (120KB budget)"
  },
  "patterns": [
   {
    "name": "Card-based deliverable grid",
    "description": "See site/index.html implementation"
   },
   {
    "name": "Stepped how-it-works numerals",
    "description": "See site/index.html implementation"
   },
   {
    "name": "Dashed placeholder proof slots",
    "description": "See site/index.html implementation"
   }
  ],
  "states": [
   "matched (state-ok)",
   "at-risk/short-paid (state-risk)",
   "pending utility provider response (state-pending)",
   "blocked/needs input (state-blocked)"
  ],
  "uniqueness_audit": {
   "app_specific_decisions": [
    "Ledger-green + burnt-amber palette distinct from the portfolio's navy/blue-and-gold or teal sibling businesses",
    "Statement-to-pack visual motif specific to this business's workflow"
   ],
   "cliches_avoided": [
    "No generic proptech gradient hero",
    "No stock handshake/office imagery"
   ],
   "scale_notes": "Palette and motif chosen to be visually distinct from sibling businesses in the same multi-tenant site."
  },
  "localization": [
   "en-US only at launch"
  ]
 },
 "seo": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "archetype": "outcome-priced back-office authority site",
  "archetype_impact": "Search fit is a back-office trust authority site, not a filing-deadline authority site. That means depth on utility provider-format and discrepancy-classification specifics, evergreen (not deadline-driven) content cadence.",
  "authority_dna": {
   "site_archetype": "outcome-priced back-office authority site",
   "monetization_model": "B2B lead -> RUBS Exposure Diagnostic -> paid Reconciliation Desk engagement (not ad revenue; not affiliate).",
   "main_search_intents": [
    "informational",
    "commercial"
   ],
   "topical_authority_opportunity": "Own the \"multifamily housing allocation reconciliation\" topic cluster by covering direct-bill statement formats, utility provider-quirk patterns, discrepancy classification, and resident-payout disputes better than any single trade-press explainer.",
   "local_seo_opportunity": "Not justified: buyers search by problem/PMS platform, not by city.",
   "global_national_opportunity": "National (US-first); state multifamily housing regulation varies but the core service is not state-gated.",
   "easiest_ranking_path": "Long-tail, utility provider-specific and PMS-specific queries (\"AppFolio direct bill reconciliation\", \"why is my master bill short\") where the SERP is dominated by vendor blog posts, not buyer-first guides.",
   "hardest_ranking_path": "Head terms like \"multifamily housing allocation software\" — dominated by aged SaaS vendor domains (Fintary, Allocationly, Core Allocations).",
   "trust_credibility_requirements": [
    "Named human analyst with role + credentials",
    "Utility Provider/statement citations on every claim",
    "Last-reviewed date on regulatory/compliance pages",
    "Direct links to primary trade-press sources, not aggregators"
   ],
   "ymyl": true,
   "expert_review_needed": true,
   "site_structure": "Authority hub + narrow high-intent service page + linkable evidence assets. Not a directory. Not a marketplace.",
   "seo_moat": "Always-current per-PMS and per-utility provider how-to pages with real anonymized teardown evidence, refreshed as the parser library grows."
  },
  "search_market": {
   "primary_markets": [
    "Minnesota RUBS compliance service",
    "direct bill allocation recovery",
    "allocation leakage scan"
   ],
   "secondary_markets": [
    "Colorado HB26-1013 RUBS restart",
    "property M&A allocation diligence",
    "PMS allocation reconciliation how-to"
   ],
   "low_competition_subtopics": [
    "utility provider-specific statement quirks",
    "as-earned vs annualized allocation leakage",
    "AppFolio/Buildium direct bill reconciliation how-to"
   ],
   "high_commercial_intent": [
    "done-for-you allocation reconciliation service",
    "outsource multifamily housing allocation reconciliation",
    "allocation recovery service for multifamily housing agencies"
   ],
   "informational": [
    "is RUBS legal in Minnesota 2026",
    "how to reconcile multifamily housing master bills",
    "why is my master bill short"
   ],
   "local_intent": [],
   "transactional": [
    "RUBS completeness pack pricing",
    "book a allocation reconciliation consultation"
   ],
   "comparison": [
    "RUBS compliance pack vs Conservice managed billing",
    "RUBSClear vs Conservice vs ReSource Pro"
   ],
   "problem_solution": [
    "Minnesota RUBS admin fee cap violation what to do",
    "resident payout dispute resolution"
   ],
   "near_me": [],
   "long_tail": [
    "Minnesota electricity apportionment ban RUBS 2025",
    "as-earned allocation billing correction explained",
    "PMS360 allocation reconciliation how-to"
   ],
   "questions": [
    "what does HB26-1013 require for ratio utility billing",
    "who reviews a allocation leakage scan?",
    "how long does allocation reconciliation take?"
   ],
   "emerging": [
    "AI-assisted master bill extraction",
    "automated utility provider inquiry drafting"
   ],
   "seasonal": [
    "tax-season allocation book cleanup",
    "property M&A diligence season allocation verification"
   ],
   "underserved_serps": [
    "utility provider-specific statement quirks",
    "resident payout dispute resolution"
   ],
   "weak_serps": [
    "allocation leakage self-check",
    "allocation reconciliation checklist"
   ],
   "forum_dominated_serps": [
    "why is my master bill short",
    "utility provider billing correction explained"
   ],
   "winnable_authoritative_serps": [
    "direct bill allocation reconciliation definitive guide",
    "allocation leakage scan evidence requirements"
   ],
   "avoid_initially": [
    "multifamily housing allocation software",
    "best allocation tracking tools"
   ],
   "easy_wins": [
    "utility provider-specific statement quirks",
    "allocation reconciliation checklist",
    "resident payout dispute anatomy"
   ],
   "moderate": [
    "direct bill allocation reconciliation definitive guide",
    "property M&A allocation diligence"
   ],
   "long_term_plays": [
    "multifamily housing allocation software comparison",
    "portfolio-level multi-property reconciliation"
   ],
   "do_not_pursue": [
    "generic \"how to start a bookkeeping business\" content",
    "celebrity or trend-jacking posts",
    "AI-generated listicles"
   ]
  },
  "keyword_clusters": [
   {
    "primary": "Minnesota RUBS compliance service",
    "related": [
     "done-for-you RUBS completeness pack",
     "outsource allocation reconciliation"
    ],
    "intent": "commercial",
    "user_problem": "Property suspects RUBS overbilling exposure and needs a done-for-you completeness pack",
    "funnel": "BOFU",
    "business_value": "high",
    "ranking_difficulty": "medium",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "Dominated by enterprise SaaS vendor pages, not small-property-focused content",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Pillar / service page",
    "reason": "High buyer intent + weak SERP for our segment",
    "priority_score": 17,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "allocation leakage scan",
    "related": [
     "allocation leakage self-check",
     "how much allocation am I missing"
    ],
    "intent": "commercial",
    "user_problem": "Wants a low-commitment diagnostic before a full engagement",
    "funnel": "TOFU",
    "business_value": "high",
    "ranking_difficulty": "low",
    "conversion_potential": "high",
    "content_effort": "low",
    "serp_weakness": "No existing competitor owns this exact term",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Lead-magnet / calculator page",
    "reason": "Own a branded-term wedge outright",
    "priority_score": 16,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "why is my multifamily housing master bill short",
    "related": [
     "utility provider underpaid allocation",
     "resident payout dispute"
    ],
    "intent": "informational",
    "user_problem": "Immediate confusion moment after a light utility provider check",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "low",
    "serp_weakness": "Forum-dominated, thin",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "How-to / FAQ page",
    "reason": "Easy win + strong lead-magnet fit",
    "priority_score": 14,
    "priority": "P0",
    "bucket": "easy-win"
   }
  ],
  "topical_authority_map": {
   "core_topics": [
    "Direct-bill allocation reconciliation — definitive guide",
    "Utility Provider-quirk & discrepancy classification library",
    "Resident payout dispute resolution"
   ],
   "pillars": [
    {
     "name": "Direct-bill allocation reconciliation — definitive guide",
     "core_intent": "informational",
     "audience": "property operators and ops managers",
     "conversion_goal": "Self-check / scan request",
     "supporting_pages": [
      "What a billing correction should look like on your pack",
      "As-earned vs annualized leakage",
      "Utility Provider statement formats explained"
     ],
     "internal_links": [
      "/",
      "/resources/self-check"
     ],
     "schema": [
      "Article",
      "BreadcrumbList",
      "FAQPage (where genuine)"
     ],
     "evidence_needed": [
      "Named analyst",
      "Primary-source citations",
      "Worked example"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national (default)"
     ]
    },
    {
     "name": "RUBS Exposure Diagnostic evidence & trust",
     "core_intent": "commercial",
     "audience": "property operators",
     "conversion_goal": "Book a scan",
     "supporting_pages": [
      "Anatomy of a Leakage Scan",
      "One utility provider, 12 months, $X missing"
     ],
     "internal_links": [
      "/#diagnostic",
      "/resources/evidence"
     ],
     "schema": [
      "Article",
      "FAQPage",
      "BreadcrumbList"
     ],
     "evidence_needed": [
      "Worked evidence artifact",
      "Analyst credential"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national"
     ]
    }
   ],
   "supporting_page_types": [
    "definition / glossary",
    "how-to workflow",
    "edge-case handling",
    "worked example",
    "FAQ",
    "comparison (only when honest)",
    "evidence artifact / template"
   ]
  },
  "site_architecture": {
   "homepage_strategy": "Single-page conversion-focused microsite; deep content lives in a future /resources hub",
   "main_nav": [
    "Pricing",
    "FAQ",
    "Operating blueprint"
   ],
   "footer_nav": [
    "Compliance",
    "Operating blueprint"
   ],
   "hubs": [
    {
     "name": "Resources hub",
     "purpose": "House long-form authority content",
     "url": "/resources (future)"
    }
   ],
   "url_patterns": [
    "/rubs-compliance-completeness-pack-engine/"
   ],
   "avoid_url_patterns": [
    "Thin per-utility provider programmatic pages with no unique evidence"
   ]
  },
  "global_national": {
   "national_clusters": [
    "Direct-bill allocation reconciliation"
   ],
   "linkable_assets": [
    "Allocation Leakage Self-Check calculator"
   ],
   "original_research_ideas": [
    "Aggregate pilot-cohort leakage statistics once cohort completes"
   ],
   "international_needed": false,
   "international_notes": "US-only multifamily housing distribution regulation; no international expansion in scope"
  },
  "local_seo": {
   "justified": false,
   "reason": "Buyers search by problem/PMS platform, not location",
   "gbp_categories_primary": [],
   "gbp_categories_secondary": [],
   "location_page_rules": [],
   "citations": [],
   "review_strategy": "No fabricated reviews; real testimonials only after pilot cohort completes with permission",
   "local_schema": []
  },
  "programmatic": {
   "recommended": false,
   "reason": "No large structured dataset justifies programmatic pages at launch",
   "rules": [],
   "per_page_requirements": [],
   "quality_gates": []
  },
  "page_templates": [
   {
    "page_type": "Pillar/service page",
    "purpose": "Convert a qualified visitor into a scan request",
    "target_intent": "commercial",
    "url_pattern": "/rubs-compliance-completeness-pack-engine/",
    "title_pattern": "{Brand} — {outcome} for {audience}",
    "meta_description_pattern": "{Brand} for {audience}. {outcome} — {price/SLA}.",
    "h1_pattern": "{Outcome-led headline}",
    "outline": [
     "Hero",
     "Stat strip",
     "Pain",
     "Deliverables",
     "How it works",
     "Pricing",
     "Proof",
     "FAQ",
     "Compliance"
    ],
    "above_the_fold": [
     "[PLACEHOLDER] owner to complete"
    ],
    "internal_links": [
     "Operating blueprint dossier"
    ],
    "schema": [
     "FAQPage",
     "Service"
    ],
    "cta_strategy": "Single primary CTA (scan request), secondary deep-links only",
    "conversion_elements": [
     "Guarantee beside pricing",
     "Honest placeholder proof"
    ],
    "trust_elements": [
     "Compliance section",
     "Named analyst (pending owner action)"
    ],
    "faq_opportunities": [
     "Objection-derived FAQ"
    ],
    "media": [
     "[PLACEHOLDER] owner to complete"
    ],
    "quality_requirements": [
     "No banned phrases",
     "Contrast-checked palette"
    ],
    "anti_thin_rules": [
     "Every claim sourced or explicitly placeholdered"
    ]
   }
  ],
  "on_page_rules": {
   "title_tag": "Primary keyword + brand, under 60 chars",
   "meta_description": "Under 155 chars, states the outcome",
   "headings": "One H1, ordered H2/H3",
   "intro": "Answer the query in the first 2 sentences",
   "snippet_targeting": "Direct-answer paragraphs above the fold",
   "tables_lists": "Used for pricing and comparison content only",
   "images": "None required at launch (text-first authority content)",
   "internal_links": "Link every supporting page back to the pillar",
   "external_citations": "Link primary trade-press/vendor sources by name",
   "author_attribution": "Named analyst bio on YMYL pages",
   "freshness": "Quarterly re-verification of dollar figures and vendor findings",
   "cta_placement": "End of every page + inline after the core answer",
   "mobile": "Mobile-first responsive layout",
   "avoid": [
    "Keyword stuffing",
    "Thin AI-generated filler"
   ]
  },
  "entity_seo": {
   "main_entities": [
    "RUBSClear",
    "Reconciliation Desk",
    "RUBS Exposure Diagnostic"
   ],
   "related_entities": [
    "Conservice",
    "RealPage Utility Management",
    "Utility Ranger",
    "Utility Ranger"
   ],
   "people": [
    "Named utility-ops analyst"
   ],
   "orgs": [
    "NAA",
    "state multifamily housing departments"
   ],
   "tools": [
    "AppFolio",
    "AppFolio",
    "PMS360",
    "Rent Manager",
    "Applied Epic"
   ],
   "regulations": [
    "Minn. Stat. §504B.216",
    "Colorado HB26-1013"
   ],
   "problems": [
    "RUBS overbilling exposure",
    "Resident payout disputes"
   ],
   "solutions": [
    "RUBS Compliance Completeness Pack",
    "RUBS Exposure Diagnostic"
   ],
   "processes": [
    "Intake",
    "Matching",
    "Discrepancy review",
    "Delivery"
   ],
   "alternatives": [
    "Full managed billing (Conservice/RealPage)",
    "BPO services",
    "Specialist bookkeeping firms"
   ],
   "synonyms": [
    "ratio utility billing compliance",
    "direct-bill reconciliation",
    "allocation recovery"
   ]
  },
  "schema_strategy": [
   {
    "type": "FAQPage",
    "where": "Homepage FAQ section",
    "required_fields": [
     "mainEntity",
     "acceptedAnswer"
    ],
    "caution": "Only genuine, answered questions — no fabricated Q&A"
   },
   {
    "type": "Service",
    "where": "Homepage, with a real-entity Organization provider",
    "required_fields": [
     "provider",
     "areaServed",
     "serviceType"
    ],
    "caution": "No review/rating/aggregateRating"
   }
  ],
  "internal_linking": {
   "pillar_to_cluster": "Every pillar links to its supporting pages",
   "cluster_to_pillar": "Every supporting page links back to its pillar",
   "cluster_to_cluster": "Cross-linked where the buyer journey naturally continues",
   "service_to_location": "N/A (no location pages)",
   "faq_to_commercial": "FAQ answers link to the pricing section",
   "breadcrumbs": "Present on all supporting content pages",
   "anchor_text_rules": [
    "Descriptive, not \"click here\""
   ]
  },
  "technical_seo": {
   "crawlability": "noindex at launch until owner-action facts close",
   "indexability": "Enabled post-launch review",
   "sitemaps": "Generated once indexable",
   "robots": "noindex,nofollow at launch",
   "canonicals": "Self-canonical",
   "pagination": "N/A",
   "faceted_nav": "N/A",
   "duplicate_control": "Single canonical URL per page",
   "redirects": "N/A at launch",
   "core_web_vitals": "LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 budget enforced",
   "mobile": "Mobile-first responsive",
   "accessibility": "WCAG 2.2 AA",
   "js_seo": "Minimal JS, server-renderable content",
   "rendering": "Static self-contained HTML",
   "gsc_setup": "Pending owner action",
   "analytics_setup": "Pending owner action",
   "rank_tracking": "Pending owner action"
  },
  "eeat": {
   "author_bios": "Named analyst bio pending owner action",
   "expert_reviewers": "Named utility-ops analyst",
   "editorial_policy": "Facts cited to primary/trade-press sources; vendor-sponsored findings labeled",
   "fact_checking": "Quarterly re-verification cadence",
   "credentials": [
    "Utility-ops analyst credentials — pending owner action"
   ],
   "citations": "Every load-bearing statistic cited by source name",
   "first_hand_proof": [
    "Anonymized pilot-cohort teardowns once available"
   ],
   "update_cadence": "Quarterly",
   "monetization_disclosure": "Service pricing disclosed on the pricing section itself",
   "ymyl_notes": "Treated as YMYL due to financial-advice-adjacent content; no coverage/legal/tax advice given"
  },
  "ai_search": {
   "principles": [
    "Answer the exact question asked, directly and first",
    "Cite named sources, not vague findings"
   ],
   "tactics": [
    "FAQ schema on genuine FAQs",
    "Definitive per-topic guides answer engines can cite"
   ],
   "do_not": [
    "Fabricate statistics",
    "Claim certifications not held"
   ]
  },
  "conversion": {
   "primary_cta": "Start a free RUBS Exposure Diagnostic",
   "secondary_cta": "See what's in the pack",
   "lead_magnets": [
    "MN RUBS 12-Point Hard-Fail Checklist",
    "Master Bill Survival Kit"
   ],
   "trust_elements": [
    "Guarantee + out-clause beside pricing",
    "Compliance section with licensing boundary"
   ],
   "per_page_paths": [
    {
     "path": "Homepage -> scan request",
     "page_type": "pillar"
    }
   ],
   "tracking": "data-event taxonomy per DESIGN-STANDARD §4"
  },
  "link_earning": {
   "digital_pr_ideas": [
    "Aggregate anonymized pilot-cohort leakage statistics as original research"
   ],
   "original_research": [
    "Average allocation leakage by utility provider mix (post-pilot)"
   ],
   "directories": [
    "MN/CO apartment association vendor resource pages"
   ],
   "expert_contributions": [
    "Guest posts on PMS user-community blogs"
   ],
   "partnerships": [
    "CPA/bookkeeper referral partners"
   ],
   "avoid": [
    "Paid link schemes",
    "Low-quality directory submissions"
   ]
  },
  "roadmap_90d": [
   {
    "phase": "Launch",
    "goal": "Publish core microsite",
    "pages": [
     "Homepage"
    ],
    "keywords_targeted": [
     "direct bill allocation reconciliation service"
    ],
    "required_assets": [
     "Self-check lead magnet"
    ],
    "internal_links": [],
    "difficulty": "low",
    "business_value": "high",
    "conversion_goal": "Scan requests",
    "why_first": "Foundation for every other page"
   }
  ],
  "roadmap_12m": [
   {
    "phase": "Authority hub",
    "goal": "Build /resources content cluster",
    "pages": [
     "Definitive guide",
     "Per-PMS how-tos"
    ],
    "keywords_targeted": [
     "utility provider-specific statement quirks"
    ],
    "required_assets": [
     "Anonymized pilot-cohort statistics"
    ],
    "internal_links": [
     "Homepage"
    ],
    "difficulty": "medium",
    "business_value": "medium",
    "conversion_goal": "Organic scan requests",
    "why_first": "Compounding organic channel per the GTM kit"
   }
  ],
  "priority_pages": [
   {
    "rank": 1,
    "page_title": "RUBSClear homepage",
    "slug": "/rubs-compliance-completeness-pack-engine/",
    "page_type": "pillar/service",
    "primary_keyword": "Minnesota RUBS compliance service",
    "secondary_keywords": [
     "RUBS exposure diagnostic"
    ],
    "intent": "commercial",
    "funnel": "BOFU",
    "business_value": "high",
    "difficulty": "medium",
    "conversion_potential": "high",
    "cta": "Start a free RUBS Exposure Diagnostic",
    "schema": [
     "FAQPage",
     "Service"
    ],
    "internal_links": [
     "/resources (future)"
    ],
    "required_proof": [
     "[PLACEHOLDER] owner to complete"
    ],
    "why_opportunity": "Owns the branded wedge term outright",
    "production_priority": "P0",
    "scope": "Launch"
   }
  ],
  "competitor_gaps": {
   "typical_competitor_types": [
    "Enterprise managed-billing vendor sites (Conservice/RealPage)",
    "BPO service pages",
    "Generic bookkeeping content"
   ],
   "common_weaknesses": [
    "Written for large institutional owners, not the 50-2,000-door mid-market operator",
    "No utility provider-specific evidence"
   ],
   "how_to_beat_them": [
    "Publish Minnesota-specific, statute-citing, evidence-first content the enterprise vendors skip"
   ]
  },
  "metrics": {
   "weekly": [
    "Scan requests",
    "Self-check completions"
   ],
   "monthly": [
    "Organic scan requests",
    "Keyword ranking movement on P0 terms"
   ],
   "quarterly": [
    "Fresh-verification pass on all cited statistics"
   ],
   "annual": [
    "Full content-cluster audit"
   ]
  },
  "risks": [
   {
    "risk": "YMYL scrutiny on financial-outcome findings without named-analyst attribution",
    "applies": true,
    "mitigation": "Named analyst attribution and quarterly re-verification"
   },
   {
    "risk": "Competitor content targeting the same small-property segment",
    "applies": true,
    "mitigation": "Named analyst attribution and quarterly re-verification"
   }
  ],
  "first_20_pages": [
   "Homepage",
   "Allocation Leakage Self-Check",
   "Master Bill Survival Kit",
   "Direct-bill reconciliation definitive guide"
  ],
  "first_10_tech_fixes": [
   "Confirm noindex removed only after owner-action facts close",
   "Verify FAQ schema validates"
  ],
  "first_10_authority_actions": [
   "Publish first 3 educational posts",
   "Launch the self-check lead magnet",
   "Pitch first association webinar"
  ],
  "final_recommendation": "Launch noindexed until owner-action facts (entity, analyst identity, trademark clearance) close; then pursue a narrow, evidence-first authority strategy targeting the 50-2,000-door property segment the enterprise SEO content ignores.",
  "disclaimers": [
   "Not tax, legal, or multifamily housing advice",
   "Vendor-sponsored statistics labeled as such",
   "No fabricated reviews or testimonials"
  ]
 },
 "microsite": {
  "category": "Multifamily housing / RUBS (Ratio Utility Billing System) compliance and allocation operations",
  "shortTitle": "RUBSClear",
  "audience": "Minnesota (then Colorado) multifamily owners and PMs, 50-2,000 doors",
  "problem": "A Minnesota multifamily property runs RUBS on a spreadsheet or thin vendor relationship, with no reliable way to prove aggregate tenant charges stay under the master bill, common areas are excluded, fee caps are respected, and every active lease discloses the allocation formula.",
  "offer": "On RUBSClear, properties stop guessing and get a release-ready RUBS Compliance Completeness Pack — reviewed and signed by a utility-ops analyst.",
  "faq": [
   {
    "q": "Is RUBSClear for the property office or for a bookkeeper?",
    "a": "For the property operator, owner, or lease-admin/utility coordinator directly — no bookkeeper hand-off required."
   },
   {
    "q": "How is a Completeness Pack defensible?",
    "a": "Every discrepancy claim traces to a source statement citation and an PMS-policy reference, and every dollar figure ties to your own master bills. Missing items ship as explicit evidence gaps, never invented. An utility-ops analyst signs every Compliance Scorecard before it's delivered."
   },
   {
    "q": "What arrives at the end of a billing cycle?",
    "a": "A Completeness Pack: the signed Compliance Scorecard, the Exception Log, a recovered-dollars report, resident payout statements, and a posting file your bookkeeper imports straight into QuickBooks or your PMS."
   },
   {
    "q": "What if we're also running a benefits or Medicare book with per-member-per-month allocations?",
    "a": "We screen both your standard and as-earned/PMPM allocation structures against their own utility provider-quirk rules in the same cycle. Mixed-structure books land in the Plus or Pro tier because the matching work is heavier."
   },
   {
    "q": "How fast, and what do you need from us?",
    "a": "5 business days per ongoing cycle (10 for the first RUBS Exposure Diagnostic). We need your intake evidence set, your utility rule-card list, your last 3 months of master bills, and a signed authorization so we can draft (and, if you choose, send) utility provider inquiries in your name."
   },
   {
    "q": "Do you give legal opinions or guarantee compliance outcomes?",
    "a": "No. We reconcile allocation income and chase utility provider inquiries only. Coverage and findings determinations stay with your own licensed staff; disputes beyond a routine inquiry go to your own counsel."
   },
   {
    "q": "Are you a debt collector acting on our behalf?",
    "a": "No. We are your authorized administrative agent under a written authorization you control and can revoke at any time. Every inquiry goes out under your property's own name — this is receivables follow-up between contracted business parties, never third-party debt collection."
   },
   {
    "q": "What does it cost?",
    "a": "RUBS Exposure Diagnostic: $495 flat, credited to your first month, free for the first 10 pilot agencies. Reconciliation Desk: $600-$2,500/mo by statement volume. Never hourly, never a mandatory percentage of what you recover."
   },
   {
    "q": "Can this work outside a one-time scan?",
    "a": "Yes — the Reconciliation Desk is the recurring line: a monthly cycle for as long as you carry utility rule-cards, not a one-time event tied to a single deadline."
   }
  ],
  "process": [
   {
    "title": "Intake: send your property's records",
    "body": "Send 3-6 months of master bills, rent roll, sample leases, current allocation formula, and fee schedule through a secure upload."
   },
   {
    "title": "Normalize and match",
    "body": "Each master bill is extracted into a common schema and reconciled to the penny against its own stated total, then matched against your PMS property portfolio line by line."
   },
   {
    "title": "Classify in deterministic rules",
    "body": "AI drafts discrepancy classifications and utility provider inquiries from your structured data. Deterministic code — not a language model — confirms every pack ties to the penny, sets aging clocks, and screens for billing correction/rate-mismatch patterns."
   },
   {
    "title": "Analyst release gate",
    "body": "An utility-ops analyst certifies every release. Anything ambiguous — a low-confidence match, a high-value discrepancy, a first-time utility provider — is held for a second analyst before anything ships."
   },
   {
    "title": "Deliver and track",
    "body": "The Completeness Pack ships by the 5th business day; approved utility provider inquiries go out the same day, with aging tracked automatically."
   }
  ],
  "northStarCta": {
   "label": "Start a free RUBS Exposure Diagnostic",
   "href": "#diagnostic",
   "secondary_label": "See what's in the pack",
   "secondary_href": "#deliverables"
  },
  "trust": {
   "standards": [
    "Documentation and allocation-operations service — not a law firm, not a utility, not a collection agency",
    "Every discrepancy claim traces to a source citation; gaps ship as explicit notes",
    "Analyst release on every pack; second analyst on high-value logs"
   ],
   "response_time": "5 business days per cycle (2 business days for the free diagnostic)",
   "data_handling": "Per-property isolated files, least-privilege access, hashed audit trail"
  },
  "hook": "Free RUBS Exposure Diagnostic tells you exactly which of the six hard-fail checks your RUBS program clears or misses.",
  "sub_headline": "You send your master bills and leases. You get back a Compliance Scorecard, reviewed and signed by a utility-ops analyst.",
  "dream_outcome": "A release-ready RUBS Compliance Completeness Pack that ends every argument about whether the RUBS program overbills or discloses correctly.",
  "specific_pains": [
   "A 340-door Minnesota property gets one master bill a month and nobody has hours to verify it against a rent roll, a fee schedule, and 340 leases",
   "Ask for the reconciliation record on last quarter's allocations and someone opens a folder of inconsistent PDFs — that is the record a resident or an acquirer would find first.",
   "A general model can draft a plausible-looking discrepancy claim; only a versioned allocation-schedule match with a analyst release produces a pack nobody disputes later.",
   "The property may also run a mixed water/sewer/trash/gas allocation program with month-to-month, PMPM allocations — miss that structure and you've reconciled the wrong math on part of the book.",
   "A resident reads the payout statement as a package: matched lines, exception log, and the analyst's signature. Miss any piece and the argument starts over."
  ],
  "cost_of_inaction": "Every billing cycle without a Completeness Pack is another cycle of PUC-fine exposure ($100-$1,000 per violation) and eviction-risk uncertainty.",
  "mechanism": {
   "name": "The RUBSClear billing-cycle compliance engine",
   "steps": [
    {
     "title": "Intake: send your property's records",
     "body": "Send 3-6 months of master bills, rent roll, sample leases, current allocation formula, and fee schedule through a secure upload."
    },
    {
     "title": "Normalize and match",
     "body": "Each master bill is extracted into a common schema and reconciled to the penny against its own stated total, then matched against your PMS property portfolio line by line."
    },
    {
     "title": "Classify in deterministic rules",
     "body": "AI drafts discrepancy classifications and utility provider inquiries from your structured data. Deterministic code — not a language model — confirms every pack ties to the penny, sets aging clocks, and screens for billing correction/rate-mismatch patterns."
    },
    {
     "title": "Analyst release gate",
     "body": "An utility-ops analyst certifies every release. Anything ambiguous — a low-confidence match, a high-value discrepancy, a first-time utility provider — is held for a second analyst before anything ships."
    },
    {
     "title": "Deliver and track",
     "body": "The Completeness Pack ships by the 5th business day; approved utility provider inquiries go out the same day, with aging tracked automatically."
    }
   ]
  },
  "offer_stack": [
   {
    "item": "Completeness Pack per property, per billing cycle",
    "note": "Compliance Scorecard, Corrected Allocation Workbook, Lease Disclosure Addendum draft, Resident Statement Template, Exception Log, Audit Trail"
   },
   {
    "item": "RUBS Exposure Diagnostic",
    "note": "one-time 3-month lookback wedge, tied to a rule-versioned allocation-schedule match; a utility provider we can't confirm a discrepancy for ships as an explicit note, never a guess"
   },
   {
    "item": "Analyst release on every pack",
    "note": "an utility-ops analyst certifies every pack; a second analyst reviews any log over $2,500 or a first-time utility provider"
   },
   {
    "item": "Property-authorized utility provider chase",
    "note": "submitted directly to utility provider allocation departments under your signed authorization"
   },
   {
    "item": "Diligence Tie-Out add-on",
    "note": "for property M&A season: organized, analyst-attested revenue verification handed to a buyer's or seller's advisor — never a guarantee of any deal term"
   }
  ],
  "guarantee": "If a delivered Completeness Pack is missing any required hard-fail check, we correct and reissue it at no charge.",
  "urgency": "There's no single filing deadline here — the exposure compounds every billing cycle the RUBS program runs unverified.",
  "objections": [
   {
    "q": "\"Aren't you a law firm, or will you guarantee our legal compliance?\"",
    "a": "No. RUBSClear is a documentation and allocation-operations service, not a law firm. We never guarantee a legal outcome or fine avoidance."
   },
   {
    "q": "\"Doesn't our PMS already handle this?\"",
    "a": "Most PMS platforms ship some reconciliation module, but it still requires a human to do the matching — it's a tool, not an outcome. Almost nobody at a small property has the hours to actually run it every month. That's the specific gap we fill."
   },
   {
    "q": "\"Will we be relying on an AI-drafted pack with no human check?\"",
    "a": "No. Every Completeness Pack is reviewed and signed by a named utility-ops analyst before it's delivered. AI drafts; a human authorizes."
   },
   {
    "q": "\"Do you need a law license to do this?\"",
    "a": "No. We perform back-office accounting and reconciliation only — no selling, soliciting, or negotiating multifamily housing, and no contact framed as legal advice. That keeps this outside the UPL (unauthorized practice of law) boundary; see the compliance section for the full boundary."
   }
  ],
  "who_this_is_not_for": [
   "Properties under 50 doors — statement volume rarely justifies a paid Completeness Pack; we say so for free rather than sell a diagnostic",
   "Properties wanting us to give a legal opinion, litigation strategy, or eviction-related advice — that's your own licensed staff's role; we reconcile allocation income, never findings.",
   "Agencies wanting a guaranteed recovery number before the scan runs — nobody can honestly sell that, so we don't."
  ],
  "proof_pillars": [
   {
    "title": "Every hard fail tied to a statute citation",
    "body": "Every Compliance Scorecard finding traces to a specific statute section and a source master-bill line — never a vague warning."
   },
   {
    "title": "Analyst-released, every time",
    "body": "No pack auto-ships. A named utility-ops analyst certifies every pack; a second analyst covers any high-value or first-time-utility provider log."
   },
   {
    "title": "Penny-perfect, by code",
    "body": "Every pack's hard-fail clearance to statement totals is checked in deterministic code against the current fee schedule — the pack renders the math, it doesn't describe it."
   }
  ],
  "stakes_line": "Unverified RUBS means unproven RUBS: a PUC complaint or a tenant's attorney doesn't wait for a convenient cycle to ask for the math.",
  "deliverable": "Completeness Pack",
  "unit_of_work": "billing cycle",
  "lexicon": {
   "regulator": "Minnesota PUC",
   "regulator_full": "Minnesota Public Utilities Commission and Attorney General's Office (RUBS/utility-billing statute scope); Colorado equivalents on expansion",
   "statute": "Minn. Stat. §504B.216; Colorado HB26-1013 (amending §6-1-737)",
   "statute_frame": "the intake-to-pack workflow where an unverified billing cycle is the exposure, not any single filing deadline",
   "persona": "Property Operator",
   "persona_moment": "You're the PM of a 340-door Minnesota property. It's renewal season and a resident just asked how their utility bill is calculated.",
   "trigger_moment": "a lease renewal season, a PUC complaint, a tenant's attorney request, or an eviction blocked by a defective utility bill",
   "enforcement_stakes": "billing cycles age past the point any hard fail can be quietly corrected before a tenant or regulator notices",
   "retention": "the full audit trail of every billing cycle and hard-fail clearance",
   "cta_verb": "Start a free RUBS Exposure Diagnostic",
   "intake_checklist": [
    "3-6 months of master utility bills",
    "Utility Provider/utility rule-card appointment list",
    "Last 3 months of master bills (PDF, portal CSV, or paper)",
    "Signed utility provider-communication authorization"
   ],
   "regulator_faqs": [
    {
     "q": "Does the utility provider know RUBSClear is involved?",
     "a": "No contact is needed — RUBSClear only reads the master bill the property already receives; it never contacts the utility provider directly."
    },
    {
     "q": "Will a utility provider treat a RUBSClear-drafted inquiry differently than one you send yourself?",
     "a": "No — it's evaluated the same either way. What changes is completeness and evidence: a analyst-approved inquiry cites the specific master-bill line and expected amount, which resolves faster than an unevidenced question."
    }
   ],
   "trust_standards_specific": [
    "[PLACEHOLDER] owner to complete"
   ]
  },
  "proof_angle": {
   "id": "compliance-readiness",
   "headline": "The next PUC complaint or tenant attorney request lands on a signed Compliance Scorecard, not a guess",
   "lever": "RUBSClear stores every hard-fail check, exception, and analyst release-gate signature in the Audit Trail",
   "outcome_verb": "answer",
   "outcome_frame": "answer a PUC complaint or tenant attorney request in minutes instead of days",
   "proof_promise": "The Compliance Scorecard is the answer — analyst-signed, hash-stamped, statute-cited"
  },
  "indexable": true,
  "ubiquitousLanguage": {
   "audience": "Minnesota (then Colorado) multifamily owners and PMs, 50-2,000 doors",
   "domain": "Minnesota/Colorado RUBS compliance documentation and allocation operations",
   "deliverable": "Completeness Pack + analyst release",
   "reviewer": "utility-ops analyst",
   "record": "billing-cycle history register (Audit Trail)",
   "unit_of_work": "billing cycle",
   "cta_primary": "Start a free RUBS Exposure Diagnostic",
   "cta_secondary": "See what's in the pack",
   "regulator": "Minnesota PUC",
   "regulator_full": "Minnesota Public Utilities Commission and Attorney General's Office",
   "statute": "Minn. Stat. §504B.216; Colorado HB26-1013",
   "trigger_moment": "a lease renewal season, a PUC complaint, or an eviction blocked by a defective utility bill",
   "event_intake_started": "rubs_compliance_completeness_pack_engine_intake_started",
   "event_conversation_requested": "rubs_compliance_completeness_pack_engine_conversation_requested"
  }
 },
 "evidence": [
  {
   "id": "rubs-compliance-completeness-pack-engine-e1",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Regulatory",
   "claim_or_finding": "Minn. Stat. §504B.216 caps the admin billing fee at $8.00/period and the late fee at $5.00/month total; bans electricity apportionment for leases starting on/after 1/1/2025",
   "status": "verified",
   "evidence": "MN Revisor's Office statute text, re-verified July 2026 against MnREIA's landlord guide",
   "verification_command": "Re-verify statute text and vendor pricing pages quarterly.",
   "fix_owner": "owner",
   "remediation": "Resolved — verified July 2026. Remaining owner action: confirm named utility-ops analyst and legal entity before first paid pack.",
   "severity": "info"
  },
  {
   "id": "rubs-compliance-completeness-pack-engine-e2",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Regulatory",
   "claim_or_finding": "Colorado HB26-1013 (signed 3/26/2026) requires no overbilling, no markup beyond 2%-or-$10, common-area exclusion, and clear lease disclosure; new-construction permits after 7/1/2027 require direct metering",
   "status": "verified",
   "evidence": "Colorado General Assembly bill text, re-verified July 2026 against Holland & Knight's April 2026 client alert",
   "verification_command": "Re-verify statute text and vendor pricing pages quarterly.",
   "fix_owner": "owner",
   "remediation": "Resolved — verified July 2026. Remaining owner action: confirm named utility-ops analyst and legal entity before first paid pack.",
   "severity": "info"
  },
  {
   "id": "rubs-compliance-completeness-pack-engine-e3",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Market",
   "claim_or_finding": "Full managed RUBS billing runs roughly $5-$8/door/month (Conservice, RealPage); operator-run software roughly $3/door/month (Utility Ranger)",
   "status": "verified",
   "evidence": "Vendor pricing pages, re-verified July 2026",
   "verification_command": "Re-verify statute text and vendor pricing pages quarterly.",
   "fix_owner": "owner",
   "remediation": "Resolved — verified July 2026. Remaining owner action: confirm named utility-ops analyst and legal entity before first paid pack.",
   "severity": "info"
  },
  {
   "id": "rubs-compliance-completeness-pack-engine-e4",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Market",
   "claim_or_finding": "Roughly 30% of conventional multifamily communities use RUBS; a 2026 Zego survey found ~33% of surveyed PMs still bill usage-based utilities in-house",
   "status": "verified",
   "evidence": "NAA-cited industry synthesis; Zego 2026 survey via trade press, re-verified July 2026",
   "verification_command": "Re-verify statute text and vendor pricing pages quarterly.",
   "fix_owner": "owner",
   "remediation": "Resolved — verified July 2026. Remaining owner action: confirm named utility-ops analyst and legal entity before first paid pack.",
   "severity": "info"
  },
  {
   "id": "rubs-compliance-completeness-pack-engine-e5",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Identity",
   "claim_or_finding": "Operating entity: Your Deputy, Obuke LLC, support@yourdeputy.com",
   "status": "verified",
   "evidence": "Owner-supplied entity and support email; reflected in the landing page footer",
   "verification_command": "Re-verify statute text and vendor pricing pages quarterly.",
   "fix_owner": "owner",
   "remediation": "Resolved — verified July 2026. Remaining owner action: confirm named utility-ops analyst and legal entity before first paid pack.",
   "severity": "info"
  },
  {
   "id": "rubs-compliance-completeness-pack-engine-e6",
   "business_slug": "rubs-compliance-completeness-pack-engine",
   "area": "Licensing boundary",
   "claim_or_finding": "RUBSClear never gives a legal opinion or guaranteed compliance outcome (licensed counsel's exclusive function) and never guarantees a specific fine-avoidance or tenant-action outcome.",
   "status": "verified",
   "evidence": "Standard UPL (unauthorized practice of law) scope as described by state bar guidance on non-lawyer documentation services; verbatim disclaimer present on the landing page and compliance-checklist.md.",
   "verification_command": "Inspect /rubs-compliance-completeness-pack-engine/ compliance section and builds/rubs-compliance-completeness-pack-engine/compliance-checklist.md for verbatim disclaimer.",
   "fix_owner": "engineering",
   "remediation": "None — enforced by template and manual review.",
   "severity": "low"
  }
 ],
 "seo_pages": {
  "id": "seo-rubs-compliance-completeness-pack-engine",
  "business_slug": "rubs-compliance-completeness-pack-engine",
  "route": "/rubs-compliance-completeness-pack-engine",
  "title": "RUBSClear — RUBS compliance completeness packs for Minnesota multifamily",
  "description": "RUBSClear for Minnesota (then Colorado) multifamily operators. A release-ready RUBS Compliance Completeness Pack — never hourly.",
  "canonical": "/rubs-compliance-completeness-pack-engine",
  "og_title": "RUBSClear — RUBS Compliance Completeness Pack Engine",
  "og_description": "RUBSClear for Minnesota (then Colorado) multifamily operators. A release-ready RUBS Compliance Completeness Pack — never hourly.",
  "schema_type": "FAQPage",
  "schema_status": "pending-owner-facts",
  "sitemap_include": false,
  "noindex": true
 },
 "vertical_style": {
  "accent": "ledger-green",
  "signature": "Ledger-desk cards with a hard-fail-status chip",
  "layout": "Compliance completeness desk index",
  "anti": "Proptech gradient hero, stock handshake imagery, and alarmist red banners"
 },
 "canva": {
  "slug": "rubs-compliance-completeness-pack-engine",
  "territory": "Ledger Desk",
  "family": {
   "id": "multifamily-compliance-back-office",
   "name": "Multifamily housing / RUBS compliance back-office",
   "motion": "calm"
  },
  "tokens": {
   "brand": "158 45% 24%",
   "brand-fg": "45 25% 96%",
   "surface": "45 25% 96%",
   "ink": "158 20% 14%",
   "muted": "158 10% 38%",
   "accent": "28 85% 52%"
  },
  "type": {
   "display": "Georgia",
   "body": "Source Sans 3",
   "fonts_url": ""
  },
  "scale": {
   "h1": "clamp(2.5rem, 5.5vw, 4.25rem)",
   "h2": "clamp(1.75rem, 3vw, 2.5rem)",
   "h3": "clamp(1.25rem, 2vw, 1.5rem)",
   "body": "clamp(1rem, 1.1vw, 1.125rem)",
   "small": "0.8125rem",
   "tracking_display": "-0.02em",
   "tracking_body": "-0.005em",
   "weight_display": 700,
   "weight_body": 450
  },
  "spacing": {
   "card_padding": "1.75rem",
   "card_radius": "0.35rem",
   "card_shadow": "0 0 0 1px hsl(var(--ink) / 0.08)",
   "section_gap": "clamp(3.5rem, 8vw, 6.5rem)",
   "hero_gap": "clamp(1.25rem, 2vw, 2rem)"
  },
  "layout": {
   "hero": "split-primary",
   "card": "elevated-soft",
   "cta": "solid-brand",
   "archetype": "pack",
   "card_silhouette": "flat-outline",
   "button_geometry": "rounded"
  },
  "background": {
   "hero_gradient": "radial-gradient(1100px 600px at 8% -10%, hsl(158 45% 24% / 0.16), transparent 60%)",
   "cta_gradient": "linear-gradient(135deg, hsl(158 45% 24%), hsl(28 85% 52%))",
   "section_wash": "linear-gradient(180deg, hsl(45 25% 96%) 0%, hsl(158 45% 24% / 0.05) 100%)"
  },
  "motif": "Master-bill-stack-to-cleared-scorecard cover art"
 },
 "capabilities": {
  "marketing": true,
  "portal": false,
  "ops": true,
  "chatbot": false,
  "payments": false
 },
 "generated_at": "2026-07-13T13:02:00Z",
 "checksum": "sha256:generated-locally"
}