CommunityCodierung & Entwicklunggithub.com

YarlisAISolutions/rules-cascade-go

Erzwinge Rule Cascade-Regeln in Go-Diensten und -Tools (net/http, chi, gin, echo, gRPC, Worker) mit rulescascade.com/go. Verwende dies, um Regeln in einen Go-Codepfad einzubinden, Validierungs-Tags oder manuelle Prüfungen durch die Engine zu ersetzen oder Regel-Ergebnisse auf HTTP- oder gRPC-Fehler abzubilden.

Was ist rules-cascade-go?

Diese Fähigkeit integriert die Rule Cascade-Engine in Go-Anwendungen und ermöglicht es, Geschäftsregeln zentral zu definieren und zur Laufzeit auszuführen. Sie unterstützt gängige Go-Webframeworks wie net/http, chi, gin und echo sowie gRPC und Worker. Die Engine wird einmalig beim Start geladen und pro Anfrage ausgewertet, wobei Middleware die Ergebnisse als 422-Problem-Details (HTTP) oder FailedPrecondition (gRPC) zurückgibt. Durch die Analyse von Validate-Tags und manuellen Prüfungen können bestehende Validierungen schrittweise durch Regelwerke ersetzt werden, was Wartbarkeit und Konsistenz erhöht. Die Fähigkeit bietet zudem Werkzeuge für tabellengetriebene Tests und Golden-Tests auf Entscheidungsebene.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YarlisAISolutions/rule-cascade-skills/tree/main/plugins/rules-cascade/skills/rules-cascade-go

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Rule Cascade in Go

Modul: go get rulescascade.com/go (Go 1.26+, keine Abhängigkeiten außerhalb der Standardbibliothek und gopkg.in/yaml.v3). Bundles stammen von rcas compile --all in build/rules/. Das YAML niemals zur Laufzeit auswerten und niemals eine Regel in Code kopieren.

Einmal laden, pro Anfrage auswerten

import rulecascade "rulescascade.com/go"

// Beim Start. Jeder Fehler: nicht starten.
data, err := os.ReadFile("build/rules/<ruleset-id>.bundle.json")
doc, err := rulecascade.ParseJSON(data)
rules, err := rulecascade.FromBundle(doc)

Die Middleware bevorzugen (ab 1.0.0-alpha.7): rulescascade.com/go/rulehttp baut die Anfrage aus dem JSON-Body (der lesbar bleibt), erzwingt die Regeln und beantwortet eine abgelehnte Anfrage mit den untenstehenden 422-Problem-Details, identisch in jeder Rule Cascade-Laufzeitumgebung.

mux.Handle("POST /orders", rulehttp.Enforce(rules, rulehttp.Options{Entity: "Order", Operation: "create",
	Actor: func(r *http.Request) map[string]any { return actorFromToken(r) }})(createOrder))
// im Handler: rulehttp.FromContext(r.Context()) ist das erlaubte Ergebnis

Andernfalls gibt rules.Enforce(request, "server", nil) einen *rulecascade.RuleViolation-Fehler zurück (Problem() ist der Body) und rulehttp.WriteError(w, err) beantwortet ihn. Darunter gibt rules.Evaluate(request, "server", nil) ein *rulecascade.Result zurück (Decision, Findings, Effects, Commands; result.Allowed()). Ein *RuleSet ist sicher für die gleichzeitige Nutzung. Jeder zustandsändernde Handler folgt vier Schritten:

  1. Auf dem Server auswerten mit map[string]any{"entity", "operation", "data", "original", "actor", "resolutions"}. Der Actor stammt von der Authentifizierungs-Middleware, niemals von einem vom Aufrufer kontrollierten Header. Dekodiere Anfragebodies mit rulecascade.ParseJSON (oder json.Decoder.UseNumber()), damit Zahlen exakt bleiben.
  2. Bei Verweigerung ablehnen mit 422 application/problem+json (type: urn:rule-cascade:rule-violation), das das Ergebnis trägt; für gRPC codes.FailedPrecondition mit den Findings in den Details.
  3. Persistieren, nach Anwenden von compute-Effekten (Type == "value"): Der Serverwert wird gespeichert.
  4. result.Commands ausführen nach dem Commit, einmal pro IdempotencyKey (eine Outbox-Tabelle oder ein Broker mit Deduplizierung).

Platzierung: eine Funktion pro Entity, die die Anfrage erstellt und auswertet, aufgerufen von jedem Handler (net/http, chi, gin, echo alle gleich). rulecascade.NewHolder lädt Bundles in einem Intervall oder nach einem Cron-Zeitplan neu und behält die letzten gültigen Regeln.

Ersetzen bestehender Validierung

rcas analyze --module <module> listet validate: und binding: Struct-Tags, ozzo-validation, Regel-Engines, handgeschriebene errors.New-Prüfungen, benannte Limits (const MaxQuantity = 10), Vergleiche mit Zahlen und switch-Zweige auf. Ein Kandidat mit drift bedeutet, dass eine andere Sprache des Projekts (oft das Frontend) denselben Namen mit einem anderen Wert entscheidet: Ein Regelwerk muss ihn für beide entscheiden. Behalte Formprüfungen im Dekodieren; verschiebe Geschäftsentscheidungen zu Regeln. Füge einen tabellengesteuerten Paritätstest über dieselben Eingaben für die alte Prüfung und die Engine hinzu, dann lösche die alte Prüfung.

Tests

Tabellengesteuerte Tests auf Decision und Finding-Codes, nicht auf Nachrichtentexten. Golden-Tests im Regelwerk (rcas check) testen die Regeln; CI führt rcas check und rcas compile --all vor go test aus.

Referenz: https://rulescascade.com/usage/go/

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Verwandte Skills