{
  "schema": "brandlab/1",
  "generated": "2026-07-14",
  "brand": {
    "id": "brand:gaf",
    "name": "GAF",
    "sameAs": "https://www.gaf.com",
    "hq": "Parsippany, NJ",
    "founded": { "year": 1886, "place": "Bound Brook, New Jersey", "as": "Standard Paint Company", "claimRef": "claim:founding" },
    "parent": { "name": "Standard Industries", "claimRef": "claim:scale" },
    "retailer": { "name": "Super Arbor", "url": "https://superarbor.io", "collection": "https://superarbor.io/collections/gaf", "intake": "https://superarbor.io/pages/send-a-list" },
    "tokens": { "accent": "#d2232a", "accentDeep": "#9e1b20", "hall": "#0b0d0c", "cream": "#faf7f2", "paper": "#efe9dd" }
  },

  "claims": [
    { "id": "claim:founding", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "The Standard Paint Company is founded in a remodeled sawmill in Bound Brook, New Jersey, in 1886, with 18 employees.",
      "sources": [{ "url": "https://www.gaf.com/en-us/about-us/history" }, { "url": "https://nationalroofingmuseum.org/the-history-of-gaf/" }] },
    { "id": "claim:scale", "kind": "manufacturer_claim", "status": "attributed", "lastVerified": "2026-07-14",
      "text": "Standard Industries describes GAF as the leading roofing and waterproofing manufacturer in North America, with more than 30 manufacturing facilities located across North America.",
      "sources": [{ "url": "https://www.standardindustries.com/our-businesses/standard-building-solutions" }, { "url": "https://www.gaf.com/en-us" }] },
    { "id": "claim:deck-protection-role", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Roof deck protection is the synthetic underlayment rolled over the bare deck before shingles go down — a second shedding layer against rain that wind drives beneath them. Deck-Armor is GAF's breathable option, designed to let trapped interior moisture escape; FeltBuster is the high-traction synthetic felt replacement.",
      "sources": [{ "url": "https://www.gaf.com/en-us/roofing-materials/residential-roofing-materials/roof-deck-protection/deck-armor-premium-breathable-roof-deck-protection" }, { "url": "https://www.gaf.com/en-us/document-library/documents/data-sheets/feltbuster-sell-sheet-resul183_data-sheet.pdf" }] },
    { "id": "claim:leak-barrier-role", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "A leak barrier is a self-adhered waterproof membrane that bonds directly to the roof deck and seals itself around nails. GAF directs it to the roof's vulnerable lines — eaves and rakes, valleys, around chimneys and other penetrations — where ice dams and wind-driven rain push water backward under shingles. Colder-climate building codes often require one at the eaves.",
      "sources": [{ "url": "https://www.gaf.com/en-us/roofing-materials/residential-roofing-materials/leak-barriers/stormguard-film-surfaced-leak-barrier" }, { "url": "https://www.gaf.com/en-us/document-library/documents/data-sheets/stormguard-film-surfaced-leak-barrier-data-sheet-resul116.pdf" }] },
    { "id": "claim:starter-role", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Starter strips are the roof's first course, laying a factory-applied line of sealant along the eaves and rakes so the shingles above bond to the edge of the roof — the zone a windstorm loads first. Pro-Start carries Dura Grip adhesive positioned to help prevent blow-off.",
      "sources": [{ "url": "https://www.gaf.com/en-us/roofing-materials/residential-roofing-materials/starter-strip-shingles/pro-start-starter-strip-shingles" }, { "url": "https://www.gaf.com/en-us/document-library/documents/data-sheets/pro-start-starter-strip-shingles-sell-sheet-resgn546.pdf" }] },
    { "id": "claim:shingle-role", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "An architectural shingle laminates two or more layers of asphalt-coated fiberglass, the top layer cut into varied tabs so the roof reads with depth and shadow a flat three-tab cannot produce. GAF calls Timberline North America's best-selling shingle line, built on what it names Advanced Protection Shingle Technology.",
      "sources": [{ "url": "https://www.gaf.com/en-us/blog/your-home/what-are-architectural-shingles-281474980182000" }, { "url": "https://www.gaf.com/en-us/resources/roofing-technology/advanced-protection" }] },
    { "id": "claim:ridge-role", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Hip and ridge caps close the roof's peaks and corners. TimberTex covers those lines with a wide 8-inch exposure and continuous sealant. The ridge also breathes — Cobra RidgeRunner is an exhaust vent that releases attic heat and moisture beneath the caps. GAF's ventilation rule: exhaust at the ridge must never exceed intake at the soffits.",
      "sources": [{ "url": "https://www.gaf.com/en-us/roofing-materials/residential-roofing-materials/hip-and-ridge-cap-shingles/timbertex-premium-ridge-cap-shingles" }, { "url": "https://www.gaf.com/en-us/roofing-materials/residential-roofing-materials/attic-vents-other-ventilation/cobra-ridgerunner-exhaust-vent-for-roof-ridge" }] },
    { "id": "claim:bundles-ultrahd", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "GAF's Timberline Ultra HD product information sheet lists four bundles per square — 16 shingles per bundle, 25 square feet each. The three-bundle shorthand belongs to the Timberline HDZ generation (33.3 sq ft per bundle, per GAF).",
      "sources": [{ "url": "https://rpm.rcabc.org/images/1/1e/GAF_Timberline_Ultra_HD_TDS.pdf" }, { "url": "https://www.gaf.com/en-us/document-library/documents/specifications/timberline-hdz-shingles-spec-sheet-resgn467hdz.pdf" }] },
    { "id": "claim:waste", "kind": "retailer_interpretation", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Industry estimating guides put typical shingle waste at 10 to 15 percent — higher on cut-up roofs with dormers and crossing valleys. A straight gable earns the low end. Nothing earns zero.",
      "sources": [{ "url": "https://roofr.com/blog/how-to-calculate-roof-waste-factor" }, { "url": "https://www.oneclickcode.com/blog/the-roofing-contractors-guide-to-shingle-waste-factor-calculation" }] },
    { "id": "claim:layerlock", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "LayerLock is GAF's shingle-construction technology, introduced with Timberline HDZ in January 2020. Per GAF it mechanically fuses the common bond between shingle layers. It defines the current generation — HDZ and, since 2023, UHDZ. Earlier lines, HD and Ultra HD among them, predate it.",
      "sources": [{ "url": "https://www.prnewswire.com/news-releases/gaf-unveils-timberline-hdz-shingles-powered-by-layerlock-technology-300984709.html" }, { "url": "https://www.prnewswire.com/news-releases/gaf-unveils-new-timberline-ultra-hdz-shingles-301756786.html" }] },
    { "id": "claim:windproven", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "The WindProven Limited Wind Warranty is GAF's 15-year wind warranty with no maximum wind speed — an industry first, per GAF. Eligibility requires shingles with LayerLock technology plus four qualifying GAF accessory categories: starter strips, roof deck protection, ridge cap shingles, and either a leak barrier or an attic ventilation product. Coverage applies to the LayerLock-labeled shingles only.",
      "sources": [{ "url": "https://www.gaf.com/en-us/resources/warranties/windproven" }, { "url": "https://www.gaf.com/en-us/document-library/documents/warranties/data_sheet__windproven_limited_wind_warranty_sell_sheet_restz130.pdf" }] },
    { "id": "claim:lifetime", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Per the GAF Shingle & Accessory Limited Warranty, 'Lifetime' coverage runs as long as the original individual owner — or a properly transferred second owner — owns the single-family detached residence where the shingles are installed. Every other owner or building type gets a fixed 40-year term.",
      "sources": [{ "url": "https://www.gaf.com/en-us/document-library/documents/warranties/gaf-shingle-and-accessory-limited-warranty-reswt160l.pdf" }] },
    { "id": "claim:system-warranty", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Per GAF's warranty literature, a qualifying GAF shingle installed with at least three qualifying GAF accessories is automatically covered by the GAF Roofing System Limited Warranty, which adds lifetime coverage on those qualifying accessories.",
      "sources": [{ "url": "https://www.gaf.com/en-us/document-library/documents/warranties/gaf-system-plus-limited-warranty-reswt162-legal-sample.pdf" }, { "url": "https://www.gaf.com/en-us/resources/warranties/residential" }] },
    { "id": "claim:stainguard", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "The black streaks on a roof are blue-green algae — Gloeocapsa magma. Copper inhibits it. StainGuard-labeled shingles carry a 10-year algae-discoloration limited warranty; StainGuard Plus-labeled shingles use GAF's time-release copper microsites and carry a 25-year term. The bundle label governs which warranty applies.",
      "sources": [{ "url": "https://www.gaf.com/en-us/resources/roofing-technology/stainguard-algae-resistant-shingle-protection" }, { "url": "https://www.gaf.com/en-us/document-library/documents/warranties/gaf-shingle-and-accessory-limited-warranty-reswt160l.pdf" }] },
    { "id": "claim:overlay", "kind": "manufacturer_claim", "status": "verified", "lastVerified": "2026-07-14",
      "text": "GAF's published guidance allows a roof-over only where a single existing layer lies flat and smooth, and GAF notes most local codes stop at two layers total.",
      "sources": [{ "url": "https://www.gaf.com/en-us/document-library/documents/technical-bulletins-&-notes/r-145-roofing-over-existing-shingles.pdf" }] },
    { "id": "claim:pitch-factor", "kind": "derived", "status": "verified", "lastVerified": "2026-07-14",
      "text": "Sloped roof area = plan (footprint) area × pitch factor, where pitch factor = sqrt(1 + (rise/12)^2). This is geometry, not a manufacturer figure.",
      "sources": [{ "url": "https://www.finehomebuilding.com/project-guides/roofing/dont-fall-short-on-shingles-how-to-estimate-materials-for-roofing-projects" }] },
    { "id": "claim:illustrative-3d", "kind": "illustrative", "status": "verified", "lastVerified": "2026-07-14",
      "text": "The 3D house, roof geometry, and material renderings in this lab are illustrative reconstructions built to explain the system — they are not GAF CAD, engineering drawings, or product photography.",
      "sources": [{ "url": "https://superarbor.io/pages/gaf", "note": "Super Arbor editorial standard" }] }
  ],

  "components": [
    { "id": "component:deck", "name": "Roof deck", "installOrder": 0, "zone": "entire roof plane",
      "what": "The structural wood plane everything above bonds to. Not a GAF product — but its condition decides the job: an overlay hides it, and a rotted or delaminated deck is what you need to find before new shingles go on.",
      "claimRefs": ["claim:overlay"], "skus": [], "constraints": ["GAF guidance allows roof-overs only on a single flat, smooth existing layer; most codes stop at two layers total."] },
    { "id": "component:deck-protection", "name": "Roof deck protection", "installOrder": 1, "zone": "entire deck, field",
      "what": "Synthetic underlayment over the bare deck — the second water-shedding layer under the shingles.",
      "claimRefs": ["claim:deck-protection-role"], "skus": ["product:deck-armor", "product:feltbuster"],
      "constraints": ["Coverage figures below are gross roll area from product dimensions — laps reduce net coverage; the desk confirms counts."] },
    { "id": "component:leak-barrier", "name": "Leak barrier", "installOrder": 2, "zone": "eaves, valleys, penetrations",
      "what": "Self-adhered membrane at the roof's vulnerable lines, sealing around fasteners.",
      "claimRefs": ["claim:leak-barrier-role"], "skus": ["product:stormguard"],
      "constraints": ["Colder-climate codes often require an ice barrier at the eaves — check local code."] },
    { "id": "component:starter", "name": "Starter strips", "installOrder": 3, "zone": "eaves and rakes",
      "what": "The roof's first course: factory sealant at the edges the wind loads first.",
      "claimRefs": ["claim:starter-role"], "skus": ["product:pro-start"],
      "constraints": ["Starter is a qualifying accessory category for GAF system warranties."] },
    { "id": "component:shingle", "name": "Field shingles", "installOrder": 4, "zone": "roof field",
      "what": "The laminated architectural shingle courses — the weather surface.",
      "claimRefs": ["claim:shingle-role", "claim:bundles-ultrahd", "claim:stainguard"], "skus": ["product:uhd-charcoal", "product:uhd-foxhollow"],
      "constraints": ["Timberline Ultra HD predates LayerLock and does not qualify for WindProven — send the list for a LayerLock-line quote if WindProven is the spec."] },
    { "id": "component:ridge-vent", "name": "Ridge exhaust vent", "installOrder": 5, "zone": "ridge line",
      "what": "Exhaust at the ridge releasing attic heat and moisture beneath the caps.",
      "claimRefs": ["claim:ridge-role"], "skus": ["product:cobra-ridgerunner"],
      "constraints": ["GAF's rule: exhaust at the ridge must never exceed intake at the soffits — confirm intake before adding exhaust."] },
    { "id": "component:ridge-cap", "name": "Hip & ridge caps", "installOrder": 6, "zone": "hips and ridges",
      "what": "The caps that close the peaks — wide 8-inch exposure, continuous sealant.",
      "claimRefs": ["claim:ridge-role"], "skus": ["product:timbertex"], "constraints": [] },
    { "id": "component:flashing", "name": "Penetration flashing", "installOrder": 7, "zone": "chimneys, walls, penetrations",
      "what": "Metal step and counter flashing at chimneys and sidewalls — paired with leak barrier beneath. Quoted per job by the desk; not a fixed-SKU line in this estimate.",
      "claimRefs": ["claim:leak-barrier-role"], "skus": [], "constraints": ["Flashing takeoff is job-specific — the desk prices it from photos or plans."] }
  ],

  "products": [
    { "id": "product:uhd-charcoal", "componentId": "component:shingle", "family": "Timberline Ultra HD", "color": "Charcoal",
      "title": "GAF Timberline Ultra HD Shingles with StainGuard Protection, Charcoal",
      "handle": "gaf-timberline-ultra-hd-shingles-with-stainguard-protection-charcoal-13-1-4-in-x-39-3-8-in",
      "url": "https://superarbor.io/products/gaf-timberline-ultra-hd-shingles-with-stainguard-protection-charcoal-13-1-4-in-x-39-3-8-in",
      "image": "https://superarbor.io/cdn/shop/files/351648_default_hero.jpg?width=600",
      "variantId": 52396144656751, "price": 722.70, "currency": "USD", "inventory": 3000, "priceAsOf": "2026-07-14",
      "unit": "pallet/order unit as listed", "coverage": { "model": "area", "bundlesPerSquare": 4, "sqftPerBundle": 25, "status": "verified", "claimRef": "claim:bundles-ultrahd" },
      "notes": ["Listed price is per store order unit as published on superarbor.io — the desk confirms per-bundle vs per-unit packaging on quote."] },
    { "id": "product:uhd-foxhollow", "componentId": "component:shingle", "family": "Timberline Ultra HD", "color": "Fox Hollow Grey",
      "title": "GAF Timberline Ultra HD Shingles with Dual Shadow — Fox Hollow Grey",
      "handle": "gaf-timberline-ultra-hd-shingles-with-dual-shadow-fox-hollow-grey-13-1-4-in-x-39-3-8-in-1",
      "url": "https://superarbor.io/products/gaf-timberline-ultra-hd-shingles-with-dual-shadow-fox-hollow-grey-13-1-4-in-x-39-3-8-in-1",
      "image": "https://superarbor.io/cdn/shop/files/630851_default_hero_76c20621-8c11-430c-bc5c-a03466b31275.jpg?width=600",
      "variantId": 52396182438255, "price": 722.70, "currency": "USD", "inventory": 3000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "area", "bundlesPerSquare": 4, "sqftPerBundle": 25, "status": "verified", "claimRef": "claim:bundles-ultrahd" } },
    { "id": "product:deck-armor", "componentId": "component:deck-protection", "family": "Deck-Armor",
      "title": "GAF Deck-Armor Premium Roof Deck Protection 48\" x 250'",
      "handle": "gaf-deck-armor-premium-roof-deck-protection-48-x-250-gafda",
      "url": "https://superarbor.io/products/gaf-deck-armor-premium-roof-deck-protection-48-x-250-gafda",
      "image": "https://superarbor.io/cdn/shop/files/ProductImage_GAFDA_48914e81-8b6b-40d2-ae9e-50e4f4f1b9a3.jpg?width=600",
      "variantId": 53113829032303, "price": 350.00, "currency": "USD", "inventory": 6000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "area", "sqftPerRoll": 1000, "status": "derived", "basis": "48 in × 250 ft roll dimensions (gross, before laps)" } },
    { "id": "product:feltbuster", "componentId": "component:deck-protection", "family": "FeltBuster",
      "title": "GAF FeltBuster Synthetic Roofing Felt 48\" x 250' High Traction",
      "handle": "gaf-feltbuster-synthetic-underlayment-48-x-250-high-traction-gaffbs10",
      "url": "https://superarbor.io/products/gaf-feltbuster-synthetic-underlayment-48-x-250-high-traction-gaffbs10",
      "image": "https://superarbor.io/cdn/shop/files/ProductImage_GAF0975RLG_32d403e5-df4e-4e70-b9a9-8d36cebc1cb9.jpg?width=600",
      "variantId": 53113840009583, "price": 135.74, "currency": "USD", "inventory": 6000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "area", "sqftPerRoll": 1000, "status": "derived", "basis": "48 in × 250 ft roll dimensions (gross, before laps)" } },
    { "id": "product:stormguard", "componentId": "component:leak-barrier", "family": "StormGuard",
      "title": "GAF StormGuard Film-Surfaced Leak Barrier, 3' x 66.7' Roll (2 SQ)",
      "handle": "gaf-stormguard-film-surfaced-leak-barrier-3-x-66-7-roll-2-sq-200-sq-ft",
      "url": "https://superarbor.io/products/gaf-stormguard-film-surfaced-leak-barrier-3-x-66-7-roll-2-sq-200-sq-ft",
      "image": "https://superarbor.io/cdn/shop/files/687132_default_hero_39fae96a-4242-456a-8d4b-bc00e60e00ce.jpg?width=600",
      "variantId": 52396186304879, "price": 166.98, "currency": "USD", "inventory": 3000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "linear-band", "widthFt": 3, "sqftPerRoll": 200, "status": "derived", "basis": "3 ft × 66.7 ft roll (200 sq ft) from product listing" } },
    { "id": "product:pro-start", "componentId": "component:starter", "family": "Pro-Start",
      "title": "GAF Pro-Start Starter, Black",
      "handle": "gaf-pro-start-starter-black-13-1-4-x-38-full-sheet-6-1-2-x-38-half-sheet-gafstps",
      "url": "https://superarbor.io/products/gaf-pro-start-starter-black-13-1-4-x-38-full-sheet-6-1-2-x-38-half-sheet-gafstps",
      "image": "https://superarbor.io/cdn/shop/files/ProductImage_GAF_20Pro_20Starter_20GAFSTPS_48021219-bcc2-4701-8bc9-9c3400634a71.jpg?width=600",
      "variantId": 53114299285871, "price": 75.50, "currency": "USD", "inventory": 6000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "linear", "lfPerBundle": 120, "status": "needs_verification", "basis": "GAF Pro-Start sell-sheet figure commonly cited as ~120 lin ft/bundle — CONFIRM with the desk before ordering" } },
    { "id": "product:timbertex", "componentId": "component:ridge-cap", "family": "TimberTex",
      "title": "GAF TimberTex Premium Hip & Ridge",
      "handle": "gaf-timbertex-premium-hip-and-ridge-88182",
      "url": "https://superarbor.io/products/gaf-timbertex-premium-hip-and-ridge-88182",
      "image": "https://superarbor.io/cdn/shop/files/ProductImage_GAFTTCABAW_edbab139-df19-433e-b0d4-4d350fcb3279.jpg?width=600",
      "variantId": 53115883913583, "price": 87.50, "currency": "USD", "inventory": 6000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "linear", "lfPerBundle": 20, "status": "needs_verification", "basis": "Common GAF TimberTex bundle coverage (~20 lin ft at 8-in exposure) — CONFIRM with the desk before ordering" } },
    { "id": "product:cobra-ridgerunner", "componentId": "component:ridge-vent", "family": "Cobra RidgeRunner",
      "title": "GAF Cobra RidgeRunner Exhaust Vent 11-1/2\" x 30'",
      "handle": "gaf-cobra-ridgerunner-exhaust-vent-11-1-2-x-30-gaf2089000cu",
      "url": "https://superarbor.io/products/gaf-cobra-ridgerunner-exhaust-vent-11-1-2-x-30-gaf2089000cu",
      "image": "https://superarbor.io/cdn/shop/files/ProductImage_PGAFCORVR1112_non-filtered_1ad43cbc-79f7-418f-b5c6-451afdc5467c.jpg?width=600",
      "variantId": 53113851347311, "price": 207.00, "currency": "USD", "inventory": 6000, "priceAsOf": "2026-07-14",
      "coverage": { "model": "linear", "lfPerCarton": 30, "status": "derived", "basis": "11-1/2 in × 30 ft carton from product listing" } }
  ],

  "compatibilityRules": [
    { "id": "rule:windproven-ineligible", "type": "warning", "when": { "productFamily": "Timberline Ultra HD" },
      "message": "Timberline Ultra HD predates LayerLock and does not qualify for GAF's WindProven wind warranty. If WindProven is the spec, send the list — the desk quotes a LayerLock-line system.", "claimRef": "claim:windproven" },
    { "id": "rule:system-warranty", "type": "positive", "when": { "accessoryCategoriesAtLeast": 3 },
      "message": "This BOM pairs a qualifying GAF shingle with 3+ qualifying GAF accessories — per GAF's warranty literature that combination is automatically covered by the GAF Roofing System Limited Warranty, adding lifetime coverage on the qualifying accessories. The desk confirms exact SKU eligibility.", "claimRef": "claim:system-warranty" },
    { "id": "rule:ventilation-balance", "type": "warning", "when": { "includes": "product:cobra-ridgerunner" },
      "message": "GAF's ventilation rule: exhaust at the ridge must never exceed intake at the soffits. Confirm soffit intake before adding ridge exhaust.", "claimRef": "claim:ridge-role" },
    { "id": "rule:label-governs", "type": "note", "when": { "always": true },
      "message": "Warranty terms follow the label on the bundle — StainGuard 10 years, StainGuard Plus 25. Confirm the label before quoting an algae term.", "claimRef": "claim:stainguard" }
  ],

  "calculator": {
    "id": "calc:shingle-order", "version": 1,
    "inputs": {
      "mode": ["roofArea", "footprint"],
      "roofAreaSqFt": "number — measured sloped roof area",
      "footprintSqFt": "number — plan footprint, converted by pitch factor",
      "pitch": "rise per 12 in run, 3..14",
      "complexity": { "gable": { "waste": 0.10 }, "hipCross": { "waste": 0.12 }, "complex": { "waste": 0.15 } },
      "wasteOverride": "optional 0.05..0.25",
      "edges": "optional measured LF: eaves, rakes, ridges, hips, valleys — otherwise estimated (flagged assumption)",
      "color": ["Charcoal", "Fox Hollow Grey"],
      "underlayment": ["product:deck-armor", "product:feltbuster"]
    },
    "formulas": {
      "pitchFactor": "sqrt(1 + (pitch/12)^2)   [claim:pitch-factor]",
      "roofArea": "mode=footprint ? footprintSqFt * pitchFactor : roofAreaSqFt",
      "squares": "roofArea * (1 + waste) / 100   [claim:waste]",
      "shingleBundles": "ceil(squares * 4)   [claim:bundles-ultrahd — Ultra HD packs 4/square]",
      "underlaymentRolls": "ceil(roofArea / sqftPerRoll)   [gross, before laps]",
      "leakBarrierRolls": "ceil(((eavesLF + valleysLF) * 3) / 200)",
      "starterBundles": "ceil((eavesLF + rakesLF) / lfPerBundle)   [lfPerBundle needs_verification]",
      "ridgeCapBundles": "ceil((ridgesLF + hipsLF) / lfPerBundle)   [lfPerBundle needs_verification]",
      "ridgeVentCartons": "ceil(ridgesLF / 30)",
      "edgeEstimates": "if not measured: W = sqrt(footprint/1.6); L = 1.6W; eaves=2L; rakes=4*(W/2)*pitchFactor (gable) ; ridge=L; valleys: gable 0, hipCross 0.8W, complex 1.4W; hips: hipCross 1.2W, complex 1.6W — ESTIMATES, flagged"
    },
    "outputsContract": "BOM lines {productId, qty, unitPrice, extended, mathShown, status}, assumptions[], warnings[] (from compatibilityRules), totals, config hash"
  },

  "timeline": [
    { "id": "event:1886", "year": 1886, "title": "A sawmill in Bound Brook", "claimRef": "claim:founding" },
    { "id": "event:1892", "year": 1892, "title": "RU-BER-OID ready-to-lay roll roofing", "body": "Widely credited as the first ready-to-lay asphalt roll roofing; GAF's own history dates the launch to 1892.", "sources": [{ "url": "https://www.gaf.com/en-us/about-us/history" }], "status": "attributed" },
    { "id": "event:1921", "year": 1921, "title": "Standard Paint becomes The RUBEROID Co.", "sources": [{ "url": "https://www.gaf.com/en-us/about-us/history" }], "status": "verified" },
    { "id": "event:1967", "year": 1967, "title": "Timberline — the first laminated shingle — and the G-A-F merger", "sources": [{ "url": "https://www.gaf.com/en-us/about-us/history" }, { "url": "https://www.fundinguniverse.com/company-histories/gaf-corporation-history/" }], "status": "verified" },
    { "id": "event:2011", "year": 2011, "title": "Lifetime Limited Warranty across all laminated shingles — a first per GAF", "sources": [{ "url": "https://www.gaf.com/en-us/about-us/news-and-press-releases/press-releases/120110-gaf-introduces-new-lifetime-roofing-system" }], "status": "attributed" },
    { "id": "event:2020", "year": 2020, "title": "Timberline HDZ, LayerLock, WindProven", "claimRef": "claim:layerlock" },
    { "id": "event:2022", "year": 2022, "title": "Timberline Solar debuts at CES 2022", "sources": [{ "url": "https://www.gaf.com/en-us/about-us/news-press-releases/2022/gaf-energy-launches-game-changing-solar-roof-to-power-mass-adoption-of-clean-energy" }], "status": "attributed" }
  ]
}
