Phase 5 Review — Tender & Research Radar (Module 3)¶
Date: 2026-07-28 · Four-review standard applied to the third core module.
1. Engineering review¶
Executed and green: ruff clean, mypy strict clean (35 source files),
187 tests passed (was 169), real run: 5 sources → 35 quality rules → gate
PASS → 14 marts; research stage reports "6 regionally linked project(s),
2 dropped (no regional participant)" in the run output — the drop is visible,
never silent.
Findings:
- The CORDIS parser implements the documented bulk-CSV shape with header
sniffing (projects vs organisations files) and per-line error reporting;
S-06 remains not integrated until a real export replays through the same
contract tests — the catalogue says exactly that.
- The relationship model is relational-only by design (vw_network_edges
unions company→project and project→theme edges); per the brief, a graph
database would need demonstrated added value first — none exists at this size.
- Multi-file fixture acquisition (directory → sorted payloads) reused the
Phase-4 mechanism unchanged — no special-casing.
2. Data review¶
- Regional filter integrity is a critical rule (RES-C5): every kept
project must have ≥1 participant that entity-links to a Region-10 company;
AICHEM/HYDROFLOW are dropped and counted. Foreign partners of kept projects
are retained with observed name and
canonical_id NULL— RES-I1 states that an unmatched partner is a fact, not an error. - Referential integrity is enforced both ways: participations must reference kept projects (RES-C3), themes must exist in the versioned taxonomy (RES-C6).
- Money handling follows the brief:
total_cost_euronly where the source states it (SUNSTORE stays NULL, tested). - Tender relevance classification reuses the same explainable keyword machinery: exactly one regional notice matches (Ladeinfrastruktur → charging_infrastructure), keyword stored — deliberately narrow rather than over-matched ("Batteriespeichersystem" does NOT match "Batteriesystem" on word boundaries; under-matching is visible, over-matching would be silent).
3. Business review¶
- US-10/11 (tender relevance + deadlines):
mart_tender_themesjoins deadline views with explainable theme tags. US-12/13 (research landscape + network):mart_research_projectsshows regional partner counts and themes;vw_network_edgesgives the company↔project↔theme network as plain rows a dashboard or NetworkX export can consume later. - Cross-module story now closes: the same canonical company appears in hiring (module 1), transformation themes and change events (module 2), and research participation (module 3) — the "organizations connected through projects, technologies, tenders" question from the brief has a queryable answer.
4. Honesty review¶
- All research rows are
data_class=fixturewith FIXTURE markers in titles and foreign org names; invented EUR figures never look real. ✅ - The 2-project drop is in the run output, the source-run message, and RES-I1 context — coverage loss is announced, not implied away. ✅
- No graph database, no forecast, no composite score was smuggled in. ✅
- Catalogue S-06 keeps its "verified-live source, fixture-only adapter, NOT integrated" three-way distinction intact. ✅
Gate decision: Phase 5 passes for its in-environment scope. All three core modules now run end to end on labelled demo data. Carried: dashboards/API, CI first run, C-03, DuckDB/Postgres, curated-real seed. Proceed to Phase 6 (productization: reports, data dictionary, diagrams, portfolio assets).