# SKILL — lfcs-precall-questions

## Purpose

Generate `Pre-Call-Questions-{date}.md` — the QS-call agenda with answer slots — from gaps and risks identified in `00-Bid-Prep.md`, `Drawing-Index.md` (discrepancies + risks), and `boq-normalised.json` (lines lacking spec).

## Trigger

User says any of:
- "Build the QS call questions for [job]"
- "Generate pre-call doc"
- "QS call coming up — what do I need to ask?"

Or invoked at end of bid-intake skill chain by cowork-lfcs after `lfcs-bid-prep-doc`.

## Inputs

Required:
- `job_folder` — absolute path
- `call_date` — ISO date of the QS call (e.g. `2026-05-05`)

Implicit (must exist):
- `00-brief.md`, `00-Bid-Prep.md`, `Drawing-Index.md`, `boq-normalised.json`

## Behaviour

1. **Pre-flight** — confirm inputs exist; abort if not.
2. **Read** brief → bid-prep → drawing-index → boq-normalised.
3. **Identify question candidates by category:**
   - **Scope clarifications (must-haves):**
     - Supply boundary per BOQ "install" lines (extract from boq-normalised: any line where description starts with "Install" / "Supply and install" / "Place + install" → ask "supplied by who?")
     - Cranage status (any BOQ line marked "Cranage Not Included" or similar)
     - Concrete grade per element (always ask if not in BOQ)
     - Reo grade (always ask if not in BOQ)
     - Drawing currency (date-of-issue + status stamp from drawing-index)
     - Programme (target start, target PC, sequence, working hours, LDs)
   - **Commercial:**
     - Variation process (always ask if drawings are NFC)
     - Retentions, LDs, defects period, performance bond, payment terms
     - Insurance requirements
     - Submission format
   - **Site / risk:**
     - For each `risk:` tag in drawing-index: turn into a question (e.g. `risk:live-electrical` → "Who owns DBYD scan? Who pays for service strike?")
     - Geotech (if borehole references in drawing-index)
     - Latent conditions clause
   - **Per-job specifics:**
     - From drawing-index discrepancies table: every row becomes a question
     - From boq-normalised cross-check (if exists): every BOQ↔drawing mismatch becomes a question
   - **Nice-to-have:**
     - Alternative options noted on drawings (e.g. "concrete vs steel barrier")
     - Pour planning, mock-ups, curing
     - Subbie approvals
4. **For each question:** include `Why this matters:` line explaining pricing/scope impact, and `**Answer:**` blank slot.
5. **Group questions** under category headings (Scope clarifications / Commercial / Site / Nice-to-have).
6. **Write `{job_folder}/06 - Correspondence/06c - Meeting Minutes/Pre-Call-Questions-{call_date}.md`** with frontmatter (`title`, `date: {call_date}`, `attendees: [Rocky McLoughlin (LFCS), {client_signatory.name} ({client}, QS)]`, `status: pre-call`, `created`, `created_by`, `related: [00-brief, 00-Bid-Prep]`).
7. **Add post-call action items section** at end (template: update brief + incl-excl + pricing working sheet + RFIs + email QS).
8. **Append project log + daily note.**
9. **After vault writes commit, invoke `lfcs-airtable-sync mode=audit-only`** for the audit log. No direct writes — RFIs / Variations rows seeded by downstream skills (`lfcs-rfi-drafter`, `lfcs-variation-drafter`).

## Files to read (in order)

```
HQ-Vault/_System/CLAUDE.md
HQ-Vault/11_OpsMan_LFCS/_Brain/CLAUDE.md
HQ-Vault/11_OpsMan_LFCS/Operations/Jobs/Upcoming/2602 - Dec Projects - Munmorah Bridge/06 - Correspondence/06c - Meeting Minutes/Pre-Call-Questions-2026-05-05.md  ← regression fixture / template
{job_folder}/00-brief.md
{job_folder}/00-Bid-Prep.md
{job_folder}/03 - Plans and Specifications/03a - Issued for Construction/Drawing-Index.md
{job_folder}/02 - Scope and Pricing/02b - BOQ and Rate Schedules/boq-normalised.json
```

## Airtable behaviour

- **Reads:** `Jobs`, `RFIs` (existing for this job — informs question candidates), `Drawings` + `Drawing Elements` (discrepancy candidates), `Specifications` (to verify what's been issued).
- **Writes:** none directly. The `Pre-Call-Questions-{date}.md` is a markdown deliverable consumed by Rocky on the call. Post-call answers may seed `RFIs` / `Variations` rows via separate skills (`lfcs-rfi-drafter` / `lfcs-variation-drafter` — both v2).
- **Idempotency:** N/A. Calls `lfcs-airtable-sync mode=audit-only` for the audit log.

## Output format

To user:

```
✓ Pre-Call-Questions-{call_date}.md generated for {job_no}
  Categories: {list}
  Questions total: {n}
  Must-have (scope/commercial): {n}
  Site/risk: {n}
  Nice-to-have: {n}

  Path: {abs path}

  Workflow:
    1. Open this file alongside the call.
    2. Type answers in-line under each **Answer:** slot.
    3. Post-call: propagate answers per the action-items section at end.
```

## Hard rules

- **Every question must trace to a real input gap.** Don't pad with generic questions Rocky already knows the answer to (e.g. "Are you sure you want LFCS to bid?"). Every question has a "Why this matters" line tied to pricing or scope risk.
- **Filename includes call_date** so multiple calls per job (initial + follow-ups) don't collide.
- **Post-call propagation section is mandatory** — closes the loop into incl-excl + brief + pricing.
- **Append-only.** If file for that date exists, abort + ask user.
- **Regression fixture:** running on 2602 inputs with `call_date=2026-05-05` must reproduce or improve the existing `Pre-Call-Questions-2026-05-05.md` (18 categories, all answer slots present).
- **Vault markdown is source of truth.** If `lfcs-airtable-sync` write fails (audit-only mode), this skill's run is still considered successful — log to `_System/Conflicts.md` and continue. Never block on Airtable.

## Dependencies

- `lfcs-bid-prep-doc` (00-Bid-Prep.md, Drawing-Index.md, boq-normalised.json all upstream)
- 2602 `Pre-Call-Questions-2026-05-05.md` (regression fixture)

## Failure modes

| Failure | Detection | Recovery |
|---|---|---|
| Missing input | Pre-flight | Abort + name missing skill |
| File for that date exists | Pre-check | Abort + ask user |
| Zero questions generated (BOQ + drawings perfectly specified) | Post-generation count | Output minimal commercial-only template + flag in output |
