Files
innovatieplatform/CLAUDE.md
znetsixe 9f033835cd Restructure student tracks by cross-reference chains, add project rules
Student tracks restructured based on document cross-reference analysis:
- Track 1 "Gemalen & CRC Keten": Grace→Kevin→Robin→Adriaan (chain)
- Track 2 "Condition Monitoring": Kevin→Yamai (fork from Track 1)
- Track 3 "Zuivering & Beluchting": Noa‖Elise (parallel, same problem)
- Track 4 "EVOLV Reactor Model": Pieter (standalone, no student cross-refs)
- Track 5 "IoT & ICT Infra": Bart→Fontys ICT→Fontys TOGAF (chain)

Inter-student dependencies added (7 new):
- Grace→Kevin, Kevin→Robin, Robin→Adriaan (Track 1 chain)
- Kevin→Yamai (Track 2 fork)
- Bart→Fontys ICT→Fontys TOGAF (Track 5 chain)

CLAUDE.md: Added "Metro Map Data Rules" section documenting:
- Thema=line, Project=station, speerpunt=track grouping
- Student work rules: cross-references determine track sharing
- Identified chains with evidence (reference counts from source docs)
- Grid alignment requirements

MetroCanvas: Truncate long station labels to prevent overlap (max ~20 chars
based on grid spacing, with ellipsis)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 14:19:16 +02:00

5.3 KiB

Innovatieplatform — R&D Lab Waterschap Brabantse Delta

Project

Innovation governance platform supporting the full lifecycle of innovation trajectories — from signal to handover — with built-in AI support.

Wiki (source of truth): https://gitea.wbd-rd.nl/vps1_gitea_admin/innovatieplatform/wiki/ Repo: https://gitea.wbd-rd.nl/vps1_gitea_admin/innovatieplatform

Tech Stack

  • Backend: Laravel (latest LTS) — service-oriented, event-driven, API-first
  • Frontend: Vue 3 + Composition API + Vite + Inertia.js
  • Database: PostgreSQL 16+ with pgvector extension
  • AI Service: Python (FastAPI + LangGraph + RAG pipeline)
  • Queue: Redis + Laravel Horizon
  • Infrastructure: Docker Compose (nginx, php-fpm, queue worker, scheduler, ai-service, postgresql, redis)

Architecture Principles

  • Service-oriented: domain logic in service classes, not controllers
  • Event-driven: status transitions via events → listeners
  • API-first: all functionality available via API
  • Audit trail: all mutations logged (append-only)
  • AI content labeled: never auto-published without human confirmation

Build Agents

All agent definitions are in .claude/agents/:

  1. orchestrator — coordination, planning, task distribution
  2. domain-architect — domain model, functional design, acceptance criteria
  3. solution-architect — technical architecture, integration, technology
  4. backend-engineer — Laravel development, APIs, services, tests
  5. frontend-engineer — Vue 3 components, Inertia pages, UX
  6. data-modeler — database schema, migrations, pgvector, seeds
  7. ai-engineer — Python AI service, RAG, LangGraph, prompts
  8. devops-engineer — Docker, deployment, infrastructure
  9. security-specialist — RBAC, audit, compliance, review
  10. doc-designer — documentation structure, handover, knowledge design

MVP Scope (8 weeks)

  • Project CRUD with innovation lifecycle phases
  • Commitments & actions with owner/deadline
  • Basic documentation (upload, link, search)
  • Simple roadmap visualization
  • RBAC (admin, project_owner, team_member, viewer)
  • Basic AI chat + project summaries + semantic search
  • Dashboard with personal overview

Wiki (Knowledge Base)

The project wiki lives in wiki/ and follows the wiki-template schema. It is the canonical knowledge base for agents.

Quick access:

  • python wiki/tools/query.py health — project health overview
  • python wiki/tools/query.py entity "project" — everything about an entity
  • python wiki/tools/query.py test "phpunit" — test results
  • python wiki/tools/query.py status "proven" — all pages with status
  • bash wiki/tools/search.sh "keyword" — full-text search
  • bash wiki/tools/lint.sh — check wiki health (orphans, missing frontmatter)

Source of truth hierarchy: test results > code > knowledge-graph.yaml > wiki pages > chat

After making significant changes: update relevant wiki pages, knowledge-graph.yaml, and wiki/log.md.

Metro Map Data Rules

The metro map is the primary navigation and knowledge structure. These rules govern how content maps to the visual metro metaphor.

Thema = Metro Line (Dim 1)

Each thema is a horizontal metro line at the strategy level. Keep themas to major organizational concerns:

  • R&D Planning 2026 themes (Architectuur, Productiewaardig, Lab, Governance)
  • Onderzoek — all research work (R&D-driven and student)

Project = Station (Dim 1)

Each project is a station on its thema's line. Stations are zoomable into Dim 2.

Student Work Rules

Student projects live under the Onderzoek thema. Structure:

  1. Each student gets their own track (metro line) within the Onderzoek thema — unless they build on another student's work
  2. Students who build on each other share a track — chronological stations on the same line, earlier work first
  3. Cross-references determine track grouping, not topic similarity. Evidence: explicit mentions of another student's work, reuse of their system/data, or continuation of their project
  4. Identified chains (from cross-reference analysis of source documents):
    • Gemalen & CRC track: Grace van Geel (pump curves) → Kevin Haest (CRC/IOT2050, references Grace) → Robin van Weelie (D.R.A.I.N., references CRC) → Adriaan Sol (pilot 3, references D.R.A.I.N.)
    • Monitoring branch (forks from Kevin): Kevin Haest → Yamai van Rooij (CRC 78x, MCSA, references Kevin)
    • Zuivering track: Noa de Groot (beluchting) ‖ Elise Nouws (algen, parallel approach to same problem)
    • EVOLV Reactor: Pieter van der Wilt (standalone — EVOLV ASM model, no student cross-refs)
    • IoT & Infra track: Bart van Gool (IoT-hub) → Fontys ICT (Docker/CI-CD/SOC) → Fontys TOGAF (security)
  5. Dependencies to 2026 projects are tracked as Afhankelijkheid records (type: technisch/data/infrastructuur)

Kennis Artikelen

Standalone knowledge articles extracted from research. Not tied to a project lifecycle. Used by the AI/search engine for semantic retrieval.

Grid Alignment

All node positions must be multiples of GRID=50. Server-side: MapDataService::snapToGrid(). Client-side: gridConstants.js.

What Requires Human Validation

  • Architecture decisions
  • Domain model changes
  • UX/design choices
  • Scope changes
  • AI behavior and prompt templates
  • Security findings
  • Handover process definitions