[SUPERSEDED by #90236] webhook Task 10 historical campaign lineage - #85523
[SUPERSEDED by #90236] webhook Task 10 historical campaign lineage#85523andrexibiza wants to merge 14 commits into
Conversation
|
This was generated by AI during triage. Summary: Problems:
Solution:
Evidenceno deterministic fact backs this claim — model belief, not executed or read evidence Checked against |
Reproduce and fix the two Task 10 defects against the still-monolithic gateway/platforms/webhook.py: - NousResearch#7448: idempotency was keyed only by delivery_id, so a provider delivery fan-out to routes A and B skipped route B. Now keyed by (profile, route, delivery_id) and bound to a body hash; a same-key replay with a different body returns 409 (conflict) instead of being silently dropped, while a retry on the same route is still deduplicated. - NousResearch#55829: {__raw__} was json.dumps(payload)[:4000], producing invalid JSON for large payloads. Now rendered as a structurally valid envelope {"payload":<bounded>, "truncated":bool, "original_bytes":N}. Also: 429 now emits Retry-After (rate-limit matrix). Behavior change is confined to these three contracts; all prior adapter behavior preserved. Verified: 4 new http_contract + 34 adapter regression + 9 integration/dynamic = 47 passed; py_compile clean; git diff --check clean; webhook.py at 1455 lines (2k-compliant). Authored by Hermes Agent (Ares) under Axl Ibiza's Webhook Revolution campaign. Fixes NousResearch#7448 Fixes NousResearch#55829
9baa03a to
b402cf4
Compare
Signed-off-by: Axl Ibiza, MBA <andrexibiza@gmail.com>
fix(webhook): make intake fan-out-safe and structurally valid (Task 10, #7448 #55829)Strong hardening: explicit media-type parsing,
|
Task 10 execution status — current-main closure prepared (2026-08-19)Source-of-truth state:
Prepared current-main intake closureVerification against exact current-main blobs for every touched existing path: The candidate closes provider-native GitHub/Svix/GitLab/Standard-Webhooks/generic/Stripe/Chatwoot identity, no-ID/no-dedup behavior, profile/route/provider isolation, complete UTF-8 raw-envelope bounds with Fan-out interlock#85644 still treats one-success/one-failure fan-out as It appends Composition and docs
Remaining hard blockerThe connected GitHub identity can change PR metadata and comments, but every Contents/Git Data/ref write against the fork still returns |
Thanks for the completion sweep. The fan-out-safe intake with bounded idempotency and explicit media-type parsing reads consistent. Noting the remaining CI lane — if its failing test set is unrelated to these changes, a retrigger should clear it. |
|
Concrete provider gap: Chatwoot now documents The current Hermes webhook path selects delivery IDs from GitHub/Svix/ Could the stable-provider-ID registry include Chatwoot, with an explicit policy such as:
This is especially important for CRM writes, where a false duplicate can silently lose a customer message. It also complements #84580 and the raw-payload correctness work in #55829. |
Post-sweep delta — Chatwoot proof must join the closure patchThe provider gap in #issuecomment-5334872655 is valid and is not covered by the prepared closure SHA The live head still reduces “no recognized provider delivery ID” to a millisecond timestamp. The closure patch already removes that false-collision fallback for its known provider set, but Chatwoot needs to be an explicit source-proof scheme before this PR is publishable:
Required regressions:
Interlock: #90049 now makes the semantic boundary explicit—request admission without stable provider identity cannot be projected as duplicate-complete. The updated closure patch needs a new SHA and exact-head verification receipt; the older SHA remains useful evidence but is no longer terminal. Repository-object publication remains blocked by GitHub's HTTP 403 |
|
Exact-head closure check at Current source still contains the concrete residuals listed in the body:
Latest unchanged-head CI I also exercised the connector's actual Contents API against this exact fork branch during this sweep. The endpoint is exposed, but GitHub returned 403 |
repair: replay Task 10 intake lineage onto current main
repair: attach verified Task 10 closure packet
ci(temp): enable GitHub-side NousResearch#85523 closure repair
ci(temp): run GitHub-side NousResearch#85523 closure repair
ci(temp): trigger NousResearch#85523 closure repair
Rebase and compress the canonical Task 10 implementation onto current main while preserving provider-native idempotency, scoped conflict detection, bounded caches, strict media intake, and UTF-8 complete-envelope raw bounds exactly once. Replaces historical branch commits 1cfb810482624eb19502f6852fb8616d931556f4 and 15ef1929685b6f57bcd87bb2acfe510e813ac706 without replaying NousResearch#85523 topology. Exact-tree CI retry: the prior run passed every webhook-relevant slice, Docker, Nix, lint, and security check; its sole failure was an unrelated Telegram group plaintext-command E2E timeout. Source tree unchanged.
Architecture interlock — Task Completion VerificationAmendment I to All Gods Must Die: Adversarially Verified Transformation preserves this PR as closed, unmerged Task 10 implementation provenance and records its typed supersession by #90236. Historical credit remains attached here; active canonical ownership does not. Related #80551 |
Superseded — provenance only
This historical Task 10 campaign branch is not the publishable closure candidate.
The current-main implementation now lives in #90236 (
task10-current-main-closure), which was rebuilt directly against currentmainand owns the executable Task 10 acceptance contract: provider-native identity, composite idempotency, body-conflict truth, profile/route rate isolation, bounded cache semantics, strict media/object intake, and UTF-8-bounded raw envelopes.This PR remains useful as provenance for the earlier Webhook Revolution work and the review trail that identified the closure requirements. Its stale branch topology, campaign receipts, and overlapping historical ownership should not be merged or mechanically rebased.
Provenance retained here
Canonical continuation
Part of #84834. Historical refs: #7448, #55829.