---
job_no: 2630
purpose: Initial lessons-learned entry seeding the lessons-learned directory. Imports the 4 gaps from `_Internal/2630-gaps-log.md` so the orchestrator's lfo-lessons-write skill has a referenceable canon entry to extend on the next session.
authored_by: claude-code-orchestrator
created: 2026-05-08
source_session: e57c7d98-c90d-48ed-b874-23bf35f19be8
source_log: _Internal/2630-gaps-log.md
append_only: true
---

# 2630 — Four Gaps (Imported from gaps-log)

These four gaps drove the orchestrator's design. Each is now covered by an orchestrator gate or skill (per § "Coverage" below). Future jobs MUST not repeat these without the orchestrator catching them — that's the v1 acceptance bar.

---

## 2026-05-08 — Standard LFCS exclusions not applied without prompting

**Missed:** Worker built exclusions per-job from generic methodology library row-by-row instead of from cross-cutting "LFCS scope is narrow → these always exclude" pattern. ~$97k of always-out items (Hilti chemicals, joint materials, falsework engineering, blinding labour, FRC waterproofing, adverse weather standby) baked into first-pass.

**Flagged:** Rocky 2026-05-08. "This is across most jobs — he should have spotted that and asked me."

**Root cause hypothesis:** Methodology base lacks aggregated Standard Exclusions Library. Worker treats each bid's exclusions as bespoke from job-category methodology rows.

**Coverage in orchestrator v1:**
- `standards/Standard-LFCS-Exclusions-Library.md` — 3-tier canonical library (10 boilerplate + 18 prelims + 21 specialist = 49 items)
- Skill `lfo-standard-exclusions-apply` — Phase 2 walks Rocky through all 5 categories before any first-pass take-off
- Gap rule G1 — blocks any first-pass prompt if exclusions skeleton doesn't exist

**Status:** captured-merged-into-library

---

## 2026-05-08 — Site exposure category not confirmed with Rocky

**Missed:** Worker assumed tidal site from drawing-spec materials (stainless 316 reo + sulphate-resistant concrete + marine cement BCSC). Site is coastal-air above tide line — NOT tidal. Carried saltwater +5% materials uplift, tidal-window scheduling, tidal-marine productivity into first-pass.

**Flagged:** Rocky 2026-05-08. "Marine cement spec is design-engineer choice for durability margin against airborne salt aerosol, NOT because the slab gets immersed."

**Root cause hypothesis:** Pre-pricing-grill phase doesn't include "confirm site exposure category" as Rocky-input gate. Q-G7 in `_methodology_Pre_Pricing_Grill_Templates` enum doesn't capture "above-tide-line marine-coastal" distinct from yes-tidal.

**Coverage in orchestrator v1:**
- Intake gate Q-2 — single-select: immersed / tidal / coastal-air / inland (Rocky-input MANDATORY)
- Gap rule G2 — strips tidal/saltwater inferences from worker output if envelope says coastal-air
- `standards/standing-context.md` §2.4 documents the design-spec vs site-classification distinction

**Status:** captured-merged-into-library

---

## 2026-05-08 — Labour rate not confirmed with Rocky before rate-build

**Missed:** Worker applied methodology-base default ($85/hr Rate Card V1.7 day rate). Rocky locked $95/hr blended (build-up: 8hr × $85 + 2hr × $105 + 1hr × $120 ÷ 10).

**Flagged:** Rocky 2026-05-08. "Different rate per job is normal — depends on programme intensity, LAFHA, crew composition."

**Root cause hypothesis:** No "confirm labour rate for this job" step before rate-build in lfcs-pricing CLAUDE.md §4.1.

**Coverage in orchestrator v1:**
- Intake gate Q-3 — single-select: default $95/hr / override (Rocky-input MANDATORY)
- Gap rule G3 — strips $85 / Rate-Card-V1.7-day references from worker output if envelope says different rate
- Intake envelope `labour.blended_rate_aud_per_hr` field captures the rate + build-up text

**Status:** captured-merged-into-library

---

## 2026-05-08 — Margin and contingency build-up rules not in methodology base

**Missed:** Worker applied wrong multiplier (1.165 / 1.10 alone) instead of locked formula (labour × 1.10 cont × 1.15 margin = 1.265; materials × 1.15 margin × 1.10 cont = 1.265).

**Flagged:** Rocky 2026-05-08 after rev 3 repricing. Locked rules: same final 1.265 multiplier per category, distinct ordering (labour cont-then-margin; materials margin-then-cont).

**Root cause hypothesis:** Methodology base lacks Build-Up Rules table. CLAUDE.md §4.1 step 8 had informal description ("16.5% margin baked per-line + 10% materials markup") that didn't reflect the actual rule.

**Coverage in orchestrator v1:**
- Intake gate Q-4 — default formula confirmed OR override (Rocky-input MANDATORY)
- Gap rule G4 — flags wrong-multiplier (1.165 / 1.10 alone) and inserts the locked formula
- Intake envelope `margin_contingency` block captures formula + ordering per category
- `standards/standing-context.md` §4 documents the locked formula explicitly

**Status:** captured-merged-into-library

---

## Self-evaluation: would the orchestrator have caught these?

See `_Internal/orchestrator-sessions/self-eval-2026-05-08.md` for the full self-evaluation table. Summary: all 4 gaps caught by Phase 1 intake gate or Phase 2 standard exclusions application, BEFORE any first-pass prompt is drafted to the worker. The orchestrator does not let any of these reach the worker uncorrected.
