Scope-specific code gap analysis — extracts referenced codes from project docs, researches what should apply, surfaces the delta. Triggers: 'code research', 'what codes apply', 'code check', 'ADA requirements', 'egress'.
An engineer managing one or more scopes asks: "Are there any code requirements for this scope that I'm missing?"
This skill answers that question in three passes:
Pass 1 — What the scope already addresses Read the actual project documents — spec sections, drawings, schedules — and extract every code citation, standard reference, and requirement already incorporated by the design team.
Pass 2 — What should apply Research all codes and standards that apply to this type of work in this jurisdiction, regardless of what the project documents say.
Pass 3 — The gap Diff Pass 1 against Pass 2. Present only what's in Pass 2 but absent from Pass 1, with confidence levels and specific source citations from both the code and the project documents.
This is a gap finder, not a code summary. If the spec already addresses a requirement correctly, it does not appear in the output. The engineer's time is spent only on things that may actually be missing.
Every finding is framed as:
"Code [X] requires [Y]. The project documents [address this at / do not appear to address this]. Confidence: [level]. Recommended action: [action]."
Never frame findings as COMPLIANT / NON-COMPLIANT. The licensed design professional makes compliance determinations. This skill provides research.
This skill uses a document-grounded research approach:
${CLAUDE_SKILL_DIR}/../../reference/ contain structured ADA and IBC data useful for quick verification of specific dimensions and capacities during research.Phase 1 — Context and Scope Definition
1a Gather project context (jurisdiction, occupancy, construction type)
1b Define the research scope (which spec sections, which question)
1c USER CHECKPOINT — confirm scope before any research begins
Phase 2 — Project Document Extraction (Pass 1)
2a Read all project documents in scope
2b Extract every code citation, standard reference, requirement
2c Build the "already addressed" inventory
Phase 3 — Code Research (Pass 2)
3a Research jurisdiction and adopted code editions
3b Research applicable requirements for this scope and work type
3c USER CHECKPOINT — interim findings, confirm continuation
Phase 4 — Gap Analysis (Pass 3)
4a Diff research findings against project document inventory
4b Classify each gap by severity and confidence
4c USER CHECKPOINT — review gaps before report is written
Phase 5 — Report
5a Generate structured gap report
5b Write graph entry
Human checkpoints at 1c, 3c, and 4c. Do not skip them.
Collect minimum required project parameters. Check in this order:
AgentCM project files (if .construction/ exists):
.construction/project.yaml — location, occupancy, construction type.construction/index/sheet_index.yaml — drawing set compositionquery_command from .construction/database.yaml):
{query_command} -c "SELECT * FROM v_room_profile WHERE room_number = '...'" — rooms with schedule data{query_command} -c "SELECT * FROM v_sheet_contents WHERE sheet_number = '...'" — elements on sheets{query_command} -c "SELECT COUNT(*) FROM sheets WHERE project_id = '...'; SELECT COUNT(*) FROM rooms WHERE project_id = '...'"Project documents (read directly):
Minimum required context — write to .construction/code_research/project_context.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § project_context
If any required field cannot be found in the documents, ask the user before proceeding. Do not assume occupancy group or construction type — these determine which code provisions apply and an incorrect assumption cascades through the entire analysis.
Parse the user's question to identify:
Target scope — which spec sections, drawing sheets, systems, or elements the engineer wants checked. Examples:
Research question — what specifically the engineer is worried about. Examples:
Scopes in scope — if the engineer is managing multiple scopes (e.g., scopes A through C), confirm which ones this research covers.
Write to .construction/code_research/scope_definition.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § scope_definition
Research topics are generated from the combination of:
Use your full domain knowledge to identify research topics. You know what code requirements typically apply to each type of construction work, which regulatory authorities have jurisdiction, and what gaps commonly appear in specifications. The project documents tell you what the engineer has already addressed — your job is to identify everything they should have considered.
Present to the user:
I have enough context to start. Before I begin research, here's what I'm planning:
PROJECT
Name: [project_name]
Location: [city, state]
Occupancy: [group]
Type: [construction type]
Sprinklered: [yes/no/unknown]
Code year: [inferred from drawing date]
SCOPE I'LL RESEARCH
Spec sections: [list]
Sheets: [list, or "none specified — I'll search for relevant sheets"]
Your question: [restated in plain language]
RESEARCH TOPICS I'VE IDENTIFIED
1. [topic] — because [reason derived from scope]
2. [topic] — because [reason derived from scope]
3. [topic] — because [reason derived from scope]
[...]
TOPICS I'M NOT INCLUDING (and why)
• [topic] — not applicable to this occupancy/type
• [topic] — already confirmed complete by Spec 01 40 00
Before I spend time researching, please confirm:
• Is the project context correct?
• Should I add or remove any research topics?
• Are there specific code concerns you already have that I should prioritize?
Do not begin Phase 2 until the user responds.
This phase reads what the project documents already say. It runs before web research so the gap analysis has a firm baseline.
For each spec section in scope:
For drawing sheets:
For referenced standards within spec sections:
For each document read, extract every code reference, standard citation, and
requirement into a structured inventory. Write to .construction/code_research/pass1_project_inventory.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § pass1_project_inventory
Critical extraction discipline:
Summarize Pass 1 into a flat inventory used for gap diffing in Phase 4. Write to .construction/code_research/pass1_summary.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § pass1_summary
Before researching requirements, establish which edition of each code is adopted by the jurisdiction. This is non-negotiable — code requirements vary significantly between editions.
Search for:
"{state} building code adopted edition {year}"
"{city} {state} local building code amendments"
"{state} IBC adoption effective date"
"{state} fire code adopted edition"
"{state} accessibility code requirements"
Write to .construction/code_research/jurisdiction.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § jurisdiction
If jurisdiction code adoption cannot be confirmed via web search, mark as
uncertain and note this prominently in the report. Do not assume the latest
published edition is what's adopted.
For each topic in the confirmed research outline, research what the applicable codes require. Organize research by logical topic clusters, not fixed batch sizes.
For each topic, establish these three things:
Use shared reference files at ${CLAUDE_SKILL_DIR}/../../reference/ to verify
specific numeric thresholds (clearances, load factors, occupant capacities)
during research.
Write to .construction/code_research/topics/{slug}.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § topic_findings
Adaptive scope expansion: If research reveals that a code requirement likely applies but may be addressed in a spec section or drawing not yet read in Pass 1, read that document before classifying the topic as a gap. Update the Pass 1 inventory with any new citations found. Note the additional documents read when reporting to the user at checkpoint 3c.
After completing a cluster of related topics, report to the user:
Completed research on [topic 1], [topic 2], and [topic 3].
PRELIMINARY GAPS IDENTIFIED SO FAR
⚠ HIGH Slip resistance — no COF requirement found in spec; IBC §1210.3
and ADA require slip-resistant floors in kitchens and ADA paths
⚠ HIGH Health department overlay — kitchen complex may be subject to
Maryland Dept. of Health food service regs; not mentioned in scope
○ MEDIUM VOC content — 09 67 23 does not cite VOC limits; Division 01
may address this globally (will check)
NO GAP (already addressed in spec)
✓ Moisture testing — ASTM F 1869 and F 2170 both required (§3.1-B)
✓ Compressive strength — ASTM C 579 requirement at 7,700 psi (§2.1-D)
✓ Bond strength — ACI 503R at 400 psi (§2.1-D-10)
UNCERTAIN (couldn't confirm code language)
? Baltimore City amendments to IBC §1210 — could not confirm if local
amendments modify the slip resistance requirement
Continuing with [next batch]: [topic 4], [topic 5].
Do you want me to dig deeper on any of these before continuing, or shall I proceed?
Compare every research finding from Phase 3 against the Pass 1 project
inventory. Write to .construction/code_research/gap_analysis.yaml using the schema at:
→ ${CLAUDE_SKILL_DIR}/references/schemas.yaml § gap_analysis
Classify each finding into one of: gaps (with severity + confidence), already_addressed, or uncertain.
Each gap gets a severity and confidence rating:
Severity:
HIGH — a code requirement clearly applies, is not addressed in the project
documents, and creates regulatory or safety risk if unresolvedMEDIUM — a code requirement likely applies but may be addressed elsewhere
(e.g., in a Division 01 section not yet reviewed) or its applicability
depends on a condition that hasn't been confirmedLOW — a code reference that could be added for completeness but whose
absence is unlikely to cause a compliance issueConfidence:
confirmed — the code requirement is definitively established (correct
jurisdiction, correct edition, correct applicability) and the project
document status is definitively established (read the full section)needs_review — the requirement likely applies but requires information
not available in the current documents (AHJ confirmation, additional spec
sections not provided, etc.)uncertain — conflicting sources, could not confirm jurisdiction's
adopted code edition, or the code's applicability to this specific scope
is genuinely ambiguousBefore generating the report, present the gap summary:
GAP ANALYSIS COMPLETE
HIGH-CONFIDENCE GAPS (take action)
GAP-001 ⚠ HIGH Slip resistance — no COF requirement in 09 67 23
IBC §1210.3 requires 0.60 COF in commercial kitchens
Recommended action: add COF requirement and test method
GAP-002 ⚠ HIGH Health department — kitchen complex not addressed
Maryland COMAR 10.15.03 may apply; needs AHJ confirmation
Recommended action: confirm with Owner whether food
service permit required
MEDIUM-CONFIDENCE GAPS (confirm and close)
GAP-003 ○ MEDIUM VOC content — 09 67 23 may need cross-ref to 01 61 16
Likely covered globally; confirm and add cross-reference
UNCERTAIN (need more information)
? Baltimore City amendments to slip resistance — couldn't confirm locally
ALREADY ADDRESSED (no action needed)
✓ Moisture vapor emission testing — well covered, both test methods
✓ Substrate preparation — shot-blast, priming, patching all specified
✓ Compressive strength — ASTM C 579 at 7,700 psi
✓ Bond strength — ACI 503R at 400 psi
✓ Installer qualification — manufacturer written cert required
Before I write the report:
• Are any of these gaps ones you were already aware of and have addressed
outside the documents I reviewed?
• Should I research any topic further before finalizing?
• Any gaps you want to remove from the report?
Write to .construction/code_research/report_{scope}_{date}.md using the template at:
→ ${CLAUDE_SKILL_DIR}/references/gap_report_template.md
Populate all placeholder fields from the gap_analysis.yaml and jurisdiction.yaml data. The report must include: applicable codes table, all gaps (action required + confirm and close), uncertain items, already addressed items, documents reviewed, and the disclaimer.
${CLAUDE_SKILL_DIR}/../../bin/construction-python \
${CLAUDE_SKILL_DIR}/../../scripts/graph/write_finding.py \
--type "code_gap_analysis" \
--title "Code gap analysis: {scope} — {n_gaps} gaps identified" \
--data '{
"scope": "[spec sections or topic]",
"topics_researched": 0,
"already_addressed": 0,
"gaps_high": 0,
"gaps_medium": 0,
"gaps_low": 0,
"uncertain": 0,
"jurisdiction_confirmed": true
}'
Check for .construction/code_research/ before starting:
| Files Present | State | Action |
|---|---|---|
| Nothing | Fresh start | Begin Phase 1 |
scope_definition.yaml only | Scope confirmed, research not started | Begin Phase 2 |
pass1_summary.yaml | Project extraction done | Begin Phase 3 |
topics/ partial | Research in progress | Resume from next unresearched topic |
All topics complete, no gap_analysis.yaml | Research done | Begin Phase 4 |
gap_analysis.yaml exists | Gaps identified | Present to user, go to Phase 5 |
report_*.md exists | Complete | Offer to update or re-run |
PE discipline guidance for jurisdiction research, scope boundaries, regulatory overlays, and confidence levels:
→ ${CLAUDE_SKILL_DIR}/references/discipline_notes.md
Never overwrite an existing gap report. Version output files (_v2, _v3) if a prior version exists at the target path.
${CLAUDE_SKILL_DIR}/../../bin/construction-python${CLAUDE_SKILL_DIR}/../../scripts/graph/write_finding.py