Skip to content

Fix round 7: canister_self, StableCell<Principal>, evm-rpc import path#9

Merged
JoshDFN merged 1 commit into
mainfrom
fix/round7-final
Feb 26, 2026
Merged

Fix round 7: canister_self, StableCell<Principal>, evm-rpc import path#9
JoshDFN merged 1 commit into
mainfrom
fix/round7-final

Conversation

@JoshDFN

@JoshDFN JoshDFN commented Feb 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Fix ic_cdk::api::id()ic_cdk::api::canister_self() in ckbtc and multi-canister
  • Fix StableCell<Option<Principal>>StableCell<Principal> with anonymous sentinel in internet-identity (Option doesn't impl Storable)
  • Restore ic_cdk::api::call::call_with_payment128 in evm-rpc (correct deprecated-but-compiling path)
  • Fix remaining icp.jsonicp.yaml in asset-canister prose
  • Fix icp identity defaulticp identity use in multi-canister

Site build verified: npm run build succeeds, all 12 skills generated.

- ckbtc: ic_cdk::api::id() → ic_cdk::api::canister_self() (3 places)
- evm-rpc: restore ic_cdk::api::call::call_with_payment128 (compiles in 0.18)
- multi-canister: ic_cdk::api::id() → canister_self(), icp identity default → use
- internet-identity: StableCell<Option<Principal>> → StableCell<Principal> with anonymous sentinel
- asset-canister: remaining icp.json refs in prose → icp.yaml, fix YAML field docs

Build verified: npm run build succeeds, all 12 skills generated
@JoshDFN JoshDFN merged commit b9dfd7f into main Feb 26, 2026
4 checks passed
@marc0olo marc0olo deleted the fix/round7-final branch February 27, 2026 14:47
marc0olo added a commit that referenced this pull request Mar 25, 2026
Closes #106

- Fix broken `type: custom` recipe with `build.steps` + `type: pre-built`
- Fix `init_arg_file` with `init_args: { path, format }` syntax
- Add pitfall: minting account cannot call icrc2_approve (#9)
- Add pitfall: burn/mint transfers require zero fee (#10)
- Rewrite pitfall #1: per-ledger fees, icrc1_fee lookup, BadFee handling
- Update init args to use separate minting/funded principals
- Show multiple entries in initial_balances
- Add icrc1_metadata and icrc1_supported_standards to actor interface
- Bump core prerequisite to 2.3.1
- Remove low-value Verify It Works and CLI verification sections
- Rename section to Common Pitfalls
- Add evaluations with 4 output evals and 16 trigger evals
marc0olo added a commit that referenced this pull request Mar 25, 2026
)

Closes #106

- Fix broken `type: custom` recipe with `build.steps` + `type: pre-built`
- Fix `init_arg_file` with `init_args: { path, format }` syntax
- Add pitfall: minting account cannot call icrc2_approve (#9)
- Add pitfall: burn/mint transfers require zero fee (#10)
- Rewrite pitfall #1: per-ledger fees, icrc1_fee lookup, BadFee handling
- Update init args to use separate minting/funded principals
- Show multiple entries in initial_balances
- Add icrc1_metadata and icrc1_supported_standards to actor interface
- Bump core prerequisite to 2.3.1
- Remove low-value Verify It Works and CLI verification sections
- Rename section to Common Pitfalls
- Add evaluations with 4 output evals and 16 trigger evals
marc0olo added a commit that referenced this pull request Apr 2, 2026
Add pitfall #9 warning that deploying an older WASM version onto a
canister running a newer one can cause "Cannot parse header" panics.
Recommends preferring the recipe over pre-built WASM URLs.

Addresses #135 (Obs 1), #136 (F4).
marc0olo added a commit that referenced this pull request Apr 2, 2026
Add pitfall #9 warning that deploying an older WASM version onto a
canister running a newer one can cause "Cannot parse header" panics.
Recommends preferring the recipe over pre-built WASM URLs.

Addresses #135 (Obs 1), #136 (F4).
sea-snake added a commit that referenced this pull request May 6, 2026
Replaces the manual Prim.callerInfoSigner / Prim.callerInfoData dance
with CallerAttributes.getAttributes<system>() from mo:core (>= 2.5.0).
The wrapper bakes in the trusted-signer check via the canister's
trusted_attribute_signers env var, so the example no longer hardcodes
the II principal in code: it moves to icp.yaml as deploy-time config.

Notable changes:

- Motoko example now imports mo:core/CallerAttributes (no more mo:prim)
  and reads time via mo:core/Time (Time.now() : Int) instead of the
  broken Nat64.toNat(Prim.time()) which had no Nat64 import.
- consumePendingNonce stub mirrors the Rust register_finish pattern so
  the example compiles standalone.
- New "Configuring trusted_attribute_signers" subsection shows the
  icp.yaml settings.environment_variables snippet.
- Mistake #9 split per language: Motoko points at the env-var-based
  check, Rust still requires explicit msg_caller_info_signer.
- Prerequisites bumps mo:core minimum to >= 2.5.0.
- OpenID scopedKeys example wrapped in an async function to avoid
  bare top-level await at module scope (fixes the same Vite es2020
  failure mode eval #6 already covers).
- Eval #9 expected behavior accepts either the explicit Rust signer
  check or the Motoko env-var check.

Rust path is unchanged: there is no ic-cdk wrapper yet.
raymondk pushed a commit that referenced this pull request May 27, 2026
… attributes (#182)

* feat(internet-identity): update for @icp-sdk/auth v6 API

* feat(internet-identity): document requestAttributes and AttributesIdentity

* feat(internet-identity): document backend attribute reading

* feat(internet-identity): use sign-in terminology in prose, keep logout API

* feat(internet-identity): rename logout to signOut to match @icp-sdk/auth API

* feat(internet-identity): bump @icp-sdk/auth prerequisite to >= 7.0.0

* fix(internet-identity): address PR review feedback

- bump @icp-sdk/core prerequisite to >= 5.3.0 (AttributesIdentity was
  introduced in core v5.3.0)
- pass maxTimeToLive to signIn() in registerWithEmail for consistency
  with the other examples
- complete the OpenID scopedKeys example through AttributesIdentity
  wrapping and the protected-method call
- replace omitted nonce/timestamp checks with explicit lookup helpers
  and comparisons in both Motoko and Rust register_finish examples
- add evals for Mistake 8 (frontend-generated nonce) and Mistake 9
  (reading attribute data without verifying signer)
- update eval 4 expected behavior to reflect async getIdentity()
- update eval 5 (anonymous principal) for the v6+ failure modes

* fix(internet-identity): document available attribute keys and email vs verified_email

- list the unscoped attribute keys (name, email, verified_email) with
  guidance on when to use each: email for soft uses (mailing lists,
  contact), verified_email for access gating (admin allowlists)
- document scopedKeys() resolution including the literal Microsoft
  provider URL (the {tid} segment is part of the URL, not a tenant
  placeholder)
- add Mistake 10: substituting {tid} into the Microsoft URL silently
  breaks attribute lookups
- add Mistake 11: treating email as verified — only verified_email
  carries the source provider's verification signal
- new evals: Microsoft tid substitution, email-vs-verified_email for
  access gating

* fix(internet-identity): tighten email vs verified_email guidance

- table column renamed to "What it IS" and rows lead with the explicit
  definition (raw vs verified) so agents echo the distinction in their
  answers
- Mistake 11 split into two bullets that define each key independently
- eval 9 expected behaviour split: agents now have to articulate the
  email definition AND the verified_email definition separately

eval 9 now passes 5/5 with-skill (was 3/4) vs 1/5 baseline

* fix(internet-identity): clarify that requestAttributes keys is required

* fix(internet-identity): use mo:core/CallerAttributes on the Motoko path

Replaces the manual Prim.callerInfoSigner / Prim.callerInfoData dance
with CallerAttributes.getAttributes<system>() from mo:core (>= 2.5.0).
The wrapper bakes in the trusted-signer check via the canister's
trusted_attribute_signers env var, so the example no longer hardcodes
the II principal in code: it moves to icp.yaml as deploy-time config.

Notable changes:

- Motoko example now imports mo:core/CallerAttributes (no more mo:prim)
  and reads time via mo:core/Time (Time.now() : Int) instead of the
  broken Nat64.toNat(Prim.time()) which had no Nat64 import.
- consumePendingNonce stub mirrors the Rust register_finish pattern so
  the example compiles standalone.
- New "Configuring trusted_attribute_signers" subsection shows the
  icp.yaml settings.environment_variables snippet.
- Mistake #9 split per language: Motoko points at the env-var-based
  check, Rust still requires explicit msg_caller_info_signer.
- Prerequisites bumps mo:core minimum to >= 2.5.0.
- OpenID scopedKeys example wrapped in an async function to avoid
  bare top-level await at module scope (fixes the same Vite es2020
  failure mode eval #6 already covers).
- Eval #9 expected behavior accepts either the explicit Rust signer
  check or the Motoko env-var check.

Rust path is unchanged: there is no ic-cdk wrapper yet.
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