ProofedMesh/README.md
CTO 2e44147a71
All checks were successful
validate / JSON Schema (ajv) (push) Successful in 19s
validate / Go (vet + test) (push) Successful in 19s
validate / Rego (opa fmt + opa test) (push) Successful in 14s
services: add attest-reconciler Go service (periodic worker re-signs per_diem_rates rows without rate_change_attestation_ref via Signer+TLog, 11/11 go tests pass, go vet clean)
- services/attest-reconciler/ as its own go.mod (admin-api internal/ is not importable; shared code gets extracted when a 3rd consumer appears).
- Scheduler accepts "@every <dur>" or a bare Go duration; context-cancellation stops the loop cleanly.
- Store client defines PendingRateStore + Postgres skeleton for SELECT ... WHERE rate_change_attestation_ref IS NULL.
- Orchestrator + HTTPSigner + tlog.HTTPSubmitter mirror admin-api byte-for-byte so the TLog idempotency key collides on resubmits (kein Doppelsignieren).
- Prometheus text-format /metrics endpoint, dependency-free: attest_reconciler_dirty_rows_total, _reconciliation_attempts_total, _reconciliation_failures_total, _idempotent_noop_total.
- Tests with fake store + fake signer + fake submitter cover: happy path, already-attested rows are NOT re-signed, TLog idempotency across ticks, TLog-down failure path, pre-cancelled ctx.
- Top-level README reflects the new service; CI auto-discovers services/*/go.mod so no workflow change needed.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-25 18:06:36 +00:00

108 lines
5.4 KiB
Markdown

# ProofedMesh
**Identity-Aware Agent Messaging Platform** — eine Plattform für kryptografisch nachvollziehbare Kommunikation zwischen Menschen, KI-Agenten und beliebigen Prozess-Senken (ERP, eigene Datenbankapplikationen, HTTP-Webhooks, Message-Queues, Dateiablage).
## Vision
Benutzerfreigaben, delegierte Berechtigungen und sämtliche Verarbeitungsschritte zwischen Menschen, Agenten und Zielsystemen werden kryptografisch nachvollziehbar.
> Der Benutzer autorisiert den ursprünglichen Geschäftsinhalt. Jeder Agent attestiert anschließend seine eigene Verarbeitung. Die empfangende Senke überprüft die vollständige Kette, bevor sie eine Aktion ausführt.
Identität, Berechtigung, Verarbeitung und Nachrichtentransport werden strikt getrennt. Der Trust-Core ist senken-agnostisch.
## Status
Dieses Repository bildet die **Basis für die Architekturentwicklung**. Die Komponentenentwicklung hat noch nicht begonnen.
- **Aktive Architektur:** [`docs/architecture/v1.1.md`](docs/architecture/v1.1.md) — V1.1 inkl. Senken-Generalisierung (SAP ist eine von vielen Senken), Pocket ID als alleiniger IdP, PII-Trennung, Trillian für Transparency Log, Content Binding mit WebAuthn, Replay-Schutz, Retention 1 Jahr
- **Historisch:** [`docs/architecture/v1.0.md`](docs/architecture/v1.0.md) — ursprünglicher Entwurf, archiviert
## Architekturprinzipien
1. **Unveränderliche Benutzerfreigabe** — ein vertrauenswürdiger Dienst bestätigt den konkret autorisierten Geschäftsinhalt (per WebAuthn Content Binding).
2. **Eigene Identität jedes Agenten** — jeder Agent besitzt eine separate kryptografische Identität.
3. **Verkettete Attestierungen** — jeder Verarbeitungsschritt referenziert exakte Eingabe- und Ausgabe-Hashes.
4. **Unabhängige Autorisierung** — eine Signatur allein erteilt keine Berechtigung; OPA kontrolliert erlaubte Transformationen und Senken-Aktionen.
5. **Transportneutralität** — Nachweise funktionieren über HTTP, NATS oder Matrix, ohne dass die Vertrauenskette verloren geht.
6. **Senken-Neutralität** — der Trust-Core kennt keine konkrete Senken-Semantik; Senken-Adapter sind Plug-ins mit festem Vertrag.
## Zielkernstack (V1.1)
| Bereich | Technologie |
| ------------- | ------------------------------------------------------------------ |
| Identität | Pocket ID (Menschen und Agent-Clients) |
| Workload-ID | Kubernetes projected ServiceAccount Token + TokenReview |
| Signaturen | Ed25519 / DSSE, OpenBao Transit |
| Provenienz | in-toto v1 (`basicstack.de/attestations/*/*`) |
| Autorisierung | OPA + Approval Service |
| Transparency | Trillian + PostgreSQL |
| Transport | HTTPS/mTLS + NATS JetStream; Matrix optional für Mensch-Chat |
| Agenten | Paperclip |
| Senken | Plug-in-Architektur: SAP S/4HANA (ABAP), eigene DB-Apps (Go-Adapter), HTTP-Webhooks, Message-Queues, Dateiablage |
| Evidence | PostgreSQL + S3 (Retention 1 Jahr) |
| PII | Separater verschlüsselter S3-Bucket, redaktionierbar |
## Repository-Layout
```
docs/
architecture/
v1.0.md # Ursprünglicher Entwurf (archiviert)
v1.1.md # Aktive Architektur
adr/
README.md # ADR-Index
0000-template.md
0001-first-rollout-db-app-scope.md
0002-session-scope-token-format.md
0003-pii-retention-policy.md
0004-db-migrations.md
db/
README.md
trust/migrations/0001_per_diem_rates.{up,down}.sql
schemas/
README.md
expense/canonical/{v1.0.0,v1.1.0,v1.2.0}.json
ds/expense/project_assignment/v1.0.0.json
ds/receipts/v1.0.0.json
ds/per_diem/v1.0.0.json
sink/db/expense/{v1.0.0,v1.1.0,v1.2.0}.json
policies/
README.md
transformations/{expense,per_diem}.rego (+ _test.rego)
sinks/expense_db_app.rego (+ _test.rego)
data_sources/{expense_db_app,receipts,per_diem_rates}.rego (+ _test.rego)
services/
per-diem-calculator/ # deterministic calculator (Go)
admin-api/ # admin surface for per-diem rate management (Go)
attest-reconciler/ # periodic worker: re-signs per_diem_rates rows without rate_change_attestation_ref (Go)
.forgejo/workflows/
validate.yml # JSON-Schema (ajv) + Rego (opa fmt + opa test) + Go (vet + test)
```
Weitere Verzeichnisse (weitere Services, Deployment-Manifeste, Senken-/Datenquellen-Adapter) folgen im Zuge der Architekturentwicklung.
## Einstiegspunkte
- [Architektur V1.1](docs/architecture/v1.1.md) — Zielbild
- [ADRs](docs/adr/README.md) — getroffene Entscheidungen
- [Schemas](schemas/README.md) — kanonische Business-, Datenquellen- und Senken-Formate
- [Policies](policies/README.md) — OPA/Rego-Policies für Transformationen, Senken und Datenquellen
## Lokal validieren
```bash
# JSON-Schemas
npx -y ajv-cli@5 compile --spec=draft2020 -c ajv-formats \
-s schemas/expense/canonical/v1.0.0.json
# Rego
opa fmt --list --diff policies/
opa test policies/ -v
# Go services
(cd services/admin-api && go vet ./... && go test ./...)
(cd services/per-diem-calculator && go vet ./... && go test ./...)
(cd services/attest-reconciler && go vet ./... && go test ./...)
```
CI (`.forgejo/workflows/validate.yml`) läuft dieselben Prüfungen auf jedem Push und PR gegen `main`.