Repository navigation
fix(subscriber): redact untrusted orphan-dispatch errors in immutable audit - #55
Conversation
2026-11-11 04:23 UTC — guarded audit-minimization patch and isolated acceptanceCreated stacked draft PR #55 against PR #54's feature branch (not Risk addressed: orphan reconciliation copied Independent native acceptance on FORGE: Nexus governed Hosted CI: certification-forge-ci run 42958758348 was in_progress on last check; no green conclusion claimed. Held release gates: Independent audit compatibility review, exact-head CI/security, full stacked-suite verification, backup/rollback, signed production critical-journeys and E2E attestation. Current CertForge signed verdict remains NOT_READY. PR #55 stays draft/unmerged, no protected or running services changed. |
2026-11-11 05:17 UTC — independent exact-head CI closure and isolated negative-path reviewGitHub exact-head CI now verified green: draft PR #55 head Targeted independent negative-path attempt: A fresh disposable FORGE clone of 457 tracked files from the previously isolated combined #40/#41 scratch checkout executed one proposed missing-positive-usage test. It did not exercise the intended missing-meter condition: SQLite rejected Remaining gates: Independent review of reason-code allowlist, valid backed-up/rollback-safe exact stacked candidate, signed critical-journey and production E2E attestation. Latest connected CertForge signed run remains |
Scope
Small, isolated security-hardening follow-up to combined CertForge #49, concurrency #53 and atomicity #54. It changes no release configuration or running service.
The orphan-reconciliation audit previously copied
subscriber_run_dispatches.last_errorverbatim into an immutablesubscriber_audit_events.details_jsonentry. This value can carry unexpected worker/remote exception text. The new path retains known non-sensitive machine codes (subscriber_worker_claim_denied,dispatch_attempts_exhausted,dispatch_lease_expired), maps other nonempty values toredacted, and preserves a missing value as null.Adds parametrized regression cases checking known-code retention, synthetic Bearer-like untrusted text non-disclosure and null handling, alongside run terminalization and metering invariants. Tests use only isolated SQLite temporary fixtures.
Base and exact source
6cb0c9b0dfca33357cf7f8e7c6caa6671a383b78(draft PR test(subscriber): prove atomic rollback when dispatch compensation fails #54).24277990381d376ab427e42851c62a03a3110a34.Acceptance gates
No protected credential, production database, service, OAuth registration, Telegram poller, or ESH/Breebell deployment changed.