Implement deterministic RV64 immediate plans, shared policy decoders behind direct action stubs, bounded private adapter frames, and CFG-liveness scalar slot reuse. Keep witness formats and the outer 4,096-byte loading boundary. Lowering record v9 and the independent checker bind the changed machine shapes.
Cost-report v2 adds measured nonzero group exits, explicit unavailable results, static call-chain bounds, expanded policy/scalar sweeps, and multi-Script accounting with frozen per-metric ceilings. See the implementation and acceptance report. Publication is authorized with a release-specific waiver of the pending review and evidence records; see the release notes.
Reject source-byte loop fusion when discarded loop-prefix instructions define
an offset or memory pointer. Propagate immediate-planner errors through assembly
layout. The self-hosted Registry derives client identity from the socket peer
and an explicit trusted-proxy count, discarding caller-supplied IP/ASN headers.
These corrections originate in 9c441094 on arthur/fix-audit-bugs.
Add decoded-ELF static load/store counts to scalar evidence, hash the shared measurement fixtures and frozen budgets, and provide a native before/after comparison command. A pinned patch and reproduction script rebuild the released 0.30 backend with the expanded cost harness; the original dirty measurements remain historical evidence. See the reproduction package.
Published September 23 at signed tag v0.30.0 (352b4950). GitHub assets and
the website are complete within the accepted publication scope; see the
current closure record.
Publication and the website update were authorized on 2026-09-21, subject to a fresh full release gate. See the 0.30 release notes for the accepted compatibility boundary and publication channels.
The entries below retain the evidence state at each implementation step. The release notes and capability ledger record the current acceptance state.
-
Correct runtime-error sidecars so generated label ordinals are not mistaken for exit codes. Validate large policy dispatchers after conditional-branch relaxation, with mutations that reject changed conditions, skip distances, and call destinations. Generated contract instructions remain unchanged. Run the Registry PostgreSQL suite in the release workflow and require the latest migration and its interface lookup index.
-
Restore the edition 2026 generic declaration contract from 0.25; apply the stricter public layout declaration boundary only to edition 2027 owners. Preserve constraint spelling and explicit abilities during formatting, and accept nominal
ScriptHashinputs in nativeexact_hashlifecycle clauses. See the syntax compatibility audit. -
Make cost evidence mandatory in CI/backend and both release gates: missing RISC-V target libraries or the selected Rust toolchain's
llvm-stripfail instead of silently skipping. Require a fresh execution report, independent byte/cycle ceilings for the three matched Rust samples, and bounded growth checks for action count, fixed-byte witness width, and input-group size. -
Record the selected-network deployment on Pudge testnet without creating a release tag or invoking GitHub release automation. Two confirmed transactions keep twelve immutable
data2code Cells live: the seven strict business contracts and Registry Type Script in0x49572cfd3258b49ff214c0dc5cd60388826e7f989acf904a9016c4cfbcb2a562, plus the bounded GroupInput/GroupOutput verifiers and exact NovaSeal parent/BIP340-child boundary in0x24273eb1f62a6a34a629f8306aa0c5a1434e47365538115002d2aec7563e54e9. The checked-in manifest and report bind Pudge's genesis, the clean artifact source commit, every ELF SHA-256/CKB data hash, output index, occupied capacity, deployment authority, dry-run result, block identity, and minimum confirmation policy. Offline Rust validation and the CCC-based online verifier reject scope, transaction, Cell liveness, lock, and byte-identity drift. Publication remains separate and must not bypass the maintainer's no-TAC constraint. -
Complete the repository-local 0.30 release replay after updating NovaSeal's parent-lock ABI preflight to require the compiler's exact
GroupInput#0binding. Record the unified release, repository, cryptographic, and business gates as passed while leaving selected-network deployment and publication explicitly unauthorized and incomplete. Refresh the Registry API's Wrangler, Vitest, esbuild, and Workers type toolchain, removing all moderate/high advisories while retaining only the JoyID/CKB low-severityellipticchain. -
Re-accept retrievable release-evidence pins for the VS Code extension, website, NovaSeal, and iCKB comparison corpus after the recorded commits disappeared from their configured remotes. Refresh the editor and website dependency graphs, eliminating all editor and all moderate-or-higher website npm advisories without taking npm's unsafe CKB connector downgrade. Make Git fixture tests independent of the developer's global commit-signing setting, and retain 2026-compatible source wrappers for repository-wide scenario discovery while refreshing their exact sidecar and iCKB differential identities. Rebuild the canonical playground compiler twice to the identical SHA-256
82e76c029af7647fa206684e023fc95abdfd8e15ea6ce12e8993edb75da91b3bwithin the 600 KB gzip budget. -
Complete issue #26's external-verifier family with exact EXEC, SPAWN/WAIT, and verifier-handle CKB-VM fixtures. Seven independently checked parent artifacts and one pinned argument-checking child cover two accepted rows and dependency-position, hash, adapter, argument, scope/receipt, semantic- statement, child-exit, and post-build substitution failures.
-
Complete issue #26's NFT/DOB scenario family with a deterministic signed policy lifecycle for unique mint, derived metadata-state update, ownership transfer, and burn, plus an independently checked typed-view capacity adjustment artifact. Pin five accepted and five rejected CKB transactions, including duplicate output, stale state, wrong Lock/Type, and missing owner authorization, to exact artifact and sidecar identities.
-
Add an exact persistent-policy runtime-view resource profile. The stateful
partial_fill/settle/cancelpath now gates its canonical policy artifact and sidecars, six transaction identities, 17,341 maximum cycles, 7,040-byte ELF, 5,376-byte stack frame, 145 witness bytes, 493 transaction bytes, and 14,224 dependency bytes. Fixed domain-separated input OutPoints make the measurement stable under parallel test execution. The frozen corpus also explicitly excludes full-header hashing and an in-language multisig-prefix signing transform: it uses typed header fields and the exact standard multisig Lock boundary instead. -
Split the deliberately deferred portions of the implemented #10/#11 contracts into post-v1 issues #29 and #28 respectively. The 0.30 boundary remains exact closed cross-Script roles plus exact fixed-width Script, verifier, and deployment-line handles; runtime-selected open roles and generic compatible-open handles cannot silently expand that release scope.
-
Pin the raw and serialized CKB transaction identities for all five rejected composition-anchor mutations and verify every case in one exhaustive test. Bind the four inventory-mapped substitutions—authorization, Type state, output, and CellDep—and exact ProtocolBundle materialization to their four artifact identities in the scenario-evidence manifest. Complete exact- artifact coverage for the multi-Script family by replacing nondeterministic state input allocation with fixed fixture OutPoints, pinning the
partial_fill, successorsettle, and independentcanceltransactions, and exercising aPB200exclusive-role conflict that the adapter rejects before materialization. -
Exercise typed
GroupInputdata_sizeandcapacityreads inside every action of the persistentpartial_fill/settle/cancelpolicy. The same policy artifact now passes direct action dispatch, exact generated-builder and ProtocolBundle materialization, the four-artifact composition anchor, and prior-output stateful CKB-VM execution. Refresh its four sidecar identities, transaction and ProtocolBundle hashes, and measured 41,822-cycle, 16,424-byte combined-ELF profile under an explicit 17,000-byte ceiling. -
Extend issue #24's exact non-cryptographic runtime-view resource evidence to global Output, current-group GroupOutput, and complete Lock/Type Script projections. The CKB-VM fixture covers absent Type Scripts, exact 32-byte args, maximum 459-byte Script args, and one-past-last indexes while pinning artifact, sidecar, raw-transaction, and serialized-transaction identities. The standalone checker now accepts only the closed Cell-view to internal Script-reference lowering used by these public projections.
-
Add a fourth exact issue #24 resource profile for complete Input, GroupInput, CellDep, OutPoint, Since, Lock/Type Script, and fixed WitnessArgs projections. Pin its artifact/sidecar and raw/serialized transaction identities and teach the standalone checker the closed
InputView<T>to internal OutPoint reference boundary without admitting Output, CellDep, raw Source, or integer retyping. -
Close issue #24's repository-local persistent-policy and generated-builder parity with a fifth exact profile. A canonical
PolicyWitnessV1bundle drives a complete runtime-view Type-group action and pins the independently checked artifact, sidecars, transaction identities, and bounded resource measurements. -
Add the bounded fixed-width committed-substate profile for issue #13.
Commitment<T>is a nominal 32-byte CKB Blake2b-256 value over the existingCellScriptPackedHashV0domain;Opening<T>is an explicit, linear, witness-only value that can be consumed exactly once bycommitment::open. The compiler rejects aliases, ordinary-parameter injection, type mismatch, storage, return, nesting, Cell-backed/dynamic payloads, and scratch-overflow shapes. Generated code hashes and compares before materializingT, returning stable error 73 on mismatch. Metadata, generated builders, checked-runtime ProofPlan records, typed-checker mutations, formatter/LSP paths, output-field correspondence, golden vectors, and real CKB-VM pass/tamper tests share the same fixed-width contract. An exact maximum-shape profile fills the 512-byte scratch contract and gates cycles, ELF, stack, witness, transaction, dependency, artifact, sidecar, and transaction identities. The standalone checker binds and mutation-tests the inline header/copy/hash/compare/materialize/recommit machine sequence. Independent review and release acceptance remain pending. -
Complete issue #26's committed-state scenario family with exact CKB-VM successor, stale, malformed, wrong-root, wrong-index, and wrong-successor transaction fixtures. The standalone checker now binds a Commitment field's machine pointer to its typed root stack slot and exact schema offset and rejects offset mutation before authentication.
-
Complete issue #26's temporal scenario family with four positive and five adversarial typed-Since/HeaderDep transactions. Pin one checked artifact and all sidecar, raw-transaction, and serialized-transaction identities while preserving stable errors for cross-domain, missing/one-past HeaderDep, early-release, and epoch-overflow failures.
-
Complete issue #26's fungible scenario family with an independently checked five-action policy and exact signed transactions for mint, transfer, bounded split, bounded merge, and burn. Make lifecycle genesis OutPoints deterministic and pin replay, cardinality, amount, overflow, issuer, and multisig-authority rejections to their exact transaction identities.
-
Complete issue #26's authorization scenario family with exact standard multisig-v2, threshold, issuer, and policy-Script identity evidence. Pin post-signing mutation, copied-owner, wrong-domain, wrong-key, partial-signature, and live-set replay failures to their exact signed transaction identities.
-
Complete issue #26's order/AMM scenario family. Reuse the exact anchor for partial fill, cancel, settlement, partial-settlement rejection, and authenticated dependency substitution; bind pool merge to the matched CellScript/Rust artifact; reject replay at the local live-set boundary; and reject wrong price and output reordering in a focused CKB-VM AMM artifact. Keep the unreachable pinned iCKB reference as a reproducibility blocker.
-
Record the exact clean-replay boundary after rechecking every 0.30 gitlink: the pinned VS Code, website, NovaSeal, and iCKB commits are no longer available from their configured GitHub repositories, while the pinned DOB commit remains retrievable. Do not replace the missing identities with current remote heads; they require explicit restoration or re-acceptance.
-
Add the versioned 0.30 product-capability ledger for issues #7 through #27 and validate its claims, evidence links, dispositions, dependencies, and release gates independently from executable-surface closure. Preserve generated assembly coordinates in internal assembler diagnostics and expose them under a distinct JSON
generated_assemblyobject instead of presenting them as CellScript source spans. -
Add per-scenario business evidence grades and exact manifest hashing. The record distinguishes owner/test inventory, partial transaction hashes, and exact artifact fixtures, and downgrades unsupported family-layer claims. It also records that the two parent-pinned external corpus commits are no longer fetchable from their configured remotes; current remote heads are not used as substitutes for frozen evidence. The committed-state family now has its first exact-artifact authenticated-opening row, and the shared CKB harness uses domain-separated deterministic fixture OutPoints so transaction hashes remain reproducible across processes.
-
Promote the four-artifact/five-group business anchor's positive settlement row to an exact-artifact fixture. Its canonical record now pins every ELF, lowering record, source map, and verified-bundle identity in addition to the executed raw transaction, serialized transaction, ProtocolBundle, and resource measurements.
-
Add machine-gated maximum-shape resource profiles for all ten frozen cryptographic and authorization capabilities. Exact CKB-VM measurements now cover 459-byte Script hashing, 65,536-byte witness hashing, depth-16 SHA256d Merkle openings, the maximum zero-Lock signing-message shape, exact Script handles, and trusted EXEC; the signed multisig lifecycle gates both editions and all optimization levels with pinned structural measurements and a cycle ceiling. The BIP340 profile rebuilds and executes the reproducible NovaSeal child verifier through the compiler-generated parent Lock in full transaction context, recording 3,679,593 cycles, a 13,472-byte parent ELF, a 15,792-byte child stack high-water mark, a 418-byte WitnessArgs value, an 879-byte transaction, and a 100,912-byte verifier dependency. The release gate reproduces and checks those values exactly.
-
Preserve the CKB OutPoint index as
u32through builtin typing, stdlib IR, direct/property lowering, metadata, and independently verified lowering. This fixes current NovaSeal state Type compilation and aligns its action and Lock harness witnesses with the canonicalWitnessArgs.input_typeenvelope. -
Freeze a machine-validated cryptographic and authorization matrix for the eight-family business corpus. Ten admitted capabilities and twelve value domains now distinguish native hashing and Script identity, bounded signing messages, exact standard Locks, exact Script handles, committed openings, and trusted external verification.
check-business-corpusrequires the complete matrix and content-binds all cited CKB-VM, checker, measurement, and dependency evidence while retaining maximum-bound measurements, deployment, release, and independent review as explicit candidate requirements. -
Freeze the candidate eight-family business corpus and execute its canonical settlement anchor with four independently checked CellScript artifacts and five actual Script groups. The anchor combines fungible conservation, Lock authorization, two bounded GroupInput orders, exact GroupOutput Plan correspondence, a persistent
partial_fill/settle/cancelpolicy, and an authenticated CellDep. ProtocolBundle now hash-binds the bounded Plan evidence, projects concrete witness bytes, Script hashes, and capacities into per-artifact validation, and materializes the exact Molecule bytes executed in CKB-VM. The fixture pins transaction and bundle hashes plus cycle, ELF, stack, witness, transaction-size, and occupied-capacity budgets. Network admission, deployment, and independent review remain release-candidate evidence. -
Complete issue #8 for the admitted bounded output plan contract. Native
create_eachaccepts a fixed-width witnessBoundedList<Plan, N>when one complete output template maps every data field and the Lock directly from the same Plan element and the resource declares a positive capacity floor.CSBPLv1order is bound one-to-one to the current Type Script's canonicalGroupOutputarray; missing, extra, malformed, foreign, field/Lock/Type, capacity, and predicate failures terminate with stable errors. Metadata schema 72 exposes the complete mapping. Generated TypeScript builders,cellc tx validate, and the CKB adapter independently materialize or verify the exact witness and concrete outputs. The standalone artifact checker binds the typed contract to decoder, syscall, comparison, ordinal, and error paths; rebound mutations fail with V2420. The shared corpus covers 14 semantic and adversarial cases, and a separate 101-output fixture guards the 4,084-byte Plan payload boundary. Clean-source live CKB acceptance passed all 14 cases on 2026-09-09, and full production-evidence validation binds that report to the current fixture and unique deployed ELF. The requireddev,ci, andbackendgates passed at00f39a16. Computed and dynamic templates remain fail-closed. -
Complete issue #7 for the accepted bounded Type-group input contract. Native
input BoundedCellSet<T, N>authoring selects the current complete Type Script's canonicalGroupInputarray, accepts0..=Nfixed-width resources, executes each pure predicate and numeric accumulator update exactly once, and discharges every selected linear input. The simulator and CKB-VM share a ten-case corpus; a separate 1024-element fixture guards ELF size and cycles. The standalone checker binds syscall ordinals, buffers, lengths, complete Type/Lock hashes, success/absent results, and predicate machine evidence; rebound mutations fail with V2420. Live CKB acceptance passed all ten cases on 2026-09-08, and production-evidence validation binds that report to the current fixture and unique deployed ELF. The requireddev,ci, andbackendgates passed on 2026-09-09 at43e58780. Dynamic outputs remain under issue #8. -
Stabilize public value generics under issue #23 Proposal A. The new
fixed_valueprofile normalizes the six ordinary fixed-value abilities, generic aggregates derive omitted abilities from their fields, public cross-package templates retain bounded monomorphization, and equivalent spellings produce the same canonical interface hash.cellc interfacedefaults to a concise human view while--jsonand--outputretain the complete record; compatibility analysis, Registry admission, the independent artifact checker, LSP, VS Code, and the browser metadata compiler validate the same generic parameter contract. The requireddev,ci, andbackendgates, including clean-source CKB production/stateful acceptance, passed on 2026-09-08 at69488316. -
Add transactional package and workspace upgrades through
cellscript-upgrade-plan-v1.cellc update-planand the defaultcellc updateresolve candidates in memory, preserve unrelated package-scoped nodes, diff exact nodes and edges, compile every reverse dependent, and keep source API, serialized layout, runtime ABI, effects/capabilities, builder, deployment, ProtocolBundle inputs, and upgrade authorization as separate evidence. Onlycellc update --apply-planmutates locks after plan/compiler hash, exact old bytes, canonical candidate, confined path, hard-blocker, and acknowledgement checks. Per-file synced renames and runtime rollback cover multi-member apply; the command never editsDeployed.toml, deploys, publishes, signs, or performs state migration. CLI/LSP/VS Code, v1 fixtures, package-scoped and stale/tamper negative tests, and dev/CI schema checks share the same contract. -
Add negotiated, read-only
cellscript-resolve-graph-v1andcellscript-build-plan-v1inspection throughcellc resolve-graphandcellc build-plan. The schemas retain roots, aliases, edge provenance, feature/test/environment selection, immutable source and lock identity, stale nodes, compatibility/VM/codec axes, expected outputs, and stable cache reasons. Builds validate the same unit IDs; package audit, LSP, VS Code, dev, and CI consume the shared contract. Existingcellc metadatakeeps its compiled-program meaning. -
Replace declaration-order workspace member loops and synthetic root locks with
cellscript-workspace-resolve-graph-v1. Explicit members/exclusions, canonical path and package-name uniqueness, independently authoritative member locks, cross-root package-instance consistency, cycle rejection, dependency-first ordering,-ptransitive closure, and dependency failure propagation are enforced before compilation. Successful non-frozen builds refresh member-localpackage_buildidentities only after the selected graph and every build succeed. Virtual roots rejectCell.lock; artifact hashes are no longer disguised as dependency nodes. Dev and CI run the checked-in reverse-declared workspace diamond frozen and offline. -
Enforce
[package].cellscript_versionas a real compiler SemVer requirement before source loading. Legacy omission remains*, historical bare versions mean a minimum, and malformed or incompatible requirements fail with stableE2600. Dependency preflight aggregates every discovered incompatible path/Git/Registry package and incoming edge in machine JSON; Registry selection deterministically chooses the newest compiler-compatible package version while keeping the exact build compiler as separate evidence. Carry the compiler requirement evidence intoCell.lockversion 5 andcellscript-lock-v0.30-single-package-coordinate-v1: the root, every dependency, and canonical node identity bind the declared requirement and resolving compiler release. Frozen builds revalidate without selecting replacements, while explicitcellc lock/updatemay repin version 1-4 locks. -
Define the package coordinate as
(declared namespace, declared package name)and enforce one selected version/source/feature/environment instance per coordinate in each runtime or test graph. Compatible Registry diamond edges reuse the selected candidate; incompatible ranges, implicit Path/Git/Registry substitutions, divergent exact feature roots, and environment mismatches fail during resolution with structuredE2601incoming-edge evidence. Locked and frozen materialization applies the same fail-closed rule and discards partial graphs.Cell.lockv5 declaresresolver_model = "single-package-coordinate-v1"; multi-version graphs require a future lock and package-qualified module-identity contract. -
Rebind the CKB acceptance transaction recipes to the typed timelock contract.
request_release,execute_release, andcan_unlock_locknow supply canonical absolute-epochsincevalues for the selectedTimeLock; the stateful release path carries epoch 11 from the created lock. A focused fixture assertion prevents these inputs from silently reverting to the pre-typed all-zero block-number encoding, which the current machine contract correctly rejects withckb-since-malformed(37). -
Rebind the HeaderDep-authenticated multisig recipes to epoch 11. Every action and lock that compares
reported_timewithHeaderDep.epoch_numbernow carries that HeaderDep and matching witness value; created wallet, proposal, confirmation, and execution-record data use the same epoch. The stateful create/propose/approve/execute chain therefore preserves one authenticated time domain across its live Cells. -
Add focused schema-change acknowledgements for Edition 2027
data = same exceptrelations.cellc schema-ackemits a canonical plan, blocks a newly added implicitly preserved field withSACK1001, creates a receipt only after the field receives an explicit policy and the reviewer supplies an identity and rationale, and rejects tampered or stale receipts. Plan and receipt hashes bind the module, selected action/roles, old/new interface and field-layout identities, canonical relations, and changed field treatments while ignoring formatting changes. The decisiveapproval_noncefixture now proves that an explicit constant reset remains executable underDenyFailClosed; ProofPlan recognizes fixed constants as verifier-checked successor assignments. Every schema delta still reports a separate state-migration requirement, and the workflow does not mutateCell.lock,Deployed.toml, or deployment authorization. Graph-wide transactional upgrade plans now consume the graph-wide evidence under issue #20 while keeping the focused acknowledgement receipt independently useful. -
Introduce the first authoring-level CKB Script identity contract. Edition 2027 successor relations now accept
lock = exact_hash(script_hash)and require the expression to have the dedicatedScriptHashtype. Typed CKB transaction views retain that type for complete Lock/Type Script hashes;ckb::script_hash(hash)is the explicit conversion from a trusted rawHash. The conversion is a type-domain assertion and does not prove that a Script exists, is deployed, or authorizes the transaction. Parser, AST, typing, formatter, LSP completion, IR lowering, optimizer traversal, syntax audit, and real CKB-VM positive/substitution-negative tests share the same boundary. The existinglock = exact(address)form and preview4's legacyAddress-typedexact_hashsurface remain compatible. Advance the experimental Edition 2027 source identity tocellscript-source-semantics-2027-0.30-dev1and the artifact cache identity toproject-source-set-v31-0.30-dev1-script-hash; the final 0.30 source identity remains gated on the complete adopted grammar. -
Establish
cellscript-ckb-runtime-view-v1in compile metadata schema 68. Typed Cell views add occupied/unoccupied capacity, consensus data hash, and inputsince; typed HeaderDep views add the three CKBLOAD_HEADER_BY_FIELDepoch fields with exact 8-byte reads and stable errors; andScriptViewnow keeps complete Script hash separate from raw code/args hashes. Real CKB-VM tests cover nonzero epoch values, derived epoch-start block number, one-past-last HeaderDep rejection, and CellDep data-hash substitution. Advance the artifact cache identity toproject-source-set-v32-0.30-dev1-runtime-view-v1. -
Add the first typed CKB temporal domains without changing the Edition 2026 raw API.
HeaderDepViewnow distinguishesEpochNumber,BlockNumber, andEpochLength;InputView.sinceisEncodedSince; and the newckb::since_absolute_epoch/ckb::since_relative_epochconstructors produceAbsoluteEpochSince/RelativeEpochSince. Same-domain epoch-Since comparisons use epoch-first rational-fraction ordering rather than packed integer ordering, explicit conversions recover raw wire bits, and temporal helper parameters use a fixed one-register ABI. Type tests reject mixed domains and real CKB-VM vectors cover absolute/relative encodings, equivalent fractions, helper calls, and malformed zero-length input. Keep the older constructors andinput_since_atasu64, and advance the artifact cache identity toproject-source-set-v33-0.30-dev1-temporal-domains. -
Complete the RFC0017 mode/metric product with distinct absolute and relative block-number, epoch-fraction, and timestamp
Sincetypes. Add checked block/timestamp constructors,DecodedSince, strict decoding from opaque input or explicit raw bits, six mode/metric narrowing operations, and typed flag/metric/value projections. Decoding rejects reserved bits, metric11, malformed epoch fractions, and timestamp values whose consensus seconds-to-milliseconds conversion overflows. CKB-VM tests bind exact vectors for all six domains and stable error 37 for bad flags, scalar bounds, timestamp overflow, and mismatched narrowing; checker mutations reject both changed mode and changed metric. Advance the artifact cache identity toproject-source-set-v34-0.30-dev1-since-domainsand bind target/deployment metadata tosince_abi = ckb-since-rfc0017-typed-v1. Header timestamp/full-block readers, checked duration arithmetic, migration, and the complete business corpus remain open under issue #12. -
Add checked
EpochDurationarithmetic to the typed temporal contract.ckb::epoch_durationvalidates the CKB 24-bit epoch-number domain;ckb::epoch_addrejects overflow andckb::epoch_subrejects underflow;ckb::epoch_duration_to_u64is the explicit representation escape hatch. The dedicated type cannot be mixed withEpochNumberor raw integers, and the three checked operations remain named in IR, typed semantics, runtime access metadata, and CKB-VM failure evidence. Invalid arithmetic uses stable error 20,numeric-or-discriminant-invalid. Advance the artifact cache identity toproject-source-set-v35-0.30-dev1-epoch-duration. -
Complete the typed HeaderDep temporal readers that CKB does not expose via
LOAD_HEADER_BY_FIELD.HeaderDepView.block_numberreturnsBlockNumberandHeaderDepView.timestampreturns the distinctTimestampMillisdomain. The runtime loads the fixed 208-byte MoleculeHeader, requires the exact size, and reads the official RawHeader offsets 16 and 8 respectively; missing headers retain error 45 and malformed lengths use error 4. Tests bind those constants tockb-types, execute nonzero values in CKB-VM, and keep milliseconds distinct from timestamp-Since seconds. Advance the artifact cache identity toproject-source-set-v36-0.30-dev1-full-header-time. -
Add targeted
W3012warnings and a language-server workspace edit for every legacy raw temporal call with a total typed-domain replacement. The edit preserves comments and the surroundingu64result; the untyped GroupInput#0 reader migrates to the explicitly namedckb::input_since_raw()alias. Move canonical package interfaces tocellscript-package-interface-v3, where the fixed representation, RFC0017 constructor/decoder set, domain inventory, and migration identity are hash-bound and runtime-ABI changes are classified as breaking. The Registry API continues to read v2 and validates the complete v3 temporal contract. Advance the artifact cache identity toproject-source-set-v37-0.30-dev1-temporal-migration-interface. -
Complete the issue #12 implementation surface across formatter, VS Code, generated TypeScript builders, locked package fixtures, metadata-only WASM, and the website Playground. Migrate timelock, DAO, vesting, NFT-expiry, governance, and atomic-swap examples to typed HeaderDep,
Since, and checked epoch-duration operations. Split browser metadata construction from the full native evidence path so the canonical Rust 1.97.1 / wasm-bindgen 0.2.121 / Binaryen 131 build retains its bounded summary at 543,507 bytes gzip. Advance the artifact cache identity toproject-source-set-v38-0.30-dev1-temporal-product. -
Advance compile metadata to schema 69 and add
cellscript-ckb-runtime-access-provenance-v1. Every CKB runtime access now records its resolved source, source origin, static/dynamic/bounded index, optional maximum, and fixed/whole/bounded byte range. The legacy numericindexremains a compatibility projection and is zero for dynamic accesses; the structured record is authoritative. Runtime source-view constructors accept dynamicu64parameters but terminate with stable error 44 when a value exceeds the packed 32-bit source-index domain. Generated TypeScript builders preserve the same records and reject out-of-domain parameters. The standalone artifact checker independently rejects source, index, range, contract, and module/entry projection mutations even after outer sidecar hashes are rebound. The canonical browser summary is 544,037 bytes gzip with SHA-256f0128b364ca624506ddf78639ff2be8850ec88424f19707f72fc009a3536407a. Advance the artifact cache identity toproject-source-set-v39-0.30-dev1-runtime-provenance. -
Add bounded, read-only variable-length witness views with explicit field ownership.
witness::bounded_raw,bounded_lock,bounded_entry, andbounded_output_typeproduceWitnessBytesView<owner,max>values whose maximum is a compile-time literal in0..=65536. The views expose exact.size, byte/u32/u64 reads, and full-view streaming CKB Blake2b without a witness-sized allocation.bounded_entrynames the oneWitnessArgs.input_typefield shared by theCSARGv1entry ABI and bounded plan/authorization consumers; it does not create a second payload. Missing fields and values above their declared bound use stable errors 67 and 68. TypedWitnessArgsView.lock/input_type/output_typenow require and stream an exact 32-byte field regardless of total WitnessArgs or sibling-field size, while the legacy direct helpers retain their historical zero-pad/truncate behavior. CKB-VM tests cover all four owners, fields larger than the old 512-byte helper buffer,Some(empty)versus absent fields, malformed Molecule tables, range failures, GroupOutput provenance, and streaming hashes. Metadata schema 70 binds owner, maximum, source, and byte range; compiler metadata validation, including the metadata-only WASM path, and the standalone checker reject their mutation after outer hashes are rebound. The rebuilt browser bundle is 554,564 bytes gzip with SHA-256e57adc617c36a7946c706d4b4e420d3463d4e97249f343ace84a56fe0df79a39, within the 600 KiB budget. Advance the artifact cache identity toproject-source-set-v40-0.30-dev1-bounded-witness. -
Add
ckb::transaction_hash() -> Hashas the canonical fixed-width transaction identity primitive. The CKB backend callsLOAD_TX_HASH, requires success and an exact 32-byte result, and preserves the access astransaction-hash/Transactionprovenance in metadata schema 70. Metadata validation and the standalone checker bind the operation, syscall, source, authoring name, implicit index, and exact range; rebound mutations cannot relabel it as a generic transaction read. Real CKB-VM evidence proves that a nonzero hash is available in an ordinary Type Script transaction, and the syntax audit, LSP, example, generated metadata path, and WASM tests share the same surface. This primitive is the raw transaction-hash prefix required by canonical signing domains; it does not by itself implementenv::sighash_all, which remains fail-closed until group-witness ownership, first-witness lock replacement, extra-witness inclusion, and bounded message construction are explicit. The rebuilt browser bundle is 554,741 bytes gzip with SHA-2567884304db93b50abadb8e7ca082d23afe60ee2d5d73886fd5f3572a4f525d179, within the 600 KiB budget. Advance the artifact cache identity toproject-source-set-v41-0.30-dev1-transaction-hash. -
Add the bounded
env::sighash_all_zero_lock(max_group_inputs, max_inputs, max_extra_witnesses, max_witness_bytes) -> SighashAllDigestsigning-message contract. The CKB backend hashes the exact transaction hash, the first current-group witness with its completeWitnessArgs.lockpayload replaced by equal-length zero bytes, later present group witnesses, and witnesses after the transaction input count, with canonical little-endianu64length prefixes. All counts and each included witness are bounded; excess runtime shape uses stable error 69. A real CKB-VM differential matches the pinnedckb-sdk-rustgenerator across a non-contiguous Script group, an unrelated input witness, and a transaction-level extra witness. Metadata schema 71 binds the exact domain, scope, transform, ordering, result type, and four literal limits. The generated TypeScript builder manifest and action plan preserve the domain and mark pre-signing witness placement as required; the browser summary exposes the same record. The standalone checker cross-checks those records against typed call operands and runtime access provenance after outer hashes are rebound. The genericenv::sighash_all(source)path remains deferred, and this all-zero placeholder contract does not claim prefix-preserving multisig layouts. The rebuilt browser bundle is 560,647 bytes gzip with SHA-256fb58a9463bbf83f056b496b505e44fb0072f8b0e6c8d392678c959771279ed15, within the 600 KiB budget. Advance the artifact cache identity toproject-source-set-v42-0.30-dev1-sighash-zero-lock. -
Make package environment propagation chain-identity-safe before the ProtocolBundle work begins. A dependency edge may name its dependency-local environment with
use_environment = "...", inherit the unique environment whosechain_idand normalized 32-byte genesis hash match the root, or declareenvironment_independent = true. Equal display names no longer select transitive overrides. Missing, mismatched, or ambiguous mappings fail with compile diagnostics, while update-time external resolvers receive the already validated chain identity without looking up an inherited name in the dependency manifest. Canonical dependency node IDs bind the root name, dependency-local name, selection policy, chain ID, and genesis hash, so frozen/offline materialization rejects stale mappings even when manifest and source hashes are rebound. Update-time resolver requests advance tocellscript-dependency-resolver-request-v2, carrying separateroot_nameand optional dependencylocal_namefields beside the validated identity. Also compare transitive path dependencies after resolving each path from its own manifest root. Unit coverage includes a three-package diamond with different local environment names, explicit independence, same-name/different-genesis rejection, ambiguous matches, rebound lock evidence, and the former external-resolver panic path. -
Add the Phase 0 and deterministic offline-composition core for issue #9.
cellc protocol bundle checkreads a boundedcellscript-protocol-bundle-input-v1, confines artifact paths, admits every referenced ELF/metadata/lowering/source-map set through the standalone checker, binds exact entry/package/lock/deployment/interface/typed-semantic identities, and emits a canonicalcellscript-protocol-bundle-v1plus CKB bundle hash. The resolver sorts declarative inputs while retaining physical transaction array order and rejects all documented ownership, output, witness, dependency ordering, Script/resource identity, capacity, fee/change, network/profile, signing-domain, and missing-index conflicts with stablePB200-PB211codes. A real three-artifact order/token/authorization CLI fixture proves canonical order independence and fail-before-signing conflict output. The Phase 1 builder-contract slice additionally requires a generated builder manifest for action entries, checks its identities, runtime contract, structural manifests, and selected-action projection against admitted metadata, and validates the shared skeleton plus explicit builder-assumption evidence against every artifact. Missing or invalid builder evidence reportsPB212; a tampered builder projection fails artifact admission. Runtime transaction serialization, per-Script-Group CKB-VM execution, RPC/signing/submission, and chain evidence remain explicitly unexecuted until the later #9 phases. -
Add the first #9 runtime-adapter materialization boundary. ProtocolBundle cell slots may now bind concrete input OutPoints,
since, and exact cell data, while witness commitments may carry separately verified exact field bytes.cellscript-ckb-adapterindependently rechecks the canonical bundle hash and complete per-artifact admission/metadata evidence, preserves the ordered transaction arrays in a packed CKBTransactionView, checks occupied output capacity, computes the fee remainder, and emits raw and full-serialization hashes and sizes. Each selected Lock or Type artifact is attributed to exact global and group-relative indexes and the same complete transaction byte hash. CKB-VM group execution, signing, RPC, and chain evidence remain explicitly unexecuted. -
Add a hash-checked ProtocolBundle node dry-run receipt. The CKB adapter sends the exact materialized transaction to
estimate_cycles, rejects any transaction/materialization mismatch, retains aggregate cycles, and records every direct Lock/Type artifact as accepted under the same complete serialization hash. Per-group cycle fields remain null because this RPC exposes only the aggregate count; spawned verifiers remain independently unobserved. Tx-pool and committed-chain evidence are not inferred from the dry-run. -
Add fail-closed ProtocolBundle live-input resolution. The adapter verifies the connected chain ID and genesis hash, queries every input with full cell data, requires
livestatus, and compares the ordered OutPoint, packed CellOutput hash, data hash, capacity, and resulting fee against the exact materialization. The newcellscript-protocol-bundle-live-resolution-v1record upgradescapacity_sourcefrom the bundle skeleton tolive-nodewhile remaining explicit that this is uncommitted state. -
Add live ProtocolBundle deployment-dependency resolution. Materialization now binds each admitted artifact hash and Script code identity to its exact transaction CellDep index. The adapter rechecks the connected chain, requires every code Cell to remain live, verifies the admitted ELF data hash for
data/data1/data2andtypedeployments, and expands Molecule dep-group member OutPoints before accepting a match. The resulting dependency record is bound to the exact transaction and prior live-input evidence and remains explicitly uncommitted. -
Add the ProtocolBundle signing and submission state machine. Exact live-input and live-dependency receipts produce
ReadyToSignProtocolBundleTx; the adapter runs caller-supplied CKB SDK unlockers, refuses remaining Lock Script Groups, preserves compiler-owned witness fields, and permits only witness lock changes over the same raw transaction. Signed node dry-run verifies signatures and every direct group,test_tx_pool_acceptbinds node cycles and fee, and submission is refused before RPC unless the exact signed bytes already carry tx-pool evidence. Submission receipts remain uncommitted. -
Extend generated TypeScript action builders with a typed ProtocolBundle v1 client. Each package exports its metadata/artifact/interface identity, binds an exact deployment without accepting a mismatched ELF hash, and sequences offline check, materialization, live inputs, live dependencies, readiness, resumable external signing, signed dry-run, tx-pool acceptance, and submission. Signing requests contain an opaque transaction handle and explicitly contain no private keys. Generated packages compile with
tscand exercise both the positive state order and wrong-state rejection. -
Complete the first reorg-aware ProtocolBundle confirmation boundary. The CKB adapter polls the submitted transaction's canonical
get_transactionlocation, derives depth fromget_tip_header, restarts observation if an inclusion disappears or changes, and rechecks the location before emittingcellscript-protocol-bundle-confirmation-v1. The finalConfirmedProtocolBundleTxrecords inclusion block/index, observed tip, required and observed depth, network identity, and reorg count while explicitly refusing an absolute-finality claim. Generated TypeScript clients expose the same ninth state and validate bounded polling policy. -
Make ProtocolBundle eligibility discoverable through Registry verification evidence. Both independent Registry verifiers emit the exact bundle schema, artifact-binding schema, and runtime-adapter identity only for CKB ELF bundles that carry complete sidecars and pass the standalone checker. The Registry worker requires the versioned triple to appear together, refuses it outside structurally verified CKB ELF evidence, and preserves it in accepted build evidence. Generic CKB executables and source-only snapshots remain unmarked.
-
Publish the numbered ProtocolBundle end-to-end wiki tutorial consumed by the website docs renderer. It connects standalone artifact admission, Registry discovery, offline conflict checks, Rust adapter states, generated TypeScript external-signing flow, and the bounded confirmation/finality boundary.
-
Implement closed typed cross-Script roles for issue #10. The versioned
cellscript-protocol-closed-role-v1record reuses ProtocolBundle Cell and witness claims, requires one exclusive provider plus shared-read consumers at the identical physical source, and checks an exact Molecule type/hash in every participant's independently admitted metadata. Resolved roles bind package, entry, interface, ELF, and deployment Script identities into the canonical bundle;PB213reports incompatible type, ownership, correspondence, or closed-foreign identity. Generated TypeScript packages export the same schema and abindClosedProtocolRoleconstructor. Open or runtime-selected roles remain assigned to the separate Script-handle work. -
Add issue #11's exact-artifact receipt and fixed-width value foundation. Every independently admitted ProtocolBundle artifact now carries a
cellscript-exact-script-handle-receipt-v1record that binds its selected entry, exactCell.locknode, Lock/Type/spawned-verifier role, interface, typed semantics, exact ELF, target profile, existing package/Registry ABI hash, verified bundle, complete deployed CKB Script, code CellDep, and chain identity. Its ordinaryCSHDLv1-fixed-202value commits to the receipt plus the complete Script, interface, artifact, profile, and ABI identities without granting Cell lifecycle authority. Data-hash deployment policy remains distinct from Type-hash code-Cell identity, and the CKB Script hash implementation is checked againstckb-typesfor all four supported hash types. Closed-role participants copy the exact handle, generated TypeScript packages expose a checked-handle binder, and builder manifests bind the same ABI/profile and handle schemas. Source-level genericScriptHandle<I>/VerifierHandle<I>construction and runtime-selected/open roles remain later issue #11 phases. -
Add the source/runtime exact-handle phase of issue #11.
ExactScriptHandleis an ordinary fixed 202-byte ABI value accepted by three checked helpers:ckb::require_cell_lock_exact_handle,ckb::require_cell_type_exact_handle, andckb::require_cell_dep_exact_verifier_handle. Each call requires the CKB Blake2b-256 hash of the complete handle as a compile-timeHashliteral, validates magic/class/role and every committed byte, then compares the selected full Lock/Type Script hash or CellDep data hash. Stable error 70 covers malformed values and every substitution class. Typed semantics, ProofPlan, runtime provenance, LSP completion, syntax governance, the standalone checker, and real CKB-VM positive/negative tests share this contract. ProtocolBundle artifacts and closed-role participants expose the already recomputedexact_handle_hash, and generated TypeScript binders retain it ashandleHash. GenericScriptHandle<I>, compatible/open handles, and deployment-line upgrades remain later phases. Advance the artifact cache identity toproject-source-set-v43-0.30-dev1-exact-script-handle. -
Close the exact-handle pre-signing validation slice of issue #11. Exact helper ProofPlans now retain their typed source kind and handle parameter and emit mandatory
exact_script_handlebuilder assumptions.cellc tx validatechecks the canonical 202-byte value and compile-time full-handle hash, recomputes the selected Lock/Type Script or verifier CellDep data identity, decodes raw or projectedWitnessArgs.input_type, and verifies the handle at its compiledCSARGv1parameter position. The regression matrix covers profile/ABI and every other handle region, wrong source and witness indexes, CellDep substitution, complete Script args changes, and swapped handle parameter positions. Advance the artifact cache identity toproject-source-set-v44-0.30-dev2-exact-handle-tx-validation. -
Add issue #11's off-chain deployment-line foundation without weakening the exact-artifact boundary.
cellscript-deployment-line-receipt-v1accepts only Type-hash exact receipts, derives six-dimensional compatibility against both the baseline and immediate predecessor, preserves stable Script/network/ role/profile/ABI identity, hash-links a monotonic sequence, and represents yanking as a terminal successor.CSLINv1-fixed-386embeds the full current exact handle plus line, policy, receipt, predecessor, availability, and admission-Cell identities;CSREGv1 || handle_hashcommits the whole value. Source/runtime use remains deferred until a distinct Type-hash target and unique live admission-Cell replacement contract can reject stale versions in consensus. Advance the artifact cache identity toproject-source-set-v45-0.30-dev3-deployment-line-foundation. -
Add the distinct
ckb-type-hashgenerated-artifact profile for deployment lines. It reuses the CKB VM2/Zbb code-generation ABI while admitting onlyhash_type = "type"; the existingckbprofile remains pinned todata2.Cell.toml, compile metadata, constraints, compatibility identity, CLI help, and the standalone artifact checker preserve the distinction and reject cross-profile hash-type substitution. This does not treat Type ID as compatibility evidence or implement the unique admission Cell/runtime path. Advance the artifact cache identity toproject-source-set-v46-0.30-dev4-type-hash-profile. -
Add the standard Type ID deployment-line admission path. The new
cellscript-deployment-line-admission-evidence-v1record binds an activeCSLINv1receipt to distinct admission/code TYPE_ID Cells, their exact data hashes and direct transaction CellDep positions.ckb-type-hashProtocolBundle artifacts now fail closed when that evidence is missing, predecessor/data-stale, yanked, code-substituted, or position-substituted. The separatecellscript-deployment-line-admission-transition-v1validator recomputes TYPE_ID creation args and checks exact one-input/one-output receipt replacements for upgrades and yanks. Node liveness and on-chain consumer helpers remain later closure. Advance the artifact cache identity toproject-source-set-v47-0.30-dev5-deployment-line-admission. -
Close node-backed deployment-line liveness in the CKB adapter. Resolved ProtocolBundle artifacts now retain the target-profile name, so the adapter independently requires one deployment line for every
ckb-type-hashartifact and rechecks thedata2/typesplit. Dependency resolution queries the union of ordinary code, admission, and Type ID code CellDeps; verifies each live out point, Lock Script, Type Script, data hash, chain identity, and transaction position; and blocksReadyToSignProtocolBundleTxon any stale or substituted Cell. On-chain source/runtime checks remain open. Advance the artifact cache identity toproject-source-set-v48-0.30-dev6-live-deployment-line. -
Close the bounded on-chain consumer path for exact deployment lines.
DeploymentLineHandleis a fixed 386-byte source/ABI value consumed by role-specific Lock, Type, and spawned-verifier helpers. Each helper requires a compile-time full-handle hash, active canonicalCSLINv1, the exact admission CellDep Type hash andCSREGv1 || handle_hashdata, and the exact code CellDep data hash; Script roles additionally bind the selected complete Script hash.cellc tx validatebinds the handle to its compiledCSARGv1witness position and both direct CellDep indexes. Generated TypeScript builders extract the checked handle and construct that evidence shape. Typed semantics, ProofPlan, LSP, syntax governance, standalone-checker rebound mutations, and real CKB-VM stale/yank/substitution cases retain the same contract under stable error 71. Generic compatible/open handles remain outside this bounded exact-line path. Advance the artifact cache identity toproject-source-set-v49-0.30-dev7-deployment-line-runtime. -
Bind typed HeaderDep reads to an independent machine contract. Lowering record v7 now records the exact
LOAD_HEADER_BY_FIELDorLOAD_HEADERsyscall number, field-specific contract, bounded SourceView index domain, and 8/208-byte buffer for epoch number, epoch start, epoch length, block number, and timestamp. The standalone checker validates those declarations against typed calls, runtime-access provenance, the generated syscall and field selector, full-header offsets, exact-length checks, and terminal errors 44/45/4. Hash-rebound record and instruction mutations reject. Also clear schema-size facts at every generated function boundary; this fixes a backend bug where one runtime helper could suppress another helper's required syscall result-length check. Advance the artifact cache identity toproject-source-set-v50-0.30-dev8-header-dep-machine-contract. -
Add canonical source-level CKB Script hashing.
script::argsaccepts fixed bytes or aHash,script::newconstructs the typedScriptvalue, andscript::hashreturnsScriptHashafter serializing the exact Molecule table and applying CKB Blake2b-256. The fixed runtime scratch contract admits at most 459 args bytes, validates hash typesdata,type,data1, anddata2, and returns stable error 72 for an invalid dynamic construction. Real CKB-VM tests differentially matchckb-types::Script::calc_script_hashat empty, ordinary, 32-byte, and maximum args widths and reject substituted hashes. Lowering record v8 independently binds the typed call, 53-byte Molecule prefix, 512-byte preimage bound, byte-copy loops, valid hash-type set, Blake2b delegation, and error return to decoded machine instructions; hash-rebound metadata, typed-record, and instruction mutations reject. Advance the artifact cache identity toproject-source-set-v51-0.30-dev9-script-hash. -
Bind the bounded
policy-witness-v1selector and action adapters to decoded machine instructions in the standalone artifact checker. Lowering record v8 verification now requires the exact GroupInput/empty-group/GroupOutput witness selection,CSPOLv1envelope and one-to-eight-record canonical DynVec scan, strict record ordering, Type-role/current-Script-hash match, single selected record, declared tag order, common-check dominance, unknown tag rejection, selected argument forwarding, 4,096-byte private adapter copy, typed-parameter-derived outgoing stack frame, exact action call, and error-25 termination. Both editions and optimization levels 0-3 pass the valid matrix; hash-rebound instruction mutations across every stage reject withV2420. This strengthens validation of existing v8 bundles and does not change generated artifact or cache identity. Action predicate meaning, arbitrary callee dataflow, and deployment authentication remain separate evidence boundaries. -
Repair two stale CLI gate boundaries encountered by the 0.30 backend audit.
cellc testnow matchesexpect-errortext through aggregate related diagnostics instead of seeing only the top-level diagnostic count, and the atomic-swap action-plan fixture now requires its current checked-runtime/verifier-covered selector state rather than the older runtime-resolution gap. Refresh the checked-in language-example cardinality for the added zero-lock sighash example and give the schema-71 NFT metadata envelope 768 KiB, retaining about seven percent headroom over its measured 735,136-byte compact output. Rebind the iCKB differential matrix to the bounded typed-witness backend with a single-process 220-case replay and a second read-only 220-case replay; the 22 affected probe artifacts and their transaction-context hashes change while acceptance, rejection, failure-mode, original-binary, and normalized-fixture evidence remains stable. Refresh the production evidence inventory for the typed-temporal and zero-lock sighash language examples while retaining their non-production classification. Rebind the 26 affected action/Lock artifacts in the audited production transaction recipes, including 123 generated-Script code-hash references, 48 dependency data-hash references, and 88 embedded complete Script hashes; transaction structure and business payload fields remain unchanged.
-
Complete the 0.26 economic-backend tranche across layout, code generation, runtime access and cryptographic kernels. In addition to the compact ELF and small-
liwork below, the backend now shares byte primitives, removes dominated schema checks and immediate stack reloads, folds exact byte loops structurally in IR, uses source-bound four-way read windows with a profitability-gated register hot window, decodesSourceViewwith shifts instead of DIV/REM, keeps hash state in registers, and emits VM2 Zbbrori/roriwrotations. These transformations preserve bounds, source kind, exact length and fail-closed syscall handling; they do not delete semantic obligations or match business/action names.The matched three-scenario corpus is now smaller and faster than its size-tuned Rust references in every row: pool merge 2,512/2,816 bytes and 6,000/9,232 cycles, schema roll 2,272/2,760 bytes and 8,661/10,350 cycles, ownership Lock 2,232/2,304 bytes and 5,583/6,333 cycles (CellScript/Rust). The real Spore+Agent closure runs the same 52,960-byte Agent ELF in 131 paired transactions; the current CellScript Spore ELF is 53,000 bytes versus 66,840 for the matched Rust
z-fatbuild, and every one of its 11 accepting paths is faster (2.8-11.7%, 5.9% aggregate). The Fiber commitment ELF is 63,336 bytes versus 69,176 for Rustz-thin; all 256 accepted paths preserve behavior and the transaction-level aggregate remains lower, while individual rows include signature-dependent cycle variance and are not presented as isolated Script-group measurements. These are finite, reproducible corpus results, not a theorem that arbitrary CellScript beats arbitrary Rust.Because Zbb rotations require CKB-VM2, generated artifacts now declare
minimum_vm_version = 2,riscv_isa = rv64imac_zbb, and the deployabledata2hash type in both target and constraints metadata.data2is the new compiler default; a package that declaresdeploy.ckb.hash_type = dataordata1fails closed. The independent checker rejects metadata that weakens the VM/ISA/hash-type binding. Advance compile metadata to schema 67, constraints metadata to schema 4, and the artifact cache identity to v30. Rebind the production CKB transaction recipe for all 60 scoped action/Lock artifacts, updating 417 exact code-hash references to the final VM2 output and upgrading all 253 generated-Script selectors fromdata1todata2. Rebind 143 embedded full-Script-hash payload occurrences across 30 generated identities as well: changing both code bytes and hash type changes the CKB Script identity carried inside witnesses and Cell data, not only the outer transaction selector. See 0.26 Economics and VM2. -
Add bounded, explicit trusted-external verifier delegation. New
trusted_exec_cell_dep_u8_args,trusted_exec_cell_dep_hex4, andtrusted_spawn_wait_cell_dep_hex4source intrinsics require a compile-time 32-byte CKB data hash plus an exactcellscript-trusted-external-verifier-v1declaration inCell.tomlfor the semantic scope, operation, and exact argument adapter. Generated code resolves the selected CellDep, checks its completeDATA_HASH, and only then performs EXEC or SPAWN/WAIT; SPAWN also requires a zero child status. Raw delegation remains E2105 and an undeclared trusted call remains E2113 underDenyFailClosed; unused/duplicate/non-canonical declarations are rejected with E2113, and raw and trusted calls cannot mix within one scope. Advance compile metadata to schema 66 and typed semantics to v8 with a separatetrusted-externalevidence tier and an explicitcompiler_proves_internal_semantics = falseboundary. Compile metadata is now schema 67 after the later VM2 deployment-contract addition. The independent checker requires one ordered source/hash/delegate sequence over the same CellDep operand and cross-checks runtime, constraints, typed semantics, ProofPlan, and machine lowering. Real CKB-VM tests prove exact-hash EXEC and SPAWN positives plus CellDep-substitution rejection; checker mutations reject changed hashes, removed records, and evidence-tier inflation. See Trusted External Verifiers. -
Bind live Fiber business experiments to the exact CellScript fungible ELF and both clean repository revisions.
fiber-node-experimentscan temporarily install--cellscript-fungible-artifactin Fiber's dev SimpleUDT slot, records its SHA-256, CKB data hash, byte length and Data2 identity, restores the original fixture before reporting, and refuses to reuse prior execution when either repository or the artifact changes. Live runs default to Fiber CI's Bruno CLI1.20.0, accept only an explicitly pinned--bruno-cli @usebruno/cli@MAJOR.MINOR.PATCHoverride, and overrideUDT_CODE_HASHwith the installed CellScript artifact's data hash. The exact Bruno, Node, npm, CKB and ckb-cli versions are part of the report and cache identity. Bruno'ssafe/developersandbox selection is likewise explicit. The Fiber router-pay compatibility workspace expresses its final JavaScript checks as equivalent declarative assertions, avoiding a Bruno post-response hang without removing requests or weakening expected values. If Bruno retains RPC handles after its terminal summary, the runner requires a non-empty suite, every request at200 OK, no failed assertion marker, and a five-second exit grace before cleaning it up; the exceptional completion basis is recorded. Runtime-generated, untracked node backups are reported after restoration but do not masquerade as tracked source drift. -
Complete the final 0.26b business regression replay against clean, exact parent runtimes. CKB production acceptance at pinned CKB
f7fa4436737756f97a24e254f22c13a36316eceapasses all 43 actions, 17 Locks, 26 stateful scenarios / 46 committed steps, and 67 exact live artifact-hash bindings. The 218-case iCKB differential suite and full ecosystem-reuse gate also pass. Fiber at upstreamf9232d52254a5aa52195ecae296c896de7078887runs the exact 2,032-byte Data2 fungible ELF through direct UDT, routed payment, and UDT watchtower settlement workflows: 15/15, 16/16, and 28/28 requests pass with natural process exits. This is complete CKB production-inventory coverage and selected 3/16 Fiber workflow coverage, not a universal regression proof or mainnet certificate. See the 0.26b business end-to-end regression report. -
Add the bounded real-contract interoperability primitives exercised by the separate Spore and Fiber comparison work: exact witness/data/Lock/Type byte and size reads, exact Script/data-hash fields, Input
since, transaction preimage reads, checked span and gathered BLAKE2b hashing, bounded byte-vector materialization, and the u8/hex EXEC plus hex SPAWN/WAIT adapters. These are typed, lowered through structured IR, emitted by the internal assembler, surfaced in LSP completion, and classified in the executable-surface matrix. The external verifier itself is not promoted by those raw adapters; production admission requires the trusted-external route above. -
Add a matched cost corpus (
tests/cost_corpus.rsplus Rust references intests/fixtures/cost_corpus/): three scenarios — a two-input pool merge with a checked sum and output lock binding, a two-field schema-roll successor with one updated field, and an ownership-claim Lock — each compiled on both sides with VM accept/reject parity, byte sizes, cycles and a growth budget. After the complete economic-backend tranche, CellScript is smaller on bytes (0.82-0.97x) and uses fewer cycles (12-35% less on the measured positives) in all three rows. Deployed sizes of the real DAO, secp256k1, secp-data and xUDT system scripts are printed as context with their different feature scopes called out; they are not matched comparisons. -
Compact the deployed ELF layout and use optimal small-immediate encoding. Move the
.textpayload from file offset 4,096 to 128; the LOAD segment still starts at file offset 0 and preserves virtual/file-offset congruence. Padding falls from 3,976 to eight bytes. A shared size/encoding classifier selects single ADDI or representable LUI forms forli; the 20-byte entry trampoline retains its fixed encoding. The audited relation ELF falls from 7,824 to 3,392 bytes (-56.65%): 3,968 bytes saved in layout plus 464 in instructions, 41.92% below the matched 5,840-byte Rust sample. The measured relation and explicit expansion remain byte-identical at O0–O3. All 187 committed iCKB differential matrix rows retain their acceptance outcomes; the separately reported suite has 218 tests. After the complete economic tranche and a fresh single-process replay, all 37 positive rows remain faster: 805,060 CellScript cycles versus 1,952,526 original-contract cycles, a 1,147,466-cycle transaction aggregate difference. These rows include shared auxiliary Scripts and are not isolated principal-Script measurements. Replace the size test's requirement that Rust remain smaller with an absolute CellScript byte budget. See the 0.26 release notes for the mechanism, matched-comparison scope, multi-action measurements, and artifact-rebuild requirements. -
Make
lock = sameexecutable and unlock branch-local successors. Resource conservation now recognizes the updated-successor shape — verbatim field aliases plus verifier-checked u64 updates whose provenance roots in the consumed input (constant offsets keep field provenance, mirroring subtraction) — so a relation without an explicit lock target carries checked conservation evidence, executes in the real CKB-VM with positive and negative amount-update cases, and matches the spelled-out Edition 2026 form. Separately, sibling branch arms no longer reuse a schema-field materialization defined only in the other arm: cached field reads now carry a branch depth and epoch, arms and loop bodies re-materialize when the defining context does not dominate, and areplacerelation in each branch of anifcompiles and validates. Existing generated code is unchanged (892 unit tests, the full regression batch and all 218 iCKB differential-suite tests pass without drift); onlyexact_hashstays reserved pending the Script-hash value contract. -
Add branch-local successor relations to the authoring route:
replace before -> after { data … lock = exact(address) capacity = same identity = same }inside ordinary actions.data { f = same, f = expr }anddata = same except { f = expr }expand against the resolved concrete schema with exhaustive-coverage, unknown-field and duplicate-field checks; the relation elaborates through the same consume/create, type-identity and capacity-preservation instructions as the spelled-out Edition 2026 forms, carries the identical obligation set, and executes in the real CKB-VM. Path-sensitive successor completeness is enforced at the source level: once a Cell role is disposed anywhere, every accepting path must dispose of it exactly once, loops reject disposal, and double disposal is rejected.lock = sameand successors written in both branches of anifare now executable as described above.exact_hash(...)remains reserved with precise remediation because the Script-hash value contract is not frozen. The formatter prints the relation and its output recompiles identically. -
Record a WASM playground budget blocker: the canonical container rebuild after the 0.26b tranches produces a 643 KB gzip bundle, 44,650 bytes over the enforced 600 KB budget. The previously committed 576 KB bundle is kept; the policy/artifact/binding/authoring surface reachable from the metadata-only path must be trimmed or gated before the release gate's WASM bundle check can pass.
-
Rebind the audited CKB acceptance recipes to the current artifact and CKB Script identities following the established refresh precedent. This closes all three identity layers together: sixty case artifacts and 417 exact code-hash references, 253 generated-Script selectors upgraded to
data2, and 143 embedded full-Script-hash payload occurrences across 30 identities. External dependency selectors and identities remain unchanged. The clean production replay passes all 43 action cases, 17 Lock cases and 26 stateful scenarios / 46 committed steps, including all seven end-to-end lifecycles. -
Fail closed when a runtime
source::*view index reaches the 32-bit index space. The generated SourceView helper previously added an unchecked index to the tagged view word, so an index at or above 2^32 carried into the view tag and silently re-routed anInputrequest to anOutputview. The helper now rejects such indexes withckb-source-view-invalid(44) through the existing fail-closed scalar status channel, and real-VM policy tests cover the forged issuer-authority transaction built from that carry. -
Add explicit bounded persistent Type policies through package artifact declarations and in-memory/virtual-source APIs. One ELF dispatches declared numeric tags from canonical, full Script-hash keyed policy witness records; common Unit checks precede the selected action. Fixed group roles and exact counts are checked at runtime. Add independent host/adapter codecs, pre-signing placement and typed policy/builder projection validation. Focused VM tests cover four action cardinalities and malformed requests. Chain/deployment closure for the authenticated lifecycle, independent machine dispatch proof, executable branch-alternative successors, remaining relation policies, schema acknowledgements and full product support remain implementation work.
-
Correct the unsupported
env::sighash_allboundary. Classify canonical digest construction asckb-sighash-all-deferred, reject it underDenyFailClosed, and terminate audit execution with runtime error 66 rather than return a synthetic digest pointer. Preserve this effect through unused results and helper calls. Explicit BIP340 message verification and standard CKB Lock signing remain separate supported routes. -
Add the separately routed
cellscript-source-semantics-2027-authoring1authoring policy over the complete shared Edition 2026 grammar. Ordinary action/lock bodies may omitverification, multiple entries may coexist in source, and existing default/read provenance and lifecycle meanings remain available. Keep the bounded native preview4 grammar as a reference surface and advance source/cache identities without changing the existing witness ABI. Full shared-policy product closure, executable branch alternatives, remaining successor-relation policies and schema acknowledgement remain tracked implementation work, not claims supplied by this authoring baseline. -
Resolve fixed Cell locations once in IR and emit them in typed semantics v5. Native Type ports now load the actual current Script group;
protectedparameters use the documented Lock group in both editions. Check membership and native fixed-group coverage, unify mixed CellDep read ordinals, and retain distinct anonymous output identities. Record ordinary absolute positions and unauthenticated positional dependencies truthfully. Group-role guards reject ambiguous same-hash Lock/Type use; this is an intentional tightening. -
Share exact artifact entry selection across codegen, metadata and CLI, including explicitly selected actions whose dependencies retain
main. Permit witness fallback to outputs only when the input group is empty; a missing input witness must not authorize reading an unrelated output-side witness. Generated builders no longer require witness payloads for entries whose parameters consume no witness bytes. -
Add the parser-independent
cellscript-semantic-foundation-v3record with a hash-consed value-provenance DAG, explicit artifact entry contract, typed transaction roles, exhaustive Cell dispositions, enforcement-classified claims, legacy migration nodes, and layeredCoreSemanticId,EntryContractId, andArtifactContractIdidentities. Keep source spans in source-map v2 and source bytes under a separateSourceDigest; neither is a core semantic hash input. -
Bind every executable source
requireor Edition 2027enforceclaim to its canonical condition, condition-provenance node, ordered typed success/failure branch, and exact fail-closed runtime error. Keep supporting ProofPlan claims distinct, make changed conditions changeCoreSemanticId, and reject broken condition, branch, or error links in the independent checker. Map each executable claim node to its originating condition or generated-sugar range in source-map v2 without including that moving span in the semantic hash. -
Advance compile metadata to schema 65, typed semantics to v7, verified lowering records to v6, source maps to v2, and the verified-artifact metadata carrier to v2. Extend the independent artifact checker and mutation corpus across the new schemas and bind deployable-artifact and verified-bundle identities separately.
-
Give generated fatal verification failures a separate current-VM-process EXIT contract while preserving normal callable return values and deliberate raw status APIs. Record explicit typed failures as terminal operations and bind static error constants to a checked non-returning machine exit. The shared exit does not require restoring caller frames or consuming a return register reserved for status. Full helper/optimizer regression closure remains part of the authoring production gate.
-
Add
cellc expand, an experimental Edition 2027 frontend selected throughCell.toml, formatter/LSP coverage, and cross-edition identity tests. The original native preview requires explicit transaction parameter sources and rejects ambiguousconsume/consume_each; ordinary authoring retains these inherited forms. Ordinary artifact compilation retainsSingleEntry; explicit policy compilation emitsPolicyWitnessV1. The shared schema also representsExplicitVersionedDispatch. This does not freeze the proposed 1.0 surface grammar or change the stable Edition 2026 meaning. -
Add review-only
cellc migrate --to 2027for the bounded legacy Type Script and Lock Script subset. Type Script candidates retain ordinaryactionauthoring and transaction-absolute bindings; they are not silently converted into native group-relative ports. The tool preserves every source byte outside the final entry, writes nothing unless--outputis explicit, and emits a candidate only afterCoreSemanticIdequality and byte-identical RISC-V ELF lowering succeed. Imports, multiple entries, custom require messages, ambiguous lifecycle operations, incomplete Cell envelopes, and every non-total mapping fail before output creation. -
Implement the bounded
cellscript-source-semantics-2027-preview4native surface: one final native container; either one exacttype-group<T>Type Script entry with exhaustivereplace, fixed-role checkedpool, exactretire, and explicit-identityfreshdispositions, or one exactlock-groupLock Script entry with explicit protected Cell, current Script arguments, witness provenance, andAuthorizationOnlyscope. Add pure, type-checkedaudit ... external_policy(...)declarations that remain metadata-only and cannot authorize acceptance. Lower executable effects through the existing checked semantic paths, retain the source form for canonical formatting, retain exact disposition intent in shared IR andCoreSemanticId, validate it in the independent checker, and cover it through CLI, LSP, WASM-source API, editor, syntax-combination, differential-semantic, example-package, differential ELF, and negative tests. Keep the public website Playground on its coordinated stable Edition 2026 asset until a separate preview selector and bundle publication are approved.
-
Record the economic-backend optimization implemented on the
0.26bbranch: compact payload alignment, shorter constants, shared runtime operations, structured IR folds, cached exact reads, cheaper SourceView decoding and VM2 Zbb hash rotations make every matched three-scenario corpus row both smaller and faster than its size-tuned Rust reference, without changing its source or witness ABI. Generated artifacts now requiredata2/CKB-VM2. The 0.26 release notes explain the byte savings and evidence limits. This is branch implementation evidence, not a stable-release ornightly-0.26availability claim. -
Implement the first bounded consensus-runtime contracts. Fixed-width
BoundedCellSet<Resource, N>now scans the exact current Type ScriptGroupInput, checks role, exact data size, runtime cardinality including anN + 1probe, and executes predicates once per element. Fixed-widthBoundedList<Plan, N>now uses the versionedCSBPLv1\0Molecule FixVec witness plan and verifies one canonicalGroupOutputper element, including complete data, exact lock, declared capacity floor, predicate execution, and final count. Bounded bodies admit only pure predicates, one create template, and numeric outer+=accumulators. Dynamic layouts, other sources, custom identities, incomplete templates, and implicit lock/capacity policy remain fail-closed. -
Add production-policy and real CKB-VM coverage for zero/one/N/N+1 inputs, malformed codecs and cell data, predicate failures, output count/order/data/lock/capacity mismatches, and typed/machine artifact mutations. Add checked
.cellexamples for variable-cardinality claims, 1–16 order settlement, fragmented Cell merging, and bridge/rollup batches. Advance compile metadata to schema 62, constraints metadata to schema 3, verified lowering records to v4, and typed semantics to v3.
-
Rebase the 0.25 development line on the complete 0.24 trust boundary, including the lock-authoritative package graph, standalone artifact checker, sole internal assembler, modular code generator, executable scenarios, LS-IDL Registry path, and production/testnet website parity. Align the compiler, checker, adapters, verifiers, workspace lockfiles, and editor with the 0.25 development identity. Preserve the independently deployed Registry Type Script as the byte-identical 0.24.0 artifact whose package version and CKB data hash are already part of its published trust identity. Keep the website's public release badge on stable
v0.24.0while giving the 0.25 Playground compiler its own asset identity (20260824-v0.25.0-32dc571c, SHA-25632dc571c2e8e32134460cb45e2329ddd29d754959d9cfe4478c638aa5fc4c7d7). -
Harden bounded lifecycle collections at the production boundary. The typed IR now retains
consume_eachpredicates and thecreate_eachoutput template and lowers both constructs to an explicit registered fail-closed call instead of silently replacing the body withUnit. Non-production CKB artifacts reject the entry with stable runtime error 24 (collection-runtime-unsupported);--productionand--deny-fail-closedstop before ASM/ELF generation with E2105 and report the operation, source origin, missing ProofPlan enforcement, and remediation. Entry ABI metadata no longer presents either bounded collection as a supported schema pointer, and ProofPlan no longer fabricates a runtime-observed cardinality. Runtime Cell selection/decoding and witness plan/output correspondence remain deliberately unsupported until their consensus semantics are specified. -
Bound local compiler and gate storage without weakening the verified-artifact contract. Incremental build caches now retain at most 32 recent identities per cache root, syntax-combination success runs discard reproducible per-case intermediates, production CKB acceptance removes its multi-gigabyte transient Cargo target and stopped-node database, and managed gate streams retain the latest three runs by default. Duplicate acceptance files within and across retained runs are hardlinked when their SHA-256 identities match, while stable
latest-*.jsonindexes point to the full reports. Failed syntax runs and explicit repro runs keep their diagnostic artifacts; release automation can request unlimited local retention explicitly.cellc clean --cachenow removes nested workspace.cell/build/cachedirectories as well as the root cache. Cache payloads must be regular files, stores create a fresh entry instead of overwriting a pre-populated one, and recency updates use create-new plus rename so malicious cache symlinks cannot redirect compiler writes. -
Begin the 0.25 language-completeness implementation with a compiler-owned executable-surface registry, pre-codegen production rejection, full-range
u128decimal literals, integer bitwise/shift lowering, and exact scalar and wide division-by-zero guards. Add the parameterized non-Cell value kernel: explicit struct/enum/function parameters, value abilities separate from Cell lifecycle capabilities, phantom identity rules, deterministic bounded monomorphization before IR, built-inOption<T>, generic fixed arrays, metadata andcellc explain generics, editor/Playground highlighting, and CKB-VM execution evidence. Ordinary generic layouts continue to reject Cell-backed values. Add recursive enum/tuple/struct patterns and binding-free or-patterns, and close the fixed tuple/array materialization and projection paths required for nested payload patterns to execute in CKB-VM. Extend explicit Cell borrows with field paths and canonical-root read-only reborrowing while preserving non-escape and lifecycle-crossing rejection. Add explicit public/package/private visibility, canonical package interfaces, six-dimensional interface compatibility with stable E2501 rejection, Registry interface/hash admission, metadata schema 61 typed-semantics-v2 records, lowering-record v3 and independent V2419/V2420 typed-to-machine checks. Generic templates now specialize across package boundaries in their owning module; implementation monomorphizations no longer pollute package interfaces. Add labeled break/continue CFG lowering and CKB-VM evidence. Upgrade the VS Code grammar and Playground highlighting. Keep the default Playground bundle under its 600 KB gzip budget with a bounded authoring summary; complete public-interface, typed-semantics, ProofPlan, verified-artifact, and semantic language-service output remains on nativecellcand the VS Code extension. Route all wide u128 binary operands through shared stack-spilled loading so dynamic Molecule-table field validation can no longer clobber live limbs, keep constant folding from wrapping arithmetic the runtime would trap on, decide match exhaustiveness with a bounded constructor-matrix computation that merges nested and or-pattern payload coverage, derive Cell-backed value abilities structurally through struct and enum fields, and register E2501 with the shared error registry. Dynamic-schema u128 bitwise, addition, and shift paths now carry exact CKB-VM execution vectors.
-
Align the complete 0.24 release identity across every workspace and verifier crate, the independent checker dependency, lockfiles, Registry Type Script, Myelin handoff, VS Code extension, website WASM bundle, README, and release documentation. Restore the 0.23 release hardening that propagates one pinned CKB checkout through backend scenarios and transaction-measure tooling.
-
Remove the unreachable external RISC-V toolchain fallback and make the audited internal assembler the sole ELF-emission path. Reassign
E2400to the verified lowering/source-map boundary that already uses it, so the compiler error registry now matches live diagnostics. -
Split the code generator into its documented ABI, assembler, call, collection, expression, frame, runtime, schema, and Cell-operation modules; remove crate-wide Clippy exemptions; and replace long positional helper signatures with named context records.
-
Harden the final wide-integer boundary: resolve dynamic Molecule-backed
u128fields before loading limbs, preserve the left operand across a second dynamic load, and makeu128 +/- u64overflow and underflow fail closed with runtime error 49. Add exact CKB-VM regression vectors, remove zero-divisor paths from the NFT and vesting examples, and reject non-canonical SemVer at Registry admission. -
Remove the CKB adapter's deprecated, permanently fail-closed automatic deployment methods. Callers must build a verified unsigned deployment transaction and hand signing to an external wallet.
-
Replace the deprecated
serde_yamlcrate with the maintainedserde_yaml_ngcontinuation in the Fiber configuration renderer. -
Remove tracked browser-session traces and unused design captures, ignore local Codex state, and make the native source-policy check reject future
.playwright-mcpartifacts. -
Keep the production and Pudge Testnet Registry websites on one UI contract. The website gate now builds both environments from the same source, verifies six shared Registry routes, and requires every generated CSS/JavaScript asset to be byte-identical. Testnet now ships the LS-IDL route, defaults LS-IDL lookups and API examples to
testnet, and no longer preloads production package records into Manage or artifact-detail fallbacks. Network-specific origins, chain selection, sandbox expiry, no-index policy, and storage remain isolated. -
Preserve the corrected website release lineage that removed stale 0.22 metadata. Publish the homepage as
v0.24.0while keeping the Playground on the matching 0.24 compiler identity. The canonical WASM bundle uses asset identity20260819-v0.24.0-19ce8898and SHA-25619ce8898e8161f100edebf6f982d856f3e59bfac31572642b53f2e01c70a1a17; distribution checks bind the current stable release URL and displayed tag separately from the compiler version, asset identity, and digest. Remove inherited 0.25-only package-interface, typed-semantics, and future- syntax presentation fields from the 0.24 website branch while retaining the 0.24 LS-IDL surface. Publish the exact 0.24 and 0.25 website gitlinks on separate release branches so both parent lines clone without hidden commits. -
Add first-class LS-IDL publication and discovery for CKB Lock Scripts.
cellc artifact ls-idlvalidates the bounded 0.1 schema, appendsSHA-256(raw idl.json)to an executable, generates a publish-ready bundle, and fetches byte-exact IDL by deployed Script identity. Registry admission, both verifier boundaries, immutable object storage, Postgres lookup, canonical/v1/ckb/scripts/:code_hash/interfaces/ls-idlreads, and the compatibility/idl/:code_hashroute all enforce the same schema and executable-suffix contract. Pin all 17 current upstream client vectors and seven derive/example IDLs, and add an opt-in test that runs the actual upstream Rust client against Registry's compatibility handler. Extend that opt-in acceptance through the fixes merged upstream inckb_sudt_scriptPR #7, real RISC-V contract builds, LS-IDL-bound ELFs, and all 25 example CKB-VM tests without a local compatibility overlay. Add a runnable Rust example, website lookup/detail surfaces, and VS Code validate/bind/fetch commands. Name the website tabLS-IDLrather than the ambiguousInterface, give it the canonical/registry/LS-IDLroute with a permanent redirect from/registry/interface, and align its lookup panel with the full-width Browse surface. Keep implementation correctness and security review outside this byte-identity claim. -
Ship the 0.24 package and Registry trust closure, informed by Sui Move's package-alt separation of resolution from compilation. Replace permissive custom version checks with standard SemVer; make
Cell.lockv3 a manifest-digest-bound dependency graph with exact source/content identity, outgoing alias edges, runtime/test feature roots, and genesis-bound CKB environments. Add explicitcellc lock, lock-authoritative build/check/test,--locked/--frozen/--offline, package aliases, optional features, test-only dependencies, environment overrides, immutable Git-commit and Registry-snapshot caches, and bounded hash-pinned external resolvers that normalize to an ordinary source pin and never execute during locked builds. Keep build dependencies fail-closed until isolated execution exists. Replace scattered Registry artifact-profile conditionals with the versioned, fail-closedcellscript-registry-profile-catalog-v1; only CellScript source profiles are dependency-resolving, while executable, reproducible, and copy profiles remain explicit non-resolving artifacts. Add a portableexamples/package_graphfixture that executes alias, SemVer, feature, test-only, environment, and override selection from the frozen graph. -
Implement the 0.24 trust-closure core. CKB ELF builds now emit canonical
cellscript-verified-lowering-record-v1andcellscript-source-artifact-map-v1sidecars, bound by metadata schema 58 and checked by the compiler-independent, budgetedcellscript-artifact-checker. The checker independently parses static ELF64/RISC-V layout, decodes the emitted instruction/call/branch surface, checks CFG reachability, frames and stack restoration, ABI/ProofPlan/syscall contracts, block digests, source ranges, and cross-file identities with stableV2400-V2418rejection codes and deterministic mutations. Package the checker independently and require checker-first crates.io publication before the matching compiler crate. Extendverify-artifactwith separate binding, structural, lowering-record, CKB-VM, chain, and semantic-equivalence states. Makecellc testrequire an explicit simulator/CKB-VM backend for execution and add versioned, fail-closed scenarios with exact runtime errors, local multi-step live-Cell replacement, source-linked coverage, cycle/size/capacity limits, and exact artifact/checker bindings. Add a least-privilege Registry artifact worker whose production graph excludes the compiler. Freeze the CellScript side of the Myelin handoff without a new profile or raw-witness alias; keep external Myelin adoption and the incomplete Fiber/RGB++ matrices explicitly pending. Addexamples/scenario_basicsas the runnable positive/exact-negative scenario and four-file verified-artifact walkthrough. -
Freeze the 0.23 implementation scope around Edition 2026 and its resolved profile/entry identities, the deployed Registry and publisher-session path, native gate tooling, the recoverable website workbench, and the bounded Fiber evidence actually obtained on this line. Keep mainnet Registry Script activation, publisher-owned wallet adoption, and incomplete Fiber/RGB++ matrices as explicit external checkpoints. Retire the proposed CellScript Off-Chain Session Runtime target: current Myelin uses an attested external compiler process, production requests stay on
ckb, and Myelin-owned extended semantics remain outside the compiler. Add the 0.24 trust-closure roadmap for an independent bounded artifact checker, executable package tests, source maps, the Myelin adapter handoff, and conditional ecosystem evidence promotion.
- Make Registry chain confirmation compatible with the standard CKB v0.207.0
RPC schema by resolving a live Cell's committed block through
get_transaction.tx_statusinstead of depending on a proxy-specificget_live_cell.block_hashextension. Recorded evidence now names both RPC methods while historical evidence identifiers remain readable. Make the tooling-release gate parse website scripts structurally and enforce the stable build steps in order, so adding intermediate regression checks no longer breaks CI through an obsolete exact-string comparison. Let the full backend stateful audit use an explicit isolated pinned CKB checkout throughCELLSCRIPT_CKB_REPO, avoiding any need to modify an unrelated sibling CKB worktree during release validation. Propagate the release gate's existing--ckb-reposelection to its independentckb-tx-measureworkspace as well, so every CKB-dependent release check resolves against the same pin. - Turn the browser Playground into a recoverable Cell-oriented workbench. Browser-local workspace snapshots now retain source files, entry selection, active panels, and an honest saved/dirty state across refreshes. Failed compiles preserve the last valid output as explicitly stale evidence, and a failed compiler Worker can be restarted without reloading the page. Add a metadata-derived Cell Flow view, source-linked action/type selection, a contextual Inspector, and an optional three-step guide while keeping raw actions, types, metadata, diagnostics, and the existing no-ELF WASM boundary available. Unify the site's interactive controls around dense, standard, and workflow button sizes with distinct neutral, selected, and primary states. Registry and Playground actions now share the same contrast-safe treatment, compact copy controls, focus rings, press feedback, and Phosphor interaction icons. The Playground compile action keeps a stable label and exposes busy state without turning the action itself into a transient status display.
- Bound Registry discovery requests so the interface can no longer remain in an indefinite loading state. The browser now delays skeletons to avoid flashes on fast responses, reports slow and retrying requests, retries once with a strict deadline, preserves stale or mirrored results when available, and otherwise presents an explicit recovery action. Registry rows and empty states use compact artifact identity marks and low-motion transitions instead of generic placeholder panels. Redesign the global navigation around three primary destinations, quieter utility controls, Phosphor SVG icons, and a touch-safe mobile drawer with focus containment, Escape/backdrop dismissal, scroll locking, and persistent theme and language controls. Source discovery now has a quiet hover/focus label, while fixed full and compact language controls prevent locale changes from shifting the desktop navigation. The Playground now places its toolbar, compiler panels, and status bar in a centred wide-screen Studio frame instead of switching ambiguously between the site frame and an edge-to-edge editor. An explicit, persisted focus mode removes site chrome and expands the same workbench to the viewport without a first-paint flash; phones retain the existing panel switcher and site header. Registry discovery now translates verification, deployment, availability, and consumption mode into one consumer-facing use conclusion, supports URL-restored intent filters, and shows the latest release date without replacing the canonical status axes. Artifact details split the consumer action from the maintainer's current evidence or deployment task, explain each accepted evidence kind while keeping full hashes and raw JSON accessible, and avoid presenting build verification as a security audit. Maintenance keeps the selected task visible while progressively disclosing alternate and destructive operations.
- Close the first-publish browser/CLI loop with
cellc publish --authorise. cellc now creates and stores the delegated P-256 publishing key locally, opens a 15-minute exact-coordinate wallet session, and resumes publishing automatically after Registry approval;--no-opensupports remote and terminal-only environments. Session reads expose neither the polling secret nor the resulting key ID to the browser. The publishing key is written to the OS keychain aspendingbefore the browser opens, promoted toactiveonly when either successful status returns the matching key ID, and removed only after the Registry confirms cancellation or pending-session expiry. A local polling deadline performs one final authoritative read and otherwise preserves the pending key. Completed sessions remain poll-readable for 24 hours after their 15-minute approval window, closing the boundary race in which wallet approval commits just before the CLI's next poll. This closes the process-exit window after wallet approval without treating local state as Registry authority. The browser token survives same-tab refresh insessionStorageand is removed on completion or expiry, with an executable storage-lifecycle regression test. Session mode now lists only connectors that can actually complete the browser flow and folds challenge creation, wallet signing, and completion into one Approve publishing access action; the full external-wallet directory remains in the explicit manual CLI path. Session completion atomically consumes the nonce, records the publishing key, claims or reviews the namespace, updates the session, and writes its audit trail. Concurrent or replayed completion returns the committed result without duplicating authority. The Publish page is now session-first: a direct visit presents onecellc publish --authorisestarting command, while a CLI session becomes a one-screen wallet approval surface with one current action and end-to-end release progress. Artifact identity is read-only in session mode because cellc and the manifest remain authoritative. External signing, manifest scaffolding, and existing-key checks remain available in a deliberately secondary advanced workspace. Technical scope and session identifiers stay collapsed by default, and loading, expiry, retry, review-pending, and terminal-continuation states keep the same stable layout. Safe publishing-access reads retry once with bounded deadlines, while signed writes are never retried automatically; an unchanged failed request keeps its signature, and any coordinate or payload change clears it with an explicit explanation. - Add an isolated Pudge Testnet Registry Sandbox. Its API, Postgres database,
object volume, signing origin, RPC identity, website build, wallet storage,
and deployment evidence are separate from production. Sandbox releases are
hidden 72 hours after admission; version JSON is deleted at expiry and source
objects are deleted after a 24-hour grace period, while minimal audit
tombstones remain. The API rejects a wrong-network RPC and cross-environment
deployment payloads.
cellc artifact record-deployment --network testnetdefaults to the Pudge Registry API, andcell-deprevalidates liveness on the network recorded in accepted evidence. Pudge chain history remains immutable: expiry removes Registry indexing and off-chain objects, not on-chain Cells. - Complete the Registry's generalized artifact and chain-evidence path. Rust,
C, JavaScript, and other CKB artifacts now keep explicit source, build,
deployment, TCB, and copy-only identities instead of being presented as
CellScript dependencies. Reproducible profiles require P-256-signed reports
from two to sixteen policy-approved builders spanning the configured minimum
number of independent trust domains. Reports bind the signed environment,
source, recipe, executable, build log, builder identity, and predecessor
evidence before verification becomes
verified; deployment is rejected until that evidence exists. Addcellc artifact reproduction-reportandcellc artifact reproduction-evidence, wallet-ready mainnet commitment transaction intents, andcellc auth reproducer createfor generating a builder-local P-256 key plus a public policy enrollment record without exposing PKCS#8 material. Explicit CI-key output is mode 0600 on Unix and no-overwrite. Add fixed Registry Type/commitment Lock configuration, Type-Script-indexedCSREGv1scans, and scheduled lifecycle reconciliation that demotes spent commitments or stale deployment Cells without deleting historical evidence. Both Script code CellDeps must be live and sufficiently confirmed before the chain path becomes ready. The chain path is implemented but remains operationally disabled until the canonical mainnet Registry Type Script, commitment custody Lock, and both CellDeps are deployed and configured. - Harden the unified artifact Registry boundary: default discovery now hides
pending/rejected releases and paginates by package coordinate; deployment
records and admin recovery must match the immutable CKB
hash_typeanddep_type; generated CellDep descriptors re-query mainnet and reject spent code/DepGroup Cells; RPC calls are time- and size-bounded; and deployment capability use commits with the chain-verified state. Positive static-mirror publication now follows database admission, while suppressive states are mirrored first to fail closed; deferred sync is audited rather than advertising uncommitted positive state. Add the capability-signedcellc artifact set-availabilitypublisher path used by Manage, defensive frontend page deduplication, and completeArtifact.tomlplus bundle scaffolding for non-CellScript submissions. - Split delegated Registry authority into independent
publish,deployment, andavailabilityscopes. Release admission no longer grants permission to attach CKB deployment evidence or change a release's public availability; exact-coordinate and namespace-wildcard grants remain supported. In a package directory the CLI infers only the exactpublishscope; deployment and availability grants require explicit--scopeflags. The API, Submit command builder, validation, tests, and operator documentation now share this contract. - Redesign the Registry submission and package-maintenance surfaces around
contextual, task-first workflows: remove the public
Managetab and redundant form controls, link maintenance from package details, guide first publication through explicit connect, sign, submit, and namespace-claim actions, show the publication orientation only once per browser, replace the CCC post-connect surface with a compact Registry-owned wallet chooser that has no unrelatedManageaction, reveal yank fields only for the yank task, and close write commands over verify, dry-run, and publish. Registry route and workflow state changes now use reduced-motion-aware transitions instead of abrupt swaps. Browse and Submit share one DOM-persistent Registry header through navigation, avoiding replacement flicker while retaining the active locale; wallet connection no longer gates artifact definition or local preflight, and appears only after the developer has chosen an artifact coordinate and the new-capability path. Existing capability keys use a read-only server check for live status, expiry, exact publish scope, and active namespace ownership; entering a key ID never unlocks the UI locally. Final publish commands include the server-confirmed--capability-key-id. Primary authorisation controls use larger, shorter-reach interaction targets. Client-routed returns now reinitialize Submit and artifact-detail behavior instead of leaving stale event handlers behind. The advanced publisher keeps a per-environment, same-tab draft of non-secret artifact fields and UI state while explicitly excluding wallet signatures, challenge/browser tokens, capability payloads, and private keys. Registry, Publish, and API also share one route-transition, vertical-rhythm, active-tab, and localized-title contract; Browse reuses its latest in-memory result during background refresh rather than flashing a skeleton on every return. Browse uses a no-flash loading state, URL-backed server search, and API pagination; bundled data appears only as an explicitly labelled error fallback. Static and live package details share one responsive view with localized statuses and copyable audit values. Publisher authorisation now accepts both JoyID (joyid_ckb) and standard CKB secp256k1 (ckb_secp256k1) principals through the CCC CKB-signer boundary. Production exposes only mainnet; the separately built Pudge Sandbox constructs a testnet client without adding a network selector to either environment. The frontend never accepts mnemonic words; traditional recovery phrases remain inside the wallet. CLI auth commands use--wallet-signature, with--joyid-signatureretained as a visible compatibility alias, and the API adds the corresponding typed principal migration and signature verification. The compact chooser now preserves the complete twelve-wallet CKB directory: compatible CCC CKB signers connect directly, while other entries are explicitly labelled as external links for importing a compatiblewallet-signature.json; opening a link is never represented as a wallet connection. The browser checks the signature shape and principal binding before submission, while the API remains authoritative for cryptographic verification. Every entry now uses the corresponding official Nervos wallet-directory SVG rather than an autogenerated letter mark or a runtime favicon. The chooser header no longer reserves space for a hidden back control, so its title, explanatory text, and wallet list share one left alignment edge. Submit now asks for the artifact kind and source language independently, and Manage groups publish, inspection, reproduction, deployment, commitment, and availability as isolated task flows; hidden task fields can no longer leak into the selected workflow. - Deploy the public Registry production slice at
api.registry.cellscript.devandregistry.cellscript.dev: Postgres 17 is the authoritative write store, the Node 22 adapter persists source snapshots and version-addressed JSON to an isolated object volume, and a read-only nginx service exposes/packages/*independently of the API/database process. The production stack adds live dependency-aware readiness, bounded request bodies, structured logs, health checks, log rotation, generated secrets, HTTPS, and an 8 MiB proxy admission limit sized for the 5 MiB source snapshot contract. Public package search, package detail, and ordered evidence promotion APIs are live. A daily systemd job writes atomic, checksum-protected Postgres/object-store backups with bounded retention; its first backup passed database and archive restore inspection. Public version responses now expose immutable snapshot descriptors, the read-only service serves those content-addressed snapshots, and the CLI verifies object SHA-256, safe paths, per-file BLAKE2b, and the whole-tree source hash before atomically materialising a dependency. The CLI uses the public API's accepted status as the default resolution authority while retaining the explicitCELLSCRIPT_REGISTRY_URLGit/offline override, and the website renders the live Registry with a clearly labelled read-only bundled mirror only when the API is unavailable. The former Registry Coming Soon surface is removed. First-publish admission is now user-reachable end to end:cellc auth namespace claimand the submit page's Claim namespace action explicitly establish namespace ownership between capability registration and publish. Publish admission now commits package, snapshot, version, capability-use, acceptance-audit, and completed-idempotency state in one database transaction; pre-admission failures release the request-owned nonce and retry reservation, while production readiness verifies both managed object-store prefixes and volume initialization repairs their ownership and modes recursively. Explicit unverified/quarantined install acknowledgements are persisted in dependency tables, preventing lock refreshes and later builds from losing the caller's risk policy. Publish admission now transactionally creates a leased, bounded verification job. A separate least-privilege worker authenticates the immutable snapshot, compiles it with the current CellScript compiler, checks the signed manifest and compatibility-profile identities, atomically recordsverified_buildevidence, and then converges the static version object. PostgreSQLFOR UPDATE SKIP LOCKEDclaims, expiring leases, three-attempt retry/dead-letter handling, operator queue metrics/requeue endpoints, bounded subprocess time/output/memory, and API readiness tied to the worker heartbeat make the formerly documented asynchronous queue real. Public search/list now excludessource_publishedandindexed_pendingby default while preserving explicit status queries and direct audit URLs. Package-manifest identity uses canonical recursively sorted JSON, eliminating cross-processHashMaporder drift between publisher and verifier. Deploy that worker to the live production topology and exercise external publish, queue claim, real compilation, evidence promotion, static convergence, default visibility, and a fresh consumer install/check/build without an unverified override. The one-time seeded smoke identity and live objects were removed afterward, queue counts returned to zero, and a checksum-verified backup captured the migrated clean state. Production Compose now accepts explicit prebuilt API/verifier image references so shared hosts can deploy with--no-build. Harden the API and static Registry response boundary with HSTS, anti-framing, no-sniff, permissions policy, cross-domain-policy denial, and a deny-all CSP for JSON surfaces. Add a reproducible website production Compose/nginx contract with a read-only root filesystem, bounded temporary filesystems, health checks, log rotation,no-new-privileges, and matching browser security headers. A production recovery drill restores the post-0002dump into an isolated Postgres 17 container, extracts the object archive into an isolated volume, verifies both migrations and all seven core Registry tables, and removes the temporary restore resources afterward. - Close the 0.23 syntax-audit consistency gaps: canonical type declarations
now use comma-terminated fields, syntax-combination gates cover canonical and
comma-free compatibility input, checked example mirrors use named
U64_MAXoverflow expressions, anddev/cireject regressions. Rebind the three affected timelock transaction recipes to the deterministic scoped ELF data hashes produced by those equivalent named expressions. CKB-VM crypto primitive fixtures now placeCSARGv1through the currentWitnessArgs.input_typeadapter path instead of the retired raw-witness alias. - Make
edition = "2026"the single mandatory CellScript package contract. Edition is now explicitly a long-lived source-semantics epoch rather than an annual release or complete ABI bundle. The resolved compatibility profile independently composes source semantics, target, primitive assurance, entry payload and placement ABIs, and metadata schemas undercellscript-resolved-compatibility-profile-v1. Metadata schema 57 carries those axes, and their hash remains bound across cache keys, registry records,Cell.lockv2,Deployed.tomlv2, compile receipts v2, generated builders, native APIs, WASM, LSP, and the playground. Missing or different editions and older persisted schemas are rejected; no migration or compatibility reader is provided. Generated CKB entries also remove the raw-CSARGv1witness fallback, so placement ABI v2 accepts the payload only inside canonicalWitnessArgs.input_type. The deployed public registry uses one current contract: signed entries, the production database schema, version-addressed static JSON, and the website require both Edition 2026 and the separate compatibility-profile hash, with no fallback reader for incomplete entries. Generic admin status changes cannot manufactureverified_build,deployed, oron_chain_committedclaims; those states require the ordered evidence-promotion path. See the 0.23 development release notes. - Complete the native-tooling cleanup: neutralize migration-era identifiers, remove tracked legacy traceback logs and cache exclusions, rename the native tooling integration suite, and add a repository-wide source-policy command to every gate. The policy traverses initialized submodules and rejects retired interpreter sources, generated bytecode/cache artifacts, capture logs, and active tooling references before they can re-enter the release contract. The canonical WASM container now explicitly selects its already installed pinned Rust toolchain, avoiding an unnecessary network sync during release builds.
- Restore the 0.23 release gate after the Python-to-Rust tooling migration by
checking the semantic
requires_all_bundled_examples_strict_original_ckband emittedsource_provenanceCKB boundaries plus the Rust-backed NovaSeal acceptance summary instead of retired temporary-directory, helper, and shell field names, and refresh the NovaSeal external TCB review template to the current Rust-migrated verifier source-tree hash. Refresh the RWA legal-review template's profile source-tree hash after its manifest declares Edition 2026. CKB transaction-recipe replay now tops up fresh devnet funding when a fixture has no disposable change output and its replacement input cannot fund every typed output. Rebuild the website WASM bundle with the witness-placement-v2 compiler so the playground and native release artifacts expose the same ABI. - Add the explicit
cellscript-witnessargs-input-type-v2placement ABI for parameterized CKB entries. Generated wrappers now resolve witnesses relative to the active script group, decode theCSARGv1payload fromWitnessArgs.input_type, preserve wallet/multisig ownership oflock, reject malformed or wrongly placed payloads, and reject group-relative raw-v1 placement. Builders placeinput_typebefore SDK signing because the completeWitnessArgsis signed. A canonical signed multisig-v2 CKB-VM regression covers a type group whose first input is not transaction input zero and rejects post-signing witness mutation. The Rust-native v0.23 transaction recipes are rebound to the resulting audited ELF data hashes so the production stateful gate cannot silently replay stale code identities.
- Make GitHub publication depend on the full release gate. Release evidence now
requires a clean version/tag-matched CellScript tree, an exact clean CKB
revision and version pin, hashed node/template/genesis provenance, mandatory
43-action stateful coverage with per-step commit/liveness/measurement checks,
a freshly built and archived CKB executable, complete 20-byte ELF trampoline verification,
fresh WASM/VS Code packaging, and tests/clippy across every workspace crate.
The WASM build now runs in a digest-pinned canonical Linux/amd64 container,
remaps repository and Cargo source paths, uses SHA-256-pinned official
wasm-pack 0.13.1, wasm-bindgen 0.2.121, and Binaryen 131 tools, and runs
wasm-opt -Ozbefore enforcing the 600 KB gzip budget. Website provenance and assurance snapshots are regenerated from CellScript 0.22.0 rather than displaying stale 0.17 compiler and metadata versions. Publicaction build/gen-buildercontracts are verified separately from explicitly handwritten Python acceptance transactions; always-success resource Type Scripts remain a recorded fixture-only non-claim. - Make the pinned NovaSeal RISC-V verifier artifact reproducible across the
audited macOS arm64 and Linux amd64 builders by remapping source paths and
stripping the release ELF with Rust's pinned
rust-objcopy. - Classify field-preserving N-input/N-output resource permutations as checked runtime conservation. This closes the strict CKB ProofPlan gap for NFT royalty/seller payment pairs without adding action-name-specific backend rules.
- Correct the misleading bundled
multisig.cellsurface: the example now models explicitly non-cryptographicApprovalrecords, removes discarded 64-byte signature payloads, labels witness time as reported rather than chain time, and keeps real signer authentication, sighash binding, witness layout, replay policy, and verification in an explicit Lock Script or pinned verifier package. The README no longer describes nonexistent CKB signature syscalls. - Bind every
multi_phase_dao.celltransition to the sameenv::current_timepoint()evidence path instead of mixing it with public witness time arguments. - Harden the bundled contract examples around real Cell identities and asset
settlement: AMM pools bind both token TypeHashes and geometric LP supply;
NFT sales consume and relock typed Token payments; timelocks and swaps
release actual Token outputs; DAO votes lock and redeem voting Tokens; and
vesting separates repeatable partial claims from the terminal fully-vested
transition, with an explicit runtime-checked
Active -> Activeself-loop for each partial claim. Package mirrors and acceptance action matrices track the same canonical sources. - Document fail-closed Spore and RGB++ adapter boundaries, including maintained SDK selection, contract/deployment identity, Molecule and witness layouts, Bitcoin confirmation policy, and positive/negative fixture requirements.
- Add compile-checked Spore and RGB++ identity-adapter packages under
examples/ecosystem/. They bind exact CKB Script identities and transaction positions while deliberately leaving Spore rules, RGB++ commitments, Bitcoin validation, witnesses, confirmations, and orchestration to pinned protocol packages and builders. - Add executable exact and bounded resolved-CellDep data-hash checks. The
bounded scan requires a literal
1..=64maximum, uses the realLOAD_CELL_BY_FIELD(DATA_HASH)syscall path, stops onINDEX_OUT_OF_BOUND, and fails with stable runtime code63when absent. Original DepGroup identity remains manifest/builder evidence. - Add fixed-width executable SHA-256 and SHA256d helpers for 32-byte values and 64-byte pairs, plus a SHA256d Merkle verifier bounded to 16 siblings. Rust reference vectors and positive/negative CKB-VM tests cover the generated RISC-V; this is explicitly not a Bitcoin SPV implementation.
- Add
verifier::btc::bip340::require_signature_from_cell_depfor an explicit literal verifier dependency index, retain the index-0 spelling for compatibility, and document the fixed 144-byte VM2 IPC envelope. The caller still owns message domain, ScriptGroup/WitnessArgs and sighash construction, authority binding, replay policy, deployment pinning, and external review. - Migrate every in-tree Rust crate to Edition 2024 and Rust 1.97.1, adopt the Edition 2024 dependency resolver, pin the repository toolchain, and align CI, release builds, rustfmt, fixtures, and generated helper manifests.
- Harden diagnostic and CLI ergonomics: make global
--jsonthe canonical machine-output switch and emit exactly one success or failure document on stdout; retain hidden--message-format=jsoncompatibility, classify exit codes, preserve error causes, assign stableE2xxxbackend diagnostics with LSPcodeDescriptionlinks, render Unicode source snippets by terminal width, unify VM/simulator run metrics, centralise core command rendering, and make MCP documentation reads UTF-8-safe. - Add the bounded no-profile Fiber interoperability path. Metadata schema 55
records the structurally derived
fungible-type-group-v1entry; its ELF verifies exact 16-byte little-endianu128data, checked full-group conservation, legacy owner-lock or tagged policy-Type-authorised issuance/destruction, and unauthorised mint/burn rejection, while ignoring Fiber's xUDT-compatible witness prefix. The separatecellscript-fiber-adapterderives and materialises native Fiber configuration from compiler and live CKB evidence without a Fiber profile or afiber-libdependency. Bounded local-devnet runs passed Fiber's official multi-hop UDT payment and pending-TLC watchtower force-close collections. The clean, pinned full lifecycle/negative matrix remains pending, so this is not a production-readiness claim. Full external matrix validation requires content-addressed evidence files under an explicit confined root for every completed row and certified topology report; arbitrary non-empty evidence labels no longer qualify. Multi-asset packages may select one structurally eligible asset withcellscript-fiber ... --asset <Type>; omission remains valid only when the package contains exactly one candidate. - Start the
nightly-0.22language line with checked casts, canonical helper and capability registries, transitive callable effects, initial/terminal flow evidence, the six-tier ProofPlan taxonomy, and typed aggregate targets. - Add typed read-only CKB transaction-view handles (
InputView<T>,OutputView<T>,CellDepView,HeaderDepView,WitnessArgsView,OutPoint, andScriptView). Their metadata records source, ownership, absence of lifecycle authority, checked-static typing evidence, and checked-runtime read evidence. Existingsource::*functions remain the explicit low-level migration surface. - Add finite invariant quantifiers:
forall <role> <binding> in <source_view<T>> { require ... }andcount(<source_view<T>> where ...). They share the closed aggregate target model, reject unbounded and impure bodies, and emit ProofPlan scan complexity, field reads, cardinality/vacuous policy,u64count overflow policy, and runtime-helper-required evidence. - Add source-aware bounded collection contracts:
input-qualifiedBoundedCellSet<CellType, N>values are linearly discharged byconsume_each, whilewitness-qualified fixed-widthBoundedList<Plan, N>values may drive onecreatetemplate per element throughcreate_each. Metadata records source, ownership, maximum/runtime cardinality and vacuous status; ProofPlan keeps consume iteration atruntime-helper-requiredand output cardinality/capacity atbuilder-evidence-required. GenericVec<Resource>remains rejected. - Add the versioned capability algebra without inheritance syntax. The closed
registry is shared by parsing, formatting, type checking, docgen, LSP, and
metadata;
destroyderives exactlyconsume + burn, whilereplace_uniquerequiresreplaceplus the type's exact declared identity policy. Schema 51 records the registry, per-type capability-set version, and required/provided/entailed/missing proof fields, and rejects transitive authority from container-like resources. - Add concrete fixed-width payload enums before generic ADTs. Payload variants
now support constructor calls, exhaustive destructuring, packed one-byte-tag
layouts, arm-local linear Cell ownership, RISC-V construction/projection, and
an explicit pure-helper register-pair return ABI up to 16 bytes. Schema 52
publishes canonical
enum_layouts; dynamic, recursive, and generic payloads remain fail-closed/deferred. - Add participant-role attribution to the derived ProtocolGraph without adding
core session/channel syntax. Action metadata retains candidates from explicit
Address equality predicates, witness or lock-args bindings, and weak
participant-like Address field names in that precedence order. Graph edges
publish the selected source, every candidate, deterministic conflict/missing
lints,
metadata-onlyevidence, andauthorization_proven = false; roles are intentionally absent from ProofPlan. Schema 53 carriesactions[].protocol_role_candidates. - Add canonical type
validityblocks. Pure field predicates lower to fail-closed checks before selected create/constructor instructions; paths without concrete lowering remainruntime-helper-required. The only approved environment read isenv::block_number(), recorded as an explicitbuilder-evidence-requiredheader-dep obligation because CKB-VM has no ambient tip-height syscall. Unknownenv::*, transaction-view reads, lifecycle syntax, and non-Pure helper graphs are rejected. Type hover, metadata, ProofPlan, formatter, imported helper retention, and syntax-combo gates expose the same boundary. - Add explicit
borrow root as view { ... }regions for compile-time-onlyView<T>access to linear Cells. Views have no layout, storage, serialization, or ABI representation; escape, root lifecycle crossing, and calls outsidePure/ReadOnlyhelpers with dedicated&Tparameters fail closed. Runtime metadata and ProofPlan expose the checked-static evidence. - Advance compile metadata through schema version 55. The 0.22 schema sequence
adds callable/flow/evidence fields,
runtime.transaction_view_handles, bounded collection source/ownership/cardinality/vacuity/capacity evidence, type validity, borrow regions, capability proofs, enum layouts, protocol-role candidates, and the bounded Fiber compatibility contract. - Publish the complete 0.22 release record, refresh the current wiki/roadmap and MCP documentation topics, document extension submodule initialization, and replace the unreachable VS Code gitlink with a validated 0.22 extension commit.
- Close the 0.21 README documentation gap that the 0.21.0 changelog entry
claimed but did not fully land:
- Document the published-release install path
(
scripts/install.shone-liner, including theCELLSCRIPT_VERSIONpin) as the recommended way to installcellc; keep the source-treecargo install --path .flow as the "tracks main" option. - Add
cellscript-mcpto the README tooling-surface table so the 0.21 agentic-loop surface is discoverable from the project front page. - Add
--message-format=jsonand--color=auto|always|neverto the README CLI options table, matching whatTutorial-04and the 0.21 release notes already describe. - Add the 0.20 release notes, the 0.21 release notes, and the new
Tutorial-13: Agentic Loops and cellscript-mcplink to the README docs list (the previous list stopped at 0.19). - Bump the wiki
Home.mdlast-updated marker from0.21.0-rc.1to0.21.0so it matches the published tag.
- Document the published-release install path
(
- Bump the workspace crate versions (
cellscript,cellscript-ckb-adapter,cellscript-wasm) from0.21.0to0.21.1socellc --versionreports the same value as the new release tag. - No compiler, runtime, metadata, ABI, or CLI behaviour changes — the
patch is documentation + version metadata only. The CKB target profile,
the
--primitive-strict 0.16/0.17gates, the xUDT aggregate invariant lowering, the flow edge validation, the CKB adapter resolution, the compile receipts, thecellscript-mcpserver, and the CLI surface are byte-identical to 0.21.0.
- Promote the common xUDT group amount aggregate invariant shape from
metadata-only evidence into executable helper-backed lowering. Matching
transfer-style actions now get an auto-lowered
__xudt_require_group_amount_conservedprelude, ProofPlan records distinguish metadata-only, runtime-helper-required, and checked-runtime coverage, and strict0.17metadata validation rejects stale helper gaps that are not backed by generated runtime accesses. - Add static flow edge membership validation. Actions that claim a state
transition must use an edge declared by the corresponding
flowblock, while declared cyclic flows remain valid. - Extend the CKB adapter with materialised action-plan resolution,
action-aware scan selector evidence, variable-length
args_partsscript argument construction, manifest-backed CellDep completion, and fail-closed validation for missing or mismatched live-cell scan evidence. - Bump compile metadata to schema version 44 and add type-level
template_layoutsplus actionstate_transition_edges. TemplateLayout records are metadata-only in this RC: they derive flat layouts, mark cyclic flows withRootRequired, and reject unsupportedconsensus_checked = trueclaims. - Add compile receipts as authenticated metadata envelopes.
cellc receipt,cellc sign-receipt, andcellc verify-receiptbind source, metadata, ProofPlan, ProtocolGraph, TemplateLayout, artifact hashes, and optional Ed25519 signatures; AST and IR normalised hashes remain explicitly deferred. - Reorganise the CLI around canonical nested command groups for
explain,tx,deploy,registry,package, andauth capabilitywhile keeping legacy flat aliases executable but hidden from public discovery. - Add structured diagnostic transport through
--message-format=json, explicit colour control through--color=auto|always|never, andNO_COLORhandling without changing successful--jsonpayload semantics. - Add the derived
ProtocolGraphaudit view and embed it in audit bundles. The graph remains a metadata-derived view, not a new IR or consensus source of truth. - Add the in-repository read-only
cellscript-mcpserver and six CellScript programming skills. The dev and CI gates now run the skill-pack freshness check, and release modes inherit it through the embedded CI gate before release-only auxiliary checks. - Reduce gate repetition: release auxiliary checks no longer repeat CI-level script, whitespace, and skill-pack checks; website builds avoid duplicate registry generation; the standalone website artifact workflow is manual-only.
- Document the 0.21 boundary across the roadmap, README, CKB adapter guide, metadata/gate tutorial, ProofPlan tutorial, and agentic tooling tutorial. P2 Template Merkleisation and new observation syntax remain deferred.
- Tighten the 0.21 RC validation boundary: add focused regression coverage for
flow-edge membership, xUDT conserved lowering and ProofPlan coverage states,
TemplateLayout cycle policy and
consensus_checkedrejection, CKB adapterargs_parts/manifest CellDep/scan-selector evidence; add non-productionatomic_swapandmulti_phase_daobusiness-flow examples; extend the syntax-combo audit with flow, flow-create-state, and aggregate-invariant bug classes; add the 0.21 schema tokens to the acceptance-boundary audit; remove tautological registry tests and unreachable dead code inscripts/cellscript_ckb_release_gate.sh.
- Bring
cellcCLI discovery and direct-source diagnostics closer to Rust's developer experience: top-level help now shows package commands plus direct compile mode,cellc --listenumerates commands, unknown bare commands get nearest-command suggestions, and direct parse/lex/compile errors printfile:line:columnsource snippets. The top-levelcellc --explain <CODE>alias now mirrors the existingcellc explaincommand, and multi-diagnostic package checks render each frontend error with its own source context instead of collapsing them into one summary string. - Fix numeric-width soundness by requiring exact non-literal numeric type equality while preserving declared integer literal widths through type checking and IR lowering.
- Reduce generated branch cost by skipping unconditional jumps to the physical
fall-through block and by selecting
beqz/bnezbranch forms that keep the fall-through path implicit. - Extend
cellc opt-reportand constraint artifact metadata with backend shape counters and estimated-cycle deltas across optimisation levels. - Replace the incremental parallel compiler's identity ordering with a real dependency topological sort and cycle-safe fallback ordering.
- Close the registry source-package plan in docs and tooling: registry install,
build, and update use the two-tier Git resolver with yanked-version skipping
and
source_hashverification, whileregistry addnow prints next steps for the actual cloned discovery worktree. - Harden the CKB/devnet acceptance path with an ELF entry ABI gate that checks
RX-only executable segments,
filesz == memsz, and entry trampoline stack-pointer preservation before local-node evidence is accepted. - Require launch, token, and AMM bootstrap examples to carry passing ELF entry ABI evidence alongside existing builder-backed action, lock-spend, cycle, transaction-size, occupied-capacity, and stateful lifecycle checks.
- Add 0.20 release notes documenting the strengthened devnet acceptance boundary and the remaining difference between compile-only and live local devnet evidence.
- Promote multi-file package support into the 0.20 compiler/tooling boundary: exact-path imports, source-graph diagnostics, dependency-aware cache keys, package-aware LSP diagnostics, and an additive WASM multi-source metadata API.
- Mature cross-file helper reuse by inlining aliased imports, fully-qualified calls, same-basename dependency helpers, and transitive helper calls into the entry artifact with stable internal labels, while keeping ELF-linker and cross-script runtime-linking claims out of scope.
- Record the 0.20 evidence gate for protocol-source multi-file showcases: NovaSeal, iCKB, and DobEvo / DOB-EVO source refactors may demonstrate shared schema/type imports only when the matching devnet or CKB VM evidence is regenerated, and playground multi-file import/export remains browser-local.
- Add the first protocol-source multi-file candidate in NovaSeal
fungible-xUDT by moving shared schema structs into
nova_fungible_xudt_schema.celland importing them from both profile and lifecycle entries. Metadata/artifact preparation records the shared schema source unit, and live local devnet stateful evidence passes issue, transfer, settle, and required negative cases for lifecycle data hash0x394da78133cb2f5a5d6cd911feceeab9e97e6ad5d36c0e50f18be56653af85e5. - Add Tutorial 13 for agentic
cellcloops, documenting the write-check-explain-fix workflow,cellc-mcpwrapper boundary, read-vs-write rule, and the distinction between compiler evidence and CKB chain evidence.
- Add the research iCKB protocol-equivalence surface with partial CKB VM
differential evidence, including 75 original-vs-CellScript executed rows,
14 CellScript-only VM rows, 8 original-side VM rows, and an explicit
NOT_PROVENproduction-equivalence gate. - Add 0.17 strict CKB protocol helpers for SourceView, DAO accumulated-rate and maturity checks, xUDT group amount helpers, script args/hash guards, MetaPoint/OutPoint relation scans, and C256 product requirements.
- Add executable iCKB benchmark specs and matrix evidence under
tests/benchmarks, while keeping iCKB-specific receipt layout and fixture logic out of the generic compiler/runtime surface. - Keep production equivalence deliberately unclaimed until owner-auth witness fixtures, byte-accurate receipt decoding, full DAO redeem accounting, generic aggregate lowering, and production manifest closure are complete.
- Close the bundled token/AMM/launch bootstrap lifecycle gaps with explicit first-cell actions and strict original scoped CKB coverage.
- Rename the token authority mint action to
mint_with_authorityand the launch bootstrap action tobootstrap_tokenso builder-facing action names match the required input topology. - Add
nft.cell::create_collectionand stateful coverage for thecreate_collection -> mint -> create_listing -> buy_from_listingpath. - Document and validate the CLI-first builder handoff through
--entry-action,cellc abi,cellc entry-witness,cellc explain-assumptions, andcellc validate-tx. - Re-run production local CKB acceptance with strict original scoped artifacts, complete bundled action coverage, and stateful lifecycle scenarios.
- Add the scoped metadata-assurance release surface: operational semantics, ProofPlan soundness checks, builder-assumption metadata, transaction-shape validation, solver templates, deployment reports, proof diffs, profiling, transaction traces, and audit bundles.
- Ship NovaSeal as bundled proposal packages with local devnet/profile acceptance tooling, while keeping production claims blocked on external BIP340 TCB, public BTC SPV, public/shared CellDep, and profile-specific attestations.
- Tighten the NovaSeal public BTC SPV evidence contract so BTC-facing profile cases must bind current live CKB report hashes, service-builder hashes, CKB-side BTC commitment hashes, raw Bitcoin transaction material, block header and Merkle proof data, confirmation heights, and canonical SPV material hashes.
- Harden the 0.16 compiler-freeze gate with explicit IR poison rejection, instruction-level IR provenance, reserved-register contract checks, syscall ABI baseline coverage, and line-exact diagnostic regression directives.
- Align
cellc --help, README command tables, and the VS Code active-file command surface with the 0.16 builder, transaction-template, deployment, profile, and audit-bundle tooling. - Add
--primitive-strict=0.16, which includes the 0.15 primitive vocabulary rules and rejects metadata-only/runtime-required ProofPlan gaps in strict assurance mode. - Add descriptive standard CKB compatibility fixture manifests for sUDT, xUDT,
ACP, Cheque, Omnilock, NervosDAO since/epoch behavior, Type ID,
ScriptGroup, and
outputs_datashapes. - Add CKB stdlib protocol module schema stubs for sUDT, xUDT, TYPE_ID, HTLC, Cheque, ACP, and DAO-facing descriptors while keeping executable protocol lowering deferred.
- Carry the 0.15 proof/invariant scope forward without overstating it: aggregate invariant lowering, full ProofPlan soundness proofs, macro-only lowering, covenant stdlib helpers, strict address/script type separation, entry role syntax, versioned layout migration, and executable fixture matrices remain tracked for later releases.
- Merge the 0.15 strict syntax and example cleanup into the 0.16 assurance
branch, including canonical
transition/whereaction syntax, kernel-effect capabilities, stdlib lifecycle metadata, and VS Code packaging dry-runs. - Keep the 0.16 documentation honest about scope: ProofPlan soundness and builder evidence are strict metadata-assurance gates, NovaSeal devnet certification is proposal-local evidence, and full production claims still require CKB dry-run/commit evidence plus required external attestations.
- Add scoped invariant declarations with explicit trigger, scope, reads, coverage, and runtime-obligation metadata for CKB covenant auditing.
- Add Covenant ProofPlan records and
cellc explain-proofso action, lock, invariant, aggregate, identity, and lifecycle obligations are inspectable in human-readable and JSON form. - Add aggregate invariant primitives such as
assert_sum,assert_conserved,assert_delta,assert_distinct, andassert_singleton; these currently emit metadata-only runtime obligations until executable aggregate verifier lowering is promoted. - Promote cell identity policies and identity-aware lifecycle forms through
identity(...),create_unique, andreplace_unique, including TYPE_ID, field, script-args, and singleton-type metadata. - Add explicit destruction-policy forms and carry destruction policy through
IR/codegen while keeping bare
destroyavailable as the default policy. - Reset resource capabilities from protocol verbs to 0.15 kernel effects such
as
create,consume,replace,burn,relock,retarget_type, andread_ref. - Add
--primitive-compat 0.14and--primitive-strict 0.15migration modes across directcellccompilation and package commands, with CS0151-CS0160 diagnostics for legacydestroycapability. - Allow direct lifecycle operations to be authorized by kernel-effect
equivalents:
destroyacceptsconsume + burn. - Convert canonical bundled examples, language examples, README examples, wiki tutorials, and release gates to strict 0.15 kernel-effect capabilities.
- Extend strict acceptance and syntax-combination gates so bundled examples
compile directly under
--primitive-strict 0.15, and update release documentation to keep 0.15 P0 scope separate from deferred 0.16 proof soundness and compatibility-suite work.
- Add the CKB semantic-completeness surface for typed Source and WitnessArgs
views, fixed-width
lock_args, explicitenv::sighash_all(...), and profile-visible since, time, and epoch policy helpers. - Add bounded Spawn/IPC verifier composition through
spawn,wait,pipe, inherited file descriptors, and close/read/write helpers, with metadata-visible script references and type-checker rejection of static descriptor leaks, double closes, and use-after-close paths. - Report a structured CKB target-profile ABI contract for witness data, lock
args, Source encoding, Spawn/IPC, since/time, CellDep and script references,
outputs/outputs_data, capacity floors, TYPE_ID, and CKB transaction version. - Validate profile ABI metadata, runtime-access metadata, ScriptGroup evidence,
TYPE_ID output plans, script references, and
outputs_databindings so release evidence fails closed when compiler policy and metadata drift apart. - Expose declarative output capacity floors through
with_capacity_floor(...)andoccupied_capacity(...)while keeping builder funding, transaction-size, occupied-capacity, and acceptance evidence as explicit production responsibilities. - Add executable fixed-Hash Blake2b support through CKB's
ckb-default-hashpersonalization and metadata-visibleCKB_BLAKE2Bruntime access. - Complete the state-edge spelling cleanup from legacy
movetotransition, and refresh examples, docs, formatter behavior, LSP completions, VS Code snippets, and syntax highlighting for the 0.14 surface. - Add language examples for delegate verification, Spawn/IPC pipelines, witness/source views, TYPE_ID creation, capacity/time policy, and canonical style.
- Harden malformed input handling across metadata tampering, scheduler and CLI decoding, LSP incremental edits, static width calculations, entry-witness widths, and package-version parsing.
- Add the reusable 0.14 scope audit gate and document the release boundary: metadata/tamper validation and strict compilation now, with full accepted/rejected CKB transaction fixture matrices left to the later compatibility-suite track.
- Complete syntax-governance layering for lifecycle semantics by keeping
claim,settle, andtransferout of the executable core expression surface and implementing the corresponding stdlib patterns explicitly. - Implement
std::cell::same_lock,std::cell::preserve_lock, andstd::cell::preserve_capacitythrough canonical cell metadata verifier checks. - Make
std::lifecycle::transfer,std::receipt::claim, andstd::lifecycle::settleexpand to consumed inputs, locked named outputs, and complete output field preservation. - Harden preserve and require sugar so preserved fields are type-equivalent to their canonical require expansion and anonymous require blocks remain pure boolean verifier constraints.
- Remove the remaining compiler-level claim witness/signature special cases and reserve the old claim-signature runtime error code.
- Add example and editor-tooling coverage for the stdlib lifecycle and cell metadata helper surface.
- Add an executable syntax-combination audit runner for parser/formatter/type checking/lowering metadata/codegen oracles, wire the quick audit into local gates, and run the broader CI matrix in GitHub Actions and the full release gate.
- Make CI run on nightly branches and version tags, and add syntax-audit mode contracts so accidental coverage shrinkage fails closed.
- Sync the 0.13 roadmap/release scope with the 0.13.2 governance boundary and add a release-gate check that keeps those docs aligned.
- Pin VS Code extension packaging to
@vscode/vsceand make local VSIX packaging dry-runs part of the release gate. - Document the syntax-combination audit as a reusable release acceptance preflight that runs before builder-backed CKB acceptance.
- Finalize the 0.13.2 release notes under
docs/releases/, add a docs map, and move historical 0.13 planning documents intodocs/archive/0.13/.
- Complete the internal RISC-V ELF assembler branch surface used by current
codegen, including
beq,bne,blt,bge,bltu,bgeu,beqz,bnez, and branch relaxation coverage. - Harden the stack-backed
Vec<T>helper boundary so unsupported receivers, invalidextend_from_sliceelement types, and unrefinedVec::new()slice extension cases fail at compile time instead of drifting into hidden runtime paths. - Add
examples/language/collections/order_book.cellas a non-production language example for local stack-backed order vectors. - Add the CKB release-gate wrapper script and document the difference between quick compile-only evidence and full production acceptance.
- Add builder-backed local CKB valid-spend and invalid-spend acceptance coverage for all 16 bundled lock entries, in the same production gate as the 43 action flows.
- Fix lock predicate lowering so tail-expression lock results are preserved and
falseexits with a stable non-zero CKB script error. - Complete the low-risk CellScript surface pass: canonicalize bundled example
module names, capability declarations, field shorthand, typed
Vec<T>literals, and the staged syntax RFC boundaries. - Add create/struct field shorthand (
fieldasfield: field) and format redundant field initializers into shorthand form. - Add contextual bounded
Vec<T>literals for typed local bindings and create/struct field initializers, lowering to the existing stack collection constructor and push path without changing untyped array literal semantics. - Add lock-boundary surface syntax for
protectedCell parameters,witnessdata parameters, andrequirefail-closed predicates; reservelock_argsuntil explicit CKB script-args binding is implemented. - Keep signer authority out of the 0.13 syntax surface: no implicit
Addresssigner semantics, no hidden sighash defaults, and no first-class signer values before explicit CKB signature verification primitives. - Split bundled examples into clean business examples and profiled acceptance examples, so scheduler/effect hints stay in release evidence without crowding the canonical teaching surface.
- Refresh LSP completions and the VS Code grammar/snippets for the new lock-boundary syntax.
- Add a stable CellScript runtime error registry and expose code/name/hint
entries through metadata and
cellc constraints. - Add CKB Blake2b builder/release helpers with pinned
ckb-default-hashvectors throughcellc ckb-hash. - Add manifest-level CKB
hash_typeandcell_deps/DepGroup reporting, plus structured timelock and capacity evidence contracts. - Add the standalone
tools/ckb-tx-measurehelper for CKB packed transaction size and occupied-capacity evidence, with CKB acceptance building the same source through a generated manifest for nested checkouts. - Add
cellc abi,cellc scheduler-plan, andcellc opt-reportfor entry witness inspection, scheduler-hint consumption, and optimization measurement. - Use CKB Blake2b hashes for compiler metadata and release evidence.
- Expand entry witness tests to cover scalar, fixed-byte,
Vec<Address>,Vec<Hash>, opaque nestedVec<Vec<u8>>,Vec<u8>, missing payload, and wrong-width payload cases. - Add 0.12 production documentation for runtime errors, CKB authoring, deployment manifests, capacity, entry witnesses, collections, mutate, linear ownership, scheduler hints, migration, examples, and release evidence.
- Keep crates.io package contents narrow by excluding workflow, docs, editor, auxiliary tool directories, and unpublished helper binaries from the published crate.
- Release CellScript 0.11.0 as the standalone CKB compiler package.
- Close the current CKB bundled-example production acceptance suite: all seven
production examples strict-admit, all 43 actions and 16 locks strict-compile,
and every bundled business action has an original-scoped on-chain production
harness. Lock coverage is scoped compile coverage;
registry.cellremains a compiler/tooling language example outside this production action matrix. - Keep compatibility intact while documenting the remaining production hardening track around action builders, malformed matrices, and measured mass/cycle constraints.
- Preserve the production safety gates added in the 2026-04-23 development log: no CKB policy bypass, no unresolved-call ELF stubs, audit-only Wasm, tightened backend shape reporting, narrowed crates.io packaging, and explicit profile-aware constraints metadata.
- Promote the VS Code extension to production-grade local tooling with compiler-backed validation, formatting, scratch compilation, metadata and constraints reports, CKB target-profile arguments, status feedback, and stricter extension validation.
- Marked Wasm output as audit-only instead of metadata-only production output.
- Removed the old ELF feature surface from runtime metadata.
- Reduced crates.io package contents by excluding GitHub workflow, wiki, and VS Code extension packaging files.
- Cleaned remaining clippy mechanical warnings and documented the intentional
broad compiler-helper signature allowances so
cargo clippy --locked --all-targets -- -D warningsis a release gate. - Removed the remaining artifact-validation surface by returning a
source-free
ValidatedArtifactfor metadata verification instead of building a synthetic AST. - Kept scheduler witness metadata Molecule-only.
- Marked Wasm report output as audit-only and excluded standalone docs from the crates.io package contents.
- Stripped externally-linked RISC-V ELF artifacts when an external toolchain is available, matching the internal production artifact surface more closely.
- Made external RISC-V toolchains explicit opt-in via
CELLSCRIPT_RISCV_CCorCELLSCRIPT_RISCV_AS/CELLSCRIPT_RISCV_LD, so production ELF output and backend shape budgets no longer depend on tools accidentally present in PATH. - Hardened those external toolchain overrides to require absolute paths to existing executable files instead of accepting relative command names.
- Rebased the multisig bundled-example ELF budget on the deterministic internal ELF artifact size while keeping the assembly text/CFG budgets unchanged.
- Removed the executable Wasm pseudo-lowering path; the Wasm module now remains audit-only and rejects action/function modules instead of emitting approximate code.
- Removed empty module doc comments and simplified duplicated verifier branches reported by clippy.
- Kept lifecycle state storage explicit in cell data while allowing lifecycle
state names in
createinitializers and qualified expressions such asTicket::Active, avoiding hidden layout changes and numeric state boilerplate. - Added LSP completions for qualified lifecycle states such as
Ticket::Active. - Clarified README CLI docs that
cellc testis a compiler/policy harness, not trusted runtime execution. - Removed the old CKB acceptance policy exception path so the CKB target profile now rejects unsupported CKB artifacts through the normal production policy gate.
- Removed unresolved-call ELF stub generation; production ELF emission now fails when a generated call target has not been lowered.
- Added executable cross-module callable linking for resolver-backed imports,
so
launch.celllinks the realseed_poolcallee and its transitiveisqrthelper instead of relying on a synthetic fail-closed stub. - Tightened launch example regression coverage to ensure imported callees are linked without pulling unrelated AMM actions into the artifact.
- Added
env::current_timepoint()as a chain-neutral runtime time source: CKB lowers it to header epoch number. - Switched bundled
vesting.cellto the chain-neutral timepoint API, allowing original scopedgrant_vestingartifacts under the CKB target profile. - Added original scoped CKB on-chain acceptance for
vesting.cell::grant_vestingwith real Token/VestingConfig inputs, VestingGrant output verification, header dependency timepoint input, and malformed output rejection. - Marked dynamic Molecule vector
len()results as verifier-covered u64 transition sources, socollection.total_supply += recipients.len()style CKB mutations are checked at runtime instead of reported as mutable-cell transition blockers. - Fixed fixed-aggregate field byte-source lowering so original CKB verifier output lock checks can compare tuple-array address fields without fail-closed traps.
- Increased verifier expression temp slots and added regression coverage for the original launch bootstrap eight-recipient remaining-output sum.
- Switched CKB acceptance launch coverage from a standalone synthetic harness to the original scoped launch bootstrap artifact.
- Fixed dynamic Molecule table create-output checks for fixed/scalar fields so
original
multisig.cell::create_walletverifies table fields through Molecule offsets instead of fixed-struct offsets. - Switched the CKB multisig
create_walletacceptance harness to the original scoped artifact with dynamicVec<Address>signer data. - Preserved scalar verifier values across expected-expression evaluation and
dynamic output decoding, fixing original
multisig.cell::propose_transferCKB checks forProposal.proposal_idandMultisigWallet.nonce. - Switched the CKB multisig
propose_transferacceptance harness to the original scoped artifact with dynamicMultisigWalletandProposalMolecule table data. - Switched CKB multisig
add_signature,propose_add_signer,propose_remove_signer, andpropose_change_thresholdacceptance to original scoped artifacts with dynamicProposaltable/vector data. - Switched CKB multisig
execute_proposalandcancel_proposalacceptance to original scoped artifacts, removing the last standalone on-chain action harnesses from the bounded CKB matrix. - Fixed destroy lowering to retain consumed input pointers for post-destroy output verification while relying on the checked Output absence scan for the actual destroy rule.
- Fixed scalar output verification to prefer schema/prelude expression sources
but use runtime stack values for ordinary scalar variables, covering
branch/match-derived bool outputs such as
ExecutionRecord.success. - Switched CKB token
mint,transfer_token,burn, andmergeacceptance from standalone harness sources to original scopedtoken.cellartifacts. - Switched CKB NFT non-batch action acceptance from standalone harness sources
to original scoped
nft.cellartifacts, including dynamicCollectionMolecule table data formint. - Switched CKB timelock
create_absolute_lock,create_relative_lock,lock_asset,request_release,request_emergency_release, andapprove_emergency_release,execute_release,execute_emergency_release, andextend_lockacceptance from standalone harness sources to original scopedtimelock.cellartifacts. - Fixed the CKB Molecule vector append verifier to compare fixvec payload bytes after the 4-byte count header, enabling original dynamic approval-list append checks.
- Switched CKB AMM pure-entry
isqrtandminacceptance from standalone harness sources to original scopedamm_pool.cellartifacts.
- Tightened backend CFG reachability analysis so unreachable-block metrics are rooted at the selected ELF entry label instead of treating every
.globaltext symbol as reachable. - Added a regression test proving unused global exports are still counted as unreachable from the entry root.
- Removed old
global_text_labelsparser storage after entry-root reachability replaced global-root reachability. - Rebased bundled-example unreachable-block budgets on the stricter entry-root metric while keeping call-edge and CFG shape budgets enforced.
- Declared Rust 1.85.0 as the standalone crate MSRV so CI and users run with Cargo support for Edition 2024 dependencies.
- Updated standalone CI to archive backend-shape reports as release evidence.
- Added a committed standalone
Cargo.lockand changed standalone CI to run with--locked.