Seed-EPD scoreboard — the 18-material lca.a4 inventory¶
One row per material in the Keur Songho reference inventory, with its seed-EPD readiness. This page answers a single question: for each of the 18 materials the calculation modules iterate over, is there a citable factor, and if not, what is standing in the way?
It is a read of the repo, not a sourcing pass. No value here was resolved against any API in producing it; every number and UUID is carried from Seed-EPD value resolution. No seed JSON was written.
Scope. The 18 materials are the ones lca.a4 transports, lca.a1_a3 multiplies by a factor,
and quantities accumulates — rows 5–22 of the A4 sheet in reference/excel/2_lca_vn.xlsx.
This is the "15 of 18 BLOCKED" set named in the Action register: 15 of the
18 have a non-zero A4 transport leg and are BLOCKED on AR-01 / AR-02; the other three (Water,
Crude oil, Waste Oil) are on-site per A4!B25 and compute to exactly 0.
1 · Status vocabulary¶
| Status | Meaning |
|---|---|
| LEGIT | A live-resolved EF 3.1 dataset exists with a clean declared unit. Seedable now, subject only to the standard proxy_provenance / justification_text gate. |
| PLACEHOLDER | A dataset exists and is seedable with a flag — an EF 3.0 rather than EF 3.1 method, a declared-unit trap, or an open product-match question. The flag must ride in proxy_provenance and surface in every reported result. |
| BLOCKED | An open Action-register row stands between this material and any value. No default, no placeholder. |
| EARTH-TRACK | Raw earth. ÖKOBAUDAT is barred outright by PROJECT.md decision #26; the only admissible sources are Chiwara primary data, CRAterre, RILEM TC 274-TCE, or Ben-Alon et al. Not a sourcing backlog item — a different track entirely. |
| CUT-OFF | Carried at zero as a declared EN 15804+A2 §6.3.3 cut-off. No EPD is needed; an attribution is. |
| UNSOURCED | No ÖKOBAUDAT batch-1 record exists for this material at all. Nobody has looked yet. |
Precedence. Where more than one status could apply, the more specific one wins: EARTH-TRACK → CUT-OFF → BLOCKED → PLACEHOLDER → LEGIT → UNSOURCED. So a material with no batch-1 record but an open AR blocking its factor is shown as BLOCKED, not UNSOURCED; UNSOURCED means nothing is in the way except that no one has sourced it.
Batch-1 records are the ten ÖKOBAUDAT candidates numbered #01…#10 in
Seed-EPD value resolution §2. A b suffix (#06b, #07b) is
the successor dataset that pass identified when the original pick turned out to be unusable.
2 · The scoreboard¶
| # | Material (workbook label) | MaterialCategory |
Status | Batch-1 record | Evidence | AR |
|---|---|---|---|---|---|---|
| 1 | Rock | ROCK_STONE |
LEGIT | #05 crushed rock — f501dc99-… v20.26.070, EF 3.1, 1 kg, 0.00827818 kg CO₂-eq/kg |
Value resolution §2 | AR-07 (shared-factor simplification) · see note [a] |
| 2 | Gravel | AGGREGATE_COARSE |
BLOCKED | #03 3ce61a4e-… — A1-only, no GWP-total exists; no undried EF 3.1 successor |
Value resolution §4 | AR-50 (new) · AR-07 |
| 3 | Sand | AGGREGATE_FINE |
LEGIT | #04 286b0072-… v20.26.070, EF 3.1, 1 kg, 0.00273869 kg CO₂-eq/kg (corrected UUID) |
Value resolution §2 | AR-07 |
| 4 | Earth | EARTH |
EARTH-TRACK | — none, and none permitted | PROJECT.md decision #26 · A1–A3 spec §3.4 | AR-03 · AR-47 |
| 5 | Water | WATER |
CUT-OFF | — none needed | A1–A3 spec §3.5 · LCI Final!I7 = literal 0 |
AR-48 |
| 6 | Cement | CEMENT |
PLACEHOLDER | #01b VDZ industry-average CEM I 87371640-… v00.02.001, EF 3.0, 1 t, 665 kg CO₂-eq/t |
Value resolution §8 | — |
| 7 | Steel Rebars | STEEL_REBAR |
LEGIT | #02 f6861618-… v20.26.070, EF 3.1, 1 kg, 0.642238 kg CO₂-eq/kg |
Value resolution §2 | — |
| 8 | Steel plates | STEEL_SHEET |
UNSOURCED | — no batch-1 record | LCI Final!I10 — note "ok", not a citation |
— |
| 9 | Steel profiles | STEEL_PROFILE |
PLACEHOLDER | #07b d4ca0d80-… v20.21.060, EF 3.0, 1 kg, 0.964395 kg CO₂-eq/kg |
Value resolution §6 | — |
| 10 | Polyethylene film | PLASTIC_FILM |
PLACEHOLDER | #09b 5f0bc680-… v20.26.070, EF 3.1, 1 m², 4.471236 kg CO₂-eq/m² — but the product is a dimpled drainage membrane, not plain sheet film |
Value resolution §2, §10.4 | AR-51 (new) |
| 11 | Bitumen | BITUMEN |
BLOCKED | #08 A1-only; #08b is the wrong product and the wrong unit. No per-kg neat-bitumen dataset exists in ÖKOBAUDAT (32 records searched) |
Value resolution §3 | AR-49 |
| 12 | Crude oil | PETROLEUM_DISTILLATE |
BLOCKED | — no batch-1 record | LCI Final!I14 = literal 134 — ~44× the IPCC Tier 1 combustion factor |
AR-04 |
| 13 | Waste Oil | WASTE_OIL |
UNSOURCED | — no batch-1 record | LCI Final!I15 — "No EE as it is paid by previous use", no citation |
— |
| 14 | Glass | GLASS |
PLACEHOLDER | #06b e94dbfcc-… v00.00.016, EF 3.0, 1 m² at 1 mm, 3.06 kg CO₂-eq/m² |
Value resolution §5 | — |
| 15 | Anti-termite | PESTICIDE |
BLOCKED | — no batch-1 record, and none admissible | PROJECT.md decision #26, speciality-chemical clause | AR-52 (new) · AR-16 (reference area) |
| 16 | Wall paint | PAINT_WALL |
UNSOURCED | — no batch-1 record | LCI Final!I18 — "Silicate external paint is ok", no EPD/FDES number |
— |
| 17 | Antirust paint | PAINT_ANTIRUST |
BLOCKED | — no batch-1 record (INIES track, not ÖKOBAUDAT) | Antirust investigation §4 | AR-06 · AR-25 |
| 18 | Floor Tiles | CERAMIC_TILE |
LEGIT | #10b 5618689c-… v20.26.070, EF 3.1, 1 m², 19.547846 kg CO₂-eq/m² at 20 kg/m² grammage |
Value resolution §7 | AR-05 — see note [b] |
[a] Rock carries an unregistered condition. Decision #26 puts site-quarried stone under the
same local-data rule as EARTH, and permits ÖKOBAUDAT-interim only where the stone is purchased
from a regional supplier with a documented supply chain. Keur Songho rock comes from Sindia
Quarry, 23 km out (A4!B25) — regional, but the supply chain is nowhere documented in the repo.
The EF 3.1 dataset is clean; the permission to use it is conditional and the condition is unmet.
Recorded here rather than opened as an AR — it is a documentation requirement, not a blocker, and
it belongs with AR-07 when that row is worked.
[b] Floor tiles: LEGIT on the seed axis, AR-05 still open on the audit axis. These are two
different questions. #10b is a clean EF 3.1 dataset with a declared unit that matches the
inventory, so it is seedable. AR-05 asks a separate question — what was the workbook's 5.09
kg CO₂/kg, and how did it get to be 26.5× the published range? Seeding #10b supersedes the
workbook value; it does not explain it. Value resolution §7 notes that 19.548 kg CO₂-eq/m² is
plausibly the shape of number that became 5.09 per kg, which gives AR-05 something concrete to
test against, but the row stays open until Chiwara answers it.
3 · Summary¶
Seedable now (LEGIT): 4 of 18 — Rock, Sand, Steel Rebars, Floor Tiles. All four are live-resolved EF 3.1 with clean declared units. Seedable with a flag (PLACEHOLDER): 4 — Cement, Steel profiles and Glass on EF 3.0 rather than EF 3.1, Polyethylene film on an unresolved product match.
Cannot be seeded (BLOCKED): 5 — Gravel, Bitumen, Crude oil, Anti-termite, Antirust paint. Plus EARTH-TRACK: 1 (Earth, where ÖKOBAUDAT is barred outright and only Chiwara or CRAterre will do) and CUT-OFF: 1 (Water, which needs an attribution, not an EPD).
Never looked at (UNSOURCED): 3 — Steel plates, Waste Oil, Wall paint. These are the residue of the 11–18 gap: batch 1 stopped at ten records, and eight of the eighteen materials were never in it (Earth, Water, Steel plates, Crude oil, Waste Oil, Anti-termite, Wall paint, Antirust paint). Five of those eight are accounted for by an existing track; the three above are not.
| Status | Count |
|---|---|
| LEGIT | 4 |
| PLACEHOLDER | 4 |
| BLOCKED | 5 |
| EARTH-TRACK | 1 |
| CUT-OFF | 1 |
| UNSOURCED | 3 |
| Total | 18 |
Batch-1 coverage: 10 of 18. Of the ten records resolved, two were usable as picked (#02, #05),
one after a version bump (#04), four only via a successor dataset (#06b, #07b, #09b, #10b),
one is EF 3.0 by necessity (#01b), and two have no admissible dataset at all (#03, #08).
4 · Reconciliation of the 18-count across modules¶
The three modules agree on the count and the order, and disagree on one key.
| Count | Order | Keys | |
|---|---|---|---|
2_lca_vn.xlsx A4 sheet, rows 5–22 |
18 | canonical | workbook labels |
lca.a4 _KEUR_SONGHO_LEGS / _LABELS |
18 | matches | MaterialCategory |
lca.a1_a3 _FACTORS / _KEUR_SONGHO_WEIGHTS_KG |
18 | matches | MaterialCategory |
quantities accumulator output |
18 | matches | MaterialCategory — one differs |
Two discrepancies survive the check. Neither is papered over here.
4.1 RAW_EARTH vs EARTH — the modules cannot be wired together¶
quantities emits MaterialCategory.RAW_EARTH for earth
(backend/app/domains/quantities/__init__.py:600). lca.a1_a3 and lca.a4 both key on
MaterialCategory.EARTH (a1_a3.py:137, a4.py:232). Both enum members exist and neither module
maps between them, so feeding the quantities output straight into either stage raises:
KeyError: "No A1-A3 factor defined for category <MaterialCategory.RAW_EARTH: 'raw_earth'>."
KeyError: "No Keur Songho A4 transport legs defined for <MaterialCategory.RAW_EARTH: 'raw_earth'>."
This is latent today only because both stages read their masses from the hardcoded
_KEUR_SONGHO_WEIGHTS_KG rather than from quantities. It becomes a hard failure the moment
AR-46's mass-path rebuild wires the two together — which is the whole point of AR-46. Registered as
AR-53.
4.2 The unit bases do not match, and the labels say so¶
quantities produces each material in its native unit — m³ for rock, gravel, sand, earth, water,
steel plates, steel profiles and glass; m² for polyethylene film and floor tiles; L for the oils,
anti-termite and the paints; kg only for cement, rebar and bitumen. lca.a1_a3 and lca.a4 consume
kg for all eighteen.
The workbook is explicit about this and was ignored: A4 column F is headed Weight (kg), but the
row labels in column B carry the inventory unit — polyethylene film(m²), Floor Tiles(m²),
Glass (m³), Crude oil(L). So A4!F14 = 5025.6 sits in a column headed kg on a row labelled m².
The corrected quantities module gives 139.6 m² of polyethylene film and 303.36 m² of floor tiles —
neither reconciles with 5025.6 or 3379.898 by any density.
This is squarely inside AR-46, which already names "areal density for polyethylene film,
thickness + density for ceramic tiles" as part of the rebuild. No new row opened. It is recorded here
because it bears directly on the scoreboard: the EF 3.1 datasets for polyethylene film and
floor tiles are both declared per m², and they match the quantities m² path — not the
per-kg path lca.a1_a3 currently multiplies. Seeding them per m² is correct and will not connect to
anything until AR-46 lands.
5 · What this page does not do¶
- It does not resolve any value. Every UUID, version and number is carried unchanged from Seed-EPD value resolution.
- It does not write seed JSON.
backend/app/data/seed_epds/is still empty, and the CLAUDE.md provenance gate (citation URL, Weidema-scoredproxy_provenance,justification_text, integrity test) applies in full to every row marked LEGIT or PLACEHOLDER above. - It does not change any status in
lca.a1_a3orlca.a4. The seed status in this table and the module's runtime status are different things: Floor Tiles is LEGIT here andBLOCKEDinlca.a1_a3; Anti-termite is BLOCKED here andCOMPUTEDat an uncited 0.65 inlca.a1_a3. That second mismatch is what AR-52 is for.