fix: state each skill's real mo:core minimum instead of one repo-wide pin - #333
Open
raymondk wants to merge 1 commit into
Open
fix: state each skill's real mo:core minimum instead of one repo-wide pin#333raymondk wants to merge 1 commit into
raymondk wants to merge 1 commit into
Conversation
Skill Validation ReportProject Checks |
… pin The core pin diverged four ways (2.0.0 / 2.1.0 / 2.3.1 / 2.5.0). Rather than standardising on the highest, give each skill the minimum its own content actually needs — an example should document what it requires, not impose a repo-wide floor. mops has no range syntax: `core = ">=2.0.0"` and `core = "^2.0.0"` both crash `mops install`, which reads the string as a literal version directory. So the toml carries the concrete floor and the prose states it as `>=`. Per-skill floors, each verified by type-checking that skill's Motoko examples at the claimed version and confirming the error set matches the one at 2.5.0: - `core >= 2.0.0`: stable-memory (hard floor — `List`/`Map` dot notation fails below it), canister-security, ckbtc, cycles-management, vetkd, https-outcalls, icrc-ledger (was 2.3.1; nothing in it needs 2.3.x) - `core >= 2.1.0`: multi-canister — `Runtime.envVar` needs it, as #324 established. It appears only in prose, so compiling the code blocks alone would have under-reported this floor to 1.0.0. Prose now reads `core >= X` and the mops.toml block pins exactly X, so the two agree. Left alone deliberately: - `motoko`, `migrating-motoko`, `migrating-motoko-enhanced`, `mops-cli` — upstream-tracked, pins are upstream content (see .claude/upstream.md). Their `core >= 2.5.0` is upstream's latest-at-sync value, not a requirement: those skills' own examples compile unchanged on 2.0.0. - `internet-identity` (2.5.0) — real transitive floor, verified: `identity-attributes@0.4.1` resolves `core@2.5.0`. - `caffeine-app` (2.5.0) — reflects what the Caffeine platform ships, not a minimum its examples need; out of scope for this drift. - Historical statements ("In mo:core 2.0, the module is renamed to `Cycles`") — facts about the 2.0 release, not pins. Evals: stable-memory #4 previously only checked that some core pin existed. It now requires a concrete version, since mops rejects ranges and wildcards — which is what the baseline emits (WITH 3/3, WITHOUT 2/3). Closes #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NEm1Tbkypzi8SuXhrMfBek
raymondk
force-pushed
the
fix/align-mo-core-pin
branch
from
August 6, 2026 09:41
a3b2af4 to
3c74c6b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
coremops pin diverged four ways. Rather than standardising on the highest, this gives each skill the minimum its own content actually needs — an example should document what it requires, not impose a repo-wide floor.The mops constraint
mops has no range syntax. Both of these crash
mops install, because it reads the string as a literal version directory (.../packages/core@>=2.0.0/mops.toml):So the
mops.tomlblock carries the concrete floor and the prose states it as>=. The two always name the same version, so there's no dissonance for an agent reading both.Per-skill floors
stable-memoryList/Mapdot notation fails below it (M0072: field add does not exist)canister-securityckbtccycles-managementvetkdhttps-outcallsicrc-ledgermulti-canisterRuntime.envVarneeds it, as #324 establishedVerification
Every claimed floor was checked, not assumed: for each skill I extracted its Motoko examples, type-checked them with
mops checkat the claimed floor, and confirmed the error set matches the one at 2.5.0. All eight pass.Two floors that compiling code blocks alone would have got wrong, worth calling out:
multi-canister.Runtime.envVarappears only in prose (Prerequisites and Pitfall 1), never inside a ```motoko block. Measured from code alone its floor reads as 1.0.0 — the 2.1.0 requirement is real but invisible to the compiler. Verified separately:Runtime.envVarfails at core 1.0.0 with `M0072`, since `Runtime` there has only `trap` and `unreachable`.internet-identity. Its 2.5.0 is a genuine transitive floor:identity-attributes@0.4.1resolvescore@2.5.0. Confirmed by installing it. Left untouched.The residual
mops checkerrors present at every version are harness artifacts, not skill bugs — deliberate teaching fragments that only fail compiled standalone (snippets opening mid-actor, thestablevspersistentcontrast pair,../shared/Typesimports). Left as-is.Left alone deliberately
motoko,migrating-motoko,migrating-motoko-enhanced,mops-cli— upstream-tracked; their pins are upstream content per.claude/upstream.md. Worth noting theircore >= 2.5.0is upstream's latest-at-sync value rather than a requirement: I type-checked themotokoskill's own examples (SKILL.md +references/examples.md) at 2.0.0 and 2.5.0 and the results are identical.caffeine-app(2.5.0) — reflects what the Caffeine platform ships, not a minimum its examples need. Out of scope for this drift.cycles-management's "In mo:core 2.0, the module is renamed toCycles" andstable-memory's "With mo:core 2.0,persistent actormakes stable storage trivial" are facts about the 2.0 release, not pins.Evals
stable-memory#4 previously only checked that somecorepin existed. It now requires a concrete version — which is the failure mode that actually breaks a build, given mops rejects ranges and wildcards outright, and is exactly what the baseline emits.Eval results
npm run validate: 26 skills validated, all passed, 15 warnings (unchanged from baseline).Closes #297
🤖 Generated with Claude Code
https://claude.ai/code/session_01NEm1Tbkypzi8SuXhrMfBek