---
name: siteops-itp-generate
description: Generate ITP (Inspection & Test Plan) markdown for a given pour or element from TfNSW R-series spec hold-points + LFCS conventions. Output goes to job's 07c - Inspection Records.
status: live
created: 2026-05-06
created_by: claude-code-opsman
user_invocable: true
related:
  - "[[../_README]]"
  - "[[../_Log]]"
  - "[[../../../11_OpsMan_LFCS/Operations/lfcs-standards/specs/TfNSW-R11-Ed5Rev8-PeakhurstOct2024-summary]]"
---

# SKILL — siteops-itp-generate

## Purpose

Generate an Inspection & Test Plan (ITP) for a specific pour / element. ITPs codify hold-points, witness-points, and inspection sign-off rows as required by TfNSW R-series specs (R11 stormwater, R53 bridge concrete, etc.) and LFCS internal QA. Currently produced inline per pour — this skill makes the structure consistent and the hold-point list authoritative.

## Trigger

- "Generate ITP for [pour-id]" / "Build ITP for [element]"
- "ITP — [job] [zone] [pour date]"
- Auto-trigger from pre-pour checklist when an ITP doesn't exist for the upcoming pour

## Inputs

- **Job ID** — required
- **Element type** — required: one of `slab` / `wall` / `column` / `pit` / `kerb` / `bridge-deck` / `parapet` / `pile-cap` / etc. (canonical list in `lfcs-standards/element-taxonomy.md`)
- **Spec reference** — required: e.g. `R11`, `R53`, `B80`, `AS3600` (drives which hold-points apply)
- **Pour ID / element ID** — required (e.g. "Pit-EXA01A-08-pour-1", "Bridge-Deck-Span-2")
- **Planned pour date** — optional (used to seed inspection-row dates)

## Behaviour

1. Resolve job folder.
2. Read `lfcs-standards/specs/<spec>-summary.md` for the relevant spec hold-points (e.g. R11 has hold points at: pre-pour checklist, conformance certificate sighting, pour record, post-pour curing).
3. Read `lfcs-standards/element-taxonomy.md` to confirm canonical element name.
4. Generate ITP markdown with sections: header, hold-points, witness-points, inspection rows (one per hold-point per element instance).
5. Write to:
   ```
   Jobs/<status>/<job>/07 - Site Documents/07c - Inspection Records/ITP-<element-id>-{YYYY-MM-DD}.md
   ```
6. Append a row to `07c - Inspection Records/_inspection-log.md` referencing the new ITP.
7. Final step: emit log-event:
   ```bash
   bash scripts/log-event.sh "<agent-id>" "skill_run" "siteops-itp-generate" "ok" "<job> ITP for <element-id>"
   ```

## Output format

```markdown
---
title: ITP — <element-id> — <Job>
job: <job>
element: <element-type>
spec_ref: <R11 | R53 | B80 | AS3600>
created: YYYY-MM-DD
status: pending-pour | post-pour | signed-off
---

# ITP — <element-id>

**Job:** <job> <client> <site>
**Element:** <element-type> per <spec-ref>
**Planned pour date:** YYYY-MM-DD
**Pour supervisor:** Rocky McLoughlin
**Engineer (HC / consultant):** <name> — <mobile>

## Pre-pour hold-points

| # | Hold point | Required by | Status | Sighted by | Date |
|---|---|---|---|---|---|
| 1 | Formwork dimensions + plumb | <spec> | open | | |
| 2 | Reinforcement placement + cover | <spec> | open | | |
| 3 | Embeds (anchors, conduits, dowels) | <spec> | open | | |
| 4 | Conformance certificates (concrete + reo) | <spec> | open | | |
| 5 | Pre-pour engineer sign-off | <spec> | open | | |

## Pour-day inspection

| # | Item | Status | Recorded by | Time |
|---|---|---|---|---|
| 1 | Concrete delivery docket # | | | |
| 2 | Slump test result | | | |
| 3 | Test cylinders cast (count) | | | |
| 4 | Pour start / finish times | | | |
| 5 | Weather conditions (temp, rain, wind) | | | |

## Post-pour

| # | Item | Status | Recorded by | Date |
|---|---|---|---|---|
| 1 | Curing started (method, duration) | | | |
| 2 | Strip date achieved (per spec) | | | |
| 3 | 7-day strength test | | | |
| 4 | 28-day strength test | | | |
| 5 | Engineer post-pour sign-off | | | |

## Notes / non-conformances

(Add as encountered. Each non-conformance triggers a defect entry in `11a - Defects Register/_REGISTER.md`.)

## Sign-off

- Pre-pour signed off by (HC engineer / consultant): _____________ Date: _________
- Post-pour signed off: _____________ Date: _________
```

## Hard rules

- **Hold-points come from spec, not memory.** Always re-read the spec summary file. If summary missing, abort with "Run lfcs-spec-summarise first for <spec>."
- **Element name from taxonomy.** If element-type isn't in `lfcs-standards/element-taxonomy.md`, surface to Rocky for a taxonomy update — don't invent a new element name.
- **No fake sign-offs.** Status fields stay open until the actual person signs in person.
- **Append-only on `_inspection-log.md`** per AI Team Protocol.
- **Critical pours** (bridge deck, retaining wall > 3m, Class S concrete): an ITP MUST exist before pour-day. Skill aborts if pour is < 24h away and ITP doesn't exist + `--force` flag not given.

## Dependencies

- `lfcs-standards/specs/<spec>-summary.md` (hold-point source)
- `lfcs-standards/element-taxonomy.md` (canonical element vocab)
- `lfcs-standards/folder-spec.md` (output destination — `07c`)
- Job's `00-brief.md` (engineer contacts)

## Failure modes

| Failure | Detection | Recovery |
|---|---|---|
| Spec summary missing | Pre-check `lfcs-standards/specs/<spec>-summary.md` | Abort with redirect to `lfcs-spec-summarise` |
| Element type not in taxonomy | Pre-check element-taxonomy.md | Surface to Rocky; await taxonomy update before proceeding |
| Output file already exists | Pre-check destination path | Ask: "Regenerate or merge?" — never silently overwrite |
| Pour < 24h away + no ITP | Time check vs planned pour date | Abort unless `--force`; surface as critical to Rocky |

## Idempotency

Running on same pour-id + same date overwrites with confirmation. Running on same pour-id + new date creates a new dated ITP (e.g. revised after pre-pour walk).
