Skip to content

feat(ingest): self-origin notification suppression seam and predicate (RIG-3326) - #1177

Merged
trunk-io[bot] merged 2 commits into
mainfrom
compass-forge/rig-3326-t1-suppression-seam
Sep 12, 2026
Merged

feat(ingest): self-origin notification suppression seam and predicate (RIG-3326)#1177
trunk-io[bot] merged 2 commits into
mainfrom
compass-forge/rig-3326-t1-suppression-seam

Conversation

@rigel-mintaka

@rigel-mintaka rigel-mintaka commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

This PR is part of a stack containing 2 PRs:

  1. main
  2. "feat(ingest): self-origin notification suppression seam and predicate (RIG-3326)" (this PR)
  3. feat(ingest): advance a suppressed subscriber's delivery cursor when caught up (RIG-3326) #1185

Adds the IdentityResolver seam and the suppression predicate at the
notify-router fan-out, per the frozen self-delegate-suppression record.

An event's actor handle is resolved once per route; each subscriber's
handle is resolved through the seam and memoized by account id. A
dispatch is skipped only on a positive owner-qualified match — both
owners and both agents non-empty and equal. The owner leg is
load-bearing: an agent handle is unique only per owner, so a bare-handle
match would false-suppress a genuine cross-agent notification between
two owners' agents both named the same thing.

Every ambiguous state delivers: human commenter, either side
unqualified, no ownership row at the coordinate, a store fault (logged
at warn), or a nil resolver. CHECKS and UPDATE carry no actor and never
suppress; their tests build an event that DOES carry a matching actor,
so the arm rather than the fixture is what keeps the dispatch.

The STATE arm resolves a zero handle and delivers: its actor rides a
forge_state_transitions memo that is not reachable through this
two-method seam, which is the record's documented interim.

Subscription scope is projected out of both subscriber queries and
threaded to the router so the cursor advance can stay artifact-scoped.

Co-authored-by: Matt Wilkinson matt@rigel.build

… (RIG-3326)

Adds the IdentityResolver seam and the suppression predicate at the
notify-router fan-out, per the frozen self-delegate-suppression record.

An event's actor handle is resolved once per route; each subscriber's
handle is resolved through the seam and memoized by account id. A
dispatch is skipped only on a positive owner-qualified match — both
owners and both agents non-empty and equal. The owner leg is
load-bearing: an agent handle is unique only per owner, so a bare-handle
match would false-suppress a genuine cross-agent notification between
two owners' agents both named the same thing.

Every ambiguous state delivers: human commenter, either side
unqualified, no ownership row at the coordinate, a store fault (logged
at warn), or a nil resolver. CHECKS and UPDATE carry no actor and never
suppress; their tests build an event that DOES carry a matching actor,
so the arm rather than the fixture is what keeps the dispatch.

The STATE arm resolves a zero handle and delivers: its actor rides a
forge_state_transitions memo that is not reachable through this
two-method seam, which is the record's documented interim.

Subscription scope is projected out of both subscriber queries and
threaded to the router so the cursor advance can stay artifact-scoped.

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@linear-code

linear-code Bot commented Sep 12, 2026

Copy link
Copy Markdown

RIG-3326

@trunk-io

trunk-io Bot commented Sep 12, 2026

Copy link
Copy Markdown

😎 This pull request was merged.

@rigel-mintaka
rigel-mintaka marked this pull request as ready for review September 12, 2026 20:54
@github-actions

github-actions Bot commented Sep 12, 2026

Copy link
Copy Markdown

Compass engineering docs preview: https://compass-forge-rig-3326-t1-su.compass-eng-docs.pages.dev

Deployed from compass-forge/rig-3326-t1-suppression-seam at 1d0eb03.

… the fixture (RIG-3326)

The STATE interim-open test passed because its event carried no actor
at all, so STATE resolved a zero handle through any arm. Routing STATE
through the author row - the proxy the record forbids, because it would
eat an agent's notification that a human closed its issue - left the
test green.

The STATE event now carries a matching Compass commenter and a matching
author row, so delivering holds only if STATE reached the no-actor arm.
Both misroutes now fail it.

The two resolver-fault tests had the same shape: the fake returned a
zero handle alongside its error, so a caller that used the value
instead of failing open still delivered. The fake now returns a
populated handle with the error and the account fixture matches the
subscriber, so using it suppresses and the tests catch it.

Adds the missing AuthorHandle fault case - the record requires a store
fault there to log and deliver, and only the HandleForAccount side was
covered. Drops the stateEvent helper, now unused.

Co-authored-by: Matt Wilkinson <matt@rigel.build>
@trunk-io
trunk-io Bot merged commit 9a53159 into main Sep 12, 2026
15 checks passed
@trunk-io
trunk-io Bot deleted the compass-forge/rig-3326-t1-suppression-seam branch September 12, 2026 23:51
@trunk-io

trunk-io Bot commented Sep 12, 2026

Copy link
Copy Markdown

This pull request was merged into main as part of stacked PR 1185.

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.

2 participants