Compare commits

..

No commits in common. "f61865a3c274bc1be02c91bf8ec065590d594a56" and "5fc1ecc98a49cf720db982fc675980a5e835f22e" have entirely different histories.

6 changed files with 12 additions and 203 deletions

View file

@ -1,58 +0,0 @@
# Recl∆Im — Context for Claude Code
You are the **reclaim** agent. Read this first, every session.
## Identity
- **Product:** Recl∆Im (ASCII / code: `reclaim`) — a domain app for
law / duty reform-mapping (Pflicht-basierte Wirkungsanalyse).
- **Flutter package:** `reclaim_app` (snake_case Dart identifier — this
stays; only user-facing display names use the `∆` spelling).
- **Author:** Dr. Stefan Flemming, F∆I (Flemming.AI).
- **Repository (dev):** `git.flemming.ai/fai/reclaim`.
- **License:** Apache 2.0.
> Naming: `∆` replaces the "AI" letters; in ASCII / code use the plain
> spelling `reclaim`. The Dart package identifier `reclaim_app` and the
> on-disk macOS bundle `reclaim_app.app` are code references and stay
> snake_case; user-facing product strings read **Recl∆Im**.
## What this is
Recl∆Im is **a domain app built on top of the Ch∆In platform.** It
consumes the platform — it is not the platform. It connects to a Ch∆In
hub over gRPC via the `chain_client_sdk` (a path dependency) and runs
WASM modules + YAML flows the hub orchestrates.
## Cross-agent boundaries
Read `../../shared/AGENTS.md` (the cross-agent charter) and
`../../shared/HANDOFFS.md` (your task list) every session.
- **You own:** the Recl∆Im Flutter app (`reclaim_app`) — its UI and
domain logic — plus Recl∆Im-specific flows / modules, branding, and
the Recl∆Im docs (METHODIK, RUN, MACHBARKEITSSTUDIE).
- **You do NOT own** the platform. The hub, the `chain` CLI, the runtime
/ sandbox, the module ABI (`chain:platform`), the gRPC wire
(`chain.v1`), Studio, and the client SDKs all belong to the **chain**
agent. Recl∆Im uses `chain_client_sdk` via a path dep but **never
modifies it.**
- Need a new RPC / SDK method / ABI capability, or any change to the
hub / SDK / wire? Do **not** edit it — append a handoff row to
`../../shared/HANDOFFS.md` (from: reclaim, to: chain) and skip that
item.
## Confidentiality
The internal `MACHBARKEITSSTUDIE.md` is **AG-intern** and must never go
into public docs, code, commits, or examples. Never name pilot
institutions (ITDZ, Kammergericht, HTW, J∆I) or customer↔label mappings
in public material. Generic terms only ("a regulated organization").
## Commit conventions
- Conventional commits in English: `type(scope): message`.
- DCO sign-off on every commit: `git commit -s`
(`Signed-off-by: …`). No `Co-Authored-By` trailer.
- Make the smallest change that works; verify with `flutter analyze`
(in `app/`) before claiming done where practical.

View file

