Skip to content

feat(openclaw-plugin): v2.0.0-alpha.1 — fail-closed default + §12-review fixes#86

Merged
MoltyCel merged 2 commits into
mainfrom
feat/openclaw-plugin-v2-alpha1
May 28, 2026
Merged

feat(openclaw-plugin): v2.0.0-alpha.1 — fail-closed default + §12-review fixes#86
MoltyCel merged 2 commits into
mainfrom
feat/openclaw-plugin-v2-alpha1

Conversation

@MoltyCel

Copy link
Copy Markdown
Owner

Summary

Erstes echtes §12-Review-Lauf (2026-05-28, label openclaw-plugin-v2.0.0-alpha.0) fand 6 Blocker. Dieser PR adressiert 5 davon im Code + 1 als ADR-deferral auf v2.1.

Re-§12-Review läuft nach Merge dieses PRs gegen das gleiche Briefing — kein npm publish davor.

Code-Fixes (Blocker #1, #2, #4, #5, #6)

#1 Fail-Open Default → Fail-Closed

  • Neuer Config-Param failOpen (default false) in openclaw.plugin.json, src/openclaw-types.ts
  • before_tool_call + inbound_claim blocken jetzt bei API-Lookup-Fehlern statt durchzulassen
  • Opt-in via failOpen: true für Fleets wo Verfügbarkeit über Trust-Gating geht
  • BlockReason enthält explizit failOpen=false für Debugging

#2 inbound_claim DENY ignoriert

#4 Cache TTL

  • Default cacheTtlMs: 300000 (5 min) → 10000 (10s) — Zero-Trust-konforme Revocation-Latency
  • README erklärt Trade-off (Latenz vs API-Call-Volumen)

#5 Vendored OpenClaw-Types ohne Versions-Anchor

  • Header-Kommentar in src/openclaw-types.ts pinnt explizit Range 0.9.x – 1.0.x mit Baseline-Commit 45146913007d
  • Anweisung „bump-and-test on upstream-breaking change"
  • README zeigt Range in Architecture-Section

#6 GDPR/Privacy

  • Neue README-Section „Privacy & Data Handling" listet:
    • Pro Hook welche DIDs/Adressen ausgehen
    • Endpoint (api.moltrust.ch, konfigurierbar)
    • Retention-Pointer (moltrust.ch/privacy)
    • Disable-Mechanismus (minTrustScore: 0 + verifyOnStart: false)
    • Ehrliche Bereichsgrenze: „air-gapped trust gating geht so nicht"

ADR-Deferral (Blocker #3 — JWS Response-Signatur)

Neuer ADR docs/decisions/0001-openclaw-jws-response-verification-deferred.md (erster ADR im moltrust-api Repo überhaupt). Erklärt warum JWS-Verify in v2.1 statt v2.0.0-alpha.1:

  • Saubere Implementation braucht JWKS-Bootstrap + Key-Rotation + Failure-Mode-Design = eigener Sprint
  • Risiko-Mitigation in v2.0.0-alpha.1 durch Fail-Closed (kein Fall-Through bei API-unreachable)
  • README-Section „Security Posture & Roadmap" kommuniziert v2.1-Plan + verbleibende MITM-Surface ehrlich

Publish-Prep (re-applied)

Origin/main hat noch den Pre-Publish-Prep-Stand (@moltrust/openclaw v2.0.0-alpha.0). Dieser PR re-applied alle Publish-Prep-Edits:

  • Paketname @moltrust/openclaw@moltrust/openclaw-plugin
  • version2.0.0-alpha.1
  • prepublishOnly, engines (node>=20), publishConfig.access: public
  • author, bugs, repository.url (Standardformat git+https://...)
  • .gitignore + .npmignore

Tests

  • 27 → 31 tests (4 neue: fail-closed/fail-open je Hook)
  • npm install && npm run build && npm test lokal grün
  • Erwarte CI: bandit, import smoke, pytest (sollten alle pass — nur TS/JSON Änderungen, kein Python)

Was NICHT in diesem PR

  • Echter npm publish — wartet auf Re-§12-Review
  • v2.1 JWS-Implementation (per ADR 0001 eigener Sprint)
  • GitHub-Repo MoltyCel/moltrust-openclaw-plugin Anlage — repository.url zeigt darauf, Repo existiert noch nicht (flagge ich separat nach Merge)

Coordination

  • Re-§12-Review läuft nach Merge gegen das gleiche Briefing (/Users/kerstenkroehl/Downloads/review-briefing-openclaw-plugin.md) mit Label openclaw-plugin-v2.0.0-alpha.1
  • Briefing-Inhalt muss ggf. an die neuen Defaults angepasst werden (sonst reviewen die Modelle alten Stand)

Lars Kroehl added 2 commits May 28, 2026 19:13
…iew fixes

Erstes §12-Review (run 2026-05-28, label openclaw-plugin-v2.0.0-alpha.0)
fand 6 Blocker. Dieser PR adressiert 5 davon im Code + 1 als ADR-deferral.

Code-Fixes:
  - #1 Fail-Open Default → Neuer Config-Param `failOpen` (default false).
        before_tool_call + inbound_claim blocken jetzt bei API-Lookup-
        Fehlern, statt durchzulassen. Opt-in via failOpen=true.
  - #2 inbound_claim DENY-Ignorierung → Review-Befund war überwiegend
        Halluzination (Score-Check existierte schon), aber der Fail-Open-
        Pfad ist via #1 jetzt auch hier fail-closed.
  - #4 Cache TTL Default 300s → 10s (Zero-Trust Revocation-Latency).
  - #5 Vendored OpenClaw-Types ohne Versions-Anchor → Header-Kommentar
        in openclaw-types.ts pinnt jetzt explizit Range 0.9.x – 1.0.x
        + Anweisung „minor bump on upstream-breaking change". README
        zeigt Range in Architektur-Section.
  - #6 GDPR/Privacy → Neue README-Section „Privacy & Data Handling"
        listet explizit alle Endpoints, gesendete Datenfelder, Endpoint-
        URL, Retention-Pointer, Disable-Mechanismus.

ADR-Deferral:
  - #3 JWS Response-Signatur-Verifikation → ADR 0001 (docs/decisions/)
        erklärt warum v2.1 statt v2.0.0-alpha.1: braucht Bootstrap-/
        Rotations-/Failure-Mode-Design, eigener Sprint. Risiko-
        Mitigation in v2.0.0-alpha.1 durch #1 (kein Fall-Through bei
        API-unreachable). README-Section „Security Posture & Roadmap"
        kommuniziert v2.1-Plan + verbleibende MITM-Surface.

Publish-Prep (re-applied, since v2.0.0-alpha.0 origin/main state hat
diese noch nicht):
  - Paketname @moltrust/openclaw → @moltrust/openclaw-plugin
  - prepublishOnly, engines (node>=20), publishConfig.access: public
  - author, bugs, repository.url (Standardformat)
  - .gitignore + .npmignore

Tests: 27 → 31 (4 neue, fail-closed + opt-in-fail-open je hook).
py-equivalent: tsc + vitest grün, package size ~12 kB.

Re-§12-Review läuft nach Merge gegen das gleiche Briefing.
Re-§12-Review für alpha.1 (run 2026-05-28 17:27 UTC, output
~/moltstack/reviews/20260528_172832_openclaw-plugin-v2.0.0-alpha.1_review.md)
votierte ÜBERARBEITEN. Drei neue Blocker für alpha.2 — alle in
diesem Commit adressiert.

Blocker #1 (Test-Lücke): kombinatorischer Pfad "own DID OK +
counterparty lookup fail + failOpen=true → ALLOW" war nicht getestet.
Test ergänzt in before-tool-call.test.ts.

Blocker #2 (Performance): sequenzielle Counterparty-Lookups in
before-tool-call.ts waren O(N × API-latency) — 4 DIDs × 50ms = 200ms+
Event-Loop-Block. Fix: Promise.allSettled + post-evaluation. Block-
Priority ist deterministisch (erste Counterparty im array order wins).
Own-DID-Check bleibt VOR counterparties (early-exit bei eigener
Insufficienz).

Blocker #3 (Air-Gap Lücke): die moltrust_verify / moltrust_trust_score /
moltrust_endorse Agent-Tools blieben auch bei minTrustScore=0 +
verifyOnStart=false beim Agent-Runtime registriert — LLM-Halluzinationen
konnten ungewollte DID-Lookups triggern. Neue Config-Option
`registerMoltrustTools` (default true). Wenn false: die 3 registerTool-
Calls werden geskipped, Tools sind für die LLM nicht aufrufbar. Slash-
Commands + RPC + Lifecycle-Hooks bleiben unverändert (explizite
Operator/User-Aktionen, nicht LLM-aufrufbar).

README: Privacy-Section schärft Disable-Anweisung — "Disabling
automatic outbound calls" (alt) vs neue "True air-gap mode" mit
registerMoltrustTools=false. Configuration-Beispiel zeigt neuen
Default-Wert.

Tests: 31 → 32 (1 neuer für kombinatorischen Pfad). Alle 32 grün,
tsc grün.

Re-Re-§12-Review läuft mit alpha.2-Briefing-Append vor npm publish.
@MoltyCel MoltyCel merged commit 4e7486e into main May 28, 2026
12 checks passed
@MoltyCel MoltyCel deleted the feat/openclaw-plugin-v2-alpha1 branch May 28, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant