$npx -y skills add dleerdefi/claude-code-construction --skill submittal-log-generatorExtract all submittal requirements from specification sections and generate a comprehensive submittal register in Excel. Triggers: 'submittal log', 'extract submittals', 'submittal register'. Requires /spec-splitter output.
| 1 | # Submittal Log Generator |
| 2 | |
| 3 | Long-running skill that processes every specification section to extract submittal requirements and produces a professional submittal register in Excel. Designed to handle full project manuals (200+ spec sections) with state persistence. |
| 4 | |
| 5 | **Prerequisite:** This skill depends on `/spec-splitter` to provision clean, per-section `.txt` files at `.construction/spec_text/`. The spec-splitter owns all text quality — extraction, repair, and quality assessment. This skill reads those `.txt` files and focuses on identifying submittal items. |
| 6 | |
| 7 | ## Design Philosophy: Scripts for Structure, Claude for Judgment |
| 8 | |
| 9 | This skill uses a three-tier approach: |
| 10 | |
| 11 | - **RIGID** (scripted, deterministic): File I/O, Excel output schema, directory structure, naming conventions. Follow these exactly. Do not improvise. |
| 12 | - **GUIDED** (decision tree, Claude picks the branch): Confidence scoring, output location discovery. Follow the decision logic; adapt thresholds to what you observe. |
| 13 | - **FLEXIBLE** (domain knowledge, Claude thinks): Identifying what is actually a submittal item, distinguishing submittals from boilerplate, resolving ambiguity, handling non-standard spec formats. Use your understanding of construction documents and the domain knowledge below. |
| 14 | |
| 15 | **Allowed scripts — exhaustive list.** Only execute these scripts during this skill: |
| 16 | - `export_submittal_log.py` — Excel output from assembled JSON (Step 4) |
| 17 | - `write_finding.py` — graph entry (Step 5) |
| 18 | Do not create, generate, or write any `.py`, `.sh`, or other script files. All data assembly is Claude writing JSON directly. |
| 19 | |
| 20 | ## Current Submittal State |
| 21 | !`cat .construction/submittal_extraction_state.yaml 2>/dev/null || echo "No prior extraction — starting fresh"` |
| 22 | |
| 23 | --- |
| 24 | |
| 25 | ## Output Schema — RIGID |
| 26 | |
| 27 | The Excel submittal log MUST contain these columns in this order. Do not rename, reorder, or omit columns. |
| 28 | |
| 29 | | Column | Description | Example | |
| 30 | |---|---|---| |
| 31 | | Spec Section | CSI section number | 03 30 00 | |
| 32 | | Spec Title | Section title | Cast-in-Place Concrete | |
| 33 | | Submittal No. | Sequential ID: `[Section]-[###]` | 03 30 00-001 | |
| 34 | | Submittal Type | Categorized type (see taxonomy below) | Product Data | |
| 35 | | Submittal Description | The actual submittal requirement, cleaned | Submit product data for each concrete mix design including compressive strength, admixtures, and mix proportions | |
| 36 | | Article Reference | Where found in the spec | 1.3.A.1 | |
| 37 | | Action/Informational | Action or Informational | Action | |
| 38 | | Confidence | HIGH / MEDIUM / LOW / FLAGGED | HIGH | |
| 39 | | Flag Reason | Empty if HIGH; explanation otherwise | Possible boilerplate — verify intent | |
| 40 | | Extraction Method | pdfplumber / vision / hybrid | pdfplumber | |
| 41 | | Notes | Any context Claude thinks the PE should know | Referenced mix designs in 03 31 00 | |
| 42 | |
| 43 | ### Formatting |
| 44 | |
| 45 | Use the rigid export script for all Excel output. The script handles: |
| 46 | - Header row: Bold, dark background (RGB 44,62,80), white text, freeze panes |
| 47 | - Alternating row shading for readability |
| 48 | - Auto-filter on all columns |
| 49 | - Column widths sized to content (Submittal Description gets the widest) |
| 50 | - Conditional formatting on Confidence column: HIGH=green, MEDIUM=yellow, LOW=orange, FLAGGED=red |
| 51 | - Summary sheet with counts by section, type, and confidence level |
| 52 | - Extraction QA sheet with per-section quality metrics |
| 53 | |
| 54 | --- |
| 55 | |
| 56 | ## Workflow — RIGID Structure, GUIDED Decisions |
| 57 | |
| 58 | ``` |
| 59 | Submittal Log Progress: |
| 60 | - [ ] Step 0: Ensure spec text is available (invoke /spec-splitter if needed) |
| 61 | - [ ] Step 1: Submittal identification (per section, Claude intelligence) |
| 62 | - [ ] Step 2: Confidence scoring & flagging |
| 63 | - [ ] Step 3: Assembly & deduplication |
| 64 | - [ ] Step 4: Excel output (rigid script) |
| 65 | - [ ] Step 5: Write graph entry |
| 66 | ``` |
| 67 | |
| 68 | ### Step 0: Ensure Spec Text Is Available — RIGID |
| 69 | |
| 70 | This skill reads from `.construction/spec_text/*.txt` files provisioned by `/spec-splitter`. Check whether they exist and invoke spec-splitter if needed. |
| 71 | |
| 72 | **Branch A — Text already extracted:** |
| 73 | 1. Check `.construction/spec_text/manifest.json` |
| 74 | 2. If present with corresponding `.txt` files → inventory them, build the processing queue, proceed to Step 1 |
| 75 | 3. Note any sections with `quality_rating: "POOR"` in the manifest — items extracted from these sections will receive a minimum confidence of MEDIUM |
| 76 | |
| 77 | **Branch B — No text extracted:** |
| 78 | 1. Invoke `/spec-splitter` — it will handle everything: locating or splitting spec PDFs, extracting text, and repairing quality issues |
| 79 | 2. After `/spec-splitter` completes, read `.construction/spec_text/manifest.json` and proceed to Step 1 |
| 80 | |
| 81 | **Important:** Always invoke `/spec-splitter` as a skill — do not call `extract_spec_text.py` or `s |