Generates the final response package for ADU permit corrections — the second half of the corrections pipeline. This skill should be used after adu-corrections-flow has produced its analysis files and the contractor has answered questions. It reads the research artifacts (categorized corrections, state law findings, city research, sheet observations) plus contractor answers, and produces four deliverables — a response letter to the building department, a professional scope of work, a corrections status report, and per-sheet annotations. Triggers when a session directory contains corrections analysis files and a contractor_answers.json has been provided. This skill runs as a cold start — it has no conversation history from the analysis phase and relies entirely on the file artifacts.
Generate the final response package for ADU permit corrections. This is the second skill in a two-skill pipeline:
adu-corrections-flow (Phase 1) — reads the corrections letter, builds the sheet manifest, researches state and city codes, views plan sheets, categorizes corrections, generates contractor questions. Produces research artifacts in a session directory.adu-corrections-complete (this skill, Phase 2) — reads those research artifacts + contractor answers, generates all deliverables.This skill runs as a cold start. It has no conversation history from Phase 1. Everything it needs is in the session directory files. The quality of its output depends entirely on the quality of those files — especially corrections_categorized.json, which contains the merged research findings.
The session directory (e.g., correction-01/) must contain these files from Phase 1:
| File |
|---|
| What It Contains |
|---|
| How This Skill Uses It |
|---|
corrections_parsed.json | Raw correction items with original wording | Original wording preserved in response letter |
sheet-manifest.json | Sheet ID ↔ page number mapping | Sheet references in all outputs |
state_law_findings.json | Per-code-section lookups (CRC, CBC, ASCE, etc.) | Code citations in response letter |
city_research_findings.json | Municipal code, standard details, IBs | City-specific references in outputs |
sheet_observations.json | What's currently on each plan sheet | Informs what needs to change |
corrections_categorized.json | The main input. Each item with category, research context, state findings, city findings, sheet observations, affected sheets | Drives all output generation |
contractor_questions.json | What questions were asked | Maps answer keys to correction items |
contractor_answers.json | Contractor's responses | The new input that completes the picture |
Read files in this order to build context efficiently:
corrections_categorized.json — read first, it's the backbone. Each item has its category, research context, and cross-referenced findings already merged.contractor_answers.json — read second, map answers to items.sheet-manifest.json — read third, for accurate sheet references.corrections_parsed.json — read fourth, for original wording to preserve in the response letter.corrections_categorized.json doesn't have enough detail on a specific item — it usually does.response_letter.mdProfessional letter from the contractor to the building department, addressing every correction item.
Structure:
# Response to Plan Check Comments
## [Review Round] — [Address]
### [Permit Number] | [Project Type]
Date / To / From / Re header
---
### [Section from original letter]
**Item [#] — [Summary]**
[Response addressing the correction with specific references]
...
---
**Summary of Sheet Revisions:**
| Sheet | Changes |
Rules:
[TODO: description of what's needed]professional_scope.mdWork breakdown grouped by professional, with enough detail that the designer/engineer can execute without re-reading the corrections letter.
Structure:
# Professional Scope of Work
## [Address] — [Permit Number]
---
## [Professional Name / Firm]
**Sheets:** [list]
### Required Actions
| Item | Sheet | Action | Contractor Input | Status |
### Key Specifications
[Detailed specs from contractor answers — dimensions, materials, elevations]
### Deliverables
- [ ] checklist items
---
## Per-Sheet Action Summary
| Sheet | Actions | Professional | Status |
Rules:
corrections_report.mdStatus dashboard with checklist — the project manager's view.
Structure:
# Corrections Report
## [Address] — [Permit Number]
### Summary
| Category | Count | Items |
### Item Status Table
| Item | Section | Category | Status | Notes |
### Key Findings from Contractor Answers
[Important conclusions — capacity is fine, drainage works, etc.]
### Action Items Checklist
#### [Role]
- [ ] / [x] checklist items
### Critical Path
[Dependency diagram showing what blocks what]
Rules:
sheet_annotations.jsonPer-sheet breakdown of what needs to change, structured for potential future PDF markup.
Schema:
{
"project": { "address": "", "permit_number": "" },
"revision_number": 1,
"revision_date": "YYYY-MM-DD",
"annotations": [
{
"sheet_id": "A3",
"page_number": 7,
"file": "page-07.png",
"sheet_title": "Elevations & Proposed Roof Plan",
"actions": [
{
"item_number": "14",
"area": "South elevation, patio soffit — Detail 2 area",
"action": "New fire-rated assembly detail replacing Detail 2/A3",
"specification": "5/8\" Type X gypsum on underside of 2x rafter framing",
"professional": "Designer",
"status": "SCOPED",
"revision_note": "REV 1: New fire-rated soffit detail per Item 14"
}
]
}
],
"revision_table": [
{ "rev": 1, "date": "", "description": "", "sheet": "", "item": "" }
]
}
Rules:
sheet-manifest.jsonWhen contractor_answers.json has items in the skipped array or questions left unanswered:
[TODO: specific description] at the exact gapNever block on missing answers. A partial response package is still valuable — the professional can start on everything that IS answered.
corrections_categorized.json is the source of truth. It has the merged research — state law findings, city findings, sheet observations — all cross-referenced per item. Trust it.corrections_parsed.json has the exact text from the corrections letter. Use it in the response letter — the plan checker needs to see their language referenced.sheet-manifest.json. The manifest is the ground truth for which sheet ID maps to which page.