@ -870,7 +870,7 @@ liegt dann woanders.
4. **Rechtliche Kurz-Stellungnahme** anstoßen (EU AI Act, 4. **Rechtliche Kurz-Stellungnahme** anstoßen (EU AI Act,
DSGVO, §5 UrhG, juris-Lizenz). Möglichst kostenneutral über DSGVO, §5 UrhG, juris-Lizenz). Möglichst kostenneutral über
Lehrstuhl-Kooperation. Lehrstuhl-Kooperation.
5. **Repo `fai/reclaim` initialisieren** (Forgejo unter `git.flemming.ai`, 5. **Repo `fai/lawheatmap` initialisieren** (Forgejo unter `git.flemming.ai`,
Vendor-Namespace `fai/`), Lizenz Apache 2.0, DCO an, CI-Pipeline analog Vendor-Namespace `fai/`), Lizenz Apache 2.0, DCO an, CI-Pipeline analog
`fai/chain` (DCO-Sign-off, Conventional Commits, SBOM, sigstore). `fai/chain` (DCO-Sign-off, Conventional Commits, SBOM, sigstore).
`law.*`-Module später in `chain-modules-law/` als product-scoped Org. `law.*`-Module später in `chain-modules-law/` als product-scoped Org.
@ -890,7 +890,7 @@ liegt dann woanders.
- **ELI**: European Legislation Identifier (eli.dlri.de / EUR-Lex) - **ELI**: European Legislation Identifier (eli.dlri.de / EUR-Lex)
- **CELEX**: EU-Dokumenten-ID-System - **CELEX**: EU-Dokumenten-ID-System
- **REFIT**: EU-Programm zur Regulatorischen Eignungsprüfung - **REFIT**: EU-Programm zur Regulatorischen Eignungsprüfung
- **Ch∆In** (CLI: `chain`): Orchestrierungs-Plattform (eigenes Repo `fai_chain`), auf der Recl∆Im als Domänen-App aufsetzt. Vendor: **F∆I = Flemming.AI**. - **Ch∆In** (CLI: `chain`): Orchestrierungs-Plattform unter `fai_lawheatmap`. Vendor: **F∆I = Flemming.AI**.
- **Hub / Module / Flow**: Ch∆In-Server (`chain serve`), WASM-Komponente (ABI `chain:platform`), YAML-Workflow - **Hub / Module / Flow**: Ch∆In-Server (`chain serve`), WASM-Komponente (ABI `chain:platform`), YAML-Workflow
- **RAG**: Retrieval Augmented Generation — LLM mit verpflichteter Quelleneinbindung - **RAG**: Retrieval Augmented Generation — LLM mit verpflichteter Quelleneinbindung
- **Hochrisiko-KI (EU AI Act)**: KI-System, das Rechtsfolgen für Personen - **Hochrisiko-KI (EU AI Act)**: KI-System, das Rechtsfolgen für Personen

View file

@ -297,5 +297,5 @@ Jede Methodik-Version benötigt:
--- ---
**Kontakt:** Dr. Stefan Flemming, F∆I (Flemming.AI), **Kontakt:** Dr. Stefan Flemming, F∆I (Flemming.AI),
chain@flemming.ai. Repository: `git.flemming.ai/fai/reclaim`. chain@flemming.ai. Repository: `git.flemming.ai/fai/lawheatmap`.
Lizenz: Apache-2.0. Lizenz: Apache-2.0.

View file

