---
purpose: Queue of methodology + gap-rule + standing-context proposals awaiting Rocky review. Append-only. On Rocky decision, move resolved proposals to `proposals-resolved.md` and merge accepted into target file.
authored_by: claude-code-orchestrator
created: 2026-05-08
append_only: true
---

# Proposals Pending Review

Each entry: ID, source session, target file, proposed change, evidence, status (pending / accepted / rejected / modified).

---

## Methodology proposals (Rate Templates / Productivity Benchmarks / Common Misses Patterns)

(empty — first proposals will land after orchestrator's first real-job session)

---

## Standard Exclusions Library proposals (new STD-XXX-NN candidates)

(empty — append when a session-level carve-out turns out to be cross-cutting)

---

## Gap-watch pattern proposals (new G6+ rules)

### G6 — BCS-metadata in worker-readable artefacts (2026-05-10)

**Source:** system-gap-audit-2026-05-10. Two consecutive sessions (d58cec3f + 09c7347d) on bid 2627 aborted on BCS leak — orchestrator-authored worker-readable files contained comparator metadata.
**Target file:** `Codebase/lfcs-orchestrator/standards/gaps-pattern-library.md` (append G6 row)
**Proposed pattern:**
- **Detect when:** any worker-readable file (per-job CLAUDE.md, 00-brief.md, exclusions skeleton, orch-to-pricer.md, handoff bus messages) contains comparator filename, comparator author name, comparator total, supersession marker, scope-split delta, or schema label
- **What goes wrong:** anchoring bias breaks BCS independence; sessions abort-on-breach
- **Mitigation:** refuse-to-write block in `lfo-prompt-pricing` and `lfo-blind-driver` skills before any worker-readable file persistence; whitelist > blacklist for path control
- **Severity:** block
**Status:** pending

### G7 — exclusion-default contradicts drawing/spec (2026-05-10)

**Source:** session-80b1f893-2627 line 92 — worker corrected cure period 14d → 7d from spec §10.1.1; not flagged by orchestrator pre-prompt
**Target file:** `Codebase/lfcs-orchestrator/standards/gaps-pattern-library.md` (append G7 row)
**Proposed pattern:**
- **Detect when:** any standard-exclusion-library default (cure period, joint spec, etc.) contradicts a value parsed from BoQ-from-drawings or pavement-spec output
- **What goes wrong:** over- or under-pricing on a recurring exclusion line
- **Mitigation:** insert spec-overrides-default reminder line in first-pass prompt; surface contradiction to Rocky if material
- **Severity:** correct
**Status:** pending

### G8 — magnitude-variance-acceptance threshold (2026-05-10)

**Source:** session-80b1f893-2627 line 73 + 118 — worker total 6% below §7 magnitude flagged for Rocky; no rule for "acceptable variance band"
**Target file:** `Codebase/lfcs-orchestrator/standards/gaps-pattern-library.md` (append G8 row) + new standing-context §15
**Proposed pattern:**
- **Detect when:** Phase 3 sealed total deviates from §7 magnitude estimate by >X%
- **Codification:** ±10% = auto-accept (not flagged); >±10% = Rocky flag
- **Mitigation:** add standing-context §15 to define the threshold; gap-watch enforces
**Status:** pending

---

## Standing-context proposals (changes to locked LFCS facts)

### §13.4 design-maturity-contingency-uplift (2026-05-10)

**Source:** session-d58cec3f-2627 lines 54-78 + lesson-2026-05-08-margin-contingency.md:34
**Target file:** `Codebase/lfcs-orchestrator/standards/standing-context.md` §13 (insert §13.4)
**Proposed change:**
```yaml
§13.4 design-maturity-contingency-uplift:
  question: "labour + materials contingency % when drawings are pre-IFC"
  inputs: [drawing_status]  # one of: IFC, IFR/Issued for Review, IFI/Issued for Information, 90% Design, 60% Concept
  logic:
    IFC: { labour_cont: 10, materials_cont: 10, confidence: 95 }
    IFR/IFI/rev D pre-IFC: { labour_cont: 15, materials_cont: 15, confidence: 80 }
    90% Design: { labour_cont: 12, materials_cont: 12, confidence: 80 }
    60% Concept: { labour_cont: 15, materials_cont: 15, confidence: 75 }
  default: applied symmetrically to labour AND materials cont (mirror)
  evidence: 2602 IFI rev D, 2627 Airey rev D, 2629 90% Design, 2630 IFI
```
**Status:** pending

### §13.5 HC-relationship-via-Airtable-history (2026-05-10)

**Source:** lesson-2026-05-08-bid-lifecycle.md:53 (calibration to-do)
**Target file:** standing-context.md §13 (insert §13.5)
**Proposed change:** query Airtable Bids by `hc_name + end_client`; ≥1 prior → re-bid (reuse exclusions baseline + prior labour rate); 0 prior → fresh-grill. Confidence 85%.
**Status:** pending

### §13.6 LAFHA postcode-precedent extension (2026-05-10)

**Source:** session-d58cec3f-2627 line 23 + 2602/2627/Homestead briefs
**Target file:** standing-context.md §13.1 (extend with named-postcode worked-examples table)
**Proposed change:** add table mapping postcodes to LAFHA decision so orchestrator stops re-running Google Maps for same towns:
- 2077 Hornsby → OUT 95%
- 2140 Strathfield/Homebush → OUT 95%
- 2210 Peakhurst → OUT 95%
- 2259 Munmorah → IN 90%
- 2500 Wollongong → flag (95-min boundary)
- 2540 Nowra → IN 95%
- 2571 Wilton → flag (boundary)
**Status:** pending

### §13.7 site-exposure-via-postcode-and-tide-line (2026-05-10) — promotes §13.2 reservation

**Source:** lesson-2026-05-08-site-exposure.md + 2630 + 2602 Hammond Canal lake clarification + 2627 Airey
**Target file:** standing-context.md §13 (replace §13.2 stub)
**Proposed change:**
```yaml
§13.7 site-exposure-via-postcode-and-tide-line:
  inputs: [site_postcode, drawings_relative_to_MHW, sea_level_diagram_present]
  logic:
    inland_postcode (>10km from coast): inland @ 95%
    coastal_postcode + slab above MHW + no immersion notes: coastal-air @ 80%
      # DO NOT trigger saltwater +5% uplift even if marine cement / stainless 316 specified — durability margin ≠ immersion (per 2630 lesson)
    coastal_postcode + slab in MSL/ISLW band or splash zone: tidal @ 85%
    coastal + slab below MHW: immersed @ 90%
    lake/canal sites: inland @ 90% (per 2602 Hammond Canal)
  flag: confidence drops to 60% if drawings spec marine + classification is coastal-air (G2-shadow)
```
**Status:** pending

### §13.8 adverse-weather-via-site-type-and-programme-length (2026-05-10) — promotes §13.3 reservation

**Source:** 2602/2628/2629/2630
**Target file:** standing-context.md §13 (replace §13.3 stub)
**Proposed change:**
```yaml
§13.8 adverse-weather:
  inputs: [site_exposure_outdoor_or_covered, programme_weeks, season]
  logic:
    indoor/covered OR programme<4 weeks: exclude as variation @ 90%
    outdoor + programme 4-8 weeks: exclude as variation @ 75%
    outdoor + programme >8 weeks: include 1 day per fortnight in prelims @ 75%
    bridge open-deck OR seawall/coastal + programme >8 weeks: include 1 day per fortnight @ 85%
  default: exclude as variation per 2629 #37
```
**Status:** pending

### §13.9 hours-of-work default (2026-05-10)

**Source:** 2602/2627×2/2628/2629/2630 grills
**Target file:** standing-context.md §13 (insert §13.9)
**Proposed change:** Mon-Fri day shift 7:00am–3:30pm @ 95% default; override to night/mixed only if (a) §13.7 fires `tidal`/`immersed`, OR (b) HC RFQ explicitly mandates night, OR (c) live-traffic-corridor M-class road site.
**Status:** pending

### §13.10 saw-cut-within-24hr always in scope on pavement (2026-05-10)

**Source:** 2627 Airey grill Q-D2 + 2628; standing-context §1.1
**Target file:** standing-context.md §13 (insert §13.10)
**Proposed change:** if scope contains pavement OR external slab OR pathway → SJ1/SJ2/WSJ within 24h is locked LFCS scope; diamond saw + dust suppression LFCS-supplied; off-hours saw-cutting = variation at day-rate per §13.9. Confidence 90%.
**Status:** pending

### §13.11 chemical curing compounds (AS3799) ALWAYS excluded (2026-05-10)

**Source:** standing-context §1.4 already says this; codify deterministically so orchestrator stops re-asking
**Target file:** standing-context.md §13 (insert §13.11)
**Proposed change:** chemical curing compounds (AS3799) NEVER LFCS-supplied — locked exclusion. Polythene + hessian LFCS-supplied. Confidence 99%. Auto-flag if any RFQ sub-line includes AS3799 chemical curing — orchestrator carves out automatically.
**Status:** pending

### §13.12 cure-period-via-spec-precedence (2026-05-10)

**Source:** 2602/2627/2629/2630 grill Q-D5 / Q-G6
**Target file:** standing-context.md §13 (insert §13.12)
**Proposed change:** if project spec quotes minimum cure period (e.g. AS pavement spec §10.1.1 = 7 days), use spec number. Default = 7 days @ 90%. Bridge / marine / WWTP spec may say 14 days — use spec. Standing-context §1.4 currently says "14-day cure" as LFCS default; restrict to spec-mandated to avoid over-pricing.
**Status:** pending

### §13.13 defensible-for-variations posture defaults whenever drawings are pre-IFC (2026-05-10)

**Source:** 2602/2627/2629/2630 grill Q-F1
**Target file:** standing-context.md §13 (insert §13.13)
**Proposed change:** if drawing status ∈ {IFI, Issued for Review, IFR, 60% Concept, 90% Design} → posture = defensible-for-variations @ 95%; add +5% labour cont uplift over default 10% (i.e. 15% locked, mirroring §13.4). If IFC → defensible default but no uplift. Aggressive-to-win remains override.
**Status:** pending

### Standing-context §8 BoQ format default = "both" (2026-05-10)

**Source:** session-d58cec3f-2627 line 51 (60% confidence flag eliminated) + Rocky's actual every-time pick on 2627
**Target file:** standing-context.md §8
**Proposed change:** add `default = both lump-sum-letter + BoQ-response (defensive)` at 85% confidence; demote off the assumptions log entirely. Rocky overrides per-bid if needed.
**Status:** pending

### Standing-context §15 NEW — magnitude-variance-acceptance band (2026-05-10)

**Source:** session-80b1f893-2627 line 73 + 118 (paired with G8 above)
**Target file:** standing-context.md (new §15)
**Proposed change:** define ±10% as auto-accept band for "Phase 3 sealed total vs §7 magnitude estimate" delta. Outside band = Rocky flag. Confidence: codifies what was previously per-bid judgement.
**Status:** pending

### state.json schema bump — Rocky defaults persistence (2026-05-10)

**Source:** workflow-audit gap #5 (eliminate Phase-1-entry batched gate)
**Target file:** `C:/Users/mclou/lfcs-handoff/state.json` schema (defined in `daemon/lfo_handoff_daemon.py` and `lfo-handoff-watcher/SKILL.md`)
**Proposed change:** add `rocky_defaults: { operating_mode: "autonomous-daemon", blind_comparator_detection_policy: "auto-detect-by-filename" }` block, persisted across bids. Auto-apply with confidence 95% until Rocky overrides. Eliminates 2-3 questions per bid kickoff.
**Status:** pending

### §13.6 comparator-role-via-filename-pattern (2026-05-10)

**Source:** session-d58cec3f-2627 line 23-26 (`Liam quote = Blind comparator`)
**Target file:** standing-context.md §13 (insert §13.6 — distinct from LAFHA postcode extension above; rename to §13.14 to avoid clash)
**Proposed change:** auto-detect comparator role: inbound PDF matching `*quote*` or `*estimate*` from sender ≠ HC → propose BCS at 75% confidence; flag-for-Rocky on ambiguous (e.g. HC's own internal estimate). Eliminates the comparator-role confirmation touchpoint.
**Status:** pending

---

## Skill proposals (new lfo-* skills) — 2026-05-10

### lfo-precedent-import — HIGHEST PRIORITY

**Why:** Today's lfo-precedent-finder corpus is empty (0 of 6 named precedents in vault). Without ingestion, precedent-finder can never fire. Today's manual ingestion of 3 jobs (Bridge / Water Features / Homestead) took ~hours; codified = 1 invocation per batch.
**Owns:** read external precedent sources (Hus's vault `01 - Jobs/`, shared Drive folder, Rates Build Up xlsx) → digest each job to `00-brief.md` shape → mirror to `Operations/Jobs/{Completed,Ongoing,Upcoming}/{job}/` per outcome status → tag `[source: friend-vault]` or `[source: shared-drive]`.
**Trigger:** "import precedents from {source}" or "import precedent for job {name}"
**Status:** pending

### lfo-sanity-check-driver

**Why:** Phase 4 orphan. Currently inlined in `lfo-bid-lifecycle` SKILL.md:104-111.
**Owns:** envelope unquarantine + comparison computation + override-capture session prompt drafting + methodology-proposal queueing.
**Trigger:** Phase 3 sealed → auto-invoke
**Status:** pending

### lfo-submission-gate

**Why:** Phase 6 orphan.
**Owns:** capture Rocky "send" authorisation + timestamp; draft submission-build prompts per Q-F4; escalate L2-fail per CLAUDE.md §3.2.
**Trigger:** Rocky-typed "send" or equivalent explicit go
**Status:** pending

### lfo-bcs-rotate-and-sweep

**Why:** Path-D recovery (session-80b1f893 line 22-35) will recur every BCS bid until tooled.
**Owns:** rotate handoff files; archive predecessor blocks; strip BCS metadata from all worker-readable files; write whitelist-only worker prompt.
**Trigger:** auto-invoke on second-attempt-after-breach OR on Rocky-typed "rotate handoff"
**Status:** pending

### lfo-job-bootstrap

**Why:** Per-bid scaffolding; recurs on every bid; currently inlined.
**Owns:** create `Operations/Jobs/Upcoming/{job_no} - {name}/` skeleton + per-job CLAUDE.md + 00-brief.md + 11-folder canonical structure; register in state.json.
**Trigger:** invoked at start of `lfo-bid-lifecycle` Phase 1
**Status:** pending

### lfo-rfi-extract

**Why:** Worker produced 9 RFIs on 2627 (session-80b1f893:99-109) with no formalisation. Currently free-form.
**Owns:** capture RFI list from worker output → prioritise by impact → draft send-to-HC email → track response status in state.
**Trigger:** Phase 3 step 3 (bid-prep) output review OR Rocky-typed "process RFIs"
**Status:** pending

### lfo-job-folder-diff

**Why:** Today's manual diff work (zip vs vault) showed the gap. Useful but not blocking the daily bid flow.
**Owns:** structural diff against external comparator (Liam quote, Hus version, prior zip snapshot) → variance report.
**Trigger:** Rocky-typed "diff job folder against {path}"
**Status:** pending

### lfo-gap-analyse — RECURRING SELF-AUDIT

**Why:** Today's audit found 18 codifiable gaps in one pass. Repeating this monthly OR after every 3 bids will surface new gaps as the precedent pool grows.
**Owns:** spawn 3 parallel subagents (workflow auditor / standing-context completeness / skill coverage reviewer), consolidate findings, queue proposals to this file.
**Trigger:** post-Phase-7 in `lfo-bid-lifecycle` (configurable cadence: every-bid / every-3-bids / monthly), OR Rocky-typed "run gap analysis"
**Status:** pending — IF Rocky says yes, will be built first as the closure on Option C

---

## Workflow / lifecycle refactor proposals (2026-05-10)

### Refactor lfo-bid-lifecycle Phase 3 to delegate to lfo-prompt-pricing

**Source:** Skill coverage audit
**Target:** `Codebase/lfcs-orchestrator/skills/lfo-bid-lifecycle/SKILL.md` lines 80-94
**Proposed change:** Phase 3 reduces to "invoke `lfo-prompt-pricing` with step={N}" calls (no template content). Single source of truth for prompt content lives in lfo-prompt-pricing.
**Status:** pending

### Update lfo-prompt-pricing description for autonomous-daemon mode

**Source:** Skill coverage audit
**Target:** `Codebase/lfcs-orchestrator/skills/lfo-prompt-pricing/SKILL.md` line 3 (description)
**Proposed change:** add explicit coverage of autonomous-daemon mode (handoff bus path, not Rocky-paste path).
**Status:** pending

### Phase 3.5 envelope build runs concurrent with Phase 3 worker

**Source:** Workflow audit + lesson-2026-05-08-bid-lifecycle.md:31
**Target:** `lfo-bid-lifecycle` Phase 3 + 3.5 sequencing
**Proposed change:** kick off `lfo-reverse-engineer-budget` concurrently with Phase 3 worker spawn (not after Phase 3 sealed). Saves ~10-15 min per bid.
**Status:** pending

### Daemon poll interval 30s → 10s during burst phases

**Source:** lesson-2026-05-08-notification-chase.md:38-39
**Target:** `daemon/lfo_handoff_daemon.py`
**Proposed change:** drop POLL_INTERVAL_SECONDS to 10 during `state.json.current_phase` ∈ {phase-3-worker, phase-4-sanity}; default 30s otherwise.
**Status:** pending

---

## Format template

```markdown
### {ID} — {short title}

**Source:** session {uuid} on {date}, job {job_no}
**Target file:** {path}
**Proposed change:** {concrete diff or insertion}
**Evidence:** {link to override row(s) / blind-comparison row(s) / Rocky-quoted statement}
**Status:** pending
```
