{
 "version": "1.8.0",
 "slug": "mhc-notice-disclosure-compliance-desk",
 "title": "ParkNotice Clear — The MHC Notice & Disclosure Compliance Desk",
 "vertical": "Compliance / regulatory documentation",
 "seed": {
  "s": "mhc-notice-disclosure-compliance-desk",
  "t": "ParkNotice Clear — The MHC Notice & Disclosure Compliance Desk",
  "v": "Compliance / regulatory documentation",
  "r": "Medium",
  "m": "M"
 },
 "product": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "project_name": "ParkNotice Clear",
  "project_type": "state-statute-verified notice and disclosure compliance drafting desk",
  "vertical": "Compliance / regulatory documentation",
  "audience": "independent manufactured-housing-community (MHC) owner-operators and their community managers / regional property managers",
  "geography": "US, Washington-only beachhead at launch (verified against WA HB 1217 and RCW 59.20.080); Oregon, California, Minnesota, and Illinois rulebooks researched next; each new state gated on counsel review before activation",
  "scale_expectation": "5 pilot WA operators in month one, capped by design; 3-15 communities per operator; per-community, per-trigger-event pricing",
  "core_workflows": [
   "Trigger-event intake & rent-roll/lease/prior-notice normalization",
   "Rulebook lookup & state-statute matching",
   "AI-drafted notice/disclosure language & deterministic checklist scoring",
   "Compliance-analyst release, counsel approval, delivery & proof-of-service recording"
  ],
  "discovery": {
   "one_line_purpose": "On ParkNotice Clear, MHC owner-operators stop guessing whether a rent-increase, rule-change, zoning-petition, or park-closure notice meets their state's MHC-specific landlord-tenant act, and start shipping a state-statute-verified Notice & Disclosure Compliance Packet. Every trigger event is checked against the counsel-reviewed rulebook, drafted by AI, run through a deterministic checklist, and released by a compliance analyst — with counsel review on every closure, first-of-kind, or contested case.",
   "primary_users": [
    "Independent / small-portfolio MHC owner-operators, 1-15 communities (economic decision-maker, bears liability, duty-holder of record)",
    "Community manager / regional property manager (day-to-day champion who drafts notices today)",
    "Compliance analyst (non-attorney, releases standard-tier packets)",
    "Contracted counsel (licensed attorney, approves closures/first-of-kind/contested cases)"
   ],
   "jobs_to_be_done": [
    "Get a rent-increase, rule-change, zoning-petition, or closure notice verified against the correct state's MHC statute before it goes out, without hiring outside counsel reactively",
    "Prove, if challenged, that the notice period, cap/limit, mandated content, print format, and delivery method were all correct on the day it was sent",
    "Avoid the gap between ordinary residential landlord-tenant law and the more protective, more litigated MHC-specific statute that most general property-management software never checks"
   ],
   "value_prop": "ParkNotice Clear turns a trigger event — rent increase, rule change, zoning petition, or park closure — into a state-statute-verified, deadline-driven Notice & Disclosure Compliance Packet: content, timing, delivery method, and print format checked against that state's MHC-specific landlord-tenant act, drafted by AI against a counsel-reviewed rulebook, released by a compliance analyst, escalated to licensed counsel on every closure or contested case. The community owner remains the sender and duty-holder of record.",
   "competitors": [
    "MHC-specific property-management software (Zego, Innago, BC Solutions) that stores documents and automates rent collection but does not verify statutory notice compliance",
    "Outside counsel engaged only reactively, after a notice is already contested",
    "The community manager doing it themselves from a template, with no state-statute verification"
   ],
   "differentiation": "A done-for-you compliance back office, not a document-storage portal: a counsel-reviewed, version-controlled, state-by-state MHC statute rulebook; a compliance-analyst release gate on every standard-tier packet; mandatory counsel review on every closure, first-of-kind, or contested case; and a proof-of-service archive — never a guess at whether a notice will hold up.",
   "positioning_statement": "For independent MHC owner-operators who draft rent-increase and closure notices themselves or via a community manager with no in-house counsel, ParkNotice Clear is the done-for-you Notice & Disclosure Compliance Packet service that verifies every trigger-event notice against the correct state's MHC-specific statute in 5 business days — unlike general MHC property-management software (Zego, Innago, BC Solutions), which stores documents but never checks statutory compliance, or reactive outside counsel, which is engaged only after a notice is already contested."
  },
  "assumptions": [
   {
    "id": "mhc-notice-disclosure-compliance-desk-a1",
    "statement": "Independent MHC owner-operators will pay $349-$799 per community per cycle for a state-law-verified rent-increase notice over drafting it themselves.",
    "confidence": "medium",
    "impact_if_wrong": "severe",
    "revisit_trigger": "First 5 priced pilot engagements in Washington — reject if willingness-to-pay signal is absent."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-a2",
    "statement": "A community's rent roll, lease terms, and prior-notice history contain enough structured data to draft a complete packet without a direct MHC property-management-software integration at launch.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "First real pilot intake cycle."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-a3",
    "statement": "Community owners will accept a documentation-and-compliance-preparation service that never signs, files, or represents them — remaining the sender and duty-holder of record.",
    "confidence": "high",
    "impact_if_wrong": "severe",
    "revisit_trigger": "First client-facing pilot rollout and every engagement letter."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-a4",
    "statement": "Preparing state-statute-verified notice documentation from a counsel-approved rulebook and templates does not itself constitute the unauthorized practice of law when the community owner signs and sends under their own name.",
    "confidence": "medium",
    "impact_if_wrong": "severe",
    "revisit_trigger": "Counsel review before each new state activates; ongoing UPL-boundary review."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-a5",
    "statement": "Single-tenant per community is not required for the first cohort — logical isolation with row-level auth is acceptable.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "Any prospect with a hard single-tenant SOC/ISO clause."
   }
  ],
  "unknowns": [
   {
    "id": "mhc-notice-disclosure-compliance-desk-u1",
    "question": "Which named compliance analyst and contracted counsel will the pilot use at launch?",
    "blocks": "Any commercial engagement; client-facing delivery.",
    "resolution_path": "Named analyst + contracted-counsel engagement letter on file before commercial engagement. [PLACEHOLDER: populate once contracted]"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-u2",
    "question": "What is the actual willingness-to-pay within the $349-$799 rent-increase band, and does the founding-cohort $249-$549 price convert?",
    "blocks": "Pricing hypothesis; unit economics.",
    "resolution_path": "5 priced (never free) design-partner pilot engagements in Washington with an explicit pricing conversation."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-u3",
    "question": "Does the free Gap Scan convert to a paid packet at the 30-50% target rate?",
    "blocks": "GTM channel prioritization; CAC payback assumption.",
    "resolution_path": "Run 10-15 Gap Scans; kill switch if conversion is weak after the first 10-15 scans."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-u4",
    "question": "Which MHC property-management-software export formats must this integrate with beyond manual upload?",
    "blocks": "Architecture module boundaries; extraction-prompt design.",
    "resolution_path": "Design-partner tech-inventory questionnaire (Zego, Innago, BC Solutions)."
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-u5",
    "question": "Does any beachhead-state jurisdiction impose a data-residency or on-prem constraint given tenant PII in rent rolls/leases?",
    "blocks": "Deployment topology; hosting/region choice.",
    "resolution_path": "Vendor-diligence questionnaire from first pilot operator."
   }
  ],
  "expert_panel": [
   {
    "role": "Product Strategy",
    "key_concern": "Is the ICP narrow enough to earn a first priced-pilot cohort?",
    "recommendation": "Constrain launch to Washington-only, Rent-Increase Notice Compliance Packet only; broaden state and packet-type coverage only after 5 pilots close.",
    "dissent": "May under-price total addressable market (43,000+ communities) and slow the expansion narrative."
   },
   {
    "role": "Software Architecture",
    "key_concern": "Are we defaulting to microservices/serverless without justification?",
    "recommendation": "Single deployable modular monolith; manual-first fulfillment (spreadsheet rulebook + counsel-reviewed template) before any automation is built.",
    "dissent": "May feel unsophisticated to enterprise reviewers who expect a service-mesh diagram."
   },
   {
    "role": "Frontend / UX",
    "key_concern": "Is the rulebook citation trail visible in every workflow?",
    "recommendation": "Every packet view must render trigger event → rulebook match → deterministic checklist → analyst/counsel signature in one glance.",
    "dissent": "Adds vertical density that non-domain reviewers may call cluttered."
   },
   {
    "role": "Backend / Data",
    "key_concern": "Is the proof-of-service archive append-only and reconstructable?",
    "recommendation": "Event-sourced audit log for all state transitions; snapshots for read models.",
    "dissent": "Higher write-path complexity than plain CRUD; discipline required on schema evolution."
   },
   {
    "role": "AI / ML",
    "key_concern": "Are AI-drafted notices grounded, cited to the rulebook, and analyst-gated?",
    "recommendation": "Retrieval-first drafting against the versioned rulebook with source citations, structured output validation, and a human chokepoint before anything ships.",
    "dissent": "Slower than open-ended chat; may frustrate prospects expecting 'agentic magic'."
   },
   {
    "role": "Security",
    "key_concern": "Is the STRIDE surface documented and mitigated given tenant PII in rent rolls and leases?",
    "recommendation": "Threat model per module, per-community isolation with row-level auth, secrets in managed KMS, dependency scanning in CI.",
    "dissent": "Overhead in early prototype; some controls can wait until first paying pilot."
   },
   {
    "role": "Privacy / Compliance",
    "key_concern": "Is the UPL boundary realistic and actively managed for a year-one team?",
    "recommendation": "Counsel-approved rulebook and templates only; community owner always signs and sends; anything outside the standard verified pattern escalates to licensed counsel structurally, not by discretion.",
    "dissent": "May slow scale in ambiguous or first-of-kind cases."
   },
   {
    "role": "DevOps / Reliability",
    "key_concern": "Is the ops model boring enough to run without a dedicated SRE during manual-first fulfillment?",
    "recommendation": "Single production region + managed database + Vercel/Cloud edge; SLO published as availability + p95 latency only.",
    "dissent": "Single region concentrates risk during regional outages."
   },
   {
    "role": "Data / Analytics",
    "key_concern": "Are the leading indicators (Gap Scan → paid conversion) wired before launch?",
    "recommendation": "Instrument Gap Scan submission, intake-to-delivery cycle time, and analyst/counsel release events; ship dashboards before the first pilot.",
    "dissent": "Analytics scope-creep can steal weeks from core rulebook work."
   },
   {
    "role": "Accessibility",
    "key_concern": "Does the workflow meet WCAG 2.2 AA for every screen an analyst or counsel uses?",
    "recommendation": "Enforce keyboard-only walkthrough for every workflow; add axe-core to CI on the analyst/counsel surfaces.",
    "dissent": "Density-heavy vertical UIs are hard to ship AA-clean quickly."
   },
   {
    "role": "SEO / Content",
    "key_concern": "Is the microsite claim honest and gated on evidence, never a compliance or legal-advice guarantee?",
    "recommendation": "State-specific topical-authority content only; no fake reviews, no LocalBusiness identity schema, no 'won't be challenged' claims until owner-facts close.",
    "dissent": "Slower content velocity than a generic SaaS blog."
   },
   {
    "role": "Executive Sponsor",
    "key_concern": "Is there a written kill criterion?",
    "recommendation": "Kill/pivot decision at 90 days if Gap Scan-to-paid conversion is weak after 10-15 scans, or if a UPL review confirms broader exposure than expected.",
    "dissent": "Founders often resist naming kill criteria in writing."
   }
  ],
  "strategy": {
   "business_model": "B2B flat fee per Notice & Disclosure Compliance Packet, tiered by lot count, plus a Portfolio Retainer subscription for 3+ communities — never hourly, never a percentage of the increase amount",
   "revenue_streams": [
    "Rent-Increase Notice Compliance Packet ($349-$799 per community per cycle; founding-cohort $249-$549)",
    "Park Rule Change / Lease Amendment Disclosure Packet ($299-$599 flat)",
    "Zoning-Petition Notice Packet ($199-$399 flat, rush-priced for WA's 5-day statutory window)",
    "Park Closure / Change-of-Use Compliance Packet ($3,500-$8,500 flat, mandatory counsel review baked in)",
    "Portfolio Retainer for 3+ communities ($899-$2,900/month)"
   ],
   "moat": [
    "Counsel-reviewed, version-controlled, state-by-state MHC statute rulebook",
    "Compliance-analyst + counsel release discipline with a proof-of-service archive",
    "Beachhead-state depth (WA HB 1217, RCW 59.20.080) ahead of general MHC property-management software vendors"
   ],
   "gtm": [
    "Founder-led, priced (never free) pilot cohort — 5 independent WA operators, capped by design",
    "State MHC owner-association outreach + trade press (MHI, MHInsider, regional trade outlets)",
    "Free MHC Notice Compliance Gap Scan lead magnet"
   ],
   "pricing_hypothesis": "Launch at the founding-cohort rate of $249-$549 per community per cycle for the Rent-Increase Notice Compliance Packet (low end of the $349-$799 standard band); validate willingness-to-pay across the first 5 priced pilots before standard-tier pricing.",
   "kill_criteria": [
    "No signed priced-pilot engagement in 4 weeks",
    "Gap Scan-to-paid conversion below target after the first 10-15 scans",
    "Compliance-analyst or counsel release cycle exceeds 5 business days after Phase 1",
    "A state statute or UPL review confirms the documentation-preparation pattern sweeps into the unauthorized practice of law"
   ]
  },
  "security": {
   "stride": [
    {
     "threat": "Spoofing",
     "scenario": "Attacker attempts to impersonate a compliance analyst or counsel to release a fabricated Notice & Disclosure Compliance Packet.",
     "mitigation": "SSO with MFA; analyst/counsel signatures bound to a cryptographic session claim, not a form field."
    },
    {
     "threat": "Tampering",
     "scenario": "Historical rulebook entries or proof-of-service records edited after the fact to hide a missed statutory deadline.",
     "mitigation": "Append-only audit log; hash-chained packet snapshots; diff view on every analyst/counsel surface."
    },
    {
     "threat": "Repudiation",
     "scenario": "A compliance analyst or counsel denies approving a released packet.",
     "mitigation": "Signed attestations with server-side timestamp + identity; delivery bundle includes a signature manifest."
    },
    {
     "threat": "Information Disclosure",
     "scenario": "Cross-community leak of tenant PII (rent rolls, leases, prior-notice history) through shared indices, logs, or prompts.",
     "mitigation": "Tenant-scoped row-level auth; PII scrubbing in logs; retrieval indices partitioned per community."
    },
    {
     "threat": "Denial of Service",
     "scenario": "A runaway AI drafting job or export exhausts shared workers during a statutory deadline window (e.g., WA's 5-day zoning-petition notice).",
     "mitigation": "Per-tenant concurrency + budget caps; circuit breaker on model calls; degrade-gracefully queue."
    },
    {
     "threat": "Elevation of Privilege",
     "scenario": "A standard user acquires compliance-analyst or counsel release 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-community isolation; standard data-handling agreement on file; DSAR runbook published; tenant PII appearing in rent rolls and leases treated as sensitive.",
   "compliance_targets": [
    "3-year deterministic-checklist record retention",
    "SOC 2 Type II",
    "State-bar unauthorized-practice-of-law (UPL) guidance compliance"
   ],
   "data_classifications": [
    "Regulated-record",
    "Tenant PII",
    "Internal-audit"
   ]
  },
  "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"
   ],
   "testing_pyramid": [
    "Unit tests on derivation + validation modules",
    "Component tests on analyst surfaces",
    "Contract tests on integrations",
    "End-to-end smoke test on the intake→signoff→delivery path"
   ],
   "accessibility_tests": [
    "axe-core in CI on analyst surfaces",
    "Keyboard-only walkthrough per workflow",
    "Prefers-reduced-motion honored"
   ],
   "performance_budget": "p95 workflow latency published per module; artifact-generation cold-path under 30s or shown as background job."
  },
  "accessibility_i18n_ethics": {
   "wcag_target": "AA",
   "locales": [
    "en-US"
   ],
   "rtl_support": false,
   "ethical_risks": [
    "Notice & Disclosure Compliance Packet released without compliance-analyst review",
    "Cross-state statutory-rule confusion (one state's deterministic checklist applied to another state's notice)",
    "Community-owner- or tenant-facing errors attributed to AI without a human signature"
   ],
   "ethical_guardrails": [
    "Compliance-analyst release required before every standard-tier packet; counsel approval required on closures, first-of-kind, or contested cases",
    "Per-state rulebook isolation (each RulebookEntry versioned and scoped to its own state statute)",
    "AI-usage disclosure available on request; no AI-drafted notice language ships without a source-quoted rulebook citation"
   ]
  },
  "governance": {
   "ownership": [
    {
     "area": "Product + roadmap",
     "owner": "Founder"
    },
    {
     "area": "Architecture + platform",
     "owner": "Engineering Lead"
    },
    {
     "area": "Rulebook + release workflow",
     "owner": "Contracted Counsel"
    },
    {
     "area": "Compliance + privacy",
     "owner": "Compliance Analyst"
    },
    {
     "area": "Design system",
     "owner": "Design Lead"
    },
    {
     "area": "SEO + content",
     "owner": "Content Lead"
    }
   ],
   "docs_required": [
    "ADR log (checked in)",
    "Owner-action ledger",
    "Rulebook evidence register",
    "STRIDE threat model",
    "Runbook: incident, restore, breach notification",
    "Compliance-analyst + counsel playbook and 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-blueprint-docs)"
   ],
   "change_control": "ADR-per-major-decision; rulebook amendments require counsel review; production deploys gated on green CI + owner-action ledger check."
  },
  "risk_register": [
   {
    "id": "mhc-notice-disclosure-compliance-desk-r1",
    "risk": "Statute misclassification — a notice drafted against the wrong state's MHC statute or the wrong RulebookEntry version",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Counsel-reviewed, versioned rulebook + deterministic checklist + 100% counsel review during the pilot",
    "contingency": "Pause the affected packet type; retroactive review of any packets already delivered",
    "owner": "legal"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-r2",
    "risk": "Statute-change lag (rulebook staleness) — WA HB 1217 itself is evidence of how fast MHC law moves",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Standing rule-watch SOP + versioned rulebook with amendment tracking",
    "contingency": "Freeze new packets for that state until the rulebook entry is re-validated by counsel",
    "owner": "engineering"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-r3",
    "risk": "Unauthorized-practice-of-law (UPL) exposure from the documentation-preparation pattern",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Counsel-approved templates only; community owner always signs and sends; anything outside the standard verified pattern escalates to counsel structurally",
    "contingency": "Pause onboarding in that state pending counsel review",
    "owner": "legal"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-r4",
    "risk": "Thin per-operator budgets and low buyer awareness that MHC law differs from general residential landlord-tenant law",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Free Gap Scan lead magnet + educational content on the MHC-vs-general-landlord-tenant-law gap",
    "contingency": "Adjust pricing tier or positioning based on pilot feedback",
    "owner": "owner"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-r5",
    "risk": "Delivery or proof-of-service failure voiding an otherwise statute-correct notice",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Proof-of-service archive + delivery-method checklist baked into every packet",
    "contingency": "Re-send with amended proof of service; document the gap in the exception queue",
    "owner": "ops"
   },
   {
    "id": "mhc-notice-disclosure-compliance-desk-r6",
    "risk": "Single-trigger-event concentration (rent-increase packets only at launch)",
    "likelihood": "high",
    "impact": "medium",
    "mitigation": "Roadmap to Park Rule Change, Zoning-Petition, and Park Closure packet types by day 90",
    "contingency": "Delay packet-type expansion if the rent-increase packet underperforms in the pilot",
    "owner": "owner"
   }
  ],
  "roadmap": [
   {
    "phase": "Phase 0 — Rulebook + Gap Scan foundation (7-day)",
    "weeks": "Week 1",
    "outcomes": [
     "Finalize the WA HB 1217 rulebook + counsel-approved rent-increase template",
     "Intake form + Gap Scan rubric stood up",
     "First 2 educational posts + Gap Scan landing page published",
     "Warm outreach to 15-20 known independent WA operators"
    ],
    "exit_criteria": [
     "Rulebook finalized with counsel sign-off",
     "Gap Scan live and accepting submissions"
    ],
    "kill_criteria": [
     "No contracted counsel available to review the rulebook"
    ]
   },
   {
    "phase": "Phase 1 — Priced pilot conversion (30-day)",
    "weeks": "Weeks 2-4",
    "outcomes": [
     "10-15 Gap Scans run",
     "First 2-3 paid pilot Notice & Disclosure Compliance Packets converted",
     "Full 30-day content set published",
     "OR/CA rulebook research begun"
    ],
    "exit_criteria": [
     "≥2 paid pilot packets delivered and counsel-released"
    ],
    "kill_criteria": [
     "Gap Scan-to-paid conversion below target after 10-15 scans"
    ]
   },
   {
    "phase": "Phase 2 — Capped 5-pilot hardening (90-day)",
    "weeks": "Weeks 5-13",
    "outcomes": [
     "Capped 5-pilot WA cohort complete",
     "After-5 and after-10 hardening checkpoints run",
     "Park Rule Change and Zoning-Petition packet types added",
     "OR beachhead launched; CA rulebook counsel review begun",
     "Portfolio Retainer evaluated with first 2+ repeat clients"
    ],
    "exit_criteria": [
     "5 pilots complete; SOPs/exception queue hardened",
     "Step-down from 100%-counsel-review to counsel-on-exceptions for the validated WA/rent-increase combo begun"
    ],
    "kill_criteria": [
     "Rework rate exceeds 5%",
     "Escalation rate to counsel unmanageable at pilot volume"
    ]
   },
   {
    "phase": "Phase 3 — Commercial launch",
    "weeks": "Post-90-day",
    "outcomes": [
     "Public commercial launch of the WA Rent-Increase Notice Compliance Packet microsite as 'ready'",
     "Analyst-only release path validated for standard-tier packets after 10 packets",
     "Owner-action ledger closed for launched blueprints"
    ],
    "exit_criteria": [
     "Zero blocking owner actions for launched blueprints",
     "Publicly indexable microsite with WebPage+FAQPage schema only"
    ],
    "kill_criteria": [
     "Public launch not defensible against a plausible UPL or regulator inquiry"
    ]
   }
  ],
  "metrics": {
   "north_star": "Delivered Notice & Disclosure Compliance Packets per week, per operator, with zero notices challenged or voided for a statutory defect of our making",
   "leading": [
    "Gap Scan → paid packet conversion rate",
    "Intake → packet delivery cycle time",
    "Compliance-analyst / counsel release cycle time",
    "Rulebook coverage per beachhead state",
    "Owner-action ledger closure rate"
   ],
   "lagging": [
    "Priced pilot engagements signed",
    "Portfolio Retainer conversions (post first cohort)",
    "Notices challenged or voided for statutory defect (target: 0)",
    "Rework rate per packet"
   ],
   "guardrails": [
    "Model spend per packet ($1-3 target)",
    "Tenant PII in logs (target: 0)",
    "Cross-community access attempts (target: 0)",
    "Packets delivered inside the statutory clock (target: 100%)"
   ]
  },
  "executive_review": {
   "consensus": "Ship a thin, rulebook-linked, analyst-and-counsel-gated vertical slice for ParkNotice Clear — Washington-only, Rent-Increase Notice Compliance Packet only. Prefer a boring, single-region modular monolith, manual-first fulfillment (spreadsheet rulebook + counsel-reviewed template) before any automation is built. Do not launch commercially until owner-action facts close and at least one counsel-reviewed packet is delivered.",
   "dissent": "Executive Sponsor and Privacy/Compliance disagree on launch tempo — Privacy/Compliance recommends waiting for a second counsel opinion on the UPL boundary before any public commercial claim beyond the capped pilot.",
   "go_no_go": "conditional-go",
   "top_3_risks": [
    "A state's UPL review sweeps in the documentation-preparation pattern more broadly than expected",
    "AI hallucination in a delivered notice packet",
    "Cross-community tenant-PII leak"
   ],
   "first_10_steps": [
    "Confirm named compliance analyst + contracted-counsel engagement letter on file",
    "Populate owner-action ledger with entity, jurisdiction, contact inbox, privacy inbox",
    "Finalize the WA HB 1217 rulebook + counsel-approved rent-increase template",
    "Open warm outreach to 15-20 known independent WA operators",
    "Publish the first 2 educational posts + Gap Scan landing page",
    "Stand up the rulebook-linked intake → draft → deterministic-check → analyst/counsel release loop",
    "Wire append-only audit log + hash-chained packet snapshots",
    "Add row-level auth + tenant-scoped retrieval indices",
    "Instrument Gap Scan submission, packet delivery, and release-cycle events",
    "Schedule the after-5 and after-10 pilot hardening checkpoints"
   ]
  }
 },
 "project_site": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "app_name": "ParkNotice Clear Desk",
  "archetype": "filing-dossier",
  "archetype_label": "notice compliance desk",
  "reader_role": "Owner-Operator",
  "one_sentence_app": "ParkNotice Clear Desk is a notice compliance desk for MHC owner-operators who need every rent-increase, rule-change, zoning-petition, or closure notice tied to a state-statute-verified packet before a tenant or their attorney asks 'was this notice even legal?'",
  "homepage_sequence": [
   "scene",
   "workflow",
   "instrument",
   "offer",
   "proof",
   "qualification",
   "objections"
  ],
  "hero": {
   "frame_label": "Compliance / regulatory documentation · notice compliance desk",
   "eyebrow": "Owner-Operator / trigger event",
   "interface_title": "ParkNotice Clear release desk",
   "primary_panel_title": "Cascade Meadows MHC · WA rent-increase notice · confidence 96%",
   "primary_panel_body": "Open compliance run: extract the rent roll and lease terms, match the WA HB 1217 rulebook entry, then stage the Notice & Disclosure Compliance Packet for compliance-analyst release.",
   "side_panel_title": "Before this ships",
   "side_panel_items": [
    "Engagement letter on file",
    "Deterministic checklist satisfied",
    "Proof-of-service template staged"
   ],
   "status_metric": "REVIEW",
   "status_label": "compliance-analyst gate active"
  },
  "language": {
   "problem_heading": "The Owner-Operator moment",
   "mechanism_heading": "Inside the ParkNotice Clear Desk",
   "proof_heading": "Why this notice doesn't get challenged",
   "offer_heading": "What leaves the room",
   "objection_heading": "The hard questions",
   "qualification_heading": "Who should not use this",
   "cta_close": "Open a compliance run from your most recent trigger event — released by a real compliance analyst, escalated to contracted counsel on every closure or contested case."
  },
  "modules": [
   {
    "name": "Trigger-event intake",
    "job": "Turns a forwarded rent roll, lease terms, and prior-notice history into a named compliance run with a state-statute match, extracted fields, and a missing-field list.",
    "artifact": "intake record"
   },
   {
    "name": "Rulebook",
    "job": "Holds every beachhead state's counsel-reviewed MHC statute — notice period, cap/limit, mandated content, print format, delivery method — with the source citation behind each.",
    "artifact": "deterministic checklist"
   },
   {
    "name": "Notice & Disclosure Compliance Packet",
    "job": "Packages the drafted notice, the deterministic check, and the proof-of-service template into the record a community owner can point to any time.",
    "artifact": "release package"
   }
  ],
  "checkpoints": [
   {
    "label": "Deterministic-checklist field",
    "pass": "extracted with source quote",
    "fail": "flagged or shipped as explicit gap"
   },
   {
    "label": "notice drafting",
    "pass": "confidence-scored, analyst-confirmed below threshold",
    "fail": "blocked before assembly"
   },
   {
    "label": "Notice & Disclosure Compliance Packet",
    "pass": "compliance analyst releases (counsel approval on closures/contested cases)",
    "fail": "stays draft"
   }
  ],
  "signature_scene": "You're an Owner-Operator. It's the morning after you decided on a 4.8% rent increase for Cascade Meadows MHC. Someone needs to know — today — whether the notice packet meets WA HB 1217's 5% cap, 3-month notice, and larger-print disclosure requirements, and the only draft on file is a template from three years ago. This page is built like the compliance desk that person needed before a tenant's attorney started asking questions."
 },
 "ddd": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "project_name": "ParkNotice Clear",
  "business_understanding": {
   "summary": "ParkNotice Clear — On ParkNotice Clear, MHC owner-operators stop guessing whether a trigger-event notice meets their state's MHC-specific statute. A rent roll, lease terms, and prior-notice history are extracted at intake, matched against a counsel-reviewed rulebook entry, drafted by AI, checked by a deterministic checklist, and every Notice & Disclosure Compliance Packet releases with a compliance-analyst signature and a full audit trail — with counsel approval on every closure, first-of-kind, or contested case.",
   "customer_profile": "Independent / small-portfolio MHC owner-operators, 1-15 communities, family-owned or small private-capital roll-ups, $1M-$25M annual lot-rent revenue, below the ~100 large professional/institutional operators tracked by industry compilers; no in-house counsel, outside counsel engaged only reactively",
   "customer_pain": "A rent-increase, rule-change, zoning-petition, or closure notice drafted from a template with no verification against the applicable state's MHC-specific landlord-tenant act — which is materially more protective and more litigated than ordinary residential landlord-tenant law; general MHC property-management software (Zego, Innago, BC Solutions) stores the document but never checks the statute; no fast way to prove, if challenged, that the notice period, cap, mandated content, print format, and delivery method were all correct.",
   "paid_outcome": "A state-statute-verified, deadline-driven Notice & Disclosure Compliance Packet per trigger event — compliance-analyst released, counsel-approved on closures and contested cases — reconstructable on demand, defensible if a tenant or their attorney disputes the notice.",
   "value_creation": "AI compresses rent-roll/lease extraction, rulebook matching, and notice drafting; deterministic code owns every notice-period, cap/limit, mandated-content, print-format, and delivery-method check; humans own compliance-analyst release, counsel approval, and anything that touches statutory judgment; the platform binds them with an append-only audit trail and per-community isolation.",
   "why_ai_native": "The extract-match-draft-check loop is only economical with a bounded AI layer feeding deterministic statute rules. A pure-manual service cannot hit $349-$799-per-cycle pricing at the volume a rulebook-driven business needs; a pure-automated tool cannot hold the UPL boundary, absorb first-of-kind statutory judgment calls, or keep a notice from being voided for a missed deadline.",
   "operational_risks": [
    "Compliance-analyst or counsel bottleneck as community count grows faster than reviewer capacity",
    "Prompt injection via rent-roll/lease document content",
    "Cross-community retrieval leak of tenant PII",
    "Statute amendment (rulebook staleness) breaking the deterministic checklist mid-cycle",
    "Silent proof-of-service failure voiding an otherwise-correct notice"
   ],
   "assumptions": [
    "Independent MHC owner-operators will pay $349-$799 per community per cycle for a state-law-verified rent-increase notice over drafting it themselves.",
    "A community's rent roll, lease terms, and prior-notice history contain enough structured data to draft a complete packet without a direct MHC property-management-software integration at launch.",
    "Community owners will accept a documentation-and-compliance-preparation service that never signs, files, or represents them.",
    "Preparing state-statute-verified notice documentation from a counsel-approved rulebook does not itself constitute the unauthorized practice of law when the community owner signs and sends under their own name.",
    "Single-tenant per community is not required for the first cohort — logical isolation with row-level auth is acceptable."
   ],
   "validation_questions": [
    "Which named compliance analyst and contracted counsel will the pilot use at launch?",
    "What is the actual willingness-to-pay within the $349-$799 rent-increase band?",
    "Does the free Gap Scan convert to a paid packet at the 30-50% target rate?",
    "Which MHC property-management-software export formats must this integrate with beyond manual upload?",
    "Does any beachhead-state jurisdiction impose a data-residency constraint given tenant PII in rent rolls/leases?"
   ]
  },
  "domain_discovery": {
   "actors": [
    {
     "actor": "MHC Owner-Operator",
     "role": "Independent / small-portfolio MHC owner-operator, 1-15 communities — economic decision-maker, bears liability, duty-holder of record on every notice",
     "goals": [
      "Get every trigger-event notice verified against the correct state statute before it goes out",
      "Avoid a notice being challenged or voided for a statutory defect"
     ],
     "decisions": [
      "Submit trigger-event intake",
      "Accept or revise a flagged draft",
      "Approve escalated exceptions",
      "Sign and send the released packet"
     ],
     "pain_points": [
      "No in-house counsel; outside counsel engaged only reactively",
      "General MHC property-management software stores documents but never checks the statute",
      "No fast way to prove a past notice was compliant"
     ]
    },
    {
     "actor": "Community Manager / Regional Property Manager",
     "role": "Day-to-day champion who drafts notices today using general MHC property-management software",
     "goals": [
      "Get a notice drafted and out the door without becoming a statute expert",
      "Reduce time lost re-checking notice templates by hand"
     ],
     "decisions": [
      "Forward the rent roll, lease terms, and trigger-event details",
      "Flag ambiguous cases to the owner-operator"
     ],
     "pain_points": [
      "Scattered notice templates across email and property-management exports",
      "No verification that a template still matches the current statute",
      "Compliance-analyst bottleneck at high volume"
     ]
    },
    {
     "actor": "Compliance Analyst",
     "role": "Non-attorney human reviewer who releases standard-tier packets that pass every deterministic check with zero exceptions flagged",
     "goals": [
      "Release only what's defensible against the rulebook's deterministic checklist",
      "Keep the audit trail intact"
     ],
     "decisions": [
      "Approve or return a packet for correction",
      "Route ambiguous or failed cases to the exception queue"
     ],
     "pain_points": [
      "Volume spikes around rent-increase season",
      "Statute amendments invalidating in-flight packets"
     ]
    },
    {
     "actor": "Contracted Counsel",
     "role": "Licensed attorney who approves every closure, first-of-kind, ambiguous, or rulebook-gap packet, and every rulebook update",
     "goals": [
      "Ensure approved language never exceeds what the counsel-reviewed rulebook and templates support",
      "Protect ParkNotice Clear's UPL boundary"
     ],
     "decisions": [
      "Approve or edit exception-queue language",
      "Decline to sign off, sending the packet back",
      "Approve rulebook amendments"
     ],
     "pain_points": [
      "Time pressure when a statutory deadline is close (e.g., WA's 5-day zoning-petition window)"
     ]
    },
    {
     "actor": "Tenant / Notice recipient (external)",
     "role": "Receives the delivered notice; not a ParkNotice Clear customer or signatory",
     "goals": [
      "Receive a notice that is legally sufficient and clearly explains their rights"
     ],
     "decisions": [],
     "pain_points": [
      "No visibility into whether a notice was ever statute-checked before it reached them"
     ]
    }
   ],
   "glossary": [
    {
     "term": "compliance run",
     "definition": "One trigger event's path from intake through packet delivery — the unit of work ParkNotice Clear turns into a Notice & Disclosure Compliance Packet.",
     "used_by": "Owner-Operator, Compliance Analyst",
     "context": "Intake Context",
     "example": "\"Open a compliance run for the rent-increase notice at Cascade Meadows MHC\"",
     "notes": "Do not confuse with 'engagement' in Billing (contract term)."
    },
    {
     "term": "deterministic checklist",
     "definition": "The hard-fail check a Notice & Disclosure Compliance Packet must satisfy before release: notice period, cap/limit, mandated content, print format, delivery method.",
     "used_by": "Compliance Analyst, AI Workbench",
     "context": "Rulebook Context",
     "example": "\"Washington's deterministic checklist requires the HB 1217 5% cap disclosure in larger print\"",
     "notes": "Never the same as a generic intake checklist — it is state-specific and versioned against a RulebookEntry."
    }
   ],
   "decisions": [
    {
     "decision": "Accept trigger-event intake",
     "who": "Intake Context (rule + analyst override)",
     "inputs": [
      "Community identity",
      "Rent roll / lease terms",
      "Prior-notice history"
     ],
     "rule": "Reject if trigger-event type is unsupported for the beachhead state or the engagement letter is missing",
     "output": "IntakeReceived event",
     "risk": "Accepting an out-of-scope trigger event wastes drafting and analyst time."
    },
    {
     "decision": "Release a Notice & Disclosure Compliance Packet for delivery",
     "who": "Review & Release Context (compliance analyst; counsel on closures/contested cases)",
     "inputs": [
      "Assembled NoticePacket",
      "Deterministic checklist result",
      "Matched RulebookEntry"
     ],
     "rule": "Reject if any deterministic-checklist item is open, or if a closure/first-of-kind/contested case lacks CounselApproved",
     "output": "AnalystReleased (and CounselApproved where required) event",
     "risk": "Releasing a packet with an open checklist item risks a voided or challenged notice."
    }
   ],
   "events": [
    {
     "event": "intakeReceived",
     "meaning": "A trigger event is now committed to the drafting pipeline",
     "trigger": "Owner-operator or community manager submits a trigger-event intake",
     "downstream": [
      "Normalization begins",
      "AI Workbench scheduled"
     ]
    },
    {
     "event": "packetDelivered",
     "meaning": "The Notice & Disclosure Compliance Packet has left ParkNotice Clear and reached the owner-operator for signing and sending",
     "trigger": "Compliance analyst (and counsel, where required) releases the packet and delivery is confirmed",
     "downstream": [
      "Proof-of-service tracking begins",
      "Owner-operator notified"
     ]
    }
   ]
  },
  "subdomains": [
   {
    "name": "Notice Compliance Fulfillment (extraction + drafting + deterministic check + release)",
    "type": "core",
    "description": "The end-to-end path from trigger-event intake to compliance-analyst-released (and counsel-approved where required), delivered Notice & Disclosure Compliance Packet, with every field cited to a source and a matched rulebook entry.",
    "reason": "This is what owner-operators pay for and what a community's proof-of-service archive shows.",
    "business_value": "Direct revenue and owner-operator trust.",
    "recommendation": "build",
    "ai_involvement": "high",
    "human_involvement": "high",
    "risks": [
     "Hallucinated statutory field",
     "Analyst/counsel bottleneck",
     "Un-reconstructable audit trail"
    ],
    "validation_questions": [
     "Can the analyst release in ≤5 business days?"
    ]
   },
   {
    "name": "Rulebook Maintenance (state-by-state MHC statute library)",
    "type": "supporting",
    "description": "Maintained, versioned, state-by-state MHC statute rules — notice period, cap/limit, mandated content, print format, delivery method — each counsel-approved.",
    "reason": "Without it, drafting has no target to check against.",
    "business_value": "Durable moat as beachhead-state count grows.",
    "recommendation": "build",
    "ai_involvement": "low",
    "human_involvement": "medium",
    "risks": [
     "Statute amendment drift (WA HB 1217 is evidence of pace)",
     "Stale rulebook version used"
    ],
    "validation_questions": [
     "How often does a beachhead state amend its MHC statute?"
    ]
   },
   {
    "name": "Exception Handling (ambiguous match, first-of-kind, contested cases)",
    "type": "supporting",
    "description": "Routes ambiguous statutory matches, first-of-kind trigger events, and contested/dispute-adjacent cases to counsel instead of the automated pipeline.",
    "reason": "Keeps ParkNotice Clear structurally on the documentation-preparation side of the UPL boundary.",
    "business_value": "Regulatory-boundary protection.",
    "recommendation": "build",
    "ai_involvement": "low",
    "human_involvement": "high",
    "risks": [
     "Misclassified exception proceeding through automation"
    ],
    "validation_questions": [
     "What share of compliance runs route to the exception queue at scale?"
    ]
   },
   {
    "name": "Billing & Revenue",
    "type": "generic",
    "description": "Per-packet invoicing and Portfolio Retainer billing.",
    "reason": "Not a differentiator.",
    "business_value": "Necessary but not core.",
    "recommendation": "buy",
    "ai_involvement": "low",
    "human_involvement": "low",
    "risks": [
     "Billing errors"
    ],
    "validation_questions": []
   }
  ],
  "core_domain_analysis": {
   "primary_core": "Notice Compliance Fulfillment (rulebook-linked drafting + analyst/counsel review)",
   "secondary_cores": [
    "Rulebook Maintenance (versioned, counsel-approved statute library)",
    "Deterministic Compliance Checking (the hard-fail checklist)"
   ],
   "supporting_may_become_core": [
    "Portfolio Retainer relationship management (as repeat-client share grows)",
    "Multi-state rulebook expansion (OR, CA, MN, IL)"
   ],
   "generic_do_not_distract": [
    "Billing & Revenue",
    "Identity & Access"
   ],
   "rationale": "The paid outcome (compliance-analyst-released, statute-verified packet) lives in Notice Compliance Fulfillment, but its defensibility depends on the Rulebook and the deterministic checklist behaving correctly. Treat all three as core; do not dilute founder time on generic subdomains during the capped pilot."
  },
  "bounded_contexts": [
   {
    "name": "Rulebook Context",
    "purpose": "Maintain the counsel-reviewed, version-controlled, state-by-state MHC statute rulebook and match trigger events to the correct RulebookEntry.",
    "subdomain": "Rulebook Maintenance (core)",
    "type": "core",
    "owned_language": [
     "rulebook",
     "RulebookEntry",
     "beachhead state",
     "statute citation",
     "rulebook amendment"
    ],
    "owns": [
     "RulebookEntry lifecycle",
     "statute citation library",
     "rulebook version history"
    ],
    "does_not_own": [
     "Packet drafting",
     "Analyst identity",
     "Billing"
    ],
    "primary_actors": [
     "Contracted Counsel",
     "AI Workbench"
    ],
    "entities": [
     "RulebookEntry",
     "StatuteCitation"
    ],
    "value_objects": [
     "RulebookVersion",
     "EffectiveDateRange"
    ],
    "aggregates": [
     "RulebookEntryAggregate"
    ],
    "domain_services": [
     "Rulebook matcher",
     "Amendment watcher"
    ],
    "application_services": [
     "PublishRulebookEntry",
     "MatchRulebook",
     "AmendRulebook"
    ],
    "commands": [
     "PublishRulebookEntry",
     "MatchRulebook",
     "AmendRulebook"
    ],
    "domain_events": [
     "RulebookMatched",
     "RulebookAmended"
    ],
    "policies": [
     "Freeze new packets for a state upon RulebookAmended until re-validated by counsel",
     "Every RulebookEntry requires counsel sign-off before publish"
    ],
    "specifications": [
     "RulebookCurrencySpec"
    ],
    "invariants": [
     "Every NoticePacket records which RulebookEntry version it was drafted against",
     "A RulebookEntry cannot publish without counsel sign-off"
    ],
    "ai_agents": [
     "Rulebook Retrieval Agent"
    ],
    "human_roles": [
     "Contracted Counsel"
    ],
    "data_owned": [
     "RulebookEntry",
     "StatuteCitation",
     "amendment history"
    ],
    "inputs": [
     "State legislative/regulatory updates",
     "Counsel review notes"
    ],
    "outputs": [
     "Matched RulebookEntry",
     "Amendment notification"
    ],
    "external_integrations": [
     "State statute portals / legislative tracking services"
    ],
    "risks": [
     "Statute amendment (rulebook staleness)",
     "Wrong-state rulebook match"
    ],
    "interfaces": [
     "→ Drafting Context (RulebookMatched)",
     "→ Review & Release Context (rulebook version reference)"
    ]
   },
   {
    "name": "Intake Context",
    "purpose": "Turn a forwarded rent roll, lease terms, and trigger-event details into a named compliance run with a state-statute match and a missing-field list.",
    "subdomain": "Notice Compliance Fulfillment (core)",
    "type": "core",
    "owned_language": [
     "trigger event",
     "compliance run",
     "rent roll",
     "prior-notice history"
    ],
    "owns": [
     "compliance-run lifecycle",
     "intake record"
    ],
    "does_not_own": [
     "Drafting",
     "Analyst release"
    ],
    "primary_actors": [
     "Owner-Operator",
     "Community Manager / Regional Property Manager"
    ],
    "entities": [
     "ClientEngagement",
     "IntakeRecord"
    ],
    "value_objects": [
     "TriggerEventType",
     "ConfidenceScore"
    ],
    "aggregates": [
     "ClientEngagementAggregate"
    ],
    "domain_services": [
     "Normalization service"
    ],
    "application_services": [
     "SubmitIntake",
     "NormalizeIntake"
    ],
    "commands": [
     "SubmitIntake"
    ],
    "domain_events": [
     "IntakeReceived"
    ],
    "policies": [
     "Reject duplicate intake for the same trigger event",
     "Require an active engagement letter before intake"
    ],
    "specifications": [
     "IntakeCompletenessSpec"
    ],
    "invariants": [
     "A compliance run cannot open without an accepted ClientEngagement"
    ],
    "ai_agents": [
     "Extraction & Normalization Agent"
    ],
    "human_roles": [
     "Owner-Operator"
    ],
    "data_owned": [
     "Intake records",
     "ClientEngagement"
    ],
    "inputs": [
     "Rent roll",
     "Lease terms",
     "Prior-notice history",
     "Trigger-event details"
    ],
    "outputs": [
     "Normalized intake payload"
    ],
    "external_integrations": [
     "MHC property-management software exports (Zego, Innago, BC Solutions)"
    ],
    "risks": [
     "Duplicate or malformed intake",
     "Wrong trigger-event classification"
    ],
    "interfaces": [
     "→ Drafting Context (IntakeReceived)",
     "→ Community Onboarding Context"
    ]
   },
   {
    "name": "Drafting Context",
    "purpose": "Draft the notice/disclosure language against the matched RulebookEntry and run the deterministic checklist before staging for release.",
    "subdomain": "Notice Compliance Fulfillment (core)",
    "type": "core",
    "owned_language": [
     "AI Workbench",
     "deterministic checklist",
     "NoticePacket draft",
     "completeness scorecard"
    ],
    "owns": [
     "NoticePacket draft state",
     "deterministic-check result"
    ],
    "does_not_own": [
     "Analyst identity",
     "Rulebook content",
     "Delivery"
    ],
    "primary_actors": [
     "AI Workbench",
     "Compliance Analyst"
    ],
    "entities": [
     "NoticePacket",
     "DeterministicChecklistItem"
    ],
    "value_objects": [
     "FieldValue",
     "SourceQuote",
     "ChecklistResult"
    ],
    "aggregates": [
     "NoticePacketAggregate"
    ],
    "domain_services": [
     "Draft composer",
     "Deterministic-checklist engine"
    ],
    "application_services": [
     "DraftPacket",
     "RunDeterministicCheck"
    ],
    "commands": [
     "DraftPacket",
     "RunDeterministicCheck"
    ],
    "domain_events": [
     "PacketDrafted",
     "DeterministicCheckPassed",
     "DeterministicCheckFailed"
    ],
    "policies": [
     "Block staging for release while any deterministic-checklist item is open",
     "Route DeterministicCheckFailed to the exception queue"
    ],
    "specifications": [
     "DeterministicCompletenessSpec"
    ],
    "invariants": [
     "A NoticePacket cannot be marked ready-for-release while any deterministic-checklist item is open",
     "No field is marked present without a source quote"
    ],
    "ai_agents": [
     "Drafting Agent"
    ],
    "human_roles": [
     "Compliance Analyst"
    ],
    "data_owned": [
     "NoticePacket drafts",
     "checklist results"
    ],
    "inputs": [
     "Normalized intake payload",
     "Matched RulebookEntry"
    ],
    "outputs": [
     "Drafted NoticePacket",
     "deterministic-checklist result"
    ],
    "external_integrations": [
     "OpenAI / Anthropic API"
    ],
    "risks": [
     "Hallucinated statutory field without source",
     "Deterministic check bypassed"
    ],
    "interfaces": [
     "← Rulebook Context (RulebookMatched)",
     "→ Review & Release Context (PacketDrafted)"
    ]
   },
   {
    "name": "Review & Release Context",
    "purpose": "Compliance-analyst release of every packet; contracted-counsel approval on closures, first-of-kind, ambiguous, or contested cases.",
    "subdomain": "Notice Compliance Fulfillment (core)",
    "type": "core",
    "owned_language": [
     "analyst release",
     "counsel approval",
     "exception queue"
    ],
    "owns": [
     "Release decision",
     "exception-queue routing"
    ],
    "does_not_own": [
     "Drafting content",
     "Delivery"
    ],
    "primary_actors": [
     "Compliance Analyst",
     "Contracted Counsel"
    ],
    "entities": [
     "ExceptionCase",
     "ReleaseDecision"
    ],
    "value_objects": [
     "ReleaseAttestation"
    ],
    "aggregates": [
     "ExceptionCaseAggregate"
    ],
    "domain_services": [
     "Release-decision engine",
     "Exception router"
    ],
    "application_services": [
     "ReleasePacket",
     "ApprovePacket",
     "RouteException"
    ],
    "commands": [
     "ReleasePacket",
     "ApprovePacket",
     "RouteException"
    ],
    "domain_events": [
     "ExceptionRouted",
     "AnalystReleased",
     "CounselApproved"
    ],
    "policies": [
     "Every closure, first-of-kind, ambiguous, or rulebook-gap packet requires CounselApproved before delivery",
     "100% counsel review during the pilot"
    ],
    "specifications": [
     "ReleaseReadinessSpec"
    ],
    "invariants": [
     "A NoticePacket cannot be delivered without AnalystReleased, and CounselApproved where required",
     "An ExceptionCase cannot auto-resolve back into the automated pipeline"
    ],
    "ai_agents": [],
    "human_roles": [
     "Compliance Analyst",
     "Contracted Counsel"
    ],
    "data_owned": [
     "Release decisions",
     "exception-queue records"
    ],
    "inputs": [
     "Drafted NoticePacket",
     "deterministic-checklist result"
    ],
    "outputs": [
     "Released NoticePacket",
     "exception routing"
    ],
    "external_integrations": [],
    "risks": [
     "Analyst/counsel bottleneck",
     "Release bypass"
    ],
    "interfaces": [
     "← Drafting Context (PacketDrafted)",
     "→ Delivery & Proof Context (AnalystReleased)"
    ]
   },
   {
    "name": "Delivery & Proof Context",
    "purpose": "Deliver the released packet to the owner-operator and record proof of service; close the engagement.",
    "subdomain": "Notice Compliance Fulfillment (core)",
    "type": "core",
    "owned_language": [
     "proof-of-service archive",
     "delivery method",
     "engagement closure"
    ],
    "owns": [
     "Delivery log",
     "proof-of-service records"
    ],
    "does_not_own": [
     "Packet content",
     "Billing"
    ],
    "primary_actors": [
     "Owner-Operator",
     "Compliance Analyst"
    ],
    "entities": [
     "ProofOfServiceRecord"
    ],
    "value_objects": [
     "DeliveryMethod",
     "ServiceDate"
    ],
    "aggregates": [
     "ProofOfServiceRecordAggregate"
    ],
    "domain_services": [
     "Delivery adapter"
    ],
    "application_services": [
     "DeliverPacket",
     "RecordProofOfService",
     "CloseEngagement"
    ],
    "commands": [
     "DeliverPacket",
     "RecordProofOfService",
     "CloseEngagement"
    ],
    "domain_events": [
     "PacketDelivered",
     "ProofOfServiceRecorded",
     "EngagementClosed"
    ],
    "policies": [
     "Alert owner-operator within 1h of any delivery failure",
     "Cannot close an engagement without a recorded or explicitly written-off ProofOfServiceRecord"
    ],
    "specifications": [
     "DeliveryAcknowledgmentSpec"
    ],
    "invariants": [
     "A ClientEngagement cannot close without a recorded or explicitly written-off ProofOfServiceRecord"
    ],
    "ai_agents": [
     "Deadline / Status Monitor Agent"
    ],
    "human_roles": [
     "Compliance Analyst"
    ],
    "data_owned": [
     "Deliveries",
     "proof-of-service records"
    ],
    "inputs": [
     "Released NoticePacket"
    ],
    "outputs": [
     "Delivery confirmation",
     "proof-of-service record"
    ],
    "external_integrations": [
     "Certified mail / delivery-confirmation and e-signature services"
    ],
    "risks": [
     "Silent delivery failure voiding an otherwise-correct notice"
    ],
    "interfaces": [
     "← Review & Release Context (AnalystReleased)",
     "→ Rulebook Context (learning-loop feedback)"
    ]
   },
   {
    "name": "Engagement Governance Context",
    "purpose": "Own the owner-action ledger, public-release readiness, and the unauthorized-practice-of-law (UPL) boundary enforcement across every context.",
    "subdomain": "Engagement Governance (supporting)",
    "type": "supporting",
    "owned_language": [
     "owner action",
     "release decision",
     "UPL boundary",
     "DSAR"
    ],
    "owns": [
     "Owner-action ledger",
     "release-decision policy",
     "DSAR queue"
    ],
    "does_not_own": [
     "Packet content",
     "Analyst identity"
    ],
    "primary_actors": [
     "Founder",
     "Contracted Counsel"
    ],
    "entities": [
     "OwnerAction",
     "ReleaseDecision",
     "DSARRequest"
    ],
    "value_objects": [
     "BlockerReason",
     "Jurisdiction"
    ],
    "aggregates": [
     "OwnerActionLedgerAggregate"
    ],
    "domain_services": [
     "Release-decision engine",
     "DSAR fulfillment service"
    ],
    "application_services": [
     "ResolveOwnerAction",
     "RecomputeReleaseDecision",
     "ProcessDSAR"
    ],
    "commands": [
     "ResolveOwnerAction",
     "RaiseOwnerAction",
     "ProcessDSAR"
    ],
    "domain_events": [
     "OwnerActionResolved",
     "ReleaseDecisionChanged",
     "DSARFulfilled"
    ],
    "policies": [
     "Block public release while any owner action is open",
     "DSAR SLA 30 days"
    ],
    "specifications": [
     "ReleaseReadinessSpec"
    ],
    "invariants": [
     "Release cannot flip to 'ready' with open blocking owner actions",
     "Every DSAR is auditable end-to-end"
    ],
    "ai_agents": [],
    "human_roles": [
     "Founder",
     "Contracted Counsel"
    ],
    "data_owned": [
     "Owner-action ledger",
     "release decisions",
     "DSAR queue"
    ],
    "inputs": [
     "Owner input",
     "Counsel review outcome"
    ],
    "outputs": [
     "Release-decision event",
     "DSAR confirmation"
    ],
    "external_integrations": [
     "Email inbox"
    ],
    "risks": [
     "Public release while a blocker is open"
    ],
    "interfaces": [
     "← Notice Compliance Fulfillment contexts",
     "← Review & Release Context (exception outcomes)"
    ]
   },
   {
    "name": "Community Onboarding Context",
    "purpose": "Provision the community tenant, capture the engagement letter, and import the community's evidence pack.",
    "subdomain": "Community Onboarding (supporting)",
    "type": "supporting",
    "owned_language": [
     "community tenant",
     "engagement letter",
     "evidence pack"
    ],
    "owns": [
     "Tenant provisioning",
     "engagement-letter record",
     "evidence-pack import"
    ],
    "does_not_own": [
     "Signature capture",
     "Delivery"
    ],
    "primary_actors": [
     "Founder",
     "Owner-Operator"
    ],
    "entities": [
     "CommunityAccount",
     "EngagementLetter",
     "EvidencePackImport"
    ],
    "value_objects": [
     "ContactMatrix",
     "LotCountTier"
    ],
    "aggregates": [
     "CommunityAccountAggregate"
    ],
    "domain_services": [
     "Tenant provisioner"
    ],
    "application_services": [
     "ProvisionCommunity",
     "RegisterEngagementLetter",
     "ImportEvidencePack"
    ],
    "commands": [
     "ProvisionCommunity",
     "RegisterEngagementLetter",
     "ImportEvidencePack"
    ],
    "domain_events": [
     "CommunityProvisioned",
     "EngagementLetterRegistered"
    ],
    "policies": [
     "No compliance run starts until an engagement letter is registered per community"
    ],
    "specifications": [
     "EngagementLetterSpec"
    ],
    "invariants": [
     "Every community has at least one registered engagement letter naming the duty-holder of record"
    ],
    "ai_agents": [],
    "human_roles": [
     "Founder"
    ],
    "data_owned": [
     "Communities",
     "engagement letters",
     "evidence-pack imports"
    ],
    "inputs": [
     "Accepted engagement",
     "Owner-supplied evidence pack"
    ],
    "outputs": [
     "Provisioned community"
    ],
    "external_integrations": [
     "Google Drive / S3"
    ],
    "risks": [
     "Engagement letter expired or missing"
    ],
    "interfaces": [
     "→ Intake Context"
    ]
   },
   {
    "name": "Billing & Revenue Context",
    "purpose": "Per-packet invoicing, Portfolio Retainer subscription management, dunning.",
    "subdomain": "Billing (generic)",
    "type": "generic",
    "owned_language": [
     "invoice",
     "Portfolio Retainer",
     "usage record"
    ],
    "owns": [
     "Invoices",
     "subscriptions",
     "usage records"
    ],
    "does_not_own": [
     "Fulfillment",
     "Release"
    ],
    "primary_actors": [
     "Founder",
     "Owner-Operator"
    ],
    "entities": [
     "Subscription",
     "Invoice",
     "UsageRecord"
    ],
    "value_objects": [
     "LineItem",
     "TaxJurisdiction"
    ],
    "aggregates": [
     "SubscriptionAggregate"
    ],
    "domain_services": [
     "Billing adapter"
    ],
    "application_services": [
     "ChargeSubscription",
     "RecordUsage"
    ],
    "commands": [
     "ChargeSubscription",
     "RecordUsage"
    ],
    "domain_events": [
     "InvoicePaid",
     "SubscriptionCanceled"
    ],
    "policies": [
     "Meter packet delivery for per-packet pricing"
    ],
    "specifications": [
     "ChargeabilitySpec"
    ],
    "invariants": [
     "No charge without a delivered packet when priced per packet"
    ],
    "ai_agents": [],
    "human_roles": [
     "Founder"
    ],
    "data_owned": [
     "Subscriptions",
     "Invoices"
    ],
    "inputs": [
     "Delivery events"
    ],
    "outputs": [
     "Invoice records"
    ],
    "external_integrations": [
     "Stripe"
    ],
    "risks": [
     "Tax-jurisdiction errors"
    ],
    "interfaces": [
     "← Delivery & Proof Context"
    ]
   },
   {
    "name": "Identity & Access Context",
    "purpose": "SSO, MFA, RBAC, session management.",
    "subdomain": "Identity (generic)",
    "type": "generic",
    "owned_language": [
     "User",
     "Role",
     "Session"
    ],
    "owns": [
     "Users",
     "Roles table",
     "Sessions"
    ],
    "does_not_own": [
     "Business capability decisions"
    ],
    "primary_actors": [
     "Platform admin",
     "User"
    ],
    "entities": [
     "User",
     "RoleAssignment",
     "Session"
    ],
    "value_objects": [
     "Role",
     "Claim"
    ],
    "aggregates": [
     "UserAggregate"
    ],
    "domain_services": [
     "Auth service"
    ],
    "application_services": [
     "SignIn",
     "AssignRole"
    ],
    "commands": [
     "SignIn",
     "AssignRole"
    ],
    "domain_events": [
     "UserSignedIn",
     "RoleAssigned"
    ],
    "policies": [
     "Roles in a dedicated table, checked server-side"
    ],
    "specifications": [
     "RoleAuthoritySpec"
    ],
    "invariants": [
     "No role check runs client-only"
    ],
    "ai_agents": [],
    "human_roles": [
     "Platform admin"
    ],
    "data_owned": [
     "Users",
     "Roles",
     "Sessions"
    ],
    "inputs": [
     "Auth events"
    ],
    "outputs": [
     "Sessions"
    ],
    "external_integrations": [
     "IdP (Google / Okta)"
    ],
    "risks": [
     "Role escalation"
    ],
    "interfaces": [
     "→ every other context"
    ]
   },
   {
    "name": "Analytics & Reporting Context",
    "purpose": "Operational + business metrics, outcome reports.",
    "subdomain": "Analytics (supporting)",
    "type": "supporting",
    "owned_language": [
     "Metric",
     "Dashboard",
     "Outcome report"
    ],
    "owns": [
     "Metric definitions",
     "Dashboards"
    ],
    "does_not_own": [
     "Raw write models"
    ],
    "primary_actors": [
     "Founder"
    ],
    "entities": [
     "MetricDefinition",
     "Dashboard"
    ],
    "value_objects": [
     "Window",
     "Target"
    ],
    "aggregates": [
     "MetricDefinitionAggregate"
    ],
    "domain_services": [
     "Rollup service"
    ],
    "application_services": [
     "PublishMetric",
     "PublishDashboard"
    ],
    "commands": [
     "PublishMetric",
     "PublishDashboard"
    ],
    "domain_events": [
     "DashboardPublished"
    ],
    "policies": [
     "North-star must be wired before Phase 2 launch"
    ],
    "specifications": [
     "MetricDefinedSpec"
    ],
    "invariants": [
     "Metrics have a definition, a target, and an owner"
    ],
    "ai_agents": [],
    "human_roles": [
     "Founder"
    ],
    "data_owned": [
     "Metric definitions",
     "Read-model rollups"
    ],
    "inputs": [
     "Domain events (as read-only consumer)"
    ],
    "outputs": [
     "Dashboards",
     "Outcome reports"
    ],
    "external_integrations": [
     "BI tool"
    ],
    "risks": [
     "Vanity metrics dominating"
    ],
    "interfaces": [
     "← every context (read-only)"
    ]
   }
  ],
  "context_map": [
   {
    "upstream": "Intake Context",
    "downstream": "Drafting Context",
    "pattern": "customer-supplier",
    "business_reason": "Drafting cannot start without a normalized, hashed intake.",
    "data_exchanged": [
     "Normalized intake payload"
    ],
    "events_exchanged": [
     "IntakeReceived"
    ],
    "contract_type": "Published language (IntakeRecord)",
    "failure_risks": [
     "Silent format mismatch"
    ],
    "acl_notes": "Drafting consumes only fields it needs; no direct DB coupling.",
    "ownership_boundary": "Intake Context owns the raw-document lifecycle."
   },
   {
    "upstream": "Rulebook Context",
    "downstream": "Drafting Context",
    "pattern": "conformist",
    "business_reason": "Drafting defers to the rulebook's own statute definition for the matched state.",
    "data_exchanged": [
     "RulebookEntry"
    ],
    "events_exchanged": [
     "RulebookMatched"
    ],
    "contract_type": "Published language (RulebookEntry)",
    "failure_risks": [
     "Stale rulebook version used"
    ],
    "acl_notes": "Rulebook Context is the upstream source of truth; drafting never overrides it.",
    "ownership_boundary": "Rulebook Context owns deterministic-checklist definitions."
   },
   {
    "upstream": "Drafting Context",
    "downstream": "Review & Release Context",
    "pattern": "customer-supplier",
    "business_reason": "No packet reaches delivery without analyst release.",
    "data_exchanged": [
     "NoticePacket"
    ],
    "events_exchanged": [
     "PacketDrafted",
     "AnalystReleased"
    ],
    "contract_type": "Published language (NoticePacket)",
    "failure_risks": [
     "Packet released without review"
    ],
    "acl_notes": "Review & Release Context enforces the invariant structurally.",
    "ownership_boundary": "Review & Release Context owns the ReleaseDecision lifecycle."
   },
   {
    "upstream": "Review & Release Context",
    "downstream": "Delivery & Proof Context",
    "pattern": "customer-supplier",
    "business_reason": "Closure/contested packets cannot deliver without counsel approval.",
    "data_exchanged": [
     "Released NoticePacket"
    ],
    "events_exchanged": [
     "CounselApproved"
    ],
    "contract_type": "Published language (CounselApproval)",
    "failure_risks": [
     "Packet delivered without required counsel approval"
    ],
    "acl_notes": "Counsel approval is a hard gate, not advisory.",
    "ownership_boundary": "Review & Release Context owns counsel-approval status."
   },
   {
    "upstream": "Delivery & Proof Context",
    "downstream": "Engagement Governance Context",
    "pattern": "customer-supplier",
    "business_reason": "Governance needs a delivered, proof-recorded packet to close the engagement.",
    "data_exchanged": [
     "ProofOfServiceRecord"
    ],
    "events_exchanged": [
     "ProofOfServiceRecorded",
     "EngagementClosed"
    ],
    "contract_type": "Published language (EngagementClosure)",
    "failure_risks": [
     "Engagement closed without proof of service"
    ],
    "acl_notes": "Governance reads only proof-recorded engagements.",
    "ownership_boundary": "Delivery & Proof Context owns the proof-of-service archive."
   },
   {
    "upstream": "Review & Release Context",
    "downstream": "Rulebook Context",
    "pattern": "customer-supplier",
    "business_reason": "Every analyst/counsel correction should improve the rulebook.",
    "data_exchanged": [
     "AnalystCorrection"
    ],
    "events_exchanged": [
     "RulebookAmended"
    ],
    "contract_type": "Published language (RulebookRevision)",
    "failure_risks": [
     "Correction pattern never fed back"
    ],
    "acl_notes": "The rulebook learning loop writes only versioned revisions, never live rules directly.",
    "ownership_boundary": "Review & Release Context owns correction proposals; Rulebook Context owns publication."
   },
   {
    "upstream": "Review & Release Context",
    "downstream": "Engagement Governance Context",
    "pattern": "customer-supplier",
    "business_reason": "Deterministic-check failures and ambiguous matches must exit the automated pipeline for human triage.",
    "data_exchanged": [
     "ExceptionCase"
    ],
    "events_exchanged": [
     "ExceptionRouted"
    ],
    "contract_type": "Published language (ExceptionCase)",
    "failure_risks": [
     "Exception silently auto-resolved"
    ],
    "acl_notes": "Only a compliance analyst or counsel may re-route an ExceptionCase.",
    "ownership_boundary": "Review & Release Context owns human-triage routing."
   }
  ],
  "external_integrations": [
   {
    "system": "MHC property-management software exports (Zego, Innago, BC Solutions)",
    "risk": "Schema drift; silent field rename; rate limits",
    "internal_model": "Normalized intake record",
    "acl_strategy": "Adapter in Intake Context translates external schema → internal domain term; upstream schema never leaks past the adapter.",
    "owner_context": "Intake Context",
    "data_in": [
     "Rent roll / lease export"
    ],
    "data_out": [
     "Ack or receipt"
    ],
    "trigger": "manual-upload-or-api",
    "failure_strategy": "Exponential backoff with jitter; circuit breaker on repeated failure; dead-letter with owner-visible alert.",
    "audit_need": "Every call logged with tenant, request id, cost, and payload hash (no PII in logs)."
   },
   {
    "system": "State statute portals / legislative tracking services",
    "risk": "Statute amendment published without immediate detection",
    "internal_model": "RulebookEntry amendment signal",
    "acl_strategy": "Adapter in Rulebook Context translates external statute text → internal RulebookEntry; upstream schema never leaks past the adapter.",
    "owner_context": "Rulebook Context",
    "data_in": [
     "Statute text / bill status"
    ],
    "data_out": [
     "Amendment notification"
    ],
    "trigger": "scheduled-poll",
    "failure_strategy": "Exponential backoff with jitter; circuit breaker on repeated failure; dead-letter with owner-visible alert.",
    "audit_need": "Every poll logged with source, timestamp, and diff hash."
   },
   {
    "system": "Certified mail / delivery-confirmation and e-signature services",
    "risk": "Delivery confirmation delayed or lost",
    "internal_model": "ProofOfServiceRecord",
    "acl_strategy": "Adapter in Delivery & Proof Context translates external delivery receipt → internal domain term.",
    "owner_context": "Delivery & Proof Context",
    "data_in": [
     "Delivery receipt"
    ],
    "data_out": [
     "Proof-of-service record"
    ],
    "trigger": "api",
    "failure_strategy": "Exponential backoff with jitter; circuit breaker on repeated failure; dead-letter with owner-visible alert.",
    "audit_need": "Every call logged with tenant, request id, cost, and payload hash (no PII in logs)."
   },
   {
    "system": "OpenAI / Anthropic API",
    "risk": "Prompt-injection surface; token cost blowout; provider outage",
    "internal_model": "Draft payload with confidence score + validated schema",
    "acl_strategy": "OutputValidator + prompt-injection scrubber + per-tenant retrieval scope inside AI Workbench.",
    "owner_context": "Drafting Context",
    "data_in": [
     "Prompt + retrieval context"
    ],
    "data_out": [
     "Draft + confidence"
    ],
    "trigger": "api",
    "failure_strategy": "Exponential backoff with jitter; circuit breaker on repeated failure; dead-letter with owner-visible alert.",
    "audit_need": "Every call logged with tenant, request id, cost, and payload hash (no PII in logs)."
   }
  ],
  "event_storm": [
   {
    "seq": 1,
    "command": "SubmitIntake",
    "event": "IntakeReceived",
    "actor": "Owner-Operator / Community Manager",
    "context": "Intake Context",
    "aggregate": "ClientEngagement",
    "policy": "Reject duplicate intake for the same trigger event",
    "downstream": "Normalization begins",
    "risk": "Duplicate or malformed intake"
   },
   {
    "seq": 2,
    "command": "MatchRulebook",
    "event": "RulebookMatched",
    "actor": "AI Workbench",
    "context": "Rulebook Context",
    "aggregate": "RulebookEntry",
    "policy": "Route unmatched or ambiguous state/event-type combos to the exception queue",
    "downstream": "Drafting begins",
    "risk": "Wrong-state rulebook match"
   },
   {
    "seq": 3,
    "command": "DraftPacket",
    "event": "PacketDrafted",
    "actor": "AI Workbench",
    "context": "Drafting Context",
    "aggregate": "NoticePacket",
    "policy": "Flag any missing required field rather than guess",
    "downstream": "Deterministic check",
    "risk": "Hallucinated field without source quote"
   },
   {
    "seq": 4,
    "command": "RunDeterministicCheck",
    "event": "DeterministicCheckPassed",
    "actor": "Rule engine (deterministic)",
    "context": "Drafting Context",
    "aggregate": "NoticePacket",
    "policy": "Block staging for release on any open checklist item",
    "downstream": "Compliance-analyst review",
    "risk": "Stale rulebook version used in the check"
   },
   {
    "seq": 5,
    "command": "RunDeterministicCheck",
    "event": "DeterministicCheckFailed",
    "actor": "Rule engine (deterministic)",
    "context": "Drafting Context",
    "aggregate": "NoticePacket",
    "policy": "Route failed checks to the exception queue",
    "downstream": "Exception routing",
    "risk": "Deterministic check bypassed"
   },
   {
    "seq": 6,
    "command": "RouteException",
    "event": "ExceptionRouted",
    "actor": "Compliance Analyst",
    "context": "Review & Release Context",
    "aggregate": "ExceptionCase",
    "policy": "Only a compliance analyst or counsel may re-route an exception",
    "downstream": "Counsel triage",
    "risk": "Misclassified exception auto-resolves"
   },
   {
    "seq": 7,
    "command": "ReleasePacket",
    "event": "AnalystReleased",
    "actor": "Compliance Analyst",
    "context": "Review & Release Context",
    "aggregate": "NoticePacket",
    "policy": "100% analyst review of every packet",
    "downstream": "Counsel approval or direct delivery",
    "risk": "Analyst bottleneck delays release past 5 business days"
   },
   {
    "seq": 8,
    "command": "ApprovePacket",
    "event": "CounselApproved",
    "actor": "Contracted Counsel",
    "context": "Review & Release Context",
    "aggregate": "NoticePacket",
    "policy": "Closures, first-of-kind, ambiguous, and contested cases require counsel approval before delivery",
    "downstream": "Delivery",
    "risk": "Delivery proceeds without required counsel approval"
   },
   {
    "seq": 9,
    "command": "DeliverPacket",
    "event": "PacketDelivered",
    "actor": "Compliance Analyst",
    "context": "Delivery & Proof Context",
    "aggregate": "NoticePacket",
    "policy": "Requires AnalystReleased, and CounselApproved where required",
    "downstream": "Proof-of-service tracking",
    "risk": "Delivery adapter fails silently"
   },
   {
    "seq": 10,
    "command": "RecordProofOfService",
    "event": "ProofOfServiceRecorded",
    "actor": "AI (status monitor)",
    "context": "Delivery & Proof Context",
    "aggregate": "ProofOfServiceRecord",
    "policy": "Flag missing proof past the delivery-method's expected confirmation window",
    "downstream": "Engagement closure",
    "risk": "Silent proof-of-service failure voiding an otherwise-correct notice"
   },
   {
    "seq": 11,
    "command": "CloseEngagement",
    "event": "EngagementClosed",
    "actor": "Compliance Analyst",
    "context": "Delivery & Proof Context",
    "aggregate": "ClientEngagement",
    "policy": "Cannot close without a recorded or explicitly written-off ProofOfServiceRecord",
    "downstream": "Engagement archived",
    "risk": "Engagement closed without proof of service"
   },
   {
    "seq": 12,
    "command": "AmendRulebook",
    "event": "RulebookAmended",
    "actor": "Contracted Counsel",
    "context": "Rulebook Context",
    "aggregate": "RulebookEntry",
    "policy": "Freeze new packets for that state until re-validated",
    "downstream": "Drafting resumes on the new version",
    "risk": "Rulebook published without validation against a real packet"
   }
  ],
  "critical_path": [
   "IntakeReceived → RulebookMatched → PacketDrafted → DeterministicCheckPassed → AnalystReleased → PacketDelivered → ProofOfServiceRecorded → EngagementClosed"
  ],
  "exception_flows": [
   "PacketDrafted with low confidence or DeterministicCheckFailed → ExceptionRouted → counsel manual correction → AnalystReleased or CounselApproved",
   "DeliverPacket blocked by open owner action → DeliveryBlocked → owner resolves → retry",
   "ProofOfServiceRecorded missing past the delivery-method's confirmation window → owner-operator alert within 1h → re-send with amended proof"
  ],
  "escalation_flows": [
   "AI Workbench escalates to Compliance Analyst",
   "Compliance Analyst escalates ambiguous or first-of-kind packets to Contracted Counsel",
   "Contracted Counsel escalates a rulebook-gap statute question to Founder",
   "Founder escalates a regulator or UPL inquiry to outside bar counsel"
  ],
  "retry_flows": [
   "External API failure → exponential backoff with jitter, then dead-letter with owner-visible alert",
   "Model timeout → retry once, then ExceptionRouted",
   "Delivery adapter failure → retry with backoff, then owner-operator alert"
  ],
  "manual_override_flows": [
   "Compliance analyst may override the AI's rulebook match and re-route",
   "Founder may force-block a delivery via the Engagement Governance ledger",
   "Counsel may pull a rulebook version at any time (feature flag)"
  ],
  "commands": [
   {
    "name": "SubmitIntake",
    "issued_by": "Owner-Operator / Community Manager",
    "preconditions": [
     "Community provisioned",
     "Engagement letter on file"
    ],
    "aggregate": "ClientEngagement",
    "success_event": "IntakeReceived",
    "failure_event": "IntakeRejected",
    "authorization": "Community member with Operator role",
    "validation": "Rent roll + lease terms present; no duplicate open intake for the trigger event",
    "audit": "Command + payload hash logged with community + user"
   },
   {
    "name": "MatchRulebook",
    "issued_by": "AI Workbench",
    "preconditions": [
     "Intake received"
    ],
    "aggregate": "RulebookEntry",
    "success_event": "RulebookMatched",
    "failure_event": "RulebookMatchFailed",
    "authorization": "System",
    "validation": "State + trigger-event type maps to a published RulebookEntry",
    "audit": "Match logged with rulebook version used"
   },
   {
    "name": "DraftPacket",
    "issued_by": "AI Workbench",
    "preconditions": [
     "Rulebook matched"
    ],
    "aggregate": "NoticePacket",
    "success_event": "PacketDrafted",
    "failure_event": "DraftBlocked",
    "authorization": "System",
    "validation": "Every drafted field carries a source quote and confidence score",
    "audit": "AgentRun logged with prompt version + confidence scores"
   },
   {
    "name": "RunDeterministicCheck",
    "issued_by": "Rule engine (deterministic)",
    "preconditions": [
     "Packet drafted"
    ],
    "aggregate": "NoticePacket",
    "success_event": "DeterministicCheckPassed",
    "failure_event": "DeterministicCheckFailed",
    "authorization": "System",
    "validation": "Notice period, cap/limit, mandated content, print format, and delivery method all checked against the matched RulebookEntry",
    "audit": "Checklist result recorded against the packet"
   },
   {
    "name": "RouteException",
    "issued_by": "Compliance Analyst",
    "preconditions": [
     "DeterministicCheckFailed or ambiguous rulebook match"
    ],
    "aggregate": "ExceptionCase",
    "success_event": "ExceptionRouted",
    "failure_event": "None",
    "authorization": "Registered compliance analyst",
    "validation": "Reason code required",
    "audit": "Analyst ID + reason logged"
   },
   {
    "name": "ReleasePacket",
    "issued_by": "Compliance Analyst",
    "preconditions": [
     "Deterministic check passed"
    ],
    "aggregate": "NoticePacket",
    "success_event": "AnalystReleased",
    "failure_event": "PacketReturnedForCorrection",
    "authorization": "Registered compliance analyst",
    "validation": "Checklist item-by-item confirmation against source data",
    "audit": "Analyst ID + checklist result logged"
   },
   {
    "name": "ApprovePacket",
    "issued_by": "Contracted Counsel",
    "preconditions": [
     "Closure, first-of-kind, ambiguous, or rulebook-gap packet"
    ],
    "aggregate": "NoticePacket",
    "success_event": "CounselApproved",
    "failure_event": "CounselDeclined",
    "authorization": "Contracted counsel (licensed attorney)",
    "validation": "Language matches the verbatim rulebook-approved template only",
    "audit": "Counsel review timestamp logged"
   },
   {
    "name": "DeliverPacket",
    "issued_by": "Compliance Analyst",
    "preconditions": [
     "Analyst released",
     "Counsel approved where required"
    ],
    "aggregate": "NoticePacket",
    "success_event": "PacketDelivered",
    "failure_event": "DeliveryBlocked",
    "authorization": "Registered compliance analyst",
    "validation": "Engagement letter active",
    "audit": "Delivery timestamp + analyst ID logged"
   },
   {
    "name": "RecordProofOfService",
    "issued_by": "AI (status monitor)",
    "preconditions": [
     "Packet delivered"
    ],
    "aggregate": "ProofOfServiceRecord",
    "success_event": "ProofOfServiceRecorded",
    "failure_event": "ProofOfServiceMissing",
    "authorization": "System",
    "validation": "Delivery method + confirmation matched to the community's engagement",
    "audit": "Proof-of-service record logged to the archive"
   },
   {
    "name": "CloseEngagement",
    "issued_by": "Compliance Analyst",
    "preconditions": [
     "Proof of service recorded or explicitly written off"
    ],
    "aggregate": "ClientEngagement",
    "success_event": "EngagementClosed",
    "failure_event": "None",
    "authorization": "Registered compliance analyst",
    "validation": "No open exception cases",
    "audit": "Closure timestamp logged"
   },
   {
    "name": "AmendRulebook",
    "issued_by": "Contracted Counsel",
    "preconditions": [
     "Statute amendment identified"
    ],
    "aggregate": "RulebookEntry",
    "success_event": "RulebookAmended",
    "failure_event": "AmendmentRejected",
    "authorization": "Contracted counsel",
    "validation": "New version cites the amended statute text",
    "audit": "Amendment record logged with effective date"
   }
  ],
  "policies": [
   {
    "name": "Route low-confidence field to analyst triage",
    "trigger": "PacketDrafted",
    "condition": "Any field confidence < 0.70",
    "action": "Route to compliance-analyst triage before staging for release",
    "context": "Drafting Context",
    "ai_involvement": "author",
    "human_approval": false
   },
   {
    "name": "Draft exception-response language on a deterministic-check failure",
    "trigger": "DeterministicCheckFailed",
    "condition": "Failure reason cites a missing or ambiguous statutory field",
    "action": "Enqueue a counsel-reviewed correction grounded in the matched RulebookEntry",
    "context": "Review & Release Context",
    "ai_involvement": "author",
    "human_approval": false
   },
   {
    "name": "Escalate approaching-deadline compliance runs",
    "trigger": "IntakeReceived",
    "condition": "Trigger event carries a statutory clock under 10 days (e.g., WA's 5-day zoning-petition window)",
    "action": "Flag for rush handling and notify the compliance analyst immediately",
    "context": "Delivery & Proof Context",
    "ai_involvement": "assist",
    "human_approval": false
   },
   {
    "name": "Block release on open deterministic-checklist item",
    "trigger": "PacketDrafted",
    "condition": "Any deterministic_checklist item open",
    "action": "Reject transition to ReadyForRelease",
    "context": "Drafting Context",
    "ai_involvement": "none",
    "human_approval": false
   },
   {
    "name": "Freeze state on rulebook amendment",
    "trigger": "RulebookAmended",
    "condition": "Rule version bump for a state with in-flight packets",
    "action": "Pause new releases for that state until re-validated",
    "context": "Rulebook Context",
    "ai_involvement": "assist",
    "human_approval": true
   }
  ],
  "aggregates": [
   {
    "name": "NoticePacket",
    "root": "NoticePacket",
    "context": "Drafting Context",
    "purpose": "Guard drafting, deterministic-check, release, and delivery state transitions for one trigger event's Notice & Disclosure Compliance Packet.",
    "entities": [
     "NoticePacket",
     "DeterministicChecklistItem"
    ],
    "value_objects": [
     "ConfidenceScore",
     "SourceQuote",
     "RulebookVersionRef"
    ],
    "invariants": [
     "Cannot transition to Delivered without AnalystReleased, and CounselApproved when a closure/first-of-kind/contested case",
     "Cannot mark ReadyForRelease while any deterministic_checklist item is open"
    ],
    "commands": [
     "DraftPacket",
     "RunDeterministicCheck",
     "ReleasePacket"
    ],
    "events": [
     "PacketDrafted",
     "DeterministicCheckPassed",
     "AnalystReleased",
     "PacketDelivered"
    ],
    "repository": "NoticePacketRepository",
    "transaction_boundary": "single NoticePacket per transaction"
   },
   {
    "name": "RulebookEntry",
    "root": "RulebookEntry",
    "context": "Rulebook Context",
    "purpose": "Versioned, per-state, per-trigger-event-type MHC statute rule: notice period, cap/limit, mandated content, print format, delivery method, and citations.",
    "entities": [
     "RulebookEntry"
    ],
    "value_objects": [
     "RulebookVersion",
     "StatuteCitation"
    ],
    "invariants": [
     "Every NoticePacket records which RulebookEntry version it was drafted against",
     "A RulebookEntry cannot publish without counsel sign-off"
    ],
    "commands": [
     "PublishRulebookEntry",
     "AmendRulebook"
    ],
    "events": [
     "RulebookMatched",
     "RulebookAmended"
    ],
    "repository": "RulebookEntryRepository",
    "transaction_boundary": "single RulebookEntry per transaction"
   },
   {
    "name": "ClientEngagement",
    "root": "ClientEngagement",
    "context": "Intake Context",
    "purpose": "The community, contact, trigger event, and proof-of-service linkage tying one MHC owner-operator relationship together.",
    "entities": [
     "ClientEngagement",
     "EngagementLetter"
    ],
    "value_objects": [
     "TriggerEventType",
     "LotCountTier"
    ],
    "invariants": [
     "A compliance run cannot open without an accepted ClientEngagement",
     "Exactly one duty-holder of record is named per engagement"
    ],
    "commands": [
     "SubmitIntake",
     "CloseEngagement"
    ],
    "events": [
     "IntakeReceived",
     "EngagementClosed"
    ],
    "repository": "ClientEngagementRepository",
    "transaction_boundary": "single ClientEngagement per transaction"
   },
   {
    "name": "ExceptionCase",
    "root": "ExceptionCase",
    "context": "Review & Release Context",
    "purpose": "A compliance run routed to human triage after a deterministic-check failure or ambiguous rulebook match.",
    "entities": [
     "ExceptionCase"
    ],
    "value_objects": [
     "ExceptionReason"
    ],
    "invariants": [
     "Cannot auto-resolve back into the automated pipeline; only a compliance analyst or counsel can re-route it"
    ],
    "commands": [
     "RouteException"
    ],
    "events": [
     "ExceptionRouted"
    ],
    "repository": "ExceptionCaseRepository",
    "transaction_boundary": "single ExceptionCase per transaction"
   },
   {
    "name": "ProofOfServiceRecord",
    "root": "ProofOfServiceRecord",
    "context": "Delivery & Proof Context",
    "purpose": "The delivery-confirmation record tying a released packet to the date, method, and recipient it was actually sent to.",
    "entities": [
     "ProofOfServiceRecord"
    ],
    "value_objects": [
     "DeliveryMethod",
     "ServiceDate"
    ],
    "invariants": [
     "A ClientEngagement cannot close without a reconciled or explicitly written-off ProofOfServiceRecord"
    ],
    "commands": [
     "RecordProofOfService"
    ],
    "events": [
     "ProofOfServiceRecorded"
    ],
    "repository": "ProofOfServiceRecordRepository",
    "transaction_boundary": "single ProofOfServiceRecord per transaction"
   },
   {
    "name": "CommunityAccount",
    "root": "CommunityAccount",
    "context": "Community Onboarding Context",
    "purpose": "The onboarded MHC community tenant and its intake/notification preferences.",
    "entities": [
     "CommunityAccount"
    ],
    "value_objects": [
     "ClaimableLotCountThreshold"
    ],
    "invariants": [
     "A ClientEngagement cannot be created for a community without an active CommunityAccount"
    ],
    "commands": [
     "ProvisionCommunity"
    ],
    "events": [
     "CommunityProvisioned"
    ],
    "repository": "CommunityAccountRepository",
    "transaction_boundary": "single CommunityAccount per transaction"
   }
  ],
  "invariants": [
   {
    "invariant": "A NoticePacket cannot transition to Delivered without AnalystReleased and, for a closure/first-of-kind/ambiguous/contested case, CounselApproved.",
    "context": "Drafting Context ↔ Review & Release Context",
    "aggregate": "NoticePacket",
    "why": "No notice ever leaves without both human release and, where required, licensed-counsel sign-off.",
    "enforcement": "Aggregate command handler rejects DeliverPacket without both references"
   },
   {
    "invariant": "A NoticePacket cannot be marked ReadyForRelease while any deterministic_checklist item is open.",
    "context": "Drafting Context",
    "aggregate": "NoticePacket",
    "why": "Prevents a notice from being delivered incomplete and bouncing back or getting voided.",
    "enforcement": "Deterministic completeness-check gate on the drafting command handler"
   },
   {
    "invariant": "A closure, first-of-kind, ambiguous, or rulebook-gap NoticePacket cannot reach Delivered without CounselApproved.",
    "context": "Review & Release Context",
    "aggregate": "NoticePacket",
    "why": "Keeps ParkNotice Clear on the documentation-preparation side of the UPL boundary.",
    "enforcement": "Command handler blocks DeliverPacket without a CounselApproved reference when flagged"
   },
   {
    "invariant": "ParkNotice Clear never signs, files, or represents the community owner in a dispute; the duty-holder of record is always the community owner.",
    "context": "cross-cutting",
    "aggregate": "all",
    "why": "Keeps ParkNotice Clear structurally on the ministerial/documentation-preparation side of the UPL line — never legal advice.",
    "enforcement": "No 'files on behalf of' or 'represents' state exists anywhere in the domain model"
   },
   {
    "invariant": "Every NoticePacket records which RulebookEntry version it was drafted against.",
    "context": "Drafting Context ↔ Rulebook Context",
    "aggregate": "NoticePacket",
    "why": "Audit-trail requirement; supports reconstruction if a notice is challenged.",
    "enforcement": "Drafting command handler requires a rulebook-version reference"
   },
   {
    "invariant": "A ClientEngagement cannot close without a recorded or explicitly written-off ProofOfServiceRecord.",
    "context": "Delivery & Proof Context",
    "aggregate": "ClientEngagement / ProofOfServiceRecord",
    "why": "Prevents an engagement from silently closing before delivery is confirmed.",
    "enforcement": "Close command handler requires a ProofOfServiceRecord reference"
   },
   {
    "invariant": "An ExceptionCase cannot auto-resolve back into the automated pipeline.",
    "context": "Review & Release Context",
    "aggregate": "ExceptionCase",
    "why": "Ambiguous statutory matches and deterministic-check failures always require human triage.",
    "enforcement": "Only a compliance-analyst- or counsel-issued command may transition an ExceptionCase"
   },
   {
    "invariant": "Exactly one active engagement letter exists per community per compliance run.",
    "context": "Community Onboarding Context",
    "aggregate": "CommunityAccount",
    "why": "Prevents drafting under an expired or ambiguous engagement.",
    "enforcement": "Aggregate enforces single-active-engagement-letter constraint"
   },
   {
    "invariant": "100% of Notice & Disclosure Compliance Packets are counsel-reviewed during the pilot phase, regardless of AI confidence score, until 10 packets validate the checklist for that state/event-type.",
    "context": "Review & Release Context",
    "aggregate": "NoticePacket",
    "why": "No packet type has yet earned analyst-only release trust.",
    "enforcement": "Policy gate on ReleasePacket, stepped down per the after-10-packets hardening checkpoint"
   }
  ],
  "ai_agents": [
   {
    "name": "Extraction & Normalization Agent",
    "context": "Intake Context",
    "responsibility": "Extract community identity, lot count, tenancy dates, and prior-notice history from the rent roll and lease terms into the canonical intake schema.",
    "inputs": [
     "Rent roll",
     "Lease terms",
     "Prior-notice history"
    ],
    "outputs": [
     "Structured field values",
     "Source quotes",
     "Confidence scores"
    ],
    "tools": [
     "Retrieval API",
     "Structured-output validator"
    ],
    "forbidden_actions": [
     "Infer a field not explicitly present in the source text",
     "Access another community's data",
     "Emit output without a source quote per field"
    ],
    "memory_scope": "Per-run only; no cross-run memory; prompt-injection scrubber on all community inputs.",
    "retrieval_sources": [
     "Community-scoped knowledge base",
     "Rulebook Context (read-only per-state)"
    ],
    "validations": [
     "Structured-output schema",
     "Source-quote-per-field rule",
     "PII-scrub rule on prompt inputs"
    ],
    "confidence_scoring": "Model-reported logprobs + source-quote coverage combined into a bounded [0..1] score per field.",
    "escalation_triggers": [
     "Score < 0.70",
     "Ambiguous state/trigger-event match",
     "Missing source quote on any claimed field"
    ],
    "human_approval": true,
    "failure_modes": [
     "Prompt injection via rent-roll/lease content",
     "Hallucinated field without source",
     "Cross-community retrieval leak"
    ],
    "audit_logs": [
     "Prompt version",
     "Retrieval hits (ids only)",
     "Cost + latency",
     "Validator verdict"
    ],
    "metrics": [
     "Extraction acceptance rate",
     "Escalation rate",
     "Cost per packet",
     "p95 latency"
    ],
    "versioning": "Prompt versions immutable; published via the rulebook-linked prompt registry; rollout via feature flag."
   },
   {
    "name": "Drafting Agent",
    "context": "Drafting Context",
    "responsibility": "Draft the notice/disclosure language and completeness scorecard against the matched RulebookEntry, grounded in the extracted intake data.",
    "inputs": [
     "Normalized intake payload",
     "Matched RulebookEntry"
    ],
    "outputs": [
     "NoticePacket draft",
     "Deterministic-checklist pass/fail",
     "Exception-response draft (conditional)"
    ],
    "tools": [
     "Retrieval API",
     "Structured-output validator",
     "PDF templating"
    ],
    "forbidden_actions": [
     "Mark a field present without a source_quote",
     "Characterize a statutory interpretation beyond what's verbatim in the rulebook",
     "Compute notice-period or deadline figures (deterministic code only)"
    ],
    "memory_scope": "Per-run only; no cross-run memory; prompt-injection scrubber on all community inputs.",
    "retrieval_sources": [
     "Community-scoped knowledge base",
     "Rulebook Context (read-only per-state)"
    ],
    "validations": [
     "Structured-output schema",
     "Source-quote-per-field rule",
     "PII-scrub rule on prompt inputs"
    ],
    "confidence_scoring": "Model-reported logprobs + source-quote coverage combined into a bounded [0..1] score per field.",
    "escalation_triggers": [
     "Score < 0.70",
     "Ambiguous state/trigger-event match",
     "Missing source quote on any claimed field"
    ],
    "human_approval": true,
    "failure_modes": [
     "Prompt injection via rent-roll/lease content",
     "Hallucinated field without source",
     "Cross-community retrieval leak"
    ],
    "audit_logs": [
     "Prompt version",
     "Retrieval hits (ids only)",
     "Cost + latency",
     "Validator verdict"
    ],
    "metrics": [
     "Extraction acceptance rate",
     "Escalation rate",
     "Cost per packet",
     "p95 latency"
    ],
    "versioning": "Prompt versions immutable; published via the rulebook-linked prompt registry; rollout via feature flag."
   },
   {
    "name": "Deadline / Status Monitor Agent",
    "context": "Delivery & Proof Context",
    "responsibility": "Monitor proof-of-service confirmation and flag compliance runs approaching or past a statutory deadline (e.g., WA's 5-day zoning-petition window).",
    "inputs": [
     "Delivered NoticePacket records",
     "State-specific statutory-clock benchmarks"
    ],
    "outputs": [
     "ProofOfServiceRecorded events",
     "Deadline-risk flags"
    ],
    "tools": [
     "Status tracker API"
    ],
    "forbidden_actions": [
     "Contact a tenant without a logged notification record",
     "Suppress a deadline-risk flag"
    ],
    "memory_scope": "Per-run only; no cross-run memory; prompt-injection scrubber on all community inputs.",
    "retrieval_sources": [
     "Community-scoped knowledge base",
     "Rulebook Context (read-only per-state)"
    ],
    "validations": [
     "Structured-output schema",
     "Source-quote-per-field rule",
     "PII-scrub rule on prompt inputs"
    ],
    "confidence_scoring": "Model-reported logprobs + source-quote coverage combined into a bounded [0..1] score per field.",
    "escalation_triggers": [
     "Score < 0.70",
     "Ambiguous state/trigger-event match",
     "Missing source quote on any claimed field"
    ],
    "human_approval": true,
    "failure_modes": [
     "Prompt injection via rent-roll/lease content",
     "Hallucinated field without source",
     "Cross-community retrieval leak"
    ],
    "audit_logs": [
     "Prompt version",
     "Retrieval hits (ids only)",
     "Cost + latency",
     "Validator verdict"
    ],
    "metrics": [
     "Extraction acceptance rate",
     "Escalation rate",
     "Cost per packet",
     "p95 latency"
    ],
    "versioning": "Prompt versions immutable; published via the rulebook-linked prompt registry; rollout via feature flag."
   }
  ],
  "prompt_chain_map": [
   "Intake → Classifier (route + state/event-type category) → Drafter (cite + draft against rulebook) → OutputValidator → Analyst (approve or escalate)",
   "Correction analysis → Evaluator (assist only) → Counsel + Analyst co-sign"
  ],
  "rag_map": [
   "Per-community knowledge base partition → retrieval router → community-scoped hits → Drafter",
   "Rulebook Context (state statute corpus, read-only cache) → shared retrieval → Drafter (cited)"
  ],
  "ai_evaluation": [
   "Golden dataset of past analyst/counsel-accepted packets per beachhead state",
   "Regression thresholds on release-acceptance rate + citation coverage",
   "Every prompt release requires a passing Evaluator run"
  ],
  "hallucination_controls": [
   "Retrieval-first (no free-form generation without a rulebook citation)",
   "Structured-output validator enforces citation-per-claim",
   "Confidence-scored escalation",
   "Analyst/counsel gate on all outbound packets"
  ],
  "human_in_the_loop_plan": [
   "Compliance-analyst signoff on every outbound packet",
   "Counsel co-sign on corrections/retractions and every rulebook amendment",
   "Founder approval on public-release readiness",
   "Ops sign-off on prompt-version rollout"
  ],
  "ai_audit_plan": [
   "Every AgentRun logged with prompt version, retrieval hit ids, cost, latency, validator verdict",
   "13-month rolling retention on run logs",
   "PII scrubbed from log payloads"
  ],
  "prompt_versioning": "Prompt versions immutable once published; rolled out via feature flag; every rollout paired with an Evaluator run.",
  "human_roles": [
   {
    "role": "Compliance Analyst",
    "responsibilities": [
     "Approve / return every Notice & Disclosure Compliance Packet before delivery",
     "Sign every released packet"
    ],
    "contexts": [
     "Review & Release Context",
     "Drafting Context"
    ],
    "decisions_owned": [
     "Approval",
     "Return-for-correction",
     "Exception routing"
    ],
    "ai_support": [
     "Cited extractions",
     "Confidence-ranked fields"
    ],
    "approval_authority": "Full standard-tier packet release",
    "escalation_authority": "Escalate to Contracted Counsel",
    "quality_metrics": [
     "Cycle time to release",
     "Rejection-for-incompleteness rate"
    ],
    "workload_risks": [
     "Single-analyst bottleneck at volume"
    ]
   },
   {
    "role": "Contracted Counsel",
    "responsibilities": [
     "Review and approve closures, first-of-kind, ambiguous, or contested notice language",
     "Approve every rulebook publication and amendment"
    ],
    "contexts": [
     "Review & Release Context",
     "Rulebook Context"
    ],
    "decisions_owned": [
     "Counsel-approval or rejection",
     "Rulebook amendment approval"
    ],
    "ai_support": [
     "Rulebook-grounded draft language"
    ],
    "approval_authority": "Counsel-approval sign-off on closures/exceptions and the rulebook",
    "escalation_authority": "Decline and return for redraft",
    "quality_metrics": [
     "Sign-off cycle time",
     "Overturned-exception rate"
    ],
    "workload_risks": [
     "Delay when unavailable near a statutory deadline"
    ]
   },
   {
    "role": "Owner-Operator",
    "responsibilities": [
     "Resolve exception-queue escalations that require community-level facts",
     "Confirm community-level facts (lot count, prior-notice history)"
    ],
    "contexts": [
     "Review & Release Context (exception queue)",
     "Intake Context"
    ],
    "decisions_owned": [
     "Community-level policy decisions",
     "Sign and send the released packet"
    ],
    "ai_support": [
     "Exception summaries"
    ],
    "approval_authority": "Community-level policy decisions; final sender authority",
    "escalation_authority": "Final internal escalation point before counsel",
    "quality_metrics": [
     "Exception resolution time"
    ],
    "workload_risks": [
     "Delayed response stalling an exception compliance run"
    ]
   }
  ],
  "human_review_checkpoints": [
   "AI draft → compliance-analyst approval",
   "Public release → Founder acceptance",
   "Correction → counsel + analyst co-sign",
   "Prompt rollout → ops + evaluator"
  ],
  "escalation_matrix": [
   "AI Workbench → Compliance Analyst → Contracted Counsel → Founder → Outside bar counsel",
   "Delivery Success → Founder → Outside bar counsel (regulator/UPL inquiries)"
  ],
  "manual_override_rules": [
   "Any manual override captured as an explicit override event with actor + reason",
   "No override may bypass an analyst or counsel signoff invariant"
  ],
  "separation_of_duties": [
   "Drafting Agent cannot release; Compliance Analyst cannot draft on behalf of AI without an override event; Counsel cannot silently amend the rulebook"
  ],
  "quality_control_workflow": [
   "Weekly analyst calibration meeting",
   "Monthly evaluator regression report",
   "Quarterly correction-rate review with Founder + Contracted Counsel"
  ],
  "data_objects": [
   {
    "name": "trigger event",
    "meaning": "Unit of work brought in by the community",
    "owner_context": "Intake Context",
    "writers": [
     "Intake Context"
    ],
    "readers": [
     "Review & Release Context",
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Intake Context DB",
    "retention": "3 years + 6 months (the deterministic-checklist retention + buffer)",
    "privacy": "confidential",
    "audit": true
   },
   {
    "name": "field evidence",
    "meaning": "Cited fact backing a notice",
    "owner_context": "Drafting Context",
    "writers": [
     "Drafting Context"
    ],
    "readers": [
     "Review & Release Context",
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Drafting Context DB + Rulebook Context pointers",
    "retention": "3 years + 6 months",
    "privacy": "confidential",
    "audit": true
   },
   {
    "name": "Notice & Disclosure Compliance Packet",
    "meaning": "Analyst-released (and counsel-approved where required) deliverable",
    "owner_context": "Drafting Context",
    "writers": [
     "Drafting Context"
    ],
    "readers": [
     "Review & Release Context",
     "Delivery & Proof Context",
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Drafting Context DB (immutable after release)",
    "retention": "3 years + 6 months (mirrors the deterministic-checklist 3-year duty + buffer)",
    "privacy": "regulated",
    "audit": true
   },
   {
    "name": "Analyst / Counsel Signoff",
    "meaning": "Release signature manifest",
    "owner_context": "Review & Release Context",
    "writers": [
     "Review & Release Context"
    ],
    "readers": [
     "Drafting Context",
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Review & Release Context DB (append-only)",
    "retention": "3 years + 6 months",
    "privacy": "confidential",
    "audit": true
   },
   {
    "name": "OwnerActionLedger",
    "meaning": "Blocker facts per community",
    "owner_context": "Engagement Governance Context",
    "writers": [
     "Engagement Governance Context"
    ],
    "readers": [
     "Drafting Context (release decision)",
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Governance DB",
    "retention": "3 years + 6 months",
    "privacy": "internal",
    "audit": true
   },
   {
    "name": "AgentRun",
    "meaning": "Trace of one AI Workbench run",
    "owner_context": "Drafting Context",
    "writers": [
     "Drafting Context"
    ],
    "readers": [
     "Analytics & Reporting Context",
     "Review & Release Context (on escalation)"
    ],
    "source_of_truth": "Drafting Context DB",
    "retention": "13 months (rolling)",
    "privacy": "internal",
    "audit": true
   },
   {
    "name": "CommunityAccount",
    "meaning": "Customer organization + registered analysts/counsel",
    "owner_context": "Community Onboarding Context",
    "writers": [
     "Community Onboarding Context"
    ],
    "readers": [
     "all contexts"
    ],
    "source_of_truth": "Onboarding DB",
    "retention": "Life of contract + 3.5 years",
    "privacy": "confidential",
    "audit": true
   },
   {
    "name": "Subscription + Invoice",
    "meaning": "Commercial relationship + charges",
    "owner_context": "Billing & Revenue Context",
    "writers": [
     "Billing & Revenue Context"
    ],
    "readers": [
     "Analytics & Reporting Context"
    ],
    "source_of_truth": "Billing provider (Stripe)",
    "retention": "As required by tax law",
    "privacy": "confidential",
    "audit": true
   },
   {
    "name": "User + Role",
    "meaning": "Identity + authorization",
    "owner_context": "Identity & Access Context",
    "writers": [
     "Identity & Access Context"
    ],
    "readers": [
     "all contexts"
    ],
    "source_of_truth": "Identity DB",
    "retention": "Life of account + 2 years",
    "privacy": "confidential",
    "audit": true
   }
  ],
  "read_models": [
   "OperatorDashboard read model (per community): open intakes, in-review, delivered this week",
   "AnalystQueue read model: compliance runs awaiting analyst release with confidence + escalation reason",
   "ComplianceLedger read model: open owner actions + release-decision",
   "AnalyticsRollup read model: metric definitions rolled up daily"
  ],
  "reporting_models": [
   "Outcome report per community: packets delivered, cycle time, release rate, corrections",
   "Ops report: AI cost per packet, escalation rate, analyst load"
  ],
  "data_duplication_notes": [
   "Analyst/counsel identity is stored in Community Onboarding Context, referenced by Review & Release Context — Review & Release does not own it",
   "OwnerActionLedger duplicates minimal facts into read models for Drafting Context consumption"
  ],
  "data_retention": [
   "Packets + evidence + signoffs: 3 years + 6 months (mirrors the deterministic-checklist 3-year duty + buffer)",
   "AgentRun logs: 13 months rolling",
   "Users + sessions: life of account + 2 years"
  ],
  "data_quality_risks": [
   "Silent schema drift from MHC property-management-software exports",
   "Stale rulebook indices after a statute amendment",
   "Missing proof-of-service cross-links after legacy import"
  ],
  "use_cases": [
   {
    "name": "Deliver an analyst-released (and counsel-approved where required) Notice & Disclosure Compliance Packet",
    "actor": "Owner-Operator + Compliance Analyst",
    "context": "Drafting Context + Review & Release Context + Delivery & Proof Context",
    "goal": "Produce and deliver a compliance-analyst-released Notice & Disclosure Compliance Packet",
    "preconditions": [
     "Community provisioned",
     "Analyst registered",
     "Engagement letter accepted"
    ],
    "main_flow": [
     "Owner-Operator submits trigger-event intake",
     "Rent-roll/lease evidence attached / extracted",
     "AI Workbench drafts with rulebook citations",
     "Compliance analyst approves (counsel approves where required)",
     "Delivery adapter delivers",
     "Proof of service recorded"
    ],
    "alternative_flows": [
     "Confidence below threshold → ExceptionRouted → analyst drafts manually",
     "Blocking owner action open → DeliveryBlocked → surfaced to Founder",
     "Delivery failure → alert community within 1h"
    ],
    "business_rules": [
     "Every notice field must cite a source quote and a rulebook version",
     "Only a registered analyst may release; only counsel may approve closures/contested cases"
    ],
    "ai_role": "Draft + validate + score confidence",
    "human_role": "Release; approve; escalate",
    "commands": [
     "SubmitIntake",
     "MatchRulebook",
     "DraftPacket",
     "ReleasePacket",
     "DeliverPacket"
    ],
    "events": [
     "IntakeReceived",
     "RulebookMatched",
     "PacketDrafted",
     "AnalystReleased",
     "PacketDelivered"
    ],
    "aggregates": [
     "ClientEngagementAggregate",
     "RulebookEntryAggregate",
     "NoticePacketAggregate"
    ],
    "success": "Notice & Disclosure Compliance Packet delivered + analyst-released (+ counsel-approved where required) + audit trail complete",
    "failure_handling": "ExceptionRouted → analyst/counsel queue; DeliveryFailed → owner alert + Success ticket",
    "audit": "Full command → event chain with actor + timestamp per step"
   },
   {
    "name": "Void or correct a delivered packet",
    "actor": "Contracted Counsel + Compliance Analyst",
    "context": "Review & Release Context + Engagement Governance Context",
    "goal": "Formally withdraw or correct a delivered packet after a statute-interpretation error is found",
    "preconditions": [
     "Packet previously delivered",
     "Material finding documented"
    ],
    "main_flow": [
     "Finding documented",
     "Counsel + analyst co-sign the correction",
     "Community owner notified",
     "Audit-log append"
    ],
    "alternative_flows": [
     "Analyst disagrees → escalate to Founder",
     "Regulator or UPL inquiry incoming → run in parallel with legal-response workflow"
    ],
    "business_rules": [
     "Correction requires Counsel + Analyst co-sign"
    ],
    "ai_role": "Surface prior similar cases (assist only)",
    "human_role": "Co-sign + notify",
    "commands": [
     "FileCorrection"
    ],
    "events": [
     "RulebookAmended"
    ],
    "aggregates": [
     "NoticePacketAggregate",
     "OwnerActionLedgerAggregate"
    ],
    "success": "Correction filed + community notified + audit trail updated",
    "failure_handling": "Rejection path emits CorrectionRejected + escalates to Founder",
    "audit": "Full correction packet archived, immutable"
   },
   {
    "name": "Resolve an owner action and flip release readiness",
    "actor": "Founder",
    "context": "Engagement Governance Context",
    "goal": "Close a blocking owner action and recompute release readiness",
    "preconditions": [
     "Owner action open"
    ],
    "main_flow": [
     "Founder supplies fact",
     "Ledger updated",
     "ReleaseDecision recomputed",
     "Downstream contexts notified"
    ],
    "alternative_flows": [
     "Fact rejected → OwnerActionRejected",
     "Counsel review required → route to counsel"
    ],
    "business_rules": [
     "Release cannot flip to ready with any blocking action open"
    ],
    "ai_role": "Blocker digest",
    "human_role": "Supply fact + accept release",
    "commands": [
     "ResolveOwnerAction"
    ],
    "events": [
     "OwnerActionResolved",
     "ReleaseDecisionChanged"
    ],
    "aggregates": [
     "OwnerActionLedgerAggregate"
    ],
    "success": "Release decision flips or stays with clear reason",
    "failure_handling": "OwnerActionRejected + retry loop",
    "audit": "Actor + before/after + timestamp"
   }
  ],
  "architecture": {
   "style": "modular-monolith-event-driven",
   "why": "Single team + single regulated vertical per blueprint + strong consistency requirements around signoff / delivery / release-decision favor a monolith. Event-driven internals give us the audit-friendly append-only log without the operational cost of microservices.",
   "rejected_alternatives": [
    "Microservices — no independent scaling or team boundary justifies distributed cost yet.",
    "Serverless-workflow-only — analyst signoff and audit invariants are easier to keep correct in a monolith.",
    "No-code / low-code — cannot enforce OutputValidator, prompt versioning, or per-tenant retrieval isolation with fidelity."
   ],
   "backend_modules": [
    "Drafting Context",
    "AI Workbench Context",
    "Review & Release Context",
    "Engagement Governance Context",
    "Intake Context",
    "Community Onboarding Context",
    "Delivery & Proof Context",
    "Rulebook Context",
    "Analytics & Reporting Context"
   ],
   "frontend_modules": [
    "Operator dashboard",
    "Analyst console",
    "Client portal",
    "Owner console",
    "Ops (prompt registry) console"
   ],
   "api_boundaries": [
    "/intake/*",
    "/artifacts/*",
    "/analyst/*",
    "/compliance/*",
    "/knowledge/*",
    "/admin/*"
   ],
   "database_strategy": "One managed Postgres; schema-per-context; cross-context reads via published projections; RLS on protected tables.",
   "event_bus": "In-process event dispatcher backed by an outbox table (transactional publish); upgrade path to a real broker if throughput demands.",
   "queue": "Background job queue (managed) for AI runs, delivery adapters, and reindex jobs.",
   "workflow_engine": "None initially — orchestrate via domain events + policies; add a workflow engine if orchestrations exceed 5 sequential steps.",
   "ai_orchestration": "AI Workbench Context context owns bounded agents; OutputValidator + prompt registry + tenant-scoped retrieval; retries with backoff.",
   "rag_layer": "Per-tenant partitioned retrieval indices in a managed vector DB; ingestion pipeline in Knowledge Base context.",
   "file_storage": "Managed blob storage with per-tenant prefixes + signed URLs; artifacts hashed on write.",
   "authn_authz": "IdP (Google / Okta) for authn; RBAC via dedicated roles table with server-side checks + RLS.",
   "admin_dashboard": "Ops-facing admin for tenants, users, feature flags, prompt versions.",
   "client_portal": "Customer-facing portal: submit intake, see status, receive artifacts.",
   "operator_dashboard": "Internal: intake queue, analyst queue, escalation queue, delivery health.",
   "observability": "Structured logs with tenant + request ids; RED metrics per workflow; error tracking with source maps; model-call spans with cost + latency; SLO review weekly.",
   "audit_logging": "Append-only audit log for all state transitions; hash-chained snapshots on signed artifacts.",
   "deployment": "Single production region + multi-AZ managed DB; per-PR preview deploys; migrations gated on review."
  },
  "module_structure": {
   "tree": "/src\n  /contexts\n    /intake\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /community-onboarding\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /drafting\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /rulebook\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /review-release\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /engagement-governance\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /delivery-proof\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n    /analytics\n      /domain\n      /application\n      /infrastructure\n      /interfaces\n  /shared\n    /kernel        # tiny — Ids, Money, Tenant, Actor\n    /events        # published-language event contracts\n    /auth          # session + role primitives\n    /observability # logging, metrics, tracing\n    /config",
   "modules": [
    {
     "name": "drafting",
     "purpose": "Intake → NoticePacket lifecycle",
     "owned_domain": [
      "ClientEngagement",
      "NoticePacket draft",
      "Deterministic-checklist result"
     ],
     "application_services": [
      "SubmitIntake",
      "DraftPacket",
      "RunDeterministicCheck"
     ],
     "infra_adapters": [
      "Delivery adapter",
      "Outbox publisher"
     ],
     "public_interfaces": [
      "/intake/*",
      "/packets/*"
     ],
     "forbidden_deps": [
      "billing infra",
      "identity provider internals"
     ]
    },
    {
     "name": "rulebook",
     "purpose": "Versioned, counsel-approved state MHC statute rules",
     "owned_domain": [
      "RulebookEntry",
      "StatuteCitation"
     ],
     "application_services": [
      "PublishRulebookEntry",
      "MatchRulebook",
      "AmendRulebook"
     ],
     "infra_adapters": [
      "State statute portal client",
      "Retrieval router"
     ],
     "public_interfaces": [
      "internal"
     ],
     "forbidden_deps": [
      "cross-tenant retrieval",
      "direct delivery"
     ]
    },
    {
     "name": "review-release",
     "purpose": "Analyst release + counsel approval + exception routing",
     "owned_domain": [
      "ReleaseDecision",
      "ExceptionCase"
     ],
     "application_services": [
      "ReleasePacket",
      "ApprovePacket",
      "RouteException"
     ],
     "infra_adapters": [
      "Signature service"
     ],
     "public_interfaces": [
      "/review/*"
     ],
     "forbidden_deps": [
      "draft content mutation"
     ]
    },
    {
     "name": "engagement-governance",
     "purpose": "Owner-action ledger + release decision + UPL-boundary enforcement",
     "owned_domain": [
      "OwnerActionLedger",
      "ReleaseDecision",
      "DSARRequest"
     ],
     "application_services": [
      "ResolveOwnerAction",
      "ProcessDSAR"
     ],
     "infra_adapters": [
      "Email adapter"
     ],
     "public_interfaces": [
      "/compliance/*"
     ],
     "forbidden_deps": [
      "draft content"
     ]
    }
   ],
   "dependency_rules": [
    "Domain layer must not depend on infrastructure.",
    "Application layer may depend on domain.",
    "Infrastructure implements ports defined by application/domain.",
    "Interfaces call application services.",
    "Shared kernel must remain small (Ids, Money, Tenant, Actor).",
    "Contexts communicate through published events or explicit application APIs — never via direct database access to another context."
   ]
  },
  "security_governance": {
   "controls": [
    {
     "risk": "Prompt injection via customer input",
     "context": "AI Workbench Context",
     "impact": "high",
     "control": "Input scrubber + OutputValidator + tenant-scoped retrieval",
     "audit": "AgentRun trace"
    },
    {
     "risk": "Cross-tenant retrieval leak",
     "context": "Knowledge Base",
     "impact": "severe",
     "control": "Per-tenant index partitions + TenantIsolationSpec enforced at router",
     "audit": "Retrieval call log"
    },
    {
     "risk": "Signature spoofing",
     "context": "Review & Release Context",
     "impact": "severe",
     "control": "Signature bound to authenticated session; server-side validation",
     "audit": "Signature manifest"
    },
    {
     "risk": "Premature public notice",
     "context": "Engagement Governance Context",
     "impact": "high",
     "control": "ReleaseReadinessSpec on OwnerActionLedger",
     "audit": "Release-decision log"
    },
    {
     "risk": "Privilege escalation",
     "context": "Identity & Access Context",
     "impact": "high",
     "control": "Roles in dedicated table + server-side checks + RLS",
     "audit": "Role assignment log"
    },
    {
     "risk": "Silent delivery failure",
     "context": "Delivery & Proof Context",
     "impact": "medium",
     "control": "Adapter receipt required; alert customer within 1h on failure",
     "audit": "Delivery receipt archive"
    }
   ],
   "ai_governance": [
    "Every prompt version has a named owner + evaluator run + rollout flag",
    "AI outputs marked as suggestions until analyst signoff",
    "Model + prompt inventory maintained in Ops console"
   ],
   "prompt_injection_defense": [
    "Strip / neutralize instruction-like patterns in customer inputs before prompt assembly",
    "Never concatenate raw customer input into a system prompt",
    "OutputValidator rejects outputs that reference forbidden actions"
   ],
   "sensitive_data_handling": [
    "PII scrubbed from logs",
    "Regulated data classes never sent to external model providers unless BAA/DPA covers it",
    "Per-tenant blob storage prefixes + signed URLs"
   ],
   "access_control_matrix": [
    {
     "role": "Customer operator",
     "context": "Drafting Context",
     "capabilities": [
      "OpenIntake",
      "AttachEvidence",
      "View own artifacts"
     ]
    },
    {
     "role": "contracted counsel",
     "context": "Review & Release Context",
     "capabilities": [
      "ApproveArtifact",
      "RejectArtifact",
      "Co-sign retraction"
     ]
    },
    {
     "role": "Business owner",
     "context": "Engagement Governance Context",
     "capabilities": [
      "ResolveOwnerAction",
      "Set release decision"
     ]
    },
    {
     "role": "Legal",
     "context": "Review & Release Context + Compliance",
     "capabilities": [
      "Co-sign retraction",
      "Handle DSAR"
     ]
    },
    {
     "role": "Ops",
     "context": "AI Workbench Context",
     "capabilities": [
      "PublishPromptVersion",
      "Set confidence threshold"
     ]
    },
    {
     "role": "Platform admin",
     "context": "Identity & Access Context",
     "capabilities": [
      "Provision users",
      "Assign roles"
     ]
    }
   ],
   "audit_log_requirements": [
    "Append-only",
    "Actor + tenant + timestamp + command + before/after hash",
    "PII scrubbed",
    "Exportable per tenant on request (DSAR support)"
   ]
  },
  "observability": {
   "metrics": [
    {
     "metric": "Analyst-signed artifacts / week / tenant",
     "type": "business",
     "context": "Drafting Context",
     "why": "North star: repeatable value delivery",
     "target": "≥ contracted cadence",
     "alert_threshold": "< 80% of contracted cadence"
    },
    {
     "metric": "AI draft acceptance rate",
     "type": "ai-quality",
     "context": "AI Workbench Context",
     "why": "Signals grounding + prompt fit",
     "target": "≥ 70% by Phase 2",
     "alert_threshold": "< 50% weekly"
    },
    {
     "metric": "Escalation rate",
     "type": "ai-quality",
     "context": "AI Workbench Context",
     "why": "Guardrails firing correctly",
     "target": "5-15%",
     "alert_threshold": "> 30% weekly"
    },
    {
     "metric": "Cycle time to signoff (p50 + p95)",
     "type": "operational",
     "context": "Review & Release Context",
     "why": "Analyst throughput",
     "target": "p95 ≤ 5 business days",
     "alert_threshold": "> 5 business days"
    },
    {
     "metric": "Signoff-to-retraction ratio",
     "type": "risk",
     "context": "Review & Release Context",
     "why": "Correctness signal",
     "target": "< 1%",
     "alert_threshold": "any retraction week-over-week"
    },
    {
     "metric": "Delivery failure rate",
     "type": "reliability",
     "context": "Delivery & Proof Context",
     "why": "Customer-facing reliability",
     "target": "< 0.5%",
     "alert_threshold": "> 1% daily"
    },
    {
     "metric": "Owner-action open count",
     "type": "business",
     "context": "Engagement Governance Context",
     "why": "Public-release readiness",
     "target": "0 for launched blueprints",
     "alert_threshold": "any blocker aging > 30 days"
    },
    {
     "metric": "Model cost per artifact",
     "type": "financial",
     "context": "AI Workbench Context",
     "why": "Margin control",
     "target": "≤ target per pricing model",
     "alert_threshold": "> 1.5× target"
    },
    {
     "metric": "Cross-tenant retrieval violation attempts",
     "type": "risk",
     "context": "Knowledge Base",
     "why": "Security invariant",
     "target": "0",
     "alert_threshold": "any > 0"
    },
    {
     "metric": "First-artifact time per tenant",
     "type": "customer",
     "context": "Community Onboarding Context",
     "why": "Activation",
     "target": "≤ 2 weeks",
     "alert_threshold": "> 4 weeks"
    }
   ],
   "dashboards": [
    "Operator dashboard",
    "Analyst queue",
    "Delivery health",
    "AI cost + escalation",
    "Compliance blockers"
   ],
   "audit_reports": [
    "Per-tenant audit-log export",
    "Signature manifest export"
   ],
   "quality_review_reports": [
    "Analyst calibration report",
    "Escalation-outcome report"
   ],
   "ai_evaluation_reports": [
    "Evaluator regression report",
    "Prompt-rollout diff"
   ],
   "client_outcome_reports": [
    "Artifacts delivered",
    "Cycle time",
    "Retraction rate"
   ]
  },
  "testing_strategy": {
   "tests": [
    {
     "type": "Domain unit",
     "validates": "Aggregate invariants",
     "context": "all core contexts",
     "example": "NoticePacketAggregate rejects deliver without signoff"
    },
    {
     "type": "Aggregate invariant",
     "validates": "Consistency boundaries",
     "context": "Drafting Context / QA",
     "example": "Signed artifact is immutable"
    },
    {
     "type": "Policy",
     "validates": "Reactive rules",
     "context": "AI Workbench Context",
     "example": "Escalates below confidence threshold"
    },
    {
     "type": "Specification",
     "validates": "Reusable rules",
     "context": "Compliance",
     "example": "ReleaseReadinessSpec blocks 'ready' with open owner actions"
    },
    {
     "type": "Application use-case",
     "validates": "End-to-end command flow",
     "context": "Fulfillment + QA",
     "example": "Deliver signed artifact happy path"
    },
    {
     "type": "Integration",
     "validates": "Adapter behavior",
     "context": "External Integrations",
     "example": "Stripe subscription webhook translates correctly"
    },
    {
     "type": "Contract",
     "validates": "Published-language event schemas",
     "context": "cross-context",
     "example": "DraftProduced payload matches consumer expectations"
    },
    {
     "type": "AI prompt eval",
     "validates": "Prompt quality vs golden dataset",
     "context": "AI Workbench Context",
     "example": "Drafter accepts ≥ 40% in shadow mode"
    },
    {
     "type": "RAG retrieval",
     "validates": "Tenant isolation + coverage",
     "context": "Knowledge Base",
     "example": "Cross-tenant lookup returns zero rows"
    },
    {
     "type": "Golden dataset",
     "validates": "AI regression",
     "context": "AI Workbench Context",
     "example": "No regression on past accepted artifacts"
    },
    {
     "type": "Human review simulation",
     "validates": "Escalation UX",
     "context": "QA",
     "example": "Analyst can complete signoff in ≤ 5 clicks"
    },
    {
     "type": "End-to-end",
     "validates": "Critical path",
     "context": "all",
     "example": "Intake → signoff → delivery in staging"
    },
    {
     "type": "Security",
     "validates": "Auth + RLS + injection defense",
     "context": "Identity + AI Workbench Context",
     "example": "Prompt-injection payload is neutralized"
    },
    {
     "type": "Regression",
     "validates": "No drift on prior fixes",
     "context": "all",
     "example": "Prior retraction bug does not reappear"
    }
   ],
   "critical_domain_rules": [
    "No delivery without signoff",
    "No AI output without OutputValidator pass",
    "No retrieval outside tenant partition",
    "No public-release flip with open blockers"
   ],
   "ai_eval_dataset": [
    "50 past analyst-accepted artifacts per vertical (redacted)",
    "20 rejected drafts (ground truth for escalation)",
    "10 injection-payload cases"
   ],
   "regression_plan": "Every PR runs domain + policy + spec unit tests. Every prompt release runs Evaluator with regression gate. Weekly critical-path smoke test in staging.",
   "contract_testing_plan": "Published-language event schemas versioned in /shared/events; consumer tests run in CI against schema-version compatibility.",
   "manual_qa_checklist": [
    "Signoff flow: signature captured + timestamp + hash",
    "Retraction flow: co-sign captured + customer notified",
    "Delivery flow: receipt archived",
    "DSAR flow: export completes end-to-end"
   ]
  },
  "mvp_roadmap": [
   {
    "phase": "Phase 0 — Manual workflow with instrumented capture",
    "goal": "Deliver one WA rent-increase packet end-to-end manually (spreadsheet rulebook + counsel-reviewed template), capture every step as a domain event.",
    "features": [
     "Manual intake form",
     "Evidence upload",
     "Human draft",
     "Counsel signoff via signed form"
    ],
    "contexts": [
     "Intake Context",
     "Review & Release Context"
    ],
    "ai_needs": [],
    "human_workflows": [
     "Compliance-analyst + counsel signoff"
    ],
    "data_needs": [
     "trigger event",
     "field evidence",
     "Notice & Disclosure Compliance Packet"
    ],
    "integrations": [
     "Email"
    ],
    "risks": [
     "Un-audited manual step"
    ],
    "exit_criteria": [
     "1 real packet delivered + counsel-reviewed"
    ]
   },
   {
    "phase": "Phase 1 — AI-assisted drafting for internal use only",
    "goal": "Introduce the Drafting Agent with an analyst gate; no customer-facing AI language.",
    "features": [
     "Drafting Agent (internal)",
     "OutputValidator",
     "Exception-queue route"
    ],
    "contexts": [
     "Drafting Context",
     "Rulebook Context"
    ],
    "ai_needs": [
     "Drafter, Classifier"
    ],
    "human_workflows": [
     "Exception-queue review"
    ],
    "data_needs": [
     "AgentRun",
     "RulebookEntry"
    ],
    "integrations": [
     "OpenAI / Anthropic"
    ],
    "risks": [
     "Prompt injection",
     "Grounding drift against the rulebook"
    ],
    "exit_criteria": [
     "AI draft acceptance rate ≥ 40% in shadow mode"
    ]
   },
   {
    "phase": "Phase 2 — Operator dashboard + owner-action ledger",
    "goal": "Make the pilot legible and governable for the Founder.",
    "features": [
     "Operator dashboard",
     "Owner-action ledger",
     "Release-decision engine"
    ],
    "contexts": [
     "Engagement Governance Context"
    ],
    "ai_needs": [],
    "human_workflows": [
     "Owner-action resolution"
    ],
    "data_needs": [
     "OwnerActionLedger"
    ],
    "integrations": [
     "IdP"
    ],
    "risks": [
     "Ungoverned public claims"
    ],
    "exit_criteria": [
     "Release decisions computed from the ledger"
    ]
   },
   {
    "phase": "Phase 3 — Community delivery portal",
    "goal": "Give owner-operators a portal to see compliance-run status and receive packets.",
    "features": [
     "Client portal",
     "Delivery adapter",
     "Correction workflow"
    ],
    "contexts": [
     "Delivery & Proof Context"
    ],
    "ai_needs": [],
    "human_workflows": [
     "Analyst delivery cadence"
    ],
    "data_needs": [
     "Delivery"
    ],
    "integrations": [
     "Email"
    ],
    "risks": [
     "Silent delivery failure"
    ],
    "exit_criteria": [
     "Delivery-failure alert within 1h"
    ]
   },
   {
    "phase": "Phase 4 — Automated QA + reporting",
    "goal": "Wire metrics, correction runbook, and an evaluator agent as OR/CA rulebooks come online.",
    "features": [
     "Evaluator Agent",
     "Correction workflow",
     "Dashboards"
    ],
    "contexts": [
     "Analytics & Reporting Context",
     "Review & Release Context"
    ],
    "ai_needs": [
     "Evaluator"
    ],
    "human_workflows": [
     "Correction co-sign"
    ],
    "data_needs": [
     "Correction records"
    ],
    "integrations": [],
    "risks": [
     "Vanity metrics"
    ],
    "exit_criteria": [
     "North-star + guardrail metrics live"
    ]
   },
   {
    "phase": "Phase 5 — Scale + optimization",
    "goal": "Reduce cost per packet, increase analyst throughput, step down counsel-review share for validated combos.",
    "features": [
     "Prompt versioning UI",
     "Cost budgeting",
     "Multi-analyst queue"
    ],
    "contexts": [
     "Drafting Context",
     "Review & Release Context"
    ],
    "ai_needs": [
     "Cost meter"
    ],
    "human_workflows": [
     "Multi-analyst routing"
    ],
    "data_needs": [],
    "integrations": [],
    "risks": [
     "Regression on rollout"
    ],
    "exit_criteria": [
     "Model cost per packet ≤ $1-3 target"
    ]
   }
  ],
  "scaling_roadmap": [
   {
    "stage": "≤ 5 communities",
    "trigger": "Capped WA pilot cohort",
    "architecture_change": "Single-region modular monolith + managed DB",
    "operational_change": "Founder-led ops; weekly working session",
    "risk": "Single-owner queue"
   },
   {
    "stage": "5-25 communities",
    "trigger": "First paid conversions beyond the pilot",
    "architecture_change": "Extract the heaviest module (AI Workbench) behind an internal queue; keep monolith",
    "operational_change": "Named on-call rotation; SOC 2 Type I scoping",
    "risk": "Analyst bottleneck"
   },
   {
    "stage": "25-100 communities",
    "trigger": "Multi-state expansion (OR, CA, MN, IL) + multi-analyst demand",
    "architecture_change": "Split AI Workbench into its own service if throughput/isolation demands it; per-state rulebook sharding",
    "operational_change": "Dedicated success + prompt-ops roles",
    "risk": "Prompt version drift across state rulebooks"
   },
   {
    "stage": "100+ communities",
    "trigger": "Portfolio Retainer + multi-state segments",
    "architecture_change": "Regional deployments; per-state data residency; segregated compliance environments",
    "operational_change": "Dedicated SRE + compliance team; SOC 2 Type II + framework additions",
    "risk": "Compliance framework demand exceeds team capacity"
   }
  ],
  "risk_register": [
   {
    "risk": "A state's UPL review sweeps in the documentation-preparation pattern more broadly than the Washington framework relied on",
    "likelihood": "medium",
    "impact": "severe",
    "signal": "See ProductBlueprintDNA / risk register for tuned early-warning signals",
    "mitigation": "Counsel review before each new state activates; documentation-preparation-only scope enforced structurally",
    "owner": "legal",
    "context": "Engagement Governance Context"
   },
   {
    "risk": "AI hallucination in a delivered notice packet",
    "likelihood": "medium",
    "impact": "high",
    "signal": "See ProductBlueprintDNA / risk register for tuned early-warning signals",
    "mitigation": "Retrieval-first pipeline + structured output validation + compliance-analyst gate",
    "owner": "engineering",
    "context": "Drafting Context"
   },
   {
    "risk": "Cross-community tenant-PII leak",
    "likelihood": "low",
    "impact": "severe",
    "signal": "See ProductBlueprintDNA / risk register for tuned early-warning signals",
    "mitigation": "Row-level auth + per-community retrieval indices + log-scrubbing",
    "owner": "engineering",
    "context": "Rulebook Context"
   },
   {
    "risk": "Compliance-analyst / counsel bottleneck as onboarding outpaces reviewer capacity",
    "likelihood": "high",
    "impact": "high",
    "signal": "See ProductBlueprintDNA / risk register for tuned early-warning signals",
    "mitigation": "Pilot cap (5 WA operators) + contractor analyst added as volume grows per financial model",
    "owner": "ops",
    "context": "Review & Release Context"
   }
  ],
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Architecture style",
    "status": "accepted",
    "context": "Single team, single regulated vertical per blueprint, evidence-linked workflow.",
    "options": [
     "Modular monolith",
     "Microservices",
     "Serverless workflow",
     "No-code first"
    ],
    "chosen": "Modular monolith with event-driven internals",
    "business_reason": "Ship a defensible vertical slice with one team; avoid distributed-systems cost until scale forces it.",
    "technical_reason": "Deterministic transactions across aggregates; simpler ops; one deployable.",
    "tradeoffs": [
     "May feel unsophisticated to enterprise analysts",
     "Refactor cost if we later split"
    ],
    "risks": [
     "Module boundaries erode without discipline"
    ],
    "revisit_trigger": "Any single module needs independent scaling or team boundary."
   },
   {
    "id": "ADR-002",
    "decision": "Bounded context boundaries",
    "status": "accepted",
    "context": "Domain analysis above; distinct language groups for Fulfillment, AI Workbench Context, QA, Compliance.",
    "options": [
     "Contexts as above",
     "One big 'app' context",
     "Contexts split by UI page"
    ],
    "chosen": "Contexts as above (domain-derived)",
    "business_reason": "Protects the analyst signoff invariant + owner-action ledger + evidence spine as first-class boundaries.",
    "technical_reason": "Aggregates align to consistency boundaries; ACLs contain external mess.",
    "tradeoffs": [
     "More code organization discipline"
    ],
    "risks": [
     "Team tries to bypass ACL for speed"
    ],
    "revisit_trigger": "New subdomain emerges (e.g., self-serve marketplace)."
   },
   {
    "id": "ADR-003",
    "decision": "Database ownership",
    "status": "accepted",
    "context": "Modular monolith with shared Postgres; per-context schemas.",
    "options": [
     "One shared schema",
     "Schema per context",
     "DB per context"
    ],
    "chosen": "Schema per context in shared Postgres, cross-context reads only via published projections.",
    "business_reason": "Keeps operational cost low; enforces boundaries without paying multi-DB tax.",
    "technical_reason": "RLS + schema separation gives ownership clarity.",
    "tradeoffs": [
     "Discipline required to avoid cross-schema joins"
    ],
    "risks": [
     "Bypass joins for speed"
    ],
    "revisit_trigger": "A context needs independent scaling or residency."
   },
   {
    "id": "ADR-004",
    "decision": "AI orchestration strategy",
    "status": "accepted",
    "context": "Retrieval-first with structured-output validation + human gate.",
    "options": [
     "Open-ended chat",
     "Retrieval-first + validated",
     "Autonomous multi-agent"
    ],
    "chosen": "Retrieval-first + structured validation + analyst gate",
    "business_reason": "Grounding + defensibility are the paid outcome.",
    "technical_reason": "OutputValidator gives a hard boundary before drafts leave AI Workbench Context.",
    "tradeoffs": [
     "Slower than agentic chat"
    ],
    "risks": [
     "Prompt version regression"
    ],
    "revisit_trigger": "Evaluator shows a step-function accuracy gain from a new pattern."
   },
   {
    "id": "ADR-005",
    "decision": "Human review strategy",
    "status": "accepted",
    "context": "Regulated vertical; brand + legal risk on wrong outputs.",
    "options": [
     "No human review (fully automated)",
     "Sampling review",
     "Every-artifact review"
    ],
    "chosen": "Every-artifact review by named licensed analyst",
    "business_reason": "Signoff is the trust primitive.",
    "technical_reason": "Signature bound to session; append-only log.",
    "tradeoffs": [
     "Analyst throughput becomes the bottleneck"
    ],
    "risks": [
     "Analyst burnout"
    ],
    "revisit_trigger": "Sustained low retraction rate + regulator acceptance."
   },
   {
    "id": "ADR-006",
    "decision": "Integration strategy",
    "status": "accepted",
    "context": "External systems: Vendor invoice inboxes, HVAC work-order / CMMS platforms, Customer AP / document portals, ...",
    "options": [
     "Direct API coupling",
     "Anti-corruption layer per system",
     "Middleware bus (Zapier/n8n)"
    ],
    "chosen": "Anti-corruption layer per system, owned by External Integrations context",
    "business_reason": "External schemas must never leak into the core.",
    "technical_reason": "Adapters translate + validate; upstream break contained.",
    "tradeoffs": [
     "More code than direct coupling"
    ],
    "risks": [
     "Adapter lag on upstream change"
    ],
    "revisit_trigger": "External system stability changes materially."
   },
   {
    "id": "ADR-007",
    "decision": "Modular monolith vs microservices",
    "status": "accepted",
    "context": "Same as ADR-001.",
    "options": [
     "Monolith",
     "Microservices"
    ],
    "chosen": "Monolith",
    "business_reason": "Team size and scale do not justify microservices cost.",
    "technical_reason": "Distributed transactions across signoff/delivery would be a nightmare early.",
    "tradeoffs": [
     "Refactor cost later"
    ],
    "risks": [
     "Cultural expectation drift"
    ],
    "revisit_trigger": "See ADR-001."
   },
   {
    "id": "ADR-008",
    "decision": "Build vs buy for generic subdomains",
    "status": "accepted",
    "context": "Billing, Identity, IdP, email.",
    "options": [
     "Build all",
     "Buy generics"
    ],
    "chosen": "Buy generics (Stripe, IdP, transactional email)",
    "business_reason": "Do not spend core-domain hours on solved categories.",
    "technical_reason": "Standard SDKs + well-documented failure modes.",
    "tradeoffs": [
     "Vendor risk"
    ],
    "risks": [
     "Vendor lock-in"
    ],
    "revisit_trigger": "Cost or reliability materially degrades."
   }
  ],
  "self_audit": {
   "scores": [
    {
     "category": "Domain accuracy",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Ubiquitous language quality",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Subdomain classification quality",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Bounded context clarity",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Core domain focus",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Context map quality",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Aggregate design quality",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Invariant quality",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "AI-agent responsibility design",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Human review safety",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Data ownership clarity",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Integration protection",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Implementation feasibility",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Scalability",
     "score": 7,
     "weakness": "Single-region; single-analyst bottleneck; monolith split not planned.",
     "improvement": "Add per-tenant AI queue + multi-analyst routing at Phase 2."
    },
    {
     "category": "Security and compliance",
     "score": 7,
     "weakness": "High-trust vertical needs Type II mapping and per-regime controls earlier.",
     "improvement": "Map controls at Phase 1; commit to Type II by Phase 3."
    },
    {
     "category": "Testing strategy",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Operational realism",
     "score": 7,
     "weakness": "Founder-led ops assumed through Phase 2; brittle to key-person absence.",
     "improvement": "Document runbooks; cross-train success + prompt-ops role by Phase 2."
    },
    {
     "category": "MVP practicality",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    }
   ],
   "weakest_parts": [
    "Scalability plan assumes single analyst per tenant through Phase 2",
    "Operational realism depends on founder-led ops",
    "Compliance framework depth for Type II"
   ],
   "biggest_assumptions": [
    "Independent MHC owner-operators will pay for evidence-linked, human-reviewed notice packets over drafting from a template themselves.",
    "The workflow can be reconstructed from an owner-supplied rent roll and lease terms within one week per pilot operator.",
    "The vertical tolerates AI-assisted drafts when compliance-analyst and counsel review is explicit and audit-traceable."
   ],
   "highest_risk_decisions": [
    "Modular monolith (ADR-001)",
    "Every-artifact analyst signoff (ADR-005)",
    "Anti-corruption layer per external system (ADR-006)"
   ],
   "needs_domain_expert": [
    "Contracted counsel to validate the release-gate ergonomics for closure/first-of-kind packets",
    "MHC-compliance-notice SME on rent-roll-field and lease-evidence taxonomy across beachhead states"
   ],
   "needs_legal": [
    "Correction/retraction workflow language",
    "DSAR SLA + regulator/UPL-inquiry response runbook",
    "Public-notice policy for microsite content"
   ],
   "needs_prototype": [
    "Drafter Agent accuracy on 20-case golden dataset",
    "Analyst signoff UX end-to-end in ≤ 5 minutes per artifact",
    "Per-tenant retrieval isolation test"
   ],
   "validate_before_prod": [
    "Named licensed analyst + engagement letter on file",
    "Owner-action ledger populated per launch tenant",
    "OutputValidator false-negative rate acceptable",
    "Delivery failure alert path tested"
   ]
  },
  "final_recommendations": [
   "Ship a modular-monolith, rulebook-linked, analyst-and-counsel-gated vertical slice for ParkNotice Clear. Preserve the invariant that no Notice & Disclosure Compliance Packet leaves the system without AnalystReleased — and CounselApproved on every closure, first-of-kind, ambiguous, or contested case. Do not launch commercially until owner-action facts close and at least one counsel-reviewed packet is delivered.",
   "Do NOT default to microservices. Extract a module only when a specific pressure demands it.",
   "Do NOT allow AI outputs to leave the Drafting Context without OutputValidator pass and rulebook-citation coverage.",
   "Do NOT ship any public claim on the ParkNotice Clear microsite while owner actions are open.",
   "Do NOT store roles on user/profile tables; use a dedicated roles table with server-side checks + RLS.",
   "DO wire the north-star + guardrail metrics before Phase 2 launch.",
   "DO capture every state transition as an append-only domain event; the proof-of-service archive is the product."
  ],
  "extensions": {
   "service_business_reality_check": {
    "is_service_business": true,
    "paid_outcome_clear": true,
    "workflow_present": true,
    "ai_native_fit_score": 8,
    "red_flags": []
   },
   "ai_native_fit": {
    "score": 8,
    "why": "Evidence-linked drafting + confidence-scored escalation is only economical with bounded AI orchestration. Pure-manual = uneconomic; pure-automated = undefensible.",
    "disqualifiers": [
     "High-trust vertical: cannot ship without licensed analyst signoff"
    ]
   },
   "domain_evidence_register": [
    {
     "claim": "ParkNotice Clear's paid outcome is an analyst-released, statute-verified Notice & Disclosure Compliance Packet",
     "evidence_type": "primary",
     "source": "Business Understanding + subdomain 'Notice Compliance Fulfillment'",
     "strength": "strong",
     "gaps": "Confirm with the first 5 priced WA pilot interviews"
    },
    {
     "claim": "Compliance-analyst release (and counsel approval on closures/contested cases) is required for defensibility against a UPL challenge",
     "evidence_type": "primary",
     "source": "Vertical shape + UPL boundary review",
     "strength": "strong",
     "gaps": "Second counsel opinion before public commercial claim"
    },
    {
     "claim": "AI drafting materially reduces cycle time vs. pure-manual notice drafting",
     "evidence_type": "assumed",
     "source": "Category benchmark",
     "strength": "medium",
     "gaps": "Measure on the internal golden dataset from the first pilots"
    },
    {
     "claim": "Community owner will supply a structured rent roll + lease terms within SLA",
     "evidence_type": "assumed",
     "source": "Prospect conversations (unverified)",
     "strength": "weak",
     "gaps": "Run 5 intake dry-runs with pilot operators"
    },
    {
     "claim": "Per-community retrieval isolation prevents cross-community tenant-PII leakage",
     "evidence_type": "primary",
     "source": "Architecture (Rulebook Context)",
     "strength": "strong",
     "gaps": "Add automated cross-community lookup test"
    },
    {
     "claim": "Owner-action ledger blocks premature public release",
     "evidence_type": "primary",
     "source": "Engagement Governance Context invariants",
     "strength": "strong",
     "gaps": "None"
    },
    {
     "claim": "Rulebook + prompt versioning enables reproducible, auditable notice drafts",
     "evidence_type": "primary",
     "source": "Rulebook Context + Drafting Context",
     "strength": "strong",
     "gaps": "Evaluator regression thresholds not yet baselined"
    },
    {
     "claim": "5-business-day cycle time supports the founding-cohort $249-$549 price point",
     "evidence_type": "assumed",
     "source": "Pricing hypothesis",
     "strength": "medium",
     "gaps": "Test with the first 5 priced pilot conversations"
    }
   ],
   "assumption_register": [
    {
     "assumption": "Independent MHC owner-operators will pay $349-$799 per community per cycle for a state-law-verified rent-increase notice over drafting it themselves.",
     "impact_if_wrong": "high",
     "how_to_validate": "Priced-pilot interview + measurement",
     "blocking": true
    },
    {
     "assumption": "A community's rent roll, lease terms, and prior-notice history contain enough structured data to draft a complete packet without a direct MHC property-management-software integration at launch.",
     "impact_if_wrong": "high",
     "how_to_validate": "Priced-pilot interview + measurement",
     "blocking": true
    },
    {
     "assumption": "The vertical tolerates AI-assisted drafts when compliance-analyst and counsel review is explicit and audit-traceable.",
     "impact_if_wrong": "high",
     "how_to_validate": "Priced-pilot interview + measurement",
     "blocking": false
    },
    {
     "assumption": "Single-tenant per community is not required for the first cohort — logical isolation with row-level auth is acceptable.",
     "impact_if_wrong": "medium",
     "how_to_validate": "Instrument metric + review after Phase 1",
     "blocking": false
    },
    {
     "assumption": "Manifest-backed blueprint reflects a real independent-operator workflow, not a synthetic scenario.",
     "impact_if_wrong": "medium",
     "how_to_validate": "Instrument metric + review after Phase 1",
     "blocking": false
    },
    {
     "assumption": "A contracted counsel can be sourced and retained for this vertical",
     "impact_if_wrong": "severe",
     "how_to_validate": "Recruit + sign engagement letter before commercial launch",
     "blocking": true
    },
    {
     "assumption": "MHC property-management-software exports expose stable formats with predictable failure modes",
     "impact_if_wrong": "medium",
     "how_to_validate": "Adapter contract tests + failure-injection",
     "blocking": false
    }
   ],
   "language_conflict_map": [
    {
     "term": "Engagement",
     "meaning_a": "A signed billing contract",
     "context_a": "Billing & Revenue Context",
     "meaning_b": "An accepted unit of intake work (ClientEngagement)",
     "context_b": "Intake Context",
     "resolution": "Billing owns 'Engagement' as a contract term; Intake owns 'ClientEngagement' as the aggregate."
    },
    {
     "term": "Approval",
     "meaning_a": "Owner-operator accepts a delivered packet",
     "context_a": "Delivery & Proof Context",
     "meaning_b": "Analyst/counsel signs a packet",
     "context_b": "Review & Release Context",
     "resolution": "Review & Release uses 'AnalystReleased' / 'CounselApproved'; Delivery uses 'owner acknowledgment'."
    },
    {
     "term": "Confidence",
     "meaning_a": "Model-assigned probability",
     "context_a": "Drafting Context",
     "meaning_b": "Human statutory confidence",
     "context_b": "Review & Release Context",
     "resolution": "Never conflate; always qualify (model_confidence vs analyst_confidence)."
    }
   ],
   "build_buy_integrate": [
    {
     "subdomain": "Notice Compliance Fulfillment (rulebook-linked drafting + analyst/counsel review)",
     "decision": "build",
     "reason": "This is what owner-operators pay for and what a UPL inquiry would inspect."
    },
    {
     "subdomain": "Rulebook Context (state-by-state MHC statute library)",
     "decision": "build",
     "reason": "The durable moat lives here; misuse here creates every high-severity risk."
    },
    {
     "subdomain": "Review & Release Context (analyst/counsel release + correction)",
     "decision": "build",
     "reason": "Release is the trust primitive of the whole business."
    },
    {
     "subdomain": "Intake Context",
     "decision": "build",
     "reason": "Feeds Drafting; not the differentiator, but if broken, nothing else runs."
    },
    {
     "subdomain": "Community Onboarding Context",
     "decision": "build",
     "reason": "One-time high-touch step per community."
    },
    {
     "subdomain": "Delivery & Proof Context",
     "decision": "build",
     "reason": "Customer-visible surface; drives portfolio-retainer retention."
    },
    {
     "subdomain": "Engagement Governance Context",
     "decision": "build",
     "reason": "Cross-cuts every context; owns 'can we publicly claim this?' and the UPL boundary."
    },
    {
     "subdomain": "Billing & Revenue Context",
     "decision": "buy",
     "reason": "Solved category; do not build."
    },
    {
     "subdomain": "Identity & Access Context",
     "decision": "integrate",
     "reason": "Solved category."
    }
   ],
   "core_protection_strategy": [
    "Core contexts (Rulebook, Intake, Drafting, Review & Release, Delivery & Proof) staffed before any generic subdomain work.",
    "Any change to a core aggregate requires a paired ADR + invariant test.",
    "Generic subdomains (Billing, Identity) are bought or integrated; never built in-house without a killer reason.",
    "Prompt-version rollout to the Drafting Agent is gated on an Evaluator regression run.",
    "No feature flag may bypass the analyst-or-counsel release invariant."
   ],
   "boundary_stress_tests": [
    {
     "scenario": "Customer requests changes to a delivered artifact",
     "contexts_touched": [
      "Client Delivery",
      "Drafting Context",
      "Review & Release Context"
     ],
     "breaks_if": "Revision creates a new draft without re-triggering signoff",
     "verdict": "holds"
    },
    {
     "scenario": "Analyst identity changes mid-engagement",
     "contexts_touched": [
      "Client Onboarding",
      "Review & Release Context"
     ],
     "breaks_if": "QA cached analyst identity locally",
     "verdict": "adjust"
    },
    {
     "scenario": "the state statute finalizes a rule change touching the deterministic checklist scope",
     "contexts_touched": [
      "Engagement Governance Context",
      "Knowledge Base"
     ],
     "breaks_if": "Retrieval index not reindexed within SLA",
     "verdict": "holds"
    },
    {
     "scenario": "Owner marks an action resolved that is actually not",
     "contexts_touched": [
      "Engagement Governance Context"
     ],
     "breaks_if": "No re-verification step before release-decision flips",
     "verdict": "adjust"
    },
    {
     "scenario": "AI produces high-confidence draft with wrong citation",
     "contexts_touched": [
      "AI Workbench Context",
      "Review & Release Context"
     ],
     "breaks_if": "OutputValidator does not check citation-to-notice linkage",
     "verdict": "holds"
    }
   ],
   "unresolved_ownership": [
    {
     "concept": "Analyst engagement letter",
     "candidates": [
      "Client Onboarding",
      "Review & Release Context"
     ],
     "recommendation": "Own in Client Onboarding; QA references by id."
    },
    {
     "concept": "Public notice / marketing site content",
     "candidates": [
      "Engagement Governance Context",
      "Client Delivery"
     ],
     "recommendation": "Compliance owns the release-decision; Delivery renders."
    },
    {
     "concept": "Model + prompt cost attribution",
     "candidates": [
      "AI Workbench Context",
      "Billing & Revenue Context"
     ],
     "recommendation": "AI Workbench Context owns raw run cost; Billing consumes rolled-up projections."
    }
   ],
   "published_language_contracts": [
    {
     "producer": "Intake Context",
     "consumer": "Drafting Context",
     "contract": "EngagementAccepted",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Drafting Context",
     "consumer": "Review & Release Context",
     "contract": "DraftReady, ArtifactSigned",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "AI Workbench Context",
     "consumer": "Drafting Context",
     "contract": "DraftProduced, EscalationRaised",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Rulebook Context",
     "consumer": "AI Workbench Context",
     "contract": "DocIngested, IndexRebuilt",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Community Onboarding Context",
     "consumer": "Drafting Context",
     "contract": "TenantProvisioned, AnalystRegistered",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Drafting Context",
     "consumer": "Delivery & Proof Context",
     "contract": "ArtifactDelivered, DeliveryConfirmed",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Review & Release Context",
     "consumer": "Engagement Governance Context",
     "contract": "RetractionFiled",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Delivery & Proof Context",
     "consumer": "Billing & Revenue Context",
     "contract": "DeliveryConfirmed",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    }
   ],
   "shared_kernel_warnings": [
    "Shared kernel must remain small: Ids, Money, Tenant, Actor. Adding a domain concept here couples every context.",
    "Never share aggregates across contexts via shared kernel — publish an event or expose an application service.",
    "Any addition to /shared requires 2-context approval to prevent silent coupling."
   ],
   "aggregate_stress_tests": [
    {
     "aggregate": "ServiceEventAggregate",
     "scenario": "Concurrent command on ServiceEventAggregate",
     "invariant_at_risk": "Every notice in a delivered artifact cites evidence",
     "verdict": "holds"
    },
    {
     "aggregate": "NoticePacketAggregate",
     "scenario": "Concurrent command on NoticePacketAggregate",
     "invariant_at_risk": "A Notice & Disclosure Compliance Packet cannot be delivered without a valid Signoff",
     "verdict": "holds"
    },
    {
     "aggregate": "SignoffAggregate",
     "scenario": "Concurrent command on SignoffAggregate",
     "invariant_at_risk": "Signature bound to a live authenticated session, not a form field",
     "verdict": "holds"
    },
    {
     "aggregate": "RetractionAggregate",
     "scenario": "Concurrent command on RetractionAggregate",
     "invariant_at_risk": "A retraction requires Legal + Analyst co-signature",
     "verdict": "holds"
    },
    {
     "aggregate": "AgentRunAggregate",
     "scenario": "Concurrent command on AgentRunAggregate",
     "invariant_at_risk": "No output emitted without OutputValidator pass",
     "verdict": "holds"
    }
   ],
   "agent_stress_tests": [
    {
     "agent": "Drafter Agent",
     "scenario": "Malformed / adversarial input to Drafter Agent",
     "failure_mode": "Prompt injection",
     "guardrail": "Structured-output schema",
     "verdict": "holds"
    },
    {
     "agent": "Classifier Agent",
     "scenario": "Malformed / adversarial input to Classifier Agent",
     "failure_mode": "Wrong route → wrong analyst",
     "guardrail": "Structured-output schema",
     "verdict": "holds"
    },
    {
     "agent": "Evaluator Agent",
     "scenario": "Malformed / adversarial input to Evaluator Agent",
     "failure_mode": "Overfit to golden dataset",
     "guardrail": "Regression thresholds",
     "verdict": "holds"
    }
   ],
   "regulated_domain_handling": [
    {
     "regime": "Unauthorized-practice-of-law (UPL) boundary for MHC notice/disclosure documentation preparation, state-by-state",
     "applies_because": "ParkNotice Clear prepares documents from a counsel-approved rulebook and templates; the community owner always signs and sends under their own name; anything outside the standard verified pattern (closures, first-of-kind, ambiguous, contested) escalates to licensed counsel structurally, never legal advice, never filing/representing the client in a dispute.",
     "controls": [
      "Cited rulebook provision per notice field",
      "Contracted-counsel release on closure/contested packets",
      "Standard disclaimer on every packet: documentation and compliance-preparation service, not legal advice, no attorney-client relationship, community owner remains sender and duty-holder of record"
     ],
     "evidence_required": [
      "Rulebook-to-notice-field map",
      "Packet release records + proof-of-service archive rows"
     ]
    }
   ],
   "unit_economics": {
    "price_model": "Flat per-packet fee tiered by lot count ($349-$799 rent-increase; $299-$599 rule-change; $199-$399 zoning-petition; $3,500-$8,500 closure) + Portfolio Retainer ($899-$2,900/month for 3+ communities)",
    "unit_of_value": "Released mhc-notice-disclosure-compliance-desk Notice & Disclosure Compliance Packet",
    "gross_margin_pct": 60,
    "cost_drivers": [
     "Compliance-analyst review 15-25 min/packet loaded cost",
     "Counsel review (100% during pilot, tapering to closures/exceptions only)",
     "Model inference ~$1-3/packet",
     "QA second pass 5-10 min/packet",
     "Delivery/certified-mail pass-through $8-12/packet where required"
    ],
    "breakeven_note": "Target gross margin at scale: 55-65%. Target revenue per analyst FTE at maturity: $350-500K. Automation share: 40% at launch → 75% target day-90 (of drafting/checklist steps only, not human review). Target rework rate: <5%. CAC payback target within 2 paid packets/client; pilot-to-paid conversion target 30-50% from the free Gap Scan."
   },
   "margin_leakage_map": [
    {
     "leakage": "Analyst over-editing AI drafts",
     "cause": "Low AI acceptance rate",
     "impact": "high",
     "mitigation": "Evaluator regression + prompt-owner accountability"
    },
    {
     "leakage": "External API retries without backoff",
     "cause": "Poor adapter design",
     "impact": "medium",
     "mitigation": "Exponential backoff + circuit breaker"
    },
    {
     "leakage": "Cross-tenant retrieval scan cost",
     "cause": "Missing partitioning",
     "impact": "high",
     "mitigation": "Per-tenant index partitions"
    },
    {
     "leakage": "Silent delivery failure absorbing support time",
     "cause": "No adapter receipts",
     "impact": "medium",
     "mitigation": "Adapter receipts + 1h SLA alert"
    }
   ],
   "slop_findings": [
    {
     "pattern": "generic 'dashboard'-only value prop",
     "status": "clean",
     "note": "Value prop is analyst-signed artifact, not a dashboard."
    },
    {
     "pattern": "AI-as-magic",
     "status": "clean",
     "note": "AI is bounded to drafting + validation; humans own signoff."
    },
    {
     "pattern": "blockchain",
     "status": "clean",
     "note": "No blockchain-as-hype in derivation."
    },
    {
     "pattern": "agent-first (agents replace humans)",
     "status": "clean",
     "note": "Every agent has forbidden actions + human escalation."
    },
    {
     "pattern": "microservices by default",
     "status": "clean",
     "note": "ADR-001 chose modular monolith."
    },
    {
     "pattern": "everything-is-core",
     "status": "clean",
     "note": "Generic subdomains explicitly marked buy/integrate."
    }
   ],
   "drift_checks": [
    {
     "stage": "Business Truth Discovery",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Ubiquitous Language",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Strategic Subdomains",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Bounded Contexts",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Context Mapping",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Event Storming",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Commands/Events/Policies",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Tactical Model",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "AI-Native Ops",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Human-in-the-Loop",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Evidence + Compliance",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Data Ownership",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Integration",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Application Use Cases",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Outcome Economics",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Technical Architecture",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Security + Governance",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Testing",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "MVP Roadmap",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Scaling",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Risk",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "ADRs",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Foundry Package",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Contradiction Scan",
     "status": "pass",
     "findings": []
    },
    {
     "stage": "Self-Audit",
     "status": "pass",
     "findings": []
    }
   ],
   "gates": [
    {
     "id": "domain",
     "title": "Domain Clarity",
     "passed": true,
     "checks": [
      {
       "name": "Paid outcome present",
       "ok": true,
       "evidence": "business_understanding.paid_outcome"
      },
      {
       "name": "≥3 actors identified",
       "ok": true,
       "evidence": "5 actors"
      }
     ]
    },
    {
     "id": "core",
     "title": "Core Domain",
     "passed": true,
     "checks": [
      {
       "name": "At least one core subdomain",
       "ok": true,
       "evidence": "Drafting Context (evidence-linked drafting + review), AI Workbench Context (bounded agents + retrieval), Review & Release Context (analyst signoff + retraction)"
      }
     ]
    },
    {
     "id": "boundary",
     "title": "Boundary",
     "passed": true,
     "checks": [
      {
       "name": "≥4 bounded contexts",
       "ok": true,
       "evidence": "11 contexts"
      },
      {
       "name": "Every context has owned language",
       "ok": true,
       "evidence": "all populated"
      }
     ]
    },
    {
     "id": "invariant",
     "title": "Invariant",
     "passed": true,
     "checks": [
      {
       "name": "≥4 business invariants",
       "ok": true,
       "evidence": "9 invariants"
      }
     ]
    },
    {
     "id": "ai-safety",
     "title": "AI Safety",
     "passed": true,
     "checks": [
      {
       "name": "Every agent has forbidden actions",
       "ok": true,
       "evidence": "yes"
      },
      {
       "name": "Every agent has escalation triggers",
       "ok": true,
       "evidence": "yes"
      }
     ]
    },
    {
     "id": "buildability",
     "title": "Buildability",
     "passed": true,
     "checks": [
      {
       "name": "MVP roadmap ≥2 phases",
       "ok": true,
       "evidence": "6 phases"
      }
     ]
    },
    {
     "id": "anti-slop",
     "title": "Anti-Slop",
     "passed": true,
     "checks": [
      {
       "name": "No slop patterns",
       "ok": true,
       "evidence": "slop_findings all clean/warn"
      },
      {
       "name": "No failing contradictions",
       "ok": true,
       "evidence": "8 findings"
      }
     ]
    }
   ],
   "contradiction_scan": [
    {
     "id": "INV-AGG-SignoffAggregate + RetractionAggregate",
     "severity": "warn",
     "message": "Invariant references aggregate 'SignoffAggregate + RetractionAggregate' not defined",
     "refs": [
      "SignoffAggregate + RetractionAggregate"
     ]
    },
    {
     "id": "INV-AGG-IndexShardAggregate",
     "severity": "warn",
     "message": "Invariant references aggregate 'IndexShardAggregate' not defined",
     "refs": [
      "IndexShardAggregate"
     ]
    },
    {
     "id": "INV-AGG-UserAggregate",
     "severity": "warn",
     "message": "Invariant references aggregate 'UserAggregate' not defined",
     "refs": [
      "UserAggregate"
     ]
    },
    {
     "id": "CMD-EVT-OpenIntake-IntakeRejected",
     "severity": "info",
     "message": "Command OpenIntake references event 'IntakeRejected' not present in domain_events",
     "refs": [
      "OpenIntake",
      "IntakeRejected"
     ]
    },
    {
     "id": "CMD-EVT-AttachEvidence-EvidenceRejected",
     "severity": "info",
     "message": "Command AttachEvidence references event 'EvidenceRejected' not present in domain_events",
     "refs": [
      "AttachEvidence",
      "EvidenceRejected"
     ]
    },
    {
     "id": "CMD-EVT-DeliverNoticePacket-DeliveryFailed",
     "severity": "info",
     "message": "Command DeliverNoticePacket references event 'DeliveryFailed' not present in domain_events",
     "refs": [
      "DeliverNoticePacket",
      "DeliveryFailed"
     ]
    },
    {
     "id": "CMD-EVT-ResolveOwnerAction-OwnerActionRejected",
     "severity": "info",
     "message": "Command ResolveOwnerAction references event 'OwnerActionRejected' not present in domain_events",
     "refs": [
      "ResolveOwnerAction",
      "OwnerActionRejected"
     ]
    },
    {
     "id": "CMD-EVT-FileRetraction-RetractionRejected",
     "severity": "info",
     "message": "Command FileRetraction references event 'RetractionRejected' not present in domain_events",
     "refs": [
      "FileRetraction",
      "RetractionRejected"
     ]
    }
   ],
   "rubric": {
    "categories": [
     {
      "category": "Domain accuracy",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Ubiquitous language quality",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Subdomain classification quality",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Bounded context clarity",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Core domain focus",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Context map quality",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Aggregate design quality",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Invariant quality",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "AI-agent responsibility design",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Human review safety",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Data ownership clarity",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Integration protection",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Implementation feasibility",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Scalability",
      "score": 7,
      "min": 7,
      "passed": true
     },
     {
      "category": "Security and compliance",
      "score": 7,
      "min": 7,
      "passed": true
     },
     {
      "category": "Testing strategy",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Operational realism",
      "score": 7,
      "min": 7,
      "passed": true
     },
     {
      "category": "MVP practicality",
      "score": 9,
      "min": 7,
      "passed": true
     }
    ],
    "pass": true,
    "average": 8.2
   },
   "foundry_package": {
    "version": "1.0.0",
    "checksum": "bec1171d",
    "counts": {
     "subdomains": 4,
     "bounded_contexts": 10,
     "aggregates": 6,
     "events": 12,
     "commands": 11,
     "policies": 5,
     "ai_agents": 3,
     "invariants": 9,
     "integrations": 4,
     "adrs": 8
    },
    "subset": {
     "subdomains": [
      "Notice Compliance Fulfillment (extraction + drafting + deterministic check + release)",
      "Rulebook Maintenance (state-by-state MHC statute library)",
      "Exception Handling (ambiguous match, first-of-kind, contested cases)",
      "Billing & Revenue"
     ],
     "bounded_contexts": [
      "Rulebook Context",
      "Intake Context",
      "Drafting Context",
      "Review & Release Context",
      "Delivery & Proof Context",
      "Engagement Governance Context",
      "Community Onboarding Context",
      "Billing & Revenue Context",
      "Identity & Access Context",
      "Analytics & Reporting Context"
     ],
     "aggregates": [
      "NoticePacket",
      "RulebookEntry",
      "ClientEngagement",
      "ExceptionCase",
      "ProofOfServiceRecord",
      "CommunityAccount"
     ],
     "events": [
      "IntakeReceived",
      "RulebookMatched",
      "PacketDrafted",
      "DeterministicCheckFailed",
      "DeterministicCheckPassed",
      "ExceptionRouted",
      "AnalystReleased",
      "CounselApproved",
      "PacketDelivered",
      "ProofOfServiceRecorded",
      "EngagementClosed",
      "RulebookAmended"
     ],
     "commands": [
      "OpenIntake",
      "AttachEvidence",
      "StartAgentRun",
      "ApproveArtifact",
      "DeliverNoticePacket",
      "ResolveOwnerAction",
      "FileRetraction"
     ],
     "policies": [
      "Auto-request signoff on coverage complete",
      "Escalate on low confidence",
      "Block delivery on open compliance blocker",
      "Retract on material finding",
      "Alert on delivery failure"
     ],
     "ai_agents": [
      "Drafter Agent",
      "Classifier Agent",
      "Evaluator Agent"
     ],
     "invariants": [
      "A Notice & Disclosure Compliance Packet cannot be delivered without a valid Analyst signoff.",
      "Every notice in a delivered artifact cites at least one evidence item.",
      "A signature is bound to a live authenticated session, not a form field.",
      "Signed artifacts are immutable; corrections go through Retraction.",
      "No AI output leaves AI Workbench Context without OutputValidator pass.",
      "Retrieval is scoped to a single tenant partition per call.",
      "Release cannot flip to 'ready' with open blocking owner actions.",
      "Every tenant has at least one named analyst with valid credential.",
      "Roles are stored in a dedicated table and checked server-side."
     ],
     "integrations": [
      "Vendor invoice inboxes",
      "HVAC work-order / CMMS platforms",
      "Customer AP / document portals",
      "OpenAI / Anthropic API"
     ],
     "adrs": [
      "ADR-001",
      "ADR-002",
      "ADR-003",
      "ADR-004",
      "ADR-005",
      "ADR-006",
      "ADR-007",
      "ADR-008"
     ]
    }
   }
  }
 },
 "ddd_coverage": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "total": 20,
  "passed": 20,
  "pct": 100,
  "checks": [
   {
    "key": "actors",
    "label": "Actors",
    "count": 5,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "glossary",
    "label": "Glossary",
    "count": 8,
    "min": 6,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "decisions",
    "label": "Business decisions",
    "count": 5,
    "min": 4,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "events",
    "label": "Domain events",
    "count": 8,
    "min": 6,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "subdomains",
    "label": "Subdomains",
    "count": 12,
    "min": 8,
    "ok": true,
    "gate": "core",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "bcs",
    "label": "Bounded contexts",
    "count": 11,
    "min": 4,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "ctx_map",
    "label": "Context map",
    "count": 11,
    "min": 3,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "event_storm",
    "label": "Event storm rows",
    "count": 13,
    "min": 6,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "aggregates",
    "label": "Aggregates",
    "count": 8,
    "min": 3,
    "ok": true,
    "gate": "invariant",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "invariants",
    "label": "Invariants",
    "count": 9,
    "min": 4,
    "ok": true,
    "gate": "invariant",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "ai_agents",
    "label": "AI agents",
    "count": 3,
    "min": 2,
    "ok": true,
    "gate": "ai-safety",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "use_cases",
    "label": "Use cases",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "buildability",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "evidence_reg",
    "label": "Evidence register",
    "count": 8,
    "min": 5,
    "ok": true,
    "gate": "domain",
    "unblock": "Attach or verify a domain-evidence notice (source + strength)."
   },
   {
    "key": "assumptions",
    "label": "Assumption register",
    "count": 7,
    "min": 4,
    "ok": true,
    "gate": "domain",
    "unblock": "Log and validate a blocking assumption in the evidence register."
   },
   {
    "key": "stress_boundary",
    "label": "Boundary stress tests",
    "count": 5,
    "min": 3,
    "ok": true,
    "gate": "boundary",
    "unblock": "Resolve an unresolved-ownership scenario before wiring boundary evidence."
   },
   {
    "key": "stress_agg",
    "label": "Aggregate stress tests",
    "count": 5,
    "min": 3,
    "ok": true,
    "gate": "invariant",
    "unblock": "Add or verify an aggregate invariant enforcement test."
   },
   {
    "key": "stress_agent",
    "label": "Agent stress tests",
    "count": 3,
    "min": 2,
    "ok": true,
    "gate": "ai-safety",
    "unblock": "Attach an AI-safety guardrail evidence item for the agent."
   },
   {
    "key": "gates_pass",
    "label": "Hard gates passing",
    "count": 7,
    "min": 7,
    "ok": true,
    "unblock": "One or more hard gates are failing — see failing gates below."
   },
   {
    "key": "rubric",
    "label": "Extended rubric pass",
    "count": 1,
    "min": 1,
    "ok": true,
    "gate": "buildability",
    "unblock": "Raise weakest rubric category by attaching evidence for the linked concern."
   },
   {
    "key": "foundry",
    "label": "Foundry package",
    "count": 11,
    "min": 4,
    "ok": true,
    "gate": "buildability",
    "unblock": "Foundry package under-populated — regenerate blueprint via GitHub sync."
   }
  ],
  "failingGates": []
 },
 "architecture": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "archetypes": [
   "regulated system",
   "CRUD/workflow application",
   "internal operations platform"
  ],
  "archetype_impact": "State statute and community identity are global query parameters — every read/write is scoped by notice, state statute, and community, not just tenant.",
  "personality": [
   "workflow-heavy",
   "cost-sensitive",
   "highly regulated",
   "highly secure"
  ],
  "forces_ranked": [
   {
    "force": "compliance",
    "why": "Regulated verticals gate release; the architecture must prove, not assert, compliance."
   },
   {
    "force": "auditability",
    "why": "Every release decision, every evidence toggle, must be defensible in review."
   },
   {
    "force": "reliability",
    "why": "A broken blueprint is a broken release gate — availability is a product feature."
   },
   {
    "force": "data integrity",
    "why": "Evidence is the product; a corrupted citation is a shipped defect."
   },
   {
    "force": "maintainability",
    "why": "One team maintains dozens of blueprints; the shape must be identical across them."
   }
  ],
  "tradeoffs": [
   "Prioritizing auditability slows raw throughput — accepted; the product IS the audit trail.",
   "Choosing a modular monolith trades independent scaling for a single deploy story — accepted while the team is small.",
   "Using managed Cloud primitives trades some portability for zero ops — accepted; data is portable, runtime is not the moat."
  ],
  "quality_scenarios": [
   {
    "attribute": "Performance (interactive p95)",
    "target": "600 ms on Blueprint detail routes",
    "assumption": "Measured from Cloud edge, warm cache."
   },
   {
    "attribute": "Availability",
    "target": "99.5% (with March-reporting-window freeze protection)",
    "assumption": "Rolling 30-day window; excludes announced maintenance."
   },
   {
    "attribute": "RTO",
    "target": "24h"
   },
   {
    "attribute": "RPO",
    "target": "24h (daily backups)"
   },
   {
    "attribute": "Latency (edge function warm)",
    "target": "≤ 800ms p95 excluding upstream AI calls"
   },
   {
    "attribute": "Data durability",
    "target": "11 nines via managed Postgres + storage replication"
   },
   {
    "attribute": "Security",
    "target": "OWASP ASVS L1 baseline"
   },
   {
    "attribute": "Auditability",
    "target": "100% of release decisions + evidence toggles logged with actor + timestamp"
   },
   {
    "attribute": "Maintainability",
    "target": "New blueprint reaches validation-microsite state in ≤ 1 working session"
   },
   {
    "attribute": "Deployment frequency",
    "target": "≥ 5 deploys/week without incident"
   },
   {
    "attribute": "Observability",
    "target": "Every edge function emits correlationId; retries + phases visible in diagnostics drawer"
   },
   {
    "attribute": "Cost envelope",
    "target": "Idle per-blueprint cost ≈ $0; active < $5/month at MVP traffic"
   },
   {
    "attribute": "Scalability",
    "target": "Horizontal by blueprint count; single blueprint sized for < 10 req/s sustained"
   }
  ],
  "options": [
   {
    "style": "simple monolith",
    "fits_when": "Single team, low traffic, no independent scaling concerns.",
    "fits_here": "Matches the per-blueprint scope — one microsite, one schema, one code path.",
    "wrong_here": "Would couple every blueprint into a single deploy — not acceptable at network scale.",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "security_impact": "Small surface, single audit boundary.",
    "scaling_path": "Vertical scale only; hits ceiling on team velocity, not compute.",
    "team_fit": "Ideal for one dev; fine at MVP.",
    "recommended": false
   },
   {
    "style": "modular monolith",
    "fits_when": "Multiple bounded contexts but shared deploy lifecycle acceptable.",
    "fits_here": "Each blueprint is a module inside the network shell; shared shell, isolated data.",
    "wrong_here": "Wrong only if a blueprint needs independent SLOs — none currently do.",
    "complexity": "moderate",
    "cost": "low",
    "ops_burden": "low",
    "security_impact": "Single trust boundary; row-level isolation carries the tenancy load.",
    "scaling_path": "Modules become services only when SLOs or teams diverge.",
    "team_fit": "Best fit for a small team maintaining many blueprints.",
    "recommended": true
   },
   {
    "style": "serverless",
    "fits_when": "Bursty, per-request workloads with idle-to-zero cost targets.",
    "fits_here": "Edge functions already handle sync, docs, legal, seed articles, integrity — pay-per-invoke.",
    "wrong_here": "Wrong for long-running orchestrations; IDLE_TIMEOUT already bit us on legal docs.",
    "complexity": "moderate",
    "cost": "low",
    "ops_burden": "moderate",
    "security_impact": "Function-scoped IAM; secrets via managed vault.",
    "scaling_path": "Auto; watch cold-start p95 and per-invocation cost.",
    "team_fit": "Good — team already ships functions weekly.",
    "recommended": false
   },
   {
    "style": "microservices",
    "fits_when": "Multiple teams, divergent SLOs, independent release cadence required.",
    "fits_here": "Nothing here justifies it; single team, single deploy cadence, shared data plane.",
    "wrong_here": "Adds network, discovery, deploy topology, and observability cost with zero product benefit.",
    "complexity": "very high",
    "cost": "high",
    "ops_burden": "high",
    "security_impact": "Bigger attack surface, more inter-service auth to get right.",
    "scaling_path": "Best-in-class if the org can afford it.",
    "team_fit": "Wrong for this team.",
    "recommended": false
   },
   {
    "style": "event-driven",
    "fits_when": "Async fan-out, decoupled producers/consumers, replayable history required.",
    "fits_here": "Only the sync + integrity pipeline is fan-out; keep it as background jobs, not a broker.",
    "wrong_here": "Broker + schema registry + DLQ topology is overkill for current volumes.",
    "complexity": "high",
    "cost": "moderate",
    "ops_burden": "high",
    "security_impact": "Extra ACLs; message-level auth needed.",
    "scaling_path": "Excellent for future audit-log fan-out, revisit at 10x volume.",
    "team_fit": "Team can operate a small in-process queue; not a full broker yet.",
    "recommended": false
   },
   {
    "style": "workflow/orchestration",
    "fits_when": "Long, multi-step, resumable pipelines with human-in-the-loop steps.",
    "fits_here": "Blueprint pipeline (sources → articles → integrity → smoke test) already smells like this.",
    "wrong_here": "Full engine (Temporal/Airflow) is heavy; a typed in-app queue with retries covers today's needs.",
    "complexity": "high",
    "cost": "moderate",
    "ops_burden": "moderate",
    "security_impact": "Central choke point — must be hardened.",
    "scaling_path": "Adopt engine once we cross ~10 concurrent long-running jobs per blueprint.",
    "team_fit": "Would require operator ramp-up.",
    "recommended": false
   }
  ],
  "chosen_style": "modular monolith",
  "chosen_rationale": "Modular monolith with edge functions for bursty AI/generation — one audit boundary, low ops burden, easy per-team ownership.",
  "rejected": [
   {
    "style": "microservices",
    "why_rejected": "Adds network, discovery, deploy topology, and observability cost with zero product benefit."
   },
   {
    "style": "event-driven",
    "why_rejected": "Broker + schema registry + DLQ topology is overkill for current volumes."
   }
  ],
  "target": {
   "overview": "React shell → Lovable Cloud (Postgres + Auth + Storage + Edge Functions). Every blueprint is a module inside the shell; per-vertical differences live in derived DNA, not in separate deploys. Compliance posture: Domain-specific (engagement-letter records, analyst attestations, retention schedules).",
   "frontend": "Vite + React + TypeScript + Tailwind + shadcn primitives; per-blueprint themed via Design DNA; job queue for background pipelines; URL-persisted filter state on audit + diagnostics.",
   "backend": "Deno-based edge functions per capability. Long generations split into per-item endpoints to stay under IDLE_TIMEOUT.",
   "data": "Managed Postgres with RLS + JSONB for shape drift. Object storage for source files + generated artifacts.",
   "api": "REST-ish RPC over edge functions with typed payloads; correlationId on every call for retry/diagnostics.",
   "authn_authz": "Managed OAuth (Google default). Roles in a dedicated user_roles table + has_role() SECURITY DEFINER function referenced by RLS policies.",
   "integrations": "GitHub (public read for sync + sources), Lovable AI Gateway (all LLM calls), Cloud Storage (artifacts). No third-party CRM/email yet.",
   "background_jobs": "blueprintJobQueue in-app: per-slug concurrency limit, exponential backoff + jitter, cancel + invalidate, retention of last error diagnostics.",
   "object_storage": "Cloud Storage buckets scoped per blueprint slug; signed URLs for artifact download.",
   "notifications": "In-app toasts + audit trail entries. Email/webhook deferred until owners request it.",
   "search": "Postgres FTS on blueprint titles + evidence notices; client-side filter for audit trail. Dedicated index deferred.",
   "analytics": "Lightweight event log in Postgres; dashboard-grade analytics deferred until we have a paying tenant.",
   "ai": "not applicable",
   "observability": "correlationId per request, per-phase timings, retry timeline in diagnostics drawer, per-blueprint pipeline status panel, JSON report export.",
   "deployment": "Preview + Production environments; edge functions deploy with the app; Postgres migrations shipped via managed migration tool.",
   "security": "RLS on every public table; roles in user_roles; secrets in managed vault; OWASP ASVS L1 baseline.",
   "dr": "Daily backups; restore drill twice/year."
  },
  "modules": [
   {
    "name": "Blueprint Core",
    "responsibility": "Owns the SeedBusiness catalog, release decisions, evidence register, owner actions.",
    "owned_data": [
     "seed business rows",
     "release_decision",
     "evidence items",
     "owner-action state"
    ],
    "entities": [
     "SeedBusiness",
     "EvidenceItem",
     "OwnerAction",
     "ReleaseDecision"
    ],
    "interfaces": [
     "React store (StoreProvider)",
     "public read via microsite route"
    ],
    "depends_on": [
     "Content Pipeline (for source files + articles)",
     "Cloud auth"
    ],
    "events_produced": [
     "release.decision.changed",
     "evidence.status.changed",
     "owner.action.resolved"
    ],
    "events_consumed": [
     "sync.blueprint.applied",
     "integrity.check.completed"
    ],
    "failure_risks": [
     "Duplicate slug in seed → React key crash (mitigated by dedupe in mergedSeed)",
     "Evidence drift after sync"
    ],
    "scaling": "Bounded by SEED size; irrelevant even at 10x.",
    "future_split_trigger": "Split out Blueprint Core into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "Content Pipeline",
    "responsibility": "Fetches GitHub sources, generates docs/seed articles, runs citation integrity, per slug with concurrency + backoff.",
    "owned_data": [
     "blueprint_sources",
     "blueprint_seed_articles",
     "job status per slug",
     "integrity results"
    ],
    "entities": [
     "SourceFile",
     "SeedArticle",
     "IntegrityReport",
     "JobState"
    ],
    "interfaces": [
     "blueprintJobQueue API",
     "edge functions: fetch-blueprint-sources, generate-seed-articles, generate-blueprint-docs"
    ],
    "depends_on": [
     "Cloud edge functions",
     "AI Gateway",
     "GitHub public read"
    ],
    "events_produced": [
     "sources.fetched",
     "articles.generated",
     "integrity.completed",
     "cache.invalidated"
    ],
    "events_consumed": [
     "blueprint.cache.invalidate"
    ],
    "failure_risks": [
     "Edge IDLE_TIMEOUT on long generations (mitigated: per-doc endpoints + retries)",
     "Upstream AI 5xx storms"
    ],
    "scaling": "Concurrency + backoff configurable in UI; scales with edge function limits.",
    "future_split_trigger": "If cross-blueprint queueing coordination is needed, promote to a shared job service."
   },
   {
    "name": "Runtime & Capabilities",
    "responsibility": "Per-blueprint runtime modules — verification, SEO, legal docs, chatbot — with retry + diagnostic history.",
    "owned_data": [
     "capability status per slug",
     "runtime module errors",
     "chatbot threads + FAQ"
    ],
    "entities": [
     "CapabilityStatus",
     "RuntimeError",
     "ChatMessage"
    ],
    "interfaces": [
     "React Runtime tab",
     "edge functions: verify-blueprint, generate-seo-posts, generate-legal-docs/*, blueprint-chat"
    ],
    "depends_on": [
     "Content Pipeline (grounding)",
     "AI Gateway"
    ],
    "events_produced": [
     "capability.status.changed",
     "runtime.error.recorded"
    ],
    "events_consumed": [
     "cache.invalidated"
    ],
    "failure_risks": [
     "AI provider outage",
     "Prompt drift causing ungrounded output"
    ],
    "scaling": "Per-slug; independent of network size.",
    "future_split_trigger": "Split out Runtime & Capabilities into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "Sync & Rollback",
    "responsibility": "Daily GitHub sync of blueprint definitions with dry-run, partial-apply, and server-backed rollback of last snapshot.",
    "owned_data": [
     "sync_runs",
     "sync_snapshots per slug",
     "audit_trail"
    ],
    "entities": [
     "SyncRun",
     "SyncDiff",
     "SyncSnapshot",
     "AuditEntry"
    ],
    "interfaces": [
     "/github-sync page",
     "edge functions: github-sync-blueprints, rollback-blueprint-sync"
    ],
    "depends_on": [
     "Blueprint Core",
     "Cloud storage for snapshots"
    ],
    "events_produced": [
     "sync.run.completed",
     "sync.blueprint.applied",
     "sync.blueprint.rolled_back"
    ],
    "events_consumed": [],
    "failure_risks": [
     "Partial apply leaving mixed state (mitigated by per-blueprint snapshots)",
     "Audit trail size growth"
    ],
    "scaling": "Paginate audit trail; snapshot retention window is finite.",
    "future_split_trigger": "Split out Sync & Rollback into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "Design & Architecture DNA",
    "responsibility": "Deterministic per-blueprint design + architecture briefs used to gate release readiness.",
    "owned_data": [
     "derived only — no persistence"
    ],
    "entities": [
     "DesignDNA",
     "ArchitectureDNA"
    ],
    "interfaces": [
     "React panels in Business Detail"
    ],
    "depends_on": [
     "Blueprint Core"
    ],
    "events_produced": [],
    "events_consumed": [],
    "failure_risks": [
     "Vertical → profile drift if new verticals are not mapped"
    ],
    "scaling": "Pure functions; free.",
    "future_split_trigger": "Split out Design & Architecture DNA into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   }
  ],
  "data_architecture": {
   "primary_db": "Managed Postgres (Cloud)",
   "secondary": [
    "Object storage for artifacts + snapshots",
    "Client localStorage for UI state (filters, drawer state) — never for auth"
   ],
   "cache": "React Query + module-level memoization; no dedicated cache service.",
   "search": "Postgres FTS on titles + evidence; consider pg_trgm on slugs.",
   "vector": "not applicable",
   "object_storage": "Per-slug prefixes; lifecycle rules to prune stale sync snapshots.",
   "schema_strategy": "Normalized core + JSONB for evolving shapes (evidence details, capability status).",
   "migrations": "Forward-only migrations reviewed in PR; every CREATE TABLE ships GRANTs + RLS enable + policies in the same migration.",
   "backups": "Managed daily backups with 30-day retention.",
   "retention": "Audit trail retained ≥ 1y; sync snapshots retained 90d; error diagnostics retained 30d.",
   "audit_logs": "audit_trail table + append-only pattern; export CSV from UI.",
   "soft_delete": "Soft-delete evidence via status transition; hard-delete only via owner-initiated purge.",
   "privacy": "Only owner-supplied facts persist; service records, attestations, regulator correspondence handled per vertical policy.",
   "encryption": "TLS 1.2+ in transit; AES-256 at rest via managed storage.",
   "multi_tenancy": "Row-level tenancy keyed on auth.uid() + blueprint slug; RLS policies enforce isolation."
  },
  "api": {
   "style": "REST-ish RPC over edge functions with JSON payloads; typed client wrappers.",
   "public_vs_internal": "Public microsite reads via Postgres RLS-protected queries; internal capability calls via authenticated edge functions.",
   "versioning": "Version via function name suffix (v1, v2) when breaking; additive changes preferred.",
   "rate_limiting": "Per-user + per-slug in edge functions; UI-level concurrency caps for AI calls.",
   "idempotency": "Sync + rollback carry an idempotency key; retries safe.",
   "pagination": "Cursor pagination on audit trail; offset paging tolerated on small lists.",
   "error_format": "{ code, message, correlationId, retryable, details? } — normalized in client.",
   "webhook_security": "HMAC-signed webhooks (deferred until we accept inbound webhooks).",
   "retries": "Exponential backoff + jitter, capped attempts, respect idempotency keys.",
   "contract_testing": "Zod schemas shared between client + edge; smoke test runner exercises each endpoint.",
   "backward_compat": "Additive fields only; deprecations announced in audit trail before removal.",
   "contract_testing_plan": "Intake, source-result, and delivery payload schemas are contract-tested per consumer; the JSON contract between AI layers is schema-pinned and versioned."
  },
  "security": {
   "authn": "Managed OAuth (Google default). Session in httpOnly cookie / managed client storage.",
   "authz": "user_roles table + has_role() SECURITY DEFINER, referenced from RLS policies. Never store roles on profiles.",
   "tenant_isolation": "RLS on every public table; every query filters by auth.uid() or by an explicit owner grant.",
   "secrets": "Managed vault; never in client bundle; edge functions read via runtime env.",
   "encryption": "TLS in transit; AES-256 at rest; column-level encryption only when regulation requires.",
   "session": "Short-lived access tokens + refresh rotation; SSR cookie parity for edge routes.",
   "input_validation": "Zod schemas at the edge boundary; reject on unknown fields.",
   "api_protection": "Rate limits + WAF rules on public endpoints; correlationId logging for abuse forensics.",
   "audit_log": "Every release decision, evidence toggle, sync, and rollback records actor + timestamp + before/after.",
   "admin_access": "Admin actions gated behind role check + two-key confirmation on destructive operations.",
   "supply_chain": "Lockfile pinning + weekly dependency scan; SBOM produced on release.",
   "threat_model": [
    "Prompt injection via ingested source files → sanitize + refuse instructions from ingested content.",
    "Cross-tenant read via missing RLS on new table → migration checklist blocks merge.",
    "Rollback abuse to overwrite recent legitimate edits → rollback preview + confirm-typed pattern.",
    "AI cost DOS by repeated regeneration → per-slug rate limits + concurrency cap."
   ],
   "abuse_cases": [
    "Malicious owner uploads privileged content into a public microsite field.",
    "Sync run tampered with to inject a slug that overlaps a real blueprint.",
    "Attacker triggers regeneration loop to drive AI cost."
   ],
   "zero_trust": "Every service call authenticates; no implicit trust between edge functions.",
   "asvs_notes": "OWASP ASVS L1 baseline."
  },
  "reliability": {
   "failure_modes": [
    "Edge function IDLE_TIMEOUT on long AI generations.",
    "Upstream AI provider 5xx / rate limit.",
    "GitHub API rate limit during sync.",
    "Postgres connection saturation during sync fan-out."
   ],
   "graceful_degradation": "Runtime tab modules degrade independently; microsite serves cached last-known-good content when generation fails.",
   "retry_policy": "Exponential backoff + jitter, max 5 attempts, respect Retry-After.",
   "timeouts": "Edge function ≤ 120s wall clock (safety margin under 150s limit); client fetch ≤ 60s per call.",
   "circuit_breaker": "Client-side per-endpoint breaker: after 3 consecutive IDLE_TIMEOUTs, pause 5m and surface to UI.",
   "queueing": "In-app blueprintJobQueue with concurrency limits per slug.",
   "idempotency": "Sync + rollback idempotent via key; generation endpoints idempotent per (slug, doc_key).",
   "dlq": "Failed jobs recorded in error diagnostics; user re-triggers manually (no auto-DLQ needed at current volume).",
   "transactions": "Multi-row writes wrapped in single transaction; audit entry written in the same transaction as the mutation.",
   "dr": "Daily backup + semi-annual restore drill.",
   "incident_response": "correlationId in every log line; on-call runbook per capability module; smoke test replays post-incident.",
   "slos": [
    {
     "name": "Interactive p95",
     "target": "600 ms on blueprint detail"
    },
    {
     "name": "Availability",
     "target": "99.5% (with March-reporting-window freeze protection)"
    },
    {
     "name": "Sync success rate",
     "target": "≥ 99% per daily run over rolling 7 days"
    },
    {
     "name": "Generation success rate",
     "target": "≥ 95% per doc across last 7d (excludes provider outages)"
    }
   ]
  },
  "scaling": {
   "mvp_can_stay_simple": [
    "Single Postgres, single region.",
    "No dedicated search or vector index.",
    "In-app job queue; no message broker."
   ],
   "modular_now": [
    "Content Pipeline is already isolated behind blueprintJobQueue — future extraction is a 1-day job.",
    "Runtime capabilities are one function per module — swap in isolation."
   ],
   "deferrable": [
    "Workflow engine (Temporal/Airflow).",
    "Vector DB / RAG.",
    "Multi-region replication.",
    "Feature flag service (env-based toggle covers MVP)."
   ],
   "breaks_first": "Edge function IDLE_TIMEOUT under multi-doc generation — already addressed by per-doc endpoints; watch for regression.",
   "db_path": "Vertical scale → read replica → partition by tenant if a single tenant dominates load.",
   "jobs_path": "In-app queue → dedicated worker → workflow engine, gated by concurrency + resumability need.",
   "cache_path": "React Query only → HTTP cache headers → CDN edge cache for microsite content.",
   "search_path": "Postgres FTS → pg_trgm → dedicated search only when p95 breaches SLO.",
   "files_path": "Managed object storage → CDN → per-region cache if traffic warrants.",
   "api_path": "Vertical edge function scale → per-capability autoscaling → extract hot module to its own service.",
   "multi_region": "Not planned; introduce only on customer contract with residency requirement.",
   "cost_control": "Per-blueprint AI budget, concurrency cap, smoke-test cache; monthly cost review with per-blueprint attribution."
  },
  "ai": {
   "provider": "Frontier LLM via API with provider-agnostic prompt contracts; a second vendor is configured for failover so a released deliverable never depends on a single model.",
   "prompt_mgmt": "Extraction, drafting, and matrix prompts are held in versioned files with eval-gated deploys and one-step rollback; prompt changes require diff review.",
   "rag": "A versioned, jurisdiction-scoped rule pack for Compliance / regulatory documentation is retrieved with source-scoped filters; drafting is grounded and citation-anchored to the source text, never free-form generation.",
   "vector": "Not warranted pre-revenue — the rule pack is small and structured, so section/keyword lookups suffice until a larger corpus justifies similarity search.",
   "embeddings": "Deferred with the vector store; rule-pack keys are structured (element, source, subsection), not semantic.",
   "eval": "A gold set of specialist-released packs measures element-extraction F1 and completeness-gate agreement per model release; accuracy vs specialist labels is reviewed on a fixed cadence.",
   "hitl": "Specialist release is never automated; a domain expert signs off on the exception queue, with sampling QA on a fraction of outputs and expert red-team on the first releases.",
   "guardrails": "Field-locked templates, source-tie reconciliation, and completeness rules mean a draft missing a required field emits a MISSING_ELEMENT exception rather than inventing content.",
   "prompt_injection": "Source documents are treated as data, never instructions; the red-team suite includes injected-instruction files disguised as legitimate inputs.",
   "leakage": "Client and subject identifiers are scoped per case; retrieval is scoped per client; provider training-use is disabled; there is no cross-client corpus.",
   "fallback": "A manual specialist workbench runbook plus the second LLM vendor keep production moving if the primary model is unavailable.",
   "latency_cost": "Inference cost per deliverable is bounded at launch and trends down with volume; the standard SLA leaves generous headroom over model latency.",
   "memory": "Agents are stateless per case; durable knowledge lives in the versioned rule pack and SOP library, not in model memory.",
   "tool_permissions": "The prompt runner has no tool access beyond returning JSON; search ordering, document assembly, and delivery are deterministic code.",
   "auditability": "Every prompt+output pair is logged to the per-case audit trail with version tags alongside the specialist release record.",
   "citation": "Every drafted element carries the source provision it satisfies, and every matrix entry carries the search or record it came from."
  },
  "devops": {
   "environments": [
    "Preview (per branch)",
    "Production"
   ],
   "cicd": "Lovable build pipeline; deploys on merge; edge functions ship atomically with the app.",
   "iac": "Cloud managed; migrations + config in-repo.",
   "secrets": "Managed vault; separate values per environment.",
   "preview_envs": "Automatic per branch; seeded with anonymized fixtures.",
   "migrations": "Forward-only; migrations reviewed for GRANT + RLS + policies; every table gated by the migration checklist.",
   "rollback": "App: redeploy previous build. Data: server-backed rollback per blueprint via rollback-blueprint-sync.",
   "release_style": "Continuous deploy with feature flags; canary only when a change touches shared shell.",
   "feature_flags": "Env-based booleans at MVP; consider a flag service when we have > 20 flags in flight.",
   "monitoring": "Cloud platform metrics + per-function logs + client error reporting.",
   "alerting": "SLO burn-rate alerts + IDLE_TIMEOUT rate alert + AI cost anomaly alert.",
   "logs": "Structured JSON with correlationId; retained per platform defaults.",
   "error_tracking": "Client-side error capture wired to console + in-app diagnostics drawer.",
   "uptime": "Synthetic checks on microsite + shell login every 5 minutes.",
   "cost_monitoring": "Per-blueprint cost view; alert on 3x baseline over 24h."
  },
  "testing": {
   "unit": "Vitest for pure derivations (DNA, business helpers).",
   "integration": "Edge function contract tests with recorded fixtures.",
   "contract": "Zod schemas shared client + edge; smoke test runner as continuous contract check.",
   "e2e": "Playwright against localhost preview for critical flows (sign in, evidence toggle, sync apply).",
   "security": "Weekly dependency scan; RLS policy audit script; abuse-case checklist per release.",
   "a11y": "Axe checks + keyboard-only smoke on shell components; WCAG 2.2 AA target.",
   "load": "k6 scenarios against edge functions before enabling a new capability network-wide.",
   "chaos": "Manual fault injection on AI provider (simulate 500s) during release rehearsal.",
   "migration": "Every migration runs in preview + dry-run on prod snapshot before apply.",
   "backup_restore": "Semi-annual restore drill.",
   "ai_eval": "not applicable",
   "test_data": "Deterministic fixtures per vertical; no real PHI/PII ever in fixtures."
  },
  "observability": {
   "logs": "Structured JSON with correlationId, phase, attempt, doc_key, slug.",
   "metrics": "Per-endpoint latency, error rate, retry count, AI token spend.",
   "traces": "Cross-function trace via correlationId propagation.",
   "audit_events": "Release decision, evidence toggle, sync, rollback, cache invalidation.",
   "business_events": "Blueprint promoted to ready, first microsite view, first customer-visible export.",
   "error_tracking": "In-app diagnostics drawer + persistent per-slug error history.",
   "security_monitoring": "Failed auth + rate-limit breach + admin action logs.",
   "cost_monitoring": "Per-blueprint + per-capability cost attribution.",
   "dashboards": [
    "SLO burn",
    "AI cost per blueprint",
    "Sync success rate",
    "Generation success rate"
   ],
   "alert_thresholds": [
    "IDLE_TIMEOUT rate > 3/day for one blueprint.",
    "Sync run failure > 1 in rolling 7 days.",
    "AI cost > 3x rolling 7-day baseline over 24h.",
    "p95 breach on Blueprint detail > 800ms for 15 min."
   ],
   "triage": "correlationId → diagnostics drawer → retry timeline → JSON report export → runbook link."
  },
  "cost": {
   "drivers": [
    {
     "name": "AI generation",
     "note": "Dominant driver; capped by concurrency + per-slug budget."
    },
    {
     "name": "Edge function invocations",
     "note": "Bursty at sync + generation; idle-to-zero otherwise."
    },
    {
     "name": "Managed Postgres",
     "note": "Small; scales with audit trail retention."
    },
    {
     "name": "Object storage",
     "note": "Snapshots + artifacts; lifecycle rules prevent growth."
    },
    {
     "name": "Bandwidth",
     "note": "Low; static microsite content."
    }
   ],
   "likely_traps": [
    "Regeneration loops on failure (mitigated by circuit breaker).",
    "Audit trail unbounded growth (mitigated by retention policy).",
    "Storing large HTML snapshots per sync (mitigated by delta snapshots)."
   ],
   "controls": [
    "Per-blueprint AI budget with hard cap.",
    "Smoke-test result caching in localStorage.",
    "Concurrency cap in blueprintJobQueue.",
    "Retention policy on audit + diagnostics."
   ]
  },
  "multi_tenancy": {
   "model": "Row-level tenancy: one shared Postgres, tenant scope by auth.uid() + blueprint slug.",
   "isolation": "RLS policies on every public table; policies reference has_role() where role checks are needed.",
   "tenant_aware_authz": "Every query filters by auth.uid(); admin overrides go through explicit role check + audit entry.",
   "tenant_config": "Per-slug config stored as JSONB on the blueprint row; no per-tenant deploy.",
   "branding": "Per-blueprint Design DNA drives theme; no runtime branding upload at MVP.",
   "tenant_export": "Owner can export evidence + audit trail as JSON/CSV from the UI.",
   "tenant_deletion": "Owner-initiated purge cascades across blueprint rows + storage prefix; soft-delete window of 30 days.",
   "tenant_audit": "Per-slug audit trail table view with actor + timestamp on every mutation.",
   "noisy_neighbor": "Per-slug concurrency cap in blueprintJobQueue; per-slug AI budget.",
   "tenant_rate_limits": "Edge functions apply per-slug + per-user rate limits.",
   "billing": "Not billed at MVP; per-blueprint cost attribution feeds the future billing model.",
   "why_this_fits": "Team size and blueprint scale don't justify schema/db-per-tenant; RLS covers the isolation requirement with negligible ops burden."
  },
  "privacy_compliance": {
   "data_classification": "Owner-supplied facts and evidence citations are the sensitive classes; service records, attestations, regulator correspondence per vertical.",
   "minimization": "Only owner-supplied facts persist; no third-party enrichment; no PII scraping.",
   "consent": "Consent captured at intake for owner-supplied contact info; microsite visitors get standard cookie/consent banner where required.",
   "access_logs": "Every admin + edge function invocation logged with correlationId + actor.",
   "audit_trails": "Immutable append-only audit_trail table; export from UI.",
   "retention": "Audit ≥ 1y; sync snapshots 90d; error diagnostics 30d; artifacts per lifecycle rule.",
   "legal_hold": "Deferred until a matter requires it.",
   "right_to_delete": "Owner-initiated purge honored within 30 days; downstream copies pruned by lifecycle rules.",
   "right_to_export": "JSON + CSV export for evidence, audit trail, and generated artifacts.",
   "sensitive_handling": "No PHI/PII in prompts; owner-supplied facts only; secrets in managed vault.",
   "boundaries": "Domain-specific (engagement-letter records, analyst attestations, retention schedules)",
   "residency": "Single region at MVP; residency contract triggers per-tenant residency planning.",
   "vendor_risk": "Lovable Cloud + AI Gateway are the only critical vendors; both reviewed for security posture.",
   "breach_response": "correlationId + audit trail enables scope determination; disclosure per compliance policy within statutory window.",
   "admin_controls": "Admin actions gated by role check + two-key confirm for destructive operations; every admin session logged.",
   "evidence_collection": "Access reviews, change management, restore drills produce artifacts filed into the evidence pipeline."
  },
  "frontend": {
   "framework": "React 18 + Vite + TypeScript.",
   "rendering": "SPA with per-route code-split; microsite routes prerender-friendly.",
   "routing": "react-router-dom v6 with URL-persisted filter/drawer state.",
   "state": "React context + useSyncExternalStore for the job queue; localStorage only for UI state, never for auth.",
   "server_state": "@tanstack/react-query for cache + retries.",
   "forms": "Controlled components + Zod validation on submit; RHF only where forms grow.",
   "error_handling": "Error boundary at shell + per-panel skeletons + retry affordances.",
   "components": "shadcn primitives + per-blueprint themed panels; deterministic Design DNA drives look.",
   "design_system": "Tailwind semantic tokens (index.css); no hardcoded color utilities in components.",
   "auth_ui": "Managed OAuth callback via Cloud client; session hydration before protected routes render.",
   "authz_aware_ui": "UI hides actions the current role cannot perform; server-side check is authoritative.",
   "a11y": "WCAG 2.2 AA target; visible focus rings; keyboard shortcuts in diagnostics drawer.",
   "i18n": "Copy budgets assume +35% expansion for DE/FR; Intl APIs for dates/currencies.",
   "performance": "Route-level code split; lazy-load Runtime tab; memoize DNA derivations.",
   "bundling": "Vite defaults; per-route lazy imports for heavy panels.",
   "testing": "Vitest for unit; Playwright for critical flows.",
   "offline": "Not required; last-known-good served from React Query cache.",
   "realtime": "Not required at MVP; audit trail is polled on interaction."
  },
  "backend": {
   "framework": "Deno-based edge functions on Lovable Cloud, one function per capability.",
   "layering": "Handler → validator (Zod) → service → repository → Postgres.",
   "domain": "Blueprint, Evidence, OwnerAction, SyncRun, RuntimeCapability, ChatMessage.",
   "services": "Pure functions kept out of edge boundary; shared logic imported from a common module.",
   "repositories": "Thin Postgres wrappers; RLS enforces tenant scope.",
   "validation": "Zod at the edge boundary; reject unknown fields.",
   "authorization": "has_role() SECURITY DEFINER in Postgres; edge function also asserts role for defense in depth.",
   "jobs": "In-app blueprintJobQueue on the client for user-triggered pipelines; server-side cron only for daily sync.",
   "events": "Domain events emitted to audit_trail; no external broker.",
   "files": "Signed URLs from Cloud Storage; virus scan on upload (deferred until user uploads exist).",
   "email_sms": "Deferred; owner-configured inbox required before enabling outbound mail.",
   "scheduled": "Daily GitHub sync via scheduled function; retention prune weekly.",
   "errors": "Normalized error envelope { code, message, correlationId, retryable, details? }.",
   "logging": "Structured JSON logs with correlationId, phase, attempt, slug.",
   "config": "Env-based; secrets from managed vault.",
   "di": "Not required at current size; explicit imports.",
   "testing": "Contract tests per function with recorded fixtures + smoke-test runner."
  },
  "diagrams": {
   "context_mermaid": "flowlease file LR\n  Owner([Blueprint Owner]) --> Shell[Network Shell]\n  Analyst([Analyst]) --> Shell\n  Public([Public Visitor]) --> Micro[Public Microsite mhc-notice-disclosure-compliance-desk]\n  Shell --> Cloud[(Lovable Cloud: DB + Auth + Storage + Edge)]\n  Cloud --> AI[[AI Gateway]]\n  Cloud --> GH[[GitHub API]]\n  Micro --> Cloud",
   "container_mermaid": "flowlease file TB\n  subgraph Client\n    UI[React Shell + Blueprint Detail]\n    Queue[blueprintJobQueue]\n  end\n  subgraph Cloud[Lovable Cloud]\n    DB[(Postgres + RLS)]\n    Store[(Object Storage)]\n    subgraph Edge[Edge Functions]\n      Sync[github-sync-blueprints]\n      Roll[rollback-blueprint-sync]\n      Src[fetch-blueprint-sources]\n      Seed[generate-seed-articles]\n      Docs[generate-blueprint-docs]\n      Legal[generate-legal-docs/*]\n      Verify[verify-blueprint]\n      SEO[generate-seo-posts]\n      Chat[blueprint-chat]\n    end\n  end\n  UI --> DB\n  Queue --> Src\n  Queue --> Seed\n  UI --> Docs\n  UI --> Legal\n  UI --> Verify\n  UI --> SEO\n  UI --> Chat\n  UI --> Sync\n  UI --> Roll\n  Seed --> AI[[AI Gateway]]\n  Docs --> AI\n  Legal --> AI\n  Chat --> AI\n  Src --> GH[[GitHub]]",
   "data_flow_mermaid": "flowlease file LR\n  A[Owner edits Evidence] --> B[Store: evidence.custom]\n  B --> C{Release Gate}\n  C -- ready --> D[Business marked Ready]\n  C -- blocker --> E[Owner Actions queue]\n  F[GitHub Sync] --> G[Diff + Snapshot]\n  G --> H[(Postgres)]\n  H --> I[Audit trail]\n  H --> J[React store]",
   "auth_flow_mermaid": "sequenceDiagram\n  participant U as User\n  participant UI as Network Shell\n  participant Auth as Cloud Auth\n  participant API as Edge Function\n  participant DB as Postgres+RLS\n  U->>UI: sign in\n  UI->>Auth: OAuth (Google)\n  Auth-->>UI: session (JWT)\n  UI->>API: call with JWT\n  API->>DB: query as auth.uid()\n  DB-->>API: rows filtered by RLS\n  API-->>UI: response",
   "authz_flow_mermaid": "flowlease file LR\n  Req[Request w/ JWT] --> Fn[Edge Function]\n  Fn --> Role[has_role user_id, role]\n  Role --> DB[(user_roles + RLS policies)]\n  DB -- allow --> Ok[Return rows]\n  DB -- deny --> Err[403 + audit entry]",
   "deployment_mermaid": "flowlease file LR\n  Dev[Developer] --> Repo[Git]\n  Repo --> CI[Lovable Build]\n  CI --> Preview[Preview Env]\n  CI --> Prod[Production]\n  Prod --> Cloud[(Lovable Cloud)]\n  Prod --> CDN[[Edge CDN]]",
   "background_job_mermaid": "flowlease file LR\n  UI[Blueprint Detail] --> Enq[blueprintJobQueue.enqueue]\n  Enq --> Slot{Concurrency slot?}\n  Slot -- yes --> Run[Run job]\n  Slot -- no --> Queued[queued]\n  Run -->|success| Done[Persist result + emit event]\n  Run -->|error| Back[Exponential backoff + jitter]\n  Back -->|attempts left| Run\n  Back -->|exhausted| Fail[Record diagnostic + expose retry button]",
   "event_flow_mermaid": "flowlease file LR\n  Sync[sync.blueprint.applied] --> Core[Blueprint Core]\n  Integ[integrity.completed] --> UI\n  CacheInv[cache.invalidated] --> Pipe[Content Pipeline]\n  Pipe --> Sources[sources.fetched]\n  Sources --> Articles[articles.generated]\n  Articles --> Integ",
   "failure_flow_mermaid": "flowlease file LR\n  Call[Edge Function call] --> Timeout{Timeout / 5xx?}\n  Timeout -- no --> Ok[Success]\n  Timeout -- yes --> Retry[Backoff + retry]\n  Retry --> Cap{Attempts cap?}\n  Cap -- no --> Call\n  Cap -- yes --> Breaker[Open circuit]\n  Breaker --> Cache[Serve last-known-good]\n  Breaker --> Owner[Surface diagnostic + owner action]",
   "multi_tenant_flow_mermaid": "flowlease file LR\n  Owner1([Owner A]) --> UI\n  Owner2([Owner B]) --> UI\n  UI --> API[Edge Function w/ JWT]\n  API --> Policy{RLS: auth.uid + slug scope}\n  Policy -- match --> Rows[Owner-scoped rows]\n  Policy -- no match --> Deny[403]",
   "ai_flow_mermaid": "graph LR; SRC[Source documents as DATA]-->EX[Extract + normalize]-->SR[Order source searches]-->MTX[Build matrix]-->DR[Draft locked-field elements]-->GT[Deterministic completeness gates]-->SP[Specialist release]-->DL[Deliver]; GT-.exception.->SP; SP-.high-risk.->EXP[Expert review]"
  },
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Adopt modular monolith as the network-wide architecture style",
    "context": "Small team maintaining many blueprints with shared shell, evidence discipline, and per-vertical trust variation.",
    "options": [
     "simple monolith",
     "modular monolith",
     "microservices",
     "serverless-only",
     "hybrid"
    ],
    "chosen": "modular monolith",
    "why": "Preserves a single audit boundary and deploy cadence while allowing edge functions for burst workloads.",
    "consequences": [
     "Shared deploy lifecycle across blueprints",
     "Row-level tenant isolation carries the security load"
    ],
    "risks": [
     "A rogue blueprint can regress network shell performance"
    ],
    "reversal": "Extract a module to its own deploy only when its SLO diverges from the network shell.",
    "revisit_when": "A blueprint acquires a divergent SLO, a second team joins, or the shell deploy time exceeds 10 minutes."
   },
   {
    "id": "ADR-002",
    "decision": "Managed Postgres as the sole primary datastore",
    "context": "All entities are relational (blueprints, evidence, sync runs, articles, audit).",
    "options": [
     "Postgres",
     "Postgres + DocumentDB",
     "Postgres + vector DB",
     "Firestore"
    ],
    "chosen": "Postgres (Cloud managed) with JSONB for semi-structured fields",
    "why": "Relational integrity + row-level security satisfies audit, tenancy, and reporting; JSONB absorbs shape drift.",
    "consequences": [
     "RLS policies are the primary tenancy control",
     "Full-text search via Postgres FTS until it stops scaling"
    ],
    "risks": [
     "Complex joins under growth"
    ],
    "reversal": "Introduce a read-replica or a dedicated search index only when p95 breaches SLO.",
    "revisit_when": "FTS p95 > SLO for 2 consecutive weeks, or a genuine RAG surface appears."
   },
   {
    "id": "ADR-003",
    "decision": "Per-document edge functions for long-running AI generation",
    "context": "IDLE_TIMEOUT (150s) on monolithic legal-docs generator forced this split.",
    "options": [
     "Single long function",
     "Chunked per-doc functions",
     "Background job with polling"
    ],
    "chosen": "Per-document endpoints with client-side fan-out + retries",
    "why": "Keeps each invocation under the timeout, isolates failures, enables partial success reporting.",
    "consequences": [
     "More endpoints to maintain",
     "Client must own orchestration"
    ],
    "risks": [
     "Client back-pressure if fan-out is too wide"
    ],
    "reversal": "Move to a real workflow engine when we cross ~10 concurrent long jobs per blueprint.",
    "revisit_when": "Concurrent long-running jobs > 10 per blueprint, or client-side orchestration becomes buggy."
   },
   {
    "id": "ADR-004",
    "decision": "Evidence-first release gate",
    "context": "Vertical compliance posture: Domain-specific (engagement-letter records, analyst attestations, retention schedules).",
    "options": [
     "Owner-declared ready",
     "Auto-ready via checklist",
     "Evidence-gated ready"
    ],
    "chosen": "Evidence-gated ready — release requires resolved owner actions + verified evidence",
    "why": "Regulated verticals cannot ship on self-declaration; evidence provides defensibility.",
    "consequences": [
     "Slower path to ready",
     "Higher confidence at ready"
    ],
    "risks": [
     "Owners abandon incomplete blueprints"
    ],
    "reversal": "Introduce a 'ready-with-caveats' state only if the network stalls on this gate.",
    "revisit_when": "> 30% of blueprints stuck in owner-action state for > 30 days."
   },
   {
    "id": "ADR-005",
    "decision": "Defer AI adoption until a specific evidence-generation need arises",
    "context": "AI is powerful but adds cost, latency, and auditability burden.",
    "options": [
     "No AI",
     "Grounded AI only",
     "Agentic AI"
    ],
    "chosen": "No AI in this vertical",
    "why": "Vertical does not currently justify AI-shaped complexity.",
    "consequences": [
     "No prompt catalog to maintain"
    ],
    "risks": [],
    "reversal": "Introduce AI only for a scoped generation task.",
    "revisit_when": "A specific generation task appears with clear source grounding."
   },
   {
    "id": "ADR-006",
    "decision": "Managed OAuth (Google) with roles in a dedicated user_roles table",
    "context": "Storing roles on the profile row invites privilege-escalation bugs; RLS policies must reference a stable role source.",
    "options": [
     "Roles on profiles",
     "user_roles + has_role() SECURITY DEFINER",
     "External IdP with JIT notices"
    ],
    "chosen": "user_roles table + has_role() SECURITY DEFINER, referenced by RLS",
    "why": "Prevents recursive RLS, isolates authz decisions, satisfies audit review.",
    "consequences": [
     "One extra join in policies",
     "Explicit role grants required"
    ],
    "risks": [
     "Role drift if grants are not audited"
    ],
    "reversal": "Swap SECURITY DEFINER function for an IdP notice without changing policies.",
    "revisit_when": "Enterprise SSO / SAML contract signed, or role count exceeds ~10."
   },
   {
    "id": "ADR-007",
    "decision": "Single-tenant per blueprint slug with row-level isolation",
    "context": "Blueprints share infra but must never cross-read evidence, sync history, or generated artifacts.",
    "options": [
     "Shared DB + RLS",
     "Schema-per-tenant",
     "DB-per-tenant"
    ],
    "chosen": "Shared DB + RLS keyed on auth.uid() and blueprint slug",
    "why": "Simplest operable model at current scale; migration cost stays near zero.",
    "consequences": [
     "RLS is load-bearing security"
    ],
    "risks": [
     "A missing policy = a leak"
    ],
    "reversal": "Extract a specific tenant to its own schema when contract requires it.",
    "revisit_when": "First enterprise customer with a residency or dedicated-DB clause."
   }
  ],
  "roadmap": [
   {
    "phase": "MVP",
    "build": [
     "Network shell + Blueprint Core module",
     "Content Pipeline with concurrency + backoff",
     "Design + Architecture DNA per blueprint",
     "Sync + rollback + audit trail"
    ],
    "avoid": [
     "Any per-blueprint deploy pipeline",
     "Message brokers",
     "Vector DBs",
     "Multi-region"
    ],
    "defer": [
     "A workflow engine",
     "Full-text search infra",
     "Dedicated CDN rules"
    ],
    "monitor": [
     "Edge function IDLE_TIMEOUT rate",
     "AI cost per generation",
     "Duplicate-slug regressions"
    ],
    "triggers_to_change": [
     "p95 breach on Blueprint detail > 800ms",
     "≥ 3 IDLE_TIMEOUTs/day sustained"
    ],
    "acceptable_debt": [
     "Client-owned job orchestration",
     "localStorage-backed UI state"
    ],
    "dangerous_debt": [
     "Missing RLS on any public table",
     "Ungrounded AI in customer-visible surfaces"
    ]
   },
   {
    "phase": "Stabilization",
    "build": [
     "Automated smoke test per blueprint on cache invalidation",
     "Per-slug retention + audit trail export",
     "Contract tests for every edge function"
    ],
    "avoid": [
     "Premature module extraction"
    ],
    "defer": [
     "Multi-tenant admin console"
    ],
    "monitor": [
     "SLO burn rate",
     "Cost per blueprint per week"
    ],
    "triggers_to_change": [
     "A single blueprint accounts for > 30% of AI spend"
    ],
    "acceptable_debt": [
     "Manual runbook execution for rare failures"
    ],
    "dangerous_debt": [
     "Untested rollback path",
     "Backups without a restore drill"
    ]
   },
   {
    "phase": "Growth",
    "build": [
     "Optional workflow engine adapter behind the current queue interface",
     "Read replica for Postgres if analytics queries interfere",
     "Feature flags per capability module"
    ],
    "avoid": [
     "Splitting Blueprint Core into services without SLO justification"
    ],
    "defer": [
     "Real-time collaboration"
    ],
    "monitor": [
     "Fan-out concurrency vs edge function limits"
    ],
    "triggers_to_change": [
     "> 10 concurrent long jobs per blueprint",
     "New team joins with independent release cadence"
    ],
    "acceptable_debt": [
     "Env-based feature flags"
    ],
    "dangerous_debt": [
     "Skipping migration reviews",
     "Unaudited role grants"
    ]
   },
   {
    "phase": "Scale",
    "build": [
     "Extract Content Pipeline to a dedicated service if it dominates deploys",
     "Search index (Postgres FTS → dedicated) once FTS p95 breaches SLO"
    ],
    "avoid": [
     "Microservices per blueprint"
    ],
    "defer": [
     "Multi-region until a customer contract requires it"
    ],
    "monitor": [
     "DB CPU + IO under peak",
     "Search p95"
    ],
    "triggers_to_change": [
     "Regional compliance contract signed"
    ],
    "acceptable_debt": [
     "Single-region deployment"
    ],
    "dangerous_debt": [
     "Unbounded audit trail growth",
     "Missing DR drill evidence"
    ]
   },
   {
    "phase": "Enterprise/Compliance",
    "build": [
     "Formal SOC 2 evidence pipeline (access reviews, change management)",
     "Tenant-scoped encryption keys where regulation requires",
     "DR drill quarterly with restore proof"
    ],
    "avoid": [
     "Custom compliance frameworks; ride managed platform attestations"
    ],
    "defer": [
     "FedRAMP unless a customer commits"
    ],
    "monitor": [
     "Access review completion",
     "Restore-test success rate"
    ],
    "triggers_to_change": [
     "Signed contract with SOC 2 clause",
     "PHI/PII scope change"
    ],
    "acceptable_debt": [
     "Manual quarterly access review with checklist"
    ],
    "dangerous_debt": [
     "Ad-hoc admin access without approval trail"
    ]
   }
  ],
  "anti_overengineering": {
   "flagged": [
    {
     "item": "Introducing Kubernetes",
     "why": "Team size + workload shape don't justify it.",
     "simpler": "Managed Cloud primitives."
    },
    {
     "item": "Adopting microservices",
     "why": "Single deploy cadence + shared audit boundary.",
     "simpler": "Modular monolith with edge functions."
    },
    {
     "item": "Adopting a vector DB",
     "why": "Sources are small + structured; deterministic retrieval works.",
     "simpler": "Direct source fetch + Postgres FTS."
    },
    {
     "item": "Adopting event sourcing",
     "why": "Audit trail table already provides the needed reconstructibility.",
     "simpler": "Append-only audit_trail + snapshots."
    },
    {
     "item": "Multi-region from day one",
     "why": "No customer contract requires it.",
     "simpler": "Single region + documented DR plan."
    },
    {
     "item": "Custom workflow engine",
     "why": "In-app queue covers current concurrency needs.",
     "simpler": "blueprintJobQueue with backoff."
    },
    {
     "item": "Premature message queue",
     "why": "In-app queue + audit trail cover the fan-out cases.",
     "simpler": "Keep blueprintJobQueue; revisit at 10x volume."
    },
    {
     "item": "Custom auth",
     "why": "Managed OAuth + user_roles cover the model.",
     "simpler": "Cloud Auth + user_roles table."
    },
    {
     "item": "Premature caching layer",
     "why": "React Query covers the read-heavy paths.",
     "simpler": "React Query + HTTP cache headers."
    },
    {
     "item": "Data warehouse",
     "why": "No analytics contract; Postgres analytics queries suffice.",
     "simpler": "Read replica if the primary is hurt."
    }
   ]
  },
  "risks": [
   {
    "risk": "Edge function IDLE_TIMEOUT on long generations",
    "likelihood": "moderate",
    "impact": "high",
    "mitigation": "Per-document endpoints + client-side retries with exponential backoff.",
    "detection": "Smoke test runner + diagnostics drawer flags IDLE_TIMEOUT.",
    "owner": "engineering",
    "escalation": "Sustained > 3/day for one blueprint → open incident.",
    "fallback": "Fall back to last-known-good cached artifact; pause auto-generation for the affected blueprint.",
    "category": "technical"
   },
   {
    "risk": "Duplicate slugs in SEED causing UI regressions",
    "likelihood": "moderate",
    "impact": "moderate",
    "mitigation": "mergedSeed dedupes by slug; add lint on SEED at build time.",
    "detection": "React duplicate-key warning; per-slug uniqueness assertion in tests.",
    "owner": "engineering",
    "escalation": "Ship-block if reproduced on main.",
    "fallback": "Runtime dedupe in mergedSeed keeps first occurrence.",
    "category": "technical"
   },
   {
    "risk": "Ungrounded AI output shipped to microsite",
    "likelihood": "low",
    "impact": "high",
    "mitigation": "Citation-first prompts; integrity check gates Seed Articles view.",
    "detection": "Integrity report failing count > 0 blocks display.",
    "owner": "engineering",
    "escalation": "Any customer-visible ungrounded notice → rollback the blueprint.",
    "fallback": "Auto-hide the article + surface owner action to regenerate with stricter prompt.",
    "category": "product"
   },
   {
    "risk": "Cross-tenant data leak via missing RLS on new table",
    "likelihood": "low",
    "impact": "critical",
    "mitigation": "Every CREATE TABLE ships with GRANT + ENABLE RLS + policies in the same migration.",
    "detection": "Security scanner + migration checklist.",
    "owner": "engineering",
    "escalation": "Immediate lockdown + audit.",
    "fallback": "Revoke Data API grants on affected table; restore from PITR if data was modified.",
    "category": "security"
   },
   {
    "risk": "AI cost runaway on a single blueprint",
    "likelihood": "moderate",
    "impact": "moderate",
    "mitigation": "Per-slug rate limits + smoke-test cache + concurrency cap in UI.",
    "detection": "Cost monitoring dashboard; per-blueprint spend alert at 3x baseline.",
    "owner": "SRE",
    "escalation": "Auto-pause generation; require manual re-enable.",
    "fallback": "Disable AI for the offending blueprint via feature flag; serve last-known-good.",
    "category": "cost"
   },
   {
    "risk": "AI provider outage or model deprecation",
    "likelihood": "moderate",
    "impact": "moderate",
    "mitigation": "Per-capability fallback model + retry with backoff; abstract via Lovable AI Gateway.",
    "detection": "Elevated 5xx or empty completions; smoke test failing across blueprints.",
    "owner": "engineering",
    "escalation": "Sustained > 30 min → switch fallback model; notify owners.",
    "fallback": "Serve cached artifacts + disable AI-only capabilities until restored.",
    "category": "vendor"
   },
   {
    "risk": "Compliance evidence gap during audit",
    "likelihood": "low",
    "impact": "high",
    "mitigation": "Evidence-first release gate + audit trail export from UI.",
    "detection": "Missing audit entries surfaced in periodic reconciliation report.",
    "owner": "legal",
    "escalation": "Regulator-visible gap → incident + disclosure per policy.",
    "fallback": "Freeze affected blueprint's release state; produce backfill evidence pack.",
    "category": "compliance"
   },
   {
    "risk": "Solo/small-team key-person dependency",
    "likelihood": "moderate",
    "impact": "high",
    "mitigation": "Deterministic DNA modules keep decisions in code, not in one head; runbooks per capability.",
    "detection": "Bus-factor review each quarter.",
    "owner": "owner",
    "escalation": "> 1 critical path with no backup → hire or contract.",
    "fallback": "Freeze non-critical changes; document current state before further work.",
    "category": "team"
   },
   {
    "risk": "Audit trail gaps on release decisions",
    "likelihood": "low",
    "impact": "critical",
    "mitigation": "Every mutation writes audit entry in the same transaction.",
    "detection": "Audit trail row count vs mutation count reconciliation.",
    "owner": "engineering",
    "escalation": "Regulator-visible gap → incident + disclosure.",
    "fallback": "Reconstruct from Postgres WAL + application logs; disclose per compliance policy.",
    "category": "compliance"
   }
  ],
  "rules": [
   "Keep business logic out of UI components — derivations live in lib/*, panels only render.",
   "Do not introduce a new service without a clear owner and a scaling reason.",
   "All external integrations must have retries, timeouts, and failure handling.",
   "All sensitive actions must be auditable in the same transaction that performs them.",
   "All background jobs must be idempotent.",
   "All APIs must return the normalized error envelope.",
   "All tenant-scoped queries must enforce tenant isolation via RLS — never trust the client.",
   "All expensive AI calls must be logged, capped, and observable.",
   "All schema changes must be reversible or safely migratable — no destructive drops without a rollout plan.",
   "All critical workflows must have observability: correlationId, phase timings, retry timeline.",
   "Every public table ships with GRANT + ENABLE RLS + policies in the same migration.",
   "Every AI span carries a citation; no citation, no ship.",
   "Every destructive action requires typed confirmation."
  ],
  "audit": {
   "product_fit": "Architecture matches an evidence-first, regulated-adjacent workflow product per blueprint.",
   "simplicity": "One shell, one DB, edge functions for bursts — near the simplicity floor for the product's ambitions.",
   "security": "RLS + role table + audit trail; meets ASVS L1 baseline.",
   "reliability": "SLOs defined; per-module degradation; retries + diagnostics in place.",
   "scalability": "Horizontal by blueprint count is the growth axis; per-blueprint scaling is comfortably in headroom.",
   "maintainability": "Deterministic derivations (Design DNA, Architecture DNA) keep per-vertical drift out of components.",
   "performance": "p95 target 600ms is realistic on Cloud edge with warm cache.",
   "cost": "Idle-to-zero for cold blueprints; per-blueprint attribution keeps AI spend controllable.",
   "compliance": "Domain-specific (engagement-letter records, analyst attestations, retention schedules)",
   "dx": "Single stack (React + Vite + Tailwind + Cloud); new blueprint reaches microsite state in one session.",
   "ops_burden": "Managed platform absorbs infra ops; SRE work is limited to SLO watch + runbooks.",
   "extensibility": "New capability = new edge function + new Runtime tab entry; no shell changes required.",
   "team_suitability": "Fits a small team; every added component must retire an older one.",
   "time_to_market": "New blueprint reachable to validation-microsite state within one working session.",
   "recommendation": {
    "style": "modular monolith",
    "stack": "React + Vite + TypeScript + Tailwind + shadcn on the client; Deno edge functions + managed Postgres (RLS) + object storage on the server; Lovable AI Gateway (unused in this vertical).",
    "hosting": "Lovable Cloud managed hosting; preview + production environments; edge functions co-deploy with the app.",
    "database": "Managed Postgres with RLS + JSONB; PITR enabled for critical-tier tenants.",
    "auth": "Managed OAuth (Google default) + user_roles table + has_role() SECURITY DEFINER referenced from RLS policies.",
    "integrations": "GitHub (public read) for sync + sources; Lovable AI Gateway for LLM calls; Cloud Storage for artifacts. No third-party CRM/email/SMS at MVP.",
    "ai_approach": "No AI at MVP for this vertical; revisit only when a scoped generation task with clear sources appears.",
    "build_first": [
     "Blueprint Core (evidence + release gate) — vertical-agnostic.",
     "Content Pipeline (sources → articles → integrity) — required for any evidence notice.",
     "Sync + rollback — required to safely onboard the network."
    ],
    "avoid": [
     "Any per-blueprint deploy pipeline.",
     "Autonomous AI agents that mutate data without owner confirmation.",
     "Bespoke workflow engines before the in-app queue is exhausted."
    ],
    "revisit_later": [
     "Workflow engine adoption when > 10 concurrent long jobs per blueprint.",
     "Search index dedicated infra when Postgres FTS p95 breaches SLO.",
     "Multi-region on the first residency-bound contract."
    ],
    "biggest_risks": [
     "Missing RLS on a new public table (critical).",
     "Ungrounded AI output reaching a customer-visible surface.",
     "AI cost runaway on a single blueprint.",
     "Solo/small-team key-person dependency."
    ],
    "first_10_steps": [
     "Confirm managed OAuth + user_roles table + has_role() function are in place.",
     "Enable RLS + policies on every existing public table; add the migration checklist to CI.",
     "Wire correlationId end-to-end across every edge function call.",
     "Ship the smoke test runner as a required post-deploy gate.",
     "Enable PITR + schedule the first restore drill on the calendar.",
     "Add per-slug AI budget caps and cost dashboards.",
     "Enforce evidence-first release gate for every blueprint.",
     "Set SLO burn-rate alerts on the top 3 SLIs.",
     "Document the per-capability runbook (retry, cancel, invalidate).",
     "Publish this Architecture DNA per blueprint as part of the release evidence pack."
    ],
    "top_10_rules": [
     "Every public table ships with GRANT + RLS + policies in the same migration.",
     "Every mutation writes an audit entry in the same transaction.",
     "Every AI span carries a citation; no citation, no ship.",
     "Every long AI call is per-item, never monolithic.",
     "Every edge function call carries a correlationId end-to-end.",
     "Every retry uses exponential backoff + jitter with a hard attempt cap.",
     "Every destructive action requires typed confirmation.",
     "No microservice extraction without a divergent SLO.",
     "No new dependency without a supply-chain scan.",
     "Signature element (Pack-register tabs with regime chip) and accent (clinical-teal) are network invariants — respect them."
    ]
   }
  }
 },
 "design": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "archetypes": [
   "statutory-notice filing desk",
   "compliance-operations system",
   "regulatory-documentation back office"
  ],
  "user_mindset": {
   "goals": "Get a trigger-event notice verified against the correct state statute and out the door, without becoming an MHC-law expert.",
   "session_length": "Bursty around rent-increase season and trigger events; otherwise a weekly-digest review of open compliance runs.",
   "confidence": "Practical, liability-bearing owner-operators; will not tolerate a portal that takes longer to operate than drafting the notice themselves.",
   "interface_needs": "Fast status scanning, plain-language compliance-run states, clear next-action per trigger event."
  },
  "posture": [
   "formal",
   "trustworthy",
   "unhurried-but-deadline-aware"
  ],
  "density": "comfortable",
  "trust_level": {
   "tier": "high",
   "sensitive_domains": [
    "tenant PII in rent rolls",
    "lease terms",
    "engagement-letter records"
   ],
   "implications": [
    "Every destructive action confirmed with typed intent, never a single-click.",
    "Errors carry remediation copy + owner, not just a message.",
    "Focus rings visible on every interactive element (WCAG 2.2 AA minimum).",
    "Named compliance analyst (and counsel where required) on every released packet.",
    "Explicit unsaved-changes gate on nav."
   ]
  },
  "differentiation": {
   "avoid": [
    "Material Design defaults",
    "shadcn stock look (unstyled cards + slate ring)",
    "Purple/indigo gradient heroes",
    "Stripe/Linear/Notion mimicry",
    "Vertical cliche: alarm-red penalty banners and generic 'legal doc' clip-art"
   ],
   "strategy": "Anchor on the notice-status chip (drafting / deterministic-check / analyst review / counsel review / released) as the recurring signature element, styled like an official-seal stamp; every page must include it at least once. Reserve the brass/amber accent for action/CTA and status signals only."
  },
  "territories": [
   {
    "name": "Statute Desk",
    "color_mood": "deep statute-navy + warm parchment",
    "typography": "Charter/Iowan Old Style serif + system sans",
    "density": "comfortable card grid",
    "component_feel": "official-notice filing desk",
    "motion": "none (static, print-parity)",
    "fits": "owner-operator daily use",
    "risks": "could read as generic legal SaaS without the brass accent"
   },
   {
    "name": "Portfolio Atlas",
    "color_mood": "map ink + civic navy",
    "typography": "Neue Haas Grotesk",
    "density": "map-driven",
    "component_feel": "multi-community portfolio atlas",
    "motion": "map pan",
    "fits": "3+ community Portfolio Retainer clients",
    "risks": "requires multi-community data not present at launch"
   },
   {
    "name": "Statutory-Clock Timeline",
    "color_mood": "slate + amber",
    "typography": "Inter",
    "density": "timeline",
    "component_feel": "gantt of open compliance runs and their statutory deadlines",
    "motion": "scroll-sync",
    "fits": "recurring rent-increase-cycle cadence",
    "risks": "gantt fatigue for single-community operators"
   }
  ],
  "chosen_territory": "Statute Desk",
  "chosen_rationale": "The packet is the deliverable; the filing-desk metaphor keeps every screen artifact-shaped, the way an owner-operator would check it between property walk-throughs.",
  "prioritized_components": [
   {
    "name": "Notice-status chip",
    "why": "every compliance run is scoped by one of four domain-state statuses (Intake / Evidence / Review / Release)"
   },
   {
    "name": "Compliance-run card w/ next-action",
    "why": "primary deadline-critical work unit"
   },
   {
    "name": "Notice & Disclosure Compliance Packet assembler",
    "why": "output is a bundle with a hard-fail deterministic checklist"
   }
  ],
  "patterns": [
   {
    "name": "State/rulebook switcher",
    "description": "Global beachhead-state selector; every deterministic check respects the selected state's rulebook entry."
   },
   {
    "name": "Packet release sign-off",
    "description": "Named compliance analyst with attestation copy; closure/first-of-kind/contested packets cannot release without contracted-counsel approval."
   }
  ],
  "states": [
   "default",
   "hover",
   "active",
   "focus",
   "disabled",
   "loading",
   "skeleton",
   "empty",
   "error",
   "warning",
   "success",
   "offline",
   "permission-denied",
   "partial-data",
   "syncing",
   "unsaved-changes",
   "ai-generating"
  ],
  "localization": [
   "Copy budgets assume +35% expansion for future non-English translations.",
   "RTL mirror not required at launch (US-first, en-US only).",
   "Dates/times/currencies use Intl APIs, never hardcoded formats.",
   "Touch targets ≥ 44px; keyboard tab order matches visual order.",
   "Density modes: comfortable (default), compact (power users), spacious (accessibility)."
  ],
  "uniqueness_audit": {
   "app_specific_decisions": [
    "Notice-status chip motif styled as an official-seal stamp",
    "Gap-register-not-invented-data copy discipline"
   ],
   "cliches_avoided": [
    "Alarm-red penalty banners",
    "Green-check compliance theatre",
    "Generic scales-of-justice clip-art"
   ],
   "scale_notes": "New blueprints inherit the network shell but MUST declare their own signature element, accent role, and anti-reference before they can be marked ready. Enforced by the release gate."
  },
  "tokens": {
   "brand": "208 53% 23%",
   "brand-fg": "42 50% 96%",
   "surface": "42 50% 96%",
   "ink": "204 9% 11%",
   "muted": "213 10% 40%",
   "accent": "36 52% 47%"
  },
  "type": {
   "display": "Charter, 'Iowan Old Style', Georgia, ui-serif, serif",
   "body": "-apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif",
   "fonts_url": ""
  },
  "signature": {
   "motif": "Notice-status chip · deep statute-navy + brass-seal palette",
   "render": "status-chip-grid"
  }
 },
 "seo": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "archetype": "statute-fluent authority site",
  "archetype_impact": "Search fit is a statute-fluent authority site aimed at MHC owner-operators, not tenants. That means depth over breadth: each page names the specific state statute, trigger event, or workflow step it addresses, and thin variants are refused.",
  "authority_dna": {
   "site_archetype": "statute-fluent authority site",
   "monetization_model": "B2B lead → free MHC Notice Compliance Gap Scan → paid Notice & Disclosure Compliance Packet engagement (not ad revenue; not affiliate).",
   "main_search_intents": [
    "informational",
    "commercial"
   ],
   "topical_authority_opportunity": "Own the 'manufactured housing community notice compliance' topic cluster for the owner-operator audience by covering the entire workflow — state-by-state notice-period and cap requirements, engagement-letter mechanics, closure-notice mechanics, proof-of-service practice — better than any general landlord-tenant-law explainer.",
   "local_seo_opportunity": "Not justified: buyers search by state statute/workflow, not by city. Do not build /city/ pages.",
   "global_national_opportunity": "National (US-first), organized by state, is the primary market; no international variant needed at launch.",
   "easiest_ranking_path": "Long-tail, owner-operator-specific queries ('how much notice for a mobile home park rent increase in Washington', 'WA HB 1217 rent increase notice requirements') where the SERP is dominated by general residential landlord-tenant explainer pages, not MHC-specific operational content.",
   "hardest_ranking_path": "Head terms like 'manufactured housing' or 'mobile home park management software' — dominated by aged MHI/HUD and PM-vendor domains. Defer until authority is established.",
   "trust_credibility_requirements": [
    "Named human authors with role + credentials",
    "Statute citations on every deterministic-checklist claim",
    "Last-reviewed date + change log on state-rulebook pages",
    "Direct links to each state's own statute text or agency guidance (not aggregators)",
    "Compliance-analyst attribution on any page describing the release process"
   ],
   "ymyl": true,
   "expert_review_needed": true,
   "site_structure": "Authority hub + narrow high-intent service page + linkable evidence assets (Gap Scan, state rulebook cheat sheets). Not a directory. Not a marketplace.",
   "seo_moat": "always-current, state-by-state deterministic-checklist pages with change-log timestamps, covering all five beachhead states rather than one"
  },
  "search_market": {
   "primary_markets": [
    "manufactured housing community notice compliance workflow",
    "MHC rent-increase notice requirements by state"
   ],
   "secondary_markets": [
    "park-closure notice compliance",
    "zoning-petition notice tracking for MHC owners",
    "MHC rule-change disclosure requirements"
   ],
   "low_competition_subtopics": [
    "state-by-state MHC notice-period and cap differences",
    "property-management-export-to-notice workflow",
    "MHC engagement-letter mechanics"
   ],
   "high_commercial_intent": [
    "done-for-you MHC notice compliance drafting",
    "outsource mobile home park rent-increase notices",
    "MHC compliance analyst service"
   ],
   "informational": [
    "how much notice for a mobile home park rent increase in Washington",
    "what does WA HB 1217 require",
    "how is MHC law different from residential landlord-tenant law"
   ],
   "local_intent": [],
   "transactional": [
    "ParkNotice Clear pricing",
    "book a free MHC Notice Compliance Gap Scan",
    "MHC notice compliance service demo"
   ],
   "comparison": [
    "done-for-you MHC notice compliance vs general property-management software",
    "MHC compliance service vs outside counsel"
   ],
   "problem_solution": [
    "mobile home park rent increase notice challenged",
    "MHC notice missing required disclosure",
    "no time to verify MHC statute compliance"
   ],
   "near_me": [],
   "long_tail": [
    "how to send a compliant rent-increase notice for a mobile home park in Washington",
    "what happens if a park-closure notice misses the 12-month requirement",
    "manufactured housing community engagement-letter template"
   ],
   "questions": [
    "what does a complete MHC rent-increase notice need?",
    "who is responsible for verifying a mobile home park notice?",
    "how fast should a rent-increase notice be prepared before a deadline?"
   ],
   "emerging": [
    "AI-assisted MHC notice drafting",
    "automated deterministic-checklist compliance for manufactured housing"
   ],
   "seasonal": [],
   "underserved_serps": [
    "state-by-state MHC notice-period comparisons",
    "MHC engagement-letter mechanics explained"
   ],
   "weak_serps": [
    "mobile home park notice requirements checklist",
    "manufactured housing rent increase rules list"
   ],
   "forum_dominated_serps": [
    "what happens if a park never sends a proper rent-increase notice",
    "mobile home park rent increase horror stories"
   ],
   "winnable_authoritative_serps": [
    "manufactured housing community notice compliance definitive guide",
    "state-by-state MHC notice requirements comparison"
   ],
   "avoid_initially": [
    "manufactured home buying guides",
    "best mobile home communities",
    "manufactured housing cost calculator"
   ],
   "easy_wins": [
    "state-by-state MHC notice-period and cap differences",
    "MHC engagement-letter mechanics",
    "why MHC rent-increase notices get challenged for missing disclosures"
   ],
   "moderate": [
    "manufactured housing community notice compliance definitive guide",
    "park-closure notice compliance workflow"
   ],
   "long_term_plays": [
    "mobile home park management software comparison",
    "portfolio-wide notice-compliance dashboards for multi-community operators"
   ],
   "do_not_pursue": [
    "generic 'how to start a mobile home park business' content",
    "celebrity or trend-jacking posts",
    "AI-generated listicles"
   ]
  },
  "keyword_clusters": [
   {
    "primary": "how much notice for a mobile home park rent increase in Washington",
    "related": [
     "WA HB 1217 rent increase notice",
     "5 percent rent cap manufactured housing"
    ],
    "intent": "informational",
    "user_problem": "An owner-operator is planning a rent increase and doesn't know the exact WA notice period and cap.",
    "funnel": "MOFU",
    "business_value": "high",
    "ranking_difficulty": "low",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "SERP dominated by generic residential landlord-tenant explainer pages, not MHC-specific operational content",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Pillar / evidence guide",
    "reason": "High buyer intent + weak SERP + our unique operator-side proof",
    "priority_score": 17,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "done-for-you MHC notice compliance vs general property-management software",
    "related": [
     "MHC compliance service alternatives",
     "Zego Innago BC Solutions comparison"
    ],
    "intent": "commercial",
    "user_problem": "Evaluating whether existing property-management software already covers statutory notice compliance.",
    "funnel": "BOFU",
    "business_value": "high",
    "ranking_difficulty": "medium",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "Weak — mostly PM-vendor's own feature pages",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Comparison page (honest, evidence-based)",
    "reason": "Late-funnel intent with weak competition",
    "priority_score": 17,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "MHC engagement letter explained",
    "related": [
     "duty-holder of record definition",
     "MHC compliance engagement template"
    ],
    "intent": "informational",
    "user_problem": "Owner-operator wants a concrete, plain-language explanation of the engagement-letter mechanism.",
    "funnel": "MOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "low",
    "serp_weakness": "Weak — thin generic-contract glossary entries",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Resource / explainer page",
    "reason": "Easy win + strong trust-building fit",
    "priority_score": 14,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "state-by-state MHC notice requirements comparison",
    "related": [
     "what does a complete MHC rent-increase notice need",
     "manufactured housing notice requirements by state"
    ],
    "intent": "informational",
    "user_problem": "Needs authoritative, state-specific notice requirements in one place.",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "medium",
    "serp_weakness": "Weak — no aggregator covers this from the operator side",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Data table page (updated quarterly)",
    "reason": "Recurring reference traffic + easy freshness moat",
    "priority_score": 14,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "how to avoid a challenged mobile home park rent increase notice",
    "related": [
     "rent increase notice challenged mobile home park",
     "MHC notice compliance checklist"
    ],
    "intent": "informational",
    "user_problem": "An operator or owner wants to understand what makes a notice defensible.",
    "funnel": "MOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "medium",
    "serp_weakness": "SERP is thin and forum-heavy",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "How-to cluster page",
    "reason": "Easy win + high assist to the product page",
    "priority_score": 13,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "mobile home park management software notice compliance features",
    "related": [
     "Zego notice compliance",
     "Innago MHC compliance integration"
    ],
    "intent": "commercial",
    "user_problem": "Ready to evaluate whether existing PM software already solves this.",
    "funnel": "BOFU",
    "business_value": "high",
    "ranking_difficulty": "high",
    "conversion_potential": "high",
    "content_effort": "high",
    "serp_weakness": "Strong — aged PM-vendor domains",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Product page (defer)",
    "reason": "Long-term play — do not chase before authority is built",
    "priority_score": 9,
    "priority": "P1",
    "bucket": "medium"
   },
   {
    "primary": "manufactured housing community notice compliance definitive guide",
    "related": [
     "MHC law vs general landlord-tenant law",
     "manufactured housing notice compliance process explained"
    ],
    "intent": "informational",
    "user_problem": "Just took on notice-compliance responsibility and needs to orient.",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "medium",
    "conversion_potential": "low",
    "content_effort": "high",
    "serp_weakness": "Moderate — mostly general residential landlord-tenant content",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Pillar page",
    "reason": "Anchors topical authority for the whole cluster",
    "priority_score": 7,
    "priority": "P1",
    "bucket": "medium"
   }
  ],
  "topical_authority_map": {
   "core_topics": [
    "Manufactured housing community notice compliance — definitive guide",
    "State-by-state MHC notice-period and cap library",
    "Rent-increase and closure notice challenge risk"
   ],
   "pillars": [
    {
     "name": "Manufactured housing community notice compliance — definitive guide",
     "core_intent": "informational",
     "audience": "independent MHC owner-operators and community managers",
     "conversion_goal": "MHC Notice Compliance Gap Scan signup → later pilot conversation",
     "supporting_pages": [
      "Why MHC rent-increase notices get challenged for missing disclosures",
      "Engagement-letter mechanics explained",
      "State-by-state MHC notice requirements comparison",
      "FAQ: MHC notice compliance"
     ],
     "internal_links": [
      "/product",
      "/states/",
      "/resources/checklist"
     ],
     "schema": [
      "Article",
      "BreadcrumbList",
      "FAQPage (where genuine)"
     ],
     "evidence_needed": [
      "Named compliance analyst",
      "Primary-source statute citations",
      "Worked example"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national (default)"
     ]
    },
    {
     "name": "Rent-increase and closure notice challenge risk",
     "core_intent": "commercial",
     "audience": "independent MHC owner-operators and community managers",
     "conversion_goal": "Book a pilot conversation",
     "supporting_pages": [
      "Notice challenge causes, ranked",
      "MHC Notice Compliance Gap Scan: what it is and how to run one",
      "Common notice-completeness gaps"
     ],
     "internal_links": [
      "/product",
      "/guides/notice-compliance/",
      "/resources/gap-scan"
     ],
     "schema": [
      "Article",
      "FAQPage",
      "BreadcrumbList"
     ],
     "evidence_needed": [
      "Worked evidence artifact",
      "Statute citation",
      "Analyst credential"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national"
     ]
    },
    {
     "name": "State-by-state MHC notice-period and cap library",
     "core_intent": "informational",
     "audience": "independent MHC owner-operators and community managers",
     "conversion_goal": "Assisted conversion via internal linking",
     "supporting_pages": [
      "Washington HB 1217 requirements",
      "Oregon ORS 90.645 requirements",
      "Illinois 765 ILCS 745 requirements",
      "Minnesota Minn. Stat. Sec.327C.095 requirements",
      "California Mobilehome Residency Law requirements"
     ],
     "internal_links": [
      "/guides/notice-compliance/",
      "/product"
     ],
     "schema": [
      "Article",
      "BreadcrumbList"
     ],
     "evidence_needed": [
      "Primary source link",
      "Visited-on date",
      "Analyst sign-off"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national"
     ]
    }
   ],
   "supporting_page_types": [
    "definition / glossary",
    "how-to workflow",
    "edge-case handling",
    "state-statute-change explainer",
    "worked example",
    "FAQ",
    "comparison (only when honest)",
    "case study (only with permission)",
    "evidence artifact / template"
   ]
  },
  "site_architecture": {
   "homepage_strategy": "Above-the-fold: one-sentence purpose + primary CTA (free MHC Notice Compliance Gap Scan). Below: pain cards linking to pillars, one evidence-asset teaser, one authority statement with named compliance analyst.",
   "main_nav": [
    "Product",
    "How it works",
    "Pricing",
    "Resources",
    "About",
    "Contact"
   ],
   "footer_nav": [
    "Editorial policy",
    "Contact",
    "Privacy",
    "Terms",
    "Sitemap"
   ],
   "hubs": [
    {
     "name": "Product / service",
     "url": "/product",
     "purpose": "High-intent commercial page"
    },
    {
     "name": "Guides pillar",
     "url": "/guides",
     "purpose": "Topical authority hub"
    },
    {
     "name": "State rulebook library",
     "url": "/states",
     "purpose": "Entity/state reference"
    },
    {
     "name": "Resources",
     "url": "/resources",
     "purpose": "Linkable assets (Gap Scan, checklists)"
    }
   ],
   "url_patterns": [
    "/product",
    "/guides/[topic]/",
    "/states/[state]/",
    "/resources/[asset]/",
    "/compare/[a]-vs-[b]/",
    "/glossary/[term]/"
   ],
   "avoid_url_patterns": [
    "/[city]/[service]/ (no local intent for this buyer)",
    "/blog/[year]/[month]/[slug]/ (dated slugs decay CTR)",
    "/tag/[tag]/ (thin archive pages)"
   ]
  },
  "global_national": {
   "national_clusters": [
    "manufactured housing community notice compliance definitive guide",
    "state-by-state MHC notice-period and cap library",
    "rent-increase and closure notice challenge risk"
   ],
   "linkable_assets": [
    "Free MHC Notice Compliance Gap Scan (human-reviewed report in 24-48h)",
    "State rulebook cheat sheet (downloadable)",
    "Engagement-letter template"
   ],
   "original_research_ideas": [
    "Annual independent-MHC-operator notice-readiness benchmark across a small operator sample",
    "Notice completeness index: share of intake notices missing state-required fields (anonymized)"
   ],
   "international_needed": false,
   "international_notes": "Not needed. US-first. Do not build hreflang variants."
  },
  "local_seo": {
   "justified": false,
   "reason": "Buyers search by state statute/workflow, not by city. Local pages would be doorway pages.",
   "gbp_categories_primary": [],
   "gbp_categories_secondary": [],
   "location_page_rules": [
    "Do not build location pages for this blueprint."
   ],
   "citations": [],
   "review_strategy": "Reviews are not a Local ranking factor here; use direct case studies (with permission) instead.",
   "local_schema": []
  },
  "programmatic": {
   "recommended": false,
   "reason": "Programmatic pages almost always become doorway pages. Prefer a small number of deeply-researched, state-specific pages.",
   "rules": [
    "Only for genuinely differentiated data (e.g., a true state-by-state notice-requirement table)",
    "Every page must include a unique data field + unique human-written analysis + human review before publish",
    "noindex until minimum quality threshold met"
   ],
   "per_page_requirements": [
    "≥1 unique data point not present on sibling pages",
    "≥1 unique paragraph of human-written analysis",
    "Verified last-reviewed date"
   ],
   "quality_gates": [
    "Analyst sign-off before publish",
    "No auto-generated state variants without a human pass"
   ]
  },
  "page_templates": [
   {
    "page_type": "Homepage",
    "purpose": "State the offer + route to the free MHC Notice Compliance Gap Scan.",
    "target_intent": "commercial",
    "url_pattern": "/",
    "h1_pattern": "[One-sentence purpose]",
    "title_pattern": "ParkNotice Clear — [One-sentence purpose]",
    "meta_description_pattern": "One sentence outcome + CTA verb. ≤ 155 chars.",
    "above_the_fold": [
     "H1",
     "Sub-headline (audience + outcome)",
     "Primary CTA (Gap Scan)",
     "1 trust chip (analyst / cite)"
    ],
    "outline": [
     "Problem framing",
     "deliverable cards",
     "how-it-works",
     "pricing",
     "proof",
     "FAQ",
     "compliance"
    ],
    "internal_links": [
     "/product",
     "/guides",
     "/pricing"
    ],
    "schema": [
     "WebPage",
     "FAQPage (where genuine)"
    ],
    "conversion_elements": [
     "Gap Scan form",
     "Primary CTA button"
    ],
    "trust_elements": [
     "Named compliance analyst",
     "5-Day Guarantee"
    ],
    "media": [
     "No stock photography; illustrative status chips only"
    ],
    "faq_opportunities": [
     "Do you act as our attorney?",
     "How is pricing structured?"
    ],
    "cta_strategy": "One primary CTA (Gap Scan); secondary CTA deep-links to how-it-works.",
    "anti_thin_rules": [
     "Minimum 600 words of unique copy",
     "No auto-generated filler sections"
    ],
    "quality_requirements": [
     "Compliance-analyst sign-off before publish",
     "Every stat sourced and dated"
    ]
   },
   {
    "page_type": "Pillar guide",
    "purpose": "Own the core topic for search + AI answer engines.",
    "target_intent": "informational",
    "url_pattern": "/guides/[topic]/",
    "h1_pattern": "[Topic], explained for MHC owner-operators",
    "title_pattern": "[Topic] | ParkNotice Clear",
    "meta_description_pattern": "Plain-language answer + named analyst credibility signal.",
    "above_the_fold": [
     "H1",
     "40-60 word extractable definition",
     "Last-reviewed date"
    ],
    "outline": [
     "Definition",
     "Workflow steps",
     "Edge cases",
     "FAQ"
    ],
    "internal_links": [
     "/product",
     "/resources/checklist"
    ],
    "schema": [
     "Article",
     "BreadcrumbList",
     "FAQPage (where genuine)"
    ],
    "conversion_elements": [
     "Inline link to Gap Scan"
    ],
    "trust_elements": [
     "Named analyst",
     "Primary-source citations"
    ],
    "media": [
     "Diagrams of the compliance-run workflow only"
    ],
    "faq_opportunities": [
     "What does a complete notice packet need?"
    ],
    "cta_strategy": "Soft CTA mid-page + stronger CTA at the end.",
    "anti_thin_rules": [
     "Minimum 900 words",
     "At least one worked example"
    ],
    "quality_requirements": [
     "Compliance-analyst sign-off before publish",
     "Visited-on date for every statute citation"
    ]
   }
  ],
  "on_page_rules": {
   "title_tag": "Pattern: [Primary keyword] — [Angle] | ParkNotice Clear. ≤ 60 chars. Front-load the keyword. No clickbait.",
   "meta_description": "≤ 155 chars. State the specific outcome. Include a verb + a statute citation when applicable. No stuffing.",
   "headings": "One H1. H2s follow the workflow steps or the searcher's questions. No decorative headings.",
   "intro": "First 100 words: define the topic in the searcher's language, name the specific state/workflow step, and preview the answer.",
   "internal_links": "3-6 contextual internal links per page, no mid-answer commercial links in FAQ content.",
   "external_citations": "Every statute-requirement or statistic claim links to its primary source with a visited-on date.",
   "images": "Illustrative diagrams only; no stock photography; descriptive alt text on every image.",
   "tables_lists": "Use tables for state-by-state comparisons; use lists for sequential workflow steps.",
   "freshness": "State-rulebook pages carry a last-reviewed date and a visible change log.",
   "author_attribution": "Every content page names its author with role and a linked author page.",
   "cta_placement": "One CTA above the fold, one at the natural end of the content; never mid-paragraph.",
   "mobile": "Single-column layout below 640px; tap targets ≥44px; no horizontal scroll.",
   "snippet_targeting": "40-60 word extractable definition directly under the H1 for featured-snippet eligibility.",
   "avoid": [
    "Keyword stuffing",
    "AI-generated filler paragraphs",
    "Duplicate content across state variants"
   ]
  },
  "entity_seo": {
   "main_entities": [
    "manufactured housing community notice compliance",
    "Notice & Disclosure Compliance Packet",
    "compliance analyst",
    "engagement letter",
    "deterministic checklist",
    "proof-of-service archive",
    "trigger event"
   ],
   "related_entities": [
    "MHC rulebook",
    "duty-holder of record",
    "confidence score",
    "state statute rule"
   ],
   "people": [
    "Named compliance analyst (role-title until owner facts close)",
    "Contracted counsel"
   ],
   "orgs": [
    "ParkNotice Clear",
    "the state MHC statute authorities referenced (WA Dept. of Commerce, CA HCD, and the WA/OR/CA/MN/IL legislatures)"
   ],
   "synonyms": [
    "manufactured housing community notice compliance",
    "mobile home park notice drafting",
    "MHC statute-verified notice",
    "audit-ready notice packet"
   ],
   "problems": [
    "Notice challenged for missing disclosure",
    "Notice sent past the statutory clock",
    "No time to verify MHC statute compliance"
   ],
   "solutions": [
    "Done-for-you Notice & Disclosure Compliance Packet",
    "Zoning-Petition Notice Packet (rush)",
    "Portfolio Retainer"
   ],
   "processes": [
    "Intake",
    "Rulebook matching",
    "Drafting",
    "Deterministic checklist",
    "Analyst release",
    "Counsel approval",
    "Delivery",
    "Proof-of-service recording"
   ],
   "tools": [
    "Zego",
    "Innago",
    "BC Solutions"
   ],
   "regulations": [
    "WA HB 1217",
    "RCW 59.20.080",
    "OR ORS 90.645",
    "IL 765 ILCS 745",
    "MN Minn. Stat. Sec.327C.095",
    "CA Mobilehome Residency Law"
   ],
   "alternatives": [
    "General MHC property-management software (single-purpose document storage)",
    "In-house drafting from a template",
    "Reactive outside counsel"
   ]
  },
  "schema_strategy": [
   {
    "type": "Organization",
    "where": "Site-wide in head",
    "required_fields": [
     "name",
     "url",
     "logo"
    ],
    "caution": "Keep in sync with visible About/contact; hold until entity facts close."
   },
   {
    "type": "WebPage",
    "where": "Every page",
    "required_fields": [
     "name",
     "description"
    ],
    "caution": "None."
   },
   {
    "type": "FAQPage",
    "where": "FAQ sections with genuine questions",
    "required_fields": [
     "mainEntity"
    ],
    "caution": "Only real, answered questions — never padded."
   }
  ],
  "internal_linking": {
   "pillar_to_cluster": "Pillar links to every direct cluster page in a curated section.",
   "cluster_to_pillar": "Every cluster page links back to its pillar in the intro.",
   "cluster_to_cluster": "Link between sibling clusters only where the reader's next question naturally leads there.",
   "faq_to_commercial": "Answer the question first, then link to the product page in a 'related' block — never inline mid-answer.",
   "anchor_text_rules": [
    "[PLACEHOLDER] owner to complete"
   ],
   "breadcrumbs": "Every guide/state page carries a breadcrumb trail: Home > Guides > [Pillar] > [Page].",
   "service_to_location": "Not applicable — no location pages at launch."
  },
  "technical_seo": {
   "crawlability": "Flat depth (≤3 clicks from homepage). No orphan pages.",
   "indexability": "Index all real content. noindex utility pages and thank-you pages.",
   "sitemaps": "XML sitemap generated at build time.",
   "robots": "robots.txt allows all; disallow /admin/. Reference sitemap.",
   "canonicals": "Self-referencing canonical on every page.",
   "core_web_vitals": "LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 on the landing page per DESIGN-STANDARD §7.",
   "mobile": "Mobile-first responsive layout; no horizontal scroll; tap targets ≥44px.",
   "js_seo": "Landing page is server-rendered static HTML; no client-side-only content requiring JS for indexing.",
   "rendering": "Static HTML, no hydration dependency for primary content.",
   "pagination": "Not applicable at launch (no paginated archive content).",
   "faceted_nav": "Not applicable — no faceted product catalog.",
   "duplicate_control": "One URL per state/topic; no auto-generated near-duplicate variants.",
   "redirects": "301 redirects only; no redirect chains; audited quarterly.",
   "analytics_setup": "GA4 + server-side event logging for domain.* and ui.* data-events.",
   "gsc_setup": "Google Search Console verified via DNS; sitemap submitted.",
   "rank_tracking": "Weekly rank tracking on the P0 keyword cluster once indexed.",
   "accessibility": "WCAG 2.2 AA. Semantic HTML. Landmarks. Focus states. Alt text."
  },
  "eeat": {
   "author_bios": "Every content page has a named author with role, credentials, and a linked author page.",
   "expert_reviewers": "Every YMYL page reviewed by a named compliance analyst with disclosed credentials.",
   "editorial_policy": "Public /editorial-policy page: sourcing rules, review cadence, correction policy.",
   "fact_checking": "Every statute-requirement reference has a link + visited-on date; corrections dated and disclosed.",
   "credentials": [
    "Named compliance analyst (role-title until owner facts close)",
    "Contracted counsel (licensed attorney) reviewer"
   ],
   "citations": "Every deterministic-checklist claim cites the state's own published statute text or a named agency guidance document.",
   "first_hand_proof": [
    "[PLACEHOLDER] owner to complete"
   ],
   "update_cadence": "State-rulebook pages reviewed quarterly at minimum; immediate update on any known statute amendment.",
   "monetization_disclosure": "Pricing and guarantee terms disclosed on the same page as any claim about outcomes — no hidden fees.",
   "ymyl_notes": "Notice-compliance and challenge-risk content is treated as YMYL-adjacent; language stays cautious and cites primary sources."
  },
  "ai_search": {
   "principles": [
    "Answer the exact question in the first paragraph",
    "Provide a 40-60 word extractable definition near the top",
    "Cite named primary sources (state statutes, MHI, state agencies)"
   ],
   "tactics": [
    "FAQPage schema for genuine FAQs",
    "Consistent entity naming across the site",
    "Concise summaries at the top of long guides"
   ],
   "do_not": [
    "Write pages targeting AI systems instead of humans",
    "Fabricate statistics or citations"
   ]
  },
  "conversion": {
   "primary_cta": "Get your free MHC Notice Compliance Gap Scan on your last rent-increase notice.",
   "secondary_cta": "See how a Notice & Disclosure Compliance Packet is built / download the state rulebook cheat sheet (email capture).",
   "lead_magnets": [
    "Free MHC Notice Compliance Gap Scan (human-reviewed report in 24-48h)",
    "State rulebook cheat sheet (PDF)"
   ],
   "trust_elements": [
    "Named compliance analyst + credentials",
    "Statute citations with visited-on dates",
    "5-Day Guarantee"
   ],
   "per_page_paths": [
    {
     "page_type": "Homepage",
     "path": "Hero CTA → Gap Scan form → confirmation"
    },
    {
     "page_type": "Pillar guide",
     "path": "Inline CTA → product page → Gap Scan form"
    }
   ],
   "tracking": "domain.diagnostic_requested fires on Gap Scan submit; ui.cta_primary fires on any primary CTA click."
  },
  "link_earning": {
   "digital_pr_ideas": [
    "Annual independent-MHC-operator notice-readiness benchmark report",
    "Notice completeness index with a shareable result page"
   ],
   "original_research": [
    "Small-operator survey (n≥30) once per year"
   ],
   "directories": [
    "State MHC owner-association member resource pages",
    "PM-software vendor partner marketplace listings"
   ],
   "avoid": [
    "Paid link schemes",
    "Guest-post link farms",
    "Reciprocal link exchanges with unrelated sites"
   ],
   "expert_contributions": [
    "Named compliance analyst contributes to MHC trade press",
    "HARO/Qwoted responses on manufactured-housing compliance topics"
   ],
   "partnerships": [
    "PM-software vendor partner marketplace listings",
    "State MHC owner-association resource-page inclusion"
   ]
  },
  "roadmap_90d": [
   {
    "phase": "Days 0-7: Foundation",
    "goal": "Establish trust + ship product page + Gap Scan.",
    "pages": [
     "Homepage",
     "Product page",
     "Pillar: manufactured housing community notice compliance definitive guide",
     "About + analyst bio (role-titles)",
     "Editorial policy",
     "Contact"
    ],
    "keywords_targeted": [
     "manufactured housing community notice compliance",
     "how much notice for a mobile home park rent increase in Washington"
    ],
    "why_first": "Without a trust surface and a real product page, everything else has nowhere to convert.",
    "business_value": "high",
    "conversion_goal": "MHC Notice Compliance Gap Scan signups",
    "difficulty": "low-medium",
    "internal_links": [
     "/product",
     "/guides"
    ],
    "required_assets": [
     "Named analyst bio",
     "Editorial policy"
    ]
   },
   {
    "phase": "Days 8-30: Washington rulebook library",
    "goal": "Ship the WA HB 1217 / RCW 59.20.080 deterministic-checklist pages.",
    "pages": [
     "WA HB 1217 rent-increase requirements",
     "WA RCW 59.20.080 closure requirements",
     "WA zoning-petition 5-day notice explainer"
    ],
    "keywords_targeted": [
     "WA HB 1217 rent increase notice requirements"
    ],
    "why_first": "Anchors the topical-authority moat for the launch state.",
    "business_value": "high",
    "conversion_goal": "Gap Scan signups",
    "difficulty": "low-medium",
    "internal_links": [
     "/product",
     "/guides"
    ],
    "required_assets": [
     "Named analyst bio",
     "Editorial policy"
    ]
   },
   {
    "phase": "Days 31-90: Conversion assets + OR/CA/MN/IL research",
    "goal": "Ship the Gap Scan landing page, FAQ hub, and begin OR/CA/MN/IL rulebook pages.",
    "pages": [
     "MHC Notice Compliance Gap Scan",
     "FAQ hub",
     "OR/CA/MN/IL rulebook stubs"
    ],
    "keywords_targeted": [
     "free MHC notice compliance audit"
    ],
    "why_first": "Converts organic traffic into pilot leads while the state footprint expands.",
    "business_value": "high",
    "conversion_goal": "Gap Scan signups",
    "difficulty": "low-medium",
    "internal_links": [
     "/product",
     "/guides"
    ],
    "required_assets": [
     "Named analyst bio",
     "Editorial policy"
    ]
   }
  ],
  "roadmap_12m": [
   {
    "phase": "Months 4-6: Linkable assets",
    "goal": "Ship the annual benchmark and the notice completeness index.",
    "pages": [
     "Annual MHC notice-readiness benchmark",
     "Notice completeness index"
    ],
    "keywords_targeted": [
     "MHC notice compliance benchmark"
    ],
    "why_first": "Linkable assets drive referring domains and topical authority.",
    "business_value": "medium-high",
    "conversion_goal": "Assisted conversion via internal linking",
    "difficulty": "medium",
    "internal_links": [
     "/guides",
     "/product"
    ],
    "required_assets": [
     "Benchmark survey data",
     "Anonymized notice sample"
    ]
   },
   {
    "phase": "Months 7-12: Expansion",
    "goal": "Add Portfolio Retainer and multi-community content, plus park-closure guides.",
    "pages": [
     "Portfolio Retainer explainer",
     "Park-closure compliance guide"
    ],
    "keywords_targeted": [
     "multi-community MHC notice compliance"
    ],
    "why_first": "Follows the product roadmap's multi-state and Portfolio Retainer expansion.",
    "business_value": "medium-high",
    "conversion_goal": "Assisted conversion via internal linking",
    "difficulty": "medium",
    "internal_links": [
     "/guides",
     "/product"
    ],
    "required_assets": [
     "Benchmark survey data",
     "Anonymized notice sample"
    ]
   }
  ],
  "priority_pages": [
   {
    "rank": 1,
    "page_title": "How much notice for a mobile home park rent increase in Washington",
    "slug": "/guides/wa-rent-increase-notice-requirements/",
    "page_type": "Pillar / evidence guide",
    "primary_keyword": "mobile home park rent increase notice Washington",
    "secondary_keywords": [
     "WA HB 1217 requirements"
    ],
    "intent": "informational",
    "scope": "national",
    "funnel": "MOFU",
    "difficulty": "low",
    "business_value": "high",
    "conversion_potential": "high",
    "cta": "Get my free MHC Notice Compliance Gap Scan",
    "internal_links": [
     "/product",
     "/guides"
    ],
    "production_priority": "P0",
    "required_proof": [
     "Named compliance analyst",
     "Primary-source statute citation"
    ],
    "schema": [
     "Article",
     "FAQPage"
    ],
    "why_opportunity": "High buyer intent with a weak or generic-residential-only SERP"
   },
   {
    "rank": 2,
    "page_title": "Done-for-you MHC notice compliance vs general property-management software",
    "slug": "/compare/parknotice-clear-vs-property-management-software/",
    "page_type": "Comparison page",
    "primary_keyword": "MHC notice compliance service vs property management software",
    "secondary_keywords": [
     "Zego Innago BC Solutions compliance comparison"
    ],
    "intent": "commercial",
    "scope": "national",
    "funnel": "BOFU",
    "difficulty": "medium",
    "business_value": "high",
    "conversion_potential": "high",
    "cta": "Get my free MHC Notice Compliance Gap Scan",
    "internal_links": [
     "/product",
     "/guides"
    ],
    "production_priority": "P0",
    "required_proof": [
     "Named compliance analyst",
     "Primary-source statute citation"
    ],
    "schema": [
     "Article",
     "FAQPage"
    ],
    "why_opportunity": "High buyer intent with a weak or vendor-only SERP"
   }
  ],
  "competitor_gaps": {
   "typical_competitor_types": [
    "general MHC property-management software",
    "generic residential landlord-tenant explainer sites",
    "reactive outside-counsel firms"
   ],
   "common_weaknesses": [
    "No operator-side operational content",
    "No named compliance analyst or credentials",
    "No worked examples of a deterministic checklist",
    "Thin FAQ padded with generic residential-law questions"
   ],
   "how_to_beat_them": [
    "Fresh statute citations with visited-on dates",
    "Named compliance analyst + credentials visible",
    "Real, redacted worked deterministic-checklist examples"
   ]
  },
  "metrics": {
   "weekly": [
    "GSC impressions/clicks by pillar",
    "New indexed pages"
   ],
   "monthly": [
    "Organic sessions by hub",
    "Assisted conversions (Gap Scan signups)"
   ],
   "quarterly": [
    "Pillar coverage audit",
    "State-rulebook freshness audit"
   ],
   "annual": [
    "Full topical authority audit",
    "Benchmark report refresh"
   ]
  },
  "risks": [
   {
    "risk": "Thin content",
    "applies": true,
    "mitigation": "Minimum-word + compliance-analyst sign-off gate before publish."
   },
   {
    "risk": "Duplicate content across state variants",
    "applies": true,
    "mitigation": "One URL per state/topic; no auto-generated variants; canonical to pillar."
   },
   {
    "risk": "Doorway location pages",
    "applies": true,
    "mitigation": "Local pages are refused for this vertical — buyers search by state statute/workflow, not city."
   }
  ],
  "first_20_pages": [
   "Homepage",
   "Product / service page",
   "About + analyst bio (role-titles)",
   "Editorial policy",
   "Contact",
   "Privacy",
   "Pillar: manufactured housing community notice compliance definitive guide",
   "How much notice for a mobile home park rent increase in Washington",
   "Engagement-letter mechanics explained",
   "State-by-state MHC notice requirements comparison",
   "FAQ: MHC notice compliance",
   "ParkNotice Clear vs general property-management software comparison",
   "Washington HB 1217 requirements",
   "RCW 59.20.080 closure requirements",
   "Oregon ORS 90.645 requirements",
   "Pricing page",
   "Free MHC Notice Compliance Gap Scan landing page",
   "How a Notice & Disclosure Compliance Packet is built",
   "Zoning-Petition Notice Packet explainer",
   "Portfolio Retainer explainer"
  ],
  "first_10_tech_fixes": [
   "XML sitemap generated at build",
   "robots.txt reviewed + sitemap referenced",
   "Self-referencing canonicals",
   "GSC + GA4 verified with server-side events",
   "Core Web Vitals baseline (LCP, INP, CLS)",
   "Structured breadcrumbs sitewide",
   "Author + editorial-policy pages published",
   "404 + 410 patterns defined",
   "Redirect audit (no chains)",
   "Semantic HTML + accessibility landmarks"
  ],
  "first_10_authority_actions": [
   "Publish named compliance-analyst bio(s)",
   "Public editorial policy + correction policy",
   "Cite primary state-statute sources with visited-on dates",
   "Launch the state-rulebook cheat-sheet lead magnet",
   "Pitch MHC-trade-press responses per week",
   "Publish 1 original data point / benchmark",
   "Reach out to state MHC owner-association resource pages",
   "Guest post on 1 industry association blog",
   "Podcast interview outreach (MHC owner-operator shows)",
   "Set up quarterly state-statute-change post cadence"
  ],
  "final_recommendation": "Build a statute-fluent authority site around 'manufactured housing community notice compliance'. Ship the first 20 pages in 90 days (product + pillar + Washington rulebook library + Gap Scan), then compound with quarterly statute-change posts and one annual benchmark as OR/CA/MN/IL rulebooks come online. Refuse doorway pages, refuse mass AI content, treat named-analyst (role-titled until owner facts close) + primary-source statute citations as non-negotiable, and never publish a claim that a notice will not be challenged.",
  "disclaimers": [
   "All volume/difficulty labels are RELATIVE ESTIMATES (low/medium/high), not exact numbers. Validate with Semrush, Ahrefs, or Google Search Console before committing spend.",
   "This brief is deterministic per blueprint — it will not shift between renders. Any changes should be made in code, not in prompts.",
   "YMYL-adjacent topic: language must stay cautious; nothing here is legal advice."
  ]
 },
 "microsite": {
  "category": "Compliance / regulatory documentation",
  "shortTitle": "ParkNotice Clear",
  "audience": "independent MHC owner-operators and community managers at manufactured-housing communities (1-15 communities)",
  "problem": "Every rent-increase, park-rule-change, zoning-petition, or park-closure trigger event has to produce a notice that matches a state's MHC-specific landlord-tenant act — materially different from, and more protective and more litigated than, ordinary residential landlord-tenant law. General MHC property-management software (Zego, Innago, BC Solutions) stores the document but never checks the statute. The work falls to whoever last edited the template, at operators who have no in-house counsel and engage outside counsel only after a notice is already contested.",
  "offer": "On ParkNotice Clear, MHC owner-operators stop guessing whether a notice meets their state's statute and start shipping a Notice & Disclosure Compliance Packet. Send the rent roll, lease terms, and trigger-event details; AI drafts the notice against the counsel-reviewed rulebook, a deterministic checklist runs the notice period, cap/limit, mandated content, print format, and delivery method, and a compliance analyst — with contracted counsel on every closure or contested case — releases the packet within 5 business days.",
  "faq": [
   {
    "q": "Is ParkNotice Clear for owner-operators or community managers?",
    "a": "Both, because at most independent operators they're the same person or a two-person team: the owner-operator who bears the liability and the community manager who actually drafts notices today from a template. If your notice paperwork currently lives in a shared folder with no statute check, the workflow will match your reality immediately."
   },
   {
    "q": "How is a Notice & Disclosure Compliance Packet kept audit-ready?",
    "a": "Every drafted field carries a verbatim source quote from your rent roll, lease terms, or the matched rulebook entry — missing fields ship as explicit gaps, never invented data. A trained compliance analyst releases every packet; contracted counsel approves any closure, first-of-kind, or contested case before it ships."
   },
   {
    "q": "What arrives at the end of a compliance run?",
    "a": "A released Notice & Disclosure Compliance Packet — the notice itself, the deterministic-checklist scorecard, a delivery-method checklist, and a proof-of-service template — plus a tracked record in your proof-of-service archive."
   },
   {
    "q": "How does ParkNotice Clear pricing work?",
    "a": "Outcome-based, never hourly, never a percentage of the increase amount. Rent-Increase Notice Compliance Packets are $349-$799 per community per cycle (founding-cohort $249-$549). Park Rule Change / Lease Amendment packets are $299-$599 flat. Zoning-Petition packets are $199-$399 flat. Park Closure packets are $3,500-$8,500 flat. The Portfolio Retainer for 3+ communities runs $899-$2,900/month."
   },
   {
    "q": "How do I get started on ParkNotice Clear?",
    "a": "Two ways: send your most recent rent-increase notice and get a free MHC Notice Compliance Gap Scan — we'll score it against your state's statute within 24-48 hours — or open a compliance run directly and get your first Notice & Disclosure Compliance Packet in 5 business days."
   },
   {
    "q": "Do you sign the notice as our legal representative?",
    "a": "No — and that boundary is the design. You remain the community owner and duty-holder of record. Our compliance analyst releases the packet; contracted counsel attests to statutory accuracy on closures and contested cases. You alone sign and send the notice."
   },
   {
    "q": "How long are compliance-run records retained?",
    "a": "Records are retained per your preference (default 3 years), hash-stamped on intake and mirrored to your own storage so the record is yours either way. On termination you get a full export handoff."
   },
   {
    "q": "What if a trigger event has a short statutory window, like Washington's 5-day zoning-petition notice?",
    "a": "The intake channel runs 24/7 and rush-priced Zoning-Petition packets are built for exactly this. If a packet can't be released inside the statutory clock, we tell you immediately instead of letting the deadline pass silently."
   },
   {
    "q": "What if we started the notice ourselves?",
    "a": "Send what exists. We pick up mid-workflow, keep your draft intact, and only add the pieces the deterministic checklist is missing — no rework, no busywork."
   }
  ],
  "process": [
   {
    "title": "Intake: send the trigger event",
    "body": "Forward the rent roll, lease terms, and trigger-event details through your secure intake channel. It's logged, hash-stamped, and matched to your on-file engagement letter."
   },
   {
    "title": "Match the rulebook",
    "body": "The trigger event is matched to the correct beachhead-state rulebook entry — the counsel-reviewed statute rule for that state and event type, version and citation attached."
   },
   {
    "title": "Draft with source quotes",
    "body": "AI drafts the notice/disclosure language and a completeness scorecard from the matched rulebook and your extracted facts — each field with a verbatim source quote and a confidence score. Anything below the confidence bar routes to analyst confirmation."
   },
   {
    "title": "Run the deterministic checklist",
    "body": "The draft is checked against notice period, cap/limit, mandated content, print format, and delivery method in deterministic code — never left to a language model to judge as 'probably fine.'"
   },
   {
    "title": "Analyst release, counsel on closures",
    "body": "A trained compliance analyst releases every standard-tier packet against the checklist and source data. Closures, first-of-kind, ambiguous, or contested cases route to the exception queue for contracted-counsel approval first — no exceptions."
   },
   {
    "title": "Deliver and record proof of service",
    "body": "The packet ships within 5 business days under your own signature. Delivery method and proof of service are logged to your proof-of-service archive, reconciled and closed in your engagement record."
   }
  ],
  "northStarCta": {
   "label": "Get my free MHC Notice Compliance Gap Scan",
   "href": "/contact",
   "secondary_label": "See how a packet is released",
   "secondary_href": "/how-it-works"
  },
  "ubiquitousLanguage": {
   "audience": "independent MHC owner-operators and community managers at manufactured-housing communities (1-15 communities)",
   "domain": "manufactured-housing-community notice and disclosure compliance drafting",
   "deliverable": "Notice & Disclosure Compliance Packet + compliance-analyst release (counsel approval on closures/contested cases)",
   "reviewer": "trained compliance analyst",
   "record": "proof-of-service archive + deterministic-checklist audit trail",
   "unit_of_work": "compliance run",
   "cta_primary": "Get my free MHC Notice Compliance Gap Scan",
   "cta_secondary": "See how a packet is released",
   "regulator": "state MHC landlord-tenant statute authority",
   "regulator_full": "state legislature / housing agency administering the MHC-specific landlord-tenant act (e.g., WA Dept. of Commerce for HB 1217)",
   "statute": "MHC-specific landlord-tenant statutes (WA HB 1217, RCW 59.20.080; OR ORS 90.645; IL 765 ILCS 745; MN Minn. Stat. Sec.327C.095; CA Mobilehome Residency Law)",
   "trigger_moment": "a rent increase, park-rule change, zoning petition, or park closure",
   "event_intake_started": "mhc_notice_disclosure_compliance_desk_intake_started",
   "event_conversation_requested": "mhc_notice_disclosure_compliance_desk_conversation_requested"
  },
  "trust": {
   "standards": [
    "Every field in a Notice & Disclosure Compliance Packet traces to a verbatim source quote from your rent roll, lease terms, or the matched rulebook entry — missing fields ship as explicit gaps, never invented data",
    "A trained compliance analyst releases every packet; contracted counsel approves any closure, first-of-kind, or contested case before it ships",
    "Records are hash-stamped on intake, mirrored to your own storage, with a full export handoff on termination"
   ],
   "response_time": "We reply within one business day — a trigger event with a short statutory window doesn't wait for a sales rep.",
   "data_handling": "Your community and tenant documents stay in per-community isolated folders and are never used to train models. PII is minimized to what the notice requires. ParkNotice Clear provides documentation and compliance-preparation support only; it is not a law firm, does not give legal advice, does not create an attorney-client relationship, and never files or represents you in a dispute. You remain the sender and duty-holder of record."
  },
  "hook": "The next rent-increase notice you almost sent from a three-year-old template lands on a statute-verified packet instead — ParkNotice Clear holds the proof-of-service archive at rest. MHC owner-operators stop guessing whether a notice is compliant and start shipping a packet — the compliance desk is where the deterministic checklist already runs.",
  "sub_headline": "ParkNotice Clear stores every notice decision — source quote, deterministic check, analyst signature — in a tracked record you can check without re-reading a statute. Every compliance run maps each field to a source and a rulebook version at intake, a deterministic checklist runs the math, a human releases the packet, and the proof-of-service archive is retained for as long as your community needs it.",
  "dream_outcome": "You answer the week: every trigger-event notice verified and released within 5 business days, every closure or contested case escalated to counsel before it ships, every notice provably compliant if a tenant or their attorney ever asks. The proof-of-service archive is the answer — analyst-released, source-quoted, and reproducible on the day anyone asks.",
  "specific_pains": [
   "You're planning a 4.8% rent increase at Cascade Meadows MHC and the only notice on file is a template from three years ago — nobody has checked it against WA HB 1217's 5% cap and 3-month notice requirement.",
   "Ask for proof that a rent-increase notice sent eight months ago met the state's larger-print disclosure requirement and someone opens a shared drive folder search — that's the record a tenant's attorney would find first.",
   "A general-purpose chatbot can produce a plausible-looking notice draft; only a counsel-reviewed, state-specific rulebook with a deterministic checklist and a human release gate produces one that doesn't get challenged.",
   "A zoning-petition notice has a 5-day statutory window in Washington — miss it because nobody was tracking the clock, and the notice is defective regardless of what it says.",
   "General MHC property-management software reads the trigger event as a document to store: notice period, cap/limit, mandated content, print format, delivery method. Miss any piece and the notice sits exposed to a challenge instead of being defensible."
  ],
  "cost_of_inaction": "A notice you can't verify as compliant today is a challenge you can't defend tomorrow — and the gap between ordinary residential landlord-tenant law and the more protective MHC-specific statute is exactly where independent operators get caught. No vendor can honestly guarantee a notice will never be challenged — but a notice that was never statute-checked at all has a cost of its own, and enforcement activity against MHC owners is rising (WGLT, Source New Mexico, Indiana AG, and Minnesota Lawyer reporting on MHC notice/rule disputes, 2025-2026).",
  "mechanism": {
   "name": "The ParkNotice Clear compliance desk",
   "steps": [
    {
     "title": "Intake: send the trigger event",
     "body": "Forward the rent roll, lease terms, and trigger-event details through your secure intake channel. Logged, hash-stamped, matched to your engagement letter."
    },
    {
     "title": "Match & draft with source quotes",
     "body": "AI matches the beachhead-state rulebook entry and drafts the notice with a verbatim source quote and confidence score per field. Anything below the confidence bar routes to analyst confirmation."
    },
    {
     "title": "Run the deterministic checklist",
     "body": "Checked against notice period, cap/limit, mandated content, print format, and delivery method in deterministic code — never a language model's guess."
    },
    {
     "title": "Analyst release, counsel on closures",
     "body": "A trained compliance analyst releases every standard packet. Closures, first-of-kind, and contested cases require contracted-counsel approval first."
    },
    {
     "title": "Deliver, track, record proof",
     "body": "Delivered within 5 business days under your own signature; proof of service recorded to your archive; engagement reconciled and closed."
    }
   ]
  },
  "offer_stack": [
   {
    "item": "Notice & Disclosure Compliance Packet per trigger event",
    "note": "rent-roll/lease extraction, rulebook-matched deterministic check, compliance-analyst release, delivery within 5 business days, proof-of-service archive entry"
   },
   {
    "item": "Park Rule Change / Lease Amendment Disclosure Packet",
    "note": "rulebook-checked disclosure language; contracted-counsel sign-off on any first-of-kind rule change; filed with the required disclosure format"
   },
   {
    "item": "Zoning-Petition Notice Packet",
    "note": "rush-priced for short statutory windows like WA's 5-day notice; same deterministic checklist and analyst release"
   },
   {
    "item": "Park Closure / Change-of-Use Compliance Packet",
    "note": "mandatory counsel review baked in; 12-month notice + larger-print disclosure language checked against the closure statute"
   },
   {
    "item": "Portfolio Retainer",
    "note": "standard-tier cycles + priority turnaround across 3+ communities, billed monthly"
   },
   {
    "item": "Proof-of-service archive",
    "note": "hash-stamped originals, per-community folder isolation, export handoff on termination"
   }
  ],
  "guarantee": "The 5-Day Guarantee: get a state-law-verified rent-increase notice in 5 business days, guaranteed to meet your state's notice period, cap, and disclosure requirements — or your next packet is free. Explicitly not guaranteed: that a notice will never be challenged or disputed, any legal outcome, or the accuracy of community-supplied information.",
  "urgency": "Release capacity is gated by the human chokepoint — every packet is released by a compliance analyst, and every closure or contested case by contracted counsel — so we cap the founding pilot cohort at 5 independent WA operators to protect that gate rather than filling a pipeline.",
  "objections": [
   {
    "q": "“Doesn't our property-management software already handle this?”",
    "a": "MHC property-management systems like Zego, Innago, and BC Solutions store documents and automate rent collection — none of them check a notice against your state's MHC-specific statute. That's still a template pulled from a folder, times every trigger event."
   },
   {
    "q": "“Isn't this just what our outside counsel is for?”",
    "a": "Outside counsel is usually engaged reactively, after a notice is already contested — and a full attorney engagement costs far more than a $349-$799 packet. ParkNotice Clear handles the routine, verified cases and escalates to contracted counsel structurally on every closure or contested case."
   },
   {
    "q": "“Are we going to be defending an AI-drafted notice?”",
    "a": "No field in a released packet comes from a language model without a source quote tied to the rulebook. A named compliance analyst releases every packet, and contracted counsel approves closures and contested cases before anything ships."
   },
   {
    "q": "“Where does our tenant data live?”",
    "a": "In per-community isolated folders with least-privilege access, hash-stamped originals, and no use of your documents for model training. You get a full export handoff if you leave."
   },
   {
    "q": "“Are you our attorney?”",
    "a": "No. We prepare documentation from a counsel-approved rulebook; you always sign and send under your own name. We never give legal advice, never file on your behalf, and never represent you in a dispute. That boundary is disclosed on every engagement letter and every page of this site."
   },
   {
    "q": "“How is a ParkNotice Clear engagement priced?”",
    "a": "Per packet, published tiers by lot count, never hourly, never a percentage of the increase amount. Anchor it against a single contested-notice legal bill and the tenant trust a verified notice protects."
   }
  ],
  "who_this_is_not_for": [
   "Large professional/institutional operators with in-house counsel already verifying every notice — our commercial relationship is with independent operators who don't have that function.",
   "Buyers looking for a guarantee that a notice will never be challenged — we decline that framing and say so plainly; no vendor can honestly sell it.",
   "Operators outside our verified beachhead states (WA, OR, CA, MN, IL) — we don't draft against a statute we haven't counsel-reviewed."
  ],
  "proof_pillars": [
   {
    "title": "Source-quoted drafting, every field",
    "body": "Every drafted field carries a verbatim source quote from your rent roll, lease terms, or the matched rulebook entry — missing fields ship as explicit gaps, never invented data."
   },
   {
    "title": "Analyst-released, counsel on closures",
    "body": "No packet auto-releases. A trained compliance analyst signs every standard packet; contracted counsel approves every closure, first-of-kind, or contested case before it ships."
   },
   {
    "title": "Tracked to delivery, recorded to your archive",
    "body": "Every compliance run carries a proof-of-service record from delivery through engagement closure — checking status is a read operation for you, not a project."
   }
  ],
  "stakes_line": "The proof-of-service archive is the truth. Everything else — the shared drive, the three-year-old template, the folder nobody reopens — is the story you tell yourself until a tenant's attorney asks.",
  "deliverable": "Notice & Disclosure Compliance Packet + compliance-analyst release (counsel approval on closures/contested cases)",
  "unit_of_work": "compliance run",
  "lexicon": {
   "regulator": "state MHC landlord-tenant statute authority",
   "regulator_full": "state legislature / housing agency administering the MHC-specific landlord-tenant act (e.g., WA Dept. of Commerce for HB 1217)",
   "statute": "MHC-specific landlord-tenant statutes (WA HB 1217, RCW 59.20.080; OR ORS 90.645; IL 765 ILCS 745; MN Minn. Stat. Sec.327C.095; CA Mobilehome Residency Law)",
   "statute_frame": "the intake-to-delivery workflow where an unverified notice is a self-inflicted challenge risk.",
   "persona": "Owner-Operator",
   "persona_moment": "You're an Owner-Operator. It's the morning after you decided on a 4.8% rent increase for Cascade Meadows MHC. Someone needs to know whether the notice is statute-compliant today — with every figure tied to a rulebook citation you can point to.",
   "trigger_moment": "a rent increase, park-rule change, zoning petition, or park closure",
   "enforcement_stakes": "tenant trust and challenge/litigation risk, not a direct regulatory penalty against ParkNotice Clear — our own exposure is limited to the unauthorized-practice-of-law (UPL) boundary we stay inside of",
   "retention": "per community preference, default 3 years",
   "cta_verb": "Get my free MHC Notice Compliance Gap Scan",
   "intake_checklist": [
    "The trigger event's rent roll and lease terms, exactly as generated by your property-management software",
    "The community's signed engagement letter naming the duty-holder of record (collected once at signup)",
    "Any prior-notice history the state's statute requires (e.g., WA's 12-month prior notice for park closures)",
    "The internal owner name and inbox to copy on status updates and weekly digests",
    "Your community's lot count (drives the per-cycle pricing tier)",
    "Any existing notice already drafted in-house, so we can pick up mid-workflow",
    "Your preferred secure intake method (encrypted email or upload form)"
   ],
   "trust_standards_specific": [
    "Every field in a Notice & Disclosure Compliance Packet traces to a verbatim source quote from the rent roll, lease terms, or matched rulebook entry you sent — gaps ship explicit, never invented",
    "A trained compliance analyst releases every packet; contracted counsel approves every closure, first-of-kind, or contested case before it ships",
    "Records — intake originals, drafts, released packets — are hash-stamped and retained per your preference, keyed to the triggering event",
    "The state's own MHC statute is mapped to your evidence field-by-field via the rulebook; hard fails (missing notice period, wrong cap, unknown state) block a release",
    "AI drafting is bounded to extraction and drafting from structured input, disclosed, and gated on compliance-analyst release before anything leaves the workspace"
   ],
   "regulator_faqs": [
    {
     "q": "Do you sign the notice as our legal representative?",
     "a": "No — you remain the community owner and duty-holder of record. Our compliance analyst releases the packet; contracted counsel attests to statutory accuracy on closures and contested cases. You alone determine and sign what gets sent."
    },
    {
     "q": "How long are records retained?",
     "a": "Per your preference, default 3 years — hash-stamped and mirrored to your own storage. If you need a longer window, the archive honors it."
    },
    {
     "q": "What if a trigger event has a short statutory window?",
     "a": "Intake runs 24/7. Rush-priced Zoning-Petition packets exist specifically for short windows like WA's 5-day notice, and status is computed from the trigger date — not the discovery date — so nothing quietly ages over a weekend."
    },
    {
     "q": "What if we started the notice in-house?",
     "a": "Send what exists. We pick up mid-workflow, keep your work product intact, and only add the pieces the deterministic checklist is missing — no rework, no busywork."
    }
   ]
  },
  "proof_angle": {
   "id": "notice-compliance-trust",
   "headline": "The next tenant challenge lands on a statute-verified packet, not a guess — ParkNotice Clear holds the proof-of-service archive at rest.",
   "lever": "ParkNotice Clear stores every notice decision — source quote, deterministic check, analyst signature — in a record you can check without re-reading a statute.",
   "outcome_verb": "verify",
   "outcome_frame": "verify a notice is compliant in minutes instead of an afternoon with outside counsel",
   "proof_promise": "The proof-of-service archive is the challenge-risk answer — analyst-released, source-quoted, and reproducible any day someone asks."
  },
  "indexable": true
 },
 "evidence": [
  {
   "id": "mhc-notice-disclosure-compliance-desk-e1",
   "business_slug": "mhc-notice-disclosure-compliance-desk",
   "area": "Identity",
   "claim_or_finding": "Legal entity, registered address, and jurisdiction of formation are not yet declared.",
   "status": "owner-action",
   "evidence": "No owner-supplied facts on file.",
   "verification_command": "Owner submits entity + jurisdiction pack.",
   "fix_owner": "owner",
   "remediation": "Provide entity name, registration number, and jurisdiction of formation. [PLACEHOLDER: legal entity not yet formed]",
   "severity": "blocker"
  },
  {
   "id": "mhc-notice-disclosure-compliance-desk-e2",
   "business_slug": "mhc-notice-disclosure-compliance-desk",
   "area": "Trust boundary",
   "claim_or_finding": "Public page is a validation microsite for a documentation-and-compliance-preparation service; not a law firm, never legal advice, never files or represents the client in a dispute.",
   "status": "verified",
   "evidence": "Microsite carries an explicit trust-boundary and documentation-preparation-only disclaimer block.",
   "verification_command": "Inspect /microsites/mhc-notice-disclosure-compliance-desk for trust boundary.",
   "fix_owner": "engineering",
   "remediation": "None — enforced by template.",
   "severity": "low"
  },
  {
   "id": "mhc-notice-disclosure-compliance-desk-e3",
   "business_slug": "mhc-notice-disclosure-compliance-desk",
   "area": "SEO integrity",
   "claim_or_finding": "No fake review, rating, LocalBusiness, or Organization identity schema is emitted; no 'notice will not be challenged' guarantee claims anywhere in marketing copy.",
   "status": "verified",
   "evidence": "Only WebPage + FAQPage schema is generated; marketing compliance gate applied.",
   "verification_command": "View SEO Factory row for mhc-notice-disclosure-compliance-desk",
   "fix_owner": "engineering",
   "remediation": "None — enforced by the SEO factory.",
   "severity": "low"
  },
  {
   "id": "mhc-notice-disclosure-compliance-desk-e4",
   "business_slug": "mhc-notice-disclosure-compliance-desk",
   "area": "Regulated documentation / UPL boundary",
   "claim_or_finding": "Elevated trust burden — notice-compliance claims gated on owner facts: named compliance-analyst identity, contracted-counsel engagement, entity identity, and counsel review of the engagement-letter form and state-by-state unauthorized-practice-of-law (UPL) boundary scope.",
   "status": "release-blocker",
   "evidence": "Trust burden = Medium, actively managed — UPL boundary reviewed for the Washington beachhead only; not yet confirmed for OR/CA/MN/IL.",
   "verification_command": "Complete owner-action pack for named analyst + counsel.",
   "fix_owner": "owner",
   "remediation": "Provide compliance-analyst identity, contracted-counsel contact, professional review, and disclosure facts. [PLACEHOLDER: populate once compliance analyst and contracted counsel are engaged]",
   "severity": "high"
  },
  {
   "id": "mhc-notice-disclosure-compliance-desk-e5",
   "business_slug": "mhc-notice-disclosure-compliance-desk",
   "area": "Manifest coverage",
   "claim_or_finding": "Manifest-backed blueprint present in source repository (2026-07-13 build, incl. fresh-verified WA HB 1217 signing date and Manufactured Housing Institute 43,000+ community / 4.3M homesite market figures).",
   "status": "assumed",
   "evidence": "manifest.json entry",
   "verification_command": "Cross-check manifest entry for mhc-notice-disclosure-compliance-desk in the builds repository.",
   "fix_owner": "engineering",
   "remediation": "Attach the manifest run to the evidence register.",
   "severity": "medium"
  }
 ],
 "seo_pages": {
  "id": "seo-mhc-notice-disclosure-compliance-desk",
  "business_slug": "mhc-notice-disclosure-compliance-desk",
  "route": "/microsites/mhc-notice-disclosure-compliance-desk",
  "title": "MHC Notice & Disclosure Compliance… · ParkNotice Clear",
  "description": "ParkNotice Clear for independent MHC owner-operators. State-statute-verified rent-increase, rule-change, zoning-petition, and closure notices delivered in 5 business days, with a proof-of-service archive.",
  "canonical": "/microsites/mhc-notice-disclosure-compliance-desk",
  "og_title": "ParkNotice Clear — The MHC Notice & Disclosure Compliance Desk",
  "og_description": "ParkNotice Clear for independent MHC owner-operators. State-statute-verified rent-increase, rule-change, zoning-petition, and closure notices delivered in 5 business days, with a proof-of-service archive.",
  "schema_type": "FAQPage",
  "schema_status": "pending-owner-facts",
  "sitemap_include": false,
  "noindex": true
 },
 "vertical_style": {
  "accent": "brass-seal-amber",
  "signature": "Notice-status chips with brass/amber accent, styled as an official seal",
  "layout": "Statute filing desk index",
  "anti": "Alarm-red penalty banners and generic scales-of-justice clip-art"
 },
 "canva": {
  "slug": "mhc-notice-disclosure-compliance-desk",
  "territory": "Statute Desk",
  "family": {
   "id": "compliance-regulatory-documentation",
   "name": "Compliance / Regulatory Documentation",
   "motion": "calm"
  },
  "tokens": {
   "brand": "208 53% 23%",
   "brand-fg": "42 50% 96%",
   "surface": "42 50% 96%",
   "ink": "204 9% 11%",
   "muted": "213 10% 40%",
   "accent": "36 52% 47%"
  },
  "type": {
   "display": "Charter",
   "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.01em",
   "tracking_body": "-0.005em",
   "weight_display": 700,
   "weight_body": 450
  },
  "spacing": {
   "card_padding": "1.5rem",
   "card_radius": "0.5rem",
   "card_shadow": "0 0 0 1px hsl(var(--ink) / 0.08)",
   "section_gap": "clamp(3rem, 7vw, 5.5rem)",
   "hero_gap": "clamp(1.25rem, 2vw, 2rem)"
  },
  "layout": {
   "hero": "split-primary",
   "card": "elevated-soft",
   "cta": "solid-brand",
   "archetype": "magazine",
   "card_silhouette": "rounded-outline",
   "button_geometry": "rounded"
  },
  "background": {
   "hero_gradient": "radial-gradient(900px 500px at 85% -10%, hsl(36 52% 47% / 0.13), transparent 60%), radial-gradient(700px 420px at 5% 0%, hsl(208 53% 23% / 0.10), transparent 55%)",
   "cta_gradient": "linear-gradient(135deg, hsl(208 53% 23%), hsl(36 52% 47%))",
   "section_wash": "linear-gradient(180deg, hsl(42 50% 96%) 0%, hsl(208 53% 23% / 0.04) 100%)"
  },
  "motif": "Notice-status chip + statutory-clock tracker"
 },
 "capabilities": {
  "marketing": true,
  "portal": true,
  "ops": true,
  "chatbot": true,
  "payments": false
 },
 "generated_at": "2026-07-13T19:10:00.000Z",
 "checksum": "ee27f8e912500664"
}