Ketron Roofing — Internal

Ferris Re-Roof: Pricing Provenance

Cost basis, sensitivity, and open items behind the customer proposal. Mitch's copy only — not for customer distribution
Generated 2026-08-10
out/anna-ferris/quote.json
costs/cost-table.json
Restated from quote.json for reference only. The customer proposal (Ketron-Roofing-Proposal-Ferris-v5.pdf) is built directly from this file; nothing here changes it.
Main residence, 24ga
$108,900.00
Main residence, 22ga
$121,400.00
Cabins alternate, 24ga
$29,200.00
Cabins alternate, 22ga
$32,500.00
Chimney counterflashing
$1,950.00
Every costs/cost-table.json entry used by the anna-ferris job (job-specific rows plus shared engine constants and cross-job gates). 41 of 68 total table rows apply to this job; the rest are gary-schmidt-only and excluded.
VERIFIED31PROXY8QUOTE PENDING1NOT FOUND1
Engine constants 7
Item
Value
Unit
Status
Source date
Notes
oh_rate
0.2630
fraction of revenue
VERIFIED
2026-08-07
OH_RATE. 'Constants verified by read (pricing-scout, 2026-08-07)' per FERRIS-SOURCE-TABLE.md. engine/stone_pricing.py's price_from_direct_costs ships a DIFFERENT bare default (overhead_rate=0.25) and ferris_pricing.py's own call sites do not override it. quote.py explicitly passes this sourced 0.263 value for the Ferris job so net_margin/overhead_rate reproduce the reference pricing-summary.json exactly. See evidence/DISCREPANCIES.md.
net_profit_target
0.0800
fraction of revenue
VERIFIED
2026-08-07
NET_PROFIT_TARGET, verified-by-read 2026-08-07. engine/stone_pricing.py's bare default is 0.15; quote.py passes this sourced 0.08 explicitly for the Ferris job. See evidence/DISCREPANCIES.md.
labor_rate_hourly
65
USD/hr/man
VERIFIED
2026-08-07
LABOR_RATE_HOURLY, verified-by-read 2026-08-07; also independently corroborated as the Labor-table 'Crew rate' row ($65/hr per man, 2026-06-05, stone_pricing.py + constitutional rule) and as the literal $65/hr used to build both Ferris's MAN_DAY=$520 (1 man x 8hr) and Gary's crew_day=$1,040 (2 men x 8hr).
idaho_material_tax_rate
0.0600
fraction of taxed materials
VERIFIED
2026-06-05
IDAHO_MATERIAL_TAX_RATE, stone_pricing.py constant per FERRIS-SOURCE-TABLE.md 'Constants verified by read' line and the Labor/Material table's 'Idaho materials tax' row (2026-06-05). Used identically by both Ferris (TAX=0.06 in ferris_pricing.py) and Gary (idaho_sales_tax: 0.06 in calculate_pricing.py rates).
minimum_charge
795
USD
VERIFIED
2026-08-07
MINIMUM_CHARGE, verified-by-read 2026-08-07. Appears in both Ferris's and Gary's stone_pricing 'minimums.minimum_charge' output field (not itself a binding constraint on any of the five priced Ferris options or Gary's provisional candidate, since all clear it by a wide margin).
replacement_gross_floor_generic
0.4000
fraction of revenue (GM)
VERIFIED
2026-08-07
Generic Stone Method replacement gross floor, verified-by-read 2026-08-07. FERRIS-SOURCE-TABLE.md flags this is SUPERSEDED for this job by the metal_t2 product-tier doctrine (floor 0.60) under 'Margin doctrine (GOVERNING for this job)'. Not applied to any Ferris option; carried for completeness only.
replacement_gross_target_generic
0.5000
fraction of revenue (GM)
VERIFIED
2026-08-07
Generic Stone Method replacement gross target, verified-by-read 2026-08-07. Superseded for Ferris by the metal_t2 doctrine target range 0.65-0.70 (see metal_t2_gm_floor / metal_t2_gm_target_range entries). Not applied to any Ferris option; carried for completeness only.
Margin doctrine (product tier / difficulty) 6
Item
Value
Unit
Status
Source date
Notes
metal_t2_product_tier_mapping
AEP Span-Lok hp 2" mechanical seam = metal_t2
product-tier classification
VERIFIED
2026-07-21
difficulty_pricing.py PRODUCT_GM_DOCTRINE (mitch-directed 2026-07-21, Jones run); restated in 2026-08-07 Mac handoff README. Skill copy and handoff package copy verified byte-identical 2026-08-07 per FERRIS-SOURCE-TABLE.md.
metal_t2_gm_floor
0.6000
fraction of revenue (GM)
VERIFIED
2026-07-21
PRODUCT_GM_DOCTRINE['metal_t2']['floor'] in engine/difficulty_pricing.py (byte-identical to the FERRIS-SOURCE-TABLE.md-cited copy per its freshness audit). Read via gm_bounds_for_product('metal_t2', tier) as MAIN_FLOOR / CAB_FLOOR in ferris_pricing.py.
metal_t2_gm_target_range
0.65 - 0.7
fraction of revenue (GM), [low,high]
VERIFIED
2026-07-21
PRODUCT_GM_DOCTRINE['metal_t2']['target_range'] in engine/difficulty_pricing.py. Position inside the range is set by job difficulty tier via gm_bounds_for_product: main house scores T2_standard -> target 0.65 + (0.70-0.65)*(1/3) = 0.666667; cabins score T1_simple -> target 0.65 (bottom of range).
main_difficulty_score
37
difficulty score (0-100)
VERIFIED
2026-08-07
Main house: 6:12 predominant (+10), 1 story (+5), 6 facets (+10), interfaces 19'1" step (+3) + 1 chimney (+4) + 2 pipe jacks (+2) + 46'5" valley (+3) = 12 -> score 37 -> tier T2_standard -> GM target 0.6667. Inputs from Roofr 2026-08-05 + CompanyCam photos, verdict KNOW.
cabins_difficulty_score
20
difficulty score (0-100)
VERIFIED
2026-08-07
Cabins: 6:12 (+10), 1 story (+5), 2 facets each (+5), no interfaces (0) -> score 20 -> tier T1_simple -> GM target 0.65 (bottom of range). Source: GAF QuickMeasure 5437438, verdict KNOW.
gauge_22_gm_escalation_step
0.0150
fraction of revenue (GM), additive
PROXY
2026-08-07
22ga carries +0.015 GM over the 24ga target ('heavier gauge never sells thinner'). FERRIS-SOURCE-TABLE.md verdict is explicitly 'session-decided, flagged' (a policy call made in-session, not a dated external document) -- tagged PROXY here because it is a derived/assigned figure, not read off a priced sheet.
Material unit costs 20
Item
Value
Unit
Status
Source date
Notes
panel_24ga_span_lok_hp_basis
4.99
USD/LF
PROXY
2026-03-17
ASC Design Span 16in 24G DuraTech XL (PVDF), $4.99/LF ($374.24/SQ), from pricing-data-extracted.md (ASC/ABC extract). Tagged PROXY (per task instruction) because AEP Span-Lok hp itself is quote-only (web lane, 2026-08-07); ASC Design Span is 'the nearest priced cousin' (same ASC Profiles family), not a direct Span-Lok hp quote. Source table's own verdict column says CURRENT-but-aging (about the ASC sheet's freshness); this table elevates it to PROXY because of the product substitution.
panel_22ga_ratio
1.2
multiplier on 24ga panel price
PROXY
2026-08-07
22ga panel = 24ga $4.99/LF x 1.20 = $5.99/LF. No 22ga dollar price exists locally or publicly. Ratio basis: McElroy Metal (manufacturer) 2020-10-13, direction confirmed Sheffield Metals 2025-02-21; ratio itself fetched 2026-08-07. Verdict DERIVED-PROXY in source table.
mech_lock_clips
1.03
USD/ea (~1 per LF)
VERIFIED
2026-04-16
Ibex ML clips, reroof-patterns.md. Verdict CURRENT.
seam_butyl_hot_melt
0.2000
USD/LF
VERIFIED
2026-04-16
Ibex, reroof-patterns.md. Verdict CURRENT.
seaming_machine_rental
350
USD/job (lot)
VERIFIED
2026-03-17
Collins budget planner. Verdict CURRENT-but-aging ('only dated figure'); still a dated first-party sheet, so tagged VERIFIED rather than PROXY.
deck_air_vapor_membrane
97
USD/roll (2 SQ = $48.50/SQ)
VERIFIED
2026-04-16
Malarkey 401 SA HT class, reroof-patterns.md; ABC Hayden catalog $48.50/SQ agrees (2026-03-05). Verdict CURRENT.
slip_sheet_underlayment
28.43
USD/SQ
VERIFIED
2026-03-05
Titanium UDL-30 class over nail-base, ABC Hayden catalog. Verdict CURRENT-but-aging; dated first-party sheet, tagged VERIFIED.
nail_base_polyiso
4
USD/sqft
PROXY
2026-08-07
Vented nail-base polyiso, 3in foam + vent + nailing surface. THE LARGEST PROXY in the job (task-flagged). DERIVED: foam-only proxy $0.72/sqft-inch x 3in = $2.16 (Planner5D/RoofCalc 2024-2025 guides) + wood nailing surface $1.31/sqft (Collins plywood $42/sheet, 2026-03-17) + factory vent-spacer/assembly premium $0.53 = $4.00/sqft. Product is quote-only everywhere public (QXO/Dealers Choice login-gated, verified 2026-08-07). LOUD FLAG per source table and per pricing-proof.md.
nail_base_fasteners
0.3000
USD/ea (40/panel allowance)
PROXY
2026-08-05
Heavy through-insulation fasteners. Allowance; Atlas pattern 30+/panel is design output, but the unit PRICE is DERIVED-PROXY: 'no dated heavy-fastener row exists; Ibex 1in screws $0.077 too short to substitute.' Atlas doc itself is undated; 2026-08-05 is the fetch/index date, not a price date.
ridge_trim_custom_depth
36.08
USD/pc (10ft4)
PROXY
2026-04-16
Ridge cap, custom insulation-depth profile. Derived: Ibex base $24.05/pc (2026-04-16, reroof-patterns.md) x 1.5 custom-depth uplift = $36.08. Uplift basis: 'Campos custom precedent x1.05 was gauge-like-for-like; deeper profiles need more break time' -- the 1.5x multiplier itself is not independently dated, flagged in source table.
drip_edge_custom_depth
11.49
USD/pc (10ft4)
PROXY
2026-04-16
Eave/rake drip edge, custom depth. Derived: Ibex base $7.66/pc (2026-04-16) x 1.5 custom-depth uplift (same basis/flag as ridge_trim_custom_depth) = $11.49.
w_valley_24in
34.5
USD/pc (8ft)
VERIFIED
2026-03-05
ABC Hayden catalog (Award 26ga; 24ga fabrication uplift inside trim uplift). Verdict CURRENT-but-aging; dated first-party sheet, tagged VERIFIED.
endwall_sidewall_flashing
18.95
USD/pc (10ft4)
VERIFIED
2026-04-16
Ibex, reroof-patterns.md. Verdict CURRENT.
snow_retention_materials
9
USD/LF
PROXY
2026-08-07
Seam-clamped snow retention (S-5 ColorGard class, materials only). S-5 manufacturer knowledge-base materials-only range $4.51-$13.79/LF; midpoint carried pending engineered layout. Verdict DERIVED-PROXY (engineering-pending), flagged.
pipe_boots_dektite_ht
31
USD/pc
VERIFIED
2026-03-05
Dektite HT class, ABC Hayden catalog. Verdict CURRENT-but-aging; dated first-party sheet, tagged VERIFIED.
standing_seam_flatbed_delivery
650
USD/job (lot)
VERIFIED
2026-04-16
Ibex, reroof-patterns.md. Verdict CURRENT.
dumpster
583
USD/job (lot)
VERIFIED
2026-03-17
Williams/Collins evidence, pricing-data-extracted.md. Verdict CURRENT-but-aging; dated first-party sheet, tagged VERIFIED.
permit_kootenai_reroof
375
USD/job (lot)
VERIFIED
2026-03-17
pricing-data-extracted.md. Verdict CURRENT-but-aging; tagged VERIFIED.
metal_america_apr10_increase
5% on 26/29ga only; 24ga unchanged
price adjustment
VERIFIED
2026-04-10
reference_material_pricing.md (Renee Pollard email 2026-03-23), effective 2026-04-10. NOT APPLIED -- no Metal America 26/29ga rows used in this build. Carried for completeness only ('every other line the source table carries').
metal_america_jun15_increase
24ga Kynar +3%, 26ga SMP +9%, 29ga SMP +7%; crating $50/$85/$100
price adjustment
VERIFIED
2026-06-15
Schmidt-lane freshness intel relayed by lead, 2026-08-07; effective 2026-06-15. Supplier-specific; NOT APPLIED -- no Metal America rows used in this build. Carried as a MARKET-MOVED flag on the ASC 24ga panel row (the current ASC price is unverified and could be similarly higher); a dated-basis flag, not an applied escalation.
Labor 4
Item
Value
Unit
Status
Source date
Notes
crew_rate_man_day
520
USD/man-day (1 man x 8hr x $65/hr)
VERIFIED
2026-06-05
$65/hr per man, 2-man crew context; MAN_DAY constant in ferris_pricing.py is the PER-PERSON day rate ($65 x 8hr = $520); 'man_days' quantities on each option (30.5 / 32.5 / 8.0 / 8.5 / 1.0) are total person-days, not calendar days. Source: stone_pricing.py + constitutional rule, 2026-06-05.
man_day_figures_400_dollar
400
USD/man-day (SUPERSEDED)
VERIFIED
NOT_FOUND
Williams/Collins planner man-day figures. Verdict SUPERSEDED by the $65/hr crew rate above -- DEAD, NOT used in current pricing. Listed only because the source table carries it; source_date is NOT_FOUND because the table gives no date for this dead figure (its row reads '-').
mech_seam_labor_factor
1.3
multiplier vs snap-lock labor
VERIFIED
2026-04-16
reroof-patterns.md. Verdict CURRENT. Informational: ferris_pricing.py does not apply this as an explicit multiplier to a snap-lock baseline -- the 30.5/32.5/8.0/8.5/1.0 man-day figures are hand-set per-job values anchored directly to the Collins v22.5 man-day precedent below, which already reflects mechanical-seam + nail-base labor intensity.
collins_v22_5_man_day_anchor
27
man-days for 14.3 SQ 24ga exposed-fastener re-roof, no insulation layer
VERIFIED
2026-05-21
ENGINEER-v22.5-pricing.md. Verdict CURRENT (newest real ledger). Ferris labor model (30.5 md 24ga main / 32.5 md 22ga / 8 md cabins / 1 md counterflashing at $520/man-day) is anchored to this figure, adding the nail-base layer + mechanical seam on top per pricing-proof.md Assumptions.
Not-priced gates / change-order rates 4
Item
Value
Unit
Status
Source date
Notes
gutters_gate
null
gate (unpriced)
QUOTE PENDING
2026-08-05
No written same-coil provenance exists (repo Source-Index 2026-08-05; Gmail re-searched by the Mac 2026-08-05). Stays unpriced, presented as a procurement gate on the Ferris job. Presenting it priced would violate the repo Pricing-Status rule. Also carried unpriced in Ferris's own pricing-summary.json unpriced_gates block.
deck_repairs_decking_per_sheet
225
USD/sheet (T&M change order)
VERIFIED
2026-08-07
T&M per terms, not a bid line. FERRIS-SOURCE-TABLE.md gives no independent date for this specific rate; source_date uses the table's own generation date. Cross-corroborated verbatim by Gary's copied calculate_pricing.py/pricing-summary.json 'unsuitable_decking_per_4x8_sheet': 225 (2026-08-05). Ultimate origin is Ketron's canonical terms.md pre-approved change-order list, which is not in this build's copied source set.
deck_repairs_fascia_per_lf
15 - 25
USD/LF range (T&M change order)
VERIFIED
2026-08-07
Fascia $15-25/LF, pre-approved change-order rate, T&M per terms. Same dating caveat as deck_repairs_decking_per_sheet. Cross-corroborated verbatim by Gary's copied calculate_pricing.py 'fascia_repair_per_lf_range': [15, 25].
deck_repairs_layer_removal_185_dropped
185
USD/sq (DROPPED for Ferris)
NOT FOUND
2026-08-07
'The $185/layer removal rate was dropped 2026-08-07: it is not in canonical terms.md's pre-approved list, and a signed document must not carry two different pre-approved lists.' NOT usable for Ferris; status NOT_FOUND reflects that Ferris has no valid current source for this rate, even though the number is visible in the doc. CONTRAST: Gary's copied calculate_pricing.py still carries this exact figure live as 'additional_shingle_layer_per_square': 185 -- see gary_additional_shingle_layer_per_square below. This is a genuine cross-job inconsistency in the source material, not a transcription error here; noted in evidence/DISCREPANCIES.md.
quote.json's sensitivity table. Stresses ONLY the line items whose basis is DERIVED-PROXY (cost-table status PROXY) at 1.10x / 1.20x / 1.30x / 1.50x -- dated/VERIFIED lines, labor, and extras (dumpster/permit) are held fixed. "Repriced total" re-runs the same gm_floor/gm_target as the base option, so margin is protected by raising price. "GM if unchanged" is what margin would fall to if the sell price were NOT adjusted -- how much room the current price has before the floor is at risk.
OptionStressDirect costsRepriced totalRepriced GM%GM% if price unchanged
Main residence, 24ga base $36,290.03 $108,900.00 66.7% —
1.10x $37,143.75 $111,500.00 66.7% 65.9%
1.20x $37,997.47 $114,000.00 66.7% 65.1%
1.30x $38,851.20 $116,600.00 66.7% 64.3%
1.50x $40,558.64 $121,700.00 66.7% 62.8%
Main residence, 22ga base $38,617.93 $121,400.00 68.2% —
1.10x $40,243.10 $126,500.00 68.2% 66.9%
1.20x $41,868.28 $131,600.00 68.2% 65.5%
1.30x $43,493.45 $136,700.00 68.2% 64.2%
1.50x $46,743.80 $146,900.00 68.2% 61.5%
Cabins alternate, 24ga base $10,215.64 $29,200.00 65.0% —
1.10x $10,523.38 $30,100.00 65.0% 64.0%
1.20x $10,831.12 $31,000.00 65.1% 62.9%
1.30x $11,138.86 $31,900.00 65.1% 61.9%
1.50x $11,754.34 $33,600.00 65.0% 59.7%
Cabins alternate, 22ga base $10,863.60 $32,500.00 66.6% —
1.10x $11,403.73 $34,100.00 66.6% 64.9%
1.20x $11,943.86 $35,700.00 66.5% 63.2%
1.30x $12,483.98 $37,300.00 66.5% 61.6%
1.50x $13,564.24 $40,500.00 66.5% 58.3%
Chimney counterflashing base $636.13 $1,950.00 67.4% —
1.10x $636.13 $1,950.00 67.4% 67.4%
1.20x $636.13 $1,950.00 67.4% 67.4%
1.30x $636.13 $1,950.00 67.4% 67.4%
1.50x $636.13 $1,950.00 67.4% 67.4%
Read counterflashing's flat row as expected: it has zero PROXY-basis line items (both its lines are DATED), so cost stress does not move it at all.
The two largest unresolved cost assumptions in this job. Neither blocks sending the proposal; both should be closed before contract signing.
Action 1
AEP Span-Lok hp distributor quote
The panel basis of design is AEP Span Span-Lok hp, but Span-Lok hp itself is quote-only (web lane, checked 2026-08-07) -- no public or on-file dollar price exists for it. The $4.99/LF (24ga) panel price actually used is ASC Design Span 16″ 24G DuraTech XL, the "nearest priced cousin" in the same ASC Profiles family, dated 2026-03-17 and tagged PROXY specifically for that substitution. Get a written AEP distributor quote and swap it in before contract; the engine makes that a five-minute reprice.
Action 2
Nail-base insulation distributor quote
Vented nail-base polyiso at $4.00/sqft is the largest PROXY dollar amount in the job ($6,300 on the main house alone): assembled from a foam-only proxy + plywood nailing-surface cost + an assembly premium, because the product is quote-only everywhere public (QXO / Dealers Choice, login-gated). Per the 2026-08-07 red-team review: a real quote at $5.50/sqft moves main-24ga GM to ~64.5%; at $7.00/sqft to ~62.4% -- the 60% floor holds either way, but get the real number before it's a change order.
Confirm counterparty at signing
Kootenai County's parcel record shows the owner as FERRIS LAKE HOME LLP (mailing 6014 S Dearborn Rd, Spokane WA 99223), not Anna Ferris individually. Anna most likely signs as an authorized agent of the LLP -- confirm the exact legal counterparty name before the contract is signed, not after.
Source: evidence/identity-verdict-anna-ferris.md
tests/test_golden.py: 32 passed, 1 skipped in 0.11s -- pins every dollar figure in quote.json (and thus in the v5 proposal) to a reproducible golden test. Verified live at build time, 2026-08-10.