feat: initial graph-citation-extract v0.1.0 (graph.citation_extract@0.1.0)

Regex-based citation edge extraction from German legal text.
Edges are typed per the Coupette/Katz/Bommarito 2021 schema.

Detected edge types in v0.1.0:

  - cites         "§ N Gesetz"  /  "Art. N Gesetz"
  - verweist_iVm  "i.V.m. §/Art. N"

Output is a { from: eli, citations: [{to, type, raw}] } graph
fragment. raw preserves the matched source text for diagnostics
and Juristen-review.

Pure in-WASM (regex), zero filesystem, zero network.

Reserved for next versions:

  - 0.2: amends, superseded_by (requires title-line analysis)
  - 0.3: transposes (requires cross-document EUR-Lex resolution —
         belongs in a separate graph.resolve step rather than
         here)
  - 0.4: delegates_to_land / delegates_to_kommune

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-06-18 11:25:03 +02:00
commit a4f79813b5
6 changed files with 715 additions and 0 deletions

37
Cargo.toml Normal file
View file

@ -0,0 +1,37 @@
[package]
name = "graph_citation_extract"
version = "0.1.0"
edition = "2024"
authors = ["Dr. Stefan Flemming <chain@flemming.ai>"]
license = "Apache-2.0"
publish = false
description = "F∆I module — extract typed citations from legal text into a graph-edge list"
repository = "https://git.flemming.ws/chain-modules/graph-citation-extract"
rust-version = "1.85"
[lib]
crate-type = ["cdylib", "rlib"]
[dependencies]
chain-module-sdk = { git = "https://git.flemming.ai/fai/chain-module-sdk-rust.git", branch = "main" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
regex = "1"
[profile.release]
opt-level = "s"
lto = true
codegen-units = 1
strip = "symbols"
[lints.rust]
unsafe_op_in_unsafe_fn = "warn"
[lints.clippy]
unwrap_used = "deny"
expect_used = "deny"
panic = "deny"
print_stdout = "deny"
print_stderr = "deny"
[workspace]