Skip to content

Changelog

All notable changes to this project are documented here. Format: Keep a Changelog. Versioning: SemVer.

[Unreleased]

Added

  • Session 3.6: docs/architecture/index.md — system overview with Mermaid component diagram (FastAPI → schemas → domains/services → SQLAlchemy 2 → PostgreSQL 16).
  • Session 3.6: docs/architecture/module-map.md — dependency graph of all lca., quantities, thermal, energy, and services/; status table (all stub); update discipline note.
  • Session 3.6: docs/architecture/data-flow.md — BoQ → material explosion → EPD proxy → per-module calc → aggregation → MC uncertainty → reporting; interpolation trigger table; planned modules visually marked.
  • Session 3.6: docs/requirements.txt — pinned clean-room MkDocs build deps (mkdocs 1.6.1, mkdocs-material 9.7.6, pymdown-extensions 11.0.1); verified in throwaway venv.
  • Session 3.6: PROJECT.md decision #21 — docs hosting = Cloudflare Pages; site_url as single source of truth; Chiwara domain deferred to Phase 3; provenance citations third-party only.
  • Session 3.6: Architecture nav section in mkdocs.yml (before Methodology).
  • Session 3.6: Architecture docs discipline rule in CLAUDE.md and ROADMAP.md file-update table (module-map.md + data-flow.md required on every new module/service).

Changed

  • Session 3.6: mkdocs.yml site_url changed from GitHub Pages placeholder to https://chwr-lca.pages.dev/ (Cloudflare Pages; Phase 3 Chiwara domain noted in comment).
  • Session 3.6: mkdocs.yml pymdownx.superfences — added custom_fences for Mermaid diagram rendering.
  • Session 3.6: .github/workflows/docs.yml rewritten — installs from docs/requirements.txt; runs mkdocs build --strict on all PRs and pushes to main; no deploy step (Cloudflare owns deployment).

