Skip to content

fix: propagate P2ID note type so proposals honor private notes (#322)#338

Merged
haseebrabbani merged 2 commits into
mainfrom
322-p2id-note-type
Jul 23, 2026
Merged

fix: propagate P2ID note type so proposals honor private notes (#322)#338
haseebrabbani merged 2 commits into
mainfrom
322-p2id-note-type

Conversation

@haseebrabbani

@haseebrabbani haseebrabbani commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes #322 — Guardian P2ID proposals always created NoteType.Public notes, ignoring the user's "Private" selection. buildP2idTransactionRequest (TS) and build_p2id_transaction_request (Rust) hardcoded the note type, and proposal metadata had no field to carry it. This PR threads the note type end to end through both clients, matching the TS and Rust implementations.

Changes

Wire format

TS client (@openzeppelin/miden-multisig-client)

  • buildP2idTransactionRequest(...) accepts options.noteType (defaults to NoteType.Public).
  • createP2idProposal(recipient, faucet, amount, nonce?, { noteType }) records the choice in proposal metadata.
  • The rebuild-from-metadata path (cosigner verification + execution) parses noteType back, so private proposals are rebuilt as private notes.
  • New exports: parseP2idNoteType, p2idNoteTypeToMetadata, P2idTransactionOptions, P2idNoteVisibility, isP2idNoteVisibility.

Rust client (miden-multisig-client)

  • build_p2id_transaction_request takes a NoteType parameter.
  • TransactionType::P2ID gains a note_type field; TransactionType::transfer() still defaults to public, and transfer_with_note_type() is the explicit form.
  • Threaded through ProposalBuilder, execution, ProposalMetadata/ProposalMetadataPayload, and the export/import round-trip.

Server + operator client

  • note_type mirrored in the delta-summary ProposalMetadata (and guardian-operator-client), so dashboards can surface visibility.
  • OpenAPI specs regenerated (cargo run --features evm --bin gen-openapi -- docs).

Examples

  • Demo CLI prompts for note visibility on P2ID proposals.
  • Browser example wrappers and the smoke harness pass noteType through.

Breaking changes

  • Rust: external crates that construct or exhaustively match TransactionType::P2ID, or call build_p2id_transaction_request / with_payment_metadata, need to add the note-type argument. TransactionType::transfer() is unchanged.
  • TS: additive only.

Release note

@openzeppelin/guardian-client must be published before @openzeppelin/miden-multisig-client, since the multisig client's metadata codec references the new wire field.

Testing

  • New Rust tests: default-to-public for absent note_type, private threading, unknown-value rejection, public-payload wire-shape stability, and a request-level test that note type changes the built transaction.
  • New TS tests: builder default + threading, parse/serialize helpers, codec round-trip + rejection, and an end-to-end createP2idProposal test asserting note_type: "private" reaches the pushed payload and the rebuild path.
  • Full Rust workspace lib tests, clippy, fmt, and gen-openapi --check pass; all three TS package suites pass; tsc clean for examples/web and examples/smoke-web.

Summary by CodeRabbit

  • New Features

    • Added support for selecting public or private note visibility when creating P2ID proposals.
    • Preserved the selected visibility when proposals are exported, rebuilt, and executed.
    • Added optional note visibility support to browser, web, demo, and smoke-test proposal flows.
    • Extended proposal metadata and API schemas with the optional noteType field; omitted values continue to default to public.
  • Bug Fixes

    • Invalid note visibility values are now rejected with validation errors.
    • Existing proposals without note visibility remain compatible.

buildP2idTransactionRequest (TS) and build_p2id_transaction_request (Rust)
hardcoded NoteType.Public, so a P2ID proposal always created a public note
regardless of what the user selected.

- TS client: buildP2idTransactionRequest accepts options.noteType;
  createP2idProposal takes { noteType } and records it in proposal
  metadata; the rebuild-from-metadata path parses it back so cosigners
  verify and execute the same note visibility.
- Rust client: build_p2id_transaction_request takes NoteType;
  TransactionType::P2ID carries note_type (transfer() still defaults to
  public, transfer_with_note_type() for explicit choice); ProposalMetadata,
  ProposalMetadataPayload, and ExportedMetadata round-trip it.
- Wire format: metadata.note_type is "public" | "private"; it is omitted
  for public notes so pre-existing proposals keep their exact wire shape,
  and absent still means public. Unknown values are rejected at parse time
  instead of being silently rebuilt as a public note that could never match
  the signed tx_summary commitment.
- Server + operator client: mirror note_type in the delta-summary proposal
  metadata; OpenAPI specs regenerated.
- Examples: demo CLI prompts for note visibility; browser example wrappers
  and the smoke harness pass it through.
@haseebrabbani
haseebrabbani requested a review from zeljkoX as a code owner July 21, 2026 20:48
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7537fd63-4312-42f3-9ea8-78ab29dc7fb4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

P2ID proposals now support public or private note visibility across Rust and TypeScript clients. The selected type flows through transaction construction, proposal metadata, exports, server conversions, OpenAPI schemas, examples, and tests, while omitted metadata continues to represent public notes.

Changes

P2ID proposal contracts and Rust transaction flow

Layer / File(s) Summary
Rust proposal and metadata contracts
crates/miden-multisig-client/src/proposal.rs, crates/miden-multisig-client/src/payload.rs, crates/miden-multisig-client/src/export.rs, crates/server/src/delta_summary/mod.rs
P2ID transaction and metadata models now carry optional note visibility, with public defaults, validation, serialization, export preservation, and coverage for private and invalid values.
Rust transaction construction and execution
crates/miden-multisig-client/src/transaction/*, crates/miden-multisig-client/src/execution.rs, crates/miden-multisig-client/src/account.rs
P2ID builders and execution paths pass NoteType into note creation and retain it in generated proposals and requests.
TypeScript P2ID API and metadata codec
packages/miden-multisig-client/src/{multisig.ts,transaction.ts}, packages/miden-multisig-client/src/transaction/*, packages/miden-multisig-client/src/proposal/*, packages/miden-multisig-client/src/types/proposal.ts
The SDK adds note visibility types, parsing and serialization helpers, creation options, metadata validation, reconstruction, exports, and regression tests.

Wire and integration updates

Layer / File(s) Summary
Wire conversions and API schemas
packages/guardian-client/src/*, packages/guardian-operator-client/src/*, crates/server/src/delta_summary/mod.rs, docs/openapi*.json
Client conversions, operator parsing, server metadata, and OpenAPI schemas expose the optional note_type field.
Example proposal integrations
examples/_shared/multisig-browser/src/*, examples/web/src/lib/*, examples/smoke-web/src/*, examples/demo/src/*
Example proposal flows accept or prompt for note visibility and forward it through creation and later execution.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant Multisig
  participant P2IDBuilder
  participant Guardian
  Client->>Multisig: createP2idProposal(noteType)
  Multisig->>P2IDBuilder: build request with noteType
  P2IDBuilder->>Guardian: submit metadata.note_type
  Guardian-->>Multisig: return proposal metadata
  Multisig->>P2IDBuilder: parse metadata.note_type on rebuild
Loading

Possibly related PRs

Suggested labels: bug

Suggested reviewers: zeljkox, mcarlomagno

Poem

A rabbit found a note in the sun,
“Public or private?”—now both can run.
Through builders and wires, the choice hops true,
Metadata carries the message through.
“Squeak!” says the bunny, “Issue fixed!”

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.92% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly states the main change: propagating P2ID note type to honor private notes.
Linked Issues check ✅ Passed The changes address #322 by propagating noteType through TS/Rust clients and Guardian proposal flows, preserving private-note selections.
Out of Scope Changes check ✅ Passed The added OpenAPI, examples, and tests all support the noteType propagation work and stay within the issue scope.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 322-p2id-note-type

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
packages/miden-multisig-client/src/multisig.test.ts (1)

1334-1334: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Non-null assertion instead of a guard.

mock.calls.at(-1)! asserts non-null where at() can return undefined.

♻️ Suggested fix
-      const lastCall = vi.mocked(buildP2idTransactionRequest).mock.calls.at(-1)!;
+      const lastCall = vi.mocked(buildP2idTransactionRequest).mock.calls.at(-1);
+      expect(lastCall).toBeDefined();
       expect(lastCall[4]).toMatchObject({ noteType: NoteType.Private });

(adjust the following line to use lastCall?.[4] or narrow after the toBeDefined() check)

As per coding guidelines, "Avoid non-null assertions (!) where a guard/narrowing can be used in TypeScript."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/miden-multisig-client/src/multisig.test.ts` at line 1334, Update the
lastCall access in the test around buildP2idTransactionRequest to remove the
non-null assertion. Use optional access such as lastCall?.[4], or first
assert/narrow lastCall is defined before accessing its elements, while
preserving the existing test behavior.

Source: Coding guidelines

packages/miden-multisig-client/src/multisig.ts (1)

848-849: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Inline comment violates multisig SDK guideline.

The added // Omitted for public notes so the wire shape matches pre-#322 proposals. is an inline comment in implementation code.

♻️ Suggested fix
-      // Omitted for public notes so the wire shape matches pre-#322 proposals.
-      noteType: p2idNoteTypeToMetadata(options.noteType),
+      noteType: p2idNoteTypeToMetadata(options.noteType),

Move the rationale into the JSDoc above createP2idProposal if it needs to be documented.

As per path instructions, "Do not add inline comments (// ...) in implementation code in multisig SDKs."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/miden-multisig-client/src/multisig.ts` around lines 848 - 849,
Remove the inline comment immediately above noteType in createP2idProposal. If
the wire-shape rationale must remain documented, move it into the function’s
JSDoc above createP2idProposal; otherwise leave the implementation without an
inline comment.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/miden-multisig-client/src/proposal/metadata.ts`:
- Line 29: Update the metadata serialization path around the noteType field to
map an explicit public value to undefined, so re-encoding omits public
visibility from the wire format while preserving non-public note types. Add a
regression test covering decode/re-encode canonicalization of public noteType.

---

Nitpick comments:
In `@packages/miden-multisig-client/src/multisig.test.ts`:
- Line 1334: Update the lastCall access in the test around
buildP2idTransactionRequest to remove the non-null assertion. Use optional
access such as lastCall?.[4], or first assert/narrow lastCall is defined before
accessing its elements, while preserving the existing test behavior.

In `@packages/miden-multisig-client/src/multisig.ts`:
- Around line 848-849: Remove the inline comment immediately above noteType in
createP2idProposal. If the wire-shape rationale must remain documented, move it
into the function’s JSDoc above createP2idProposal; otherwise leave the
implementation without an inline comment.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0aa67025-216b-4181-8c8c-27187f1e72eb

📥 Commits

Reviewing files that changed from the base of the PR and between 2c1e5b8 and 0997311.

📒 Files selected for processing (31)
  • crates/miden-multisig-client/src/account.rs
  • crates/miden-multisig-client/src/execution.rs
  • crates/miden-multisig-client/src/export.rs
  • crates/miden-multisig-client/src/payload.rs
  • crates/miden-multisig-client/src/proposal.rs
  • crates/miden-multisig-client/src/transaction/builder.rs
  • crates/miden-multisig-client/src/transaction/payment.rs
  • crates/server/src/delta_summary/mod.rs
  • docs/openapi-client.json
  • docs/openapi-dashboard.json
  • docs/openapi.json
  • examples/_shared/multisig-browser/src/multisigApi.ts
  • examples/demo/src/actions/proposal_management.rs
  • examples/demo/src/state.rs
  • examples/smoke-web/src/smokeHarness.ts
  • examples/web/src/lib/multisigApi.ts
  • packages/guardian-client/src/conversion.test.ts
  • packages/guardian-client/src/conversion.ts
  • packages/guardian-client/src/server-types.ts
  • packages/guardian-client/src/types.ts
  • packages/guardian-operator-client/src/http.ts
  • packages/guardian-operator-client/src/types.ts
  • packages/miden-multisig-client/src/index.ts
  • packages/miden-multisig-client/src/multisig.test.ts
  • packages/miden-multisig-client/src/multisig.ts
  • packages/miden-multisig-client/src/proposal/metadata.test.ts
  • packages/miden-multisig-client/src/proposal/metadata.ts
  • packages/miden-multisig-client/src/transaction.ts
  • packages/miden-multisig-client/src/transaction/p2id.test.ts
  • packages/miden-multisig-client/src/transaction/p2id.ts
  • packages/miden-multisig-client/src/types/proposal.ts

recipientId: metadata.recipientId,
faucetId: metadata.faucetId,
amount: metadata.amount,
noteType: metadata.noteType,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Omit explicit public visibility during serialization.

Line 29 re-emits noteType: 'public' after a decode/re-encode round trip, contrary to the compatibility contract that public visibility is absent on the wire. Canonicalize 'public' to undefined here and add a regression test.

Proposed fix
-          noteType: metadata.noteType,
+          noteType: metadata.noteType === 'public' ? undefined : metadata.noteType,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
noteType: metadata.noteType,
noteType: metadata.noteType === 'public' ? undefined : metadata.noteType,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/miden-multisig-client/src/proposal/metadata.ts` at line 29, Update
the metadata serialization path around the noteType field to map an explicit
public value to undefined, so re-encoding omits public visibility from the wire
format while preserving non-public note types. Add a regression test covering
decode/re-encode canonicalization of public noteType.

Comment thread crates/miden-multisig-client/src/payload.rs Dismissed
Comment thread crates/miden-multisig-client/src/payload.rs Dismissed
Comment thread crates/miden-multisig-client/src/transaction/payment.rs Dismissed
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.90909% with 14 lines in your changes missing coverage. Please review.
✅ Project coverage is 77.86%. Comparing base (2c1e5b8) to head (0997311).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #338      +/-   ##
==========================================
+ Coverage   77.79%   77.86%   +0.06%     
==========================================
  Files         167      167              
  Lines       30810    30958     +148     
==========================================
+ Hits        23970    24105     +135     
- Misses       6840     6853      +13     

Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2c1e5b8...0997311. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@zeljkoX zeljkoX left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

I pushed a small change, mostly doc updates made while testing this one.

Review and modify if needed....

I was able to send both note types.

However I was not able to consume private note. Have you tested that? I wonder should we extend this part for clients(if needed) and for testing(demo example)?

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes issue #322 by propagating P2ID note visibility end-to-end so proposals correctly rebuild/verify/execute with the originally selected note type (public vs private), while preserving backward compatibility by omitting note_type for public notes.

Changes:

  • Added optional note_type / noteType to P2ID proposal metadata across server, Rust/TS clients, operator client, and OpenAPI outputs (absent ⇒ public).
  • Updated TS and Rust P2ID transaction builders to accept and thread an explicit note type; added strict parsing/rejection of unknown values when rebuilding from metadata.
  • Updated docs/examples/tests to cover defaults, private threading, wire-shape stability, and round-trip behavior.

Reviewed changes

Copilot reviewed 37 out of 37 changed files in this pull request and generated no comments.

Show a summary per file
File Description
spec/api.md Documents the new optional p2id metadata note_type field and its compatibility semantics.
packages/miden-multisig-client/src/types/proposal.ts Adds typed wire representation for P2ID note visibility (`'public'
packages/miden-multisig-client/src/transaction/p2id.ts Threads noteType into note construction; adds parse/serialize helpers and options type.
packages/miden-multisig-client/src/transaction/p2id.test.ts Adds tests for default/public behavior, private threading, and helper behavior.
packages/miden-multisig-client/src/transaction.ts Re-exports new P2ID metadata helpers/types from the transaction entrypoint.
packages/miden-multisig-client/src/proposal/metadata.ts Encodes/decodes noteType for P2ID proposals and rejects unsupported values.
packages/miden-multisig-client/src/proposal/metadata.test.ts Adds codec round-trip, canonicalization, and rejection tests for noteType.
packages/miden-multisig-client/src/multisig.ts Extends createP2idProposal API and ensures rebuild-from-metadata uses the parsed note type.
packages/miden-multisig-client/src/multisig.test.ts Adds end-to-end test asserting private note_type reaches pushed payload and rebuild path.
packages/miden-multisig-client/src/index.ts Exports the new helpers/types and isP2idNoteVisibility from the package root.
packages/miden-multisig-client/README.md Documents noteType usage and warns about private-note out-of-band sharing requirement.
packages/guardian-operator-client/src/types.ts Adds noteType to dashboard proposal metadata typing for P2ID.
packages/guardian-operator-client/src/http.ts Parses note_type from dashboard records into noteType.
packages/guardian-client/src/types.ts Adds noteType to per-account API proposal metadata shape.
packages/guardian-client/src/server-types.ts Adds note_type to server wire metadata type.
packages/guardian-client/src/conversion.ts Maps note_typenoteType in client/server conversion helpers.
packages/guardian-client/src/conversion.test.ts Adds round-trip test for noteTypenote_type.
examples/web/src/lib/multisigApi.ts Threads optional noteType through the web example P2ID proposal call.
examples/smoke-web/src/smokeHarness.ts Adds noteType input support and maps 'private' to NoteType.Private for smoke flow.
examples/smoke-web/src/App.tsx Documents smoke harness usage for private P2ID proposals.
examples/demo/src/state.rs Stores note_type in the demo CLI’s custom proposal recipe.
examples/demo/src/actions/proposal_management.rs Prompts for note visibility and uses transfer_with_note_type in demo CLI.
examples/_shared/multisig-browser/src/multisigApi.ts Threads optional noteType through shared browser multisig wrapper.
docs/openapi.json Regenerated OpenAPI including note_type in proposal metadata schema.
docs/openapi-dashboard.json Regenerated dashboard OpenAPI including note_type in proposal metadata schema.
docs/openapi-client.json Regenerated client OpenAPI including note_type in proposal metadata schema.
docs/MULTISIG_SDK.md Documents TS and Rust APIs for selecting private note visibility and associated warning.
crates/server/src/delta_summary/mod.rs Extends server delta-summary proposal metadata with optional note_type.
crates/miden-multisig-client/src/transaction/payment.rs Adds note_type parameter to Rust P2ID transaction request builder + tests.
crates/miden-multisig-client/src/transaction/builder.rs Threads note type through proposal building and wire metadata emission (omit when public).
crates/miden-multisig-client/src/proposal.rs Adds note_type to TransactionType::P2ID and parses metadata note type with rejection on unknown.
crates/miden-multisig-client/src/payload.rs Adds optional wire note_type to payload metadata; omits for public; adds tests.
crates/miden-multisig-client/src/lib.rs Re-exports NoteType alongside NoteId for public API ergonomics.
crates/miden-multisig-client/src/export.rs Threads note_type through export/import metadata.
crates/miden-multisig-client/src/execution.rs Ensures execution builds final request using the proposal’s note_type.
crates/miden-multisig-client/src/account.rs Updates tests/usage to account for new P2ID transaction field.
crates/miden-multisig-client/README.md Updates Rust README examples to include explicit NoteType parameter where needed.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@haseebrabbani

Copy link
Copy Markdown
Collaborator Author

@zeljkoX thanks for the doc updates and the toGuardian canonicalization — both look good, and the codec tests pass with the change.

On consuming private notes: what you hit is expected with the current SDK surface, not something this PR regresses. A private note only publishes its commitment on chain, so the recipient's Miden client never learns the note's contents via sync — getConsumableNotes() can't see it, and createConsumeNotesProposal can't fetch it from the local store (FR-012 assumes the proposer has the note). The consume pipeline itself is note-type-agnostic: once the note is in the proposer's store, v2 metadata embeds the full notes, so cosigner verification and execution work unchanged.

The missing piece is the out-of-band note transfer:

  1. Sender (after executing the private P2ID) exports the created note — the web SDK already has exportNoteFile(noteId, format)NoteFile, and the Rust miden-client has the equivalent.
  2. Recipient imports it (importNoteFile / import_notes) and syncs; the note then shows up as consumable and the normal consume_notes flow applies.

Neither the multisig SDK nor the demo currently wraps export/import, so there's no way to do this without dropping to the raw client. I'd keep this PR scoped to note-type propagation (your docs already flag the out-of-band requirement) and file a follow-up for:

  • SDK wrappers: exportNote(noteId) / importNote(noteFile) on the TS Multisig client and Rust MultisigClient
  • Demo: offer note export after executing a private P2ID, and an "import note file" option in the consume flow
  • A demo/smoke scenario covering private P2ID → export → import → consume

Happy to open that issue if you agree.

@zeljkoX

zeljkoX commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator
  1. exportNoteFile

Sounds good.
Let's proceed with this one as is and open an issue.

@haseebrabbani
haseebrabbani merged commit 2cf98ec into main Jul 23, 2026
18 checks passed
@haseebrabbani
haseebrabbani deleted the 322-p2id-note-type branch July 23, 2026 14:38
@github-project-automation github-project-automation Bot moved this from Review to Release Candidate in OZ Development for Miden Jul 23, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 23, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

Status: Release Candidate

Development

Successfully merging this pull request may close these issues.

P2ID: Guardian proposals always create public notes — noteType not propagated

5 participants