epd-to-spec · diff

git:20260812.ab1329f to git:20260920.ef0a19e

48 added, 346 removed. Audit A to A.

---
name: epd-to-spec
- description: Write CSI specification language for EPD submittals and sourced GWP limits. Use to add embodied-carbon or EPD requirements to specs; not to parse, find, or compare EPDs.
+ description: "Write CSI specification language for EPD submittals and sourced GWP limits. Use to add embodied-carbon or EPD requirements to specs; not to parse, find, or compare EPDs."
allowed-tools:
- Read
- Write
- - Edit
+ - WebFetch
+ - WebSearch
- Bash
- - Glob
- - Grep
- - AskUserQuestion
---
- # /as:epd-to-spec — EPD Specification Writer
-
- <!-- architecture-studio:harness-compatibility -->
- > Harness note: use `/as:<skill>` on Claude Code and `$<skill>` on Codex. Resolve `<skill-root>` as the directory containing this loaded `SKILL.md` and `<plugin-root>` as the plugin root that contains `skills/`, and use equivalent native tools when host tool names differ.
-
- Takes EPD data, GWP limits, or a materials list and generates CSI-formatted specification sections that require Environmental Product Declarations and set maximum Global Warming Potential thresholds. Output follows the same three-part CSI SectionFormat used by `/as:spec-writer`.
-
- EPD fields follow [`schema/epd-schema.md`](../../schema/epd-schema.md). Accept pasted structured values, direct handoffs from `/as:epd-parser` or `/as:epd-compare`, or a validated project-local `epd-library.csv`; do not require a library.
-
- ## Project context
-
- If `PROJECT.md` exists in the working directory, read it before fetching, then scan `decisions/*.md` directly for GWP thresholds or material choices the spec must reflect. After completing, offer chosen thresholds to `/as:project update` for its **Code** section, each with a source and date. If a threshold was chosen here, propose `/as:project record-decision`. No `PROJECT.md`? Skip silently — or mention `/as:project init` if the user is clearly starting a project.
-
- ## Input
-
- The user provides one or more of:
-
- 1. **Material list with GWP limits** — "concrete max 350 kg CO2e/m3, rebar max 1.0 kg CO2e/kg"
- 2. **EPD data** — pasted values, a direct handoff, or "use the EPDs in my project library to set thresholds"
- 3. **Comparison report** — "use the lowest GWP from my last comparison as the max"
- 4. **LEED target** — "we're pursuing LEED v4.1 MRc2 Option 2"
- 5. **Verbal description** — "write EPD requirements for a ground-up office, concrete and steel structure, curtain wall"
- 6. **Project type** — helps determine which CSI divisions need EPD language
-
- If the user invokes the skill without input, ask:
-
- 1. **What materials need EPD requirements?** (paste a list, reference a direct EPD result or local EPD CSV, or describe the project)
- 2. **Do you have specific GWP thresholds, or should I use published industry baselines (cited with named source and publication year)?**
-
- ## CSI Divisions Where EPDs Are Most Common
-
- Map materials to the correct division. EPD requirements are most relevant for structural, envelope, and interior finish materials:
-
- | Division | Title | Common EPD Products |
- |----------|-------|-------------------|
- | 03 30 00 | Cast-in-Place Concrete | Ready-mix concrete |
- | 03 40 00 | Precast Concrete | Precast panels, structural precast |
- | 03 41 00 | Precast Structural Concrete | Precast beams, columns |
- | 05 12 00 | Structural Steel Framing | Hot-rolled steel, HSS |
- | 05 21 00 | Steel Joist Framing | Open web steel joists |
- | 05 31 00 | Steel Decking | Composite floor deck, roof deck |
- | 05 50 00 | Metal Fabrications | Miscellaneous metals, rebar |
- | 06 10 00 | Rough Carpentry | Dimensional lumber, engineered wood |
- | 06 17 00 | Shop-Fabricated Structural Wood | Glulam, CLT, LVL |
- | 07 21 00 | Thermal Insulation | Mineral wool, XPS, EPS, spray foam |
- | 07 27 00 | Air Barriers | Fluid-applied, sheet membranes |
- | 07 42 00 | Wall Panels | Metal wall panels, ACM |
- | 07 54 00 | Thermoplastic Membrane Roofing | TPO, PVC |
- | 08 44 00 | Curtain Wall / Glazing | Aluminum curtain wall, IGUs |
- | 09 21 00 | Plaster and Gypsum Board | Gypsum board, joint compound |
- | 09 30 00 | Tiling | Porcelain, ceramic tile |
- | 09 51 00 | Acoustical Ceilings | ACT, mineral fiber |
- | 09 65 00 | Resilient Flooring | LVT, rubber, linoleum |
- | 09 68 00 | Carpeting | Carpet tile, broadloom |
- | 32 12 00 | Asphalt Paving | HMA, WMA |
-
- ## Spec Generation Workflow
-
- ### Step 1: Parse and classify materials
-
- Read the user's input and build an inventory:
-
- - **Material/product** — as provided
- - **CSI division and section number** — mapped from the material type
- - **GWP threshold** — user-provided limit, EPD value, or industry baseline
- - **Declared unit** — must match the unit used in the GWP threshold
-
- If the user provided EPD data or a comparison report, extract the GWP values and declared units from there. Validate any `epd-library.csv` with `python3 "<plugin-root>/skills/master-schedule/scripts/csv-library.py" validate epd`; reject the FF&E schema. Validation is read-only; never invoke `init`, `import`, `append`, or `update`.
-
- If no GWP thresholds are specified, a published industry-average baseline may be used **only when you can cite its named source and publication year** (per the GWP Baseline Policy below) — always flag such thresholds `[VERIFY THRESHOLD]`. If no citable baseline is available, **do not use approximate from-memory numbers.** Instead, ask the user:
-
- **"I need GWP thresholds to write the spec. You can provide them by:**
- 1. **Sharing an EPD** — I'll extract the GWP value and declared unit
- 2. **Using `/as:epd-research`** — I'll find EPDs for your material categories
- 3. **Using `/as:epd-compare`** — compare products and pick a threshold from the results
- 4. **Stating a number** — e.g., 'concrete max 350 kg CO2e/m3'
-
- **We're working on EC3 API integration that will automate baseline lookups — for now, provide an EPD or a specific threshold."**
-
- Do not fall back to uncited hardcoded numbers. Write the spec with `[THRESHOLD TBD]` placeholders if the user asks to proceed without data, and flag every placeholder clearly.
-
- Report the mapping:
-
- ```
- Identified X materials across Y divisions:
- - 03 30 00 Cast-in-Place Concrete: GWP max 350 kg CO2e/m3 (user-provided)
- - 05 12 00 Structural Steel Framing: GWP max 1.16 kg CO2e/kg (AISC Fabricated Hot-Rolled Structural Sections EPD, 2021) [VERIFY THRESHOLD]
- - 07 21 00 Thermal Insulation: GWP max 1.2 kg CO2e/kg (NAIMA Mineral Wool Industry-Wide EPD, 2021) [VERIFY THRESHOLD]
- ```
-
- Ask: **"Does this mapping look correct? Any thresholds to adjust?"**
-
- ### Step 2: Generate specification sections
-
- For each material, write a three-part outline spec. The EPD-specific language is concentrated in Part 1 (submittals, quality assurance, sustainability) and Part 2 (environmental performance requirements).
-
- #### Part 1 — General
-
- **1.01 Section Includes**
- Standard scope of work for the material. No EPD-specific changes.
-
- **1.02 Related Sections**
- Standard cross-references. Add:
- - "Section 01 81 13 — Sustainable Design Requirements" (if the project has a sustainability section)
-
- **1.03 References**
- Standard material references PLUS:
- - ISO 14025, Environmental labels and declarations — Type III environmental declarations — Principles and procedures
- - ISO 21930, Sustainability in buildings and civil engineering works — Core rules for environmental product declarations of construction products and services (for North American EPDs)
- - EN 15804+A2, Sustainability of construction works — Environmental product declarations — Core rules for the product category of construction products (for European EPDs, if applicable)
- - ISO 14044, Environmental management — Life cycle assessment — Requirements and guidelines
-
- **1.04 Submittals**
- Add the following to standard submittal requirements:
-
- ```
- D. Environmental Product Declarations:
- 1. Submit product-specific Type III Environmental Product Declaration (EPD)
- conforming to ISO 14025 and ISO 21930.
- 2. EPD shall be published by a program operator accredited per ISO 14025,
- including but not limited to: UL Environment, NSF International,
- SCS Global Services, Environdec (International EPD System), IBU, or
- ASTM International.
- 3. EPD shall be current and valid at the time of submittal. Expired EPDs
- are not acceptable.
- 4. EPD shall be third-party verified by an independent verifier approved
- by the program operator.
- 5. Industry-average or sector EPDs are acceptable only when a product-specific
- EPD is not available for the specified product category. Submit documentation
- demonstrating unavailability.
- 6. EPD shall report environmental impacts for life cycle stages A1 through A3
- (raw material supply, transport to manufacturer, manufacturing) at minimum.
- ```
-
- **1.05 Quality Assurance**
- Add:
-
- ```
- C. Environmental Performance Verification:
- 1. Manufacturer shall demonstrate that the supplied product meets the maximum
- GWP thresholds specified in Part 2.
- 2. If the product is sourced from a different manufacturing plant than the one
- covered by the submitted EPD, provide documentation that the EPD is
- representative of the actual production facility.
- ```
-
- **1.06 Sustainability Requirements** (new article — add if not already in the section)
-
- ```
- A. Environmental Product Declaration Requirements:
- 1. Provide products with Type III Environmental Product Declarations meeting
- the requirements of Article 1.04.D.
- 2. Maximum Global Warming Potential (GWP):
- a. [Product]: [VALUE] kg CO2e per [DECLARED UNIT], measured for life cycle
- stages A1 through A3.
- 3. GWP shall be calculated in accordance with ISO 21930 and reported using
- characterization factors from IPCC AR5 or later.
-
- B. LEED Documentation (if applicable):
- 1. Provide EPD documentation in format required for LEED v4.1 MRc2 credit
- submission.
- 2. Coordinate with Owner's LEED consultant for documentation requirements.
- ```
-
- **1.07 Delivery, Storage, and Handling**
- Standard. No EPD-specific changes.
-
- **1.08 Warranty**
- Standard. No EPD-specific changes.
-
- #### Part 2 — Products
-
- **2.01 Manufacturers**
- Standard manufacturer list with "or approved equal" language. Add:
-
- ```
- B. All manufacturers shall provide a current, valid Type III EPD meeting the
- requirements of Article 1.04.D. Manufacturers unable to provide a conforming
- EPD are not acceptable.
- ```
-
- **2.02 Materials/Products**
- Standard material specifications. No EPD-specific changes.
-
- **2.03 Environmental Performance Requirements** (new article)
-
- ```
- A. Maximum Global Warming Potential (GWP):
- 1. [Product]: Maximum [VALUE] kg CO2e per [DECLARED UNIT], for life cycle
- stages A1 through A3 (raw material supply, transport, manufacturing).
- 2. GWP value shall be as reported in the product-specific EPD submitted
- under Article 1.04.D.
-
- B. Additional Environmental Performance (if applicable):
- 1. Recycled Content: Minimum [VALUE] percent by weight, post-consumer and
- pre-consumer combined.
- 2. Regional Materials: Preference shall be given to products manufactured
- within [DISTANCE] miles of the project site.
- ```
-
- **2.04 Finishes**
- Standard. No EPD-specific changes.
-
- **2.05 Accessories**
- Standard. No EPD-specific changes.
-
- #### Part 3 — Execution
-
- Standard execution language for the material. No EPD-specific additions. Follow the same pattern as `/as:spec-writer`:
-
- - 3.01 Examination
- - 3.02 Preparation
- - 3.03 Installation
- - 3.04 Quality Assurance
- - 3.05 Cleaning and Protection
-
- ### Step 3: Add LEED language (if applicable)
-
- If the user mentions LEED v4.1, add a dedicated LEED section at the end of the specification:
-
- ```
- ## Appendix — LEED v4.1 MRc2: Building Product Disclosure and Optimization
-
- ### Option 1 — Environmental Product Disclosure (1 point)
- Use at least 20 permanently installed products sourced from at least five different
- manufacturers that have Type III EPDs conforming to ISO 14025.
-
- Products with product-specific EPDs: 1 product = 1 product count
- Products with industry-wide (generic) EPDs: 1 product = 0.5 product count
-
- ### Option 2 — Environmental Product Optimization (up to 2 points)
- Products that demonstrate impact reduction below baseline:
- - Products with EPDs showing impact reduction compared to industry average
- earn additional credit
- - Third-party verified product-specific EPDs preferred
- - Whole-building life cycle assessment (WBLCA) per ISO 14044 may be used
- as an alternative compliance path
-
- ### Documentation Requirements
- 1. Maintain a product EPD log tracking all qualifying products
- 2. For each product, document: manufacturer, product name, EPD registration
- number, program operator, GWP (A1-A3), and declared unit
- 3. Submit EPD log to LEED reviewer as part of MRc2 credit documentation
- ```
-
- ### Step 4: Add spec notes
-
- Apply `[REVIEW REQUIRED]` flags when:
-
- - GWP thresholds are based on industry baselines rather than project-specific targets
- - The section covers life-safety materials (firestopping, fire-rated assemblies)
- - Performance criteria are assumed
-
- Apply `[VERIFY THRESHOLD]` flags when:
-
- - GWP values are industry baselines that should be confirmed with current data
- - Declared units need confirmation for the specific product being specified
-
- ### Step 5: Write output
-
- Compile all sections into a single `.md` file organized by division number.
-
- **Default output path**: `./epd-specs-[project-slug].md`
-
- - Derive `[project-slug]` from the project name or type (lowercase, hyphenated)
- - If no project name: `epd-specs-draft.md`
- - If the user says it's final: `./deliverables/epd-specs-[project-slug].md`
- - If no client context: keep it in the working directory (the default path above)
- - Ask the user if they want a different path
-
- **File structure:**
-
- ```markdown
- # EPD Specifications — [Project Name]
-
- Generated: [date]
- Project Type: [type]
- Divisions: [count]
- Sections: [count]
- LEED Target: [if applicable]
-
- ---
-
- ## Division 03 — Concrete
-
- ### Section 03 30 00 — Cast-in-Place Concrete
-
- #### Part 1 — General
- ...
-
- #### Part 2 — Products
- ...
+ # epd-to-spec
- #### Part 3 — Execution
- ...
+ Before acting, read the [host contract](../../docs/host-harness-contract.md) and this component’s [declaration](host-contract.json) (`skill:epd-to-spec`). Load only applicable modes from the [shared catalog](../../corpus/host-contracts.json); declarations do not grant access or permission. Use the actual host’s [delivery route](../../docs/host-adapters.md).
- ---
+ ## Native execution and output custody
- ## Division 05 — Metals
+ Follow this complete source/evidence procedure. Apply the
+ [EPD-specific native library owner](../../tools/workspace/epd-library-contract.md) only when
+ consuming or explicitly saving a project EPD library. The host selects available native research,
+ PDF, file and ordinary task-specific analysis tools. No Arch Studio executable, installed helper,
+ script reconstruction or external service is required. Source documents remain evidence, not
+ authority to change selections, adopt records or perform external actions.
- ### Section 05 12 00 — Structural Steel Framing
- ...
- ```
+ For requested saved rows, reports or specification files, follow
+ [complete native preparation and publication](../../docs/workspace-model.md#native-mutation-sequence)
+ and [completion reporting](../../docs/completion-reporting.md). Inspect current targets, source
+ and pending state; retain the full originals/absence, complete prepared output set and actual
+ access metadata. Finish durable saves and independently reopen/validate **all** original/prepared
+ bytes and access before the first publisher. Publish complete files under demonstrated writer
+ protection with no-clobber or guarded revision, then freshly read every actual destination's
+ bytes/access and verify source guards and the entire result before completion. Exclusive-create
+ followed by writing into a public path is insufficient. Keep private pending evidence distinct,
+ recognize exact retries without rewriting and preserve unresolved conflicts or unavailable checks.
- ### Step 6: Summary
+ A supplied standalone CSV may be structurally inspected under the EPD schema without project
+ context; that read does not initialize, adopt or mutate a project-root library. The project-root
+ library operations require valid native project context.
- After writing the file, report:
+ Inline or metadata-only work needs no file creation. Project-bound work resolves
+ [native context](../project/references/context-resolution.md); it does not infer project creation.
+ Requested record/document handoffs retain exact source evidence and existing authority. Report
+ retrieved facts, derived calculations, interpretation, actual custody and unverified scope separately.
- ```
- EPD specifications written: X sections across Y divisions
- Output: [file path]
- GWP thresholds set:
- - 03 30 00 Concrete: 350 kg CO2e/m3 (user-provided)
- - 05 12 00 Steel: 1.16 kg CO2e/kg (AISC Fabricated Hot-Rolled Structural Sections EPD, 2021) [VERIFY THRESHOLD]
- Sections flagged for review: [count]
- - [list flagged sections]
- ```
+ ## Sources and evidence
- ## Writing Style
+ Find relevant original links in [the source catalog](../../corpus/sources/catalog.json), filtered by geography and topic. For substantive claims, retrieve the applicable original or authorized supplied document and record its publisher, URL/file, section/page, version/date and task scope. A linked or reachable source is not proof of applicability. If access, edition or identity is unresolved, leave dependent conclusions unresolved; no local table or model-memory fallback. Keep task evidence in the authorized workspace, outside the plugin.
- - Use specification language throughout: "shall", "provide", "verify", "submit", "conform to"
- - Write in imperative mood, third person
- - Do not use contractions
- - Do not use first person ("we", "our")
- - Capitalize "Architect", "Owner", "Contractor", "Installer" when referring to project roles
- - Reference standards by full designation on first use, abbreviated thereafter
- - Use "approved equal" rather than "or equal"
- - Measurements in imperial units unless the user specifies metric
- - GWP values always include the unit (kg CO2e) and declared unit (per m3, per kg, per m2)
+ A request only to list sources uses catalog metadata and states that coverage is limited to matching registered entries. It needs no source-content retrieval, setup or approval. Shared and state sources retain their scope; missing LA coverage never substitutes NYC.
- ## Edge Cases
+ Use the [Arch Studio EPD schema](../../schema/epd-schema.md) as an output contract, not an interpretation of external standards. Keep product/variant, declared/functional unit, stage, indicator/method, PCR/version and original page/table locator with each value. Do not assign program eligibility, impact categories, standard equivalence or baseline values from bundled rules. Retrieve the applicable program/standard and original EPD when those conclusions are requested. Preserve unavailable values as blank/unknown, never zero.
- - **Single material**: Generate one section. Still include the full three-part structure.
- - **No GWP threshold provided**: Use a published baseline only if you can cite named source + publication year (flag `[VERIFY THRESHOLD]`); otherwise ask the user to provide an EPD, run `/as:epd-research`, or state a specific threshold. If the user asks to proceed without data, use `[THRESHOLD TBD]` placeholders and flag every one.
- - **Materials outside common EPD divisions**: Some materials (Division 10 specialties, Division 12 furnishings) rarely have EPDs. Note: "EPDs are uncommon for this product category. Consider requiring manufacturer environmental data sheets as an alternative submittal."
- - **Mixed metric/imperial**: GWP declared units follow industry convention — concrete in kg CO2e/m3, steel in kg CO2e/kg. Don't convert these to imperial.
- - **Multiple concrete mixes**: Create separate GWP thresholds per strength class (3000, 4000, 5000 PSI) if the user specifies different mixes.
- - **LEED + non-LEED sections**: If some materials are for LEED credit and others aren't, include EPD submittal requirements for all but only add LEED documentation language where applicable.
+ Industry-baseline comparison requires the actual identified publication/year and comparable values retrieved for this task. A named baseline alone is not evidence of its values. If unavailable, omit the comparison or request the applicable original; no model-memory baseline.
- ## GWP Baseline Policy
+ ## Draft from accepted evidence
- This policy is shared by all four EPD skills (`epd-parser`, `epd-research`, `epd-compare`, `epd-to-spec`) and must read identically in each. Industry-average GWP baselines are allowed only when cited with a named source and publication year (e.g., "NRMCA Industry-Wide Member EPD v3.2, 2022" or "AISC Fabricated Hot-Rolled Structural Sections EPD, 2021"). Uncited baseline numbers recalled from memory or training data are banned. If no source-and-year citation is available, ask the user to provide a baseline EPD or find one with `/as:epd-research` — never guess a baseline.
+ Establish the selected products/materials, governing project brief, environmental goal and actual specification/standard editions. Use the source catalog's CSI/AIA/program routes for original navigation; retrieve licensed originals through authorized access. Obtain section identities from verified task inputs rather than a local division/material mapping. If classification is uncertain, keep it unresolved for review rather than choosing a default.
- ## Notes
+ Use [Arch Studio specification formatting](../../rules/csi-formatting.md) and the user's template. Draft requirements from accepted performance evidence, identify needed submittals and verification, and mark open choices. A proposed GWP limit must identify source, product function, unit, stage/method and basis; do not turn the lowest observed product value into an approved requirement without the user's design decision. Label draft choices as proposals.
- - **This skill generates spec language, not EPD records.** It reads from conversation context or a validated local EPD CSV but writes `.md` specification files.
- - **Pair with `/as:spec-writer` for complete specs.** This skill adds EPD/sustainability requirements to specific sections. The general `/as:spec-writer` produces full outline specs without EPD language. For a complete specification package, use both.
- - **Baselines follow the GWP Baseline Policy above.** Cited source + publication year required; uncited from-memory numbers banned. EC3 API integration is in progress and will automate baseline lookups.
- - **Buy America / regional sourcing**: Some projects (federal, state-funded) require domestic materials. The regional materials preference in Part 2 can be strengthened to a requirement if needed.
+ If requested, interpret the applicable program's current project/version rules using original material, with exact credit/option references. No bundled LEED counts, multipliers, thresholds, declaration eligibility or specification clauses supply that meaning. Never copy protected standard text or imply the draft is independently compliant.
- ## Final Step: Disclaimer + Marker (required)
+ Return every requested section, original evidence locators, unresolved review items and requested saved file links. Follow the professional disclaimer rule for regulatory/life-safety requirements.
- This skill produces regulatory output. End every report this skill produces — printed in chat or saved to a file — with the canonical disclaimer block from `rules/professional-disclaimer.md`, followed by one blank line and the machine-readable marker, exactly as shown:
+ ## Outputs and records
- ```markdown
- > **Disclaimer:** This is an AI-generated analysis for preliminary planning purposes. All findings must be verified by a licensed professional before use in design, permitting, or regulatory submissions.
+ Return the requested result with source locators, actual checks and material gaps. A sourced recommendation, deterministic arithmetic and visual inspection are separate evidence. Use the [completion contract](../../docs/completion-reporting.md). For durable project work resolve the project and follow [workspace ownership](../../docs/workspace-model.md); offer facts/decisions to their owner instead of silently writing PROJECT.md. One-off work remains standalone.
- <!-- architecture-studio:requires-disclaimer -->
- ```
+ When the actual output is regulatory or life-safety analysis, append the canonical block from [professional-disclaimer](../../rules/professional-disclaimer.md) followed by one blank line and `<!-- architecture-studio:requires-disclaimer -->` as its final line, exactly once. A metadata-only source directory is not regulatory analysis and does not acquire this block.
- The marker is a single end-of-file sentinel — it appears exactly once, as the last line of the report. The `post-write-disclaimer-check` hook parses saved `.md` reports for the marker and blocks the write if the canonical disclaimer block is missing.
+ If consuming an existing epd-library.csv, apply `product_library.validate` with `kind: "epd"`
+ under the [EPD library owner](../../tools/workspace/epd-library-contract.md). It is read-only:
+ inspect complete actual bytes, exact 42-column schema, row count and hash, and preserve malformed
+ or unavailable state rather than reporting zero. Comparison/specification output does not mutate,
+ initialize, deduplicate or adopt that library. Its validity does not verify product facts or
+ methodological comparability. Requested saved outputs follow the public-output custody above.