mirror of
https://github.com/MinBZK/regelrecht.git
synced 2026-06-07 12:34:13 +00:00
RegelRecht
https://regelrecht.rijks.app
- Rust 65.3%
- JavaScript 16.4%
- Vue 13.8%
- Gherkin 2.2%
- Python 0.7%
- Other 1.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
* fix(pipeline): reap zombie git children and add resource-exhaustion breaker
The harvest worker runs as PID 1 with no init, so git's reparented
grandchildren (merge-base, git-remote-https, the askpass helper)
accumulate as zombies against the container's low pids limit until
fork() fails with EAGAIN ("cannot fork() ... Resource temporarily
unavailable"). The single-threaded worker then fast-failed every queued
job for ~21h without recovering, because nothing restarted the degraded
process.
- Run tini as PID 1 in the harvester- and enrich-worker images so
reparented child processes are reaped instead of leaking. The enrich
worker kills the LLM CLI on timeout, which orphans its children, so it
needs reaping too.
- Add a resource-exhaustion circuit breaker to both worker loops:
classify fork()/EAGAIN/OOM errors as environmental, and after
WORKER_MAX_CONSECUTIVE_RESOURCE_FAILURES (default 5) consecutive such
failures exit the process so the orchestrator restarts the worker with
a clean process table — the only thing that clears the condition.
Failed jobs still go through the normal failure/requeue path so law
status is reset and nothing is left dangling.
* fix(pipeline): feed breaker outcome when harvest fail_job errors
Address ralph review finding: the harvest failure path used `?` on
fail_job, so an error while recording the failure dropped the computed
resource-exhaustion outcome and the breaker never saw it. Match on
fail_job instead and return the outcome on error, matching how the
enrich paths already handle it.
* docs(pipeline): clarify non-resource fail_job path in harvest breaker comment
Note that a non-resource fail_job error returns Processed (not Err) on
purpose, and why that can't tight-loop. Comment-only.
|
||
| .claude | ||
| .github | ||
| conformance/v0.5.0 | ||
| corpus | ||
| dev | ||
| docs | ||
| features | ||
| frontend | ||
| frontend-lawmaking | ||
| packages | ||
| schema | ||
| script | ||
| tests/fixtures/federation | ||
| .dockerignore | ||
| .env.example | ||
| .env.sso-local.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .yamllint | ||
| CLAUDE.md | ||
| corpus-registry.yaml | ||
| deny.toml | ||
| docker-compose.dev.yml | ||
| Justfile | ||
| LICENSE | ||
| README.md | ||
| REVIEW.md | ||
| rust-toolchain.toml | ||
regelrecht
Machine-readable Dutch law execution. regelrecht takes legal texts, encodes them as structured YAML, and runs them as deterministic decision logic.
What does it do
- The engine takes a regulation and a set of inputs, evaluates the decision logic, and returns a result with a full explanation trail
- Laws are tested against real-world scenarios using BDD (Gherkin) tests, many derived from legislative explanatory memoranda
- A harvester downloads and tracks Dutch legislation from the official BWB repository
- Regulations can be edited through a web UI with live execution preview
Components
Rust packages
| Package | Description |
|---|---|
| packages/engine/ | Law execution engine (also compiles to WASM) |
| packages/harvester/ | Downloads Dutch legislation from BWB |
| packages/pipeline/ | PostgreSQL job queue for law processing |
| packages/admin/ | Admin dashboard API (Axum) |
| packages/editor-api/ | Backend API for the law editor |
| packages/corpus/ | Git integration for the regulation corpus |
| packages/shared/ | Shared domain types across crates |
| packages/tui/ | Terminal dashboard (Ratatui) |
Frontends and sites
| Directory | Description |
|---|---|
| frontend/ | Law editor UI (Vue 3 + Vite) |
| frontend-lawmaking/ | Law-making process visualization (Vue 3 + Vite) |
| docs/ | Astro site: landing page + documentation |
Data and testing
| Directory | Description |
|---|---|
| corpus/regulation/ | Dutch regulations in machine-readable YAML |
| schema/ | Versioned JSON schema for the law format (current: v0.5.2) |
| features/ | Gherkin BDD scenarios for law execution |
| packages/grafana/ | Grafana monitoring dashboards |
Deployed services
| Service | URL |
|---|---|
| Editor | https://editor.regelrecht.rijks.app |
| Landing page | https://regelrecht.rijks.app |
| Documentation | https://docs.regelrecht.rijks.app |
| Law-making | https://lawmaking.regelrecht.rijks.app |
| Harvester admin | https://harvester-admin.regelrecht.rijks.app |
| Grafana | https://grafana.regelrecht.rijks.app |
PR preview environments are deployed automatically and cleaned up when the PR is closed.
Getting started
Prerequisites: Rust (stable) and just.
just check # run all quality checks (format, lint, build, validate, tests)
just test # unit tests only
just bdd # BDD tests only
See the docs site for full development instructions.