Skip to content

Conversation

@jasonz-dfinity
Copy link
Contributor

@jasonz-dfinity jasonz-dfinity commented Jan 2, 2026

Why

To make "empty" values more explicit, we opt to support a Null variant to represent absent values.

The downside of diverging from ICRC3 was considered. However, if we choose to adopt ICRC3 for proposals in the future (if at all), it will likely affect the entire method (list_proposals) rather than the "action" part of the proposal.

What

  • Introduce a Null variant for storage and api
  • Define conversions between them
  • Define impl From<Option<T>> for SelfDescribingValue using Null for None
  • Remove add_field_with_empty_as_fallback as null can be used to represent the "emptiness"
  • Use null for some ManageNeuron commands where no content is needed

@jasonz-dfinity jasonz-dfinity requested a review from a team as a code owner January 2, 2026 23:06
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

This pull request changes code owned by the Governance team. Therefore, make sure that
you have considered the following (for Governance-owned code):

  1. Update unreleased_changelog.md (if there are behavior changes, even if they are
    non-breaking).

  2. Are there BREAKING changes?

  3. Is a data migration needed?

  4. Security review?

How to Satisfy This Automatic Review

  1. Go to the bottom of the pull request page.

  2. Look for where it says this bot is requesting changes.

  3. Click the three dots to the right.

  4. Select "Dismiss review".

  5. In the text entry box, respond to each of the numbered items in the previous
    section, declare one of the following:

  • Done.

  • $REASON_WHY_NO_NEED. E.g. for unreleased_changelog.md, "No
    canister behavior changes.", or for item 2, "Existing APIs
    behave as before.".

Brief Guide to "Externally Visible" Changes

"Externally visible behavior change" is very often due to some NEW canister API.

Changes to EXISTING APIs are more likely to be "breaking".

If these changes are breaking, make sure that clients know how to migrate, how to
maintain their continuity of operations.

If your changes are behind a feature flag, then, do NOT add entrie(s) to
unreleased_changelog.md in this PR! But rather, add entrie(s) later, in the PR
that enables these changes in production.

Reference(s)

For a more comprehensive checklist, see here.

GOVERNANCE_CHECKLIST_REMINDER_DEDUP

@jasonz-dfinity jasonz-dfinity dismissed github-actions[bot]’s stale review January 6, 2026 22:59

No canister behavior changes - behind feature flag

@jasonz-dfinity jasonz-dfinity added this pull request to the merge queue Jan 6, 2026
Merged via the queue into master with commit 7decc41 Jan 6, 2026
38 checks passed
@jasonz-dfinity jasonz-dfinity deleted the jason/NNS1-4282-2 branch January 6, 2026 23:52
github-merge-queue bot pushed a commit that referenced this pull request Jan 8, 2026
A follow-up for a previous PR: #8205 - it makes more sense for a variant
with unit value to be converted to strings even though the enum itself
can have non-unit inner values in other cases. This makes the rendering
depend on the enum value itself rather than the definition of the enum
(i.e. considering all cases). For example, when `LogVisibility` was
extended from all-unit variants ("Public", "Controllers") with a variant
with non-unit values ("AllowedViewers": Vec<Principal>), the
"Controller" case will always be converted to a string (as opposed to
{"Controllers": null})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants