reclaim/RUN.md
flemming-it 7a8bd339be chore: rename project dir fai_lawheatmap → fai_reclaim
Local working directory now lines up with the product name and
the Forgejo repo (fai/reclaim). Two doc references updated;
the chain_client_sdk path-dep, the build/setup/serve scripts
(all use $(dirname $0)) and the git remote URL are unaffected
because none of them encoded the parent directory name.

flutter pub get refreshes the relative path resolution.
flutter test 2/2 stays green. flutter analyze clean.

Signed-off-by: flemming-it <sf@flemming.it>
2026-06-18 15:10:51 +02:00

138 lines
5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Recl∆Im (F∆I) — Run-Guide (Phase 0)
> Stand v0.1.0 — Demo-Modus, ohne externe Daten, ohne Hub-Verbindung.
## Layout
```
fai_reclaim/
├── MACHBARKEITSSTUDIE.md # die Studie (v0.3, AG-intern)
├── RUN.md # diese Datei
├── app/ # Flutter-Client, Brand-Skin fai_web
│ ├── lib/ # Dart-Code (Pages, Widgets, Data, Theme)
│ ├── assets/
│ │ ├── fonts/ # SIL-OFL TTFs (setup.sh holt sie)
│ │ └── fixtures/ # Phase-0 Demo-Daten
│ ├── macos/ # Plattform-Scaffolds (auto-generiert)
│ ├── setup.sh # Fonts + Pakete
│ └── pubspec.yaml
└── flows/
└── durchstich-gewo-14.yaml # vertikaler Phase-0-Flow
```
Die acht zugehörigen Module liegen unter `fai_chain_modules/` als
eigene Crate-Verzeichnisse, ABI `chain:platform`, alle Apache 2.0:
- `text-akoma-normalize/` (Pflicht-Eingang, gesetze-im-internet-XML-Adapter)
- `text-deontic-extract/` (Pflicht-Tupel via Regex + LLM-Vorschlag im Flow)
- `graph-citation-extract/` (`cites`, `verweist_iVm`)
- `text-readability-score/` (Flesch-DE + Verweistiefe)
- `stats-cohort-size/` (DESTATIS-/IHK-Kohorten, Phase 0 mit Stub-Tabelle)
- `graph-shapley-attribution/` (Pfad-anteilige Splittung)
- `econ-skm-score/` (Standardkostenmodell P×F×T×h)
- `law-benefit-score/` (7-dim. Nutzen-Aggregation — das einzige genuin
domänen-spezifische Modul, gehört in `chain-modules-law/`)
## Sofort starten (Demo-UI, kein Hub nötig)
```bash
cd app
./setup.sh # Fonts + flutter pub get
./build-macos.sh # Robust-Build (strippt macOS-xattrs vor CodeSign)
open build/macos/Build/Products/Debug/reclaim_app.app
```
Direkter `flutter run -d macos` funktioniert auch, kann aber bei
einem frischen Checkout an `com.apple.provenance`-xattrs scheitern
(macOS-Eigenheit bei via curl/iCloud erstellten Dateien) — dann
einmal `./build-macos.sh` und danach `flutter run -d macos`.
Erwartet: Brand-Landing → Klick auf „App öffnen (Demo-Modus)" →
NavigationRail (Heatmap / Normen / Hub / Methodik) mit fünf
Pilot-Norm-Punkten und einem permanenten T4-Demo-Banner.
Test-Suite (smoke):
```bash
flutter test
```
## Web-Variante (gleiche Codebase, ein Befehl)
```bash
cd app
./serve-web.sh # baut + serviert auf http://127.0.0.1:8080
```
Funktioniert im Demo-/Mock-Modus 1:1. Im Live-Hub-Modus
braucht die Web-Variante zusätzlich einen gRPC-Web-Branch in
`chain_client_sdk_dart` (Phase 1, dokumentiert in
docs/architecture/protocol-surfaces.md des Ch∆In-Repos).
Produktion: build/web/ auf einen statischen Host kippen
(F∆I-Pattern: Hetzner-CX + Caddy mit Auto-HTTPS, analog
`fai_chain` Release-Host). DNS: `reclaim.flemming.ai`.
## Hub-Smoke-Test (chain serve läuft separat)
Wenn ein `chain serve` lokal auf 127.0.0.1:50051 läuft (vom
fai_chain-Setup):
1. App starten, „Hub"-Reiter öffnen
2. Host/Port stehen schon, „Hub beim Start nutzen" anschalten
3. „Verbindung testen" → erwartet `healthy=true`
4. Falls capabilities installiert sind: „Installierte
Capabilities" listet sie auf
5. Nach `chain run flows/durchstich-gewo-14.yaml` und einem
`system.approval`-Approve wird der Heatmap-Tab live gefüllt
(HubRepository.list liest `flow.completed`-Events aus dem
Audit-Log und übersetzt sie in Evaluation-Objekte)
## Modul-Tests (lokal grün ohne Hub)
```bash
for m in text-akoma-normalize text-deontic-extract \
graph-citation-extract text-readability-score \
stats-cohort-size graph-shapley-attribution \
econ-skm-score law-benefit-score; do
(cd ../fai_chain_modules/$m && cargo test) || break
done
```
## WASM-Build (für `chain install`)
```bash
cd ../fai_chain_modules/text-akoma-normalize
cargo build --release --target wasm32-wasip2
# Artefakt: target/wasm32-wasip2/release/text_akoma_normalize.wasm
```
Selber Aufruf für die anderen sieben Verzeichnisse.
## Live-Flow (sobald `chain serve` läuft — Phase 0 Woche 1)
```bash
chain serve &
chain install text.akoma_normalize text.deontic_extract \
graph.citation_extract text.readability_score \
stats.cohort_size graph.shapley_attribution \
econ.skm_score law.benefit_score \
http.request system.approval
chain run flows/durchstich-gewo-14.yaml \
--input norm_url=https://www.gesetze-im-internet.de/gewo/__14.xml \
--input cohort_id=berlin-kmu
chain admin events --limit 10
chain admin approvals list # Juristen-Gate
```
Im Flutter-Client den `MockRepository` durch eine `HubRepository`
(gRPC gegen `localhost:50051`) ersetzen — Interface bleibt gleich,
keine UI-Änderung nötig.
## Was Phase 0 NICHT enthält (bewusst)
- gRPC-Anbindung Flutter ↔ Hub (Woche 1)
- Echte NKR-Datenbank-Anbindung (Woche 2-3)
- DESTATIS GENESIS-API-Adapter (Woche 4)
- Juristen-Approval-Backend-Anbindung (Woche 5)
- Volle Akoma-Ntoso-Konvertierung (v0.2)
- HTML- und FORMEX-Adapter für `text.akoma_normalize` (v0.2/0.3)