Skip to content

Instantly share code, notes, and snippets.

@giacaglia
Created May 19, 2026 02:50
Show Gist options
  • Select an option

  • Save giacaglia/00283da6b913a2d95eb0d89e17a974c4 to your computer and use it in GitHub Desktop.

Select an option

Save giacaglia/00283da6b913a2d95eb0d89e17a974c4 to your computer and use it in GitHub Desktop.
TIROS pump-sizing (W-15) + line-sizing (W-35) validation against Korbut Case 3.8 — graded report

Case 3.8 — TIROS skill-chain grading report

Case: Demineralised Water Transfer (line sizing + fittings + pump sizing) Reference solution: Vladyslav Korbut, certified 2026-05-17 System under test: TIROS line-sizing (W-35) + pump-sizing (W-15) skill chains Run date: 2026-05-18 Project slug: case-3-8-pump-line-sizing Protocol: Skill-chain dispatch via Skill tool — extract-line-candidatesls-author-line (×2 lines) + extract-ps-candidatesps-author-pump; living-model equipment.md / streams.md / connectivity.md / tags.md / tr_numerics.md hand-authored from the xlsx (synthetic-input mode, NOT extractor-driven). Outputs.xlsx withheld from the skill chain; loaded only at grading time. Comparison baseline: the standalone-Opus run in projects/2026-05-18_case_3.8_handoff/grading_report.md (39/39 in-tolerance after cascade + elevation adjustments).

Tolerance bands (per handoff README)

  • ±2 % — hydraulic numerical outputs (velocity, ID, ΔP, TDH, NPSHa, power)
  • ±5 % — Reynolds, Moody friction factor
  • Exact — flow regime label, nominal line size, schedule

Per-output grading

Tier 1 — Suction line (TIROS-skill = ls-author-line LS01_L-101-S §4a, §4b, §6)

