fix(hooks): version outbound webhook envelope and fail closed on invalid config - #85653
fix(hooks): version outbound webhook envelope and fail closed on invalid config#85653andrexibiza wants to merge 1 commit 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 |
ae95b20 to
9ee0796
Compare
fix(hooks): version outbound webhook envelope and reject unknown config fields (Webhook Feature Package)
|
|
Rechecked this against the current PR head So the reported regression was real for the earlier stacked snapshot, but it is no longer present in the current Task 14 diff. I am preserving that allowlist owner rather than re-extracting it here. |
a1589f7 to
71c40ca
Compare
|
Implemented every substantive point from issuecomment-5303400105 on exact head 1. Legacy inline
|
|
@Enough1122, thank you for the four concrete review points. They are all incorporated in the current implementation, with the exact code/test mapping in issuecomment-5358721447. Exact-head Docker and Nix are now green. The exact-head CI workflow is still queued, so that remains the only unexecuted landing receipt. |
andrexibiza
left a comment
There was a problem hiding this comment.
Verified the current compressed head 71c40caaf47ea3281ef2c11d2621658ab3497dc5 rather than the older stacked snapshots referenced by the reviews.
The substantive resolver findings are closed on this object:
- explicit references fail closed and never silently become unsigned delivery;
- exactly one of
secret_ref/ compatibilitysecret_envis accepted; - inline plaintext
secretis rejected with an actionable migration message that does not log the value; agent.secret_scope.get_secretis the only credential authority;UnscopedSecretErrordisables the target and there is no rawos.environfallback after an authoritative scoped miss, so multiplex profile isolation is preserved;- unexpected resolver/import/state failures are not swallowed by a blanket
except Exception; - the module now states the receiver-side V2 replay contract: timestamp freshness + constant-time HMAC verification + delivery-ID deduplication are required; timestamp binding alone is not replay prevention.
The old profile-allowlist extraction finding does not exist in this one-commit/three-file Task 14 diff and should not be carried forward as current review residue.
Hosted exact-head Docker 32391368059 and Nix 32391368015 are green. CI 32391368673 is still queued; I am not inheriting green from the prior head.
71c40ca to
d136e85
Compare
|
Fresh exact-head settlement for
The previous exact-head red was solely @teknium1 — maintainer review requested. The owned contract remains narrow: versioned outbound envelopes, one profile-scoped secret-reference authority, fail-closed unresolved references, signed V2 timestamp+body input, redirect refusal, and bounded fire-and-forget delivery. This is Task 14 authority, not final webhook integration. |
|
@teknium1 maintainer review requested on the new exact current-main head This is no longer a CI-repair item. Fresh exact-head acceptance is complete:
The branch is one commit / three files directly on |
andrexibiza
left a comment
There was a problem hiding this comment.
Exact-head follow-up at d136e8562c372dc9cbf1dbacd94d79b2079431d3: the bounded Task 14 outbound-webhook lane has no remaining blocker.
The current one-commit/three-file restack preserves the previously reviewed contract:
- explicit opaque credential references fail closed on scoped miss and never downgrade to unsigned delivery or raw environment fallback;
- inline plaintext secrets are rejected without echoing the value;
- the envelope is versioned and V2 binds the timestamp to the raw body;
- receiver documentation correctly requires freshness, constant-time HMAC verification, and delivery-ID deduplication rather than misrepresenting timestamp binding as replay prevention;
- redirects remain refused and delivery remains bounded through the existing worker queue.
This review is scoped to #84834 Task 14. It does not claim inbound intake, verifier authority, session policy, callback transport, or final integration.
Fresh exact-head hosted evidence is green: CI 32446033866, Docker 32446033398, and Nix 32446033397. The PR is open, non-draft, and mergeable. No source, exact-head CI, review, or mergeability blocker remains on this bounded object.
Part of #84834 — Webhook Feature Package Task 14.
Current disposition
The outbound-webhook lane is semantically restacked directly onto current
mainas a one-commit/three-file object.533886c8b8eb67ff8b389b7f48e7d5e5d9c575b9d136e8562c372dc9cbf1dbacd94d79b2079431d3The restack was proof-preserving: comparison from the previous base to current
mainshowed that none of this lane's three owned files changed upstream. The new object overlays the exact previously reviewed production/test blobs onto the exact current-main tree rather than replaying historical campaign topology.Owned contract
schema_version: 1);secretis rejected with a value-free migration hint;secret_ref, withsecret_envcompatibility) and no raw environment fallback after the profile secret authority returns a scoped miss;<timestamp>.<raw body>and receiver documentation requires freshness, constant-time HMAC verification, and delivery-ID deduplication; timestamp binding alone is not represented as replay prevention;This closes the cross-profile authority defect in the old implementation:
agent.secret_scope.get_secretis the sole credential resolver.UnscopedSecretErrorfails the target closed; unexpected runtime/import failures remain visible instead of being swallowed by a blanketexcept Exception.Exact-head verification
All hosted acceptance receipts are attached directly to
d136e8562c372dc9cbf1dbacd94d79b2079431d3:32446033866— success32446033398— success32446033397— successNo status is inherited from the prior head. The former exact-head Windows progress failure belonged to
71c40ca...; the current-main restack now passes that repository matrix on its own exact object.Topology
This remains the Task 14 outbound-hook authority under #84834. It does not absorb inbound webhook intake (#90236/#90995), verifier authority (#85318), session policy (#90304), callback transport (#85675), or final Task 19 integration (#85640).