@ -50,9 +50,9 @@ class _HeatmapPageState extends State<HeatmapPage> {
Text('Heatmap', style: t.displaySmall), Text('Heatmap', style: t.displaySmall),
const SizedBox(height: ReclaimSpace.xs), const SizedBox(height: ReclaimSpace.xs),
Text( Text(
'Schaden × Nutzen × Betroffenheit pro Norm. ' 'X: jährliche Bürokratiekosten (€, log10). '
'Klick auf einen Punkt öffnet das Detail mit ' 'Y: Nutzen-Score 05. Punktgröße: Betroffenheit. '
'Pflichten, Quellen und Gesetzestext.', 'Klick auf einen Punkt → Detail mit Pflichten + Quellen.',
style: t.bodyLarge?.copyWith( style: t.bodyLarge?.copyWith(
color: ReclaimColors.mute, color: ReclaimColors.mute,
), ),
@ -77,8 +77,6 @@ class _HeatmapPageState extends State<HeatmapPage> {
), ),
), ),
), ),
const SizedBox(height: ReclaimSpace.md),
_LegendCard(),
const SizedBox(height: ReclaimSpace.lg), const SizedBox(height: ReclaimSpace.lg),
Wrap( Wrap(
spacing: ReclaimSpace.md, spacing: ReclaimSpace.md,
@ -128,134 +126,3 @@ class _HeatmapPageState extends State<HeatmapPage> {
); );
} }
} }
/// Axis + circle legend below the heatmap. Spells out what is
/// plotted and how the four-line top description deliberately
/// stays short and high-level, this card carries the precise
/// reading instructions a reviewer needs to defend the plot
/// against "what does that even mean?"
class _LegendCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
final t = Theme.of(context).textTheme;
return ReclaimCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Legende', style: t.headlineSmall),
const SizedBox(height: ReclaimSpace.md),
_LegendRow(
symbol: '',
axis: 'Abszisse (X)',
label: 'Schaden',
description:
'Bürokratiekosten pro Jahr in Euro, logarithmisch '
'skaliert (10⁴ = 10 k, 10⁶ = 1 Mio, 10⁹ = 1 Mrd). '
'Berechnet nach Standardkostenmodell '
'P × F × T × h (Studie §3.1).',
),
const SizedBox(height: ReclaimSpace.sm),
_LegendRow(
symbol: '',
axis: 'Ordinate (Y)',
label: 'Nutzen',
description:
'Komposit-Score von 05, Mittelwert aus den sieben '
'Dimensionen Schutz · Markt · Rechtssicherheit · '
'EU-Binnenmarkt · Sicherheit · Umwelt · Einnahmen '
'(Studie §3.2). Jede Dimension einzeln '
'quellen-begründet.',
),
const SizedBox(height: ReclaimSpace.sm),
_LegendRow(
symbol: '',
axis: 'Punktgröße',
label: 'Betroffenheit',
description:
'Anzahl der Adressaten (KMU, Bürger, Behörden), '
'wurzel-skaliert. Mehr Adressaten → größerer Kreis. '
'Quellen: DESTATIS Unternehmensregister, '
'IHK-/Handwerkskammer-Mitgliederzahlen.',
),
const SizedBox(height: ReclaimSpace.sm),
_LegendRow(
symbol: '',
axis: 'Tier-Farbe',
label: 'Evidenz-Stufe',
description:
'Petrol → warm-orange markiert die Stufe (T1T4) der '
'schwächsten Eingangs-Variable. Eine SKM-Zahl mit '
'T4-Schätzwert für h trägt die ganze Zahl als T4 '
'(Regel der niedrigsten Stufe, Studie §6.7).',
),
],
),
);
}
}
class _LegendRow extends StatelessWidget {
const _LegendRow({
required this.symbol,
required this.axis,
required this.label,
required this.description,
});
final String symbol;
final String axis;
final String label;
final String description;
@override
Widget build(BuildContext context) {
final t = Theme.of(context).textTheme;
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 28,
child: Text(
symbol,
style: t.titleMedium?.copyWith(
color: ReclaimColors.signal,
fontSize: 18,
),
),
),
SizedBox(
width: 140,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
axis,
style: t.labelSmall?.copyWith(
color: ReclaimColors.mute,
letterSpacing: 0.4,
),
),
Text(
label,
style: t.titleMedium,
),
],
),
),
const SizedBox(width: ReclaimSpace.md),
Expanded(
child: Padding(
padding: const EdgeInsets.only(top: 2),
child: Text(
description,
style: t.bodyLarge?.copyWith(
color: ReclaimColors.mute,
height: 1.5,
),
),
),
),
],
);
}
}

View file

@ -18,18 +18,18 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="Recl∆Im — Pflicht-basierte Wirkungsanalyse für Rechtsnormen, auf der Ch∆In-Plattform."> <meta name="description" content="A new Flutter project.">
<!-- iOS meta tags & icons --> <!-- iOS meta tags & icons -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Recl∆Im"> <meta name="apple-mobile-web-app-title" content="reclaim_app">
<link rel="apple-touch-icon" href="icons/Icon-192.png"> <link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png"/> <link rel="icon" type="image/png" href="favicon.png"/>
<title>Recl∆Im</title> <title>reclaim_app</title>
<link rel="manifest" href="manifest.json"> <link rel="manifest" href="manifest.json">
</head> </head>
<body> <body>

View file

@ -1,11 +1,11 @@
{ {
"name": "Recl∆Im", "name": "reclaim_app",
"short_name": "Recl∆Im", "short_name": "reclaim_app",
"start_url": ".", "start_url": ".",
"display": "standalone", "display": "standalone",
"background_color": "#0175C2", "background_color": "#0175C2",
"theme_color": "#0175C2", "theme_color": "#0175C2",
"description": "Recl∆Im — Pflicht-basierte Wirkungsanalyse für Rechtsnormen, auf der Ch∆In-Plattform.", "description": "A new Flutter project.",
"orientation": "portrait-primary", "orientation": "portrait-primary",
"prefer_related_applications": false, "prefer_related_applications": false,
"icons": [ "icons": [