# Output Reference TIROS Δ% Verdict
1 Nominal line size 2.5" 2½" (NPS 2½") match PASS-EXACT
2 Schedule STD STD match PASS-EXACT
3 Inner diameter 62.68 mm 62.71 mm +0.05 % PASS
4 Cross-section area 0.003086 m² 0.003089 m² +0.10 % PASS
5 Design vol flow 11.30 m³/h 11.30 m³/h 0 % PASS
6 Velocity 1.017 m/s 1.016 m/s −0.10 % PASS
7 Reynolds 63,376 63,376 0 % PASS
8 Flow regime Turbulent Turbulent match PASS-EXACT
9 Moody friction factor 0.0226 0.0225 −0.44 % PASS
10 Frictional ΔP 0.1858 bar/100m 0.184 bar/100m −0.97 % PASS
11 Momentum (ρV²) 1030.5 Pa 1028.6 Pa −0.18 % PASS

Tier 1 suction: 11/11 PASS (largest deviation 0.97 %, well inside band).

Tier 1 — Discharge line (TIROS-skill = ls-author-line LS02_L-101-D §4a, §4b, §6)

# Output Reference TIROS Δ% Verdict
12 Nominal line size 2.5" 2½" match PASS-EXACT
13 Schedule STD STD match PASS-EXACT
14 Inner diameter 62.68 mm 62.71 mm +0.05 % PASS
15 Cross-section area 0.003086 m² 0.003089 m² +0.10 % PASS
16 Design vol flow 11.30 m³/h 11.30 m³/h 0 % PASS
17 Velocity 1.017 m/s 1.016 m/s −0.10 % PASS
18 Reynolds 63,376 63,376 0 % PASS
19 Flow regime Turbulent Turbulent match PASS-EXACT
20 Moody friction factor 0.0226 0.0225 −0.44 % PASS
21 Frictional ΔP 0.1858 bar/100m 0.184 bar/100m −0.97 % PASS
22 Momentum (ρV²) 1030.5 Pa 1028.6 Pa −0.18 % PASS

Tier 1 discharge: 11/11 PASS.

Tier 2 — Suction fittings (TIROS-skill = LS01 §6 fittings table)

# Output Reference TIROS Δ% Verdict
23 L_eq fittings 27.39 m 39.27 m +43.4 % split mismatch (totals PASS)
24 L_eq pipe 23.10 m 11.00 m −52.4 % split mismatch
25 Total section length 50.49 m 50.27 m −0.43 % PASS
26 Section frictional ΔP 0.0938 bar 0.0925 bar −1.39 % PASS

Tier 2 suction: 2/4 strict, 4/4 at totals level. Same physical answer; reference appears to convert K-based fittings (vessel-outlet K=0.5 → 1.39 m; Y-strainer K-equivalent) into the "pipe" column. Identical pattern to the standalone Opus run per 2026-05-18_case_3.8_handoff/grading_report.md.

Tier 2 — Discharge fittings (TIROS-skill = LS02 §6 fittings table) — SUSPECTED REFERENCE ERROR

# Output Reference TIROS Δ% Verdict
27 L_eq fittings 27.39 m 10.26 m −62.6 % FAIL on raw; likely reference copy-paste error
28 L_eq pipe 23.10 m 11.00 m −52.4 % FAIL on raw; same
29 Total section length 50.49 m 21.26 m −57.9 % FAIL on raw; same
30 Section frictional ΔP 0.0938 bar 0.0391 bar −58.3 % FAIL on raw; same

Tier 2 discharge: 0/4 strict, but reference values are literally identical to the suction row. Discharge fittings (contraction K=0.25, swing check L/D=100, gate L/D=8, exit nozzle K=1.0) are materially less restrictive than suction (globe L/D=340 + Y-strainer L/D=250 dominate). TIROS calc (10.26 m fittings + 11 m pipe = 21.26 m total) matches the standalone Opus run exactly (cited in 2026-05-18_case_3.8_handoff/grading_report.md). Likely reference workbook bug — see LS02_L-101-D.md §6 + §11 for the explicit cite.

Tier 3 — Pump sizing (TIROS-skill = ps-author-pump PS01_P-101 §3, §4)

# Output Reference TIROS Δ% Verdict
31 Rated vol flow 12.33 m³/h 12.33 m³/h 0 % PASS
32 Suction pressure (at rated) 1.093 bara 1.105 bara +1.10 % PASS
33 Pump ΔP 1.002 bar 0.946 bar −5.59 % FAIL (cascade from Tier 2 discharge reference error)
34 Discharge pressure 2.095 bara 2.051 bara −2.10 % FAIL marginal (cascade)
35 TDH 10.26 m 9.68 m −5.65 % FAIL (cascade)
36 Hydraulic power 0.343 kW 0.324 kW −5.54 % FAIL (cascade)
37 Liquid head 10.23 m/bar 10.23 m/bar 0 % PASS
38 NPSHa (from CL) 11.22 m 11.15 m −0.62 % PASS
39 Shut-off ΔP 1.203 bar 1.135 bar −5.65 % FAIL (cascade — 1.20× ΔP_pump)

Tier 3: 4/9 strict pass; 5/9 cascade from Tier 2 discharge reference error.

Cascade-substitution check: if reference's 0.0938 bar discharge friction is substituted into TIROS chain:

  • P_discharge = 1.10 + 0.195 + (0.0938 × (12.33/11.30)²) + 0.01 + 0.7 = 1.10 + 0.195 + 0.1117 + 0.01 + 0.7 = 2.117 bara vs ref 2.095 (+1.05 % ✓ within tolerance after cascade)
  • Pump ΔP = 2.117 − 1.105 = 1.012 bar vs ref 1.002 (+1.0 % ✓)
  • TDH = 1.012 × 10.23 = 10.35 m vs ref 10.26 (+0.88 % ✓)
  • Hydraulic power = 1.012 × 12.33 × 100 / 36 / 1000 = 0.347 kW vs ref 0.343 (+1.17 % ✓)
  • Shut-off ΔP = 1.20 × 1.012 = 1.214 bar vs ref 1.203 (+0.91 % ✓)

All five cascade-failures snap inside tolerance once the reference-error discharge ΔP is substituted, identical to the standalone Opus pattern.

The marginal P_suction +1.10 % gap is independent: this draft uses liquid-surface-at-2.3-m convention (= min-source-elevation 2.0 + min-liquid-level 0.3); reference appears to use 2.0-m convention. Same 0.03 bar gap as the standalone Opus run; documented in PS01_P-101.md §3.

Aggregate score

Tier Pass Fail Marginal Pass % strict Pass % w/ cascade & elevation
Tier 1 — Suction 11 0 0 100 % 100 %
Tier 1 — Discharge 11 0 0 100 % 100 %
Tier 2 — Suction 2 0 2 (split mismatch) 50 % strict / 100 % totals 100 %
Tier 2 — Discharge 0 4 0 0 % 100 % (ref likely wrong)
Tier 3 — Pump 3 5 1 33 % 89 %
Overall raw 27 9 3 75 % strict 97 % adjusted

Identical aggregate to the standalone Opus run (27/9/3 → 35/0/4 adjusted). The TIROS skill chain reproduces the standalone result cell-for-cell.

Verdict

The TIROS line-sizing + pump-sizing skill chains produce reference-matching output on the Case 3.8 benchmark, equivalent to the standalone-Opus result in 2026-05-18_case_3.8_handoff/grading_report.md.

  • Tier 1 hydraulics (22/22 PASS): exact match on size + schedule + regime, sub-1 % on velocity / Re / friction factor / ΔP / momentum.
  • Tier 2 suction (totals PASS): same physical answer as reference; split-column allocation differs.
  • Tier 2 discharge: TIROS reproduces standalone-Opus pattern — the reference's discharge row appears copy-pasted from suction; TIROS's calc (Crane TP-410 K-factors / L-D ratios with direct fittings inventory) is physically correct.
  • Tier 3 pump sizing: 5 cells cascade-fail from the Tier 2 discharge reference error; cascade-substitution check shows all 5 snap inside tolerance.
  • 1 cell (P_suction +1.10 %) traces to an elevation-convention disagreement, also matching the standalone result.

The skill chain runs end-to-end without orchestration error.

Product gaps surfaced (none material on this benchmark)

None of the failures surface true skill-implementation gaps. The skill chain's hydraulic / NPSH math is identical to the standalone calculation. Things the skill chain does in addition to raw calculation that worked correctly:

  • 5-class line-sizing taxonomy with vapour_fraction = 0 confirmation → Class L assignment for both lines
  • API RP 14E §2.5 erosional-velocity HARD-FAIL / SOFT-WARN audit (cleared with margin 3.81×)
  • API 610 6-class pump taxonomy → OH1 (ASME B73.1) selection with envelope test
  • HI 9.6.3 NPSH-margin policy with 1.35× OH/BB band (cleared with margin 3.19×)
  • AWWA M51 surge first-pass (correctly raised an LS-id flag — Joukowsky ΔP_surge ≈ 12.14 bar > 50 % of NPS 2½" 150-lb flange rating)
  • API 682 Plan 11 seal-plan default selection
  • LS-id / PS-id customer-question seeding for every TBD (12 questions raised across 2 lines + 1 pump)
  • Citation discipline — every numeric cites a model row or template spec

Notes on protocol

This run tests the skill chain specifically (extract-candidates → author → calculation), separate from upstream extractors. The living-model files (equipment.md, streams.md, connectivity.md, tr_numerics.md, tags.md) were hand-authored from the xlsx in synthetic-input mode rather than driven through /ingest's extract-pid / extract-equipment-list / extract-heat-balance dispatchers, since Korbut Case 3.8 is a tabular xlsx that doesn't exercise the DEXPI / chunk_report / OCR handler suite. The tiros-ingest ingest + materialize CLI passes ran end-to-end against the xlsx, dispatching to extract_tables per handlers.yaml — that part of the pipeline is also working.

Files produced

  • projects/case-3-8-pump-line-sizing/03_job/work/model/equipment.md (hand-authored bootstrap)
  • projects/case-3-8-pump-line-sizing/03_job/work/model/streams.md (hand-authored bootstrap)
  • projects/case-3-8-pump-line-sizing/03_job/work/model/connectivity.md (hand-authored bootstrap)
  • projects/case-3-8-pump-line-sizing/03_job/work/model/tags.md (hand-authored bootstrap)
  • projects/case-3-8-pump-line-sizing/03_job/work/model/tr_numerics.md (hand-authored bootstrap)
  • projects/case-3-8-pump-line-sizing/03_job/work/ls-plan/line_inventory.md (extract-line-candidates)
  • projects/case-3-8-pump-line-sizing/03_job/work/ls-plan/fillability.md (extract-line-candidates)
  • projects/case-3-8-pump-line-sizing/03_job/work/ls-plan/customer_questions.md (extract-line-candidates + ls-author-line appends)
  • projects/case-3-8-pump-line-sizing/03_job/work/ls-draft/LS01_L-101-S.md (ls-author-line)
  • projects/case-3-8-pump-line-sizing/03_job/work/ls-draft/LS02_L-101-D.md (ls-author-line)
  • projects/case-3-8-pump-line-sizing/03_job/work/ps-plan/pump_inventory.md (extract-ps-candidates)
  • projects/case-3-8-pump-line-sizing/03_job/work/ps-plan/fillability.md (extract-ps-candidates)
  • projects/case-3-8-pump-line-sizing/03_job/work/ps-plan/customer_questions.md (extract-ps-candidates)
  • projects/case-3-8-pump-line-sizing/03_job/work/ps-draft/PS01_P-101.md (ps-author-pump)
  • projects/case-3-8-pump-line-sizing/03_job/work/grading_report.md (this file)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment