{
 "version": "1.8.0",
 "slug": "pole-attachment-permit-desk",
 "title": "Pole Attachment Permit Production & Make-Ready Cost Control Desk",
 "vertical": "Broadband / telecom infrastructure",
 "seed": {
  "s": "pole-attachment-permit-desk",
  "t": "Pole Attachment Permit Production & Make-Ready Cost Control Desk",
  "v": "Broadband / telecom infrastructure",
  "r": "High",
  "m": "M"
 },
 "product": {
  "slug": "pole-attachment-permit-desk",
  "project_name": "SpanReady",
  "project_type": "AI-native done-for-you service desk (validation microsite)",
  "vertical": "Broadband / telecom infrastructure",
  "audience": "U.S. fiber broadband builders deploying 500-20,000 aerial poles/year without a dedicated joint-use team: rural ISPs, WISPs converting to fiber, co-op broadband subsidiaries attaching outside their territory, regional overbuilders, and the construction/engineering primes serving them.",
  "geography": "United States (FCC-jurisdiction states, 23 reverse-preemption states + DC, and NTIA §13.D.1-covered co-op/municipal pole footprints)",
  "scale_expectation": "3 pilot clients (hard cap) in 90 days; ~10,000 poles/month under management by month 12; ~$9-12M/yr at 300,000 poles/yr with a sub-15-person team",
  "core_workflows": [
   "Field survey intake and normalization to canonical per-pole records",
   "Utility-specific application package assembly with deterministic completeness gating",
   "Portal submission (NJUNS, Alden One, utility-proprietary) and receipt archiving",
   "FCC/state deadline state-machine tracking with same-day breach detection",
   "Escalation and rights-election correspondence drafting for client signature",
   "Make-ready estimate and invoice line-item reconciliation against FCC cost standards and benchmarks",
   "Weekly permit-status dashboard mapped to construction and BEAD milestones"
  ],
  "discovery": {
   "one_line_purpose": "Get every pole in a fiber build legally attachable on the fastest enforceable clock, at audited make-ready cost.",
   "primary_users": [
    "ISP CEO/GM (under ~75 employees) — economic buyer",
    "VP of Network / Director of OSP Construction — economic buyer at larger builders",
    "Construction manager / lone permit coordinator — champion and daily contact"
   ],
   "jobs_to_be_done": [
    "Get every pole in my build segment legally attachable before construction crews arrive",
    "Submit applications the utility cannot reject on completeness grounds",
    "Know every morning which utility owes me what response by what date — and make missed deadlines cost them, not me",
    "Verify make-ready estimates and invoices charge only what Section 224 and FCC precedent allow",
    "Give my lender/grant officer a defensible permit-status report tied to my BEAD milestones",
    "Do all this without hiring three permitting specialists I can't find in a rural labor market"
   ],
   "value_prop": "Permits granted on the enforceable timeline at audited cost: complete first-pass applications, a live deadline ledger with enforcement correspondence the day any clock is blown, and line-by-line make-ready audit — per-pole pricing plus contingency on documented savings, never hourly.",
   "competitors": [
    "OSP engineering firms (CHR Solutions, Finley, Vantage Point, Mountain Ltd.) — hourly permitting support bundled with design",
    "Owner-side joint-use vendors (Osmose, TRC, Davey Resource Group) — serve the utility, not the attacher",
    "Joint-use software platforms (Alden One, NJUNS, Varasset, Katapult Pro, ikeGPS) — licenses the buyer must staff",
    "Telecom regulatory law firms — $400-$900/hr, economically irrational below the largest disputes",
    "In-house permitting specialists — $25-$41/hr when hireable in rural markets"
   ],
   "differentiation": "Only integrated attacher-side outcome desk: first-pass-complete applications + deadline enforcement + cost audit at per-pole prices with contingency skin in the game. The May 7, 2026 FCC clock regime reset every incumbent's playbook; per-utility rejection libraries and make-ready benchmarks compound from live throughput.",
   "positioning_statement": "For fiber builders whose permits are the critical path, SpanReady is the done-for-you permit desk that produces complete utility-specific applications, enforces every FCC and state deadline, and audits every make-ready dollar — unlike engineering firms that bill hours and software the buyer must operate."
  },
  "assumptions": [
   {
    "id": "A1",
    "statement": "Per-pole desk pricing of $22-$35 clears the buyer's build-vs-buy math against $25-$41/hr specialist labor.",
    "confidence": "medium",
    "impact_if_wrong": "Repricing required; margin path lengthens.",
    "revisit_trigger": "Pilot proposals rejected on price twice consecutively."
   },
   {
    "id": "A2",
    "statement": "A desk-run application takes 20-40 min of AI+review time vs 2-4 specialist hours manually.",
    "confidence": "medium",
    "impact_if_wrong": "COGS/pole exceeds $8.50 steady-state; gross margin target slips.",
    "revisit_trigger": "Measured minutes/pole above 7 after pilot #2."
   },
   {
    "id": "A3",
    "statement": "5-10% of invoiced make-ready is recoverable or avoidable through line-item audit.",
    "confidence": "low-medium",
    "impact_if_wrong": "Audit layer becomes a trust feature rather than a revenue line.",
    "revisit_trigger": "First 10 audited invoices yield <2% documented savings."
   },
   {
    "id": "A4",
    "statement": "Rural ISPs will trust a remote, non-local desk with critical-path permitting.",
    "confidence": "low (blueprint UNVERIFIED)",
    "impact_if_wrong": "Channel shifts to white-label via OSP firms; direct motion shrinks.",
    "revisit_trigger": "Audit-to-pilot conversion <15% on 30+ audits."
   },
   {
    "id": "A5",
    "statement": "First-pass acceptance >=95% is achievable once a utility playbook is hardened.",
    "confidence": "medium-high",
    "impact_if_wrong": "Quality guarantee and refund exposure break the economics.",
    "revisit_trigger": "Acceptance stuck <85% after three playbook iterations on one utility."
   }
  ],
  "unknowns": [
   {
    "id": "U1",
    "question": "Will utilities respond differently (faster or more adversarially) to desk-represented attachers?",
    "blocks": "Escalation-tone calibration",
    "resolution_path": "Instrument pilot correspondence outcomes per utility; adjust ladder."
   },
   {
    "id": "U2",
    "question": "How much per-utility requirement variance exists beyond published documents (portal quirks, reviewer preferences)?",
    "blocks": "Playbook build cost estimates",
    "resolution_path": "Measure exception rate per utility across first 3 pilots."
   },
   {
    "id": "U3",
    "question": "What share of BEAD aerial mileage converts to buried after make-ready quotes?",
    "blocks": "Long-range volume sizing",
    "resolution_path": "Track client segment-level aerial/buried decisions; monitor FBA cost reports."
   },
   {
    "id": "U4",
    "question": "Do reverse-preemption state clocks provide enforceable equivalents everywhere the wedge clients build?",
    "blocks": "State-pack prioritization",
    "resolution_path": "Counsel-verified rulebook per state before first client in that state."
   }
  ],
  "expert_panel": [
   {
    "role": "Ex-joint-use coordinator (utility side)",
    "key_concern": "Complete applications matter more than aggressive letters — utility reviewers reward attachers who reduce their workload.",
    "recommendation": "Lead every new-utility relationship with first-pass completeness; open collegially.",
    "dissent": "None"
   },
   {
    "role": "OSP engineering principal",
    "key_concern": "Pole loading analysis boundary must be airtight or PE-licensure exposure follows.",
    "recommendation": "Consume stamped outputs only; contract language and intake checklist enforce it.",
    "dissent": "Would prefer the desk white-label under engineering firms from day one."
   },
   {
    "role": "Telecom regulatory counsel",
    "key_concern": "Escalation letters drifting into legal advocacy creates UPL risk.",
    "recommendation": "Counsel-reviewed template families; facts, dates, citations only; annual re-review.",
    "dissent": "None"
   },
   {
    "role": "Rural ISP CEO",
    "key_concern": "Remote trust — permits are existential; references matter more than price.",
    "recommendation": "Free Permit Clock Audit as proof-of-work before any ask; named OSP-fluent account lead.",
    "dissent": "Believes pilot cap of 3 is too conservative given the BEAD window."
   }
  ],
  "strategy": {
   "business_model": "Done-for-you service desk: per-pole production fees + contingency share of documented make-ready savings + phase-2 managed joint-use retainers. No customer-operated software.",
   "revenue_streams": [
    "Permit Package + Clock Watch: $22-$35/pole (volume-tiered), $2,500 batch minimum",
    "Make-ready estimate & invoice audit: 20-25% of documented savings, no savings no fee",
    "Managed joint-use desk retainer (phase 2): $3,500-$12,000/mo by poles under management"
   ],
   "moat": [
    "Per-utility playbooks learned from live rejection history no outsider can observe",
    "Clock ledger as accountable operations — contractual on-the-hook-ness, not a drafting tool",
    "Cross-utility make-ready cost benchmarks that give audit findings statistical teeth",
    "Firm-but-professional trust interface for escalation against long-term counterparties"
   ],
   "gtm": [
    "Free Permit Clock Audit on one live application batch (48-hr turnaround, capped 10/month)",
    "Targeted outbound to public BEAD subgrantee award lists (25 diagnosis memos/month)",
    "State broadband association workshops on the May 2026 clock rules",
    "OSP-firm referral/white-label partnerships (we absorb the admin they dislike)",
    "Founder LinkedIn content + answer-engine reference pages on clock rules"
   ],
   "pricing_hypothesis": "Per-pole beats hourly psychologically because the buyer already pays per-pole make-ready costs of $75-$450; $25/pole is ~1/10th the fully-loaded cost of manual in-house processing. INFERRED — pilot-validated.",
   "kill_criteria": [
    "Audit-to-pilot conversion <15% on 30+ delivered audits",
    "First-pass acceptance stuck <85% after three playbook iterations on the same utility",
    "Segment renewal <40%",
    "Simultaneous federal BEAD retreat and private fiber capital pullback"
   ]
  },
  "security": {
   "stride": [
    {
     "threat": "Spoofing — attacker poses as client to pull build maps",
     "scenario": "Email-based intake request from lookalike domain",
     "mitigation": "Portal-scoped auth per engagement; out-of-band verification for any new recipient or destination change."
    },
    {
     "threat": "Tampering — application package altered after QC sign-off",
     "scenario": "Post-approval edit introduces a completeness defect",
     "mitigation": "Immutable event log with content hashes; submission uses the signed artifact only."
    },
    {
     "threat": "Repudiation — dispute over what was submitted when",
     "scenario": "Utility claims application never arrived or arrived incomplete",
     "mitigation": "Hashed, timestamped submission receipts archived per application."
    },
    {
     "threat": "Information disclosure — cross-client leakage of build maps or utility cost data",
     "scenario": "Benchmark queries expose another client's identifiable rates",
     "mitigation": "Customer-scoped storage prefixes; benchmarks published only aggregated and de-identified."
    },
    {
     "threat": "Denial of service — clock engine outage causes missed breach detection",
     "scenario": "State-machine job fails silently over a deadline weekend",
     "mitigation": "Dual nightly recompute with divergence and freshness alarms; missed-sweep pages the founder."
    },
    {
     "threat": "Elevation of privilege — operator sends escalation without approval",
     "scenario": "Draft letter mailed before account-lead sign-off",
     "mitigation": "Send actions gated on recorded approvals; separation of duties in the workflow engine."
    }
   ],
   "privacy_posture": "No consumer PII expected; build maps and utility cost data treated as sensitive critical-infrastructure business data under NDA; customer-scoped access; incident-response runbook from day one.",
   "compliance_targets": [
    "Contractual NDA obligations",
    "E&O + cyber insurance underwriting requirements",
    "Client BEAD/NTIA reporting support (client's duty; we supply data)"
   ],
   "data_classifications": [
    "Public (rulebooks, published tariffs)",
    "Internal (playbooks, benchmarks - aggregated)",
    "Confidential (client build maps, agreements, correspondence)",
    "Restricted (cost/dispute evidence files)"
   ]
  },
  "devops": {
   "ci_cd": "GitHub Actions: lint, tests, clock-engine regression suite on every PR; deploy on tagged release.",
   "environments": [
    "dev",
    "prod (single-tenant-per-client data scoping)"
   ],
   "observability": [
    "Clock-sweep freshness metric",
    "Divergence alarm on dual computation",
    "First-pass acceptance per utility",
    "Exception-queue depth and age"
   ],
   "testing_pyramid": [
    "Unit: date math incl. holiday/business-day rules",
    "Golden-file: package assembly vs gold standards",
    "Regression: graded historical packages re-scored on any model/prompt change",
    "Manual QA: reviewer checklists as executable gates"
   ],
   "accessibility_tests": [
    "Dashboard WCAG 2.2 AA checks in CI (axe)",
    "Print-parity check for client reports"
   ],
   "performance_budget": "Batch of 1,500 poles normalized and gated in <4h wall-clock; daily clock sweep completes in <10 min."
  },
  "accessibility_i18n_ethics": {
   "wcag_target": "WCAG 2.2 AA for client dashboard and microsite",
   "locales": [
    "en-US"
   ],
   "rtl_support": false,
   "ethical_risks": [
    "Escalation machinery used to harass utility staff rather than enforce rights",
    "Audit findings overstated to inflate contingency fees",
    "Marketing implying legal/engineering authority the desk does not have"
   ],
   "ethical_guardrails": [
    "Escalation ladder starts collegial; tone approved by a named human every time",
    "Savings counted only on utility written correction/credit — never self-declared",
    "Boundary disclaimers verbatim on every artifact; counsel-reviewed annually",
    "No fabricated testimonials, clients, results, or credentials anywhere"
   ]
  },
  "governance": {
   "ownership": [
    {
     "area": "Clock engine correctness",
     "owner": "Founder"
    },
    {
     "area": "Package QC and playbooks",
     "owner": "OSP-fluent reviewer"
    },
    {
     "area": "Escalation approval and client relationships",
     "owner": "Account lead (founder at launch)"
    },
    {
     "area": "Boundary compliance and templates",
     "owner": "Outside telecom counsel (reviewed)"
    }
   ],
   "docs_required": [
    "Per-stage SOP runbooks (versioned)",
    "Per-utility playbook YAML",
    "48-hour postmortems on any rejection/missed event",
    "ADR log for engine decisions"
   ],
   "naming_conventions": [
    "Applications: {utility}-{client}-{batch}-{seq}",
    "Clocks: {application}:{rule_cite}:{obligation}",
    "Playbooks: playbook/{owner_type}/{utility_slug}.yaml"
   ],
   "change_control": "Any deterministic-rule change requires a failing test first, counsel note if boundary-adjacent, and founder sign-off; prompts versioned in git with eval re-run."
  },
  "risk_register": [
   {
    "id": "R1",
    "risk": "BEAD funding/policy disruption",
    "likelihood": "Medium",
    "impact": "High",
    "mitigation": "Serve all aerial construction + permanent joint-use lifecycle; near-zero fixed costs.",
    "contingency": "Shift mix to private/state builds (NC $100M, OH $50M pole programs) and retainers.",
    "owner": "Founder"
   },
   {
    "id": "R2",
    "risk": "Remote-trust rejection by rural ISPs",
    "likelihood": "Medium",
    "impact": "High",
    "mitigation": "Audit-first selling, association endorsements, named OSP-fluent lead, refund-backed pilots.",
    "contingency": "White-label under OSP engineering firms.",
    "owner": "Founder"
   },
   {
    "id": "R3",
    "risk": "Clock computation error causes client harm",
    "likelihood": "Low",
    "impact": "Critical",
    "mitigation": "No LLM in date math; dual computation + divergence alarms; red-team drills; E&O insurance.",
    "contingency": "Incident runbook: client notice, remediation letter, postmortem-to-rule within 48h.",
    "owner": "Founder"
   },
   {
    "id": "R4",
    "risk": "Utility retaliation/slow-walking against desk-represented attachers",
    "likelihood": "Medium",
    "impact": "Medium",
    "mitigation": "Professional ladder; letters under client's name; complete applications reduce utility workload.",
    "contingency": "Document everything; counsel handoff with evidence file.",
    "owner": "Account lead"
   },
   {
    "id": "R5",
    "risk": "Unauthorized-practice creep in letters or audit framing",
    "likelihood": "Low",
    "impact": "High",
    "mitigation": "Counsel-reviewed templates; facts/dates/citations only; annual review.",
    "contingency": "Immediate template freeze + counsel remediation.",
    "owner": "Counsel (external)"
   },
   {
    "id": "R6",
    "risk": "Key-person dependence on scarce OSP fluency",
    "likelihood": "Medium",
    "impact": "Medium",
    "mitigation": "Playbook/SOP system encodes fluency; hire from specialist pool and upskill; two-deep by month 6.",
    "contingency": "Contract bench via staffing partners (Mountain Ltd.-type).",
    "owner": "Founder"
   }
  ],
  "roadmap": [
   {
    "phase": "Weeks 1-2: Foundations",
    "weeks": "1-2",
    "outcomes": [
     "Rulebook corpus + clock engine v1 (dual-computation tested)",
     "Counsel-reviewed templates + engagement letter",
     "Offer page + Clock Card live",
     "Reviewer contracted"
    ],
    "exit_criteria": [
     "Clock engine passes hand-computed edge-case suite",
     "Counsel sign-off recorded"
    ],
    "kill_criteria": []
   },
   {
    "phase": "Weeks 2-6: First proof",
    "weeks": "2-6",
    "outcomes": [
     "25 diagnosis memos",
     "5-8 free Permit Clock Audits",
     "Pilot #1 signed and first batch submitted <=10 business days from intake"
    ],
    "exit_criteria": [
     "Every audit contains a dated, citable finding or explicit all-clear",
     "100% packages reviewer-signed"
    ],
    "kill_criteria": []
   },
   {
    "phase": "Weeks 7-13: Pilot cohort",
    "weeks": "7-13",
    "outcomes": [
     "Pilots #2-3 (hard cap), waitlist opens",
     "First breach escalations client-signed",
     "Audit layer debut on first invoices",
     "2 OSP referral partners",
     "Day-90 gate review"
    ],
    "exit_criteria": [
     "First-pass >=95% on hardened playbooks",
     "Deadline events actioned <=1 business day at 100%"
    ],
    "kill_criteria": [
     "Audit->pilot <15% on 30+ audits",
     "Acceptance <85% after 3 iterations on one utility"
    ]
   },
   {
    "phase": "Months 4-12: Earned scale",
    "weeks": "14-52",
    "outcomes": [
     "Reviewer #2 (two-deep)",
     "Portal ingestion + dashboard automation",
     "~10,000 poles/month",
     "First managed-desk retainers"
    ],
    "exit_criteria": [
     "COGS/pole <=$8.50",
     "Gross margin in 60-65% band"
    ],
    "kill_criteria": [
     "Renewal <40%"
    ]
   }
  ],
  "metrics": {
   "north_star": "Poles made legally attachable on or ahead of the enforceable clock (first-pass accepted, deadline-enforced, cost-audited)",
   "leading": [
    "Audits delivered/mo",
    "Audit->pilot conversion (>=30%)",
    "First-pass acceptance per utility (>=95%)",
    "Deadline events actioned <=1 business day (100%)",
    "Minutes/pole (7 -> 3 -> 1.5)"
   ],
   "lagging": [
    "Revenue/pole",
    "Gross margin (50% day-90 -> 60-65% yr-1)",
    "Segment renewal (>=70%)",
    "Documented savings per audited invoice",
    "Revenue per FTE ($220k -> $400-500k)"
   ],
   "guardrails": [
    "Rework rate <5%",
    "Exception rate per utility <15% after 90 days",
    "Zero unsigned outbound packages/letters",
    "Free audits <=10/month"
   ]
  },
  "executive_review": {
   "consensus": "Go. Dated regulatory unlock (FCC 25-38 fully effective 2026-05-07; NTIA §13.D.1 Jan 2026) + $42.45B deadlined construction + visible existing spend + structurally unserved attacher side = purchasable outcome desk with compounding assets.",
   "dissent": "Rural ISP trust of a remote desk is unproven (UNVERIFIED); one panelist wants white-label-first GTM rather than direct.",
   "go_no_go": "GO — pilot-gated",
   "top_3_risks": [
    "BEAD policy volatility",
    "Remote-trust barrier",
    "Clock computation error (critical severity, low likelihood)"
   ],
   "first_10_steps": [
    "Stand up rulebook corpus (FCC 25-38, Part 1 Subpart J, top-10 aerial-BEAD states, NTIA GT&C)",
    "Build clock state machine + dual-computation test harness",
    "Draft correspondence template set; outside counsel review + engagement letter",
    "Freeze canonical pole/application schemas v1",
    "Recruit contract OSP-fluent reviewer",
    "Publish offer page + 2026 Clock Card lead magnet",
    "Pull first 50 subgrantee targets from public award lists",
    "Send first 25 diagnosis memos",
    "Deliver first 5 Permit Clock Audits (48-hr SLA)",
    "Close pilot #1 and run first batch end-to-end with 100% QC"
   ]
  }
 },
 "project_site": {
  "slug": "pole-attachment-permit-desk",
  "app_name": "SpanReady",
  "archetype": "ops-desk",
  "archetype_label": "Operations desk / clock-enforcement ledger",
  "reader_role": "ISP construction leadership evaluating whether to hand permitting to a specialist desk",
  "one_sentence_app": "A done-for-you desk that produces first-pass-complete pole attachment applications, enforces every FCC/state deadline, and audits every make-ready dollar.",
  "homepage_sequence": [
   "hero",
   "problem",
   "mechanism",
   "proof",
   "offer",
   "objection",
   "qualification",
   "cta"
  ],
  "hero": {
   "frame_label": "Permit desk — live clock ledger",
   "eyebrow": "For aerial fiber builders under the May 7, 2026 FCC clock regime",
   "interface_title": "SpanReady Clock Ledger",
   "primary_panel_title": "Segment: Harmon County Phase 1 — 1,212 poles, 2 owners",
   "primary_panel_body": "App PA-2026-0412 (388 poles, standard tier): survey response due in 9 days (47 C.F.R. § 1.1411). App PA-2026-0413 (824 poles, mid-size tier): estimate OVERDUE 6 days — escalation letter drafted, awaiting your signature.",
   "side_panel_title": "This week",
   "side_panel_items": [
    "3 packages passed completeness gate",
    "1 breach detected, actioned same day",
    "Invoice MR-118 reconciled: 2 lines flagged",
    "0 first-pass rejections to date"
   ],
   "status_metric": "100%",
   "status_label": "deadline events actioned within 1 business day"
  },
  "language": {
   "problem_heading": "Permits are your critical path — and nobody is running the clock",
   "mechanism_heading": "How the desk works",
   "proof_heading": "Why this is enforceable now",
   "offer_heading": "What you get, per pole",
   "objection_heading": "Fair questions",
   "qualification_heading": "Who this is for",
   "cta_close": "Claim one of this month's free Permit Clock Audits"
  },
  "modules": [
   {
    "name": "Permit Package Producer",
    "job": "Assemble complete, utility-specific applications from your field survey data",
    "artifact": "Submitted, receipt-archived application package"
   },
   {
    "name": "Clock Ledger",
    "job": "Track every FCC/state deadline as a state machine; detect breaches same day",
    "artifact": "Per-pole, per-application deadline ledger with citations"
   },
   {
    "name": "Escalation Drafter",
    "job": "Draft the correct next letter the day a clock is blown — for your signature",
    "artifact": "Reminder / formal notice / rights-election correspondence"
   },
   {
    "name": "Make-Ready Auditor",
    "job": "Reconcile estimates and invoices line-by-line against FCC cost standards and benchmarks",
    "artifact": "Findings memo + dispute-support evidence file"
   },
   {
    "name": "Milestone Reporter",
    "job": "Map permit status to your construction schedule and BEAD/lender milestones",
    "artifact": "Weekly permit-status dashboard"
   }
  ],
  "checkpoints": [
   {
    "label": "Completeness gate",
    "pass": "Every required field and exhibit present per the utility's playbook; reviewer signs",
    "fail": "Package blocked — clock-restart risk eliminated before submission"
   },
   {
    "label": "Breach detection",
    "pass": "Deadline event detected and actioned within 1 business day",
    "fail": "Missed sweep pages the founder; 48-hour postmortem becomes a new deterministic check"
   },
   {
    "label": "Escalation approval",
    "pass": "Account lead approves; client signs; letter archived with approval chain",
    "fail": "Nothing sends — no exceptions"
   },
   {
    "label": "Savings documentation",
    "pass": "Utility corrects estimate/invoice in writing; contingency fee applies",
    "fail": "No written correction, no fee — self-declared savings never count"
   }
  ],
  "signature_scene": "Monday 7:40am: the construction manager opens the weekly dashboard. Two utilities owe responses this week; one estimate came in 11% over the survey-stage benchmark and is flagged with the exact lines to question; the escalation letter for last week's blown survey clock is signed and out. Crews stay on schedule."
 },
 "ddd": {
  "slug": "pole-attachment-permit-desk",
  "project_name": "SpanReady",
  "business_understanding": {
   "summary": "A done-for-you desk that industrializes pole attachment permitting for aerial fiber builders: complete utility-specific applications, deterministic FCC/state deadline enforcement, and forensic make-ready cost audit, priced per pole plus contingency on documented savings.",
   "customer_profile": "U.S. fiber builders deploying 500-20,000 aerial poles/year without dedicated joint-use staff; launch wedge is BEAD subgrantees with awarded aerial mileage under four-year federal deadlines.",
   "customer_pain": "Permit latency (~180-day traditional cycles), clock restarts from defective applications, unenforced post-May-2026 FCC rights, unaudited make-ready invoices ($75-$450/pole), and unhireable specialist labor.",
   "paid_outcome": "Poles made legally attachable on the fastest enforceable timeline at audited cost: granted permits, a live clock ledger, enforcement correspondence, reconciled invoices, and milestone reporting.",
   "value_creation": "Converts a $25-$41/hr manual specialist workflow into ~$8.50/pole of AI+review COGS sold at $22-$35/pole, while capturing make-ready overcharges currently forfeited (audit contingency at ~85% margin).",
   "why_ai_native": "The three labor sinks — extraction from messy utility PDFs/exports, utility-specific assembly with completeness checking, and correspondence vigilance — collapse under frontier-model extraction and drafting, while deadline math stays in deterministic code. Compounding assets (playbooks, rejection libraries, benchmarks) get more valuable as models improve.",
   "operational_risks": [
    "Clock computation error forfeits client rights (critical; dual computation + no-LLM date math)",
    "Completeness-refund exposure if gates are weaker than utility idiosyncrasy",
    "Utility slow-walking desk-represented attachers",
    "UPL/PE boundary creep in letters and audit framing",
    "Key-person dependence on scarce OSP fluency"
   ],
   "assumptions": [
    "$22-$35/pole clears build-vs-buy against specialist labor (INFERRED)",
    "20-40 min AI+review per application vs 2-4 manual hours (INFERRED)",
    "5-10% of invoiced make-ready is audit-recoverable (INFERRED)",
    "Rural ISPs accept a remote desk for critical-path permitting (UNVERIFIED — pilot question #1)",
    ">=95% first-pass acceptance achievable on hardened playbooks"
   ],
   "validation_questions": [
    "Do 30%+ of delivered Clock Audits convert to paid pilots?",
    "What are true minutes-per-pole at each pipeline stage in pilot #1?",
    "Do first make-ready audits find documentable savings at >=2% of invoiced value?",
    "Does any utility's exception rate stay above 15% after playbook iteration?",
    "Do pilot clients renew into second segments at >=60-70%?"
   ]
  },
  "domain_discovery": {
   "actors": [
    {
     "actor": "ISP construction leader",
     "role": "Economic buyer; owns build schedule and BEAD milestones",
     "goals": [
      "Poles attachable before crews arrive",
      "Defensible milestone reporting"
     ],
     "decisions": [
      "Engage desk",
      "Approve escalations",
      "Accept/contest estimates"
     ],
     "pain_points": [
      "Permit latency is the critical path",
      "No visibility into utility obligations",
      "Cannot hire specialists"
     ]
    },
    {
     "actor": "Permit coordinator (client-side, where one exists)",
     "role": "Champion; daily contact and data supplier",
     "goals": [
      "Get the spreadsheet fire out of their life",
      "Look competent to leadership"
     ],
     "decisions": [
      "What data to send",
      "Which utility contacts to introduce"
     ],
     "pain_points": [
      "Single-threaded",
      "No enforcement machinery",
      "Blamed for utility delays"
     ]
    },
    {
     "actor": "OSP-fluent reviewer (desk)",
     "role": "Quality chokepoint; signs every package pre-submission",
     "goals": [
      "Zero completeness rejections",
      "Playbooks that make review fast"
     ],
     "decisions": [
      "Package pass/fail",
      "Exception resolutions",
      "Playbook diffs"
     ],
     "pain_points": [
      "Ambiguous utility requirements",
      "New-utility unknowns",
      "Volume spikes"
     ]
    },
    {
     "actor": "Account lead (desk; founder at launch)",
     "role": "Trust interface; approves all enforcement correspondence",
     "goals": [
      "Client renewal",
      "Utility relationships that stay workable"
     ],
     "decisions": [
      "Escalation tone/timing",
      "Counsel handoff moment",
      "Conflict-of-interest calls"
     ],
     "pain_points": [
      "Tone calibration against long-term counterparties",
      "Client urgency vs relationship preservation"
     ]
    },
    {
     "actor": "Utility joint-use administrator (external)",
     "role": "Counterparty; reviews applications, issues estimates/invoices",
     "goals": [
      "Low-effort, complete applications",
      "Defensible cost recovery"
     ],
     "decisions": [
      "Accept/reject applications",
      "Estimate contents",
      "Schedule make-ready"
     ],
     "pain_points": [
      "Application surge from BEAD",
      "Limited admin staff",
      "New federal obligations"
     ]
    }
   ],
   "glossary": [
    {
     "term": "Make-ready",
     "definition": "Work to prepare a pole for a new attachment: rearranging existing attachments, replacing the pole, correcting clearances — billed to the attacher within regulatory limits.",
     "used_by": "All contexts",
     "context": "Cost Audit",
     "example": "Estimate MR-118: $175/pole across 212 poles.",
     "notes": "$75-$450/pole typical; replacements $2,000-$9,000."
    },
    {
     "term": "Clock",
     "definition": "A dated regulatory obligation computed from an application event under FCC or state rules, with citation.",
     "used_by": "Clock Enforcement, Reporting",
     "context": "Clock Enforcement",
     "example": "Survey response due 45 days after complete application (47 C.F.R. § 1.1411).",
     "notes": "Never LLM-computed; dual-computed nightly."
    },
    {
     "term": "First-pass acceptance",
     "definition": "A submitted application accepted as complete by the utility without a completeness rejection.",
     "used_by": "Permit Production, QC",
     "context": "Permit Production",
     "example": "Playbook hardened at >=98% over 200+ poles.",
     "notes": "The contractual quality bar; refund-backed."
    },
    {
     "term": "Completeness gate",
     "definition": "Deterministic per-utility required-field/exhibit check that blocks submission of any deficient package.",
     "used_by": "Permit Production",
     "context": "Permit Production",
     "example": "Gate blocks batch: missing stamped load data for 3 poles.",
     "notes": "AI never has final say on completeness."
    },
    {
     "term": "Self-help",
     "definition": "Attacher's regulatory right to use utility-approved contractors when the utility misses survey/estimate/make-ready deadlines.",
     "used_by": "Clock Enforcement",
     "context": "Clock Enforcement",
     "example": "Self-help election noticed after estimate overdue 15+ days.",
     "notes": "Election is client's decision; we draft and document."
    },
    {
     "term": "Deemed approval",
     "definition": "Attacher-proposed contractor treated as approved when the utility fails to object within 30 days.",
     "used_by": "Clock Enforcement",
     "context": "Clock Enforcement",
     "example": "Contractor list submitted 6/2; no objection by 7/2; right earned.",
     "notes": "New under FCC 25-38; routinely unclaimed."
    },
    {
     "term": "Reverse-preemption state",
     "definition": "One of 23 states + DC that regulate pole attachments under their own regimes instead of the FCC's.",
     "used_by": "All contexts",
     "context": "Knowledge",
     "example": "Virginia's 75-day response statute overrides federal clocks.",
     "notes": "Regime classification is step one for every pole owner."
    },
    {
     "term": "Rejection library",
     "definition": "Indexed record of every utility bounce, question, and delay pattern, feeding playbooks, QA, and marketing teardowns.",
     "used_by": "Knowledge, QC",
     "context": "Knowledge",
     "example": "Utility X rejects any application lacking pole-by-pole photos.",
     "notes": "The compounding moat asset."
    }
   ],
   "decisions": [
    {
     "decision": "Package pass/fail",
     "who": "OSP-fluent reviewer",
     "inputs": [
      "Assembled package",
      "Utility gold-standard checklist",
      "Confidence scores"
     ],
     "rule": "Any missing required field or below-threshold extraction blocks submission.",
     "output": "Signed QC record or reason-coded rejection to ops",
     "risk": "False pass -> completeness rejection -> clock restart + refund."
    },
    {
     "decision": "Escalation tone/timing",
     "who": "Account lead (client signs)",
     "inputs": [
      "Breach event + citation",
      "Ladder stage",
      "Utility relationship history"
     ],
     "rule": "Collegial first; ladder rungs skipped only with founder sign-off.",
     "output": "Approved letter for client signature",
     "risk": "Relationship damage with a decades-long counterparty."
    },
    {
     "decision": "Rights election (self-help / deemed approval)",
     "who": "Client (desk drafts and documents)",
     "inputs": [
      "Breach ledger",
      "Construction schedule",
      "Contractor availability"
     ],
     "rule": "Desk presents the earned right + evidence; client elects; counsel looped on ambiguity.",
     "output": "Election notice or documented decision to wait",
     "risk": "Premature election sours utility; missed election wastes months."
    },
    {
     "decision": "Contested-cost pursuit",
     "who": "Client (findings human-validated first)",
     "inputs": [
      "Reconciliation worksheet",
      "Benchmark data",
      "FCC precedent categories"
     ],
     "rule": "Desk flags documentation discrepancies only; structural questions to client's PE.",
     "output": "Dispute-support file or acceptance",
     "risk": "False-positive dispute burns goodwill; fee only on documented corrections."
    },
    {
     "decision": "Conflict-of-interest screening",
     "who": "Founder",
     "inputs": [
      "Client roster",
      "Utility dispute postures"
     ],
     "rule": "Two clients adverse on the same utility dispute -> disclosure + screening or declination.",
     "output": "Documented screening decision",
     "risk": "Trust loss in a small industry."
    }
   ],
   "events": [
    {
     "event": "IntakeReceived",
     "meaning": "Client engagement data arrived",
     "trigger": "Client uploads survey exports/agreements",
     "downstream": [
      "Completeness scoring",
      "Normalization"
     ]
    },
    {
     "event": "IntakeCompleted",
     "meaning": "All required intake items present (score 100)",
     "trigger": "Last gap item received",
     "downstream": [
      "Batch production start",
      "10-business-day submission SLA starts"
     ]
    },
    {
     "event": "PackageAssembled",
     "meaning": "Application built per utility playbook",
     "trigger": "Normalization complete for batch",
     "downstream": [
      "Completeness gate",
      "Reviewer QC"
     ]
    },
    {
     "event": "PackageApproved",
     "meaning": "Reviewer signed the package",
     "trigger": "QC checklist passed",
     "downstream": [
      "Submission"
     ]
    },
    {
     "event": "ApplicationSubmitted",
     "meaning": "Package delivered via correct channel with receipt",
     "trigger": "Ops submits post-approval",
     "downstream": [
      "Clock instantiation",
      "Dashboard update"
     ]
    },
    {
     "event": "ClockBreached",
     "meaning": "A utility missed a dated obligation",
     "trigger": "Daily sweep detects overdue obligation",
     "downstream": [
      "Escalation drafting",
      "Client notification",
      "Ledger annotation"
     ]
    },
    {
     "event": "EstimateReceived",
     "meaning": "Utility issued a make-ready estimate",
     "trigger": "Portal/email ingestion",
     "downstream": [
      "Estimate review before client acceptance",
      "Estimate clock closes"
     ]
    },
    {
     "event": "SavingsDocumented",
     "meaning": "Utility corrected an estimate/invoice in writing",
     "trigger": "Corrected document ingested",
     "downstream": [
      "Contingency fee accrual",
      "Benchmark update"
     ]
    }
   ]
  },
  "subdomains": [
   {
    "name": "Permit package production",
    "type": "core",
    "description": "Utility-specific application assembly with deterministic completeness gating and human QC.",
    "reason": "First-pass acceptance is the contractual promise and the clock-restart killer.",
    "business_value": "Directly sold; quality bar differentiator.",
    "recommendation": "build",
    "ai_involvement": "high",
    "human_involvement": "high",
    "risks": [
     "Utility idiosyncrasy beyond playbooks",
     "Refund exposure",
     "New-utility cold starts"
    ],
    "validation_questions": [
     "Can acceptance exceed 95% on hardened playbooks?",
     "True assembly minutes per pole?"
    ]
   },
   {
    "name": "Deadline clock enforcement",
    "type": "core",
    "description": "Pure-code state machine computing and tracking every FCC/state obligation with same-day breach response.",
    "reason": "The regulatory unlock — the differentiator no incumbent operates.",
    "business_value": "The reason to hire the desk; included in core price.",
    "recommendation": "build",
    "ai_involvement": "medium",
    "human_involvement": "medium",
    "risks": [
     "Computation error (critical)",
     "Rule-change drift",
     "Event-ingestion gaps"
    ],
    "validation_questions": [
     "Zero divergence over pilot period?",
     "100% breach detection <=1 business day?"
    ]
   },
   {
    "name": "Make-ready cost audit",
    "type": "core",
    "description": "Estimate/invoice line reconciliation against FCC standards and cross-utility benchmarks.",
    "reason": "Captures value currently forfeited; contingency-priced upside.",
    "business_value": "~85% margin revenue layer; trust builder.",
    "recommendation": "build",
    "ai_involvement": "high",
    "human_involvement": "high",
    "risks": [
     "Findings dismissed as unqualified",
     "False positives burn goodwill"
    ],
    "validation_questions": [
     "Documented savings >=2% of invoiced value?",
     "Client-accepted finding rate?"
    ]
   },
   {
    "name": "Per-utility playbooks & rulebook knowledge",
    "type": "core",
    "description": "Versioned, effective-date-aware rule corpus + empirically learned utility requirements and rejection history.",
    "reason": "The compounding moat; feeds every other subdomain.",
    "business_value": "Falling COGS and rising quality with volume.",
    "recommendation": "build",
    "ai_involvement": "medium",
    "human_involvement": "high",
    "risks": [
     "Staleness",
     "Cold-start cost per new utility"
    ],
    "validation_questions": [
     "Playbook build hours per utility?",
     "Exception-rate decay curve?"
    ]
   },
   {
    "name": "Field-data intake & normalization",
    "type": "supporting",
    "description": "Ingestion of survey exports, maps, agreements into canonical confidence-scored records.",
    "reason": "Necessary precursor; quality ceiling for everything downstream.",
    "business_value": "Enables 10-business-day submission SLA.",
    "recommendation": "build",
    "ai_involvement": "high",
    "human_involvement": "medium",
    "risks": [
     "Garbage-in from client field data",
     "Format sprawl"
    ],
    "validation_questions": [
     "Extraction accuracy per format?",
     "Exception-queue volume?"
    ]
   },
   {
    "name": "Escalation correspondence",
    "type": "supporting",
    "description": "Counsel-templated, rule-citing letters drafted same-day on breach, human-approved, client-signed.",
    "reason": "Enforcement without UPL exposure.",
    "business_value": "Converts tracked rights into behavior change.",
    "recommendation": "build",
    "ai_involvement": "high",
    "human_involvement": "high",
    "risks": [
     "Boundary creep",
     "Tone damage"
    ],
    "validation_questions": [
     "Utility response rate to ladder stages?"
    ]
   },
   {
    "name": "Client reporting & milestone mapping",
    "type": "supporting",
    "description": "Weekly dashboards tying permit status to construction and BEAD/lender milestones.",
    "reason": "Renewal driver and lender-facing proof.",
    "business_value": "Retention; audit trail of value delivered.",
    "recommendation": "build",
    "ai_involvement": "medium",
    "human_involvement": "low",
    "risks": [
     "Report drift from event-log truth"
    ],
    "validation_questions": [
     "Do lenders/grant officers actually consume it?"
    ]
   },
   {
    "name": "Portal operations (NJUNS/Alden One/proprietary)",
    "type": "supporting",
    "description": "Submission, status scraping, and event ingestion across utility channels.",
    "reason": "The desk operates the platforms the buyer would otherwise staff.",
    "business_value": "Removes the co-pilot burden.",
    "recommendation": "build (manual first, RPA later)",
    "ai_involvement": "medium",
    "human_involvement": "high at launch",
    "risks": [
     "Portal changes break ingestion",
     "Credential/access friction"
    ],
    "validation_questions": [
     "Which portals permit automation?"
    ]
   },
   {
    "name": "CRM, billing, e-sign",
    "type": "generic",
    "description": "Standard business stack.",
    "reason": "Undifferentiated.",
    "business_value": "Hygiene.",
    "recommendation": "buy",
    "ai_involvement": "low",
    "human_involvement": "low",
    "risks": [
     "None material"
    ],
    "validation_questions": []
   },
   {
    "name": "Benchmark database",
    "type": "supporting-may-become-core",
    "description": "Cross-utility make-ready cost observations by category.",
    "reason": "Statistical teeth for audits; defensible data asset at scale.",
    "business_value": "Audit win-rate; future product surface.",
    "recommendation": "build (as a byproduct of audits)",
    "ai_involvement": "medium",
    "human_involvement": "medium",
    "risks": [
     "De-identification discipline",
     "Small-n early"
    ],
    "validation_questions": [
     "Coverage (utilities x categories) growth rate?"
    ]
   }
  ],
  "core_domain_analysis": {
   "primary_core": "Deadline clock enforcement (the regulatory unlock nobody else operates for attachers)",
   "secondary_cores": [
    "Permit package production at first-pass quality",
    "Make-ready cost audit"
   ],
   "supporting_may_become_core": [
    "Benchmark database",
    "Per-utility playbooks (already moat, could become licensable)"
   ],
   "generic_do_not_distract": [
    "CRM/billing/e-sign",
    "Generic document management",
    "Custom customer-facing software before revenue"
   ],
   "rationale": "Everything the buyer can't get elsewhere flows from the clock ledger and the playbook-gated production line; audit converts the same evidence spine into contingency revenue. Software incumbents own owner-side workflow tools; the attacher-side operated outcome is the whitespace."
  },
  "bounded_contexts": [
   {
    "name": "Intake",
    "purpose": "Turn client field data into complete, confidence-scored canonical records.",
    "subdomain": "Field-data intake & normalization",
    "type": "supporting",
    "owned_language": [
     "intake checklist",
     "completeness score",
     "canonical pole record",
     "confidence band",
     "exception queue",
     "engagement manifest"
    ],
    "owns": [
     "Engagement manifests",
     "Canonical pole records",
     "Extraction confidence scores",
     "Intake gap requests"
    ],
    "does_not_own": [
     "Application packages",
     "Clocks",
     "Playbook content"
    ],
    "primary_actors": [
     "Client permit coordinator",
     "Desk ops",
     "Extraction agent"
    ],
    "entities": [
     "Engagement",
     "IntakeItem",
     "PoleRecord",
     "SourceDocument"
    ],
    "value_objects": [
     "ConfidenceScore",
     "GPSPoint",
     "AgreementRef"
    ],
    "aggregates": [
     "Engagement (root: Engagement)",
     "PoleRecord (root: PoleRecord)"
    ],
    "domain_services": [
     "CompletenessScoring",
     "FormatValidation"
    ],
    "application_services": [
     "ReceiveUpload",
     "ScoreIntake",
     "RequestGaps",
     "NormalizeBatch",
     "RouteExceptions"
    ],
    "commands": [
     "SubmitIntakeItem",
     "ScoreIntake",
     "RequestGapItems",
     "NormalizePoleData",
     "ResolveExtractionException"
    ],
    "domain_events": [
     "IntakeReceived",
     "IntakeCompleted",
     "PoleRecordNormalized",
     "ExtractionExceptionRaised",
     "ExtractionExceptionResolved"
    ],
    "policies": [
     "Production blocked until intake score = 100 on required items",
     "Low-confidence fields re-keyed by human before gating"
    ],
    "specifications": [
     "RequiredIntakeItemsPresent",
     "FieldConfidenceAboveThreshold"
    ],
    "invariants": [
     "No pole record enters production with below-threshold unreviewed fields",
     "Every source document hashed into the engagement manifest"
    ],
    "ai_agents": [
     "Survey Extraction Agent"
    ],
    "human_roles": [
     "Desk ops",
     "Reviewer (exception resolution)"
    ],
    "data_owned": [
     "Source documents",
     "Canonical pole records",
     "Confidence scores",
     "Intake manifests"
    ],
    "inputs": [
     "Katapult/ikeGPS exports",
     "KMZ/shapefiles",
     "Agreements (PDF)",
     "Correspondence history"
    ],
    "outputs": [
     "Normalized batches to Production",
     "Agreement refs to Clock context"
    ],
    "external_integrations": [
     "Client portal/S3",
     "Intake mailbox"
    ],
    "risks": [
     "Client field-data quality ceiling",
     "Format sprawl"
    ],
    "interfaces": [
     "NormalizedBatch (published)",
     "IntakeStatus (query)",
     "ExceptionQueue (ops UI)"
    ]
   },
   {
    "name": "Permit Production",
    "purpose": "Assemble, gate, QC, and submit utility-specific application packages.",
    "subdomain": "Permit package production",
    "type": "core",
    "owned_language": [
     "application package",
     "completeness gate",
     "gold standard",
     "first-pass acceptance",
     "tier classification",
     "submission receipt"
    ],
    "owns": [
     "Application objects",
     "Completeness gate rules (execution)",
     "QC sign-off records",
     "Submission receipts"
    ],
    "does_not_own": [
     "Playbook content (Knowledge owns)",
     "Clock computation (Clock owns)"
    ],
    "primary_actors": [
     "Assembly agent",
     "OSP-fluent reviewer",
     "Desk ops"
    ],
    "entities": [
     "Application",
     "PackageExhibit",
     "QCRecord",
     "SubmissionReceipt"
    ],
    "value_objects": [
     "TierClassification",
     "ChannelSpec",
     "FeeSchedule"
    ],
    "aggregates": [
     "Application (root: Application)"
    ],
    "domain_services": [
     "TierClassifier",
     "CompletenessGate",
     "FeeCalculator"
    ],
    "application_services": [
     "AssemblePackage",
     "RunCompletenessGate",
     "RecordQCSignoff",
     "SubmitApplication",
     "HandleUtilityResponse"
    ],
    "commands": [
     "AssemblePackage",
     "GatePackage",
     "ApprovePackage",
     "RejectPackageToOps",
     "SubmitApplication"
    ],
    "domain_events": [
     "PackageAssembled",
     "PackageGateBlocked",
     "PackageApproved",
     "ApplicationSubmitted",
     "ApplicationRejectedByUtility",
     "ApplicationAccepted"
    ],
    "policies": [
     "No submission without reviewer sign-off",
     "New utilities 100% review; sampling only after >=98% acceptance over 200+ poles",
     "48-hour postmortem on any rejection"
    ],
    "specifications": [
     "AllRequiredFieldsPresent",
     "ExhibitListMatchesPlaybook"
    ],
    "invariants": [
     "Submitted artifact = signed artifact (hash equality)",
     "Every application carries a tier classification and regime tag"
    ],
    "ai_agents": [
     "Package Assembly Agent"
    ],
    "human_roles": [
     "OSP-fluent reviewer (chokepoint 1)",
     "Desk ops (submission)"
    ],
    "data_owned": [
     "Applications",
     "QC records",
     "Submission receipts",
     "Rejection reason codes"
    ],
    "inputs": [
     "Normalized batches (Intake)",
     "Playbooks (Knowledge)",
     "Stamped engineering docs (client PE, pass-through)"
    ],
    "outputs": [
     "Submission events to Clock",
     "Rejection data to Knowledge",
     "Status to Reporting"
    ],
    "external_integrations": [
     "NJUNS",
     "Alden One",
     "Utility portals",
     "Certified mail"
    ],
    "risks": [
     "Utility idiosyncrasy beyond playbook",
     "Refund exposure on false pass"
    ],
    "interfaces": [
     "ApplicationSubmitted (event)",
     "PackageStatus (query)",
     "GoldStandardLibrary (internal)"
    ]
   },
   {
    "name": "Clock Enforcement",
    "purpose": "Compute, track, and enforce every regulatory deadline as a deterministic state machine.",
    "subdomain": "Deadline clock enforcement",
    "type": "core",
    "owned_language": [
     "clock",
     "obligation",
     "breach",
     "tolling",
     "rights election",
     "escalation ladder",
     "dual computation"
    ],
    "owns": [
     "Clock instances",
     "Breach events",
     "Escalation drafts and approval records",
     "Rights-election documentation"
    ],
    "does_not_own": [
     "Rule text (Knowledge owns)",
     "Client signature (client owns)"
    ],
    "primary_actors": [
     "Rule engine",
     "Correspondence agent",
     "Account lead",
     "Client signer"
    ],
    "entities": [
     "ClockInstance",
     "BreachEvent",
     "EscalationLetter",
     "RightsElection"
    ],
    "value_objects": [
     "RuleCitation",
     "DueDate (business-day aware)",
     "LadderStage"
    ],
    "aggregates": [
     "ClockLedger (root: ClockLedger, per application)"
    ],
    "domain_services": [
     "ClockComputation (pure code)",
     "DualRecompute",
     "LadderPolicy"
    ],
    "application_services": [
     "InstantiateClocks",
     "DailySweep",
     "IngestUtilityEvent",
     "DraftEscalation",
     "ApproveAndDispatch"
    ],
    "commands": [
     "InstantiateClocks",
     "RecordUtilityEvent",
     "DeclareBreach",
     "DraftEscalation",
     "ApproveEscalation",
     "RecordRightsElection"
    ],
    "domain_events": [
     "ClockInstantiated",
     "ClockSatisfied",
     "ClockBreached",
     "EscalationDrafted",
     "EscalationSent",
     "RightsElectionRecorded",
     "ComputationDivergenceDetected"
    ],
    "policies": [
     "Breach -> draft correct next artifact same day",
     "Divergence alarm halts outbound correspondence",
     "Ladder rungs skipped only with founder sign-off"
    ],
    "specifications": [
     "ObligationOverdue",
     "SelfHelpEligible",
     "DeemedApprovalEarned"
    ],
    "invariants": [
     "No clock date originates from an LLM",
     "Every breach carries a citation and evidence pointer",
     "No letter dispatches without account-lead approval + client signature"
    ],
    "ai_agents": [
     "Correspondence Drafting Agent"
    ],
    "human_roles": [
     "Account lead (chokepoint 2)",
     "Founder (divergence + ladder exceptions)"
    ],
    "data_owned": [
     "Clock ledger",
     "Breach log",
     "Correspondence archive with approval chains"
    ],
    "inputs": [
     "Submission events (Production)",
     "Utility events (portals/mail)",
     "Rule versions (Knowledge)",
     "Agreement refs (Intake)"
    ],
    "outputs": [
     "Breach notices to Reporting",
     "Evidence spine to Audit and to counsel handoffs"
    ],
    "external_integrations": [
     "Portal status feeds",
     "Email ingestion",
     "E-sign for client signature"
    ],
    "risks": [
     "Event-ingestion gap = silent clock",
     "Rule-version drift"
    ],
    "interfaces": [
     "ClockLedger (query)",
     "BreachFeed (event)",
     "EvidenceFile (export)"
    ]
   },
   {
    "name": "Cost Audit",
    "purpose": "Reconcile make-ready estimates and invoices line-by-line; document savings.",
    "subdomain": "Make-ready cost audit",
    "type": "core",
    "owned_language": [
     "line match",
     "eligibility flag",
     "benchmark percentile",
     "findings memo",
     "documented savings",
     "contingency accrual"
    ],
    "owns": [
     "Reconciliation worksheets",
     "Findings memos",
     "Savings documentation",
     "Contingency accruals"
    ],
    "does_not_own": [
     "Benchmark aggregation policy (Knowledge owns)",
     "Dispute decisions (client owns)"
    ],
    "primary_actors": [
     "Reconciliation agent",
     "Reviewer",
     "Client decision-maker"
    ],
    "entities": [
     "EstimateDoc",
     "InvoiceDoc",
     "ReconLine",
     "FindingsMemo",
     "SavingsRecord"
    ],
    "value_objects": [
     "CostCategory",
     "EligibilityFlag",
     "BenchmarkBand"
    ],
    "aggregates": [
     "Reconciliation (root: Reconciliation, per invoice)"
    ],
    "domain_services": [
     "LineMatcher",
     "EligibilityClassifier",
     "BenchmarkComparer"
    ],
    "application_services": [
     "ReviewEstimate",
     "ReconcileInvoice",
     "ValidateFindings",
     "PresentFindings",
     "DocumentSavings"
    ],
    "commands": [
     "ReviewEstimate",
     "ReconcileInvoice",
     "ValidateFinding",
     "PresentFindings",
     "RecordDocumentedSavings"
    ],
    "domain_events": [
     "EstimateReceived",
     "EstimateReviewed",
     "InvoiceReconciled",
     "FindingValidated",
     "FindingsPresented",
     "SavingsDocumented"
    ],
    "policies": [
     "Findings human-validated before client sees them",
     "Fee accrues only on utility written correction",
     "Structural questions routed to client's PE"
    ],
    "specifications": [
     "LineEligibilityContestable",
     "SavingsDocumentedInWriting"
    ],
    "invariants": [
     "No contingency accrual without a written utility correction artifact",
     "Every flag carries category + reason + evidence pointer"
    ],
    "ai_agents": [
     "Reconciliation Agent"
    ],
    "human_roles": [
     "Reviewer (finding validation)",
     "Account lead (presentation)"
    ],
    "data_owned": [
     "Estimates/invoices",
     "Recon worksheets",
     "Findings memos",
     "Savings records"
    ],
    "inputs": [
     "Estimate/invoice docs (Clock ingestion)",
     "Benchmarks (Knowledge)",
     "FCC cost-standard categories"
    ],
    "outputs": [
     "Findings to client via Reporting",
     "Benchmark observations to Knowledge",
     "Accruals to billing"
    ],
    "external_integrations": [
     "Accounting system (accruals)"
    ],
    "risks": [
     "Findings dismissed as unqualified",
     "False positives"
    ],
    "interfaces": [
     "FindingsMemo (deliverable)",
     "SavingsLedger (query)"
    ]
   },
   {
    "name": "Knowledge",
    "purpose": "Own versioned rulebooks, per-utility playbooks, rejection library, and de-identified benchmarks.",
    "subdomain": "Per-utility playbooks & rulebook knowledge",
    "type": "core",
    "owned_language": [
     "rulebook version",
     "effective date",
     "playbook",
     "rejection pattern",
     "benchmark observation",
     "hardening"
    ],
    "owns": [
     "Rule corpus with effective dates",
     "Playbook YAMLs",
     "Rejection library",
     "Benchmark store (aggregation policy)"
    ],
    "does_not_own": [
     "Clock instances",
     "Client-identifiable cost data exposure"
    ],
    "primary_actors": [
     "Founder (rule curation)",
     "Reviewer (playbook diffs)",
     "All agents (retrieval)"
    ],
    "entities": [
     "RuleVersion",
     "UtilityPlaybook",
     "RejectionEntry",
     "BenchmarkObservation"
    ],
    "value_objects": [
     "EffectiveDateRange",
     "RegimeTag",
     "PlaybookVersion"
    ],
    "aggregates": [
     "UtilityPlaybook (root: UtilityPlaybook)"
    ],
    "domain_services": [
     "RegimeClassifier",
     "PlaybookHardeningEvaluator",
     "DeidentificationPolicy"
    ],
    "application_services": [
     "PublishRuleVersion",
     "ApplyPlaybookDiff",
     "RecordRejection",
     "RecordBenchmarkObservation",
     "EvaluateHardening"
    ],
    "commands": [
     "PublishRuleVersion",
     "ApplyPlaybookDiff",
     "RecordRejection",
     "RecordBenchmark",
     "MarkPlaybookHardened"
    ],
    "domain_events": [
     "RuleVersionPublished",
     "PlaybookUpdated",
     "RejectionRecorded",
     "BenchmarkRecorded",
     "PlaybookHardened"
    ],
    "policies": [
     "Every rejection becomes a playbook diff or deterministic check within 48h",
     "Benchmarks stored de-identified; aggregation only"
    ],
    "specifications": [
     "PlaybookHardened (>=98% acceptance over 200+ poles)",
     "RuleInForceOnDate"
    ],
    "invariants": [
     "No rule without effective-date range and source pin",
     "No identifiable cross-client cost data leaves the store"
    ],
    "ai_agents": [],
    "human_roles": [
     "Founder (curation)",
     "Reviewer (playbook ownership)"
    ],
    "data_owned": [
     "Rule corpus",
     "Playbooks",
     "Rejection library",
     "Benchmark store"
    ],
    "inputs": [
     "Official requirements/tariffs",
     "Rejection data (Production)",
     "Cost observations (Audit)"
    ],
    "outputs": [
     "Retrieval to all agents",
     "Rule versions to Clock",
     "Checklists to Production"
    ],
    "external_integrations": [
     "FCC/state/NTIA source documents (pinned PDFs)"
    ],
    "risks": [
     "Staleness",
     "Mis-classified regime"
    ],
    "interfaces": [
     "PlaybookAPI (internal)",
     "RulebookAPI (internal, effective-date-aware)"
    ]
   },
   {
    "name": "Client & Reporting",
    "purpose": "Account relationships, weekly dashboards, milestone mapping, billing, waitlist.",
    "subdomain": "Client reporting & milestone mapping",
    "type": "supporting",
    "owned_language": [
     "milestone map",
     "weekly dashboard",
     "savings ledger",
     "waitlist position",
     "renewal"
    ],
    "owns": [
     "Client accounts",
     "Dashboards",
     "Milestone mappings",
     "Waitlist",
     "Invoices to client"
    ],
    "does_not_own": [
     "Event-log truth (other contexts own)",
     "Escalation approval (Clock owns)"
    ],
    "primary_actors": [
     "Account lead",
     "Client stakeholders",
     "Reporting generator"
    ],
    "entities": [
     "ClientAccount",
     "Segment",
     "MilestoneMap",
     "DashboardIssue",
     "WaitlistEntry"
    ],
    "value_objects": [
     "MilestoneRef",
     "ReportPeriod"
    ],
    "aggregates": [
     "ClientAccount (root: ClientAccount)"
    ],
    "domain_services": [
     "MilestoneMapper",
     "DashboardCompiler"
    ],
    "application_services": [
     "CompileWeeklyDashboard",
     "MapMilestones",
     "ManageWaitlist",
     "IssueClientInvoice",
     "RecordRenewal"
    ],
    "commands": [
     "CompileDashboard",
     "PublishDashboard",
     "AddToWaitlist",
     "IssueInvoice",
     "RecordRenewal"
    ],
    "domain_events": [
     "DashboardPublished",
     "MilestoneRiskFlagged",
     "WaitlistEntryAdded",
     "SegmentRenewed"
    ],
    "policies": [
     "Dashboard states only event-log facts",
     "Account lead reviews before send",
     "Pilot cap 3 enforced here"
    ],
    "specifications": [
     "MilestoneAtRisk",
     "PilotCapReached"
    ],
    "invariants": [
     "No dashboard claim without an event-log pointer",
     "Waitlist is dated and FIFO"
    ],
    "ai_agents": [
     "Status Narrative Agent (constrained to event log)"
    ],
    "human_roles": [
     "Account lead"
    ],
    "data_owned": [
     "Accounts",
     "Dashboards",
     "Waitlist",
     "Client invoices"
    ],
    "inputs": [
     "Events from all contexts",
     "Client milestone schedules"
    ],
    "outputs": [
     "Dashboards to clients",
     "Renewal signals to founder"
    ],
    "external_integrations": [
     "CRM",
     "Accounting",
     "E-sign"
    ],
    "risks": [
     "Report drift from truth",
     "Over-promising in narrative"
    ],
    "interfaces": [
     "WeeklyDashboard (deliverable)",
     "AccountStatus (query)"
    ]
   }
  ],
  "context_map": [
   {
    "upstream": "Intake",
    "downstream": "Permit Production",
    "pattern": "Customer-Supplier",
    "business_reason": "Production consumes normalized, confidence-gated batches.",
    "data_exchanged": [
     "NormalizedBatch",
     "AgreementRefs"
    ],
    "events_exchanged": [
     "IntakeCompleted",
     "PoleRecordNormalized"
    ],
    "contract_type": "Published schema (canonical pole record v1)",
    "failure_risks": [
     "Bad extraction propagates to packages"
    ],
    "acl_notes": "Production validates batch schema + confidence thresholds at the boundary.",
    "ownership_boundary": "Intake owns records; Production owns applications"
   },
   {
    "upstream": "Knowledge",
    "downstream": "Permit Production",
    "pattern": "Supplier (shared kernel avoided)",
    "business_reason": "Playbooks define required fields, exhibits, channels, fees.",
    "data_exchanged": [
     "PlaybookVersion",
     "GoldStandardChecklist"
    ],
    "events_exchanged": [
     "PlaybookUpdated"
    ],
    "contract_type": "Versioned playbook API",
    "failure_risks": [
     "Stale playbook -> rejection"
    ],
    "acl_notes": "Production pins playbook version per batch for auditability.",
    "ownership_boundary": "Knowledge owns content; Production owns execution"
   },
   {
    "upstream": "Permit Production",
    "downstream": "Clock Enforcement",
    "pattern": "Event-driven (open host)",
    "business_reason": "Submission events instantiate clocks.",
    "data_exchanged": [
     "ApplicationSubmitted payload (regime, tier, dates)"
    ],
    "events_exchanged": [
     "ApplicationSubmitted",
     "ApplicationAccepted",
     "ApplicationRejectedByUtility"
    ],
    "contract_type": "Event schema, versioned",
    "failure_risks": [
     "Missed event -> missing clock (critical)"
    ],
    "acl_notes": "Clock context re-validates regime/tier independently on instantiation.",
    "ownership_boundary": "Production owns submissions; Clock owns obligations"
   },
   {
    "upstream": "Knowledge",
    "downstream": "Clock Enforcement",
    "pattern": "Supplier",
    "business_reason": "Effective-date-aware rule versions drive computation.",
    "data_exchanged": [
     "RuleVersion",
     "RegimeTag"
    ],
    "events_exchanged": [
     "RuleVersionPublished"
    ],
    "contract_type": "Rulebook API with effective-date selection",
    "failure_risks": [
     "Wrong version -> wrong dates"
    ],
    "acl_notes": "Clock selects rules by event date, never query date; pinned per computation.",
    "ownership_boundary": "Knowledge owns text; Clock owns computed obligations"
   },
   {
    "upstream": "Clock Enforcement",
    "downstream": "Cost Audit",
    "pattern": "Customer-Supplier",
    "business_reason": "Estimate/invoice ingestion and the evidence spine flow from clock event handling.",
    "data_exchanged": [
     "EstimateDoc",
     "InvoiceDoc",
     "EvidencePointers"
    ],
    "events_exchanged": [
     "EstimateReceived"
    ],
    "contract_type": "Document + event handoff",
    "failure_risks": [
     "Unlinked invoice -> unaudited spend"
    ],
    "acl_notes": "Audit validates document-application linkage before reconciliation.",
    "ownership_boundary": "Clock owns events; Audit owns reconciliations"
   },
   {
    "upstream": "All contexts",
    "downstream": "Client & Reporting",
    "pattern": "Published Language (event log)",
    "business_reason": "Dashboards compile only from event-log facts.",
    "data_exchanged": [
     "Domain events (read-only)"
    ],
    "events_exchanged": [
     "All domain events"
    ],
    "contract_type": "Append-only event log, read models",
    "failure_risks": [
     "Narrative drift beyond log"
    ],
    "acl_notes": "Narrative agent hard-constrained to log-backed statements.",
    "ownership_boundary": "Contexts own truth; Reporting owns presentation"
   }
  ],
  "external_integrations": [
   {
    "system": "NJUNS",
    "risk": "Ticket semantics vary by member utility; no guaranteed API access",
    "internal_model": "ChannelSpec + SubmissionReceipt",
    "acl_strategy": "Channel adapter normalizes ticket states to internal application events; manual fallback documented per utility.",
    "owner_context": "Permit Production",
    "data_in": [
     "Ticket status"
    ],
    "data_out": [
     "Application packages"
    ],
    "trigger": "Submission + daily status sweep",
    "failure_strategy": "Manual portal check per SOP; ingestion gap alarm if no status for N days.",
    "audit_need": "Receipt + status snapshots archived per application."
   },
   {
    "system": "Alden One",
    "risk": "Access is utility/client-granted; automation limits unknown",
    "internal_model": "ChannelSpec + SubmissionReceipt",
    "acl_strategy": "Same adapter pattern; per-utility channel notes in playbook.",
    "owner_context": "Permit Production",
    "data_in": [
     "Application status",
     "Correspondence"
    ],
    "data_out": [
     "Application packages"
    ],
    "trigger": "Submission + sweep",
    "failure_strategy": "Manual fallback; SLA unchanged (human sweep).",
    "audit_need": "Snapshot archive."
   },
   {
    "system": "Utility proprietary portals / email / certified mail",
    "risk": "Total heterogeneity; some owners are paper-based",
    "internal_model": "ChannelSpec",
    "acl_strategy": "Playbook channel entry per owner; certified-mail receipts scanned and hashed.",
    "owner_context": "Permit Production",
    "data_in": [
     "Responses, estimates, invoices"
    ],
    "data_out": [
     "Packages, letters"
    ],
    "trigger": "Per playbook",
    "failure_strategy": "Escalate to phone contact per playbook; log everything.",
    "audit_need": "Full correspondence archive with dates."
   },
   {
    "system": "Client field-capture ecosystems (Katapult Pro, ikeGPS)",
    "risk": "Export format changes; client-side data quality",
    "internal_model": "Canonical pole record",
    "acl_strategy": "Format-specific extractors with validation harness; unknown formats to exception queue.",
    "owner_context": "Intake",
    "data_in": [
     "Survey exports"
    ],
    "data_out": [],
    "trigger": "Client upload",
    "failure_strategy": "Re-request in supported format; manual mapping as billed exception.",
    "audit_need": "Source-file hash in engagement manifest."
   },
   {
    "system": "E-sign + CRM + accounting",
    "risk": "Commodity SaaS outage",
    "internal_model": "Thin adapters",
    "acl_strategy": "No domain logic in vendor objects; IDs mapped internally.",
    "owner_context": "Client & Reporting",
    "data_in": [
     "Signatures, payments"
    ],
    "data_out": [
     "Letters for signature",
     "Invoices"
    ],
    "trigger": "Workflow",
    "failure_strategy": "Queue and retry; manual send with wet signature as last resort.",
    "audit_need": "Approval chains mirrored internally."
   }
  ],
  "event_storm": [
   {
    "seq": 1,
    "command": "SubmitIntakeItem",
    "event": "IntakeReceived",
    "actor": "Client coordinator",
    "context": "Intake",
    "aggregate": "Engagement",
    "policy": "Score on every receipt",
    "downstream": "ScoreIntake",
    "risk": "Partial data trickle"
   },
   {
    "seq": 2,
    "command": "ScoreIntake",
    "event": "IntakeCompleted",
    "actor": "System",
    "context": "Intake",
    "aggregate": "Engagement",
    "policy": "Production unblocks at 100",
    "downstream": "NormalizeBatch; SLA clock starts",
    "risk": "False-complete on mis-scored item"
   },
   {
    "seq": 3,
    "command": "NormalizePoleData",
    "event": "PoleRecordNormalized",
    "actor": "Extraction agent",
    "context": "Intake",
    "aggregate": "PoleRecord",
    "policy": "Low confidence -> exception queue",
    "downstream": "AssemblePackage",
    "risk": "Silent mis-extraction"
   },
   {
    "seq": 4,
    "command": "AssemblePackage",
    "event": "PackageAssembled",
    "actor": "Assembly agent",
    "context": "Permit Production",
    "aggregate": "Application",
    "policy": "Gate immediately",
    "downstream": "GatePackage",
    "risk": "Playbook staleness"
   },
   {
    "seq": 5,
    "command": "GatePackage",
    "event": "PackageGateBlocked | PackageGatePassed",
    "actor": "Rules engine",
    "context": "Permit Production",
    "aggregate": "Application",
    "policy": "Blocked -> ops fix loop",
    "downstream": "Reviewer QC",
    "risk": "Gate list incomplete for new utility"
   },
   {
    "seq": 6,
    "command": "ApprovePackage",
    "event": "PackageApproved",
    "actor": "OSP reviewer",
    "context": "Permit Production",
    "aggregate": "Application",
    "policy": "No submission without sign-off",
    "downstream": "SubmitApplication",
    "risk": "Reviewer bottleneck at volume"
   },
   {
    "seq": 7,
    "command": "SubmitApplication",
    "event": "ApplicationSubmitted",
    "actor": "Desk ops",
    "context": "Permit Production",
    "aggregate": "Application",
    "policy": "Receipt archived; clocks instantiate",
    "downstream": "InstantiateClocks",
    "risk": "Channel failure unnoticed"
   },
   {
    "seq": 8,
    "command": "InstantiateClocks",
    "event": "ClockInstantiated",
    "actor": "Rule engine",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "policy": "Rule version pinned by event date",
    "downstream": "DailySweep",
    "risk": "Wrong regime classification"
   },
   {
    "seq": 9,
    "command": "RecordUtilityEvent",
    "event": "ClockSatisfied | ClockBreached",
    "actor": "Sweep + ingestion",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "policy": "Breach -> same-day artifact",
    "downstream": "DraftEscalation",
    "risk": "Ingestion gap = silent breach"
   },
   {
    "seq": 10,
    "command": "DraftEscalation",
    "event": "EscalationDrafted",
    "actor": "Correspondence agent",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "policy": "Facts/dates/citations only",
    "downstream": "ApproveEscalation",
    "risk": "Boundary creep in drafting"
   },
   {
    "seq": 11,
    "command": "ApproveEscalation",
    "event": "EscalationSent",
    "actor": "Account lead + client signature",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "policy": "No approval, no send",
    "downstream": "Ledger annotation; Reporting",
    "risk": "Client signature latency"
   },
   {
    "seq": 12,
    "command": "ReviewEstimate",
    "event": "EstimateReviewed",
    "actor": "Reconciliation agent + reviewer",
    "context": "Cost Audit",
    "aggregate": "Reconciliation",
    "policy": "Review before client accepts",
    "downstream": "Client acceptance decision",
    "risk": "Estimate arrives outside tracked channels"
   },
   {
    "seq": 13,
    "command": "ReconcileInvoice",
    "event": "InvoiceReconciled",
    "actor": "Reconciliation agent",
    "context": "Cost Audit",
    "aggregate": "Reconciliation",
    "policy": "Findings human-validated",
    "downstream": "PresentFindings",
    "risk": "False positives"
   },
   {
    "seq": 14,
    "command": "RecordDocumentedSavings",
    "event": "SavingsDocumented",
    "actor": "Reviewer",
    "context": "Cost Audit",
    "aggregate": "Reconciliation",
    "policy": "Written correction required",
    "downstream": "Contingency accrual; benchmark update",
    "risk": "Ambiguous utility credit language"
   },
   {
    "seq": 15,
    "command": "CompileDashboard",
    "event": "DashboardPublished",
    "actor": "Reporting generator + account lead",
    "context": "Client & Reporting",
    "aggregate": "ClientAccount",
    "policy": "Event-log facts only",
    "downstream": "Client + lender visibility",
    "risk": "Narrative drift"
   }
  ],
  "critical_path": [
   "IntakeCompleted -> PoleRecordNormalized -> PackageAssembled -> PackageApproved -> ApplicationSubmitted -> ClockInstantiated -> (utility events) -> permits granted, with same-day breach enforcement at every missed obligation"
  ],
  "exception_flows": [
   "Extraction confidence below threshold -> exception queue -> human re-key from source -> record re-enters gating",
   "Completeness gate block -> ops fix loop with reason codes -> re-gate -> reviewer QC",
   "Utility completeness rejection despite gates -> 48-hour postmortem -> playbook diff / new deterministic check -> refund evaluation per guarantee",
   "Ambiguous utility requirement -> ambiguous-requirement queue (2-day SLA) -> utility query or counsel-safe interpretation -> playbook entry"
  ],
  "escalation_flows": [
   "ClockBreached -> reminder (collegial) -> formal notice with citation -> rights election (self-help / deemed approval) -> counsel handoff with evidence file — each rung account-lead approved, client-signed",
   "ComputationDivergenceDetected -> outbound correspondence halted -> founder investigation -> postmortem -> new red-team scenario",
   "Exception rate >15% on a utility after 90 days -> playbook hardening sprint (not more reviewer minutes)",
   "Conflict of interest detected -> founder screening decision -> disclosure or declination, documented"
  ],
  "retry_flows": [
   "Portal submission failure -> retry with backoff -> alternate channel per playbook (email/certified mail) -> receipt archived either way",
   "Status-sweep ingestion failure -> freshness alarm at N hours -> manual portal check per SOP -> gap logged",
   "E-sign bounce -> resend -> phone follow-up -> wet-signature fallback for time-critical letters"
  ],
  "manual_override_flows": [
   "Completeness-gate override: founder-only, logged with justification, flagged in QC sampling",
   "Ladder-rung skip (straight to formal notice): founder sign-off, documented utility-history justification",
   "Clock manual adjustment (e.g., agreed tolling): requires source document reference + dual-entry confirmation"
  ],
  "commands": [
   {
    "name": "SubmitIntakeItem",
    "issued_by": "Client coordinator",
    "preconditions": [
     "Engagement active",
     "NDA + authority-to-act on file"
    ],
    "aggregate": "Engagement",
    "success_event": "IntakeReceived",
    "failure_event": "IntakeItemRejected (format/virus)",
    "authorization": "Client-scoped portal auth",
    "validation": "File type, integrity, engagement linkage",
    "audit": "Source hash in manifest"
   },
   {
    "name": "ApprovePackage",
    "issued_by": "OSP-fluent reviewer",
    "preconditions": [
     "Gate passed",
     "Gold-standard checklist complete"
    ],
    "aggregate": "Application",
    "success_event": "PackageApproved",
    "failure_event": "PackageRejectedToOps",
    "authorization": "Named reviewer role only",
    "validation": "Checklist items all affirmed",
    "audit": "Signed QC record with reviewer identity"
   },
   {
    "name": "SubmitApplication",
    "issued_by": "Desk ops",
    "preconditions": [
     "PackageApproved",
     "Channel credentials valid",
     "Fees calculated"
    ],
    "aggregate": "Application",
    "success_event": "ApplicationSubmitted",
    "failure_event": "SubmissionFailed",
    "authorization": "Ops role; hash equality with signed artifact enforced",
    "validation": "Artifact hash matches approval record",
    "audit": "Receipt + timestamp archived"
   },
   {
    "name": "DeclareBreach",
    "issued_by": "Daily sweep (system)",
    "preconditions": [
     "Obligation overdue per pinned rule version",
     "No tolling event"
    ],
    "aggregate": "ClockLedger",
    "success_event": "ClockBreached",
    "failure_event": "BreachSuppressed (tolling found)",
    "authorization": "System; human notification mandatory",
    "validation": "Dual computation agreement",
    "audit": "Citation + computation inputs logged"
   },
   {
    "name": "ApproveEscalation",
    "issued_by": "Account lead",
    "preconditions": [
     "EscalationDrafted",
     "Ladder stage correct",
     "Template family matched"
    ],
    "aggregate": "ClockLedger",
    "success_event": "EscalationSent (after client signature)",
    "failure_event": "EscalationReturnedToDraft",
    "authorization": "Account lead role; client signature via e-sign",
    "validation": "Facts/dates/citations only; no legal conclusions",
    "audit": "Approval chain + sent artifact archived"
   },
   {
    "name": "RecordDocumentedSavings",
    "issued_by": "Reviewer",
    "preconditions": [
     "Utility written correction/credit on file"
    ],
    "aggregate": "Reconciliation",
    "success_event": "SavingsDocumented",
    "failure_event": "SavingsRejected (documentation insufficient)",
    "authorization": "Reviewer role; account lead co-sign above $10k",
    "validation": "Correction artifact references the flagged lines",
    "audit": "Correction doc hashed; accrual linked"
   }
  ],
  "policies": [
   {
    "name": "No-unsigned-outbound",
    "trigger": "Any submission or letter dispatch",
    "condition": "Missing reviewer sign-off (packages) or account-lead approval + client signature (letters)",
    "action": "Block dispatch; alert owner",
    "context": "Permit Production / Clock Enforcement",
    "ai_involvement": "None — hard gate",
    "human_approval": true
   },
   {
    "name": "Same-day-breach-response",
    "trigger": "ClockBreached",
    "condition": "Business day",
    "action": "Draft correct ladder artifact; notify account lead + client",
    "context": "Clock Enforcement",
    "ai_involvement": "Drafting only",
    "human_approval": true
   },
   {
    "name": "48-hour-postmortem",
    "trigger": "ApplicationRejectedByUtility | missed detection",
    "condition": "Always",
    "action": "Written postmortem; fix ships as deterministic check or playbook diff",
    "context": "Permit Production / Knowledge",
    "ai_involvement": "Draft assistance",
    "human_approval": true
   },
   {
    "name": "Divergence-halt",
    "trigger": "ComputationDivergenceDetected",
    "condition": "Any disagreement between rule engine and nightly recompute",
    "action": "Halt outbound correspondence; founder investigation",
    "context": "Clock Enforcement",
    "ai_involvement": "None",
    "human_approval": true
   },
   {
    "name": "Written-correction-fee-rule",
    "trigger": "Contingency accrual attempt",
    "condition": "No utility written correction on file",
    "action": "Block accrual",
    "context": "Cost Audit",
    "ai_involvement": "None",
    "human_approval": true
   }
  ],
  "aggregates": [
   {
    "name": "Engagement",
    "root": "Engagement",
    "context": "Intake",
    "purpose": "One client build segment's intake truth: items, scores, manifest.",
    "entities": [
     "Engagement",
     "IntakeItem",
     "SourceDocument"
    ],
    "value_objects": [
     "CompletenessScore",
     "ManifestHash"
    ],
    "invariants": [
     "Score 100 required before production",
     "Every source hashed"
    ],
    "commands": [
     "SubmitIntakeItem",
     "ScoreIntake",
     "RequestGapItems"
    ],
    "events": [
     "IntakeReceived",
     "IntakeCompleted"
    ],
    "repository": "EngagementRepo (Postgres, event-sourced)",
    "transaction_boundary": "Per engagement"
   },
   {
    "name": "PoleRecord",
    "root": "PoleRecord",
    "context": "Intake",
    "purpose": "Canonical confidence-scored record per pole.",
    "entities": [
     "PoleRecord"
    ],
    "value_objects": [
     "ConfidenceScore",
     "GPSPoint",
     "RegimeTag"
    ],
    "invariants": [
     "No below-threshold unreviewed field passes gating"
    ],
    "commands": [
     "NormalizePoleData",
     "ResolveExtractionException"
    ],
    "events": [
     "PoleRecordNormalized"
    ],
    "repository": "PoleRecordRepo",
    "transaction_boundary": "Per pole record"
   },
   {
    "name": "Application",
    "root": "Application",
    "context": "Permit Production",
    "purpose": "One utility application: package, gate state, QC, submission.",
    "entities": [
     "Application",
     "PackageExhibit",
     "QCRecord",
     "SubmissionReceipt"
    ],
    "value_objects": [
     "TierClassification",
     "ChannelSpec"
    ],
    "invariants": [
     "Submitted artifact hash = signed artifact hash",
     "Tier + regime always present"
    ],
    "commands": [
     "AssemblePackage",
     "GatePackage",
     "ApprovePackage",
     "SubmitApplication"
    ],
    "events": [
     "PackageAssembled",
     "PackageApproved",
     "ApplicationSubmitted"
    ],
    "repository": "ApplicationRepo",
    "transaction_boundary": "Per application"
   },
   {
    "name": "ClockLedger",
    "root": "ClockLedger",
    "context": "Clock Enforcement",
    "purpose": "All obligations, breaches, and enforcement artifacts for one application.",
    "entities": [
     "ClockInstance",
     "BreachEvent",
     "EscalationLetter",
     "RightsElection"
    ],
    "value_objects": [
     "RuleCitation",
     "DueDate",
     "LadderStage"
    ],
    "invariants": [
     "No LLM-originated dates",
     "No dispatch without approvals",
     "Every breach cites its rule"
    ],
    "commands": [
     "InstantiateClocks",
     "RecordUtilityEvent",
     "DeclareBreach",
     "DraftEscalation",
     "ApproveEscalation"
    ],
    "events": [
     "ClockInstantiated",
     "ClockBreached",
     "EscalationSent"
    ],
    "repository": "ClockLedgerRepo (append-only)",
    "transaction_boundary": "Per application ledger"
   },
   {
    "name": "Reconciliation",
    "root": "Reconciliation",
    "context": "Cost Audit",
    "purpose": "Estimate-invoice-benchmark reconciliation for one invoice.",
    "entities": [
     "EstimateDoc",
     "InvoiceDoc",
     "ReconLine",
     "FindingsMemo",
     "SavingsRecord"
    ],
    "value_objects": [
     "CostCategory",
     "EligibilityFlag"
    ],
    "invariants": [
     "No accrual without written correction",
     "Every flag has category + reason + evidence"
    ],
    "commands": [
     "ReconcileInvoice",
     "ValidateFinding",
     "RecordDocumentedSavings"
    ],
    "events": [
     "InvoiceReconciled",
     "SavingsDocumented"
    ],
    "repository": "ReconciliationRepo",
    "transaction_boundary": "Per invoice"
   },
   {
    "name": "UtilityPlaybook",
    "root": "UtilityPlaybook",
    "context": "Knowledge",
    "purpose": "Versioned requirements + rejection history + hardening state per pole owner.",
    "entities": [
     "UtilityPlaybook",
     "RejectionEntry"
    ],
    "value_objects": [
     "PlaybookVersion",
     "RegimeTag"
    ],
    "invariants": [
     "Every diff traceable to a rejection/resolution",
     "Hardened only at >=98%/200+ poles"
    ],
    "commands": [
     "ApplyPlaybookDiff",
     "RecordRejection",
     "MarkPlaybookHardened"
    ],
    "events": [
     "PlaybookUpdated",
     "PlaybookHardened"
    ],
    "repository": "PlaybookRepo (git-backed YAML)",
    "transaction_boundary": "Per playbook"
   },
   {
    "name": "ClientAccount",
    "root": "ClientAccount",
    "context": "Client & Reporting",
    "purpose": "Account, segments, milestone maps, dashboards, billing.",
    "entities": [
     "ClientAccount",
     "Segment",
     "MilestoneMap",
     "DashboardIssue"
    ],
    "value_objects": [
     "ReportPeriod",
     "MilestoneRef"
    ],
    "invariants": [
     "Dashboard claims backed by event-log pointers",
     "Pilot cap enforced"
    ],
    "commands": [
     "CompileDashboard",
     "IssueInvoice",
     "RecordRenewal"
    ],
    "events": [
     "DashboardPublished",
     "SegmentRenewed"
    ],
    "repository": "ClientAccountRepo",
    "transaction_boundary": "Per account"
   }
  ],
  "invariants": [
   {
    "invariant": "No clock date is ever computed by an LLM",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "why": "A wrong date can forfeit client rights or trigger a bad-faith escalation — the desk's critical risk.",
    "enforcement": "Architecture: date math exists only in the pure-code rule engine; prompts have no date-arithmetic tools; dual nightly recompute."
   },
   {
    "invariant": "Nothing is submitted to a utility without a named reviewer's sign-off",
    "context": "Permit Production",
    "aggregate": "Application",
    "why": "First-pass acceptance is the contractual promise; a defective application restarts the clock.",
    "enforcement": "Submission action gated on QC record; hash equality between signed and submitted artifacts."
   },
   {
    "invariant": "No enforcement letter leaves without account-lead approval and client signature",
    "context": "Clock Enforcement",
    "aggregate": "ClockLedger",
    "why": "UPL boundary + utility relationship protection.",
    "enforcement": "Dispatch gated on approval chain; e-sign completion required."
   },
   {
    "invariant": "Contingency fees accrue only on utility written corrections",
    "context": "Cost Audit",
    "aggregate": "Reconciliation",
    "why": "Ethical guardrail against overstated findings; keeps the audit honest.",
    "enforcement": "Accrual command validates correction artifact linkage."
   },
   {
    "invariant": "Every rule version carries an effective-date range and source pin",
    "context": "Knowledge",
    "aggregate": "UtilityPlaybook/RuleVersion",
    "why": "Staged effective dates (Sept 2025 -> May 2026) make date-of-event rule selection mandatory.",
    "enforcement": "Schema constraint; computation refuses unpinned rules."
   },
   {
    "invariant": "No identifiable cross-client utility cost data is ever disclosed",
    "context": "Knowledge / Cost Audit",
    "aggregate": "BenchmarkObservation",
    "why": "NDA obligations and trust in a small industry.",
    "enforcement": "De-identification at write; aggregation-only benchmark API."
   }
  ],
  "ai_agents": [
   {
    "name": "Survey Extraction Agent",
    "context": "Intake",
    "responsibility": "Map field survey exports, maps, and agreements to canonical confidence-scored records.",
    "inputs": [
     "Katapult/ikeGPS exports",
     "CSV/XLSX sheets",
     "Agreement PDFs"
    ],
    "outputs": [
     "Canonical pole records",
     "Per-field confidence scores",
     "Ambiguity items"
    ],
    "tools": [
     "Schema-constrained extraction",
     "Format validators"
    ],
    "forbidden_actions": [
     "Inferring values absent from source",
     "Resolving ambiguities silently",
     "Writing to any store but staging",
     "Any date arithmetic"
    ],
    "memory_scope": "Per-engagement only",
    "retrieval_sources": [
     "Format specs",
     "Client engagement manifest"
    ],
    "validations": [
     "Schema validation",
     "Confidence thresholds",
     "Cross-field consistency checks"
    ],
    "confidence_scoring": "Per-field 0-1; <0.80 routes to exception queue",
    "escalation_triggers": [
     "Unknown format",
     "Field confidence <0.80",
     "Agreement clause ambiguity"
    ],
    "human_approval": true,
    "failure_modes": [
     "Silent mis-extraction",
     "Format drift",
     "Hallucinated pole IDs"
    ],
    "audit_logs": [
     "Source hash",
     "Extraction output hash",
     "Confidence vector",
     "Exception routing"
    ],
    "metrics": [
     "Extraction accuracy vs re-keyed sample",
     "Exception rate",
     "Fields/minute",
     "Format coverage"
    ],
    "versioning": "Prompt + extractor version pinned per batch in git"
   },
   {
    "name": "Package Assembly & Correspondence Agent",
    "context": "Permit Production / Clock Enforcement",
    "responsibility": "Fill utility application forms from canonical records per playbook; draft ladder correspondence from rule-engine outputs.",
    "inputs": [
     "Canonical records",
     "Playbook version",
     "Rule-engine computed obligations"
    ],
    "outputs": [
     "Completed form field maps + exhibit checklists",
     "Draft letters (reminder/notice/election/meet-and-confer)"
    ],
    "tools": [
     "Playbook retrieval",
     "Template families",
     "Document generation"
    ],
    "forbidden_actions": [
     "Resolving playbook-data conflicts silently",
     "Legal conclusions or threats in letters",
     "Computing any deadline",
     "Sending anything"
    ],
    "memory_scope": "Per-application",
    "retrieval_sources": [
     "Playbook API (pinned version)",
     "Rulebook API (citation text)",
     "Gold-standard library"
    ],
    "validations": [
     "Deterministic completeness gate downstream",
     "Template-family conformance check",
     "Citation matches rule-engine output"
    ],
    "confidence_scoring": "Package-level score; ambiguities emitted as items, never resolved",
    "escalation_triggers": [
     "Playbook conflict",
     "Missing required exhibit",
     "Novel correspondence situation outside template families"
    ],
    "human_approval": true,
    "failure_modes": [
     "Stale playbook application",
     "Tone drift in letters",
     "Boundary creep"
    ],
    "audit_logs": [
     "Playbook version used",
     "Draft hash",
     "Reviewer/lead decisions",
     "Template family + deviations"
    ],
    "metrics": [
     "Gate pass rate",
     "First-pass acceptance",
     "Draft acceptance rate by account lead",
     "Assembly minutes/application"
    ],
    "versioning": "Prompts versioned; eval harness re-scores on any change"
   },
   {
    "name": "Reconciliation Agent",
    "context": "Cost Audit",
    "responsibility": "Line-match invoices to estimates; classify cost categories; flag eligibility issues against standards and benchmarks.",
    "inputs": [
     "Estimate docs",
     "Invoice docs",
     "Benchmark table",
     "FCC cost-standard category definitions"
    ],
    "outputs": [
     "Reconciliation worksheets",
     "Draft findings with reason codes"
    ],
    "tools": [
     "Table extraction",
     "Benchmark comparison",
     "Flag taxonomy"
    ],
    "forbidden_actions": [
     "Engineering judgments (necessity of work)",
     "Presenting findings directly to clients",
     "Estimating savings without line evidence",
     "Accruing fees"
    ],
    "memory_scope": "Per-reconciliation",
    "retrieval_sources": [
     "Benchmark store (aggregated)",
     "Precedent category notes (Comcast-APCo taxonomy)"
    ],
    "validations": [
     "Line-total arithmetic recomputed in code",
     "Every flag carries category + reason + evidence pointer"
    ],
    "confidence_scoring": "Per-flag confidence; low-confidence flags marked for reviewer attention",
    "escalation_triggers": [
     "Novel cost category",
     "Structural/engineering question",
     "Savings claim >$10k on one line"
    ],
    "human_approval": true,
    "failure_modes": [
     "False-positive flags",
     "Category misclassification",
     "Missed lines"
    ],
    "audit_logs": [
     "Worksheet hash",
     "Flag reasons",
     "Reviewer validation decisions"
    ],
    "metrics": [
     "Client-accepted finding rate",
     "False-positive rate",
     "Documented savings per audited invoice",
     "Minutes/invoice"
    ],
    "versioning": "Prompt + taxonomy versioned; quarterly eval against graded reconciliations"
   }
  ],
  "prompt_chain_map": [
   "Intake: extraction prompt (schema-constrained) -> confidence gate (code) -> exception queue (human) — no chaining without a deterministic checkpoint between stages",
   "Production: assembly prompt (playbook-pinned) -> completeness gate (code) -> reviewer QC (human) -> submission (code-gated)",
   "Enforcement: rule engine (code) -> correspondence prompt (citation-injected) -> account-lead approval (human) -> e-sign (client)",
   "Audit: table extraction -> line matcher (code arithmetic) -> flag classification prompt -> reviewer validation (human)"
  ],
  "rag_map": [
   "Rulebook API: effective-date-aware retrieval of FCC/state/NTIA rule text with citations — consumed by correspondence drafting for citation text only (never for date math)",
   "Playbook API: pinned-version utility requirements, exhibits, channels, rejection patterns — consumed by assembly and gate construction",
   "Gold-standard library: accepted packages per utility as few-shot exemplars for assembly",
   "Benchmark store: aggregated cost observations by utility type and category — consumed by reconciliation flagging"
  ],
  "ai_evaluation": [
   "Extraction accuracy suite: re-keyed ground-truth sample per format; accuracy >=99% on required fields before a format is trusted",
   "Assembly eval: graded historical packages re-scored on any prompt/model change; regression = no cutover",
   "Correspondence eval: template-family conformance + boundary-language linter (no legal conclusions) on every draft",
   "Reconciliation eval: quarterly graded set of reconciliations; client-accepted finding rate tracked as the production metric",
   "Model portability drill: quarterly re-run of full eval harness on >=2 alternate frontier models"
  ],
  "hallucination_controls": [
   "Extraction may never infer absent values — MISSING is a valid and expected output",
   "All deadline math in pure code; prompts receive computed dates as inputs, never produce them",
   "Correspondence citations injected from the rule engine; drafts failing citation-match are rejected automatically",
   "Status narratives constrained to event-log facts; forbidden from stating anything without a log pointer",
   "Line arithmetic recomputed in code; agent totals are never trusted"
  ],
  "human_in_the_loop_plan": [
   "Chokepoint 1: named OSP-fluent reviewer signs every package pre-submission (100% at launch; risk-tiered sampling only after >=98% acceptance over 200+ poles per utility; new utilities always 100%)",
   "Chokepoint 2: account lead approves every escalation; client signs; zero autonomous sends — permanent, not phase-gated",
   "Exception queues with named owners and SLAs (ambiguous requirements 2 days; low-confidence extractions 1 day; breaches same day; contested costs 3 days)",
   "Contested findings human-validated before any client presentation"
  ],
  "ai_audit_plan": [
   "Every agent action logs: input hashes, prompt version, model ID, output hash, downstream human decision",
   "Weekly sampling audit of auto-passed extractions and gated packages by the reviewer",
   "Monthly boundary audit: random sample of letters checked against facts/dates/citations-only rule",
   "Quarterly red-team: adversarial clock scenarios + prompt-injection attempts via crafted utility correspondence"
  ],
  "prompt_versioning": "All prompts, template families, and flag taxonomies live in git with semantic versions; every production artifact records the versions used; changes require eval re-run and founder sign-off; rollback is a version pin.",
  "human_roles": [
   {
    "role": "OSP-fluent reviewer",
    "responsibilities": [
     "Package QC sign-off",
     "Exception resolution",
     "Playbook diffs",
     "Finding validation"
    ],
    "contexts": [
     "Permit Production",
     "Intake",
     "Cost Audit"
    ],
    "decisions_owned": [
     "Package pass/fail",
     "Extraction exception resolution",
     "Finding validity"
    ],
    "ai_support": [
     "Pre-gated packages",
     "Confidence-flagged fields",
     "Draft findings with reason codes"
    ],
    "approval_authority": "Submission-blocking",
    "escalation_authority": "To account lead / founder",
    "quality_metrics": [
     "First-pass acceptance",
     "Review minutes/package"
    ],
    "workload_risks": [
     "Volume spikes before reviewer #2"
    ]
   },
   {
    "role": "Account lead (founder at launch)",
    "responsibilities": [
     "Escalation approval",
     "Client relationships",
     "Milestone reviews",
     "Counsel handoffs"
    ],
    "contexts": [
     "Clock Enforcement",
     "Client & Reporting"
    ],
    "decisions_owned": [
     "Escalation tone/timing",
     "Ladder progression",
     "Findings presentation"
    ],
    "ai_support": [
     "Same-day drafts with citations",
     "Dashboard compilation"
    ],
    "approval_authority": "Dispatch-blocking on all letters",
    "escalation_authority": "Counsel handoff; founder for ladder exceptions",
    "quality_metrics": [
     "Renewal rate",
     "Utility response rate to ladder"
    ],
    "workload_risks": [
     "Founder bottleneck at >3 clients"
    ]
   },
   {
    "role": "Desk ops",
    "responsibilities": [
     "Portal submissions",
     "Status sweeps",
     "Intake shepherding",
     "Receipt archiving"
    ],
    "contexts": [
     "Intake",
     "Permit Production"
    ],
    "decisions_owned": [
     "Channel selection per playbook",
     "Retry/fallback execution"
    ],
    "ai_support": [
     "Normalization",
     "Status ingestion"
    ],
    "approval_authority": "None (executes signed work)",
    "escalation_authority": "To reviewer",
    "quality_metrics": [
     "Submission SLA",
     "Sweep freshness"
    ],
    "workload_risks": [
     "Manual portal work at launch"
    ]
   },
   {
    "role": "Outside telecom counsel (contracted)",
    "responsibilities": [
     "Template review (annual + new families)",
     "Engagement-letter boundary language",
     "Complaint handoffs (client-engaged)"
    ],
    "contexts": [
     "Clock Enforcement (templates)",
     "Compliance"
    ],
    "decisions_owned": [
     "Boundary language",
     "Template approval"
    ],
    "ai_support": [
     "None (reviews human-curated templates)"
    ],
    "approval_authority": "Template veto",
    "escalation_authority": "n/a",
    "quality_metrics": [
     "Zero UPL incidents"
    ],
    "workload_risks": [
     "Availability at launch week"
    ]
   }
  ],
  "human_review_checkpoints": [
   "Pre-submission package sign-off (per batch, named reviewer, checklist-recorded)",
   "Escalation approval + client signature (per letter, approval chain archived)",
   "Contested-finding validation before client presentation",
   "New-utility/new-state regime classification confirmation (first occurrence human-confirmed)",
   "Weekly dashboard review by account lead before send"
  ],
  "escalation_matrix": [
   "Reviewer -> Account lead: ambiguous requirements unresolved in SLA; suspected playbook gap; finding disputes",
   "Account lead -> Founder: ladder-rung skips; conflict-of-interest; divergence alarms; refund decisions",
   "Founder -> Outside counsel: complaint-warranted disputes (client-engaged); boundary questions; template changes",
   "Anyone -> Founder immediately: suspected clock error, data incident, or boundary breach"
  ],
  "manual_override_rules": [
   "Gate overrides: founder-only, logged, sampled in QA — expected to be rare enough that each one is reviewed",
   "Clock adjustments (tolling agreements, amended applications): dual-entry with source-document reference"
  ],
  "separation_of_duties": [
   "Drafter (AI) ≠ approver (human) ≠ sender (ops, gated on approvals) on every outbound artifact; savings validator (reviewer) ≠ fee accruer (system, artifact-gated) ≠ invoice issuer (account lead)"
  ],
  "quality_control_workflow": [
   "100% package review at launch -> risk-tiered sampling per hardened playbook -> weekly sampling audit of auto-passed work",
   "Nightly dual clock recompute -> divergence alarm -> halt + investigate -> postmortem-to-rule",
   "48-hour postmortem on any rejection/missed event -> fix ships as deterministic check or playbook diff -> red-team scenario added quarterly"
  ],
  "data_objects": [
   {
    "name": "Canonical pole record",
    "meaning": "Normalized truth for one pole in one engagement",
    "owner_context": "Intake",
    "writers": [
     "Extraction agent (staging)",
     "Reviewer (exceptions)"
    ],
    "readers": [
     "Production",
     "Clock",
     "Reporting"
    ],
    "source_of_truth": "PoleRecordRepo",
    "retention": "Engagement + 7 years (evidence file)",
    "privacy": "Confidential (client build data)",
    "audit": true
   },
   {
    "name": "Application package",
    "meaning": "Submitted artifact + exhibits + receipts",
    "owner_context": "Permit Production",
    "writers": [
     "Assembly agent (draft)",
     "Ops (submission)"
    ],
    "readers": [
     "Clock",
     "Reporting",
     "Counsel handoff"
    ],
    "source_of_truth": "ApplicationRepo + object store (hashed)",
    "retention": "7 years",
    "privacy": "Confidential",
    "audit": true
   },
   {
    "name": "Clock ledger",
    "meaning": "Every obligation, event, breach, and enforcement artifact per application",
    "owner_context": "Clock Enforcement",
    "writers": [
     "Rule engine only"
    ],
    "readers": [
     "Reporting",
     "Audit",
     "Counsel handoff"
    ],
    "source_of_truth": "Append-only event log",
    "retention": "7 years",
    "privacy": "Confidential",
    "audit": true
   },
   {
    "name": "Reconciliation worksheet",
    "meaning": "Line-level estimate/invoice/benchmark comparison with flags",
    "owner_context": "Cost Audit",
    "writers": [
     "Reconciliation agent (draft)",
     "Reviewer (validation)"
    ],
    "readers": [
     "Client (via findings memo)",
     "Benchmark store (de-identified)"
    ],
    "source_of_truth": "ReconciliationRepo",
    "retention": "7 years",
    "privacy": "Restricted (dispute evidence)",
    "audit": true
   },
   {
    "name": "Utility playbook",
    "meaning": "Versioned requirements + rejection history per pole owner",
    "owner_context": "Knowledge",
    "writers": [
     "Reviewer (diffs)",
     "Founder (curation)"
    ],
    "readers": [
     "All agents",
     "QC"
    ],
    "source_of_truth": "Git-backed YAML",
    "retention": "Permanent (the moat)",
    "privacy": "Internal",
    "audit": true
   },
   {
    "name": "Benchmark observation",
    "meaning": "De-identified cost data point (utility type x category x rate)",
    "owner_context": "Knowledge",
    "writers": [
     "Audit (via de-identification policy)"
    ],
    "readers": [
     "Reconciliation agent (aggregated)"
    ],
    "source_of_truth": "Benchmark store",
    "retention": "Permanent, aggregated",
    "privacy": "Internal (de-identified at write)",
    "audit": true
   }
  ],
  "read_models": [
   "ClockLedgerView: per-client, per-application obligations with due dates, statuses, citations — powers the daily sweep UI and dashboards",
   "BatchStatusBoard: applications by pipeline stage with SLA timers — desk ops daily driver",
   "ExceptionQueues: by type with age and owner — reviewer daily driver",
   "SavingsLedger: documented savings and accruals per client — billing + proof",
   "PlaybookHealth: per-utility acceptance rate, exception rate, hardening status"
  ],
  "reporting_models": [
   "WeeklyClientDashboard: permit status vs construction milestones, clock events with citations, actions awaiting signature, savings ledger",
   "MonthlyOpsReview: minutes/pole by stage, COGS/pole, first-pass acceptance per utility, rework rate, exception rates, audit findings acceptance"
  ],
  "data_duplication_notes": [
   "Rule citations are duplicated into clock instances (denormalized) so ledger rows remain self-explanatory in exports and evidence files — refreshed only by re-computation, never edited in place",
   "Playbook version is copied onto each application for auditability even after playbooks evolve"
  ],
  "data_retention": [
   "Evidence files (applications, ledgers, correspondence, reconciliations): 7 years or per engagement letter, then client handover/destruction per contract",
   "Playbooks and de-identified benchmarks: permanent (desk assets, no client data)",
   "Client source documents: returned/destroyed at termination per engagement letter"
  ],
  "data_quality_risks": [
   "Client field-survey quality bounds extraction accuracy — mitigated by confidence gates and billed re-survey requests",
   "Utility correspondence arriving outside tracked channels creates ledger blind spots — mitigated by client-forwarding SOP and weekly reconciliation prompts",
   "Benchmark small-n in early months — findings framed on standards/precedent first, benchmarks second"
  ],
  "use_cases": [
   {
    "name": "Produce and submit a first-pass-complete application batch",
    "actor": "Desk (reviewer + agents + ops)",
    "context": "Permit Production",
    "goal": "Batch submitted <=10 business days from complete intake with zero completeness defects",
    "preconditions": [
     "IntakeCompleted",
     "Playbook active for pole owner",
     "Stamped engineering docs on file where required"
    ],
    "main_flow": [
     "Normalize batch to canonical records",
     "Classify regime + tier; calendar advance notices if required",
     "Assemble package per playbook",
     "Run deterministic completeness gate",
     "Reviewer QC against gold standard; sign",
     "Submit via correct channel; archive receipt; instantiate clocks"
    ],
    "alternative_flows": [
     "Gate blocks -> ops fix loop with reason codes",
     "Reviewer rejects -> reassembly with playbook diff",
     "Channel failure -> fallback channel per playbook"
    ],
    "business_rules": [
     "No submission without sign-off",
     "Advance-notice obligations calendared before submission"
    ],
    "ai_role": "Extraction, assembly, drafting",
    "human_role": "QC sign-off, exception resolution",
    "commands": [
     "NormalizePoleData",
     "AssemblePackage",
     "GatePackage",
     "ApprovePackage",
     "SubmitApplication"
    ],
    "events": [
     "PoleRecordNormalized",
     "PackageAssembled",
     "PackageApproved",
     "ApplicationSubmitted",
     "ClockInstantiated"
    ],
    "aggregates": [
     "PoleRecord",
     "Application",
     "ClockLedger"
    ],
    "success": "Utility accepts application as complete; clocks running",
    "failure_handling": "Completeness rejection triggers 48h postmortem + refund evaluation + playbook diff",
    "audit": "Full package, gate results, QC record, receipt archived with hashes"
   },
   {
    "name": "Detect and enforce a blown utility deadline",
    "actor": "Desk (sweep + account lead) + client signer",
    "context": "Clock Enforcement",
    "goal": "Every breach actioned within 1 business day with the correct ladder artifact",
    "preconditions": [
     "Clocks instantiated",
     "Event ingestion current (freshness check passing)"
    ],
    "main_flow": [
     "Daily sweep computes obligation status from pinned rules",
     "Breach declared with citation + evidence pointer",
     "Correct ladder artifact drafted same day",
     "Account lead approves; client signs via e-sign",
     "Letter dispatched and archived; ledger annotated; dashboard updated"
    ],
    "alternative_flows": [
     "Tolling event found -> breach suppressed, logged",
     "Divergence alarm -> halt correspondence, founder investigates",
     "Client declines to send -> documented decision, right preserved in record"
    ],
    "business_rules": [
     "Same-day drafting",
     "No dispatch without approval chain",
     "Ladder order enforced"
    ],
    "ai_role": "Drafting from rule-engine outputs",
    "human_role": "Approval, tone, client decision",
    "commands": [
     "RecordUtilityEvent",
     "DeclareBreach",
     "DraftEscalation",
     "ApproveEscalation"
    ],
    "events": [
     "ClockBreached",
     "EscalationDrafted",
     "EscalationSent"
    ],
    "aggregates": [
     "ClockLedger"
    ],
    "success": "Utility responds/cures; or rights election documented for client decision",
    "failure_handling": "Continued breach climbs ladder toward counsel handoff with complete evidence file",
    "audit": "Computation inputs, citation, approval chain, sent artifact all logged"
   },
   {
    "name": "Audit a make-ready invoice and document savings",
    "actor": "Desk (reconciliation agent + reviewer) + client",
    "context": "Cost Audit",
    "goal": "Every invoice reconciled within 5 business days; savings documented only on written utility corrections",
    "preconditions": [
     "Estimate on file",
     "Invoice ingested and linked to application"
    ],
    "main_flow": [
     "Line-match invoice to estimate (arithmetic in code)",
     "Classify categories; flag eligibility issues vs FCC standards + benchmarks",
     "Reviewer validates flags",
     "Findings memo presented to client with evidence",
     "Client pursues; utility corrects in writing",
     "Savings documented; contingency accrues; benchmark updated"
    ],
    "alternative_flows": [
     "No flags -> clean reconciliation reported (trust builder)",
     "Structural question -> routed to client's PE",
     "Utility disputes -> evidence file prepared for client counsel"
    ],
    "business_rules": [
     "Findings human-validated pre-presentation",
     "Fee only on written corrections",
     "No engineering judgments"
    ],
    "ai_role": "Extraction, matching, classification",
    "human_role": "Validation, presentation, pursuit decision (client)",
    "commands": [
     "ReconcileInvoice",
     "ValidateFinding",
     "PresentFindings",
     "RecordDocumentedSavings"
    ],
    "events": [
     "InvoiceReconciled",
     "FindingValidated",
     "FindingsPresented",
     "SavingsDocumented"
    ],
    "aggregates": [
     "Reconciliation"
    ],
    "success": "Documented savings with clean evidence trail; client renews audit layer",
    "failure_handling": "Rejected findings analyzed for taxonomy fixes; false-positive rate tracked",
    "audit": "Worksheets, validation decisions, correction artifacts hashed and linked"
   }
  ],
  "architecture": {
   "style": "Modular monolith with an append-only event log",
   "why": "A sub-15-person desk needs operational simplicity and a perfect audit trail, not distributed systems; the event log doubles as the evidence file.",
   "rejected_alternatives": [
    "Microservices (ops burden unjustified at this scale)",
    "No-code automation platform (clock correctness demands owned, tested code)",
    "Off-the-shelf joint-use software as the core (owner-side data models; the desk's edge is attacher-side logic)"
   ],
   "backend_modules": [
    "intake",
    "production",
    "clock (pure rules)",
    "audit",
    "knowledge",
    "reporting",
    "correspondence",
    "billing-adapter",
    "event-log"
   ],
   "frontend_modules": [
    "ops board",
    "reviewer QC bench",
    "clock ledger view",
    "client dashboard (static weekly at launch)",
    "admin"
   ],
   "api_boundaries": [
    "Module-internal calls in-process",
    "Published event schemas between contexts",
    "External adapters (portals, e-sign, CRM) behind interfaces",
    "Client portal as separate thin app",
    "Rulebook/playbook APIs internal-only",
    "No public API at launch"
   ],
   "database_strategy": "Single Postgres; schema-per-context; append-only event tables for ledger/evidence; git-backed YAML for playbooks",
   "event_bus": "In-process outbox pattern; no broker until scale demands",
   "queue": "Postgres-backed job queue (daily sweeps, ingestion, report compilation)",
   "workflow_engine": "Explicit state machines in code (application pipeline, clock ledger, ladder) — no BPMN engine",
   "ai_orchestration": "Thin service layer over frontier LLM APIs; prompts/templates versioned in git; eval harness in CI",
   "rag_layer": "Postgres + pgvector for rule/playbook retrieval; effective-date filters in SQL, not embeddings",
   "file_storage": "S3-compatible object store, customer-scoped prefixes, content-hash addressing",
   "authn_authz": "SSO for desk staff; magic-link + scoped tokens for client portal; role-based (reviewer/lead/ops/admin) with per-engagement scoping",
   "admin_dashboard": "Internal ops board + playbook health + exception queues",
   "client_portal": "Upload + status + dashboard download; no client-operated workflow (done-for-you)",
   "operator_dashboard": "Batch status board with SLA timers and sweep freshness",
   "observability": "Structured logs, sweep-freshness and divergence metrics, exception-queue depth alarms",
   "audit_logging": "Append-only event log with hashes and approval chains — the product's evidence spine",
   "deployment": "Single cloud region, IaC, blue-green; daily encrypted backups with restore drills"
  },
  "module_structure": {
   "tree": "spanready/\n  intake/\n  production/\n  clock/        # pure rules + state machine, zero LLM imports\n  audit/\n  knowledge/\n  correspondence/\n  reporting/\n  adapters/     # njuns, alden, mail, esign, crm, accounting\n  eventlog/\n  web/          # ops board, reviewer bench, client portal",
   "modules": [
    {
     "name": "clock",
     "purpose": "Deadline computation and ledger state machine",
     "owned_domain": [
      "ClockLedger",
      "BreachEvent",
      "RightsElection"
     ],
     "application_services": [
      "InstantiateClocks",
      "DailySweep",
      "DeclareBreach"
     ],
     "infra_adapters": [
      "None (pure)"
     ],
     "public_interfaces": [
      "ClockLedgerView",
      "BreachFeed"
     ],
     "forbidden_deps": [
      "Any LLM client",
      "adapters/*"
     ]
    },
    {
     "name": "production",
     "purpose": "Package assembly pipeline with gates and QC",
     "owned_domain": [
      "Application",
      "QCRecord"
     ],
     "application_services": [
      "AssemblePackage",
      "GatePackage",
      "SubmitApplication"
     ],
     "infra_adapters": [
      "Portal adapters via interfaces"
     ],
     "public_interfaces": [
      "ApplicationSubmitted event",
      "BatchStatusBoard"
     ],
     "forbidden_deps": [
      "Direct clock mutation"
     ]
    },
    {
     "name": "knowledge",
     "purpose": "Rulebooks, playbooks, rejection library, benchmarks",
     "owned_domain": [
      "RuleVersion",
      "UtilityPlaybook",
      "BenchmarkObservation"
     ],
     "application_services": [
      "PublishRuleVersion",
      "ApplyPlaybookDiff"
     ],
     "infra_adapters": [
      "Git-backed YAML store"
     ],
     "public_interfaces": [
      "RulebookAPI",
      "PlaybookAPI"
     ],
     "forbidden_deps": [
      "Client-identifiable data ingestion without de-identification"
     ]
    },
    {
     "name": "correspondence",
     "purpose": "Template families + drafting orchestration + approval gating",
     "owned_domain": [
      "EscalationLetter",
      "TemplateFamily"
     ],
     "application_services": [
      "DraftEscalation",
      "ApproveAndDispatch"
     ],
     "infra_adapters": [
      "E-sign",
      "Mail"
     ],
     "public_interfaces": [
      "ApprovalQueue"
     ],
     "forbidden_deps": [
      "Date arithmetic (must consume clock outputs)"
     ]
    }
   ],
   "dependency_rules": [
    "clock imports nothing from AI or adapters — pure domain",
    "No module writes another context's aggregates; events only",
    "Adapters implement interfaces owned by domain modules, never the reverse",
    "correspondence consumes computed obligations; it may not compute",
    "reporting reads the event log only; no direct aggregate access",
    "knowledge write paths enforce de-identification for benchmark data"
   ]
  },
  "security_governance": {
   "controls": [
    {
     "risk": "Cross-client data leakage",
     "context": "All",
     "impact": "NDA breach; trust collapse in a small industry",
     "control": "Customer-scoped storage prefixes + per-engagement authz + de-identified benchmarks",
     "audit": "Access logs reviewed monthly"
    },
    {
     "risk": "Unapproved outbound artifact",
     "context": "Production/Clock",
     "impact": "Clock restart or relationship damage",
     "control": "Dispatch gates on recorded approvals; hash equality checks",
     "audit": "Zero-bypass assertion in CI + weekly sample"
    },
    {
     "risk": "Prompt injection via utility correspondence",
     "context": "Intake/Clock ingestion",
     "impact": "Poisoned extraction or drafting",
     "control": "Ingested documents treated as data; extraction schema-constrained; drafts template-constrained + human-approved",
     "audit": "Quarterly red-team includes crafted-document attacks"
    },
    {
     "risk": "Credential compromise (portal accounts)",
     "context": "Adapters",
     "impact": "Unauthorized submissions in client's name",
     "control": "Vaulted credentials, least privilege, MFA where portals allow, anomaly alerts on submission volume",
     "audit": "Credential inventory quarterly"
    },
    {
     "risk": "Insider misuse of dispute evidence",
     "context": "Audit",
     "impact": "Client harm; legal exposure",
     "control": "Restricted classification, role-scoped access, access logging",
     "audit": "Access review on every dispute file"
    },
    {
     "risk": "Backup/restore failure",
     "context": "Platform",
     "impact": "Evidence-file loss (existential)",
     "control": "Daily encrypted backups + quarterly restore drills",
     "audit": "Drill reports retained"
    }
   ],
   "ai_governance": [
    "Model/prompt versions pinned per artifact; eval-gated changes; founder sign-off",
    "Forbidden-action lists enforced at the tool layer (no send, no date math, no accrual by agents)",
    "Quarterly portability drill keeps exit-ramp from any single model vendor"
   ],
   "prompt_injection_defense": [
    "All external documents are data, never instructions — extraction prompts explicitly scoped",
    "No agent has tools that dispatch, accrue, or mutate ledgers",
    "Human approval on every outbound artifact bounds worst-case injection impact"
   ],
   "sensitive_data_handling": [
    "Build maps/agreements: Confidential; customer-scoped; NDA-bound",
    "Dispute evidence: Restricted; role-scoped; access-logged",
    "Benchmarks: de-identified at write; aggregation-only reads"
   ],
   "access_control_matrix": [
    {
     "role": "Reviewer",
     "context": "Production/Intake/Audit",
     "capabilities": [
      "QC sign-off",
      "Exception resolution",
      "Finding validation",
      "Playbook diffs"
     ]
    },
    {
     "role": "Account lead",
     "context": "Clock/Reporting",
     "capabilities": [
      "Escalation approval",
      "Dashboard publish",
      "Findings presentation",
      "Client comms"
     ]
    },
    {
     "role": "Desk ops",
     "context": "Intake/Production",
     "capabilities": [
      "Submission execution",
      "Sweeps",
      "Receipt archiving"
     ]
    },
    {
     "role": "Founder/admin",
     "context": "All",
     "capabilities": [
      "Overrides (logged)",
      "Rule curation",
      "Conflict decisions",
      "Credential management"
     ]
    },
    {
     "role": "Client",
     "context": "Portal",
     "capabilities": [
      "Upload",
      "Status view",
      "Signature",
      "Dashboard download"
     ]
    },
    {
     "role": "Counsel (external)",
     "context": "Handoff exports",
     "capabilities": [
      "Evidence-file receipt (per engagement)"
     ]
    }
   ],
   "audit_log_requirements": [
    "Who/what/when for every submission, utility event, clock computation, and letter",
    "Approval chains with identities on every outbound artifact",
    "Access logs on Confidential/Restricted objects",
    "Version pins (rule, playbook, prompt, model) on every production artifact"
   ]
  },
  "observability": {
   "metrics": [
    {
     "metric": "Sweep freshness",
     "type": "gauge",
     "context": "Clock",
     "why": "A stale sweep is a silent breach factory",
     "target": "<24h always",
     "alert_threshold": ">26h pages founder"
    },
    {
     "metric": "Computation divergence count",
     "type": "counter",
     "context": "Clock",
     "why": "Dual-computation disagreement = stop-ship",
     "target": "0",
     "alert_threshold": ">=1 halts correspondence"
    },
    {
     "metric": "First-pass acceptance rate",
     "type": "ratio per utility",
     "context": "Production",
     "why": "The contractual quality bar",
     "target": ">=95% (98% for hardened)",
     "alert_threshold": "<90% on any utility over 50 poles"
    },
    {
     "metric": "Breach action latency",
     "type": "histogram",
     "context": "Clock",
     "why": "Same-day enforcement is the promise",
     "target": "100% <=1 business day",
     "alert_threshold": "Any breach >1 day unactioned"
    },
    {
     "metric": "Exception queue age",
     "type": "gauge per queue",
     "context": "Intake/Production/Audit",
     "why": "SLA integrity",
     "target": "Within per-queue SLA",
     "alert_threshold": "Oldest item >2x SLA"
    },
    {
     "metric": "Minutes per pole (blended)",
     "type": "derived weekly",
     "context": "All",
     "why": "The unit-economics engine",
     "target": "7 -> 3 -> 1.5",
     "alert_threshold": "Two consecutive weeks regression"
    },
    {
     "metric": "Rework rate",
     "type": "ratio",
     "context": "Production",
     "why": "Quality + COGS guardrail",
     "target": "<10% launch, <5% day-90",
     "alert_threshold": ">10% rolling month"
    },
    {
     "metric": "Client-accepted finding rate",
     "type": "ratio",
     "context": "Audit",
     "why": "False positives burn goodwill",
     "target": ">=80%",
     "alert_threshold": "<60% on any 10-finding window"
    }
   ],
   "dashboards": [
    "Ops batch board (SLA timers)",
    "Clock health (freshness, divergence, breach latency)",
    "Playbook health (acceptance/exception per utility)",
    "Audit performance (findings, acceptance, savings)",
    "Founder weekly (all KPIs vs blueprint targets)"
   ],
   "audit_reports": [
    "Monthly approval-chain integrity report (zero-bypass assertion)",
    "Quarterly access review on Restricted objects"
   ],
   "quality_review_reports": [
    "Weekly sampling audit results",
    "48-hour postmortem log with fix-shipped status"
   ],
   "ai_evaluation_reports": [
    "Eval-suite results per prompt/model change",
    "Quarterly portability drill results"
   ],
   "client_outcome_reports": [
    "Weekly dashboard per client",
    "Monthly savings ledger",
    "Segment closeout report (cycle time vs client baseline)"
   ]
  },
  "testing_strategy": {
   "tests": [
    {
     "type": "Unit",
     "validates": "Business-day/holiday date arithmetic per jurisdiction",
     "context": "Clock",
     "example": "45-day survey clock spanning Thanksgiving week lands on the correct business day"
    },
    {
     "type": "Unit",
     "validates": "Tier classification incl. aggregation rules",
     "context": "Production",
     "example": "Two 2,000-pole orders to one owner within 30 days classify as one large order"
    },
    {
     "type": "Property-based",
     "validates": "Clock engine vs independent recompute",
     "context": "Clock",
     "example": "Random event sequences produce identical ledgers in both implementations"
    },
    {
     "type": "Golden-file",
     "validates": "Package assembly against gold standards",
     "context": "Production",
     "example": "Utility X application regenerated byte-comparable to accepted exemplar"
    },
    {
     "type": "Contract",
     "validates": "Event schemas between contexts",
     "context": "All",
     "example": "ApplicationSubmitted v1 consumed by clock instantiation without drift"
    },
    {
     "type": "Integration",
     "validates": "Approval gating end-to-end",
     "context": "Production/Clock",
     "example": "Dispatch attempt without approval chain is rejected and alarmed"
    },
    {
     "type": "AI eval",
     "validates": "Extraction accuracy per format",
     "context": "Intake",
     "example": ">=99% required-field accuracy on re-keyed Katapult sample"
    },
    {
     "type": "AI eval",
     "validates": "Boundary-language linter on drafts",
     "context": "Correspondence",
     "example": "Draft containing a legal conclusion is auto-rejected"
    },
    {
     "type": "Security",
     "validates": "Customer scoping",
     "context": "Platform",
     "example": "Client A token cannot enumerate client B objects"
    },
    {
     "type": "Restore drill",
     "validates": "Backup integrity",
     "context": "Platform",
     "example": "Quarterly full restore reproduces ledger hashes"
    }
   ],
   "critical_domain_rules": [
    "A defective application must never pass the gate (required-field exhaustiveness per playbook)",
    "A breach must never be declared from an unpinned rule version",
    "A letter must never dispatch without its approval chain",
    "A contingency fee must never accrue without a written correction artifact"
   ],
   "ai_eval_dataset": [
    "Re-keyed ground-truth extraction sets per supported format (grown from pilot data)",
    "Graded historical package library per utility (gold standards + near-misses)",
    "Graded reconciliation set with validated flags and known false positives"
   ],
   "regression_plan": "Full eval harness + clock property suite run on every prompt/model/rule change; regression blocks cutover; results archived with version pins.",
   "contract_testing_plan": "Event schema versioning with consumer-driven tests between contexts; adapters tested against recorded portal fixtures.",
   "manual_qa_checklist": [
    "New utility playbook: first 3 batches 100% dual-reviewed",
    "New state regime: counsel-verified rulebook before first client application",
    "New template family: counsel review before first use",
    "Quarterly red-team drill executed and postmortemed"
   ]
  },
  "mvp_roadmap": [
   {
    "phase": "Week 1-2: Engine foundations",
    "goal": "Trustworthy clock + templates + schemas",
    "features": [
     "Rulebook corpus v1",
     "Clock state machine + dual computation",
     "Template families (counsel-reviewed)",
     "Canonical schemas v1"
    ],
    "contexts": [
     "Knowledge",
     "Clock"
    ],
    "ai_needs": [],
    "human_workflows": [
     "Counsel review session"
    ],
    "data_needs": [
     "FCC 25-38 + Subpart J pinned PDFs",
     "Top-10 aerial-BEAD state rules",
     "NTIA GT&C"
    ],
    "integrations": [
     "E-sign"
    ],
    "risks": [
     "Rule-citation verification workload"
    ],
    "exit_criteria": [
     "Hand-computed edge-case suite passes"
    ]
   },
   {
    "phase": "Week 2-4: Sales machinery",
    "goal": "Audit-first GTM live",
    "features": [
     "Offer page + Clock Card",
     "Permit Clock Audit workflow (semi-manual)",
     "Diagnosis-memo pipeline"
    ],
    "contexts": [
     "Client & Reporting"
    ],
    "ai_needs": [
     "Correspondence drafting for memos"
    ],
    "human_workflows": [
     "Founder outreach"
    ],
    "data_needs": [
     "Public BEAD award lists"
    ],
    "integrations": [
     "CRM"
    ],
    "risks": [
     "Audit demand exceeding 10/mo cap"
    ],
    "exit_criteria": [
     "First 5 audits delivered in 48h each"
    ]
   },
   {
    "phase": "Week 4-8: Pilot #1 end-to-end",
    "goal": "First real batch through the whole spine",
    "features": [
     "Intake portal + scoring",
     "Extraction + assembly + gate",
     "Reviewer QC bench",
     "Manual submission + receipts",
     "Clock ledger live"
    ],
    "contexts": [
     "Intake",
     "Production",
     "Clock"
    ],
    "ai_needs": [
     "Extraction agent",
     "Assembly agent"
    ],
    "human_workflows": [
     "100% package review",
     "Manual portal ops"
    ],
    "data_needs": [
     "Pilot's survey exports + agreements"
    ],
    "integrations": [
     "NJUNS/Alden as client access allows"
    ],
    "risks": [
     "Field-data quality",
     "New-utility unknowns"
    ],
    "exit_criteria": [
     "Batch submitted <=10 business days; zero completeness rejections"
    ]
   },
   {
    "phase": "Week 8-13: Cohort + audit layer",
    "goal": "3 pilots, enforcement + audit proven",
    "features": [
     "Breach->draft->approve->sign flow",
     "Estimate review + invoice reconciliation",
     "Weekly dashboard v1",
     "Rejection library + playbook diffs"
    ],
    "contexts": [
     "Clock",
     "Audit",
     "Knowledge",
     "Reporting"
    ],
    "ai_needs": [
     "Reconciliation agent"
    ],
    "human_workflows": [
     "Escalation approvals",
     "Finding validation"
    ],
    "data_needs": [
     "First estimates/invoices"
    ],
    "integrations": [
     "Accounting (accruals)"
    ],
    "risks": [
     "Escalation tone learning curve"
    ],
    "exit_criteria": [
     "Day-90 gate metrics measured; 100% breaches actioned <=1 day"
    ]
   },
   {
    "phase": "Month 4-6: Automation deepening",
    "goal": "COGS toward $8.50/pole",
    "features": [
     "Portal status ingestion",
     "Dashboard automation",
     "Risk-tiered QC on hardened playbooks",
     "Benchmark store v1"
    ],
    "contexts": [
     "Production",
     "Clock",
     "Knowledge"
    ],
    "ai_needs": [
     "Ingestion classifiers"
    ],
    "human_workflows": [
     "Reviewer #2 onboarding"
    ],
    "data_needs": [
     "Growing rejection library"
    ],
    "integrations": [
     "Portal scraping where permitted"
    ],
    "risks": [
     "Portal automation fragility"
    ],
    "exit_criteria": [
     "Minutes/pole <=3; margin ~50-55% blended"
    ]
   },
   {
    "phase": "Month 6-12: Earned scale",
    "goal": "~10,000 poles/mo; retainer layer",
    "features": [
     "Multi-utility orchestration",
     "Managed joint-use desk offering",
     "Client dashboard portal"
    ],
    "contexts": [
     "All"
    ],
    "ai_needs": [
     "Orchestration policies"
    ],
    "human_workflows": [
     "Two-deep review; account lead #2 evaluation"
    ],
    "data_needs": [
     "Benchmark coverage growth"
    ],
    "integrations": [
     "Deeper portal RPA"
    ],
    "risks": [
     "Quality drift at volume — build-before-scale checkpoints enforce pauses"
    ],
    "exit_criteria": [
     "Blueprint year-1 table met (300+ poles/op/day, 60-65% margin)"
    ]
   }
  ],
  "scaling_roadmap": [
   {
    "stage": "3 -> 10 clients",
    "trigger": "Day-90 GO gate",
    "architecture_change": "None (monolith headroom)",
    "operational_change": "Reviewer #2; exception-queue ownership split",
    "risk": "Founder account-lead bottleneck"
   },
   {
    "stage": "10 -> 30 clients",
    "trigger": "Renewal >=70% + margin >=55%",
    "architecture_change": "Job queue scaling; portal RPA hardening; read replicas",
    "operational_change": "Dedicated account lead hire; ops pod structure",
    "risk": "Playbook build backlog for new utilities"
   },
   {
    "stage": "30+ clients / 25k poles/mo",
    "trigger": "Sustained demand + hardened playbook coverage",
    "architecture_change": "Extract clock service if audit/compliance demands isolation; broker if event volume warrants",
    "operational_change": "Owner-side co-op desk line evaluation (same engine, mirrored)",
    "risk": "Quality dilution — checkpoint rule: pause on metrics regression"
   },
   {
    "stage": "Post-BEAD wave",
    "trigger": "Build-volume decline signals",
    "architecture_change": "None",
    "operational_change": "Mix shift to managed joint-use retainers + transfer/true-up lifecycle",
    "risk": "Revenue cliff if retainer layer under-built — start selling it at month 6"
   }
  ],
  "risk_register": [
   {
    "risk": "Clock computation error harms a client",
    "likelihood": "Low",
    "impact": "Critical",
    "signal": "Divergence alarm; postmortem findings",
    "mitigation": "Pure-code math, dual computation, red-teams, E&O insurance, human approval on all enforcement",
    "owner": "Founder",
    "context": "Clock"
   },
   {
    "risk": "BEAD policy disruption shrinks wedge volume",
    "likelihood": "Medium",
    "impact": "High",
    "signal": "NTIA/state program announcements",
    "mitigation": "Serve private/state builds + joint-use lifecycle; near-zero fixed costs",
    "owner": "Founder",
    "context": "Strategy"
   },
   {
    "risk": "Remote-trust barrier caps conversion",
    "likelihood": "Medium",
    "impact": "High",
    "signal": "Audit->pilot <15% on 30+ audits",
    "mitigation": "Audit-first proof, associations, OSP-firm white-label channel",
    "owner": "Founder",
    "context": "GTM"
   },
   {
    "risk": "Utility idiosyncrasy defeats completeness gates",
    "likelihood": "Medium",
    "impact": "Medium",
    "signal": "Acceptance <85% after 3 playbook iterations",
    "mitigation": "Rejection-library loop; hardening sprints; refund cap bounds exposure",
    "owner": "Reviewer",
    "context": "Production"
   },
   {
    "risk": "UPL/PE boundary creep",
    "likelihood": "Low",
    "impact": "High",
    "signal": "Boundary-linter flags; counsel audit findings",
    "mitigation": "Template families, verbatim disclaimers, annual counsel review, linter in CI",
    "owner": "Founder + counsel",
    "context": "Correspondence/Audit"
   },
   {
    "risk": "OSP-fluency key-person loss",
    "likelihood": "Medium",
    "impact": "Medium",
    "signal": "Single reviewer coverage weeks",
    "mitigation": "Playbooks encode fluency; hire from specialist pool; two-deep by month 6",
    "owner": "Founder",
    "context": "Ops"
   }
  ],
  "adrs": [
   {
    "id": "ADR-1",
    "decision": "All deadline math in deterministic code; LLMs never compute dates",
    "status": "accepted",
    "context": "Clock correctness is the desk's critical risk and core promise.",
    "options": [
     "LLM-assisted date reasoning",
     "Pure code",
     "Hybrid with LLM verification"
    ],
    "chosen": "Pure code with independent dual computation",
    "business_reason": "A single wrong date can forfeit client rights; trust is the product.",
    "technical_reason": "Date arithmetic is fully specifiable; LLM involvement adds risk with zero upside.",
    "tradeoffs": [
     "Rule encoding is manual work",
     "New regimes need code changes"
    ],
    "risks": [
     "Encoding errors — mitigated by hand-computed test suites + counsel verification"
    ],
    "revisit_trigger": "Never for computation; encoding tooling may evolve"
   },
   {
    "id": "ADR-2",
    "decision": "Modular monolith + append-only event log over microservices",
    "status": "accepted",
    "context": "Sub-15-person team; evidence trail is a deliverable.",
    "options": [
     "Microservices",
     "Monolith",
     "Modular monolith + event log",
     "No-code platform"
    ],
    "chosen": "Modular monolith + event log",
    "business_reason": "The event log IS the dispute-support evidence file clients pay for.",
    "technical_reason": "Operational simplicity; context boundaries preserved via module rules for later extraction.",
    "tradeoffs": [
     "Single deployable",
     "Discipline required on module boundaries"
    ],
    "risks": [
     "Boundary erosion — dependency rules in CI"
    ],
    "revisit_trigger": "Clock-service isolation demand or 25k+ poles/mo event volume"
   },
   {
    "id": "ADR-3",
    "decision": "Playbooks as git-backed YAML data, not prose or code",
    "status": "accepted",
    "context": "Per-utility knowledge must be diffable, reviewable, and machine-consumable.",
    "options": [
     "Wiki prose",
     "Database rows",
     "Git YAML",
     "Hardcoded rules"
    ],
    "chosen": "Git YAML with versioned API",
    "business_reason": "Every rejection becomes a reviewable diff; the moat compounds legibly.",
    "technical_reason": "Version pinning per application; human review via PRs; gate construction is data-driven.",
    "tradeoffs": [
     "YAML discipline needed",
     "Migration cost if schema evolves"
    ],
    "risks": [
     "Schema sprawl — playbook linter"
    ],
    "revisit_trigger": "Playbook count >100 or multi-editor conflicts"
   },
   {
    "id": "ADR-4",
    "decision": "Manual portal operations at launch; RPA only after SOPs stabilize",
    "status": "accepted",
    "context": "Portals are heterogeneous and automation hides failure modes early.",
    "options": [
     "RPA from day one",
     "Manual first",
     "API-only utilities"
    ],
    "chosen": "Manual first with logged workarounds",
    "business_reason": "Blueprint standing rule: do not automate before SOPs exist; failure modes must be visible.",
    "technical_reason": "Portal fragility; recorded fixtures from manual ops seed later automation tests.",
    "tradeoffs": [
     "Higher launch COGS ($14/pole)",
     "Ops tedium"
    ],
    "risks": [
     "Manual-step drift — workaround-recurrence rule triggers build sprints"
    ],
    "revisit_trigger": "Same workaround 5+ times or day-90 volume"
   },
   {
    "id": "ADR-5",
    "decision": "Single frontier-LLM API with portability harness, no fine-tuning",
    "status": "accepted",
    "context": "Model quality improves fast; vendor lock-in is the risk.",
    "options": [
     "Fine-tuned model",
     "Single API",
     "Multi-model routing",
     "Self-hosted"
    ],
    "chosen": "Single API + quarterly portability drills + versioned prompts",
    "business_reason": "Compounding assets are playbooks/benchmarks, not weights; stay portable.",
    "technical_reason": "Eval harness re-scores candidates; cutover is a config change.",
    "tradeoffs": [
     "Per-call cost",
     "Prompt maintenance"
    ],
    "risks": [
     "API deprecations — abstraction layer"
    ],
    "revisit_trigger": "Inference cost >$1.50/pole or eval-relevant model shifts"
   }
  ],
  "self_audit": {
   "scores": [
    {
     "category": "Domain understanding",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Actor coverage",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Language precision",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Subdomain classification",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Context boundaries",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Context map rigor",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Event completeness",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Command/policy coverage",
     "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",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Invariant strength",
     "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 safety",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Human-loop design",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Data governance",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Use-case buildability",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Architecture fit",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Testing rigor",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Roadmap realism",
     "score": 8,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    },
    {
     "category": "Risk honesty",
     "score": 9,
     "weakness": "None material at this stage.",
     "improvement": "Maintain the current standard; re-audit after the first pilots land real data."
    }
   ],
   "weakest_parts": [
    "Portal-adapter reality (NJUNS/Alden automation limits) is assumed, not tested — manual-first mitigates but COGS curve depends on it",
    "Reverse-preemption state rulebooks beyond the top-10 are stubs until counsel-verified",
    "Benchmark statistics are small-n for months — audit findings must lean on standards/precedent first"
   ],
   "biggest_assumptions": [
    "First-pass acceptance >=95% achievable on hardened playbooks",
    "20-40 min AI+review per application (drives $8.50 COGS)",
    "Rural ISPs accept remote critical-path help (UNVERIFIED)"
   ],
   "highest_risk_decisions": [
    "Refund-backed completeness guarantee (bounded but real exposure)",
    "Contingency-priced audit (fee integrity depends on written-correction discipline)",
    "Founder as sole account lead through pilot cohort"
   ],
   "needs_domain_expert": [
    "Ex-joint-use coordinator review of playbook schema and gold-standard checklists",
    "OSP engineer confirmation of which utility exhibits require stamped inputs per owner type"
   ],
   "needs_legal": [
    "Template-family and engagement-letter review before first client use",
    "Success-fee (recovery-audit) confirmation per operating state",
    "Rule-citation verification for the clock engine's encoded deadlines"
   ],
   "needs_prototype": [
    "Extraction accuracy on real Katapult/ikeGPS exports",
    "Clock engine against a real utility's historical application timeline",
    "One end-to-end audit on a real estimate/invoice pair"
   ],
   "validate_before_prod": [
    "Hand-computed clock test suite passes (incl. holidays, tiers, aggregation)",
    "Counsel sign-off recorded on templates + boundaries",
    "Zero-bypass assertion on approval gates",
    "Customer-scoping security test"
   ]
  },
  "final_recommendations": [
   "Build the clock engine and its test harness before anything else — it is the product's spine and its critical risk.",
   "Run the Permit Clock Audit motion from week 2; it validates demand, seeds the rejection library, and sells without claiming credentials the desk doesn't have.",
   "Hold the two human chokepoints permanently; automate around them, never through them.",
   "Treat every utility rejection as an asset: 48-hour postmortem, playbook diff, deterministic check, marketing teardown.",
   "Keep fixed costs near zero until the day-90 gate — the kill-tests are cheap to run and honest to read.",
   "Start selling the managed joint-use retainer at month 6; the build wave ends, the lifecycle doesn't.",
   "Never let a dashboard sentence exist without an event-log pointer — the evidence spine is the brand."
  ],
  "extensions": {
   "service_business_reality_check": {
    "is_service_business": true,
    "paid_outcome_clear": true,
    "workflow_present": true,
    "ai_native_fit_score": 9,
    "red_flags": []
   },
   "ai_native_fit": {
    "score": 9,
    "why": "Document-heavy, rule-bound, deadline-driven administrative workflow with visible displaced labor ($25-$41/hr) and compounding knowledge assets; deterministic core keeps AI where it's strong (extraction, drafting, comparison).",
    "disqualifiers": [
     "None triggered; PE/UPL boundaries explicitly routed to licensed partners"
    ]
   },
   "domain_evidence_register": [
    {
     "claim": "FCC 25-38 clocks fully effective May 7, 2026 (45/14/60; 90/29/120/180; 30-day deemed approval; self-help; 15-day notices)",
     "evidence_type": "Primary regulation + bureau notice",
     "source": "FCC 25-38; DA-26-446; Federal Register 2025-16332",
     "strength": "Verified",
     "gaps": "None"
    },
    {
     "claim": "$42.45B BEAD; 50/56 final proposals approved Feb 9, 2026; 4-year windows",
     "evidence_type": "Government press + CRS",
     "source": "NTIA press release; CRS R48992",
     "strength": "Verified",
     "gaps": "Program policy volatility"
    },
    {
     "claim": "~3.95M poles; 188,287 aerial route-miles; $534M-$4.63B exposure",
     "evidence_type": "Independent quantitative analysis",
     "source": "ACLP analysis (via Broadband Expanded / Broadband Breakfast)",
     "strength": "Verified (single source, ranges disclosed)",
     "gaps": "Single-source sizing"
    },
    {
     "claim": "Make-ready $75-$450/pole; replacements $2,000-$9,000",
     "evidence_type": "Practitioner + research",
     "source": "Katapult; Pew; NCTA; NC pole program",
     "strength": "Verified",
     "gaps": "Regional variance"
    },
    {
     "claim": "Specialist labor $25-$41/hr; NJUNS roles $40k-$127k",
     "evidence_type": "Live job-market listings",
     "source": "ZipRecruiter (re-verified 2026-07-12)",
     "strength": "Verified",
     "gaps": "None"
    },
    {
     "claim": "Utilities shift ineligible costs; FCC sided with attacher",
     "evidence_type": "FCC precedent",
     "source": "Comcast v. Appalachian Power",
     "strength": "Verified",
     "gaps": "Recovery-rate statistics don't exist publicly"
    },
    {
     "claim": "$22-$35/pole pricing clears build-vs-buy",
     "evidence_type": "Constructed benchmark",
     "source": "Blueprint inference vs displaced labor",
     "strength": "Inferred",
     "gaps": "Pilot-validated"
    },
    {
     "claim": "Remote desk trusted with critical-path permitting",
     "evidence_type": "None",
     "source": "—",
     "strength": "Unverified",
     "gaps": "Pilot question #1"
    }
   ],
   "assumption_register": [
    {
     "assumption": "20-40 min AI+review per application",
     "impact_if_wrong": "COGS >$8.50; margin path slips",
     "how_to_validate": "Instrument pilot #1 stage timers",
     "blocking": false
    },
    {
     "assumption": "5-10% audit-recoverable make-ready",
     "impact_if_wrong": "Audit layer is trust feature only",
     "how_to_validate": "First 10 invoices reconciled",
     "blocking": false
    },
    {
     "assumption": ">=95% first-pass on hardened playbooks",
     "impact_if_wrong": "Guarantee + economics break",
     "how_to_validate": "Per-utility acceptance tracking",
     "blocking": true
    },
    {
     "assumption": "Audit->pilot >=30%",
     "impact_if_wrong": "GTM motion repriced or channel-shifted",
     "how_to_validate": "30-audit cohort measurement",
     "blocking": true
    },
    {
     "assumption": "Portal access grantable by clients at launch",
     "impact_if_wrong": "Mail/email channels dominate; slower cycles",
     "how_to_validate": "Pilot intake",
     "blocking": false
    },
    {
     "assumption": "Counsel confirms success-fee legality per operating state",
     "impact_if_wrong": "Audit pricing restructured to flat per-invoice",
     "how_to_validate": "Week-1 counsel session",
     "blocking": true
    },
    {
     "assumption": "Reviewer hireable from specialist pool in 2 weeks",
     "impact_if_wrong": "Launch slips; founder reviews solo (capped volume)",
     "how_to_validate": "Week-1 recruiting",
     "blocking": false
    }
   ],
   "language_conflict_map": [
    {
     "term": "Application",
     "meaning_a": "The regulatory attachment request to a pole owner",
     "context_a": "Permit Production",
     "meaning_b": "Software application",
     "context_b": "Engineering docs",
     "resolution": "Unqualified 'application' always means the regulatory artifact; software is 'the system'."
    },
    {
     "term": "Clock",
     "meaning_a": "A dated regulatory obligation with citation",
     "context_a": "Clock Enforcement",
     "meaning_b": "Wall-clock/system time",
     "context_b": "Engineering",
     "resolution": "Domain 'clock' capitalized in docs; system time never called 'clock' in domain code."
    },
    {
     "term": "Complete",
     "meaning_a": "Intake score 100 (all required items)",
     "context_a": "Intake",
     "meaning_b": "Application accepted as complete by utility",
     "context_b": "Permit Production",
     "resolution": "'IntakeCompleted' vs 'first-pass accepted' — never interchanged."
    }
   ],
   "build_buy_integrate": [
    {
     "subdomain": "Clock enforcement",
     "decision": "build",
     "reason": "Core differentiator; correctness must be owned"
    },
    {
     "subdomain": "Permit production pipeline",
     "decision": "build",
     "reason": "Core; playbook-driven gates are the moat's execution layer"
    },
    {
     "subdomain": "Cost audit",
     "decision": "build",
     "reason": "Core; taxonomy + benchmarks are proprietary"
    },
    {
     "subdomain": "Knowledge (rulebooks/playbooks)",
     "decision": "build",
     "reason": "The compounding asset"
    },
    {
     "subdomain": "Intake/normalization",
     "decision": "build (thin)",
     "reason": "Format adapters proprietary; storage commodity"
    },
    {
     "subdomain": "Portals (NJUNS/Alden)",
     "decision": "integrate",
     "reason": "We operate client-granted access; never compete with platforms"
    },
    {
     "subdomain": "Field capture (Katapult/ikeGPS)",
     "decision": "integrate",
     "reason": "Consume exports; never do field work"
    },
    {
     "subdomain": "CRM/billing/e-sign/accounting",
     "decision": "buy",
     "reason": "Commodity"
    },
    {
     "subdomain": "Client dashboard",
     "decision": "build (static first)",
     "reason": "Cheap, evidence-backed, differentiating in trust"
    },
    {
     "subdomain": "RPA/scraping",
     "decision": "defer then build",
     "reason": "Manual-first standing rule"
    }
   ],
   "core_protection_strategy": [
    "Clock module imports nothing from AI/adapters — enforced in CI",
    "Playbooks/rejection library never leave the desk (no licensing until strategically chosen)",
    "Benchmarks de-identified at write; aggregation-only API",
    "Two human chokepoints are permanent policy, documented in client contracts",
    "Every production artifact carries version pins for full reproducibility"
   ],
   "boundary_violations_check": [
    "No PE work: stamped outputs consumed as opaque inputs; system has no loading-analysis capability",
    "No UPL: letters facts/dates/citations only; linter + human approval + counsel-reviewed templates; complaints never filed by desk",
    "No physical operations: no field-capture tooling exists in the system"
   ],
   "boundary_stress_tests": [
    {
     "scenario": "Utility issues an amended application requirement mid-batch",
     "contexts_touched": [
      "Knowledge",
      "Permit Production"
     ],
     "breaks_if": "In-flight packages keep the stale playbook pin without re-gating",
     "verdict": "adjust"
    },
    {
     "scenario": "Client swaps engineering vendors mid-segment",
     "contexts_touched": [
      "Intake",
      "Permit Production"
     ],
     "breaks_if": "Stamped-output references cached against old vendor doc IDs",
     "verdict": "holds"
    },
    {
     "scenario": "FCC issues a rule amendment with a future effective date",
     "contexts_touched": [
      "Knowledge",
      "Clock Enforcement"
     ],
     "breaks_if": "Clock selects rules by query date instead of event date",
     "verdict": "holds"
    },
    {
     "scenario": "Two clients build across the same utility simultaneously",
     "contexts_touched": [
      "Knowledge",
      "Client & Reporting"
     ],
     "breaks_if": "Playbook learnings leak client-identifiable rates or postures",
     "verdict": "holds"
    },
    {
     "scenario": "Utility responds via an untracked channel (phone/fax)",
     "contexts_touched": [
      "Clock Enforcement",
      "Intake"
     ],
     "breaks_if": "No SOP to log out-of-band events into the ledger same day",
     "verdict": "adjust"
    }
   ],
   "unresolved_ownership": [
    {
     "concept": "Utility contact relationships",
     "candidates": [
      "Knowledge",
      "Client & Reporting"
     ],
     "recommendation": "Own in Knowledge (per-utility playbook contact entries); account lead references by id."
    },
    {
     "concept": "Refund decision on completeness rejection",
     "candidates": [
      "Permit Production",
      "Client & Reporting"
     ],
     "recommendation": "Production owns attribution postmortem; Reporting/founder owns the commercial refund decision."
    },
    {
     "concept": "Rights-election evidence file",
     "candidates": [
      "Clock Enforcement",
      "Cost Audit"
     ],
     "recommendation": "Clock Enforcement owns the spine; Audit contributes reconciliation exhibits by reference."
    }
   ],
   "published_language_contracts": [
    {
     "producer": "Intake",
     "consumer": "Permit Production",
     "contract": "IntakeCompleted, PoleRecordNormalized",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Permit Production",
     "consumer": "Clock Enforcement",
     "contract": "ApplicationSubmitted, ApplicationAccepted, ApplicationRejectedByUtility",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "Knowledge",
     "consumer": "Clock Enforcement",
     "contract": "RuleVersionPublished",
     "versioning": "SemVer; effective-date fields mandatory."
    },
    {
     "producer": "Clock Enforcement",
     "consumer": "Cost Audit",
     "contract": "EstimateReceived",
     "versioning": "SemVer on event schema; consumer contract tests in CI."
    },
    {
     "producer": "All contexts",
     "consumer": "Client & Reporting",
     "contract": "Append-only event log (read models)",
     "versioning": "Additive evolution; breaking = new major + dual-publish window."
    }
   ],
   "shared_kernel_warnings": [
    "Shared kernel stays tiny: Ids, Money, ActorIdentity, EngagementRef. Domain concepts (Clock, Application, Playbook) must never enter it.",
    "Never share aggregates across contexts — publish an event or expose an application service.",
    "Any addition to /shared requires two-context approval to prevent silent coupling."
   ],
   "aggregate_stress_tests": [
    {
     "aggregate": "Application",
     "scenario": "Concurrent gate-fix and reviewer approval on the same package",
     "invariant_at_risk": "Submitted artifact hash = signed artifact hash",
     "verdict": "holds"
    },
    {
     "aggregate": "ClockLedger",
     "scenario": "Utility event arrives while a breach draft is in approval",
     "invariant_at_risk": "Every breach carries a citation and current evidence pointer",
     "verdict": "adjust"
    },
    {
     "aggregate": "Reconciliation",
     "scenario": "Corrected invoice arrives during finding validation",
     "invariant_at_risk": "No accrual without a written correction artifact",
     "verdict": "holds"
    },
    {
     "aggregate": "UtilityPlaybook",
     "scenario": "Two reviewers submit conflicting diffs from different rejections",
     "invariant_at_risk": "Every diff traceable to a rejection/resolution",
     "verdict": "holds"
    },
    {
     "aggregate": "Engagement",
     "scenario": "Client uploads replacement survey data after IntakeCompleted",
     "invariant_at_risk": "Score-100 gate integrity",
     "verdict": "adjust"
    }
   ],
   "agent_stress_tests": [
    {
     "agent": "Survey Extraction Agent",
     "scenario": "Malformed / adversarial content embedded in a survey export",
     "failure_mode": "Prompt injection or hallucinated pole IDs",
     "guardrail": "Schema-constrained output + confidence gates + no side-effect tools",
     "verdict": "holds"
    },
    {
     "agent": "Package Assembly & Correspondence Agent",
     "scenario": "Utility letter containing instruction-like text ingested as context",
     "failure_mode": "Drafting drift or boundary breach in letters",
     "guardrail": "Template-family conformance + citation-match check + human approval",
     "verdict": "holds"
    },
    {
     "agent": "Reconciliation Agent",
     "scenario": "Invoice with deliberately confusing line descriptions",
     "failure_mode": "Category misclassification inflating findings",
     "guardrail": "Code-recomputed arithmetic + reviewer validation + accepted-finding metric",
     "verdict": "holds"
    }
   ],
   "regulated_domain_handling": [
    {
     "regime": "UPL (unauthorized practice of law) boundary",
     "applies_because": "Deadline enforcement letters cite regulations and adjoin legal advocacy",
     "controls": [
      "Counsel-reviewed template families",
      "Facts/dates/citations-only linter",
      "Human approval + client signature on every letter",
      "Complaints never filed by the desk"
     ],
     "evidence_required": [
      "Annual counsel review record",
      "Approval chains on every letter"
     ]
    },
    {
     "regime": "PE licensure boundary",
     "applies_because": "Make-ready adjoins structural engineering judgments",
     "controls": [
      "Stamped outputs consumed as opaque inputs",
      "No loading-analysis capability in system",
      "Structural questions routed to client's PE"
     ],
     "evidence_required": [
      "Engagement-letter exclusions",
      "Routing log for structural questions"
     ]
    },
    {
     "regime": "Critical-infrastructure data sensitivity",
     "applies_because": "Build maps and utility cost data are sensitive business data",
     "controls": [
      "Customer-scoped storage",
      "De-identified benchmarks",
      "Access logging + NDA-bound handling"
     ],
     "evidence_required": [
      "Access review records",
      "De-identification policy tests"
     ]
    }
   ],
   "unit_economics": {
    "price_model": "Per-pole production fee ($22-$35 tiered) + 20-25% contingency on documented make-ready savings + phase-2 retainers",
    "unit_of_value": "A pole made legally attachable on the enforceable clock (first-pass accepted, deadline-enforced, cost-audited)",
    "gross_margin_pct": 60,
    "cost_drivers": [
     "Reviewer minutes per pole",
     "AI inference + retrieval",
     "Portal/tooling + submission pass-through",
     "New-utility playbook build-out (margin dilution)"
    ],
    "breakeven_note": "Unit margin ~66% at $8.50 COGS on $25/pole; blended ~50% at day-90 diluted by playbook builds; breakeven month 2 at pilot volume per the financial model."
   },
   "margin_leakage_map": [
    {
     "leakage": "Reviewer over-reviewing hardened utilities",
     "cause": "Sampling step-down not applied when earned",
     "impact": "high",
     "mitigation": "Playbook-hardening evaluator + risk-tiered sampling policy"
    },
    {
     "leakage": "Clock-restart rework from gate misses",
     "cause": "Playbook gaps on new utilities",
     "impact": "high",
     "mitigation": "48-hour postmortem-to-rule loop; refund cap bounds worst case"
    },
    {
     "leakage": "Unbatched inference on small extractions",
     "cause": "Naive per-document calls",
     "impact": "medium",
     "mitigation": "Batch pipelines + per-batch inference budget alarms"
    },
    {
     "leakage": "Free audits drifting into unpaid consulting",
     "cause": "Scope creep on diagnostic deliverable",
     "impact": "medium",
     "mitigation": "Hard 10/month cap + fixed audit template"
    },
    {
     "leakage": "Manual portal ops persisting past ROI point",
     "cause": "Automation deferred too long",
     "impact": "medium",
     "mitigation": "Workaround-recurrence rule (5+ occurrences triggers build sprint)"
    }
   ],
   "slop_findings": [
    {
     "pattern": "generic 'dashboard'-only value prop",
     "status": "clean",
     "note": "Value prop is permits + enforced clocks + audited invoices; the dashboard is reporting, not the product."
    },
    {
     "pattern": "AI-as-magic",
     "status": "clean",
     "note": "AI bounded to extraction/assembly/drafting/comparison; deadline math and completeness are deterministic; humans own both chokepoints."
    },
    {
     "pattern": "blockchain",
     "status": "clean",
     "note": "No blockchain anywhere; evidence integrity via hash-chained Postgres log."
    },
    {
     "pattern": "agent-first (agents replace humans)",
     "status": "clean",
     "note": "Every agent has forbidden actions; two human chokepoints are permanent policy."
    },
    {
     "pattern": "microservices by default",
     "status": "clean",
     "note": "ADR-2/A-ADR-1 chose modular monolith with reasons."
    },
    {
     "pattern": "everything-is-core",
     "status": "clean",
     "note": "CRM/billing/e-sign marked buy; portals marked integrate; field capture explicitly never-us."
    }
   ],
   "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": "Architecture",
     "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": "Deadline clock enforcement (primary), Permit package production, Make-ready cost audit, Playbook/rulebook knowledge"
      }
     ]
    },
    {
     "id": "boundary",
     "title": "Boundary",
     "passed": true,
     "checks": [
      {
       "name": ">=4 bounded contexts",
       "ok": true,
       "evidence": "6 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": "6 invariants with enforcement mechanisms"
      }
     ]
    },
    {
     "id": "ai-safety",
     "title": "AI Safety",
     "passed": true,
     "checks": [
      {
       "name": "Every agent has forbidden actions",
       "ok": true,
       "evidence": "3 agents, all with forbidden-action lists and human approval"
      },
      {
       "name": "Human chokepoints defined",
       "ok": true,
       "evidence": "Package sign-off + escalation approval, permanent"
      }
     ]
    },
    {
     "id": "buildability",
     "title": "Buildability",
     "passed": true,
     "checks": [
      {
       "name": ">=3 use cases with main flows",
       "ok": true,
       "evidence": "3 use cases end-to-end"
      },
      {
       "name": "Architecture chosen with ADRs",
       "ok": true,
       "evidence": "5 DDD ADRs + 5 architecture ADRs"
      }
     ]
    }
   ],
   "contradiction_scan": [
    {
     "id": "CMD-EVT-SubmitIntakeItem-IntakeItemRejected",
     "severity": "info",
     "message": "Command SubmitIntakeItem references failure event 'IntakeItemRejected' not present in domain_events list (failure events intentionally not exhaustively enumerated)",
     "refs": [
      "SubmitIntakeItem",
      "IntakeItemRejected"
     ]
    },
    {
     "id": "CMD-EVT-DeclareBreach-BreachSuppressed",
     "severity": "info",
     "message": "Command DeclareBreach references failure event 'BreachSuppressed' not present in domain_events list (tolling path documented in alternative flows)",
     "refs": [
      "DeclareBreach",
      "BreachSuppressed"
     ]
    },
    {
     "id": "AGG-CTX-EscalationLetter",
     "severity": "warn",
     "message": "EscalationLetter appears as entity in ClockLedger aggregate and as owned domain in correspondence module — ownership: ClockLedger owns state, correspondence module owns template rendering",
     "refs": [
      "ClockLedger",
      "correspondence"
     ]
    }
   ],
   "rubric": {
    "categories": [
     {
      "category": "Domain accuracy",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Ubiquitous language quality",
      "score": 8,
      "min": 7,
      "passed": true
     },
     {
      "category": "Subdomain classification quality",
      "score": 9,
      "min": 7,
      "passed": true
     },
     {
      "category": "Bounded context clarity",
      "score": 8,
      "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": "Buildability",
      "score": 8,
      "min": 7,
      "passed": true
     }
    ],
    "overall_pass": true,
    "pass": true,
    "average": 8.5
   },
   "foundry_package": {
    "version": "1.0.0",
    "checksum": "papd-v1",
    "counts": {
     "subdomains": 10,
     "bounded_contexts": 6,
     "aggregates": 7,
     "events": 8,
     "commands": 6,
     "policies": 5,
     "ai_agents": 3,
     "invariants": 6,
     "integrations": 5,
     "adrs": 5
    },
    "subset": {
     "subdomains": [
      "Deadline clock enforcement",
      "Permit package production",
      "Make-ready cost audit",
      "Per-utility playbooks & rulebook knowledge",
      "Field-data intake & normalization",
      "Escalation correspondence",
      "Client reporting & milestone mapping",
      "Portal operations",
      "Benchmark database",
      "CRM/billing/e-sign (generic)"
     ],
     "bounded_contexts": [
      "Intake",
      "Permit Production",
      "Clock Enforcement",
      "Cost Audit",
      "Knowledge",
      "Client & Reporting"
     ],
     "aggregates": [
      "Engagement",
      "PoleRecord",
      "Application",
      "ClockLedger",
      "Reconciliation",
      "UtilityPlaybook",
      "ClientAccount"
     ],
     "events": [
      "IntakeReceived",
      "IntakeCompleted",
      "PackageAssembled",
      "PackageApproved",
      "ApplicationSubmitted",
      "ClockBreached",
      "EstimateReceived",
      "SavingsDocumented"
     ],
     "commands": [
      "SubmitIntakeItem",
      "ApprovePackage",
      "SubmitApplication",
      "DeclareBreach",
      "ApproveEscalation",
      "RecordDocumentedSavings"
     ],
     "policies": [
      "No-unsigned-outbound",
      "Same-day-breach-response",
      "48-hour-postmortem",
      "Divergence-halt",
      "Written-correction-fee-rule"
     ],
     "ai_agents": [
      "Survey Extraction Agent",
      "Package Assembly & Correspondence Agent",
      "Reconciliation Agent"
     ],
     "invariants": [
      "No clock date is ever computed by an LLM",
      "Nothing is submitted to a utility without a named reviewer's sign-off",
      "No enforcement letter leaves without account-lead approval and client signature",
      "Contingency fees accrue only on utility written corrections",
      "Every rule version carries an effective-date range and source pin",
      "No identifiable cross-client utility cost data is ever disclosed"
     ],
     "integrations": [
      "NJUNS",
      "Alden One",
      "Utility proprietary portals / email / certified mail",
      "Client field-capture ecosystems (Katapult Pro, ikeGPS)",
      "E-sign + CRM + accounting"
     ],
     "adrs": [
      "ADR-1: All deadline math in deterministic code; LLMs never compute dates",
      "ADR-2: Modular monolith + append-only event log over microservices",
      "ADR-3: Playbooks as git-backed YAML data, not prose or code",
      "ADR-4: Manual portal operations at launch; RPA only after SOPs stabilize",
      "ADR-5: Single frontier-LLM API with portability harness, no fine-tuning"
     ]
    }
   }
  }
 },
 "ddd_coverage": {
  "slug": "pole-attachment-permit-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": 10,
    "min": 8,
    "ok": true,
    "gate": "core",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "bcs",
    "label": "Bounded contexts",
    "count": 6,
    "min": 4,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "ctx_map",
    "label": "Context map",
    "count": 6,
    "min": 3,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "event_storm",
    "label": "Event storm rows",
    "count": 15,
    "min": 6,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "aggregates",
    "label": "Aggregates",
    "count": 7,
    "min": 3,
    "ok": true,
    "gate": "invariant",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "invariants",
    "label": "Invariants",
    "count": 6,
    "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 claim (source + strength)."
   },
   {
    "key": "assumption_reg",
    "label": "Assumption register",
    "count": 7,
    "min": 4,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "commands",
    "label": "Commands",
    "count": 6,
    "min": 4,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "policies",
    "label": "Policies",
    "count": 5,
    "min": 3,
    "ok": true,
    "gate": "boundary",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "human_roles",
    "label": "Human roles",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "ai-safety",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "data_objects",
    "label": "Data objects",
    "count": 6,
    "min": 4,
    "ok": true,
    "gate": "data",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "adrs",
    "label": "ADRs",
    "count": 5,
    "min": 3,
    "ok": true,
    "gate": "buildability",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "risk_register",
    "label": "Risk register",
    "count": 6,
    "min": 4,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   }
  ],
  "failingGates": []
 },
 "architecture": {
  "slug": "pole-attachment-permit-desk",
  "archetypes": [
   "operations desk / ledger system",
   "document pipeline",
   "compliance state machine"
  ],
  "archetype_impact": "The system is an internal production line with an evidence spine, not a SaaS product: correctness, auditability, and human gating dominate every trade-off; client-facing surface is deliberately thin (portal upload + weekly dashboard).",
  "personality": [
   "correctness-first",
   "audit-everything",
   "boring-on-purpose",
   "manual-before-automated",
   "small-team-operable"
  ],
  "forces_ranked": [
   {
    "force": "Correctness",
    "why": "A wrong deadline forfeits client rights; a defective package restarts a 45-90 day clock — errors are the product failing."
   },
   {
    "force": "Auditability",
    "why": "The event log doubles as the dispute-support evidence file clients and their counsel rely on."
   },
   {
    "force": "Operational simplicity",
    "why": "Sub-15-person team; every infrastructure component must earn its keep."
   },
   {
    "force": "Cost per pole",
    "why": "$8.50 COGS target funds the margin path; inference + tooling budgeted at $1.60/pole."
   },
   {
    "force": "Evolvability",
    "why": "Rule regimes change (staged effective dates); playbooks diff weekly; prompts version continuously."
   }
  ],
  "tradeoffs": [
   "Manual portal operations at launch (higher COGS) in exchange for visible failure modes and SOP-grounded automation later",
   "Modular monolith (single deployable risk) in exchange for a small team actually operating it well",
   "100% human QC at launch (reviewer minutes) in exchange for the refund-backed quality guarantee being safe to offer"
  ],
  "quality_scenarios": [
   {
    "attribute": "Correctness (clock)",
    "target": "Zero undetected computation divergence, ever",
    "assumption": "Dual implementation truly independent"
   },
   {
    "attribute": "Correctness (gate)",
    "target": "Zero completeness rejections attributable to gate misses on hardened playbooks",
    "assumption": "Rejection library feeds gates within 48h"
   },
   {
    "attribute": "Timeliness",
    "target": "100% of breaches actioned <=1 business day",
    "assumption": "Sweep freshness <24h maintained"
   },
   {
    "attribute": "Throughput",
    "target": "1,500-pole batch normalized + gated in <4h wall-clock",
    "assumption": "Parallel extraction; no per-pole human touch on high-confidence fields"
   },
   {
    "attribute": "Availability",
    "target": "99.5% for internal tools; sweeps never miss a calendar day",
    "assumption": "Managed cloud + job retries"
   },
   {
    "attribute": "Durability",
    "target": "Zero evidence-file loss; quarterly restore drills pass",
    "assumption": "Daily encrypted backups + object-store versioning"
   },
   {
    "attribute": "Security",
    "target": "Zero cross-client access paths",
    "assumption": "Customer-scoped prefixes + authz tests in CI"
   },
   {
    "attribute": "Cost",
    "target": "<=$1.60/pole infra+inference at day-90 volumes",
    "assumption": "Batched inference; small models for classification where eval-equal"
   },
   {
    "attribute": "Auditability",
    "target": "Any production artifact reproducible from version pins",
    "assumption": "Pins recorded at write time"
   },
   {
    "attribute": "Maintainability",
    "target": "New utility playbook live in <2 days",
    "assumption": "YAML schema + linter stable"
   },
   {
    "attribute": "Portability",
    "target": "Model cutover in <1 week via eval harness",
    "assumption": "No fine-tuning dependency"
   },
   {
    "attribute": "Recoverability",
    "target": "RPO 24h / RTO 4h",
    "assumption": "Runbook drilled quarterly"
   }
  ],
  "options": [
   {
    "style": "Modular monolith + event log",
    "fits_when": "Small team, high audit demands, bounded domain",
    "fits_here": "Perfect: evidence spine is a deliverable; contexts map to modules; one deployable",
    "wrong_here": "—",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "security_impact": "Small attack surface",
    "scaling_path": "Extract clock service later if isolation demanded",
    "team_fit": "1-2 engineers can own it",
    "recommended": true
   },
   {
    "style": "Microservices",
    "fits_when": "Many teams, independent scaling domains",
    "fits_here": "No: one pipeline, one team",
    "wrong_here": "Distributed failure modes threaten clock correctness; ops burden steals reviewer budget",
    "complexity": "high",
    "cost": "high",
    "ops_burden": "high",
    "security_impact": "Larger surface",
    "scaling_path": "n/a",
    "team_fit": "Poor",
    "recommended": false
   },
   {
    "style": "No-code/automation platform (Zapier/n8n core)",
    "fits_when": "Glue workflows, low correctness stakes",
    "fits_here": "Only for peripheral notifications",
    "wrong_here": "Clock math and gates demand tested, owned code; audit trail fragmentary",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "medium",
    "security_impact": "Vendor sprawl",
    "scaling_path": "Dead end",
    "team_fit": "Tempting, wrong",
    "recommended": false
   },
   {
    "style": "Serverless functions",
    "fits_when": "Spiky, stateless workloads",
    "fits_here": "Partial: sweeps could be functions",
    "wrong_here": "State machine + evidence log want a persistent core; cold-start and orchestration complexity",
    "complexity": "medium",
    "cost": "low",
    "ops_burden": "medium",
    "security_impact": "Neutral",
    "scaling_path": "Fine for jobs",
    "team_fit": "OK",
    "recommended": false
   },
   {
    "style": "Off-the-shelf joint-use software as core",
    "fits_when": "Operating owner-side inventories",
    "fits_here": "No: attacher-side outcome logic absent; we USE these platforms",
    "wrong_here": "Owner-side data models; no clock enforcement; license cost without moat",
    "complexity": "low",
    "cost": "medium",
    "ops_burden": "low",
    "security_impact": "Data residency questions",
    "scaling_path": "n/a",
    "team_fit": "n/a",
    "recommended": false
   }
  ],
  "chosen_style": "Modular monolith (Python) + Postgres event log + git-backed knowledge store",
  "chosen_rationale": "Maximizes correctness and auditability per unit of ops burden; module boundaries mirror bounded contexts so later extraction (clock service) is a refactor, not a rewrite; every artifact reproducible from version pins.",
  "rejected": [
   {
    "style": "Microservices",
    "why_rejected": "Distributed complexity threatens the two things that matter most — clock correctness and a coherent evidence log — while solving problems (team scaling) the desk doesn't have."
   },
   {
    "style": "No-code core",
    "why_rejected": "The clock engine and completeness gates are the product; they need tests, types, and dual computation, not visual workflow boxes."
   }
  ],
  "target": {
   "overview": "Single-region cloud deployment: Python modular monolith, Postgres (+pgvector), S3-compatible object store, Postgres-backed job queue, thin client portal, static weekly dashboards, LLM API behind a versioned service layer.",
   "frontend": "Server-rendered internal apps (ops board, reviewer bench, ledger view) + minimal client portal; static HTML weekly dashboards at launch.",
   "backend": "Python (FastAPI) modular monolith; contexts as packages with enforced dependency rules; pure-code clock module.",
   "data": "Postgres schema-per-context; append-only event tables; pgvector for retrieval; git YAML for playbooks/rules; S3 for documents (content-hash addressed).",
   "api": "Internal module interfaces + published event schemas; no public API at launch; client portal endpoints scoped per engagement.",
   "authn_authz": "SSO (staff) with roles reviewer/lead/ops/admin; magic-link + scoped tokens (clients); per-engagement object scoping enforced at query layer.",
   "integrations": "Adapters: NJUNS, Alden One, utility portals (manual->RPA), intake mailbox, e-sign, CRM, accounting.",
   "background_jobs": "Daily clock sweep, nightly dual recompute, ingestion pollers, report compiler, backup verification.",
   "object_storage": "Customer-scoped prefixes; versioning on; content hashes recorded in event log.",
   "notifications": "Email + dashboard flags; breach events also page account lead same day.",
   "search": "Postgres FTS over correspondence archive and rejection library.",
   "analytics": "KPI tables materialized nightly; founder weekly dashboard.",
   "ai": "Frontier LLM API via thin service: extraction, assembly, drafting, reconciliation prompts — versioned, eval-gated, forbidden from dates/sends/accruals.",
   "observability": "Structured logs, metrics (sweep freshness, divergence, acceptance, queue age), error tracking, alert routing to founder.",
   "deployment": "IaC (Terraform), blue-green on a managed platform, migrations gated on backup success.",
   "security": "Vaulted secrets, least-privilege portal credentials, MFA, dependency scanning, quarterly access review.",
   "dr": "Daily encrypted backups, cross-region copy, RPO 24h / RTO 4h, quarterly restore drill reproducing ledger hashes."
  },
  "modules": [
   {
    "name": "clock",
    "responsibility": "Deadline computation, ledger state machine, breach declaration, dual recompute",
    "owned_data": [
     "ClockLedger",
     "BreachEvents",
     "RightsElections",
     "RuleVersionPins"
    ],
    "entities": [
     "ClockInstance",
     "BreachEvent",
     "EscalationLetter(ref)",
     "RightsElection"
    ],
    "interfaces": [
     "ClockLedgerView",
     "BreachFeed"
    ],
    "depends_on": [
     "knowledge (rule versions)",
     "eventlog"
    ],
    "events_produced": [
     "ClockInstantiated",
     "ClockBreached",
     "ComputationDivergenceDetected"
    ],
    "events_consumed": [
     "ApplicationSubmitted",
     "UtilityEventRecorded"
    ],
    "failure_risks": [
     "Rule mis-encoding",
     "Event-ingestion gaps"
    ],
    "scaling": "Pure functions; trivially parallel per application",
    "future_split_trigger": "Split out clock into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "production",
    "responsibility": "Assembly, gating, QC, submission with receipts",
    "owned_data": [
     "Applications",
     "QCRecords",
     "SubmissionReceipts"
    ],
    "entities": [
     "Application",
     "PackageExhibit",
     "QCRecord"
    ],
    "interfaces": [
     "BatchStatusBoard",
     "ApplicationSubmitted event"
    ],
    "depends_on": [
     "intake (batches)",
     "knowledge (playbooks)",
     "adapters (channels)"
    ],
    "events_produced": [
     "PackageAssembled",
     "PackageApproved",
     "ApplicationSubmitted"
    ],
    "events_consumed": [
     "IntakeCompleted",
     "PlaybookUpdated"
    ],
    "failure_risks": [
     "Playbook staleness",
     "Channel failures"
    ],
    "scaling": "Queue-parallel per application; reviewer capacity is the governor",
    "future_split_trigger": "Split out production into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "intake",
    "responsibility": "Uploads, scoring, extraction, exceptions, canonical records",
    "owned_data": [
     "Engagements",
     "PoleRecords",
     "SourceDocs",
     "ConfidenceScores"
    ],
    "entities": [
     "Engagement",
     "IntakeItem",
     "PoleRecord"
    ],
    "interfaces": [
     "NormalizedBatch",
     "ExceptionQueue"
    ],
    "depends_on": [
     "ai-service",
     "objectstore"
    ],
    "events_produced": [
     "IntakeReceived",
     "IntakeCompleted",
     "PoleRecordNormalized"
    ],
    "events_consumed": [],
    "failure_risks": [
     "Format drift",
     "Client data quality"
    ],
    "scaling": "Parallel extraction workers",
    "future_split_trigger": "Split out intake into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "audit",
    "responsibility": "Estimate/invoice reconciliation, findings, savings documentation, accrual gating",
    "owned_data": [
     "Reconciliations",
     "FindingsMemos",
     "SavingsRecords"
    ],
    "entities": [
     "EstimateDoc",
     "InvoiceDoc",
     "ReconLine"
    ],
    "interfaces": [
     "FindingsMemo",
     "SavingsLedger"
    ],
    "depends_on": [
     "clock (evidence spine)",
     "knowledge (benchmarks)",
     "ai-service"
    ],
    "events_produced": [
     "InvoiceReconciled",
     "SavingsDocumented"
    ],
    "events_consumed": [
     "EstimateReceived"
    ],
    "failure_risks": [
     "False positives",
     "Correction-artifact ambiguity"
    ],
    "scaling": "Per-invoice parallel; reviewer validation governs",
    "future_split_trigger": "Split out audit into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "knowledge",
    "responsibility": "Rule corpus (effective-date-aware), playbooks, rejection library, de-identified benchmarks",
    "owned_data": [
     "RuleVersions",
     "Playbooks",
     "RejectionLibrary",
     "Benchmarks"
    ],
    "entities": [
     "RuleVersion",
     "UtilityPlaybook",
     "BenchmarkObservation"
    ],
    "interfaces": [
     "RulebookAPI",
     "PlaybookAPI"
    ],
    "depends_on": [
     "git store"
    ],
    "events_produced": [
     "RuleVersionPublished",
     "PlaybookUpdated",
     "PlaybookHardened"
    ],
    "events_consumed": [
     "RejectionRecorded",
     "BenchmarkRecorded"
    ],
    "failure_risks": [
     "Staleness",
     "De-identification lapses"
    ],
    "scaling": "Read-heavy; cache-friendly",
    "future_split_trigger": "Split out knowledge into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   },
   {
    "name": "reporting",
    "responsibility": "Dashboards, milestone maps, waitlist, client billing, KPI materialization",
    "owned_data": [
     "ClientAccounts",
     "Dashboards",
     "Waitlist",
     "ClientInvoices"
    ],
    "entities": [
     "ClientAccount",
     "Segment",
     "DashboardIssue"
    ],
    "interfaces": [
     "WeeklyDashboard",
     "AccountStatus"
    ],
    "depends_on": [
     "eventlog (read-only)",
     "adapters (CRM/accounting/e-sign)"
    ],
    "events_produced": [
     "DashboardPublished",
     "SegmentRenewed"
    ],
    "events_consumed": [
     "All (read models)"
    ],
    "failure_risks": [
     "Narrative drift beyond log"
    ],
    "scaling": "Nightly materialization",
    "future_split_trigger": "Split out reporting into an independent deployment when its throughput or a distinct scaling profile justifies it; not warranted pre-revenue."
   }
  ],
  "data_architecture": {
   "primary_db": "Postgres 16 (managed), schema-per-context",
   "secondary": [
    "Git-backed YAML (playbooks, rules, prompts)",
    "S3-compatible object store (documents, receipts, letters)"
   ],
   "cache": "None at launch (read models are cheap); add Redis only on measured need",
   "search": "Postgres FTS (correspondence, rejection library)",
   "vector": "pgvector for rule/playbook retrieval; effective-date filters in SQL",
   "object_storage": "Customer-scoped prefixes, versioning, content-hash addressing recorded in event log",
   "schema_strategy": "Explicit migrations per context schema; event tables append-only with hash chaining",
   "migrations": "Reviewed, reversible, gated on fresh backup; ledger tables never rewritten",
   "backups": "Daily encrypted full + WAL; cross-region copy; quarterly restore drill verifying ledger hashes",
   "retention": "Evidence files 7 years or per engagement letter; playbooks/benchmarks permanent (de-identified); client sources returned/destroyed at termination",
   "audit_logs": "Append-only event log is first-class product data: who/what/when + hashes + approval chains + version pins",
   "soft_delete": "Domain objects soft-delete only; ledger/event rows never delete (legal-hold aware)",
   "privacy": "No consumer PII expected; quarantine-and-minimize SOP if encountered; NDA-bound business data classifications enforced in authz",
   "encryption": "At rest (managed KMS) + TLS in transit; restricted-class objects double-enveloped",
   "multi_tenancy": "Single-tenant desk with per-client scoping (client_id on every row + prefix scoping + query-layer enforcement); clients never share any view"
  },
  "api": {
   "style": "Internal module interfaces + published event schemas; thin REST for client portal",
   "public_vs_internal": "No public API. Client portal endpoints are engagement-scoped uploads/status/signature only.",
   "versioning": "Event schemas semver'd; consumers pin major versions",
   "rate_limiting": "Portal endpoints per-token limits; adapters respect external portal etiquette",
   "idempotency": "Command handlers idempotent by natural keys (application id + event type + source hash)",
   "pagination": "Cursor-based on read models",
   "error_format": "Problem+JSON internally; portal errors carry remediation copy + owner",
   "webhook_security": "E-sign/CRM webhooks HMAC-verified, replay-protected",
   "retries": "Outbox with exponential backoff; DLQ visible on the ops board",
   "contract_testing_plan": "Consumer-driven tests on event schemas; recorded fixtures for adapters",
   "backward_compat": "Additive event evolution; breaking changes require new major + dual-publish window",
   "contract_testing": "Event schemas shared as versioned Pydantic models; consumer-driven contract tests in CI; adapter fixtures recorded from manual portal operations."
  },
  "security": {
   "authn": "SSO (staff, MFA enforced); magic-link + short-lived scoped tokens (clients)",
   "authz": "RBAC (reviewer/lead/ops/admin/client) + per-engagement scoping at query layer; deny-by-default",
   "tenant_isolation": "client_id row scoping + object-store prefixes + authz tests in CI (client A cannot enumerate client B)",
   "secrets": "Vault-managed; portal credentials least-privilege; rotation on staff change",
   "encryption": "KMS at rest, TLS 1.2+ transit, restricted-class double envelope",
   "session": "Short-lived JWTs with rotation; portal tokens engagement-scoped",
   "input_validation": "Schema validation at every boundary; uploaded files type-checked + scanned",
   "api_protection": "Rate limits, HMAC webhooks, no public surface",
   "audit_log": "Append-only, hash-chained, approval chains + version pins mandatory",
   "admin_access": "Founder-only overrides, logged with justification, sampled in QA",
   "supply_chain": "Lockfiles + dependency scanning + pinned base images",
   "threat_model": [
    "Prompt injection via crafted utility documents -> agents are data-scoped, tool-less for side effects, human-gated",
    "Portal credential theft -> vaulting, MFA, anomaly alerts on submission volume",
    "Cross-client leakage -> scoping tests, de-identified benchmarks, access review",
    "Evidence tampering -> append-only hash-chained log; restore drills verify hashes"
   ],
   "abuse_cases": [
    "Insider exfiltrates dispute evidence -> restricted class, access logging, least privilege",
    "Client disputes what was sent -> hashed artifacts + receipts settle it",
    "Malicious upload (malware) -> scanning + type allowlist + sandboxed parsing"
   ],
   "zero_trust": "Every internal call carries actor identity; no ambient authority; adapters hold minimal scopes",
   "asvs_notes": "Target ASVS L2 for portal surface; L3 controls (hash chaining, dual control) on evidence and dispatch paths"
  },
  "reliability": {
   "failure_modes": [
    "Sweep job failure -> freshness alarm -> manual sweep SOP",
    "LLM API outage -> extraction/drafting queue pauses; clocks unaffected (pure code); manual drafting fallback for same-day breaches",
    "Portal adapter breakage -> manual channel per playbook; ingestion-gap alarm",
    "Postgres failover -> managed HA; jobs resume from queue"
   ],
   "graceful_degradation": "The desk degrades to manual operations at every layer — SOPs predate automation by design; clock computation never degrades (no external dependencies).",
   "retry_policy": "Exponential backoff with jitter; poison messages to DLQ with ops-board visibility",
   "timeouts": "All external calls time-boxed; batch stages carry wall-clock budgets",
   "circuit_breaker": "Adapters trip to manual-mode flags visible on the ops board",
   "queueing": "Postgres-backed queue; per-job-type concurrency caps",
   "idempotency": "Natural-key idempotent handlers; replays safe",
   "dlq": "Visible, owned, SLA'd like any exception queue",
   "transactions": "Aggregate-boundary transactions; cross-context via outbox events",
   "dr": "RPO 24h / RTO 4h; cross-region backup copy; quarterly drill",
   "incident_response": "Runbook: detect -> contain -> client notice per contract -> postmortem-to-rule within 48h",
   "slos": [
    {
     "name": "Sweep freshness",
     "target": "<24h, 100% of days"
    },
    {
     "name": "Breach action latency",
     "target": "<=1 business day, 100%"
    },
    {
     "name": "Batch normalization",
     "target": "<4h for 1,500 poles"
    },
    {
     "name": "Internal tool availability",
     "target": "99.5%"
    }
   ]
  },
  "scaling": {
   "mvp_can_stay_simple": [
    "Single Postgres",
    "In-process events (outbox)",
    "Static weekly dashboards",
    "Manual portal ops"
   ],
   "modular_now": [
    "Clock as a pure package (extractable)",
    "Adapters behind interfaces",
    "Event schemas versioned from day one"
   ],
   "deferrable": [
    "Redis cache",
    "Message broker",
    "RPA at scale",
    "Client-facing live dashboard",
    "Multi-region"
   ],
   "breaks_first": "Reviewer capacity (human), then extraction throughput, then job queue — in that order; none architectural before ~25k poles/mo",
   "db_path": "Vertical first; read replicas for reporting; partition event tables by year",
   "jobs_path": "Queue concurrency scaling; dedicated workers per job type",
   "cache_path": "Add Redis for read models only on measured latency need",
   "search_path": "Postgres FTS -> OpenSearch only if correspondence corpus demands it",
   "files_path": "Object store scales natively; lifecycle rules per retention class",
   "api_path": "Portal stays thin; public API only if a partner-integration business case appears",
   "multi_region": "Not before a compliance/client demand exists; backups already cross-region",
   "cost_control": "Batched inference, small-model routing where eval-equal, per-pole cost dashboard with $1.60 alert line"
  },
  "ai": {
   "provider": "Single frontier LLM API behind an internal service (portable by design)",
   "prompt_mgmt": "Prompts/templates/taxonomies in git, semver'd, pinned per artifact",
   "rag": "Rulebook + playbook retrieval with effective-date SQL filters; citation text only — never date math",
   "vector": "pgvector; small, curated corpus (rules, playbooks, gold standards)",
   "embeddings": "Provider-agnostic wrapper; re-embed on model change (corpus is small)",
   "eval": "CI harness: extraction accuracy, package golden-files, boundary linter, reconciliation grading; regression blocks cutover",
   "hitl": "Two permanent chokepoints (package sign-off, escalation approval) + exception queues + finding validation",
   "guardrails": "Forbidden-action lists at tool layer: no sends, no date arithmetic, no accruals, no silent ambiguity resolution",
   "prompt_injection": "External documents are data; schema-constrained outputs; no side-effect tools; human approval bounds impact",
   "leakage": "Per-engagement memory scope; no cross-client context in any prompt; benchmarks aggregated before retrieval",
   "fallback": "Manual drafting/extraction SOPs; clocks unaffected by AI outage",
   "latency_cost": "Batch-mode extraction; $0.60/pole inference budget tracked per batch",
   "memory": "No persistent agent memory; engagement-scoped context assembled per task",
   "tool_permissions": "Read-only retrieval + document generation only; dispatch/accrual tools are human-actor-only",
   "auditability": "Model ID + prompt version + input/output hashes on every agent action",
   "citation": "All regulatory citations injected from the rule engine; drafts failing citation-match auto-reject"
  },
  "devops": {
   "environments": [
    "dev",
    "prod"
   ],
   "cicd": "GitHub Actions: lint, types, unit/property/golden tests, eval harness, authz tests; deploy on tag",
   "iac": "Terraform for all cloud resources",
   "secrets": "Vault; no secrets in repo or CI logs",
   "preview_envs": "Not needed (internal tools); feature flags instead",
   "migrations": "Reversible, backup-gated, ledger-safe (append-only enforced by role permissions)",
   "rollback": "Blue-green switchback; data migrations forward-fixed",
   "release_style": "Small, frequent, tagged; changelog tied to ADRs",
   "feature_flags": "Simple DB-backed flags (e.g., risk-tiered-sampling per utility)",
   "monitoring": "Metrics + alerts as defined in observability; founder is pager at launch",
   "alerting": "Divergence/freshness/breach-latency page immediately; queues/costs daily digest",
   "logs": "Structured JSON, PII-free by construction, 90-day hot / archive to object store",
   "error_tracking": "Sentry-equivalent with release tagging",
   "uptime": "Managed platform SLA + external ping on portal",
   "cost_monitoring": "Per-pole cost dashboard; inference spend per batch; $ alerts"
  },
  "testing": {
   "unit": "Date math (jurisdiction calendars), tier/aggregation rules, fee arithmetic, gate construction",
   "integration": "Pipeline stages with real Postgres; approval gating end-to-end",
   "contract": "Event schemas consumer-driven; adapter fixtures recorded from manual ops",
   "e2e": "Golden path: intake -> submission -> clock -> breach -> approved letter (staged fixtures)",
   "security": "Authz scoping tests (cross-client denial), upload validation, webhook HMAC",
   "a11y": "axe on internal tools + portal; print-parity check on dashboards",
   "load": "Batch normalization at 5x target volume quarterly",
   "chaos": "Kill sweep mid-run; verify recompute + alarms catch everything",
   "migration": "Forward/back on copy of prod schema; ledger append-only assertion",
   "backup_restore": "Quarterly full restore; ledger hash verification",
   "ai_eval": "Per-change harness; quarterly portability drill on >=2 alternate models",
   "test_data": "Synthetic pole/application fixtures + anonymized pilot data (with consent) as it accrues"
  },
  "observability": {
   "logs": "Structured, actor-tagged, hash-referenced; no document contents in logs",
   "metrics": "Sweep freshness, divergence count, acceptance per utility, breach latency, queue ages, minutes/pole, cost/pole",
   "traces": "Request/job tracing on pipeline stages (batch id correlation)",
   "audit_events": "First-class event log (product data, not telemetry)",
   "business_events": "KPI materialization nightly: poles processed, acceptance, savings, conversion funnel",
   "error_tracking": "Release-tagged; exception-queue linkage",
   "security_monitoring": "Auth anomalies, submission-volume anomalies, access-log review jobs",
   "cost_monitoring": "Inference + infra per pole vs $1.60 line",
   "dashboards": [
    "Ops batch board",
    "Clock health",
    "Playbook health",
    "Audit performance",
    "Founder weekly KPI"
   ],
   "alert_thresholds": [
    "Freshness >26h page",
    "Any divergence page",
    "Breach unactioned >1 day page",
    "Queue age >2x SLA digest"
   ],
   "triage": "Founder-owned rotation at launch; every page ends in a postmortem or a threshold adjustment ADR"
  },
  "cost": {
   "drivers": [
    {
     "name": "LLM inference",
     "note": "$0.60/pole budget; batch extraction dominates"
    },
    {
     "name": "Managed Postgres + platform",
     "note": "Small fixed; scales with event volume"
    },
    {
     "name": "Object storage",
     "note": "Documents + receipts; lifecycle rules keep it linear"
    },
    {
     "name": "SaaS stack (CRM, e-sign, vault)",
     "note": "$1,500/mo opex line in the financial model"
    },
    {
     "name": "Reviewer minutes",
     "note": "The real COGS — $2.25/pole at 3 min blended; automation reduces it, chokepoints preserve it"
    }
   ],
   "likely_traps": [
    "Per-page OCR pricing on scanned agreements",
    "RPA maintenance eating the automation dividend",
    "Unbatched inference on small extractions"
   ],
   "controls": [
    "Per-batch inference budget alarms",
    "Small-model routing where eval-equal",
    "Manual-first rule keeps automation ROI-gated",
    "Cost/pole on the founder dashboard weekly"
   ]
  },
  "multi_tenancy": {
   "model": "Single desk operating many client engagements (not SaaS multi-tenancy)",
   "isolation": "client_id scoping on every row + customer-scoped object prefixes + query-layer enforcement",
   "tenant_aware_authz": "Client tokens engagement-scoped; staff roles desk-wide with per-engagement conflict screening",
   "tenant_config": "Per-client milestone schedules, branding on letters (client-signed), reporting cadence",
   "branding": "Correspondence under client's name/letterhead; dashboards client-branded",
   "tenant_export": "Full evidence-file handover (documents, ledger, correspondence, worksheets) at any time and at termination",
   "tenant_deletion": "Per engagement letter: client sources returned/destroyed; desk retains de-identified learnings only",
   "tenant_audit": "Per-client access logs; conflict-of-interest register",
   "noisy_neighbor": "Queue concurrency caps per engagement; batch scheduling fair-shares reviewer time",
   "tenant_rate_limits": "Portal per-token limits",
   "billing": "Per-pole invoicing + contingency accruals from SavingsLedger; accounting adapter",
   "why_this_fits": "Clients buy an outcome, not software; isolation needs are evidence-grade, not platform-grade"
  },
  "privacy_compliance": {
   "data_classification": "Public / Internal / Confidential (build data) / Restricted (dispute evidence)",
   "minimization": "Only engagement-necessary documents accepted; PII quarantine SOP",
   "consent": "NDA + engagement letter govern all data use; no case studies without written consent",
   "access_logs": "On Confidential/Restricted reads; reviewed monthly/quarterly",
   "audit_trails": "Append-only event log with approval chains (product-grade)",
   "retention": "7 years evidence or per contract; permanent de-identified learnings",
   "legal_hold": "Flag freezes deletion lifecycle per engagement",
   "right_to_delete": "Contractual (B2B): client sources destroyed on request post-engagement, ledger retained per legal terms",
   "right_to_export": "Evidence-file handover on demand",
   "sensitive_handling": "Critical-infrastructure data: no cross-client disclosure; benchmarks de-identified at write",
   "boundaries": "US-only data residency at launch",
   "residency": "Single US region + US backup region",
   "vendor_risk": "SaaS vendors reviewed for SOC 2; DPAs where offered; adapter scopes minimal",
   "breach_response": "Runbook with client-notice SLA per contract; counsel on retainer for incident review",
   "admin_controls": "Founder-only overrides, logged; quarterly access recertification",
   "evidence_collection": "The system's normal operation IS evidence collection — hashes, receipts, chains"
  },
  "frontend": {
   "framework": "Server-rendered (FastAPI + Jinja) with htmx for interactivity — no SPA at launch",
   "rendering": "SSR; static HTML for weekly dashboards (print-parity)",
   "routing": "Server routes per tool (ops board, reviewer bench, ledger, portal)",
   "state": "Server-authoritative; minimal client state",
   "server_state": "Read models via cursor pagination",
   "forms": "Progressive enhancement; server validation authoritative",
   "error_handling": "Remediation copy + owner on every error surface",
   "components": "Small shared component set (ledger row, SLA timer, approval chip, breach badge)",
   "design_system": "Field Ledger territory tokens (see canva); IBM Plex; compact density",
   "auth_ui": "SSO redirect (staff); magic-link (client)",
   "authz_aware_ui": "Role-scoped navigation; engagement-scoped client views",
   "a11y": "WCAG 2.2 AA; icon+label+shape for all statuses; focus rings everywhere",
   "i18n": "en-US only",
   "performance": "SSR + minimal JS; dashboards are static files",
   "bundling": "None beyond htmx + small CSS build",
   "testing": "Playwright smoke on golden paths; axe in CI",
   "offline": "Not required (desk tools)",
   "realtime": "Polling on ops board; no websockets at launch"
  },
  "backend": {
   "framework": "Python 3.12 + FastAPI; modular packages per context",
   "layering": "Domain (pure) / application services / adapters — enforced import rules",
   "domain": "Aggregates + value objects as typed dataclasses; clock module 100% pure",
   "services": "Application services own transactions and event emission",
   "repositories": "Per-aggregate repos over Postgres; event-sourced where ledger-grade",
   "validation": "Pydantic at boundaries; domain invariants in aggregates",
   "authorization": "Decorator-enforced role + scope checks on every service entry",
   "jobs": "Postgres-backed queue workers; per-type concurrency",
   "events": "Outbox pattern; in-process dispatch + persisted log",
   "files": "Object-store adapter with hash addressing",
   "email_sms": "Adapter with template rendering; all sends human-gated where domain requires",
   "scheduled": "Cron-style scheduler for sweeps/recompute/reports with missed-run detection",
   "errors": "Typed error taxonomy; exception queues for domain exceptions",
   "logging": "Structured, actor + batch correlation",
   "config": "Env-based, typed settings; flags in DB",
   "di": "Constructor injection; adapters bound at startup",
   "testing": "pytest + hypothesis (property tests on clock); golden files for packages"
  },
  "diagrams": {
   "context_mermaid": "graph LR; Client[Client coordinator]-->|uploads|Intake; Intake-->|normalized batches|Production; Knowledge-->|playbooks|Production; Knowledge-->|rule versions|Clock; Production-->|submissions|Clock; Clock-->|estimates/invoices|Audit; Intake & Production & Clock & Audit-->|events|Reporting; Reporting-->|weekly dashboard|Client; Clock-->|approved letters|Utility[Pole owner]; Production-->|applications|Utility",
   "container_mermaid": "graph TB; subgraph Monolith; intake; production; clock; audit; knowledge; reporting; correspondence; end; Postgres[(Postgres + event log)]; S3[(Object store)]; Git[(Playbooks/rules YAML)]; LLM[LLM API]; Monolith---Postgres; Monolith---S3; knowledge---Git; intake & production & audit & correspondence---LLM; adapters[Portal/e-sign/CRM adapters]; production---adapters",
   "data_flow_mermaid": "graph LR; Exports[Survey exports]-->Extract[Extraction agent]; Extract-->Records[Canonical records]; Records-->Assemble; Playbook-->Assemble; Assemble-->Gate{Completeness gate}; Gate-->|pass|QC[Reviewer sign-off]; Gate-->|block|Fix[Ops fix loop]; QC-->Submit; Submit-->Receipt[(Receipt archived)]; Submit-->Clocks[Clock instantiation]",
   "auth_flow_mermaid": "sequenceDiagram; participant S as Staff; participant P as Portal client; participant App; S->>App: SSO + MFA; App->>S: role-scoped session; P->>App: magic link; App->>P: engagement-scoped token",
   "authz_flow_mermaid": "graph TD; Req[Service call]-->Actor{Actor identity}; Actor-->Role{Role check}; Role-->Scope{Engagement scope}; Scope-->|ok|Exec[Execute + log]; Scope-->|deny|Deny[Deny-by-default + log]",
   "deployment_mermaid": "graph LR; GH[GitHub]-->CI[Actions: tests+evals]; CI-->|tag|BG[Blue-green deploy]; BG-->Prod[Managed platform]; Prod---PG[(Managed Postgres)]; Prod---OS[(Object store)]; PG-->BK[(Encrypted backups, cross-region)]",
   "background_job_mermaid": "graph LR; Sched[Scheduler]-->Sweep[Daily clock sweep]; Sched-->Recompute[Nightly dual recompute]; Sched-->Ingest[Portal/email pollers]; Sched-->Reports[Weekly dashboard compile]; Sweep & Recompute-->Alarms{Divergence/freshness alarms}",
   "event_flow_mermaid": "graph LR; AS[ApplicationSubmitted]-->CI2[ClockInstantiated]; UE[UtilityEventRecorded]-->CB[ClockBreached]; CB-->ED[EscalationDrafted]-->AE[ApproveEscalation]-->ES[EscalationSent]; ER[EstimateReceived]-->IR[InvoiceReconciled]-->SD[SavingsDocumented]",
   "failure_flow_mermaid": "graph TD; F1[Sweep fails]-->A1[Freshness alarm >26h]-->M1[Manual sweep SOP]; F2[Divergence]-->H[Halt outbound]-->Inv[Founder investigation]-->PM[Postmortem-to-rule]; F3[Adapter break]-->MM[Manual-mode flag]-->SOP[Channel SOP]",
   "multi_tenant_flow_mermaid": "graph LR; T[Client token]-->Scope[Engagement scope check]-->Rows[client_id row filter]-->Prefix[S3 prefix scope]-->Data[Only own engagement data]",
   "ai_flow_mermaid": "graph LR; Doc[External document]-->|data only|Agent[LLM agent]; RuleEngine[Clock rule engine]-->|computed dates+citations|Agent; Agent-->Draft[Draft artifact]; Draft-->GateH{Human approval}; GateH-->|yes|Dispatch[Ops dispatch]; GateH-->|no|Revise"
  },
  "adrs": [
   {
    "id": "A-ADR-1",
    "decision": "Python modular monolith on a managed platform",
    "context": "Small team, correctness-first, evidence-grade audit",
    "options": [
     "Node microservices",
     "Python monolith",
     "Serverless",
     "No-code"
    ],
    "chosen": "Python monolith",
    "why": "One deployable, typed domain, property tests on clock, hiring pool",
    "consequences": [
     "Module discipline required",
     "Single-runtime coupling"
    ],
    "risks": [
     "Boundary erosion — CI import rules"
    ],
    "reversal": "Extract contexts along module seams",
    "revisit_when": "Clock isolation demanded or 25k+ poles/mo"
   },
   {
    "id": "A-ADR-2",
    "decision": "Postgres event log as the evidence spine (no broker)",
    "context": "Audit trail is a client deliverable",
    "options": [
     "Kafka",
     "Postgres outbox+log",
     "Vendor audit SaaS"
    ],
    "chosen": "Postgres outbox + append-only log",
    "why": "Transactional with domain writes; hash-chainable; one system to back up",
    "consequences": [
     "Volume ceiling far above needs",
     "Read models materialized"
    ],
    "risks": [
     "Table growth — yearly partitions"
    ],
    "reversal": "Introduce broker; log remains source of truth",
    "revisit_when": "Event volume or integration fan-out demands it"
   },
   {
    "id": "A-ADR-3",
    "decision": "SSR + htmx internal tools; no SPA",
    "context": "Desk tools for <10 users; print-parity reports",
    "options": [
     "React SPA",
     "SSR+htmx",
     "Retool-style internal builder"
    ],
    "chosen": "SSR+htmx",
    "why": "Speed to build, a11y, zero bundle complexity; dashboards are documents",
    "consequences": [
     "Limited rich interactivity"
    ],
    "risks": [
     "Ops-board ergonomics — revisit per feedback"
    ],
    "reversal": "SPA for specific tools if warranted",
    "revisit_when": "Reviewer bench ergonomics demand it"
   },
   {
    "id": "A-ADR-4",
    "decision": "pgvector over dedicated vector DB",
    "context": "Small curated corpus (rules, playbooks, gold standards)",
    "options": [
     "Pinecone-class SaaS",
     "pgvector",
     "No RAG (context stuffing)"
    ],
    "chosen": "pgvector",
    "why": "One database, SQL effective-date filters, corpus is thousands not millions",
    "consequences": [
     "Manual tuning"
    ],
    "risks": [
     "None at this scale"
    ],
    "reversal": "Swap retrieval adapter",
    "revisit_when": "Corpus >100k chunks"
   },
   {
    "id": "A-ADR-5",
    "decision": "Client dashboard as static weekly HTML at launch",
    "context": "Done-for-you positioning; lender-readable artifact",
    "options": [
     "Live portal dashboard",
     "Static weekly",
     "PDF email only"
    ],
    "chosen": "Static weekly HTML (+PDF render)",
    "why": "Print parity, evidence-backed, zero live-surface risk; matches weekly cadence clients actually consume",
    "consequences": [
     "No real-time client view"
    ],
    "risks": [
     "Client pull for live status — portal status endpoint covers basics"
    ],
    "reversal": "Promote to live view from same read models",
    "revisit_when": "Client demand or retainer-tier feature"
   }
  ],
  "roadmap": [
   {
    "phase": "Weeks 1-2",
    "build": [
     "Clock module + dual recompute + property tests",
     "Rulebook corpus pinned",
     "Template families + linter",
     "Canonical schemas"
    ],
    "avoid": [
     "Any portal RPA",
     "Client-facing polish"
    ],
    "defer": [
     "Benchmark store",
     "Dashboards beyond static"
    ],
    "monitor": [
     "Clock test coverage",
     "Counsel sign-off status"
    ],
    "triggers_to_change": [
     "Counsel flags boundary language -> template rework"
    ],
    "acceptable_debt": [
     "Manual everything operational"
    ],
    "dangerous_debt": [
     "Untested date math",
     "Unpinned rules"
    ]
   },
   {
    "phase": "Weeks 3-8 (pilot #1)",
    "build": [
     "Intake + extraction + exceptions",
     "Assembly + gate + QC bench",
     "Submission receipts",
     "Ledger + sweep + alarms"
    ],
    "avoid": [
     "Sampling QC",
     "Auto-send anything"
    ],
    "defer": [
     "Reconciliation agent (until first invoices)"
    ],
    "monitor": [
     "Minutes/pole by stage",
     "Acceptance",
     "Exception rates"
    ],
    "triggers_to_change": [
     "Format drift -> extractor fixtures"
    ],
    "acceptable_debt": [
     "Manual dashboards"
    ],
    "dangerous_debt": [
     "Gate gaps on live utility"
    ]
   },
   {
    "phase": "Weeks 9-13 (cohort)",
    "build": [
     "Escalation flow end-to-end",
     "Estimate/invoice reconciliation",
     "Weekly dashboard compiler",
     "Rejection library loop"
    ],
    "avoid": [
     "New client intake beyond cap"
    ],
    "defer": [
     "Portal ingestion automation"
    ],
    "monitor": [
     "Breach latency",
     "Finding acceptance",
     "Day-90 gate metrics"
    ],
    "triggers_to_change": [
     "Exception rate >15% on a utility -> hardening sprint"
    ],
    "acceptable_debt": [
     "Manual portal ops"
    ],
    "dangerous_debt": [
     "Unvalidated findings reaching clients"
    ]
   },
   {
    "phase": "Months 4-6",
    "build": [
     "Portal status ingestion",
     "Risk-tiered sampling",
     "Benchmark store v1",
     "Cost/pole dashboard"
    ],
    "avoid": [
     "Broker/microservices temptation"
    ],
    "defer": [
     "Owner-side desk exploration"
    ],
    "monitor": [
     "COGS/pole vs $8.50",
     "Sampling audit results"
    ],
    "triggers_to_change": [
     "RPA fragility -> narrow to status-read only"
    ],
    "acceptable_debt": [
     "htmx ergonomics"
    ],
    "dangerous_debt": [
     "Sampling without hardened-playbook evidence"
    ]
   },
   {
    "phase": "Months 7-12",
    "build": [
     "Multi-utility orchestration",
     "Retainer-tier reporting",
     "Reviewer #2 tooling"
    ],
    "avoid": [
     "Public API",
     "Feature sprawl"
    ],
    "defer": [
     "Clock service extraction (unless demanded)"
    ],
    "monitor": [
     "Blueprint year-1 table",
     "Renewal rate"
    ],
    "triggers_to_change": [
     "Renewal <40% -> pivot review per kill-tests"
    ],
    "acceptable_debt": [
     "Static client dashboards"
    ],
    "dangerous_debt": [
     "Quality metrics regression ignored at volume"
    ]
   }
  ],
  "anti_overengineering": {
   "flagged": [
    {
     "item": "Microservices",
     "why": "One team, one pipeline",
     "simpler": "Modular monolith with CI-enforced boundaries"
    },
    {
     "item": "Kafka/broker",
     "why": "Event volume is thousands/day",
     "simpler": "Postgres outbox + append-only log"
    },
    {
     "item": "SPA frontend",
     "why": "Ten internal users",
     "simpler": "SSR + htmx"
    },
    {
     "item": "Dedicated vector DB",
     "why": "Corpus is small and curated",
     "simpler": "pgvector"
    },
    {
     "item": "Fine-tuning",
     "why": "Assets are playbooks, not weights",
     "simpler": "Prompted frontier API + eval harness"
    },
    {
     "item": "Real-time client dashboard",
     "why": "Weekly cadence is the product",
     "simpler": "Static HTML + PDF"
    },
    {
     "item": "BPMN workflow engine",
     "why": "Three state machines, all known",
     "simpler": "Explicit code state machines"
    },
    {
     "item": "Day-one RPA",
     "why": "Hides failure modes pre-SOP",
     "simpler": "Manual with logged workarounds; automate on recurrence"
    },
    {
     "item": "Multi-region active-active",
     "why": "No availability contract demands it",
     "simpler": "Single region + cross-region backups"
    },
    {
     "item": "Custom client mobile app",
     "why": "Nobody asked",
     "simpler": "Email + portal"
    }
   ]
  },
  "risks": [
   {
    "risk": "Rule mis-encoding in clock engine",
    "likelihood": "Medium",
    "impact": "Critical",
    "mitigation": "Hand-computed suites, counsel verification, dual computation, red-teams",
    "detection": "Divergence alarms; postmortems",
    "owner": "Founder",
    "escalation": "Halt correspondence; client notice if any artifact affected",
    "fallback": "Manual computation SOP",
    "category": "correctness"
   },
   {
    "risk": "Adapter fragility (portals)",
    "likelihood": "High",
    "impact": "Medium",
    "mitigation": "Manual-first, fixtures, manual-mode flags",
    "detection": "Ingestion-gap alarms",
    "owner": "Ops",
    "escalation": "Manual channel per playbook",
    "fallback": "Fully manual ops (launch mode)",
    "category": "integration"
   },
   {
    "risk": "LLM API deprecation/outage",
    "likelihood": "Medium",
    "impact": "Medium",
    "mitigation": "Portability harness; manual fallbacks; clocks unaffected",
    "detection": "Provider status + eval failures",
    "owner": "Founder",
    "escalation": "Model cutover via harness",
    "fallback": "Manual drafting/extraction",
    "category": "vendor"
   },
   {
    "risk": "Event-log table growth",
    "likelihood": "Medium",
    "impact": "Low",
    "mitigation": "Yearly partitions; archive tiers",
    "detection": "Size monitors",
    "owner": "Founder",
    "escalation": "Partition maintenance",
    "fallback": "Object-store archive",
    "category": "data"
   },
   {
    "risk": "Module boundary erosion",
    "likelihood": "Medium",
    "impact": "Medium",
    "mitigation": "CI import rules; ADR discipline",
    "detection": "Dependency-graph checks",
    "owner": "Founder",
    "escalation": "Refactor sprint",
    "fallback": "—",
    "category": "architecture"
   },
   {
    "risk": "Founder pager fatigue",
    "likelihood": "Medium",
    "impact": "Medium",
    "mitigation": "Tight alert thresholds; postmortem-to-rule reduces repeats",
    "detection": "Page counts",
    "owner": "Founder",
    "escalation": "Reviewer cross-training on ops",
    "fallback": "Managed on-call service at scale",
    "category": "ops"
   }
  ],
  "rules": [
   "clock module imports no AI, no adapters, no I/O — pure functions only",
   "No LLM output becomes a date, a fee accrual, or a dispatched artifact",
   "Every outbound artifact requires its recorded human approval chain",
   "Event log is append-only; no UPDATE/DELETE grants on ledger tables",
   "Every production artifact records rule/playbook/prompt/model version pins",
   "External documents are data, never instructions",
   "Benchmarks de-identified at write; aggregation-only reads",
   "Adapters implement domain-owned interfaces; domain never imports adapters",
   "Reporting reads the event log only",
   "Any manual workaround recurring 5+ times triggers a build sprint",
   "Migrations gated on fresh backup; ledger-safe by construction",
   "New utility/state first occurrence requires human regime confirmation",
   "Client-scoped queries enforced at the data layer, not the handler layer"
  ],
  "audit": {
   "product_fit": "Architecture mirrors the service promise: deterministic clocks, gated quality, evidence-grade logging — the system is the SOP made executable.",
   "simplicity": "One runtime, one database, one object store, git for knowledge; every additional component was rejected with reasons.",
   "security": "Deny-by-default authz, scoped tenancy, vaulted secrets, injection-bounded agents, hash-chained evidence.",
   "reliability": "Degrades to manual everywhere; clocks have zero external dependencies; drills scheduled.",
   "scalability": "Human reviewer capacity is the honest bottleneck; compute scales trivially past any plausible volume.",
   "maintainability": "Typed domain, property tests, golden files, ADR discipline, versioned knowledge.",
   "performance": "Batch pipeline budgets (<4h/1,500 poles) with headroom; nothing latency-critical.",
   "cost": "Tracked per pole against the $8.50 COGS decomposition; inference budgeted at $0.60.",
   "compliance": "Boundary linting, counsel-reviewed templates, retention/legal-hold aware storage.",
   "dx": "Small, typed, boring stack; fixtures from real ops; fast CI.",
   "ops_burden": "Founder-operable at launch; alert thresholds tuned to page only on product-threatening states.",
   "extensibility": "Owner-side co-op desk (mirror), state packs, retainer tier — all fit existing seams.",
   "team_suitability": "1 engineer-founder + contractors at launch; hiring pool broad (Python/Postgres).",
   "time_to_market": "Clock + templates + manual ops = pilot-ready in 2 weeks; nothing exotic on the critical path.",
   "recommendation": {
    "style": "Modular monolith + event log",
    "stack": "Python 3.12/FastAPI, Postgres 16 + pgvector, S3-compatible store, htmx SSR, git YAML knowledge",
    "hosting": "Managed platform (single US region), Terraform, blue-green",
    "database": "Postgres with schema-per-context and append-only ledger tables",
    "auth": "SSO+MFA staff; magic-link engagement-scoped clients",
    "integrations": "Adapters: NJUNS/Alden/portals (manual->RPA), e-sign, CRM, accounting, intake mail",
    "ai_approach": "Frontier API behind versioned service; eval-gated; forbidden-action tool layer; no fine-tuning",
    "build_first": [
     "Clock module + tests + dual recompute",
     "Template families + linter",
     "Intake->gate->QC->submit spine"
    ],
    "avoid": [
     "Microservices",
     "Brokers",
     "Day-one RPA"
    ],
    "revisit_triggers": [
     "25k+ poles/mo",
     "Clock-isolation compliance demand",
     "Renewal <40% kill-test"
    ],
    "revisit_later": [
     "Clock service extraction on the first compliance/isolation demand or at 25k+ poles/month.",
     "Broker adoption when event fan-out exceeds outbox ergonomics.",
     "Live client dashboard when retainer tier demands it.",
     "OpenSearch when correspondence FTS p95 breaches SLO."
    ],
    "biggest_risks": [
     "Rule mis-encoding in the clock engine (critical — dual computation + counsel verification are non-negotiable).",
     "A gate gap causing a completeness rejection on a live BEAD build.",
     "Boundary creep in AI-drafted letters reaching a utility.",
     "Founder key-person concentration across engineering + account lead roles."
    ],
    "first_10_steps": [
     "Write the clock module's property/edge-case test suite before the module.",
     "Pin FCC 25-38 + Subpart J + DA-26-446 source PDFs into the rule corpus with effective dates.",
     "Implement dual recompute + divergence alarm and test the halt path.",
     "Freeze canonical pole/application schemas v1 with Pydantic models.",
     "Build the completeness gate as data-driven from playbook YAML.",
     "Stand up the append-only event log with hash chaining and no-UPDATE grants.",
     "Wire approval gating on submission and dispatch actions end-to-end.",
     "Ship the reviewer QC bench with the gold-standard checklist flow.",
     "Configure customer-scoped object prefixes + authz denial tests in CI.",
     "Schedule the first backup restore drill before pilot #1 data arrives."
    ],
    "top_10_rules": [
     "No LLM output becomes a date, an accrual, or a dispatched artifact.",
     "Every outbound artifact carries its recorded human approval chain.",
     "Ledger tables are append-only; no UPDATE/DELETE grants, ever.",
     "Every production artifact records rule/playbook/prompt/model version pins.",
     "External documents are data, never instructions.",
     "clock module imports no AI, no adapters, no I/O.",
     "Benchmarks de-identify at write; aggregation-only reads.",
     "New utility/state first occurrence requires human regime confirmation.",
     "Migrations gate on fresh backups; restore drills run quarterly.",
     "A workaround recurring 5+ times becomes a build sprint, not a habit."
    ]
   }
  }
 },
 "design": {
  "slug": "pole-attachment-permit-desk",
  "archetypes": [
   "ops/ledger tool",
   "workflow tool",
   "field-data consumer"
  ],
  "user_mindset": {
   "goals": "Keep a federally deadlined build on schedule; never discover a blown clock late.",
   "session_length": "Daily 5-minute ledger scans; weekly 30-minute milestone reviews.",
   "confidence": "Construction operators — allergic to fluff, respect dates and receipts.",
   "interface_needs": "Ledger-first layouts, citation-on-hover, print-parity weekly reports, breach states unmissable."
  },
  "posture": [
   "operational",
   "exacting",
   "calm-under-deadline",
   "utilitarian"
  ],
  "density": "compact",
  "trust_level": {
   "tier": "critical",
   "sensitive_domains": [
    "client build maps",
    "utility cost data",
    "dispute evidence files"
   ],
   "implications": [
    "Every outbound action shows its approval chain inline.",
    "Breach states use icon + label + date, never color alone.",
    "Destructive or send actions require typed confirmation.",
    "Audit trail visible in-context on every application row.",
    "Focus rings on every interactive element (WCAG 2.2 AA minimum).",
    "Errors carry remediation copy and an owner, not just a message."
   ]
  },
  "differentiation": {
   "avoid": [
    "Material Design defaults",
    "shadcn stock look (unstyled cards + slate ring)",
    "Purple/indigo gradient heroes",
    "Stripe/Linear/Notion mimicry",
    "Vertical cliché: telephone-pole silhouette clip-art and lineman stock photos"
   ],
   "strategy": "Anchor on the clock-ledger motif: a running deadline strip with rule citations as the recurring signature element. Reserve the safety-signal amber accent for breach/action states only; everything else stays utility-slate calm."
  },
  "territories": [
   {
    "name": "Field Ledger",
    "color_mood": "utility slate + blueprint blue + safety amber signal",
    "typography": "IBM Plex Sans + IBM Plex Mono for pole IDs and dates",
    "density": "compact",
    "component_feel": "ledger rows, stamped receipts, dated tickets",
    "motion": "ticker-calm",
    "fits": "matches how construction ops actually read status",
    "risks": "can feel austere — warm neutrals + generous line-height compensate"
   },
   {
    "name": "Dispatch Board",
    "color_mood": "graphite + high-vis amber",
    "typography": "Archivo + Spline Sans Mono",
    "density": "dense",
    "component_feel": "status boards, queue tickets",
    "motion": "ticker-calm",
    "fits": "matches how construction ops actually read status",
    "risks": "can feel austere — warm neutrals + generous line-height compensate"
   },
   {
    "name": "Survey Sheet",
    "color_mood": "paper white + pencil graphite + orange flag",
    "typography": "Public Sans + mono annotations",
    "density": "comfortable",
    "component_feel": "clipboard forms, checkmarks, flags",
    "motion": "ticker-calm",
    "fits": "matches how construction ops actually read status",
    "risks": "can feel austere — warm neutrals + generous line-height compensate"
   }
  ],
  "chosen_territory": "Field Ledger",
  "chosen_rationale": "Construction operators live in ledgers, tickets, and dated receipts; the UI mirrors the artifact they trust — a deadline ledger with citations — rather than a marketing dashboard.",
  "prioritized_components": [
   {
    "name": "Clock ledger row (obligation + citation + due date + status)",
    "why": "the product's signature artifact; orients every screen"
   },
   {
    "name": "Batch status board with SLA timers",
    "why": "desk ops daily driver"
   },
   {
    "name": "Breach badge (icon + label + date, never color alone)",
    "why": "the unmissable state; accessibility-critical"
   },
   {
    "name": "Approval chain chip (drafted-by / approved-by / signed-by)",
    "why": "trust surface on every outbound artifact"
   },
   {
    "name": "Submission receipt stamp (hash + timestamp)",
    "why": "evidence-grade proof rendered as a design element"
   }
  ],
  "patterns": [
   {
    "name": "Deadline strip",
    "description": "A running horizontal ledger of the next obligations across all utilities, with citations on hover — the homepage of the ops experience."
   },
   {
    "name": "Escalation ladder stepper",
    "description": "Visible rung position (reminder -> notice -> election -> counsel) on every breach, with approval state."
   },
   {
    "name": "Reconciliation split view",
    "description": "Estimate vs invoice line pairs with flag chips and evidence links."
   }
  ],
  "states": [
   "default",
   "hover",
   "active",
   "focus",
   "disabled",
   "loading",
   "skeleton",
   "empty",
   "error",
   "warning",
   "success",
   "offline",
   "permission-denied",
   "partial-data",
   "syncing",
   "unsaved-changes",
   "ai-generating"
  ],
  "localization": [
   "en-US only at launch; copy budgets still assume +20% expansion headroom.",
   "Dates always absolute with timezone (deadline product — never relative-only).",
   "Numerals tabular in all ledger contexts.",
   "Touch targets >= 44px; keyboard tab order matches visual order.",
   "Density modes: compact (default for ops), comfortable (client dashboard), spacious (accessibility)."
  ],
  "uniqueness_audit": {
   "app_specific_decisions": [
    "Safety-amber reserved exclusively for breach/action states",
    "Rule citations as first-class UI text (mono, linked)",
    "Receipt-stamp motif on evidence surfaces"
   ],
   "cliches_avoided": [
    "Telephone-pole clip-art",
    "Lineman stock photography",
    "Blue-gray SaaS sameness",
    "Map-centric hero (this is a ledger product, not a GIS product)"
   ],
   "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": "215 45% 22%",
   "brand-fg": "40 30% 97%",
   "surface": "210 20% 97%",
   "ink": "215 30% 12%",
   "muted": "215 12% 40%",
   "accent": "38 92% 42%"
  },
  "type": {
   "display": "'IBM Plex Sans', system-ui, sans-serif",
   "body": "'IBM Plex Sans', system-ui, sans-serif",
   "fonts_url": "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap"
  },
  "signature": {
   "motif": "Clock-ledger strip · rule citation · dated receipt stamp",
   "render": "ledger-row"
  }
 },
 "seo": {
  "slug": "pole-attachment-permit-desk",
  "archetype": "authority-service",
  "archetype_impact": "A B2B specialist desk selling into a small, public, findable market: SEO's job is to own the post-May-2026 clock-rule questions buyers actually ask, convert via the free Permit Clock Audit, and build citable reference assets — not to chase volume keywords.",
  "authority_dna": {
   "site_archetype": "Definitive-reference authority site for attacher-side pole attachment operations",
   "monetization_model": "Service engagements ($22-$35/pole desk + audit contingency); lead magnet funnel via free Clock Audit and Clock Card",
   "main_search_intents": [
    "What are the FCC pole attachment timelines in 2026 (informational -> audit signup)",
    "Can a utility charge me for pole replacement / make-ready dispute (problem-solution -> audit)"
   ],
   "topical_authority_opportunity": "The May 7, 2026 rule change reset the content field — almost all ranking content predates the current regime; a citation-dense, dated reference cluster can own the topic quickly.",
   "local_seo_opportunity": "None meaningful — buyers are national/rural ISPs found via award lists and associations, not maps.",
   "global_national_opportunity": "National: 23 reverse-preemption state pages + FCC-regime references cover the entire U.S. build market.",
   "easiest_ranking_path": "Long-tail question pages on specific clock mechanics ('15-day inability notice', 'contractor deemed approval 30 days') where SERPs are thin or predate the rules.",
   "hardest_ranking_path": "Head terms ('pole attachment') owned by FCC, Wikipedia, and vendor incumbents — do not chase.",
   "trust_credibility_requirements": [
    "Every rule claim carries a citation with effective date (rules changed in stages Sept 2025 -> May 2026)",
    "Named author with verifiable OSP/joint-use background [PLACEHOLDER until account lead hired]",
    "Plain not-legal-advice / not-engineering disclaimers on every regulatory page",
    "No fabricated case studies, savings claims, or testimonials — pre-launch honesty is the trust posture",
    "Dated 'last verified' stamps; rules pages re-verified quarterly"
   ],
   "ymyl": true,
   "expert_review_needed": true,
   "site_structure": "Homepage (offer) + /clock-rules/ reference hub + /states/ regime pages + /make-ready/ cost hub + /audit/ (lead magnet) + /about/",
   "seo_moat": "The rejection library and clock-ledger data become original-research content ('N clocks tracked, X% blown') no competitor can publish; freshness discipline on a rule set that keeps evolving."
  },
  "search_market": {
   "primary_markets": [
    "U.S. fiber/ISP construction leadership",
    "BEAD subgrantee operations staff"
   ],
   "secondary_markets": [
    "OSP engineering firms (referral partners)",
    "State broadband offices",
    "Co-op broadband subsidiaries"
   ],
   "low_competition_subtopics": [
    "NTIA §13.D.1 co-op pole obligations",
    "15-day inability notices",
    "Large-order aggregation math",
    "Self-help on estimates (post-2026 scope)"
   ],
   "high_commercial_intent": [
    "pole attachment permitting services",
    "make-ready invoice audit",
    "pole attachment consultant for ISPs",
    "outsource pole attachment applications"
   ],
   "informational": [
    "FCC pole attachment timeline 2026",
    "what is make-ready",
    "pole attachment application process"
   ],
   "local_intent": [],
   "transactional": [
    "pole attachment permit service pricing",
    "permit desk for BEAD build",
    "hire pole attachment specialist alternative"
   ],
   "comparison": [
    "in-house permitting specialist vs outsourced desk",
    "Alden One vs NJUNS (informational capture)",
    "OSP firm permitting vs permit desk"
   ],
   "problem_solution": [
    "utility missed pole attachment deadline what can I do",
    "pole attachment application rejected incomplete",
    "make-ready estimate too high dispute"
   ],
   "near_me": [],
   "long_tail": [
    "can utility charge attacher for red tagged pole replacement",
    "how does 30 day contractor deemed approval work FCC"
   ],
   "questions": [
    "What deadlines do utilities have for pole attachments?",
    "Who pays for pole replacement for fiber attachment?",
    "What is self-help in pole attachments?",
    "Do co-op poles follow FCC rules under BEAD?"
   ],
   "emerging": [
    "BEAD pole attachment compliance reporting",
    "FCC 25-38 enforcement actions"
   ],
   "seasonal": [
    "Construction-season application surges (spring)",
    "Year-end annual attachment true-ups"
   ],
   "underserved_serps": [
    "NTIA §13.D.1 explainers",
    "Reverse-preemption state clock tables"
   ],
   "weak_serps": [
    "Inability-notice mechanics",
    "Aggregation rules for order tiers"
   ],
   "forum_dominated_serps": [
    "ISP subreddit threads on pole delays — opportunity for definitive answers"
   ],
   "winnable_authoritative_serps": [
    "'FCC pole attachment timeline 2026' — most ranking content predates full effect",
    "'make-ready cost dispute' — thin practitioner content"
   ],
   "avoid_initially": [
    "'pole attachment' head term",
    "'BEAD program' general coverage",
    "Owner-side/utility-audience topics"
   ],
   "easy_wins": [
    "Clock Card landing page",
    "§13.D.1 explainer",
    "15-day notice explainer"
   ],
   "moderate": [
    "State regime pages (23)",
    "Make-ready cost anatomy",
    "Comcast-APCo teaching case"
   ],
   "long_term_plays": [
    "Original ledger-data research pieces",
    "The definitive attachment-clock reference (linkable asset)"
   ],
   "do_not_pursue": [
    "Consumer broadband topics",
    "Utility-side joint-use management content",
    "Generic 'AI for telecom' content"
   ]
  },
  "keyword_clusters": [
   {
    "primary": "fcc pole attachment timeline 2026",
    "related": [
     "pole attachment deadlines",
     "fcc 25-38 timelines"
    ],
    "intent": "informational",
    "user_problem": "Doesn't know what the utility owes them or when",
    "funnel": "TOFU",
    "business_value": "high",
    "ranking_difficulty": "medium",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "Most content predates May 2026 full effect",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Reference hub page",
    "reason": "The exact question the Clock Card answers",
    "priority_score": 95,
    "priority": "P0",
    "bucket": "clock-rules"
   },
   {
    "primary": "make-ready costs who pays",
    "related": [
     "pole replacement cost attacher",
     "red tagged pole replacement"
    ],
    "intent": "problem-solution",
    "user_problem": "Suspects overcharge, lacks category knowledge",
    "funnel": "MOFU",
    "business_value": "high",
    "ranking_difficulty": "medium",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "Vendor content shallow on precedent",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Cost-hub pillar",
    "reason": "Feeds the audit-layer upsell directly",
    "priority_score": 90,
    "priority": "P0",
    "bucket": "make-ready"
   },
   {
    "primary": "utility missed pole attachment deadline",
    "related": [
     "pole attachment self-help",
     "utility not responding attachment application"
    ],
    "intent": "problem-solution",
    "user_problem": "Blown clock, doesn't know remedies exist",
    "funnel": "BOFU",
    "business_value": "high",
    "ranking_difficulty": "low",
    "conversion_potential": "very high",
    "content_effort": "low",
    "serp_weakness": "Thin, pre-2026 answers",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Remedy explainer + audit CTA",
    "reason": "Highest-intent moment in the whole market",
    "priority_score": 92,
    "priority": "P0",
    "bucket": "clock-rules"
   },
   {
    "primary": "ntia bead pole attachment rules co-op",
    "related": [
     "section 13.d.1 poles",
     "co-op poles fcc rules bead"
    ],
    "intent": "informational",
    "user_problem": "Confused about newly covered co-op/muni poles",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "low",
    "serp_weakness": "Almost no dedicated coverage",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Explainer",
    "reason": "Whitespace + 40% of aerial mileage is co-op territory",
    "priority_score": 85,
    "priority": "P1",
    "bucket": "clock-rules"
   },
   {
    "primary": "pole attachment application rejected incomplete",
    "related": [
     "pole application completeness",
     "attachment application requirements"
    ],
    "intent": "problem-solution",
    "user_problem": "Clock restarted by a defect; wants prevention",
    "funnel": "MOFU",
    "business_value": "high",
    "ranking_difficulty": "low",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "No checklist-grade content exists",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Teardown + checklist",
    "reason": "Sells first-pass quality, our contractual bar",
    "priority_score": 84,
    "priority": "P1",
    "bucket": "production"
   },
   {
    "primary": "pole attachment state rules [state]",
    "related": [
     "virginia 75 day pole attachment",
     "reverse preemption states pole"
    ],
    "intent": "informational",
    "user_problem": "Multi-state builds face regime patchwork",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "high (23 pages)",
    "serp_weakness": "No consolidated, current state tables",
    "local_relevance": "state-level",
    "global_relevance": "yes",
    "suggested_page_type": "Programmatic state pages (quality-gated)",
    "reason": "Long-tail moat; each page thin-content-proofed with real regime detail",
    "priority_score": 78,
    "priority": "P1",
    "bucket": "states"
   },
   {
    "primary": "outsourced pole attachment permitting service",
    "related": [
     "pole permitting company",
     "permit desk fiber ISP"
    ],
    "intent": "transactional",
    "user_problem": "Ready to buy; comparing options",
    "funnel": "BOFU",
    "business_value": "very high",
    "ranking_difficulty": "low",
    "conversion_potential": "very high",
    "content_effort": "low",
    "serp_weakness": "Category barely exists — we can define it",
    "local_relevance": "no",
    "global_relevance": "yes",
    "suggested_page_type": "Service/offer page",
    "reason": "Own the category name early",
    "priority_score": 88,
    "priority": "P0",
    "bucket": "offer"
   }
  ],
  "topical_authority_map": {
   "core_topics": [
    "The 2026 attachment clock regime",
    "Make-ready cost control",
    "State-by-state regimes"
   ],
   "pillars": [
    {
     "name": "The 2026 Pole Attachment Clock: every deadline, cited",
     "core_intent": "informational",
     "audience": "ISP construction/permit staff",
     "conversion_goal": "Clock Card download -> audit signup",
     "supporting_pages": [
      "Standard vs large-order tiers",
      "15-day inability notices",
      "Contractor deemed approval",
      "Self-help mechanics"
     ],
     "internal_links": [
      "State pages",
      "Audit offer",
      "Rejection teardown"
     ],
     "schema": [
      "FAQPage",
      "Table",
      "Article"
     ],
     "evidence_needed": [
      "FCC 25-38 + DA-26-446 citations",
      "Effective-date table",
      "Worked examples"
     ],
     "local_variants": [],
     "national_variants": [
      "Per-tier printable Clock Card"
     ]
    },
    {
     "name": "Make-ready money: what utilities can and cannot charge",
     "core_intent": "problem-solution",
     "audience": "CFO/GM + construction leads",
     "conversion_goal": "Audit-layer inquiry",
     "supporting_pages": [
      "Cost category anatomy",
      "Comcast-APCo teaching case",
      "Red-tag replacement rules",
      "Estimate-vs-invoice checklist"
     ],
     "internal_links": [
      "Audit offer",
      "Clock pillar"
     ],
     "schema": [
      "Article",
      "FAQPage"
     ],
     "evidence_needed": [
      "FCC precedent citations",
      "Public cost ranges (ACLP/Pew/Katapult)"
     ],
     "local_variants": [],
     "national_variants": []
    },
    {
     "name": "State regimes: the 23 + DC where FCC clocks don't apply",
     "core_intent": "informational",
     "audience": "Multi-state builders",
     "conversion_goal": "Audit signup from state pages",
     "supporting_pages": [
      "23 state pages + DC",
      "Regime classification explainer",
      "NTIA §13.D.1 overlay"
     ],
     "internal_links": [
      "Clock pillar",
      "Offer page"
     ],
     "schema": [
      "Article",
      "Table"
     ],
     "evidence_needed": [
      "State statutes/PUC rules, dated",
      "CRS R48992"
     ],
     "local_variants": [
      "Per-state"
     ],
     "national_variants": [
      "Consolidated map/table"
     ]
    }
   ],
   "supporting_page_types": [
    "Explainers",
    "Teardowns (synthetic, labeled)",
    "Checklists",
    "Worked examples",
    "Printable reference cards",
    "FAQ pages",
    "Glossary",
    "Original-data pieces [OWN-DATA]",
    "Partner co-content",
    "Webinar recaps"
   ]
  },
  "site_architecture": {
   "homepage_strategy": "Offer-first (hero = outcome + audit CTA) with proof pillars and the clock-ledger motif; reference hubs linked prominently for authority flow.",
   "main_nav": [
    "Home",
    "Clock Rules",
    "Make-Ready Costs",
    "State Regimes",
    "Free Clock Audit",
    "About"
   ],
   "footer_nav": [
    "Disclaimers",
    "Engagement boundaries",
    "Clock Card",
    "Contact",
    "Privacy",
    "Glossary"
   ],
   "hubs": [
    {
     "name": "Clock Rules",
     "url": "/clock-rules/",
     "purpose": "The 2026 regime, cited and worked"
    },
    {
     "name": "Make-Ready Costs",
     "url": "/make-ready/",
     "purpose": "Cost categories, precedent, audit checklists"
    },
    {
     "name": "State Regimes",
     "url": "/states/",
     "purpose": "23 + DC reverse-preemption references"
    },
    {
     "name": "Clock Audit",
     "url": "/audit/",
     "purpose": "Lead magnet: free 48-hour deadline ledger"
    },
    {
     "name": "Glossary",
     "url": "/glossary/",
     "purpose": "Ubiquitous-language definitions with citations"
    }
   ],
   "url_patterns": [
    "/clock-rules/{topic}/",
    "/make-ready/{topic}/",
    "/states/{state}/",
    "/audit/",
    "/glossary/{term}/",
    "/about/",
    "/updates/{yyyy-mm}-{slug}/"
   ],
   "avoid_url_patterns": [
    "Date-stamped rule pages (rules pages are living documents with verified-on stamps)",
    "/blog/ catch-all (everything lives in a hub)",
    "Parameterized duplicates",
    "Tag archives"
   ]
  },
  "global_national": {
   "national_clusters": [
    "Clock rules (federal)",
    "Make-ready costs",
    "BEAD compliance overlay",
    "Category-defining service pages"
   ],
   "linkable_assets": [
    "The 2026 Clock Card (printable PDF)",
    "Consolidated state-regime table",
    "Effective-date timeline of FCC 25-38",
    "Utility Application Requirements Index (gated)"
   ],
   "original_research_ideas": [
    "Quarterly 'State of the Clocks' from anonymized ledger data [OWN-DATA, consent-gated]",
    "First-pass rejection taxonomy from the rejection library [OWN-DATA]",
    "Make-ready benchmark ranges, aggregated [OWN-DATA]"
   ],
   "international_needed": false,
   "international_notes": "U.S.-only regime; no international content."
  },
  "local_seo": {
   "justified": false,
   "reason": "Buyers are a national list of ISPs reached via award lists, associations, and search — not local-intent queries; no physical premises to rank.",
   "gbp_categories_primary": [],
   "gbp_categories_secondary": [],
   "location_page_rules": [
    "State pages are regulatory references, not location-service pages — no fake local presence, no city doorways"
   ],
   "citations": [],
   "review_strategy": "No review schema until real, verifiable client reviews exist (post-pilot, consent-gated); never seed or fabricate.",
   "local_schema": []
  },
  "programmatic": {
   "recommended": true,
   "reason": "23 state regime pages + glossary share a template but each carries genuinely distinct regulatory content.",
   "rules": [
    "One template, hand-verified data per page",
    "No page ships without state-specific statute citations and at least 3 regime-specific facts",
    "Verified-on date stamp per page",
    "Counsel-reviewed disclaimer block on all"
   ],
   "per_page_requirements": [
    "State statute/PUC citation with date",
    "Clock table (state vs federal deltas)",
    "Practical implications paragraph written per state"
   ],
   "quality_gates": [
    "Editor review before publish",
    "Quarterly re-verification sweep",
    "Thin-content check: >600 words of state-specific substance"
   ]
  },
  "page_templates": [
   {
    "page_type": "Reference hub page",
    "purpose": "Own a rule-cluster query with citation-dense tables",
    "target_intent": "informational",
    "url_pattern": "/clock-rules/{topic}/",
    "h1_pattern": "{Topic}: the 2026 rules, cited",
    "title_pattern": "{Topic} — FCC Pole Attachment Rules 2026 | SpanReady",
    "meta_description_pattern": "{Topic} under FCC 25-38 (effective May 7, 2026): deadlines, citations, and worked examples for aerial fiber builders.",
    "above_the_fold": [
     "Direct answer table",
     "Effective-date note",
     "Verified-on stamp",
     "Clock Card CTA"
    ],
    "outline": [
     "Answer table",
     "Rule mechanics",
     "Worked example",
     "Edge cases",
     "What to do on breach",
     "FAQ"
    ],
    "internal_links": [
     "Pillar",
     "Related mechanics",
     "Audit page",
     "Relevant state pages"
    ],
    "conversion_elements": [
     "Clock Card download",
     "Audit CTA end-cap"
    ],
    "schema": [
     "Article",
     "FAQPage",
     "BreadcrumbList"
    ],
    "trust_elements": [
     "Citations with dates",
     "Author credential [PLACEHOLDER]",
     "Not-legal-advice block"
    ],
    "media": [
     "Deadline table graphic"
    ],
    "faq_opportunities": [
     "Per-mechanic questions"
    ],
    "cta_strategy": "Educate fully, then one audit CTA — no interstitials",
    "quality_requirements": [
     "Every claim cited",
     "Re-verified quarterly"
    ],
    "anti_thin_rules": [
     "No page without a worked example",
     "No restating the statute without practical translation"
    ]
   },
   {
    "page_type": "State regime page",
    "purpose": "Own '{state} pole attachment rules' long-tail",
    "target_intent": "informational",
    "url_pattern": "/states/{state}/",
    "h1_pattern": "{State} pole attachment rules: what changes when FCC clocks don't apply",
    "title_pattern": "{State} Pole Attachment Rules & Timelines | SpanReady",
    "meta_description_pattern": "{State}'s pole attachment regime vs the federal baseline: deadlines, statutes, and what attachers must track.",
    "above_the_fold": [
     "Regime classification",
     "Key deltas table",
     "Verified-on stamp"
    ],
    "outline": [
     "Regime summary",
     "Clock table vs federal",
     "Statute citations",
     "Practical implications",
     "NTIA overlay note",
     "FAQ"
    ],
    "internal_links": [
     "Clock pillar",
     "Neighboring states",
     "Audit"
    ],
    "conversion_elements": [
     "Audit CTA"
    ],
    "schema": [
     "Article",
     "BreadcrumbList"
    ],
    "trust_elements": [
     "Statute citations",
     "Disclaimer block"
    ],
    "media": [
     "Delta table"
    ],
    "faq_opportunities": [
     "State-specific questions"
    ],
    "cta_strategy": "Single end-cap CTA",
    "quality_requirements": [
     ">600 words state-specific substance",
     "Counsel-flag on ambiguous regimes"
    ],
    "anti_thin_rules": [
     "No templated filler paragraphs",
     "No page without 3+ state-specific facts"
    ]
   },
   {
    "page_type": "Service/offer page",
    "purpose": "Convert transactional intent",
    "target_intent": "transactional",
    "url_pattern": "/ (home) + /audit/",
    "h1_pattern": "Your poles, permitted on the enforceable clock — at audited cost",
    "title_pattern": "Pole Attachment Permit Desk for Fiber Builders | SpanReady",
    "meta_description_pattern": "Done-for-you permit production, FCC deadline enforcement, and make-ready audit. Per pole, never hourly. Free Permit Clock Audit.",
    "above_the_fold": [
     "Outcome hook",
     "Audit CTA",
     "Boundary honesty line"
    ],
    "outline": [
     "Pain",
     "Outcome",
     "Mechanism",
     "Offer stack",
     "Guarantee",
     "Objections",
     "FAQ"
    ],
    "internal_links": [
     "All hubs"
    ],
    "conversion_elements": [
     "Audit form",
     "Clock Card secondary"
    ],
    "schema": [
     "WebPage",
     "FAQPage"
    ],
    "trust_elements": [
     "Verbatim disclaimers",
     "Pre-launch honesty",
     "Quality-metric commitments"
    ],
    "media": [
     "Ledger motif graphic"
    ],
    "faq_opportunities": [
     "Objection FAQs"
    ],
    "cta_strategy": "Primary audit CTA repeated at pain/offer/close",
    "quality_requirements": [
     "No fabricated proof",
     "Placeholders visible"
    ],
    "anti_thin_rules": [
     "No generic AI-service copy"
    ]
   }
  ],
  "on_page_rules": {
   "title_tag": "Primary query verbatim + year where rules-dated + brand; <=60 chars",
   "meta_description": "Direct answer promise + citation credibility + CTA hint; <=155 chars",
   "headings": "H1 answers the query; H2s follow the reader's next questions in order",
   "intro": "Direct answer in the first 60 words (snippet-targeted), then depth",
   "snippet_targeting": "Deadline tables and definition boxes formatted for extraction",
   "tables_lists": "Every rules page leads with a table; lists only where sequence matters",
   "images": "Tables as HTML (not images); diagrams with descriptive alt text",
   "internal_links": "Descriptive anchors; every page links up to its pillar and once to /audit/",
   "external_citations": "Primary sources (FCC docs, Federal Register, statutes) linked with dates — outbound citation is a trust feature",
   "author_attribution": "Named author with OSP credential [PLACEHOLDER until hired]; no fake bylines",
   "freshness": "Verified-on stamps; quarterly re-verification sweep logged in /updates/",
   "cta_placement": "One end-cap CTA per informational page; no popups",
   "mobile": "Tables scroll horizontally with sticky first column",
   "avoid": [
    "Keyword stuffing",
    "Fake review/rating schema",
    "Doorway pages",
    "Undated rule claims",
    "AI-boilerplate phrasing",
    "Interstitial CTAs"
   ]
  },
  "entity_seo": {
   "main_entities": [
    "Pole attachment",
    "Make-ready",
    "FCC 25-38 (Fifth Report & Order)",
    "Section 224",
    "BEAD program",
    "SpanReady"
   ],
   "related_entities": [
    "NTIA",
    "Wireline Competition Bureau",
    "Joint-use agreement",
    "NJUNS",
    "Alden One"
   ],
   "people": [
    "[PLACEHOLDER: founder]",
    "[PLACEHOLDER: OSP-fluent account lead]"
   ],
   "orgs": [
    "FCC",
    "NTIA",
    "NRECA",
    "Fiber Broadband Association",
    "State broadband offices",
    "ACLP"
   ],
   "tools": [
    "Katapult Pro",
    "ikeGPS",
    "NJUNS",
    "Alden One"
   ],
   "regulations": [
    "47 U.S.C. § 224",
    "47 C.F.R. Part 1 Subpart J",
    "FCC 25-38",
    "NTIA BEAD GT&C §13.D.1",
    "State statutes (23 + DC)"
   ],
   "problems": [
    "Permit latency",
    "Clock restarts",
    "Make-ready overcharges",
    "Unenforced deadlines"
   ],
   "solutions": [
    "Permit desk",
    "Clock ledger",
    "Make-ready audit"
   ],
   "processes": [
    "Application assembly",
    "Completeness gating",
    "Deadline tracking",
    "Self-help election",
    "Invoice reconciliation",
    "Escalation ladder"
   ],
   "alternatives": [
    "In-house specialist",
    "OSP engineering firm",
    "Joint-use software"
   ],
   "synonyms": [
    "Joint use",
    "Attachment permitting",
    "Pole licensing",
    "Make ready engineering (adjacent)"
   ]
  },
  "schema_strategy": [
   {
    "type": "WebPage",
    "where": "All pages",
    "required_fields": [
     "name",
     "description",
     "dateModified",
     "breadcrumb"
    ],
    "caution": "Always accurate dateModified — freshness is a trust claim"
   },
   {
    "type": "FAQPage",
    "where": "Rules pages + offer page",
    "required_fields": [
     "mainEntity Q/A pairs"
    ],
    "caution": "Only questions actually answered on-page"
   },
   {
    "type": "Article",
    "where": "Explainers, teardowns",
    "required_fields": [
     "headline",
     "author",
     "datePublished",
     "dateModified"
    ],
    "caution": "Author must be a real person [PLACEHOLDER until hired]"
   },
   {
    "type": "BreadcrumbList",
    "where": "Hub children",
    "required_fields": [
     "itemListElement"
    ],
    "caution": "Match visible breadcrumbs"
   },
   {
    "type": "HowTo",
    "where": "Self-help / remedy pages",
    "required_fields": [
     "step list"
    ],
    "caution": "Pair with not-legal-advice block"
   },
   {
    "type": "Organization",
    "where": "NOT emitted until entity facts are owner-verified",
    "required_fields": [],
    "caution": "Platform rule: no identity schema pre-verification"
   },
   {
    "type": "Review/Rating",
    "where": "NEVER pre-clients",
    "required_fields": [],
    "caution": "No review schema until real consent-backed reviews exist"
   }
  ],
  "internal_linking": {
   "pillar_to_cluster": "Pillars link every supporting page in a curated 'go deeper' section",
   "cluster_to_pillar": "Every supporting page links up with descriptive anchor in intro or first H2",
   "cluster_to_cluster": "Mechanic pages cross-link adjacent mechanics (estimate clock -> self-help)",
   "service_to_location": "Offer page links state hub; state pages link offer once",
   "faq_to_commercial": "Remedy/breach FAQs link /audit/ (highest-intent path)",
   "breadcrumbs": "Hub > page on all children; schema-matched",
   "anchor_text_rules": [
    "Descriptive, query-shaped anchors",
    "No 'click here'",
    "One audit link per page body",
    "Vary anchors across pages to avoid sitewide-anchor patterns"
   ]
  },
  "technical_seo": {
   "crawlability": "Static-rendered pages, clean hub hierarchy, no crawl traps",
   "indexability": "Reference content indexable; microsite validation pages (yourdeputy) remain noindex per platform policy — production domain flips to index",
   "sitemaps": "XML sitemap per hub; lastmod from verified-on stamps",
   "robots": "Allow all on production domain; disallow drafts/updates archive",
   "canonicals": "Self-referential; state pages canonical to themselves (no consolidation)",
   "pagination": "None expected (curated hubs, not feeds)",
   "faceted_nav": "None",
   "duplicate_control": "One topic, one page — mechanics never duplicated across hubs; glossary excerpts link, not copy",
   "redirects": "301 map maintained from day one; no orphan renames",
   "core_web_vitals": "Static HTML, system-adjacent fonts with display=swap, no JS beyond essentials — green by construction",
   "mobile": "Responsive tables with sticky columns; tap targets AA",
   "accessibility": "WCAG 2.2 AA; tables with proper headers; contrast tokens from design system",
   "js_seo": "No client-side rendering dependence",
   "rendering": "Static site generation",
   "gsc_setup": "Property + sitemap submission at production launch; weekly coverage review",
   "analytics_setup": "Privacy-respecting analytics; conversion events: Clock Card download, audit form submit",
   "rank_tracking": "Weekly on P0/P1 clusters; SERP-feature tracking on deadline tables"
  },
  "eeat": {
   "author_bios": "Real bios only; founder + OSP-fluent lead with verifiable history [PLACEHOLDER until hired] — pages ship with 'reviewed by the SpanReady desk' collective line until then",
   "expert_reviewers": "Outside telecom counsel reviews regulatory pages annually (named with consent or described by role)",
   "editorial_policy": "Published: every rule claim cited + dated; corrections logged in /updates/",
   "fact_checking": "Quarterly re-verification sweep against primary sources; verified-on stamps",
   "credentials": [
    "OSP/joint-use practitioner background [PLACEHOLDER]",
    "Counsel review (role-described)"
   ],
   "citations": "Primary-source dense: FCC releases, Federal Register, CRS, state statutes — linked and dated",
   "first_hand_proof": [
    "Anonymized ledger/rejection data as it accrues [OWN-DATA, consent-gated]",
    "Worked examples from real (anonymized) application timelines",
    "Published quality metrics (acceptance rates) once real"
   ],
   "update_cadence": "Quarterly sweeps + event-driven updates on any FCC/state rule change",
   "monetization_disclosure": "Every reference page notes SpanReady sells the related service — clarity over stealth",
   "ymyl_notes": "Regulatory/financial YMYL: citations, disclaimers, expert review, and no-legal-advice framing are mandatory page furniture"
  },
  "ai_search": {
   "principles": [
    "Be the citable source: tables, dates, citations formatted for extraction",
    "Answer the literal question in the first paragraph",
    "One canonical page per question cluster",
    "Freshness stamps machine-readable",
    "Entity consistency across pages"
   ],
   "tactics": [
    "FAQPage schema on question clusters",
    "Deadline tables in clean HTML",
    "Definition boxes for glossary terms",
    "'As of May 7, 2026' dating in answer sentences"
   ],
   "do_not": [
    "Fragment one question across many thin pages",
    "Hide answers behind CTAs",
    "Publish undated rule claims",
    "Chase AI-overview volume topics outside the niche"
   ]
  },
  "conversion": {
   "primary_cta": "Free Permit Clock Audit (form: name, ISP, state, pole owner, batch status)",
   "secondary_cta": "2026 Clock Card download (email capture)",
   "lead_magnets": [
    "Clock Card (printable per-tier deadline reference)",
    "Utility Application Requirements Index (starter, gated)",
    "Rejected-application autopsy checklist"
   ],
   "trust_elements": [
    "Verbatim boundary disclaimers",
    "Pre-launch honesty statement",
    "Quality-metric commitments (published targets)",
    "No fabricated proof anywhere"
   ],
   "per_page_paths": [
    {
     "page_type": "Clock rules page",
     "path": "Answer -> Clock Card -> nurture -> audit"
    },
    {
     "page_type": "Breach/remedy page",
     "path": "Answer -> direct audit CTA (highest intent)"
    },
    {
     "page_type": "Make-ready page",
     "path": "Answer -> audit-layer inquiry"
    },
    {
     "page_type": "State page",
     "path": "Answer -> Clock Card -> audit"
    },
    {
     "page_type": "Offer page",
     "path": "Direct audit form"
    }
   ],
   "tracking": "Events: card download, audit submit, per-page assisted conversions; audit source attribution feeds the GTM measurement table"
  },
  "link_earning": {
   "digital_pr_ideas": [
    "'State of the Clocks' quarterly data piece [OWN-DATA]",
    "May-7 anniversary retrospective with compliance data",
    "Rejection-taxonomy report"
   ],
   "original_research": [
    "Anonymized ledger statistics (consent-gated)",
    "Aggregated make-ready benchmark ranges"
   ],
   "directories": [
    "State broadband office resource lists",
    "FBA/NTCA/WISPA member directories",
    "Broadband trade-press resource roundups"
   ],
   "expert_contributions": [
    "Broadband Breakfast / Telecompetitor commentary",
    "Association webinars",
    "Podcast circuit (rural telecom shows)"
   ],
   "partnerships": [
    "OSP-firm co-content (they design, we clock)",
    "Field-capture vendor ecosystems (Katapult/ikeGPS user content)"
   ],
   "avoid": [
    "Paid link schemes",
    "Guest-post farms",
    "Reciprocal link pages",
    "PR spam on non-events",
    "Any link tactic risking the trust posture"
   ]
  },
  "roadmap_90d": [
   {
    "phase": "Days 1-30",
    "goal": "Own the answer to the market's #1 question",
    "pages": [
     "Clock-rules pillar",
     "Standard-vs-large tiers",
     "15-day notices",
     "Deemed approval",
     "Offer page",
     "/audit/"
    ],
    "keywords_targeted": [
     "fcc pole attachment timeline 2026",
     "utility missed pole attachment deadline"
    ],
    "why_first": "Highest intent + weakest SERPs + sales-motion alignment",
    "difficulty": "low-medium",
    "business_value": "very high",
    "required_assets": [
     "Clock Card PDF",
     "Citation table",
     "Counsel-reviewed disclaimers"
    ],
    "internal_links": [
     "Pillar <-> mechanics <-> audit"
    ],
    "conversion_goal": "First 50 Clock Card downloads; 10 audit signups"
   },
   {
    "phase": "Days 31-60",
    "goal": "Cost hub + first teardowns",
    "pages": [
     "Make-ready pillar",
     "Comcast-APCo case",
     "Red-tag rules",
     "Rejected-application autopsy",
     "§13.D.1 explainer"
    ],
    "keywords_targeted": [
     "make-ready costs who pays",
     "pole attachment application rejected"
    ],
    "why_first": "Feeds audit-layer upsell; teardowns double as sales collateral",
    "difficulty": "medium",
    "business_value": "high",
    "required_assets": [
     "Cost-category taxonomy",
     "Synthetic teardown (labeled)"
    ],
    "internal_links": [
     "Cost hub <-> clock hub <-> audit"
    ],
    "conversion_goal": "Audit-layer inquiries begin"
   },
   {
    "phase": "Days 61-90",
    "goal": "State coverage wave 1",
    "pages": [
     "Top-10 aerial-BEAD state pages",
     "Consolidated regime table",
     "Glossary launch"
    ],
    "keywords_targeted": [
     "{state} pole attachment rules"
    ],
    "why_first": "Long-tail moat; matches pilot-state footprints",
    "difficulty": "low each, volume of work",
    "business_value": "medium-high",
    "required_assets": [
     "Counsel-verified state rulebooks",
     "Delta tables"
    ],
    "internal_links": [
     "States <-> pillar <-> offer"
    ],
    "conversion_goal": "Organic audit signups from state pages"
   }
  ],
  "roadmap_12m": [
   {
    "phase": "Months 4-6",
    "goal": "Complete state coverage + first data piece",
    "pages": [
     "Remaining 13 state pages + DC",
     "'State of the Clocks' v1 [OWN-DATA]",
     "Webinar recap hub"
    ],
    "keywords_targeted": [
     "state long-tail",
     "pole attachment data"
    ],
    "why_first": "Coverage completeness + first citable original research",
    "difficulty": "medium",
    "business_value": "high",
    "required_assets": [
     "Client consent for anonymized data",
     "Quarterly verification sweep #1"
    ],
    "internal_links": [
     "Data piece -> everything"
    ],
    "conversion_goal": "Trade-press citation -> referral traffic"
   },
   {
    "phase": "Months 7-9",
    "goal": "Authority consolidation",
    "pages": [
     "Rejection-taxonomy report",
     "Benchmark-ranges explainer",
     "Partner co-content (OSP firms)"
    ],
    "keywords_targeted": [
     "make-ready benchmark",
     "application rejection reasons"
    ],
    "why_first": "Moat data becomes public authority; partners amplify",
    "difficulty": "medium",
    "business_value": "high",
    "required_assets": [
     "Ledger data at scale",
     "Partner agreements"
    ],
    "internal_links": [
     "Reports -> audit"
    ],
    "conversion_goal": "Inbound from cited data"
   },
   {
    "phase": "Months 10-12",
    "goal": "Category ownership",
    "pages": [
     "Category-defining guide: 'The Permit Desk model'",
     "Annual clock-regime review",
     "Retainer-tier service page"
    ],
    "keywords_targeted": [
     "outsourced pole attachment permitting",
     "managed joint use"
    ],
    "why_first": "Own the category name as competitors notice",
    "difficulty": "medium",
    "business_value": "very high",
    "required_assets": [
     "Year of quality metrics (real)",
     "Renewal proof points (consent-gated)"
    ],
    "internal_links": [
     "Guide -> all hubs"
    ],
    "conversion_goal": "Category-term rankings + retainer inquiries"
   }
  ],
  "priority_pages": [
   {
    "rank": 1,
    "page_title": "FCC Pole Attachment Timelines 2026: Every Deadline, Cited",
    "slug": "/clock-rules/",
    "page_type": "Pillar",
    "primary_keyword": "fcc pole attachment timeline 2026",
    "secondary_keywords": [
     "pole attachment deadlines",
     "fcc 25-38"
    ],
    "intent": "informational",
    "scope": "national",
    "funnel": "TOFU",
    "difficulty": "medium",
    "business_value": "very high",
    "conversion_potential": "high",
    "required_proof": [
     "FCC 25-38 citations",
     "DA-26-446",
     "Worked examples"
    ],
    "internal_links": [
     "All mechanics",
     "/audit/",
     "States"
    ],
    "schema": [
     "Article",
     "FAQPage"
    ],
    "cta": "Clock Card",
    "production_priority": "P0-week-1",
    "why_opportunity": "SERP predates full effect; the market's #1 question"
   },
   {
    "rank": 2,
    "page_title": "Utility Missed Your Pole Attachment Deadline? Your Options, Cited",
    "slug": "/clock-rules/missed-deadline-remedies/",
    "page_type": "Remedy explainer",
    "primary_keyword": "utility missed pole attachment deadline",
    "secondary_keywords": [
     "pole attachment self-help"
    ],
    "intent": "problem-solution",
    "scope": "national",
    "funnel": "BOFU",
    "difficulty": "low",
    "business_value": "very high",
    "conversion_potential": "very high",
    "required_proof": [
     "Self-help rule citations",
     "Ladder explanation"
    ],
    "internal_links": [
     "Pillar",
     "/audit/"
    ],
    "schema": [
     "Article",
     "HowTo",
     "FAQPage"
    ],
    "cta": "Audit (direct)",
    "production_priority": "P0-week-1",
    "why_opportunity": "Highest-intent moment; thin SERP"
   },
   {
    "rank": 3,
    "page_title": "Pole Attachment Permit Desk for Fiber Builders",
    "slug": "/",
    "page_type": "Offer",
    "primary_keyword": "outsourced pole attachment permitting service",
    "secondary_keywords": [
     "pole permitting company"
    ],
    "intent": "transactional",
    "scope": "national",
    "funnel": "BOFU",
    "difficulty": "low",
    "business_value": "very high",
    "conversion_potential": "very high",
    "required_proof": [
     "Boundary disclaimers",
     "Guarantee terms"
    ],
    "internal_links": [
     "All hubs"
    ],
    "schema": [
     "WebPage",
     "FAQPage"
    ],
    "cta": "Audit form",
    "production_priority": "P0-week-1",
    "why_opportunity": "Category barely exists — define it"
   },
   {
    "rank": 4,
    "page_title": "Make-Ready Costs: What Utilities Can and Cannot Charge Attachers",
    "slug": "/make-ready/",
    "page_type": "Pillar",
    "primary_keyword": "make-ready costs who pays",
    "secondary_keywords": [
     "pole replacement cost attacher"
    ],
    "intent": "problem-solution",
    "scope": "national",
    "funnel": "MOFU",
    "difficulty": "medium",
    "business_value": "high",
    "conversion_potential": "high",
    "required_proof": [
     "Comcast-APCo citation",
     "Public cost ranges"
    ],
    "internal_links": [
     "Case page",
     "/audit/"
    ],
    "schema": [
     "Article",
     "FAQPage"
    ],
    "cta": "Audit-layer inquiry",
    "production_priority": "P0-week-3",
    "why_opportunity": "Feeds the contingency revenue layer"
   },
   {
    "rank": 5,
    "page_title": "NTIA §13.D.1: Co-op and Muni Poles Just Changed Status",
    "slug": "/clock-rules/ntia-13d1-coop-poles/",
    "page_type": "Explainer",
    "primary_keyword": "ntia bead pole attachment rules co-op",
    "secondary_keywords": [
     "co-op poles fcc rules"
    ],
    "intent": "informational",
    "scope": "national",
    "funnel": "TOFU",
    "difficulty": "low",
    "business_value": "medium-high",
    "conversion_potential": "medium",
    "required_proof": [
     "GT&C citation",
     "DWT analysis reference"
    ],
    "internal_links": [
     "Pillar",
     "States"
    ],
    "schema": [
     "Article"
    ],
    "cta": "Clock Card",
    "production_priority": "P1-week-2",
    "why_opportunity": "Near-zero competition; 40% of aerial mileage is co-op territory"
   }
  ],
  "competitor_gaps": {
   "typical_competitor_types": [
    "OSP engineering firm blogs (permitting as side topic)",
    "Joint-use software vendor content (owner-side lens)",
    "Law-firm client alerts (dense, not operational)"
   ],
   "common_weaknesses": [
    "Content predates May 7, 2026 full effect",
    "No worked examples or printable references",
    "Owner-side framing that ignores attacher remedies",
    "No citations or undated claims",
    "Legalese without operational translation",
    "No original data",
    "Thin state-level coverage"
   ],
   "how_to_beat_them": [
    "Date everything; verify quarterly",
    "Worked examples on every mechanic",
    "Attacher-side framing exclusively",
    "Printable/linkable reference assets",
    "Original ledger data no one else can have"
   ]
  },
  "metrics": {
   "weekly": [
    "P0/P1 rankings",
    "Clock Card downloads",
    "Audit form submits",
    "Organic sessions to hubs"
   ],
   "monthly": [
    "Assisted conversions per page",
    "New referring domains",
    "SERP-feature captures (tables)",
    "State-page long-tail coverage",
    "Trade-press citations"
   ],
   "quarterly": [
    "Re-verification sweep completion",
    "Original-data piece performance",
    "Category-term ranking movement",
    "Audit-source attribution mix"
   ],
   "annual": [
    "Category ownership ('permit desk' association)",
    "Share of clock-rule question SERPs",
    "Organic share of pilot/client acquisitions"
   ]
  },
  "risks": [
   {
    "risk": "Rules change again and pages go stale",
    "applies": true,
    "mitigation": "Effective-date discipline, quarterly sweeps, event-driven updates within 72h of any FCC/state change"
   },
   {
    "risk": "YMYL scrutiny without named credentials pre-hire",
    "applies": true,
    "mitigation": "Collective desk byline + counsel review + citation density until real bios exist; never fake authorship"
   },
   {
    "risk": "Thin-content risk on 23 programmatic state pages",
    "applies": true,
    "mitigation": "Quality gates: 600+ words state-specific substance, 3+ unique facts, editor review"
   },
   {
    "risk": "Competitors copy the reference strategy",
    "applies": true,
    "mitigation": "Original ledger data + freshness cadence are structurally hard to copy"
   },
   {
    "risk": "AI overviews absorb informational clicks",
    "applies": true,
    "mitigation": "Be the cited source; convert via downloadable assets and the audit, not pageviews"
   },
   {
    "risk": "Brand-name collision dilution (SpanReady)",
    "applies": false,
    "mitigation": "Collision sweep clean; monitor branded SERP monthly"
   }
  ],
  "first_20_pages": [
   "/ (offer)",
   "/audit/",
   "/clock-rules/ (pillar)",
   "/clock-rules/standard-vs-large-order-tiers/",
   "/clock-rules/missed-deadline-remedies/",
   "/clock-rules/15-day-inability-notices/",
   "/clock-rules/contractor-deemed-approval/",
   "/clock-rules/self-help-on-estimates/",
   "/clock-rules/ntia-13d1-coop-poles/",
   "/make-ready/ (pillar)",
   "/make-ready/comcast-apco-case/",
   "/make-ready/red-tagged-pole-replacements/",
   "/make-ready/estimate-vs-invoice-checklist/",
   "/states/ (hub + consolidated table)",
   "/states/virginia/",
   "/states/new-york/",
   "/states/maine/",
   "/glossary/",
   "/about/ (boundary honesty)",
   "/updates/ (verification log)"
  ],
  "first_10_tech_fixes": [
   "Static generation with green CWV from day one",
   "XML sitemaps per hub with verified-on lastmod",
   "Self-referential canonicals sitewide",
   "FAQPage/Article schema validated in CI",
   "301 map file established before any rename",
   "robots.txt allowing production, blocking drafts",
   "GSC + analytics with the two conversion events",
   "Accessible tables (headers, sticky columns, contrast)",
   "font-display: swap; no render-blocking JS",
   "Breadcrumbs visible + schema-matched on hub children"
  ],
  "first_10_authority_actions": [
   "Publish the Clock Card and pitch it to 5 state broadband offices as a subgrantee resource",
   "Offer the consolidated state-regime table to CRS-citing trade writers",
   "Broadband Breakfast commentary pitch on §13.D.1 (the under-covered rule)",
   "Association webinar booked (talk #1) with recap page",
   "Katapult/ikeGPS community engagement (complementary content, no pitching)",
   "FBA/NTCA/WISPA member-directory listings",
   "Founder LinkedIn cadence (3/wk) linking reference pages",
   "Podcast outreach: 3 rural-telecom shows",
   "Partner co-post #1 with an OSP firm",
   "Quarterly data-piece pre-commitment announced (accountability + anticipation)"
  ],
  "final_recommendation": "Ship the clock-rules cluster and offer page in week 1-2 and let the audit funnel run; the SERP window created by the May 7, 2026 rule change is a first-mover asset that decays as incumbents update. State pages and the cost hub compound through the pilot period, and original ledger data — once consent-gated — becomes the moat content nobody can copy. Never trade the trust posture (citations, dates, boundaries, no fabricated proof) for reach; in a small industry, the posture IS the brand.",
  "disclaimers": [
   "This SEO plan operates under the desk's licensing boundary: content is operational and informational, never legal or engineering advice, and every regulatory page carries the counsel-reviewed disclaimer block.",
   "No review, rating, or Organization identity schema is emitted until owner-verified facts exist; no testimonials or case studies are published without written client consent.",
   "All [OWN-DATA] content items are gated on real, consent-backed operational data — placeholders must never ship as claims."
  ]
 },
 "microsite": {
  "category": "Broadband infrastructure operations",
  "shortTitle": "Pole Attachment Permit Desk",
  "audience": "Fiber broadband builders with 500-20,000 aerial poles/year and no dedicated joint-use staff — rural ISPs, WISPs going fiber, co-op broadband subsidiaries, regional overbuilders",
  "problem": "An aerial fiber mile earns nothing until every pole under it is permitted. Applications bounce on completeness and restart the utility's review clock; the FCC deadlines that took full effect May 7, 2026 go unenforced because nobody tracks them; and make-ready invoices of $75-$450 per pole get paid unread.",
  "offer": "Permit Package + Clock Watch: complete, utility-specific applications with first-pass acceptance as the contractual quality bar, a live deadline ledger on every utility in your build, escalation correspondence drafted the day any clock is blown, and line-by-line make-ready audit — $22-$35 per pole plus 20-25% of documented savings. Never hourly.",
  "faq": [
   {
    "q": "Are you lawyers or engineers?",
    "a": "Neither, on purpose. SpanReady performs administrative document preparation, project management, cost analysis, and business correspondence. Pole loading analysis stays with your licensed PE — we consume stamped outputs, never produce them. FCC or state complaints and agreement negotiation stay with your telecom counsel — we hand them a complete, organized evidence file."
   },
   {
    "q": "Which rules do you track?",
    "a": "The FCC regime under 47 C.F.R. Part 1 Subpart J as amended by FCC 25-38 (fully effective May 7, 2026): 45-day survey / 14-day estimate / 60-day make-ready standard clocks, 90/29/120/180 large-order tiers, 30-day contractor deemed-approval, self-help on late estimates, and 15-day inability notices — plus the 23 reverse-preemption state regimes and the co-op/municipal poles newly covered by NTIA's January 2026 BEAD terms (§13.D.1)."
   },
   {
    "q": "What is the Permit Clock Audit?",
    "a": "Free, one live application batch, 48-hour turnaround: a dated ledger of every deadline your utility currently owes you, with rule citations, plus any rights you've already earned and never claimed — missed survey windows, estimate overruns, unclaimed contractor deemed-approvals. Capped at 10 per month."
   },
   {
    "q": "What does first-pass acceptance mean contractually?",
    "a": "If an application is rejected for completeness reasons attributable to us, we refund 50% of our fee for that application, capped at our fee for the affected batch. A defective application restarts the utility's review clock — so we price our own quality risk, not yours."
   },
   {
    "q": "How fast can you start?",
    "a": "First batch submitted within 10 business days of complete intake. Intake is a defined checklist — field survey exports (Katapult Pro, ikeGPS, or spreadsheets), route maps, executed joint-use agreements, and an authority-to-act letter — and production starts the business day after the last item arrives."
   },
   {
    "q": "Who actually does the work?",
    "a": "AI performs extraction, package assembly, deadline tracking, correspondence drafting, and invoice reconciliation. A named OSP-fluent reviewer approves every package before submission, and every escalation letter is human-approved and goes out under your signature. Deadline math is computed by deterministic code — never by a language model."
   },
   {
    "q": "What does the make-ready audit cost if you find nothing?",
    "a": "Nothing. The audit layer is 20-25% of documented savings only — and savings count only when the utility corrects an estimate or invoice in writing. Self-declared savings never trigger a fee."
   },
   {
    "q": "We already use an OSP engineering firm — why add you?",
    "a": "They design and stamp; that work stays theirs and we consume it. Ask them for the deadline ledger on your in-flight applications — clock enforcement and invoice audit are precisely the administrative layer hourly engineering firms don't own. Many of our best relationships are referrals from OSP firms who dislike the paperwork."
   },
   {
    "q": "Do you have client references?",
    "a": "We are newly launched and say so plainly — our pilot cohort is capped at three builders and no case studies exist yet. The free Permit Clock Audit exists so you can judge the machinery on your own live batch before paying anything."
   },
   {
    "q": "Is our build data safe?",
    "a": "Customer-scoped storage with access logging, NDA-backed handling, and no cross-client disclosure of identifiable utility data. Cost benchmarks are used only in aggregated, de-identified form. Infrastructure data is sensitive and we treat it that way, with an incident-response runbook from day one."
   }
  ],
  "process": [
   {
    "title": "1. Intake — your field data, our checklist",
    "body": "You send field survey exports (Katapult Pro, ikeGPS, CSV), route maps, executed joint-use agreements, prior utility correspondence, and an authority-to-act letter. Automated completeness scoring blocks production on gaps — one consolidated request, never dribbled asks. Your crews and engineers keep doing what they do; we never touch a pole."
   },
   {
    "title": "2. Normalize — one canonical record per pole",
    "body": "AI extraction maps every input to a canonical per-pole record and application object with a confidence score on every field. Low-confidence fields go to a human exception queue and are re-keyed from source — nothing uncertain passes a gate silently."
   },
   {
    "title": "3. Assemble & gate — the clock-restart killer",
    "body": "Applications are built to each utility's requirements playbook (forms, exhibits, fees, portal quirks, rejection history). A deterministic completeness gate blocks any package missing a required field, and an OSP-fluent reviewer signs every package before it goes anywhere."
   },
   {
    "title": "4. Submit & start the clocks",
    "body": "Packages go through the right channel — NJUNS, Alden One, the utility's own portal, or certified mail — with receipts archived. The moment an application lands, the state machine instantiates every applicable deadline with its rule citation: 45/14/60 standard, 90/29/120/180 large-order, contractor deemed-approval, inability notices."
   },
   {
    "title": "5. Watch & enforce — same-day breach response",
    "body": "A daily sweep (with independent nightly recompute and divergence alarms) monitors every clock. The day a utility misses a deadline, the correct next artifact is drafted — reminder, formal notice, self-help election, or meet-and-confer request — approved by the account lead, and sent under your signature."
   },
   {
    "title": "6. Audit & report — every dollar, every week",
    "body": "Estimates are reviewed before you accept; invoices are reconciled line-by-line against estimates, FCC cost standards, and cross-utility benchmarks, with flagged items human-validated before you see them. Every Friday: a permit-status dashboard mapped to your construction schedule and BEAD milestones."
   }
  ],
  "northStarCta": {
   "label": "Get your free Permit Clock Audit",
   "href": "#contact",
   "secondary_label": "Download the 2026 Clock Card",
   "secondary_href": "#lead-magnet"
  },
  "ubiquitousLanguage": {
   "audience": "aerial fiber builders",
   "domain": "pole attachment permitting and make-ready cost control",
   "deliverable": "permit package + clock ledger + audit findings memo",
   "reviewer": "OSP-fluent reviewer",
   "record": "canonical per-pole record",
   "unit_of_work": "application batch",
   "cta_primary": "Get your free Permit Clock Audit",
   "cta_secondary": "Download the 2026 Clock Card",
   "regulator": "FCC",
   "regulator_full": "Federal Communications Commission (and state PUCs in 23 reverse-preemption states)",
   "statute": "47 U.S.C. § 224; 47 C.F.R. Part 1 Subpart J as amended by FCC 25-38",
   "trigger_moment": "BEAD notice-to-proceed with a first application batch due under the post-May-7-2026 clock regime",
   "event_intake_started": "IntakeReceived",
   "event_conversation_requested": "ClockAuditRequested"
  },
  "trust": {
   "standards": [
    "Deadline math computed by deterministic code with nightly dual computation — never by a language model",
    "Every package signed by a named OSP-fluent reviewer before submission; every letter human-approved and client-signed",
    "Customer-scoped data handling under NDA; no cross-client disclosure of identifiable utility data"
   ],
   "response_time": "Permit Clock Audit in 48 hours; first batch submitted within 10 business days of complete intake; breach events actioned within 1 business day",
   "data_handling": "Build maps, agreements, and cost data stored customer-scoped with access logging; benchmarks aggregated and de-identified; full evidence-file handover on termination"
  },
  "hook": "Your poles, permitted on the enforceable clock — at audited cost.",
  "sub_headline": "The done-for-you permit desk for aerial fiber builders: first-pass-complete applications, FCC deadline enforcement, and forensic make-ready audit — per pole, never hourly.",
  "dream_outcome": "Every pole in your build segment legally attachable before crews arrive, every utility deadline enforced the day it's earned, and every make-ready invoice paid at the audited number — with a weekly report your lender and grant officer can read.",
  "specific_pains": [
   "A traditional application-to-approval cycle runs ~180 days; documented worst cases reach 5 years through make-ready — against a 4-year BEAD deployment window",
   "One incomplete exhibit restarts the utility's review clock: 45+ days of critical path, gone",
   "The May 7, 2026 FCC rules gave you survey/estimate/make-ready deadlines, self-help, and contractor deemed-approval — rights that don't exist unless someone tracks them pole-by-pole",
   "Make-ready invoices of $75-$450/pole (replacements $2,000-$9,000) get paid unread, and FCC precedent shows utilities shift ineligible costs onto attachers",
   "The specialists who run this paperwork post at $25-$41/hr and can't be hired in rural labor markets"
  ],
  "cost_of_inaction": "Every week of permit latency is a week of dead capital on a federally deadlined build — and every unaudited invoice quietly donates money to the pole owner. Rights that are not tracked are rights that do not exist.",
  "mechanism": {
   "name": "The SpanReady Clock Desk",
   "steps": [
    {
     "title": "Canonical intake",
     "body": "Your Katapult/ikeGPS exports, maps, and agreements become one confidence-scored record per pole. Low-confidence fields are human-re-keyed — nothing uncertain passes silently."
    },
    {
     "title": "Playbook assembly + completeness gate",
     "body": "Each utility's forms, exhibits, fees, and rejection history live in a versioned playbook. A deterministic gate blocks any package missing a required field; an OSP-fluent reviewer signs everything before submission. First-pass acceptance is the contractual bar."
    },
    {
     "title": "The clock state machine",
     "body": "Every deadline — 45/14/60 standard, 90/29/120/180 large-order, 30-day contractor deemed-approval, 15-day inability notices, state overlays — instantiated in pure code with its citation, dual-computed nightly, divergence-alarmed."
    },
    {
     "title": "Same-day enforcement",
     "body": "A breach triggers the correct next artifact the same day: reminder, formal notice, self-help election, meet-and-confer request. Account-lead approved, sent under your name, archived with its approval chain."
    },
    {
     "title": "Forensic make-ready audit",
     "body": "Estimate vs invoice vs cross-utility benchmark, line by line, flagged by category (pre-existing violations, red-tagged replacements in FCC states, betterment). Human-validated findings; fee only on utility-documented corrections."
    }
   ]
  },
  "offer_stack": [
   {
    "item": "Utility-specific permit packages, submitted and receipt-archived",
    "note": "First-pass acceptance guaranteed by a 50% completeness-rejection refund"
   },
   {
    "item": "Live clock ledger on every application",
    "note": "Every FCC/state deadline with citation; breach actioned within 1 business day"
   },
   {
    "item": "Enforcement correspondence, drafted same-day",
    "note": "Included in core — never nickel-and-dimed; it's the reason to hire us"
   },
   {
    "item": "Make-ready estimate & invoice audit",
    "note": "20-25% of documented savings; no savings, no fee"
   },
   {
    "item": "Weekly milestone dashboard",
    "note": "Permit status mapped to construction schedule and BEAD/lender milestones"
   },
   {
    "item": "Dispute-support evidence file",
    "note": "Chronology, correspondence archive, reconciliation worksheets — makes your counsel's hour productive if it ever comes to that"
   }
  ],
  "guarantee": "50% refund of our fee on any application rejected for completeness reasons attributable to us (capped at our fee for the affected batch) — a guarantee about our work product, not about utility outcomes, which nobody can honestly promise.",
  "urgency": "The FCC clock regime is weeks old, 50 states' BEAD builds are mobilizing, and pilot capacity is capped at three builders — the waitlist is dated, not theatrical.",
  "objections": [
   {
    "q": "Our engineering firm handles permitting.",
    "a": "They design; who owns the clock? Ask them for the deadline ledger on your in-flight applications. Design and stamped loading analysis stay with them — we run the administrative layer they bill hourly for and don't guarantee."
   },
   {
    "q": "We can hire a permitting specialist instead.",
    "a": "If you can find one — postings run $25-$41/hr and rural markets are thin. One specialist is single-threaded, has no cross-utility benchmarks, and takes the tribal knowledge when they leave. The desk is two-deep, benchmarked, and contractually on the hook."
   },
   {
    "q": "A remote desk can't know our local utilities.",
    "a": "Fair — and the free Clock Audit exists to prove otherwise on your own batch before you pay anything. Per-utility playbooks are built from official requirements plus live rejection history, and a named OSP-fluent account lead runs your relationship."
   },
   {
    "q": "Won't enforcement letters poison our utility relationships?",
    "a": "The ladder starts collegial, every letter is human-approved for tone, and complete applications genuinely reduce the utility's workload — most pole owners prefer working with a desk that submits clean packages. Documentation, not aggression, is the posture."
   },
   {
    "q": "What if the FCC rules change again?",
    "a": "Rulebooks are versioned with effective dates — clock computations select the rule in force on the event date. The desk also serves state-regime and private builds; no single rulebook is a dependency."
   },
   {
    "q": "Why not just buy joint-use software?",
    "a": "Alden One, NJUNS, and Katapult Pro are excellent platforms — that you must staff and operate. We operate them for you. Software records status; the desk owns outcomes."
   }
  ],
  "who_this_is_not_for": [
   "Builders who want pole loading analysis, make-ready design, or construction — that is licensed PE and contractor work we permanently do not perform",
   "Anyone seeking legal representation or complaint filing against a utility — that is counsel's work; we prepare the evidence file",
   "Underground-only builds — no poles, no desk"
  ],
  "proof_pillars": [
   {
    "title": "The rules are real and dated",
    "body": "FCC 25-38 (adopted July 2025) reached full effect May 7, 2026 — the FCC's own compliance notice confirms the large-order timelines, contractor deemed-approval, and self-help regime. NTIA's January 2026 BEAD terms extend FCC-style rules to subgrantee co-op and municipal poles."
   },
   {
    "title": "The money is in motion",
    "body": "50 of 56 BEAD final proposals were approved by February 9, 2026, releasing $42.45B into four-year build windows. Independent analysis (ACLP) counts ~3.95M poles in BEAD aerial paths with $534M-$4.63B of pole-related cost exposure."
   },
   {
    "title": "The cost-shifting is documented",
    "body": "In Comcast v. Appalachian Power the FCC sided with the attacher over ineligible make-ready cost-shifting. Categories exist — pre-existing violations, red-tagged replacements, betterment — but only audited invoices ever get corrected."
   }
  ],
  "stakes_line": "Permits are the critical path of a federally deadlined build: latency is dead capital, defects restart clocks, and unaudited invoices are donations.",
  "deliverable": "Granted permits + live clock ledger + enforcement correspondence + audited invoices + weekly milestone dashboard",
  "unit_of_work": "application batch (per pole)",
  "lexicon": {
   "regulator": "FCC",
   "regulator_full": "Federal Communications Commission (with state PUC regimes in 23 reverse-preemption states + DC)",
   "statute": "47 U.S.C. § 224; 47 C.F.R. Part 1 Subpart J (as amended by FCC 25-38); NTIA BEAD GT&C §13.D.1",
   "statute_frame": "Section 224 and the FCC's Fifth Report & Order give attachers enforceable survey/estimate/make-ready deadlines, self-help, and contractor deemed-approval — effective in full since May 7, 2026",
   "persona": "ISP construction leader / lone permit coordinator",
   "persona_moment": "Staring at a spreadsheet of submitted applications with no idea which utility owes what by when",
   "trigger_moment": "BEAD notice-to-proceed lands and the first application batch is due to one or more pole owners under the new clock regime",
   "enforcement_stakes": "Blown clocks forfeit self-help and deemed-approval rights; defective applications restart 45-90 day reviews; unaudited make-ready bleeds $75-$450/pole",
   "retention": "Builds run for years — segment-to-segment renewal and the managed joint-use retainer outlive the BEAD wave",
   "cta_verb": "Claim",
   "intake_checklist": [
    "Field survey exports (Katapult Pro / ikeGPS / CSV)",
    "Route maps (KMZ or shapefile)",
    "Executed joint-use or license agreement per pole owner",
    "Prior utility correspondence history",
    "Stamped engineering outputs where the utility requires load data",
    "Authority-to-act letter",
    "BEAD/lender milestone schedule"
   ],
   "trust_standards_specific": [
    "No LLM ever computes a deadline — pure-code state machine with nightly dual computation and divergence alarms",
    "100% human QC on every package at launch; sampling only after a playbook proves >=98% first-pass acceptance over 200+ poles",
    "Every escalation letter approved by the account lead and signed by the client — zero autonomous sends",
    "48-hour written postmortem on any rejection or missed event; fix ships as a deterministic check",
    "Savings billed only on utility written corrections — never self-declared"
   ],
   "regulator_faqs": [
    {
     "q": "What deadlines does the FCC actually impose on pole owners since May 7, 2026?",
     "a": "For standard orders (up to 300 poles; same clocks through 3,000 with notice requirements): 45 days to complete a survey, 14 days to deliver a make-ready estimate after survey completion, and 60 days for communications-space make-ready after payment. For large orders (3,001-6,000 poles): 90-day survey, 29-day estimate, 120-day communications-space and 180-day power-space make-ready, with a 60-day advance-notice and meet-and-confer requirement. Utilities that cannot meet a deadline must say so in writing within 15 days with a good-faith completion estimate. These flow from FCC 25-38 amending 47 C.F.R. Part 1 Subpart J; the Wireline Competition Bureau's compliance notice confirmed full effect on May 7, 2026."
    },
    {
     "q": "What is self-help and when can an attacher use it?",
     "a": "When a utility misses survey or make-ready deadlines (and, under the 2026 amendments, fails on estimates), the rules let the attacher hire utility-approved contractors to perform the work themselves rather than wait indefinitely. Self-help routes have been associated with ~30-day timelines versus ~180-day traditional cycles. The election must be properly noticed and documented — which is exactly the paper trail the clock ledger maintains. Whether to elect it on a given build is the client's call, with counsel where warranted."
    },
    {
     "q": "Do these federal rules apply everywhere?",
     "a": "No — 23 states plus DC have 'reverse-preempted' federal pole attachment regulation and run their own regimes (Virginia's 75-day response statute and Maine's centralized database are examples). Co-op and municipal poles are historically exempt from Section 224 — but NTIA's January 2026 BEAD terms (§13.D.1) require subgrantee-owned poles to follow FCC-style rules across the owner's entire footprint, backdated to November 2025. Every clock determination therefore starts with regime classification per pole owner."
    },
    {
     "q": "What make-ready costs can a utility lawfully pass to an attacher?",
     "a": "Costs caused by the new attachment — not the utility's deferred maintenance. FCC precedent (Comcast v. Appalachian Power) confirms attachers should not bear costs of correcting pre-existing violations, and in FCC states a pole already red-tagged for replacement is not the attacher's bill. Betterment beyond what the attachment requires is also contestable. These are documentation questions — estimate vs invoice vs standards — which is why the audit layer is line-item, evidence-first, and human-validated."
    },
    {
     "q": "Who enforces these rules if a utility simply doesn't comply?",
     "a": "The FCC's Enforcement Bureau handles pole attachment complaints (with an Accelerated Docket for qualifying disputes), and state commissions handle reverse-preemption states. Filing a complaint is legal representation — SpanReady never files; we maintain the chronology, correspondence archive, and reconciliation evidence so that if your counsel ever needs to act, the record is already trial-grade."
    }
   ]
  },
  "proof_angle": {
   "id": "clock-enforcement",
   "headline": "Rights that are not tracked are rights that do not exist",
   "lever": "Deterministic deadline enforcement under FCC 25-38",
   "outcome_verb": "permit",
   "outcome_frame": "Poles made legally attachable on the fastest enforceable timeline, at audited make-ready cost",
   "proof_promise": "A dated, citable ledger of every deadline every utility owes you — demonstrated free on your own live batch within 48 hours"
  },
  "indexable": true
 },
 "evidence": [
  {
   "id": "pole-attachment-permit-desk-e1",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Identity",
   "claim_or_finding": "Legal entity, registered address, and jurisdiction 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.",
   "severity": "blocker"
  },
  {
   "id": "pole-attachment-permit-desk-e2",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Trust boundary",
   "claim_or_finding": "Public page is a validation microsite; not a regulated operational service.",
   "status": "verified",
   "evidence": "Microsite carries explicit trust-boundary block.",
   "verification_command": "Inspect /microsites/pole-attachment-permit-desk for trust boundary.",
   "fix_owner": "engineering",
   "remediation": "None — enforced by template.",
   "severity": "low"
  },
  {
   "id": "pole-attachment-permit-desk-e3",
   "business_slug": "pole-attachment-permit-desk",
   "area": "SEO integrity",
   "claim_or_finding": "No fake review, rating, LocalBusiness, or Organization identity schema is emitted.",
   "status": "verified",
   "evidence": "Only WebPage + FAQPage schema is generated.",
   "verification_command": "View SEO Factory row for pole-attachment-permit-desk",
   "fix_owner": "engineering",
   "remediation": "None — enforced by SEO factory.",
   "severity": "low"
  },
  {
   "id": "pole-attachment-permit-desk-e4",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Regulated claims",
   "claim_or_finding": "High trust burden — service adjoins legal (UPL) and engineering (PE) boundaries; copy must never imply licensed status.",
   "status": "verified",
   "evidence": "All copy states administrative-only scope; verbatim disclaimers in build package compliance-checklist.md.",
   "verification_command": "Grep microsite copy for boundary disclaimer block.",
   "fix_owner": "engineering",
   "remediation": "Counsel review before any operational launch.",
   "severity": "medium"
  },
  {
   "id": "pole-attachment-permit-desk-e5",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Load-bearing facts",
   "claim_or_finding": "FCC 25-38 timelines (45/14/60; 90/29/120/180) and May 7, 2026 full effect; NTIA 50/56 approvals; ZipRecruiter labor rates — re-verified against primary/current sources 2026-07-12.",
   "status": "verified",
   "evidence": "FCC compliance notice DA-26-446; NTIA press release; live ZipRecruiter listings.",
   "verification_command": "See build package index.html source dossier.",
   "fix_owner": "operator",
   "remediation": "Re-verify quarterly; rules carry staged effective dates.",
   "severity": "low"
  },
  {
   "id": "pole-attachment-permit-desk-e6",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Attribution",
   "claim_or_finding": "$534M-$4.63B pole-cost exposure analysis is authored by ACLP (reported via Broadband Expanded / Broadband Breakfast); blueprint credited the reporting outlet.",
   "status": "verified",
   "evidence": "Broadband Breakfast headline attributes analysis to ACLP.",
   "verification_command": "Compare blueprint Sources vs build package deviations log.",
   "fix_owner": "operator",
   "remediation": "Package cites ACLP; substance unchanged.",
   "severity": "low"
  },
  {
   "id": "pole-attachment-permit-desk-e7",
   "business_slug": "pole-attachment-permit-desk",
   "area": "Inferred economics",
   "claim_or_finding": "$22-$35/pole pricing, 20-40 min processing, and 5-10% audit recovery are INFERRED constructs; remote-trust acceptance is UNVERIFIED.",
   "status": "owner-action",
   "evidence": "Blueprint claim table #13-#16.",
   "verification_command": "Pilot instrumentation per launch-plan.md day-90 gate.",
   "fix_owner": "owner",
   "remediation": "Validate in 3-pilot cohort before scaling.",
   "severity": "medium"
  }
 ],
 "seo_pages": {
  "id": "seo-pole-attachment-permit-desk",
  "business_slug": "pole-attachment-permit-desk",
  "route": "/microsites/pole-attachment-permit-desk",
  "title": "Pole Attachment Permit Production & Make-Ready… · d6l8",
  "description": "Pole Attachment Permit Production & Make-Ready Cost Control Desk for fiber broadband construction leaders and the permit coordinators they rely on. Your poles…",
  "canonical": "/microsites/pole-attachment-permit-desk",
  "og_title": "Pole Attachment Permit Production & Make-Ready Cost Control Desk",
  "og_description": "Pole Attachment Permit Production & Make-Ready Cost Control Desk for fiber broadband construction leaders and the permit coordinators they rely on. Your poles…",
  "schema_type": "FAQPage",
  "schema_status": "pending-owner-facts",
  "sitemap_include": false,
  "noindex": true
 },
 "vertical_style": {
  "accent": "safety-amber",
  "signature": "Clock-ledger strip with rule citations",
  "layout": "Deadline ledger + batch status board",
  "anti": "Telephone-pole clip-art and lineman stock photos"
 },
 "canva": {
  "slug": "pole-attachment-permit-desk",
  "territory": "Field Ledger",
  "family": {
   "id": "infrastructure-ops",
   "name": "Infrastructure / Operations",
   "motion": "calm"
  },
  "tokens": {
   "brand": "215 45% 22%",
   "brand-fg": "40 30% 97%",
   "surface": "210 20% 97%",
   "ink": "215 30% 12%",
   "muted": "215 12% 40%",
   "accent": "38 92% 42%"
  },
  "type": {
   "display": "IBM Plex Sans",
   "body": "IBM Plex Sans",
   "fonts_url": "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap"
  },
  "scale": {
   "h1": "clamp(2.4rem, 5vw, 4rem)",
   "h2": "clamp(1.7rem, 3vw, 2.4rem)",
   "h3": "clamp(1.2rem, 2vw, 1.45rem)",
   "body": "clamp(1rem, 1.1vw, 1.125rem)",
   "small": "0.8125rem",
   "tracking_display": "-0.015em",
   "tracking_body": "0em",
   "weight_display": 600,
   "weight_body": 450
  },
  "spacing": {
   "card_padding": "1.5rem",
   "card_radius": "0.375rem",
   "card_shadow": "0 0 0 1px hsl(var(--ink) / 0.10)",
   "section_gap": "clamp(3rem, 7vw, 6rem)",
   "hero_gap": "clamp(1.25rem, 2vw, 2rem)"
  },
  "layout": {
   "hero": "split-ledger",
   "card": "flat-outline",
   "cta": "solid-brand",
   "archetype": "ops-board",
   "card_silhouette": "flat-outline",
   "button_geometry": "sharp"
  },
  "background": {
   "hero_gradient": "radial-gradient(1100px 550px at 12% -10%, hsl(38 92% 42% / 0.14), transparent 60%), radial-gradient(900px 500px at 88% 8%, hsl(215 45% 22% / 0.10), transparent 55%)",
   "cta_gradient": "linear-gradient(135deg, hsl(215 45% 22%), hsl(38 92% 32%))",
   "section_wash": "linear-gradient(180deg, hsl(210 20% 97%) 0%, hsl(215 45% 22% / 0.04) 100%)"
  },
  "motif": "Deadline ledger strip + stamped submission receipts"
 },
 "capabilities": {
  "marketing": true,
  "portal": true,
  "ops": true,
  "chatbot": true,
  "payments": false
 },
 "generated_at": "2026-07-12T00:00:00.000Z",
 "checksum": "8855d37aabcdcc76"
}