Retrofit Advisor: Rigorous Measure Ideation
This skill runs identically whether invoked standalone (a user asks for retrofit recommendations directly) or by decarb-plan P3 (which delegates measure ideation here by name). Equal rigor in both cases means identical method and identical provenance discipline — the method never degrades because the caller is a skill instead of a user, and it never degrades because the available data is sparse. Sparse data changes the confidence label on a measure, not the process used to produce it.
Never fabricate. Every measure on the register either cites a source line (register / audit /
PCA / Audette candidate) or is explicitly labeled extrapolated — feasibility study required.
Step 0 — Read the register first
Before proposing anything, call retrofit__get_measure_state({asset_id}). If measures already
exist on the register, refine/extend them rather than regenerating from scratch — preserve
prior source citations, confidence labels, and register ids; add or correct, don't overwrite
blindly.
Step 1 — Gather grounding (best-effort)
Collect whatever grounding is available, in priority order, and record what was actually found (don't silently skip a tier):
- Audette model/baseline, if present, for this asset — equipment inventory, modeled consumption, available-measures candidates.
- Audit / PCA documents — when invoked by decarb-plan, read
state.documents; when standalone,search_fileson the asset for audit/PCA/capital-needs-assessment documents. - OM / web sources as a labeled fallback only (e.g., published equipment specs, vendor literature) — never presented as audit-backed.
Sparse or missing grounding does not block ideation — it lowers the confidence label (Step 7) on whatever is proposed without a hard source, and it is stated plainly in the output, not hidden.
Step 2 — Propose
Call retrofit__propose_candidates with the best available asset attributes (real attributes —
never placeholder/default values). Treat the result as a starting set, not the whole
opportunity space — the optimizer returns what it returns; completeness is verified next.
Step 3 — Completeness cross-walk (screen DOWN from the universe, not UP from the optimizer)
Read references/measure-universe.md and confirm every applicable category was considered
for this building's actual systems:
- Envelope
- HVAC plant + distribution
- Controls / retro-commissioning
- DHW
- Lighting + lighting controls
- Plug / appliance
- Common-area / amenity loads (elevators, garage ventilation, spa/pool, common laundry)
- On-site generation / storage
- EV charging
- Procurement / market
For each category, record a disposition: evaluated (measure(s) on the register), screened-out-with-reason (considered, rejected — state why: economics, feasibility, already present, out of scope), or not-applicable (building has no such system). A roster that's thin only because the optimizer returned few candidates is a red flag — walk the full universe before accepting a short list.
Step 4 — Source-audit cross-walk
Before the roster is presented or persisted, walk it against every source gathered in Step 1:
- Nothing documented is dropped. Every measure an audit/PCA recommends appears on the register or is explicitly screened out with a reason — never silently omitted.
- Every roster measure cites its source line — the audit/PCA line, the register, or the Audette candidate it came from.
- A measure in no source is labeled
extrapolated — feasibility study requiredand is never presented as audit-backed. - Sizing traces to documents — solar kW / usable roof area, fixture counts, unit counts, equipment tons come from the audit/PCA/ALTA, never a generic per-SF assumption.
A measure without a source line or an explicit extrapolation label is not ready for the register. Do this cross-walk before persisting, not after.
Step 5 — Screen + evaluate
retrofit__screen_measuresto apply feasibility/economic screens to the candidate set.retrofit__evaluate_measurefor every screened-in candidate, to compute economics (CapEx, annual savings, payback, $/tCO₂e) and carbon impact. Every economic field must be provenanced to a real source — never fabricate a number to satisfy the tool.
Step 6 — Persist
Write the resulting measures to the register via retrofit__update_measure_state. The register
is the system of record — never persist measures by editing local/session state alone. Anything
not written back through update_measure_state does not count as done.
Step 7 — Confidence label
Every measure on the register carries exactly one grounding-confidence label:
audit-backed— cited directly to an audit/PCA line.modeled— derived from Audette modeled physics/baseline, not a raw audit line.extrapolated— not in any source; feasibility study required before it's actionable.
Step 8 — Output
Produce a concise in-chat markdown table:
| Measure | Tier | CapEx | Annual saving | $/tCO₂e | Payback | Confidence | Source |
|---|
Analytics standards apply: energy figures in kWh and kWh/m² (≤2 significant figures displayed); benchmark against BPD peers, never a national median.
No artifact, no fill_report, no PDF/deck export. Standalone output is the register (written
via retrofit__update_measure_state) plus this in-chat table — nothing more.
Guardrail: when invoked by decarb-plan
When this skill is invoked from decarb-plan's P3 phase, its job ends at a populated register plus the table above. It does not build the Gate-2 roster, the roadmap/phasing sequence, or the economics rollup (NPV/IRR, capture, exit value) — those stay in decarb-plan, which consumes this skill's register output as its input.