Week 45 · 2026
Nov 2 – Nov 8, 2026 · gathered Nov 9, 2026
- 18
- PRs merged
- 7
- PRs opened
- 0
- Closed
- 0
- Opened
- 0
- Releases
- 3
- Repos
- 128
- Commits
- 7
- Comments
Highlights
cardano-init added six tools and smoke-tests every one (D3, #109–#124)
Four new templates merged during the week, each implementing the shared
gift-card example against the common blueprint and .env:
- Lucid Evolution and Blaze (TypeScript, off-chain), by Paulo Bressan.
- Plutarch
(Haskell, on-chain), pinned to v1.15.0 on GHC 9.8. Plutarch has no blueprint
output, so the template generates one the same way as Plinth. The PR also
fixed
doctor, which had reported Plutarch projects as Plinth. - PyCardano (Python, off-chain), marked experimental.
Two more, Apollo (Go, off-chain) and Pebble (on-chain, experimental), were opened during the week and merged on Monday, November 9. With them the registry grows from 15 to 21 tools. Pebble needed two workarounds: it emits no blueprint, and MeshJS can't decode the newest builtins it would otherwise compile to. Running Pebble scripts in the Scalus emulator also required bumping Scalus to 1.4.1, whose emulator defaults to protocol version 11.
CI now covers every DApp tool. #121 extends the smoke tests to 16 tool rows and doubles the devnet round trips to 8, so Plinth, Plutarch and Scalus now mint and redeem on a real Yaci devnet. CI also fails if a new tool is registered without a smoke test. #119 runs the checks for the tools a pull request touches on the PR itself, rather than only in the scheduled runs.
The devnet work also uncovered the following fixes:
- The MeshJS devnet smoke had been red since October 27. #110 works around a Mesh provider that rejected Yaci's HTTP 200 responses, and fetches the chain's cost models instead of using Mesh's defaults. Both provider fixes are already upstream in MeshJS; the local shim goes once they are released.
doctornow catches missing and outdated tools. It requires theyaci-devkitCLI for Yaci projects (#117) and, with #123, checks minimum versions. An old Yaci DevKit used to passdoctorand then time out 150 seconds into the test.- Devnet teardown stops everything.
#124 stops the
whole process group, where previously
yaci-cliand the node could keep running afterjust testor a Ctrl-C.
Robertino Martinez's
#120 groups
list by role and adds optional tool icons for terminals that can draw them.
#123 and #124 merged on Monday after the cutoff. All of this shipped in v0.4.0 on Tuesday, November 10.
The contracts library closed its security findings (D5, #75–#83)
The code-quality pass from last week moved into its security phase. Five more
PRs merged into the improve-code-quality integration branch. Its PR to main,
#61, was
still open on Sunday.
- DAO: double voting and tally spoofing (#76). A fresh vote lock could be pruned when the transaction's upper bound equalled the voting deadline, letting the same stake vote twice on one proposal. Tallies now count only votes spent with the tally redeemer, so a cancelled vote can't be counted.
- Settings: no more backdated proposals (#75). The apply delay is now measured from the proposal's validity upper bound, which the ledger forces to cover the slot where it lands. Last week this was documented as a constraint.
- Smart wallet: delegation hijack
(#81).
A
Spendcould swap the wallet's stake credential while keeping everything else. It now must keep the full address, asDepositalready did. This is the same class of bug fixed in vesting last week. - Reference-script griefing across contracts (#79, #81). Permissionless top-ups and deposits could attach an arbitrary script to the bond vault or the wallet, making later spends more expensive. All five contracts now forbid it.
- Cheaper checks
(#83).
Comparing
Datadirectly instead of through CBOR serialization cut up to 3.1M CPU units per smart-wallet spend, with no behavior change.
Each fix ships regression tests and spec updates, and was verified with
aiken check at 1,000 samples plus the MeshJS and Tx3 devnet suites. The
affected script hashes changed. Sofia Bobbiesi's
#87, opened on
Sunday, makes CI run on the integration branch and pick up every test file.
So far, PRs into that branch have run no checks.
The vesting hardening described last week, #72, merged on Monday, November 2.
Upgradeability merged with forwarding for every script purpose (D5, #57, #85)
Upgradeability merged on Sunday. It went in together with #85, which addresses its review:
- Forced forwarding now covers spend, mint, withdraw, publish and vote, not only spending. The delegate checks every item routed to it and rejects any kind it doesn't handle.
- Delegates may register a stake credential but not deregister it.
- The demo shows datum evolution: the new logic reads both the old and new datum shapes and writes the new one.
- The reusable library is split from the counter demo, on-chain and in MeshJS.
The guide now covers the exit window, registering delegates before repointing, one settings instance per protocol, and when to choose forced forwarding over opt-in migration.
A documentation site for the library,
#78, opened
on Thursday. It renders each contract's spec and usage guide with
transaction diagrams and an llms.txt, without copying the canonical
documents. Upgradeability is left for a follow-up.
Dijkstra readiness: Ledger hardware wallets and Aiken diagnosed (D1, #188)
Ledger signing doesn't break wholesale, but several narrower paths do. The ledgerjs diagnosis ran 27 assertions against the unmodified library and 62 CLI decode observations from node 11.2.0:
- Legacy certificates. Stake registration with the legacy certificates still signs, then fails under Dijkstra. Wallets need to use the newer certificates with an explicit deposit.
- New fields silently dropped. Dijkstra's new transaction fields and script guards can't be represented by the current host and device protocol. The library drops them without an error, so a device can sign a different body from the one intended.
- Wallet-side encodings. List-form redeemers and duplicate witnesses are newly rejected. These are wallet serializer fixes, not device fixes.
The findings were reported upstream on Friday as ledgerjs-hw-app-cardano#58. No physical device or firmware emulator was tested.
An
Aiken diagnostic guide
separates two tracks. Existing V3 validators are not invalidated by
Dijkstra, but transaction decoding, evaluator agreement and execution budgets
still need checking on the real node. V4 authoring is new work: Aiken
currently rejects plutus = "v4". An offline smoke runner ships with it.
The scheduled readiness refresh failed on November 3, when 6 of 48 tools couldn't be rebuilt. Both causes were in the CI toolchain, not the data: three Go repos now need Go 1.26.10, and parallel Rust version checks raced each other. #188 fixes both; it opened on Saturday and merged on Wednesday, November 11.
Activity
Merged PRs, issues, and releases grouped by deliverable — the evidence behind the narrative above.
- PR openedFix readiness-discovery native refresh toolchain failuresinput-output-hk/devx-updates · @rober-m
6 commits · input-output-hk/devx-updates
D3 Setup CLI/TUI
Done- Mergedfeat: add PyCardano off-chain templateinput-output-hk/cardano-init · @paulobressan
- Mergedci: cover every dapp tool in the smoke testsinput-output-hk/cardano-init · @paulobressan
- Mergedfeat(cli): tool icons and a role-grouped `list`input-output-hk/cardano-init · @rober-m
- Mergedci: run affected tool checks on pull requestsinput-output-hk/cardano-init · @paulobressan
- Mergedfix(doctor): require the yaci-devkit CLI for Yaci projectsinput-output-hk/cardano-init · @rober-m
- Mergedfeat: add Blaze off-chain templateinput-output-hk/cardano-init · @paulobressan
- Mergedfeat: add Plutarch on-chain templateinput-output-hk/cardano-init · @rober-m
- Mergedchore(scalus): bump Scalus to 1.4.1input-output-hk/cardano-init · @rober-m
- Mergedfix(meshjs): restore Yaci devnet smoke compatibilityinput-output-hk/cardano-init · @rober-m
- Mergedfeat: lucid evolutioninput-output-hk/cardano-init · @paulobressan
- PR openedfix(yaci): stop the whole devnet on teardowninput-output-hk/cardano-init · @rober-m
- PR openedfeat(doctor): check minimum dependency versionsinput-output-hk/cardano-init · @rober-m
- PR openedfeat: add Apollo off-chain templateinput-output-hk/cardano-init · @rober-m
- PR openedfeat: add Pebble on-chain template (experimental)input-output-hk/cardano-init · @rober-m
21 commits · input-output-hk/cardano-init
D5 Contracts Library
In progress- MergedUpgradeability: follow-ups from the PR #57 reviewinput-output-hk/contracts-library · @rober-m
- Mergedrefactor: compare Data directly and use assets.lovelace_ofinput-output-hk/contracts-library · @franciscojoray
- Mergedfix(smart-wallet): pin continuations to the wallet address and forbid reference scriptsinput-output-hk/contracts-library · @franciscojoray
- Mergedfix(event-triggered): pin vault continuation reference scriptsinput-output-hk/contracts-library · @franciscojoray
- Mergedfix(dao): keep deadline vote locks and count only TallyVote-spent votesinput-output-hk/contracts-library · @franciscojoray
- MergedRefactor code for settings to fix vulnerabilitiesinput-output-hk/contracts-library · @sofia-bobbiesi
- Mergedfix(vesting): harden claim against malformed bundles, delegation changes and dirty continuationsinput-output-hk/contracts-library · @rober-m
- Merged21 explore upgradeability migration beacon indirectioninput-output-hk/contracts-library · @sofia-bobbiesi
- PR openedCi/84 improvementsinput-output-hk/contracts-library · @sofia-bobbiesi
- PR openedfeat(website): add the documentation siteinput-output-hk/contracts-library · @mikarasv
101 commits · input-output-hk/contracts-library