fix(store): dash capability IDs + .chain bundles (chain catalog conformance)

chain's catalog charset (naming.rs check_segment, capability-namespaces.yaml)
allows only [a-z0-9-] per dot-segment — underscores are rejected by
`chain validate`. Repack all 8 modules with the dash capability form
(econ.skm-score, law.benefit-score, …) and align the store index, flows,
app strings and docs to match. Bundles now use the .chain extension
(content-addressed; legacy .fai would still install).

- store/store.yaml: name: dash, wasm_url .chain, refreshed sha256
- store/SHA256.txt: 8 new .chain hashes
- flows + app/lib + RUN.md + MACHBARKEITSSTUDIE.md: capability refs _ -> -
- left untouched: text_akoma_normalize.wasm artifact, DB field skm_score,
  backlog module law.skm_score

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-06-20 00:11:39 +02:00
parent c51ef0e004
commit 0c536c5b91
11 changed files with 104 additions and 96 deletions

View file

@ -178,18 +178,18 @@ angreifbar und wertlos. Code zweitrangig.
│ ABI chain:platform │ │ │
├──────────────────────────────┼─────────┼──────────────────────────┤
│ chain-modules/ (generisch): │ │ http.request │
│ text.akoma_normalize │ │ text.extract (PDF/DOCX) │
│ text.deontic_extract │ │ text.anonymize (DSGVO) │
│ graph.citation_extract │ │ text.translate (DE↔EN) │
│ text.readability_score │ │ text.summarize │
│ stats.cohort_size │ │ llm.chat (Ollama-kompat.)│
│ graph.shapley_attribution │ │ system.approval@^0 │
│ text.akoma-normalize │ │ text.extract (PDF/DOCX) │
│ text.deontic-extract │ │ text.anonymize (DSGVO) │
│ graph.citation-extract │ │ text.translate (DE↔EN) │
│ text.readability-score │ │ text.summarize │
│ stats.cohort-size │ │ llm.chat (Ollama-kompat.)│
│ graph.shapley-attribution │ │ system.approval@^0 │
│ │ │ debug.echo (Referenz) │
│ chain-modules-econ/: │ │ │
│ econ.skm_score │ │ │
│ econ.skm-score │ │ │
│ │ │ │
│ chain-modules-law/ (domain): │ │ │
│ law.benefit_score │ │ │
│ law.benefit-score │ │ │
└──────────────────────────────┘ └──────────────────────────┘
Heatmap rendert der **Client** (Flutter, CustomPainter) — kein
@ -200,14 +200,14 @@ angreifbar und wertlos. Code zweitrangig.
**Begründung — Reuse-Lens:** Module-Naming reflektiert Wiederverwend­
barkeit. Was kein juristisches Domänen-Wissen braucht, geht in
`chain-modules/` (generisches Org) und ist damit auch in anderen
F∆I-Projekten und für externe Nutzer wertvoll: `text.akoma_normalize`
F∆I-Projekten und für externe Nutzer wertvoll: `text.akoma-normalize`
ist relevant für jeden, der Rechtsdokumente parst (EU-Parlament,
Italien, Brasilien); `text.deontic_extract` für Verträge, ISO-Normen,
Policies; `graph.citation_extract` für wiss. Paper, Patente, Spezi­
Italien, Brasilien); `text.deontic-extract` für Verträge, ISO-Normen,
Policies; `graph.citation-extract` für wiss. Paper, Patente, Spezi­
fikationen. Damit ist `chain-modules-law/` am Ende sehr klein —
nur `law.benefit_score`, weil die 7 Bewertungs-Dimensionen
nur `law.benefit-score`, weil die 7 Bewertungs-Dimensionen
(Schutz/Markt/Rechtssicherheit/EU-Binnenmarkt/…) genuin juristisch-
politisch konventioniert sind. **`text.akoma_normalize` ist der
politisch konventioniert sind. **`text.akoma-normalize` ist der
Pflicht-Eingang**: heterogene Quellen (gesetze-im-internet XML,
landesrecht-berlin HTML, EUR-Lex FORMEX) werden in Akoma-Ntoso-XML
normalisiert — ab da nur noch ein Datenformat. Alles Generische
@ -231,24 +231,24 @@ steps:
method: GET
etag_cache: true
- id: normalize
use: text.akoma_normalize@^0 # XML | HTML | FORMEX → Akoma Ntoso
use: text.akoma-normalize@^0 # XML | HTML | FORMEX → Akoma Ntoso
with: { content: ${{ pull.body }}, mime: ${{ pull.content_type }} }
- id: graph
use: graph.citation_extract@^0
use: graph.citation-extract@^0
with: { norm: ${{ normalize.norm }} }
- id: duties
use: text.deontic_extract@^0
use: text.deontic-extract@^0
with: { norm: ${{ normalize.norm }} }
- id: skm
use: econ.skm_score@^0
use: econ.skm-score@^0
with:
duties: ${{ duties.list }}
population_table: "destatis://unternehmensregister/berlin-kmu"
- id: nutzen
use: law.benefit_score@^0
use: law.benefit-score@^0
with: { norm: ${{ normalize.norm }}, duties: ${{ duties.list }} }
- id: frust
use: text.readability_score@^0
use: text.readability-score@^0
with: { norm: ${{ normalize.norm }}, graph: ${{ graph.edges }} }
- id: review
use: system.approval@^0
@ -780,7 +780,7 @@ Juristen-Approval und PDF-Ausgabe.
- [ ] Modul `law.graph_extract` (Verweisextraktion, sehr eingeschränkt:
„§X i.V.m. §Y", „Artikel Z DSGVO" usw.)
- [ ] Modul `law.skm_score` mit *manuell* gepflegten Aufwand-Schätzungen
- [ ] Modul `law.benefit_score` mit RAG + Approval
- [ ] Modul `law.benefit-score` mit RAG + Approval
- [ ] Modul `law.frust_score` (deterministisch, kein LLM)
- [ ] Flow `bewerten-eine-norm.yaml`
- [ ] PDF-Export-Modul (für AG-Sitzungen)
@ -874,7 +874,7 @@ liegt dann woanders.
Vendor-Namespace `fai/`), Lizenz Apache 2.0, DCO an, CI-Pipeline analog
`fai/chain` (DCO-Sign-off, Conventional Commits, SBOM, sigstore).
`law.*`-Module später in `chain-modules-law/` als product-scoped Org.
6. **Modul-Stub `text.akoma_normalize`** in `chain-modules/text-akoma-normalize/`
6. **Modul-Stub `text.akoma-normalize`** in `chain-modules/text-akoma-normalize/`
als ersten Code-Commit (vertikaler Durchstich beginnt mit dem Pflicht-Eingang;
HTTP-Pull macht `http.request` aus Bestand). Parallel **Flutter-App-Skelett**
in `fai_reclaim/app/` (Theme nach fai_web-Palette, Hub-Connect-Seite).