Skip to content

feat(forge): carry the owner-qualified actor handle on the wire (RIG-3326) - #1020

Draft
rigel-mintaka wants to merge 1 commit into
compass-forge/rig-3331-toolsfrom
compass-forge/rig-3326-owner-wire
Draft

feat(forge): carry the owner-qualified actor handle on the wire (RIG-3326)#1020
rigel-mintaka wants to merge 1 commit into
compass-forge/rig-3331-toolsfrom
compass-forge/rig-3326-owner-wire

Conversation

@rigel-mintaka

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

Copy link
Copy Markdown
Contributor

Implements T0 of the RIG-3326 record (docs/designs/server/compass-forge-self-delegate-suppression/design.md, under review in #997). Stacked on #1019.

Restores the owner on attribution so the notify router has an owner-qualified actor at all. Without this the whole COMMENT/REVIEW suppression arm is structurally inert.

  • AgentAttribution regains owner_handle = 2. Field 2 is legitimately reclaimable per DL-186: no wire build ever shipped the earlier owner/verified shape and nothing on disk is proto-encoded, so the number carries no compatibility obligation.
  • Populated at the three sites that already parse the owner and currently discard it — stripBodyToRef, linearCommentRef, detectArtifact — each from author.OwnerHandle. No new parse, no new store read: the value is in hand at every one of them.

The UI adapter is a live consumer, not dead code

adaptAgentAttribution in apps/ui/src/live/adapt.ts hardcoded ownerHandle: "" and its doc comment justified that by citing DL-094's "no wire source" reservation. After this change there IS a wire source, so leaving it would silently discard a real value behind a stale citation. The domain type already carried the field and two tests pinned the empty default.

Threaded through, comment re-pointed at DL-339, both assertions updated. verified stays hedged — DL-094's attribution-is-not-a-trust-claim core is unchanged, and DL-339 amends only the owner clause.

Note on the carrier

ForgeEvent gains no actor field. Matt ruled OQ-1 on 2026-09-07: the STATE actor is resolved from RIG-3331's forge_state_transitions memo at the actor-resolution seam, keyed on the event's coordinate + applied state. An Actor field would have shipped with no populator and no consumer (rule://no-inert-gating). A memo miss resolves no actor, so STATE fails open until the op is writing memos.

Tests

The three parse sites round-trip both handles; a header carrying no owner yields an empty OwnerHandle — asserted explicitly, because that is the fail-open input the suppression predicate relies on. The two UI assertions carry the owner through. The Go attribution-render callers are unaffected and verified still building.

Ledger-impact: none — DL-338/DL-339 land with the record itself in #997, not here.

@linear-code

linear-code Bot commented Sep 8, 2026

Copy link
Copy Markdown

RIG-3326

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

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

Deployed from compass-forge/rig-3326-owner-wire at 45962a6.

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