Skip to content

fix: harden canonical identity binding — close remaining post-merge gaps#11054

Merged
noanflaherty merged 2 commits into
mainfrom
safe-do/canonical-identity-hardening
Mar 1, 2026
Merged

fix: harden canonical identity binding — close remaining post-merge gaps#11054
noanflaherty merged 2 commits into
mainfrom
safe-do/canonical-identity-hardening

Conversation

@noanflaherty
Copy link
Copy Markdown
Contributor

@noanflaherty noanflaherty commented Mar 1, 2026

Summary

  • Fix local IPC fallback context field names: The pre-bootstrap branch in local-actor-identity.ts used old resolver input keys (externalChatId, senderExternalUserId) instead of the canonical names (conversationExternalId, actorExternalId), causing trust resolution to fail silently.
  • Make voice guardian dispatch binding-self-healing: Added ensureVellumGuardianBinding call in guardian-dispatch.ts so voice-originated pending_question requests can always be attributed to a guardian principal, even if the vellum binding hasn't been bootstrapped yet.
  • Resolve access_request principal asymmetry: Added access_request to DECISIONABLE_KINDS so it requires guardianPrincipalId at creation (matching the enforcement already present for tool_approval, pending_question, and tool_grant_request). Added self-healing in access-request-helper.ts and removed the access_request exclusion from migration 126.
  • Remove residual isTrusted symbol: Renamed isTrustedtrustedAudience in call-pointer-messages.ts to pass the no-is-trusted-guard test and align with the trust-class vocabulary.
  • Update all test fixtures: Added guardianPrincipalId to all createCanonicalGuardianRequest calls for decisionable kinds across 7 test files.

Original prompt

/Users/noaflaherty/Repos/vellum-ai/vellum-assistant/.private/plans/canonical-identity-binding-followup-hardening-one-pr-plan-2026-03-01.md

🤖 Generated with Claude Code


Open with Devin

…aps from #11006

- Fix local IPC fallback context field names (conversationExternalId, actorExternalId)
- Make voice guardian dispatch binding-self-healing via ensureVellumGuardianBinding
- Add access_request to DECISIONABLE_KINDS with self-healing and migration update
- Rename residual isTrusted symbol to trustedAudience in call-pointer-messages
- Update all test fixtures to supply guardianPrincipalId for decisionable kinds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@noanflaherty
Copy link
Copy Markdown
Contributor Author

@codex review

@noanflaherty
Copy link
Copy Markdown
Contributor Author

@devin review

Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 5 additional findings.

Open in Devin Review

chatgpt-codex-connector[bot]

This comment was marked as resolved.

…on upgraded databases

Addresses Codex review: the withCrashRecovery checkpoint key was still v2,
meaning databases that already completed v2 would skip the new access_request
principal-binding and expiration logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@noanflaherty
Copy link
Copy Markdown
Contributor Author

@codex review this PR again — the previous issues have been fixed in commit fa9ab01

@noanflaherty
Copy link
Copy Markdown
Contributor Author

@devin review this PR again — the previous issues have been fixed in commit fa9ab01

@noanflaherty noanflaherty merged commit 4ebbad2 into main Mar 1, 2026
1 check passed
@noanflaherty noanflaherty deleted the safe-do/canonical-identity-hardening branch March 1, 2026 14:41
@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

tkheyfets pushed a commit that referenced this pull request Mar 2, 2026
…aps (#11054)

* fix: harden canonical identity binding — close remaining post-merge gaps from #11006

- Fix local IPC fallback context field names (conversationExternalId, actorExternalId)
- Make voice guardian dispatch binding-self-healing via ensureVellumGuardianBinding
- Add access_request to DECISIONABLE_KINDS with self-healing and migration update
- Rename residual isTrusted symbol to trustedAudience in call-pointer-messages
- Update all test fixtures to supply guardianPrincipalId for decisionable kinds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: bump migration checkpoint to v3 so access_request backfill runs on upgraded databases

Addresses Codex review: the withCrashRecovery checkpoint key was still v2,
meaning databases that already completed v2 would skip the new access_request
principal-binding and expiration logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
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