Added

  • Session 3.5: shared enums module (backend/app/schemas/enums.py) — LCModule, ImpactIndicator, ProgrammeOperator, MaterialCategory.
  • Session 3.5: UnitEnum extended with KG_PER_M3, KG_PER_M2, KG_PER_M, CELSIUS, W_PER_M_K, J_PER_KG_K.
  • Session 3.5: source_epd_reference required for cascade_step > 1 (methodology audit critical gap 1).
  • Session 3.5: peer_review_citation URL resolution + DOI normalisation in seed-EPD integrity gate (methodology audit critical gap 2).
  • Session 3.5: programme_operator approved-set check in seed-EPD integrity gate (methodology audit gap 4).
  • Session 3.5: LCIA method bridge (schemas/epd.lcia_method_to_openepd_key) + validate_programme_operator helper.
  • Session 3.5: lat/lon range validation (ge/le) and comfort_setpoint_celsius range validation on ProjectIdentity / FunctionalUnit.
  • Session 3.5: modules_included must contain A1-A3 (SystemBoundary validator).
  • Session 3.5: excluded modules require documented rationale in exclusion_rationales (SystemBoundary validator).
  • Session 3.5: ProjectCreate distinguished from Project (Project carries id, created_at, updated_at, created_by).
  • Session 3.5: Assembly.recipe key type dict[UUID, Quantity]; code_display Field(max_length=50).
  • Session 3.5: SQLAlchemy Base.metadata naming_convention (standards audit #1).
  • Session 3.5: Alembic migration a07c3619bd9e — CHECK constraint for material.category; density_unit default kg_m3.
  • Session 3.5: Ruff ANN + TCH + W rulesets; pydantic.mypy + sqlalchemy.ext.mypy.plugin; mypy in pre-commit; asyncio_mode = auto.
  • Session 3.5: AGPL headers added to 24 previously missing source files (architecture audit #6).
  • Session 3.5: Data table interpolation policy (PROJECT.md cross-cutting; METHODOLOGY.md §5a; services/interpolation.py stub).
  • Session 3.5: Governance interim entry in PROJECT.md (Chiwara S.r.l.).
  • Session 3.5: test_enums.py (18 new enum tests); test_schemas.py extended (+27 tests); test_seed_epd_integrity.py extended (DOI, PO gate, peer_review).

Changed

  • Session 3.5: LCIAMethodChoice: EF 3.0 removed; only EF 3.1 valid per decision #1.
  • Session 3.5: Material.category: str → MaterialCategory StrEnum.
  • Session 3.5: Material.density.unit: KG → KG_PER_M3.
  • Session 3.5: SystemBoundary.modules_included / modules_excluded / indicators_reported: list[str] → typed StrEnum lists.
  • Session 3.5: METHODOLOGY.md §5a renumbered to §5b (openEPD subset); new §5a is Table interpolation policy.

Fixed

  • Session 3.5: Methodology audit critical gap 1: proxy provenance chain no longer breakable at cascade_step > 1.
  • Session 3.5: Methodology audit critical gap 2: peer_review_citation now verified in CI gate.
  • Session 3.5: Architecture audit finding #3: density unit semantically correct (kg/m³ not kg).
  • Session 3.5: Standards audit finding #1: DB constraint naming convention deterministic.
  • Session 3.5: Standards audit findings #2–4: mypy plugins, ruff rules, mypy in pre-commit.
  • docs/contributing/licence-agpl.md: ../../LICENSE relative link replaced with absolute GitHub URL https://github.com/marcoNEEV/chwr_LCA/blob/main/LICENSE.

Added (Session 3B)

  • Session 3B: PROJECT.md decision #20 (openEPD subset & proxy_provenance attachment point at Epd.ext['chwr']['proxy_provenance']).
  • Session 3B: docs/methodology/openepd-subset-decision.md (openEPD 6.34.2 subset spec, field paths reconciled against installed library, commit SHA 1d48815c135e2d599583e7c10cd65ca706266ea1).
  • Session 3B: docs/data-schema/proxy-provenance-ext.md (Weidema pedigree extension, GSD² formula corrected, rubric registry v1.0.0, JSON fixture reconciled against openEPD 6.34.2).
  • Session 3B: Pydantic v2 schema layer — units.UnitEnum, units.Quantity, classification codes (Uniclass, IFC, UN CPC), ProxyProvenance, Material, Assembly, Project, Epd wrapper helpers.
  • Session 3B: SQLAlchemy 2 async models mirroring the Pydantic schemas (project, material, assembly, epd) with JSONB payload columns and indexed lookup columns.
  • Session 3B: Alembic initialised; first migration 05b0985c61fe creates project/material/assembly/epd tables; up and down verified.
  • Session 3B: backend/app/config.py (Pydantic Settings from .env), backend/app/database.py (async engine + session factory).
  • Session 3B: services/pedigree.py stub (raises NotImplementedError pending Phase 1 Step 1 Ciroth/Brightway2 sub-chat).
  • Session 3B: backend/tests/data/test_seed_epd_integrity.py enforcing seed-EPD provenance gate rules.
  • Session 3B: backend/tests/data/seed_epds/turkish_portland_proxy.json golden fixture.
  • Session 3B: METHODOLOGY.md sections on internal data schema (§5a) and proxy-EPD data quality (§6a); §9 Module D non-netting rule.
  • Session 3B: schema unit tests (27 passed) covering Quantity, classification codes, ProxyProvenance conditional requirements, Material, Assembly.
  • Session 3B: openEPD subset decision nav entry added to mkdocs.yml.
  • Session 2.5: PROJECT.md decision #19 — BoQ classification taxonomy (Uniclass primary, IFC secondary, UN CPC optional at material level).
  • Session 2.5: PROJECT.md cross-cutting schema conventions section (Quantity type discipline; classification codes required on Assembly and Material).
  • Session 2.5: docs/methodology/classification-taxonomy.md.
  • Session 2.5: docs/contributing/cla.md (Harmony CLA plan; instantiated text TODO Phase 0).
  • Session 2.5: ROADMAP.md — Phase 0 IP tasks (trademark search, Harmony CLA setup, Uniclass download); Phase 1 mapping-table sub-chat deliverable and new-material extensibility test; Phase 2 climate-zone / EPD-operator / typology extensibility tests; Phase 3 BoQ input form as v1 landing frontend feature + Zenodo DOI for seed EPD library; Phase 4 institutional partnership approaches + methodology paper submission.
  • Session 2: docs site skeleton expanded to first-class deliverable (methodology, api-reference, data-schema, testing, contributing sections).
  • Session 2: file-update discipline table in ROADMAP.md.
  • Session 2: 6-step incremental build-and-test loop documented in ROADMAP.md Phase 1 header.
  • Session 2: sub-chat spawning rules documented in CLAUDE.md.
  • Session 2: seed-EPD provenance gate documented in CLAUDE.md.
  • Session 2: module inputs reference document (docs/methodology/module-inputs.md).
  • Session 2: OpenAPI schema auto-generation script and CI integration.
  • Session 2: reference source-of-truth files (6 xlsx + 1 pdf) committed under reference/.

[0.0.1] — Session 1

Added

  • Initial repository scaffold under AGPL-3.0-or-later.
  • Folder skeleton: backend/, frontend/, docs/, reference/, .github/workflows/.
  • pyproject.toml (Python 3.12, FastAPI, Pydantic v2, SQLAlchemy 2, Alembic, pytest, ruff, mypy).
  • docker-compose.yml (Postgres 16 alpine), Dockerfile (backend runtime).
  • Meta documents: CLAUDE.md, PROJECT.md, ROADMAP.md, METHODOLOGY.md, README.md.
  • FastAPI /health endpoint and passing regression test.
  • CI workflow (lint, type-check, test), docs workflow stub.
  • Pre-commit hooks (ruff, standard hygiene).

Fixed

  • pyproject.toml [tool.hatch.build.targets.wheel] packages set to ["backend"] (was ["backend/app"]) so backend.app.* imports resolve in tests.