---
name: intake-gate-questions
description: The 6 mandatory Rocky-input questions at Phase 1 intake. Block all worker prompts until all 6 are answered.
authored_by: claude-code-orchestrator
created: 2026-05-08
---

# Intake Gate — 6 Mandatory Questions

Run via skill `lfo-intake-gate` at Phase 1, BEFORE any worker prompt is drafted. Use `AskUserQuestion` (multi-question batch) where possible. All 6 must be answered before Phase 2 opens.

Each answer is captured in the orchestrator session log under `intake_envelope` and becomes a frontmatter block prepended to every worker prompt for the rest of the session.

---

## Q-1 — Initial scope confirmation

**Question:** "Confirm scope for this bid. The 4 LFCS standard items are formwork S+I+strip, steel fix only, concrete place+finish only, curing supply+place. Which apply to THIS bid? Any bid-specific scope additions or carve-outs (e.g. Rate-Only items, OPTION items, Provisional Sums)?"

**Default options:**
- All 4 standard items
- All 4 + bid-specific carve-outs (free-text)
- Subset (which) + bid-specific (free-text)

**Captured as:**
```yaml
scope:
  formwork: yes|no|rate-only
  steel_fix: yes|no|rate-only
  concrete_pf: yes|no|rate-only
  curing: yes|no|rate-only
  bid_specific:
    - "<item text>"
```

**Gap-watch on this answer:** if Rocky's scope omits an item the drawings clearly show, fire G2-scope-omitted-vs-drawings rule, ask once.

---

## Q-2 — Site exposure category

**Question:** "Site exposure category for this bid?"

**Options (single-select):**
- `immersed` — slab below MHW, in tidal zone or permanent water
- `tidal` — slab in MSL/ISLW band or splash zone
- `coastal-air` — slab above MHW but in airborne salt aerosol environment (e.g. seawall above tide line, beachfront)
- `inland` — no marine exposure

**Why this matters:** drives saltwater consumables uplift (+5% materials for tidal/immersed), tidal-window scheduling (Q-D1), productivity adjustments. **Coastal-air does NOT trigger saltwater uplift even when drawings spec marine cement / stainless reo** (durability margin against airborne salt, not immersion).

**Captured as:**
```yaml
site_exposure: immersed|tidal|coastal-air|inland
```

**Gap-watch on this answer:** if Rocky says `coastal-air` AND drawings spec stainless 316 reo + marine cement Type LH/SR + sulphate-resistant footings → log the design-spec / site-classification distinction in session log (do NOT reclassify; Rocky's call stands). This prevents 2630-style auto-tidal classification.

---

## Q-3 — Labour rate

**Question:** "Labour rate for this bid? Default is $95/hr blended (8hr × $85 + 2hr × $105 + 1hr × $120 ÷ 10 hrs nominal). Override?"

**Options:**
- Default $95/hr — confirm
- Override — supply blended rate + build-up

**Override drivers** (offer as suggestion if Rocky overrides):
- Programme intensity (low OT exposure → lower)
- Crew composition (more leading-hand → higher)
- LAFHA already separate, NOT in blend

**Captured as:**
```yaml
labour:
  blended_rate_aud_per_hr: 95.00
  buildup_text: "8hr × $85 + 2hr × $105 + 1hr × $120 ÷ 10hr"
  override: false
```

---

## Q-4 — Margin + contingency

**Question:** "Margin + contingency for this bid? Default: labour direct × 1.10 cont × 1.15 margin = 1.265 loaded; materials direct × 1.15 margin × 1.10 cont = 1.265 loaded. Override?"

**Options:**
- Default — confirm
- Override (per category) — supply percentages + ordering

**Per-job override drivers:**
- Design maturity: full IFC = 10% cont default. 90% Design might be 7-8%. 60% Concept might be 12-15%.
- Pricing posture: defensible-for-variations vs aggressive-to-win.

**Captured as:**
```yaml
margin_contingency:
  labour:
    contingency_pct: 10
    margin_pct: 15
    sequence: cont-then-margin
    loaded_multiplier: 1.265
  materials:
    margin_pct: 15
    contingency_pct: 10
    sequence: margin-then-cont
    loaded_multiplier: 1.265
  override: false
  posture: defensible-for-variations
```

---

## Q-5 — Adverse weather posture

**Question:** "Adverse weather posture? Default is exclude as variation at day-labour rates. Include in prelims at 1 day/fortnight (~5%)?"

**Options:**
- Default exclude — confirm
- Include (specify days/fortnight + cost basis)

**Cost-basis formula** if include: `days × crew × hours × blended_rate`.

**Captured as:**
```yaml
adverse_weather:
  posture: exclude|include
  days_per_fortnight: 0|1
  prelim_allowance_aud: 0.00
```

---

## Q-6 — LAFHA in or out

**Question:** "LAFHA in or out for this bid? Sydney crew on remote regional site = IN; Sydney site or local crew = OUT."

**Options:**
- Out
- In — supply rate per Rate Card V1.7

**Captured as:**
```yaml
lafha:
  in_or_out: in|out
  rate_aud_per_day: 0.00
  notes: "<crew base / site location>"
```

---

## Intake envelope (post-Q1..Q6)

The orchestrator combines all 6 answers into a single envelope block prepended to every worker prompt:

```markdown
<!-- INTAKE-LOCKED — orchestrator-set, do not re-ask -->
job_no: 2631
session_id: <uuid>
intake_locked_at: 2026-05-08T14:30:00+10:00

scope:
  formwork: yes
  steel_fix: yes
  concrete_pf: yes
  curing: yes
  bid_specific: []

site_exposure: coastal-air

labour:
  blended_rate_aud_per_hr: 95.00
  buildup_text: "8hr × $85 + 2hr × $105 + 1hr × $120 ÷ 10hr"

margin_contingency:
  labour: { contingency_pct: 10, margin_pct: 15, sequence: cont-then-margin, loaded_multiplier: 1.265 }
  materials: { margin_pct: 15, contingency_pct: 10, sequence: margin-then-cont, loaded_multiplier: 1.265 }
  posture: defensible-for-variations

adverse_weather:
  posture: include
  days_per_fortnight: 1
  prelim_allowance_aud: 15200.00

lafha:
  in_or_out: in
  rate_aud_per_day: 165.00
  notes: "Sydney crew on Wollongong site"
<!-- /INTAKE-LOCKED -->
```

The worker reads this envelope and treats every field as locked. Worker-side `lfcs-pre-grill` skips Q-A0/Q-A4–Q-A7 (already locked); proceeds to Q-A1/A2/A3 supply, Q-B/C/D/E/F/G as normal.

If Rocky changes any locked value mid-session: orchestrator detects the conflict (§7 trigger 2 — two locked decisions contradict), surfaces, asks which stands. New envelope replaces old; session log records the change with backlink.
