Skip to content

Action Register

The single consolidated view of every open item blocking this project. One row per open item, ordered by criticality. This page does not duplicate the content of the specs, issues, and attribution requests it points to — it tells you what is open, who owns it, and what it blocks, and links to the full account.

Ordering principle. Seed-EPD sourcing sits at the top, because it is the path to any citable number: the calculation modules are implemented and parity-tested, and still return None, purely for want of a factor with a citation. Governance and trademark items sit at the bottom — they gate public release, not calculation.

Maintenance. Per CLAUDE.md, Step 6 of every module loop updates this page: close resolved rows, add new blockers. A session that adds a BLOCKED parameter without adding a row here is not complete.

Last swept: Session 8 (2026-07-25), against PROJECT.md, ROADMAP.md, all open GitHub issues, chiwara-attribution-requests.md, and every docs/methodology/*-spec.md. Rows added since the sweep: AR-46 (mass path), AR-47 (raw-earth primary data), AR-48 (mixing-water cut-off confirmation), AR-49 (neat bitumen has no per-kg ÖKOBAUDAT match), AR-50 (gravel has no admissible dataset), AR-51 (PE-film successor is the wrong product), AR-52 (anti-termite factor is a live code defect), AR-53 (RAW_EARTH / EARTH key mismatch), AR-54 (A5 site-energy factor), AR-55 (A5 plant powers and hours), AR-56 (A5 generator double-count), AR-57 (lca.c1 inherits the same uncited 0.26), AR-58 (A5 scope is plant energy only), AR-59 (the glass seed EPD and the workbook's uncited glass factor disagree by ~1.9×), AR-60 (the cooling-load methodology pivot), AR-61 (climate-data legal review), AR-62 (the workbook's latitude-selection defect), AR-63 (seed_epds/ drives no calculation), AR-64 (the B6 kernel is EN ISO 52016-1, RTS rejected), AR-65 (EF_grid unsourced).

AR-54 … AR-58 were raised by the lca.a5 module loop (Session 9). AR-54 gated on AR-56 — whether A5 needs a grid factor at all depends on whether the site ran off its own generator. That question has now been answered provisionally (product-owner statement 2026-08-27: no grid, 100 % diesel generator), so AR-56 is Resolved (provisional) pending Chiwara confirmation and AR-54's sourcing target is a diesel fuel-combustion factor rather than the Senegalese grid factor AR-09 asks for. AR-54 stays open for the value.

AR-50 … AR-53 were surfaced by the Seed-EPD scoreboard pass, which read the 18-material lca.a4 inventory against batch 1 and found four gaps this register did not yet cover. That page is the per-material view of the sourcing backlog below; this page remains the authoritative list of open items.

AR-60 … AR-63 were raised by the climate-data licence clearance (Session 17), which also resolved AR-31. That row asked whether ASHRAE CLTD/CLF/SCL values could be transcribed for calculation; the answer is no, and no available ASHRAE grant would change it — even the paid Software Developer License is non-exclusive to the purchaser and so cannot carry AGPL's downstream-parity requirement. Rather than negotiate for a licence that does not exist, the project migrates off the method: a first-principles kernel driven by NASA POWER (settled by AR-64 as EN ISO 52016-1 hourly). That is AR-60, and because no cooling-load code exists yet it is a from-scratch build rather than a migration. AR-61 carries the residual legal questions to Phase 3; AR-62 records the workbook defect the future module must diverge from rather than reproduce; AR-63 records that the seed-EPD library, four records through the full provenance gate, is read by no calculation code at all.

AR-64 and AR-65 were raised by the B6 operational-energy specification (Session 18). AR-64 finishes what AR-60 started: AR-60 ruled ASHRAE CLTD/CLF/SCL out but left the replacement as "RTS / Heat-Balance or an independently implemented EN ISO 52016-1", and a disjunction is not a decision. The tie is broken on the functional unit — RTS is a design-day peak-load procedure, EN 15978 B6 wants annual energy — which also means it could never have been settled by the licence clearance, since that had cleared both. AR-65 is the B6 twin of AR-54: an emission factor with no citation, and an engine that must refuse to emit carbon rather than default. Both rows are shape-setting, not blocking: energy, thermal and lca.b6 remain scaffolds.

Owner legend

Owner Meaning
Track-B sourcing A dedicated sourcing sub-chat: find a citable factor in a permitted source (ÖKOBAUDAT, IPCC EFDB, INIES, peer-reviewed literature) and produce a seed EPD with full provenance.
Chiwara team The field engineering / architecture team. Answers attribution questions about the Keur Songho and Kalan Deme So projects. See Chiwara attribution requests.
Claude Code Repo work: implementation, tests, docs.
Marco Decisions, external contacts, legal instructions, procurement.
external Third-party legal counsel, project advisors, or a programme operator.
UNASSIGNED — Marco to route No owner is recorded anywhere in the repo. Marco assigns.

1 · SOURCING — the path to any citable number

These are the rows that stand between the tool and its first reportable result. Nothing below this section unblocks a number.

ID Item Category Owner Action required Blocks Status Source
AR-01 A4 road-freight GWP factor (kg CO₂-eq/t·km) for a Senegalese / SSA heavy-goods vehicle SOURCING Track-B sourcing Source from IPCC EFDB or an ÖKOBAUDAT transport EPD (decision #26). Must state capacity utilisation and empty-return treatment per EN 15804+A2. lca.a4 total (15 of 18 materials); lca.c2 via AR-17 Open A4 spec §8, task A4-1
AR-02 A4 sea-freight (container) GWP factor (kg CO₂-eq/t·km) SOURCING Track-B sourcing Source from IPCC EFDB or an ÖKOBAUDAT transport EPD. Must state vessel class. Supersedes the back-solved A4!L11 constant. lca.a4 total (7 sea-freighted materials) Open A4 spec §8, task A4-2
AR-03 Earth A1–A3 GWP factor — primary source required (0.004675 kg CO₂/kg traced only to "Pietro's Thesis") SOURCING Track-B sourcing + Chiwara team Obtain a primary source: Chiwara field measurement, CRAterre, RILEM TC 274-TCE, or Ben-Alon et al. No ÖKOBAUDAT / ICE substitute permitted (decision #26 hard block). lca.a1_a3 EARTH and the A1–A3 total; lca.b4 earth-render fraction Open Attribution item 12 · A1–A3 spec §3.4
AR-04 Crude oil A1–A3 = 134 kg CO₂/kg — ~44× the IPCC combustion factor; likely 134 MJ/kg entered as a GWP value SOURCING Chiwara team Trace the original calculation. Confirm or reject the unit-confusion hypothesis. Confirm whether crude oil is A5 construction fuel rather than an A1–A3 material. lca.a1_a3 PETROLEUM_DISTILLATE and the A1–A3 total Open Attribution item 13
AR-05 Floor tiles A1–A3 = 5.09 kg CO₂/kg — 26.5× the published range; suspected kg CO₂/m² used as per-kg SOURCING Chiwara team Identify the source EPD (operator, number, product), its declared unit, and the tile thickness assumed on Keur Songho (the weight formula uses 5 mm). lca.a1_a3 CERAMIC_TILE and the A1–A3 total Open Attribution item 14
AR-06 Antirust paint — INIES FDES 2-152:2020 (SIPEV) expired June 2025; provisional 4.87 kg CO₂/kg not committable SOURCING Marco Locate a current SIPEV FDES on INIES for solvent-phase alkyd, a valid successor product, or the nearest valid substitute FDES. Antirust seed EPD; lca.a1_a3 antirust leaves PROVISIONAL; the A1–A3 total Open Issue #15 · Antirust investigation §4 BLOCKER 1
AR-07 Aggregate (Rock / Gravel / Sand) ÖKOBAUDAT dataset UUIDs — all three currently share one factor, 0.002854 SOURCING Track-B sourcing Source a per-material ÖKOBAUDAT UUID for each aggregate and replace the shared-factor simplification. Per-material aggregate accuracy; A1–A3 provenance lift Open A1–A3 spec §9
AR-08 First 10 seed EPDs — ÖKOBAUDAT only (decision #25) SOURCING Track-B sourcing Ingest with citation URL, full Weidema-scored proxy_provenance, justification_text, and an integrity test, per the CLAUDE.md seed-EPD provenance gate. Lifting A1–A3 provenance from BLOCKED; services.proxy_engine scale-up Open ROADMAP Phase 1 · Licence clearance
AR-49 376.476 kg neat bitumen (roof coating) has no per-kg ÖKOBAUDAT match. The whole bitumen category (32 records) was searched against the live soda4LCA API: every candidate is either declared per m² or is a formulated product, not neat binder. Candidates = Bitumenbahnen G 200 S4 (27ccffb8-…, EF 3.1, 1 m², composite membrane at 5 kg/m² grammage — bitumen + glass-fleece carrier + mineral surfacing) / Bitumen emulsion (40 % bitumen, 60 % water) (88c0f648-…, EF 3.1, 1 kg, 0.450 kg CO₂-eq/kg — 60 % water by mass) / polymer-modified thick coating (85c48e5f-…, EF 3.1, 1 kg, 1.189 kg CO₂-eq/kg) / Chiwara primary data. Decision deferred — no proxy selected. Note the membrane's 5 kg/m² grammage may not be divided into 376.476 kg to synthesise an area: that grammage is the mass of the whole composite, not of its bitumen fraction. SOURCING Track-B sourcing + Marco (methodology) Decide between (a) the water-diluted emulsion corrected to a neat-bitumen basis, (b) the polymer-modified coating as a like-for-function proxy, (c) the per-m² membrane with a declared unit change to the inventory, or (d) Chiwara primary data on what was actually applied. Whichever is chosen needs a stated normative basis — this is a declared-unit reconciliation, not a like-for-like substitution, so it cannot be settled by picking the nearest number. The sub-chat's original pick (64da45fc-…) is additionally A1-only and carries no GWP-total at all, so it is unusable regardless. The bitumen seed EPD; bitumen's contribution to the lca.a1_a3 total; lca.a4 bitumen mass path Open Seed-EPD value resolution §3 · AR-08
AR-50 Gravel has no admissible ÖKOBAUDAT dataset. Kies 2/32 (3ce61a4e-…) exists only in the A1 generation — it carries the CML Global warming potential (GWP) and no GWP-total at all, so it cannot be used under EN 15804+A2. From v20.23.050 onward ÖKOBAUDAT carries only Kies 2/32 (getrocknet)thermally dried gravel (a7bad3b6-… v20.26.070, EF 3.1, 1 kg, GWP-A1A3 = 0.0349836993382096), which is 12.3× the undried A1 figure because it includes drying energy. A Senegalese site laying pit-run aggregate does not dry its gravel; substituting the dried process silently would inflate gravel A1–A3 by an order of magnitude. SOURCING Track-B sourcing + Marco (methodology) Decide between (a) another programme operator's undried-aggregate EPD, (b) the dried dataset with an explicit, quantified drying-energy deduction and a stated normative basis, or (c) Chiwara / regional supplier primary data. (b) requires a normative basis, not a subtraction of convenience. Distinct from AR-07, which asks for per-material UUIDs to break the shared 0.002854 factor — this row says that for gravel specifically no admissible UUID exists to find. The gravel seed EPD; gravel's contribution to the lca.a1_a3 total Open Seed-EPD value resolution §4 · Seed-EPD scoreboard row 2 · AR-07, AR-08
AR-51 The only EF 3.1 polyethylene-film successor is the wrong product. The sub-chat's pick (49b4cbe9-…) is A1-only with no GWP-total. Its EF 3.1 successor 5f0bc680-… v20.26.070 is PE foil, dimpled — a dimpled drainage/protection membrane, not the plain sheet film laid as a capillary barrier at Keur Songho. Its declared unit (1 m², grammage 1.2 kg/m²) matches the quantities inventory (139.6 m²), so the number will seed cleanly and be wrong in kind rather than in magnitude. SOURCING Track-B sourcing + Chiwara team Confirm with Chiwara which film was actually laid (plain PE sheet, thickness, or a dimpled membrane). If plain sheet, find a plain-film EF 3.1 dataset or accept the dimpled record as a flagged proxy with the geometry difference stated in justification_text — a dimpled membrane carries materially more polymer per m² than plain sheet. Do not seed on the unit match alone. The polyethylene-film seed EPD; its proxy_provenance technological axis Open Seed-EPD value resolution §2, §10.4 · Seed-EPD scoreboard row 10 · AR-08
AR-59 The glass seed EPD and the workbook's glass factor disagree by ~1.9×, and the workbook side is uncited. LCI Final!I16 builds the glass factor as =9.71*(1/0.006)*(1/2200) — a base of 9.71 kg CO₂-eq/m² at 6 mm on an assumed density of 2200 kg/m³, giving 0.7356 kg CO₂-eq/kg. The base 9.71 carries no citation of any kind. The newly seeded ÖKOBAUDAT record (glass.json, e94dbfcc-… v00.00.016, EF 3.0, Bundesverband Flachglas association M-EPD) declares 3.06 kg CO₂-eq/m² at 1 mm on a density of 2500 kg/m³; scaled to the same 6 mm basis that is 18.36 kg CO₂-eq/m² (1.224 kg CO₂-eq/kg) — 1.89× the workbook figure on an area basis, 1.66× per kg. The density assumption is the suspected driver but is unconfirmed, and note that it does not account for the whole gap on its own: 2500/2200 explains only a factor of 1.14, leaving the remaining ~1.66× unexplained. Same shape as AR-05 (floor tiles), where a per-m² figure is suspected of having been used as per-kg. SOURCING Chiwara team + Marco (methodology) Chiwara: trace the origin of the base 9.71 — which EPD or dataset, which programme operator, which declared unit and which glazing thickness — and confirm the 2200 kg/m³ density and the 6 mm thickness the workbook assumes. Marco (methodology): on that answer, decide whether the seeded ÖKOBAUDAT record supersedes the workbook base outright, or whether the workbook figure is recoverable as a CORRECTED formula with a divergence test per decision #23. Do not reconcile by picking the nearer number: one side is uncited, so this is a provenance question before it is an arithmetic one. Claude Code — fold into the B3b session, not a separate one: B3b touches a1_a3.py for the cement factor and leans on this same gate, so add a one-line docstring clarification there distinguishing module-level BLOCKED (factor = None, hard block) from provenance_verdict = BLOCKED (weak citation; a computed value is still permitted for interim source classes). Same file, zero extra discovery cost. lca.a1_a3 GLASS. The seeded record is deliberately not wired into a1_a3.py — the module still carries the workbook factor with provenance_verdict = BLOCKED, geographic_provenance = OKOBAUDAT_INTERIM and status = COMPUTED, so the glass factor stays unresolved until this row is reconciled. The AR-52 resemblance was raised and has been answered — it is not the AR-52 defect recurring. Marco, 2026-08-28: BLOCKED carries two different meanings in this file, and nothing in the code says so. (i) The module-level gate (a1_a3.py docstring, lines 11–16) — factor = None, no value emitted at all — is reserved for materials with no defensible source whatsoever (earth, crude oil, floor tiles). Glass is not on that list. (ii) The provenance_verdict field on each _Factor means something narrower: this citation is weak or interim, not this material has no data. Glass's geographic_provenance = OKOBAUDAT_INTERIM is an explicitly permitted lower-confidence source class, unlike pesticide's uncited-chemical class, which decision #26 bars outright. So glass carrying provenance_verdict = BLOCKED and status = COMPUTED is by design, and functionally correct as it stands. What remains is a naming and documentation hazard, not a logic bug: one enum value meaning two things depending on which field it is attached to is precisely why a careful reader flagged it as AR-52 recurring. Open glass.json justification_text (records this divergence and explicitly does not resolve it) · backend/app/domains/lca/a1_a3.py:298 · Seed-EPD value resolution · AR-05, AR-08, AR-52
AR-09 Senegal grid emission factor — workbook B1!D5 = 1.1 kg CO₂/kWh, unverified SOURCING Track-B sourcing Verify against IEA World Energy Statistics or IPCC EFDB before lca.b6 is implemented. Decision #26 blocks EU grid factors for energy-linked stages. lca.b6; also lca.a5 and lca.c1 (same African-grid rule) Open PROJECT.md decision #26
AR-54 A5 site-energy GWP factor (kg CO₂-eq/kWh) — A5!F5:F7 = 0.26 is BLOCKED. A bare literal repeated in all three plant rows, with no source column, no cell comment and no legend anywhere on the sheet. Decision #26 names A5 construction energy an energy-linked stage and BLOCKS EU grid factors outright; 0.26 sits in the EU-average band. The same workbook carries a Senegal grid factor at B1!D5 = 1.1 kg CO₂/kWh4.2× larger, unreconciled, and itself unverified (AR-09). And the largest consumer is a diesel generator, which draws no grid electricity at all: its per-kWh factor is a fuel-combustion quantity, so a grid-shaped number is a category error here whatever grid it came from. SOURCING Track-B sourcing Source the Senegalese national grid factor from IEA World Energy Statistics or IPCC EFDB, per decision #26 — the same value AR-09 asks for, so AR-09 closes this row. AR-56 has since answered which carrier to source for, provisionally: the site is taken as 100 % diesel-generator-powered with no grid connection (product-owner statement 2026-08-27). So A5 needs a diesel fuel-combustion / genset factor, not a grid factor — source that, and note that AR-09's Senegalese grid factor therefore no longer closes this row on its own. The carrier decision is provisional pending Chiwara confirmation; the value is what keeps this row open. lca.a5 GWP total (all 3 plant items); lca.c1 via AR-57 Open (module raises) A5 spec §4.1, §9 · AR-09, AR-56, AR-57
AR-10 C3 / C4 disposal rates and GWP factors — no normative source; PE-film C3 factor from an unnamed "Poland company's EPD" drives 79.5% of C3 SOURCING Chiwara team + Track-B sourcing Identify the PE-film EPD; explain the anomalous steel C4 factors (7.18 kg CO₂/kg vs <0.01 typical for inert landfill); source paint C4 and earth C3 factors. lca.c3, lca.c4 Open Attribution item 10 · B4/C3/C4/D spec §4.3, §5.3
AR-11 Module D recycling credits — L = −I is a gross avoided-burden credit; EN 15804+A2 §6.4.3.2 requires net flows SOURCING Chiwara team + Track-B sourcing Document the secondary-processing burden for earth / rock / gravel; identify the source of the pre-computed steel D credits (−1.48, −1.01, −1.48). lca.d Open Attribution item 11 · B4/C3/C4/D spec §6.3
AR-12 B4 replacement parameters — RSL, % Finishes, and study period all uncited (workbook hardcodes 10 yr RSL for every material) SOURCING Chiwara team Supply per-material RSL with basis, confirm the % Finishes fractions, and settle 30 yr (decision #15) vs 50 yr (workbook B1!C5) study period, with named attribution. lca.b4 (every material) Open Attribution item 8 · Issue #11
AR-47 Raw-earth primary data package — (a) bulk density of the Keur Songho raw earth as placed (kg/m³), (b) A1–A3 GWP for local earth extraction + preparation, (c) the same pair for the BBSC binder and the adobe/BBSC production process, if primary data exists. One request, not three: (a) is the density AR-46 needs to rebuild the mass path and (b) is the factor AR-03 needs — a citable earth number requires both halves of E = weight × factor from the same source package. SOURCING Chiwara team Supply the as-placed bulk density from a lab test, a field measurement, or a CRAterre reference — the 1 800 kg/m³ implied by LCI Final (1 494 888.525 kg ÷ 830.5 m³) is back-solved from the workbook and inherits AR-22, so it is not citable. Supply the A1–A3 GWP with a citable source: Chiwara primary measurement, CRAterre, RILEM TC 274-TCE, or Ben-Alon et al. (2020). ÖKOBAUDAT is not permitted for earth — decision #26, enforced as the LCI Final!I6 hard block in lca.a1_a3 — so no European substitute may be used and this can come only from Chiwara or CRAterre. If no primary data exists, say so explicitly: that BLOCKED state is itself the finding to record. Earth is the largest material in the reference building (751.9 m³ corrected). Blocks lca.a1_a3 EARTH jointly with AR-03, the A1–A3 total, lca.b4 earth render, and the AR-46 mass-path rebuild. BBSC data additionally feeds AR-15. Open Attribution item 15 · A1–A3 spec §3.4 · AR-03, AR-15, AR-46
AR-13 Ciroth 2016 / Brightway2 basic uncertainty-factor table SOURCING UNASSIGNED — Marco to route Source the table via a Phase-1 Step-1 sub-chat so pedigree scores can be converted to GSD². services.pedigree; therefore services.uncertainty Open ROADMAP Phase 1 opener

| AR-65 | EF_grid — the B6 operational electricity emission factor (kgCO₂e/kWh) — is unsourced, and B6 carbon output is BLOCKED until it is not. The B6 chain ends g_B6 = (E_del,C + E_del,H) · EF_grid, so every operational-carbon number the tool could report rests on this one factor. There is no national default and none may be added: an embedded grid factor is exactly the uncited literal that decision #26 and the A5 blocker (AR-54) exist to prevent. The B6 spec fixtures use 0.5 (Senegal) and 0.55 (Burkina Faso) kgCO₂e/kWh purely so the worked arithmetic is checkable; they are indicative placeholders, not sourced values, and carbon scales linearly with whatever replaces them. | SOURCING | Track-B sourcing | Source EF_grid for Senegal and Burkina Faso from the IEA Emission Factors dataset, which from its 2023 edition carries detailed national data for both countries (Senegal has been an IEA Association country since June 2023), with the IEA Life Cycle Upstream Emission Factors database (150 countries, 2015–latest) for the upstream component. Record with the value: year, edition, location-based vs market-based, and life-cycle vs combustion-only — a combustion-only factor silently understates B6. Note the licence constraint: IEA terms are restrictive, so the value is user-supplied at runtime and never vendored into the public repo (B6 spec §9). That makes this row unlike the ÖKOBAUDAT sourcing rows — what is sourced here is a documented procurement path plus provenance fields, not a committable number. | lca.b6 operational-carbon output only. Thermal and electricity figures are unaffected and must still be produced (Q_C, Q_H, E_del) — the engine refuses the carbon number, not the whole result. | Open | B6 spec §4.11, §9 · AR-54, AR-09, decision #26 |

2 · DEV-BLOCKER — code that cannot be written or run

ID Item Category Owner Action required Blocks Status Source
AR-14 Slab mesh specification (row 51) — the 300 kg/m³ RC slab has no rebar formula; naive application of 100 kg/m³ would move project steel by +163% DEV-BLOCKER Chiwara team Supply mesh type / bar diameter / spacing or an equivalent kg/m³ or kg/m², plus who specified it and whether it comes from a standard. quantities row 51; project steel total; every downstream steel impact Open (module raises) Attribution item 1 · Issue #4
AR-15 BBSC composition (rows 15, 17, 32, 38) — modelled as pure quarried rock; acronym never expanded; binder and water absent from the LCA DEV-BLOCKER Chiwara team Expand the acronym; give the composition per brick (earth, binder, aggregate, water) and its source; confirm whether 0.0002 m³/brick means anything. quantities rows 15/17/32/38; EN 15804+A2 §6.3.3 completeness Open (module raises) Attribution item 2
AR-16 Anti-termite reference area — the workbook uses roof area (289.15 m²) for a foundation treatment DEV-BLOCKER Chiwara team Supply the foundation plan area, or treated perimeter × depth; confirm the 5 L/m² rate against a product datasheet; name and date the specifier. test_c5_anti_termite_area_attribution is XFAIL until resolved Open (XFAIL) Attribution item 4 · Issue #7
AR-17 lca.c2 inherits the BLOCKED A4 road factor DEV-BLOCKER Claude Code Do not implement lca.c2 against the uncited 0.26 value. Wait for AR-01, then implement both against the same sourced factor. lca.c2 implementation Open A4 spec §8, task A4-6
AR-18 76 Devis Descriptif BoQ items → MaterialCategory mapping table DEV-BLOCKER Claude Code (sub-chat) Produce the mapping table for 1a_boq_input_lca.xlsx, stored as versioned project data. Note: the ROADMAP still describes the superseded french_devis → uniclass → ifc form; decision #19 replaced it with MaterialCategory. Generic BoQ ingestion beyond the hardcoded Keur Songho case Open PROJECT.md decision #19
AR-46 _KEUR_SONGHO_WEIGHTS_KG mass path is pre-correction — extracted from 2_lca_vn.xlsx LCI Final column F, so it embeds the C1 gravel/sand transposition, the C2 full-circle vault arc (earth 830.5 m³ vs the corrected 751.9 m³, −9.5%) and pre-C4 glass. lca.a1_a3 and lca.a4 currently multiply corrected-era factors by spec-era masses. DEV-BLOCKER Claude Code Rebuild the kg path from the corrected quantities m³ × a sourced density per material (plus areal density for polyethylene film, thickness + density for ceramic tiles). Densities fall under the seed-EPD provenance gate — the 12 densities back-solvable from LCI Final are not citable (they inherit AR-22). Add a regression test tying mass to compute_keur_songho() output so the two cannot drift. This row also owns the unit-base mismatchquantities emits each material in its native unit (m³, m², L, kg) while lca.a1_a3 and lca.a4 consume kg for all eighteen, and the workbook says so in its own labels: A4!F14 = 5025.6 sits in a column headed Weight (kg) on a row labelled polyethylene film(m²). Corrected quantities gives 139.6 m² of PE film and 303.36 m² of floor tiles, which reconcile with neither 5 025.6 nor 3 379.898 by any density. The EF 3.1 datasets for both materials are declared per m² and match the quantities path, not the per-kg path. No separate row is opened for this — it is the same rebuild. Not the current build — both aggregates are already None, and the a1_a3/a4 parity tests assert Excel replication, so they stay green. Blocks the first citable number: the moment AR-01…AR-06 land a factor and a total stops being None, that total's mass basis contradicts the tool's own quantities module. Open (no code fix attempted) Issue #23 · backend/app/domains/lca/a1_a3.py:400 · quantities reconciliation §3
AR-52 lca.a1_a3 emits an uncited number for a material decision #26 bars outright. Anti-termite (PESTICIDE) is returned with status = COMPUTED and factor = 0.650 — a bare literal from LCI Final!I17 with no source note of any kind. Decision #26 classes pesticide / termiticide as a speciality chemical product and makes it BLOCKED unless a supplier EPD from an approved programme operator is on file. None is. The record already carries provenance_verdict = BLOCKED and geographic_provenance = BLOCKED, and still reports a value: the module contradicts its own provenance verdict, and 1 445.75 kg of anti-termite currently contributes to a result that would present as computed. This is a live defect in shipped code, not a sourcing backlog item — the loud-failure rule of decision #23 is not being applied where the policy says it must be. DEV-BLOCKER Marco (methodology) + Claude Code (fix) Marco: confirm that decision #26's speciality-chemical clause binds PESTICIDE, i.e. that 0.650 may not stand as an interim. Claude Code, on that confirmation: set factor = None, formula_verdict = BLOCKED, status = BLOCKED with a blocked_reason citing decision #26, so factor_for(PESTICIDE) raises ValueError like Earth, Crude oil and Floor Tiles already do; add the regression test. Reversible only by a cited supplier EPD (which is AR-08 work) or a named EXPERT-JUDGEMENT attribution — and decision #23 forbids EXPERT-JUDGEMENT for impact factors, so in practice only the EPD clears it. Correctness of any A1–A3 figure that includes anti-termite. Today the A1–A3 total is None for other reasons, so nothing user-facing is wrong yet — the defect surfaces the moment AR-03…AR-06 clear and the total starts reporting. Distinct from AR-16, which questions the reference area (roof area used for a foundation treatment); this row questions the factor. Both must clear before anti-termite is defensible. Resolved (anti-termite now returns None/raises like the other BLOCKED materials; regression test added) PROJECT.md decision #26, speciality-chemical clause · backend/app/domains/lca/a1_a3.py:312 · Seed-EPD scoreboard row 15, §5 · AR-16
AR-53 quantities and the LCA stages key earth on different enum members, so they cannot be wired together. quantities emits MaterialCategory.RAW_EARTH (quantities/__init__.py:600); lca.a1_a3 (a1_a3.py:137) and lca.a4 (a4.py:232) both key on MaterialCategory.EARTH. Both members exist in the enum and no module maps between them, so passing the quantities output to either stage raises KeyError: "No A1-A3 factor defined for category <MaterialCategory.RAW_EARTH: 'raw_earth'>" / "No Keur Songho A4 transport legs defined for …" — verified, not inferred. Latent today only because both stages read the hardcoded _KEUR_SONGHO_WEIGHTS_KG instead of calling quantities. DEV-BLOCKER Claude Code Settle on one member for raw earth and make the other an explicit, tested alias or mapping — do not silently accept both. Add a regression test asserting that every category compute_keur_songho() emits resolves in both lca.a1_a3 and lca.a4, so the two taxonomies cannot drift apart again. Decide alongside AR-46 rather than before it: AR-46's rebuild is the code that first joins these two modules, and the key mismatch is the first thing it will hit. Nothing today. Blocks AR-46 the moment its mass-path rebuild connects quantities to the LCA stages — which is the point of AR-46. Also bears on AR-47: a Chiwara earth data package resolves the factor and the density, and this row decides which enum member that value is filed under. Open backend/app/domains/quantities/__init__.py:600 · backend/app/domains/lca/a1_a3.py:137 · backend/app/domains/lca/a4.py:232 · Seed-EPD scoreboard §4.1 · AR-46, AR-47
AR-56 The A5 sheet may double-count the site's electricity, and nothing in the workbook settles it. Row 5 is a generator; rows 6 and 7 are electrically-driven machines. On an off-grid rural Senegalese site those machines run off that generator — in which case the generator row already accounts for the energy converted from fuel and the machine rows count the same energy again as load. The workbook never states whether the site was grid-connected, and the Pedrazzi thesis records no site-power arrangement, so the spec records the ambiguity rather than correcting it (choosing a correction would be inventing scope). Note the internal inconsistency that prompted the question: 2 h/day of generator run-time against 4 h/day of welding. METHODOLOGY Marco (methodology) + Chiwara team Decided provisionally 2026-08-28, on the product owner's statement of 2026-08-27: the Keur Songho site had no grid connection — 100 % of its A5 site electrical energy is taken as diesel-generator-supplied, "until specified otherwise." This is a product-owner statement, not a Chiwara field confirmation: it is recorded as provisional and this row must not be closed as final until the Chiwara team confirms the site power arrangement. On that basis the electrically-driven machines in rows 6 and 7 ran off the generator in row 5, so the double-count this row describes is real and the outstanding work is the formula choice — (a) fuel in → generator only, machines attributed as load within it, or (b) machine kWh × a genset kWh factor with the generator row dropped. Either way the correction is a formula change with a divergence test, not a factor substitution. Still to do: Chiwara confirmation, then (a) or (b). Nothing today — every A5 row is BLOCKED on AR-54 anyway, so no double-counted number can reach a report. Unblocks AR-54's sourcing on a diesel-generator basis: the carrier is now settled provisionally, so a sourcing sub-chat looks for a diesel fuel-combustion / genset factor and not a Senegalese grid factor. AR-54 itself remains open — the carrier is decided, the emission-factor value is not. Resolved (provisional — product-owner statement 2026-08-27: 100 % diesel generator, no grid, "until specified otherwise"; pending Chiwara confirmation, not final) A5 spec §4.3 · AR-54
AR-57 lca.c1 inherits the same uncited 0.26 by cell reference. C1(Demolition)!C5 = 'A5'!$C$5 imports the A5 generator power directly and applies the identical G = C*E*F form with E5 = 10*8 = 80 h and the same F5 = 0.26 literal, giving C1!G5 = 574.08 kg CO₂-eq. Exactly the shape of AR-17, where lca.c2 inherits the BLOCKED A4 road factor. DEV-BLOCKER Claude Code Do not implement lca.c1 against the uncited 0.26. Wait for AR-54, then implement A5 and C1 against the same sourced carrier — and note that AR-56's answer binds C1 too, since C1's only consumer is that same generator. A fixture recording the C1 figures is already in place (C1_GENERATOR_HOURS, C1_GENERATOR_IMPACT_KG_CO2 in backend/tests/fixtures/test_a5_construction.py), tested against the A5 primitives. lca.c1 implementation Open A5 spec §4.5 · AR-54, AR-17
AR-58 lca.a5 ships a deliberately partial A5, and v1 has not declared which sub-scopes it covers. EN 15804+A2 §6.3.4.4 / EN 15978 §7.4.4 place seven things in A5. 2_lca_vn.xlsx contains one of them — on-site plant energy. Absent entirely: material installation losses (the A1–A4 burden of the wasted fraction plus its C1–C4 treatment — non-trivial for earth-wall construction), on-site water for mixing/curing/compaction (which interacts with AR-48), packaging waste treatment, temporary works (formwork, scaffolding, site accommodation), transport of plant and workers, and site earthworks. The module computes what the reference calculation computes and invents nothing; A5Result.scope_note states the omission on every response so the figure cannot read as a complete A5. METHODOLOGY Marco (methodology) Decided 2026-08-27 (Marco): v1 declares A5 as on-site plant energy only. Every other EN 15804+A2 §6.3.4.4 sub-scope — material installation losses and their A1–A4 plus C1–C4 burden, on-site water, packaging waste, temporary works, transport of plant and workers (haul energy within A5), and site earthworks — is out of v1 scope by declaration, recorded as a scope limitation under EN 15804+A2 §6.3.5 rather than carried as a data gap. A5Result.scope_note already states the omission on every response, so no reported figure can read as a complete A5. Revisit for v2, or earlier if a critical reviewer requires a quantified cut-off; installation losses are the first candidate, being the one an ISO 14071 reviewer is most likely to raise against an earth-construction study. Completeness of any reported A5. Not the value — AR-54 blocks that — but the claim that the value is an A5. Now a declared limit rather than an open question. Resolved (v1 scope declared: plant energy only; all other A5 sub-scopes are a declared EN 15804+A2 §6.3.5 scope limitation, carried in scope_note) A5 spec §8 · AR-48
AR-60 Methodology pivot — the cooling-load calculation moves from table lookup to first-principles computation, and the climate data source is fixed. Decided 2026-08-29 on the climate-data licence clearance, following AR-31. Out: ASHRAE CLTD/CLF/SCL table lookup indexed by latitude band. In: a first-principles kernel with coefficients computed in project code, driven by open climate data. (Which kernel was left open by this row as "RTS / Heat-Balance or an independently implemented EN ISO 52016-1"; AR-64 has since settled it as EN ISO 52016-1 hourly, on a functional-unit argument.) Coefficients are derived from layer properties, driven by NASA POWER (US-Government open data, no copyright, full AGPL downstream parity) as the primary climate source, with ERA5/Copernicus and PVGIS as attribution-bearing secondary options. This is a from-scratch build, not a migration — there is no cooling-load code to move. domains/energy, domains/thermal and lca.b6 are five-line scaffolds with no logic, and services/interpolation.py is a NotImplementedError stub with zero call sites across backend/. Nothing is discarded; the decision changes what gets built, before anything is built. Note also that the hemisphere-transform concern raised by the interpolation-status audit — ASHRAE tabulating northern latitudes and needing a six-month shift for southern-hemisphere projects — is moot: NASA POWER has no hemisphere-specific data gap. METHODOLOGY Marco (decision, taken 2026-08-29) + Claude Code (build) Marco: decided; no further decision needed. Claude Code, when the module loop reaches it: (1) build a climate-data service against the NASA POWER API with the response cached and provenance-stamped per the seed-EPD discipline; (2) build the EN ISO 52016-1 hourly kernel (per AR-64) with the coefficients derived in code, and a divergence test rather than a parity test against the workbook (AR-62); (3) implement services/interpolation.py for spatial grid-point interpolation — the METHODOLOGY.md §5a rules survive unchanged in substance and now govern bilinear interpolation between the four surrounding NASA POWER grid points; (4) embed the NASA POWER / ERA5 / PVGIS attribution strings (AR-61 item 3). Documentation follow-up — opened Session 17, closed Session 18. Three PROJECT.md sites carried the same ASHRAE-to-NASA-POWER staleness: decision #17 (line 43) still named CLTD/CLF as the B6 method, the “Cross-cutting schema conventions → Data table interpolation” convention (line 275) and the #### Reference workbooks note (line 285) both used ASHRAE latitude bands as the motivating case. Session 17 left PROJECT.md untouched by choice — it is the locked-decisions record and was outside that session's scope. Session 18 resolved all three together: decision #17 amended to EN ISO 52016-1 hourly under AR-64, line 275 re-anchored on NASA POWER grid nodes with the bilinear case made explicit, and line 285 kept its factual ASHRAE description of the reference workbook but gained the supersession note. The decision-review issue that a locked-decision amendment requires is still to be opened — carried on AR-64. energy, thermal, lca.b6, and services.interpolation — all four are unbuilt, so nothing is blocked today. It sets the shape of all four when they are built, and it is the row that stops a future session transcribing the workbook's ASHRAE chain by default. Open (decision made; build not started) Climate-data licence clearance §6.1–§6.3, §7 · METHODOLOGY.md §5a · AR-31, AR-61, AR-62
AR-62 The reference workbook does not interpolate to the project's latitude, and its cooling-load chain is built on the wrong band. In reference/excel/1c_energetic_analysis.xlsx, sheet LM Lat- month corr, the “Chosen correction” block U6:AA16 — the block the entire (CLTD+LM)DTE corrCalcul par mois chain reads — contains hard literals, not formulas, and those literals are bit-for-bit the 12°N block (all 77 cells match L30:R40 to < 1e-9, verified with openpyxl at data_only=False). There is no latitude input cell anywhere in the workbook: latitude enters the model only through which band a human pasted into U6:AA16. So Keur Songho at 14.7°N is computed on the 12°N correction — not the interpolated value, and not even nearest-neighbour (16°N is 1.3° away, 12°N is 2.7°). Quantified against the true interpolated value at w = (14.7 − 8)/(16 − 8) = 0.8375: mean absolute Δ = 0.341 K, typical 0.75 K, max 1.687 K across the 77-cell block. LM adds directly to base CLTD in kelvin and CLTD drives q = U·A·CLTD; base CLTD on these sheets runs 5–20 K, so 1.687 K is an 8–30 % error on that surface-hour's cooling load — three orders of magnitude outside the 0.1 % parity band. This is the exact practice METHODOLOGY.md §5a rule 4 forbids, and §5a names this very case. DEV-BLOCKER Claude Code When the cooling-load calculation is eventually built, do not transcribe this chain from the workbook. Latitude selection is a CORRECTED formula under decision #23 Axis 1: implement real interpolation to the project's actual coordinates and assert it with a divergence test in backend/tests/fixtures/ against the true interpolated value, citing the normative basis. A parity test here would make the defect part of the acceptance criteria and ship it. Under AR-60 the concrete target is no longer a latitude band at all — it is bilinear interpolation between NASA POWER grid points — but the divergence obligation stands: the workbook's number is a requirement artefact to diverge from, not an oracle to match. Nothing today — energy and lca.b6 are scaffolds. Blocks the correctness of the first cooling-load number the tool ever reports, and it is a finding an ISO 14071 reviewer would raise against any B6 result derived from this workbook. Open Interpolation-status audit §4.4–§4.5 · PROJECT.md decision #23 · AR-60
AR-63 The seed-EPD library is not wired to any calculation — seed_epds/ and a1_a3.py are two parallel, disconnected systems. backend/app/data/seed_epds/ holds four provenance-scored, CI-validated openEPD JSON records (ceramic tile, glass, PE film, steel profile), each through the full provenance gate. No code under backend/app/ reads any of themgrep -rn 'seed_epds' backend/app/ --include='*.py' returns zero hits; the only references anywhere in backend/ are in backend/tests/data/test_seed_epd_integrity.py, which validates the files as data. Meanwhile all 18 A1–A3 material factors in backend/app/domains/lca/a1_a3.py are inline Python literals (18 _Factor(...) constructions feeding _FACTOR_BY_CATEGORY, read by factor_for()). The tool's provenance gate therefore guards a library that currently drives nothing. DEV-BLOCKER Claude Code Decided 2026-08-29: do not attempt a full 18-material migration now — that is a real refactor with a schema seam (declared units, per-m² versus per-kg bases, AR-46's mass path) and it is out of scope for a docs session. Instead: the B3b session establishes the seed_epds/-first lookup pattern in factor_for() for the materials it seeds — the roadmap's clean-record batch of cement-VDZ, rebar, crushed rock and sand — as real proof that the seed system can drive a calculation rather than sit beside one. The four already-vendored records (ceramic tile, glass, PE film, steel profile) are not wired in the same pass: glass is held by AR-59, and the other three are per-m²/per-kg basis questions that belong with AR-46. The remaining fourteen materials stay inline literals and are tracked here as explicit debt, not silently left behind. Nothing today — every A1–A3 total is already None for want of factors. Blocks the claim that the seed-EPD provenance gate governs the numbers the tool reports, which is exactly what an ISO 14071 reviewer will test. Open (scoped: B3b establishes the pattern for 4 materials; 14 remain inline) backend/app/domains/lca/a1_a3.py · backend/app/data/seed_epds/ · Seed-EPD scoreboard · AR-46, AR-59

| AR-64 | The B6 kernel is EN ISO 52016-1 hourly; ASHRAE RTS / Heat-Balance was evaluated and rejected. AR-60 migrated the project off ASHRAE CLTD/CLF/SCL but left the replacement as a disjunction — "an RTS / Heat-Balance kernel or an independently implemented EN ISO 52016-1". This row closes that disjunction, and the argument that closes it is the functional unit, not accuracy and not licence. RTS answers what is the peak design cooling load (kW) for equipment sizing; ASHRAE Handbook—Fundamentals (2021) Ch. 18 states it "is suitable for peak design load calculations, but it should not be used for annual energy simulations due to its inherent limiting assumptions." EN 15978 module B6 requires annual operational energy (kWh/m²·a). EN ISO 52016-1 is a whole-year 8760-hour dynamic method that produces exactly that, sits inside the EPB suite (EN ISO 52000-1 / 52017-1) that underpins EN 15978, computes heating and cooling in one engine — needed for highland SSA sites — and represents the decrement and time lag of massive earth walls through a per-element RC node network. Licence did not decide this: the climate-data clearance had already cleared both candidates, RTS/CTF coefficients from first principles and an independently implemented EN ISO 52016-1 alike, which is why the choice needed its own determination rather than falling out of AR-31. | METHODOLOGY | Marco (decision, 2026-08-29) + Claude Code (build) | Marco: one action outstanding — open the decision-review GitHub issue for the PROJECT.md decision #17 amendment (Session 18 amended it in place; per CLAUDE.md a locked-decision change is tracked by an issue, and none exists yet). Claude Code, when the module loop reaches it: (1) build the EN ISO 52016-1 hourly kernel per B6 spec §4, keeping the Tier-0 monthly method of §4.8 as a permanent cheap cross-check; (2) vendor NASA POWER climatology per decision D-ENERGY-01 (B6 spec §2.5) with the §2.6 provenance sidecar — do not fetch live on the test path; (3) implement the interpolation service against two grid definitions, 0.5°×0.625° meteorology and 1°×1° radiation, and write the nearest-neighbour-rejection and antimeridian tests first (§3); (4) lock the Dakar and Ouagadougou fixtures of §5, and the southern-hemisphere mirror test of §8 item 4. Do not write a parity test against 1c_energetic_analysis.xlsx — AR-62 stands. | energy, thermal, lca.b6 and services.interpolation — all four unbuilt, so nothing is blocked today. It fixes the shape of all four before a line is written, and it is the row that stops a future session reaching for RTS because AR-60 left it on the table. | Open (decision made; build not started; decision-review issue not yet opened) | B6 spec §1.1–§1.2 · §1.4 scope guard · §4 calculation chain · AR-31, AR-60, AR-62, AR-65 |

3 · ATTRIBUTION — named provenance required before a value is defensible

These do not stop the code from running, but each one is a finding an ISO 14071 reviewer will raise. EXPERT-JUDGEMENT is permitted only with a named person, date, and stated basis.

ID Item Category Owner Action required Blocks Status Source
AR-19 Origin of the constant 182.4 in A4!L11 — divided by rebar mass × route length to manufacture a rate, then broadcast to all sea-freighted materials ATTRIBUTION Chiwara team Identify who computed it, from what, in what units. If unrecoverable, AR-02 supersedes it entirely. A4 audit trail Open A4 spec §8, task A4-3
AR-20 A4 distances — truck 23 / 32 / 88 km and sea 21 279 / 4 834.58 km ATTRIBUTION Chiwara team Author, date, measurement basis; and the meaning of the 19155+2124 and 4830.93+3.65 segment splits. A4 audit trail Open A4 spec §8, task A4-4
AR-21 A4 on-site (zero-transport) assumption for water, crude oil, waste oil ATTRIBUTION Chiwara team Confirm the Keur Songho water source is an on-site borehole; confirm the oils arrive with plant rather than hauled separately. A4 audit trail (3 materials currently COMPUTED at exactly 0) Open A4 spec §8, task A4-5
AR-22 "OMPU" reference document — the implied source of every conversion factor in the BoQ workbook, never expanded anywhere ATTRIBUTION Chiwara team Identify the document (full name, publisher, edition), whether it is a Senegalese BTP norm / company standard / university reference, whether it is digital, and whether its licence permits citation. Moving the whole quantities factor table from PROVENANCE UNKNOWN to SOURCED Open Attribution item 3
AR-23 Steel density for fenestration — no volume→mass conversion exists in the workbook ATTRIBUTION Marco + Chiwara team Confirm the steel grade, and approve 7 850 kg/m³ (EN 10025) as the project-wide default with named attribution, or supply a project value. Fenestration steel impact in every module (EPD factors are per kg) Open Attribution item 5
AR-24 Sand density 1 600 kg/m³ — stated only in row 72 (Tyrolean plaster) ATTRIBUTION Chiwara team Confirm whether it is project-wide or specific to row 72, and its source (lab test, reference table, assumption). Extension of the density to other rows Open Attribution item 6
AR-25 Antirust paint — solvent-phase (4.87) vs water-phase (3.23 kg CO₂/kg); ~34% apart ATTRIBUTION Chiwara team State which product phase Chiwara specifies, with product name / supplier if available, named practitioner and date. Antirust seed EPD — must clear together with AR-06 Open Attribution item 7 · Antirust investigation §4 BLOCKER 2
AR-26 Crude oil and waste oil scope in B4 — crude oil generates 47.9% of the entire B4 total, with no stated maintenance activity, and contradicts the workbook's own "burned in A1-3" note ATTRIBUTION Chiwara team Name the maintenance activity; confirm whether crude oil belongs to B4 or A5; same for waste oil and its frequency over the study period. lca.b4 — verdict B4-F2 is CORRECTED (crude oil B4 → 0) if confirmed non-B4 Open Attribution item 9
AR-27 Nubian vault brick dimensions (0.42 × 0.22 × 0.18 m) behind the derived water:earth ratio 0.2585 ATTRIBUTION Chiwara team Confirm whether these are a CRAterre / Voûte Nubienne Association standard or project-specific. A published standard moves the ratio from EXPERT-JUDGEMENT to SOURCED. quantities vault water provenance Open Attribution requests, open question
AR-48 Mixing water carried at A1–A3 GWP = 0 on the strength of "standard LCA convention" (LCI Final!I7 = literal 0, note "NA"), not as a declared EN 15804 cut-off with a named confirming party ATTRIBUTION Chiwara team Confirm that a formal EN 15804+A2 §6.3.3 cut-off exclusion of mixing water — 299 583.55 kg on Keur Songho, A1–A3 GWP = 0 — is acceptable for the earth-vs-conventional comparison, i.e. that no comparative assertion turns on it. Name and date the confirming party. A low-stakes confirmation, logged here rather than asked off-channel so the audit trail carries it. Nothing computationally — water is COMPUTED at exactly 0 today. Blocks reclassifying water in the audit trail from an undeclared convention to an attributed, declared cut-off, which is what an ISO 14071 reviewer will look for. Open Attribution item 16 · A1–A3 spec §3.5
AR-55 A5 site-plant powers and usage hours — 27.6 / 4.8 / 12 kW and =10*2 / 10*1 / 10*4 h — have no attribution of any kind ATTRIBUTION Chiwara team Identify the plant: make, model, rating-plate output, or the hire docket. 27.6 kW is an oddly precise genset figure (standard ratings cluster at 20/25/30 kVA). Confirm the reading of the usage cells — the leading 10 appears to be site days and the second multiplicand hours/day, but the workbook never says so, and a 10-day construction period for a school complex whose earth walls alone run to hundreds of tonnes is implausible on its face. Give author, date and basis. Nothing computationally — these are project inputs, used as given, and every result carries its source cell in power_source / usage_source. Blocks the A5 audit trail: a wrong power or duration scales a number that is already None for want of AR-54. Open A5 spec §4.2, §4.4

None of these blocks calculation. All of them block Phase 3 (repo public, docs site published, seed EPD library released).

ID Item Category Owner Action required Blocks Status Source
AR-28 ÖKOBAUDAT DL-DE-BY-2.0 attribution compliance — exact wording for docs site, API responses, exported reports LEGAL Marco + external Confirm the wording satisfies DL-DE-BY-2.0 §3 with a German public-law specialist or the BMWSB contact, then embed it in all three surfaces. First seed EPD publication (AR-08); public release Open Issue #16, item 3 · Licence clearance §5
AR-29 EF 3.1 characterisation factor redistribution terms — used in every EPD impact computation, terms not clearly published LEGAL Marco + external Obtain a legal opinion or written confirmation from the EC Joint Research Centre. Public release Open Issue #16, item 1
AR-30 EPDASA written redistribution confirmation LEGAL Marco Contact the EPDASA programme operator for written redistribution terms. Treat as BLOCKED until confirmation is on file (decision #25). Any EPDASA-sourced value entering seed_epds/ Open Issue #16, item 6 · PROJECT.md decision #25
AR-31 ASHRAE CLTD / CLF / SCL table redistribution LEGAL Marco + external Answered 2026-08-29 by the climate-data licence clearance. The determination is that the values cannot be vendored in the public AGPL repository and that no ASHRAE grant exists which would let them be. ASHRAE asserts full copyright over the Handbook and issues only per-request, non-transferable reprint permissions; its paid Climatic Design Data License for Software Developers ($2 000 one-time) grants “the purchaser a non-exclusive license”, which stops at the purchaser and therefore fails AGPL’s downstream-parity requirement that every recipient of the conveyed program receive the same right to redistribute and modify — and in any case covers Chapter 14 climatic design conditions, not the CLTD/CLF/SCL cooling-load tables. Consequent decision: migrate off the CLTD/CLF/SCL method entirely to RTS / Heat-Balance (or EN ISO 52016-1) computed from first principles, driven by NASA POWER as the primary open climate source. That is not a workaround — ASHRAE itself deprecated CLTD/CLF/SCL in favour of RTS, so the licensing answer and the accuracy answer are the same answer. No further action on this row; the build consequences are AR-60, the residual legal questions are AR-61. Nothing further. It previously blocked public release of any build containing the table data, and energy / lca.b6; both are released by the method change — no ASHRAE table will be ingested, so there is nothing to clear. Resolved (2026-08-29 — verdict: not vendorable under any available ASHRAE grant; method migrated off CLTD/CLF/SCL, see AR-60 and AR-61) Climate-data licence clearance §3–§4 · Issue #16, item 2
AR-32 DTU 26.1 redistribution terms — UNKNOWN LEGAL Marco Confirm terms before the Phase 3 docs site publishes DTU values verbatim. Phase 3 docs site content Open Issue #16, item 5
AR-33 INIES data agreement LEGAL Marco Required only if INIES values are ever vendored rather than cited at runtime. Document the path to a signed agreement. An offline INIES-seeded installer (not currently planned) Open (conditional) Issue #16, item 4
AR-34 ICE (University of Bath) not registered in THIRD_PARTY.md — it is the source behind the BuildX Database tab and is not a permitted source (decision #4) LEGAL Claude Code Add ICE to THIRD_PARTY.md with UNKNOWN licence status and a note that no ICE value may enter seed_epds/. Nothing directly — register hygiene, and an ISO 14071 reviewer will look Open A1–A3 spec §8 · THIRD_PARTY.md
AR-61 Pre-public-release legal review — climate data, three items. Raised by the climate-data licence clearance §5. (a) EU sui generis database right — obtain an EU IP counsel determination that re-expressed ASHRAE-derived coefficients are created outputs outside Directive 96/9/EC per BHB / Football Dataco, and that Chapter 14 design conditions (obtained and verified station data) are treated separately. Live only if the project ever revisits the ASHRAE path; recorded now so the determination is not re-derived from scratch later. (b) Contract versus copyright — confirm that no click-through or licence term accepted when obtaining ASHRAE data binds residual ASHRAE-informed methodology knowledge, Feist notwithstanding (ProCD v. Zeidenberg). (c) NASA POWER / ERA5 / PVGIS attribution wording — settle the exact strings and embed them in the docs site, API responses, and exported reports, mirroring the ÖKOBAUDAT attribution discipline of AR-28. One discipline, two data families. LEGAL Marco + external (a) and (b): brief EU IP counsel, with US-law input given ASHRAE's US origin; both are contingency determinations, not blockers on the chosen path. (c) is not contingent — it is required the moment any NASA POWER value reaches a report, and it is Claude Code work once the wording is settled. Phase 3 only (repository public, docs site published). Nothing in Phase 1 or 2 calculation. Item (c) additionally gates the first published cooling-load result. Open Climate-data licence clearance §5 · AR-28, AR-31, AR-60

5 · GOVERNANCE — project structure, naming, release posture

ID Item Category Owner Action required Blocks Status Source
AR-35 Geographic representativeness of EU-contextualised ÖKOBAUDAT factors for Sub-Saharan Africa GOVERNANCE Marco + Track-B sourcing Add a mandatory geographic_scope field to the seed-EPD template; surface the caveat in every reported result and in the methodology white paper. Defensibility of every ÖKOBAUDAT-interim factor under ISO 14071 Open (standing constraint) Issue #14 · PROJECT.md decisions #25, #26
AR-36 Permitted-source list is not all-vendorable — only ÖKOBAUDAT clears for the public repo GOVERNANCE Marco Decision #25 is locked; the issue stays open for visibility and future challenge. Close it or convert it to a decision record. Nothing — tracking only Open Issue #13
AR-37 Harmony CLA — GitHub App authorisation is a manual step still outstanding GOVERNANCE Marco Authorise the CLA-assistant GitHub App per the Session 3.7 log instructions. Any external contributor PR Open ROADMAP Phase 0 · CLA
AR-38 Repo visibility — currently private; recommendation is to flip to public at the start of Phase 3 GOVERNANCE Marco Decide and execute, gated on AR-28 … AR-33 clearing. Phase 3; public docs site; Zenodo DOI Open ROADMAP Phase 0 / Phase 3
AR-39 Governance decision — nonprofit vs university-hosted entity (interim: Chiwara S.r.l.) GOVERNANCE Marco + external (advisors) Draft the brief for advisors and decide. Decision #14 is the target state; the Harmony CLA preserves the option. Long-term stewardship; institutional partnership approaches (Phase 4) Open ROADMAP Phase 0 · Governance
AR-40 Trademark search for the working title "Sankofa LCA" — Ghana, Senegal, Kenya, South Africa, EU GOVERNANCE Marco + external (advisors) Commission the search. Budget €500–2 000. Explicitly not a Claude Code task. The name is provisional and the CLA is already name-agnostic. Committing to a public project name Open ROADMAP Phase 0
AR-41 Publish the proxy_provenance schema extension at a stable, citable URL GOVERNANCE Claude Code Set the stable URL once the docs site is live so external work can cite the extension. External citation of the extension Open ROADMAP Phase 1 · proxy_provenance extension
AR-42 PROJECT.md Contact field is TBD GOVERNANCE Marco Populate before Phase 4 launch prep. Phase 4 launch Open PROJECT.md
AR-43 Decision-review issues #1, #2, #3, #11 remain open after their decisions were locked (#19, #22, #23, #24) GOVERNANCE Marco Confirm each is superseded and close, or relabel as a permanent decision record. Issue hygiene, not a methodology gap. Nothing — tracking only Open Issues #1, #2, #3, #11
AR-44 quantities correction issues #5, #6, #8 remain open after the corrections were implemented with divergence tests GOVERNANCE Marco Verify against test_quantities_divergence.py and close. Issues #4 and #7 stay open — they are AR-14 and AR-16 and are genuinely unresolved. Nothing — tracking only Open Issues #5, #6, #8
AR-45 Cloudflare Pages project configuration — two observed symptoms: (a) the Cloudflare Pages PR check reports failure at the "Building" stage on preview deploys (identically on PR #20 and #21) while main deploys report "Deployed successfully"; (b) during PR #21 the production URL chwr-lca.pages.dev served the unmerged branch, including a page absent from main GOVERNANCE Marco Dashboard-side, not a repo change. Set the production branch to main; decide whether preview deployments should exist at all; if they should, fix or suppress the misleading red check. Symptom (b) means an unreviewed branch can publish to the canonical public docs URL. Nothing in the calculation path. Trust in the Cloudflare Pages check as a signal, and review-before-publish for the public docs site (decision #21) Open PROJECT.md decision #21 · observed on PR #21 and PR #20

Workload split by owner

Owner Rows
Chiwara team 24
Marco 26
Track-B sourcing 13
Claude Code 11
external (always jointly with Marco) 6
UNASSIGNED — Marco to route 1

Rows with two owners are counted under each, so the column sums to more than the row count. Total rows: 63. 11 of them are Claude Code work — still overwhelmingly a sourcing-and-attribution backlog, but the scoreboard pass moved the Claude Code count from 5 to 7, the climate-data clearance moved it from 8 to 11, and AR-52 is the first row on this register that is a defect in shipped code rather than a gap in the data: lca.a1_a3 reports an uncited factor for a material its own provenance verdict marks BLOCKED. It is cheap to fix and should not wait on a sourcing cycle. (AR-52 has since been closed; the row is kept with a Resolved status so the finding stays visible.)

The five rows the lca.a5 loop added are a different shape from the rest of this page. Only one of them (AR-54) is a missing number. The other four were questions rather than gaps, and AR-58 is now answered: v1 declares A5 as on-site plant energy only, with every other A5 sub-scope — installation losses, site water, packaging, temporary works, plant and worker transport, site earthworks — a declared EN 15804+A2 §6.3.5 scope limitation rather than a silent absence. AR-56 has now been answered too, provisionally: the product owner stated on 2026-08-27 that the site has no grid connection and runs 100 % off its diesel generator, "until specified otherwise". That is a product-owner statement and not yet a Chiwara confirmation, so the row is Resolved (provisional) rather than closed. A sourcing sub-chat can now start on AR-54, looking for a diesel fuel-combustion factor rather than a grid factor; AR-54 remains open for the value itself.

The four rows the climate-data clearance added are different again: none of them blocks a number today, because every module they touch is unbuilt. They are shape-setting rows. AR-60 fixes what the cooling-load engine will be before a line of it is written; AR-62 fixes what its acceptance criterion may not be — a parity test against a workbook whose latitude selection is a hardcoded 12°N paste, carrying a typical 0.75 K and maximum 1.687 K error into a quantity that drives q = U·A·CLTD. AR-63 is the odd one out and the most uncomfortable: the seed-EPD provenance gate, the mechanism this project points to as its defensibility guarantee, currently governs four JSON files that no calculation reads. That is not a defect in shipped behaviour — no number is wrong because of it — but it is a gap between what the tool claims about itself and what its code does, and it is the kind of gap an ISO 14071 reviewer is paid to find.

The shortest path to a first reportable number

AR-01 and AR-02 together unblock lca.a4 entirely — one sourcing sub-chat against IPCC EFDB closes both, and AR-17 with them. AR-03 … AR-06 unblock the A1–A3 total. That is six rows between the current state and two complete EN 15978 modules.

AR-46 sits on that path too. Those six rows deliver a factor; AR-46 is the mass half of E = weight × factor. A sourced factor multiplied by the pre-correction Excel mass path is not a citable number. Whichever of the two lands first, the other must land before a total stops being None.

For earth specifically, AR-47 closes both halves at once. It asks Chiwara for the as-placed bulk density (the mass half AR-46 needs) and the extraction-and-preparation A1–A3 GWP (the factor half AR-03 needs) as a single data package, because no permitted substitute exists — decision #26 blocks ÖKOBAUDAT for earth outright. Earth is the largest material in the building, so this one request moves the most mass of any row on the register.