Skip to content

[0.32][ZK/P3] Track circuit, key and verifier changes with authorized migration evidence #45

Closed

Description

@a19q3

Completion evidence — 2026-10-12

Implemented in signed commit 98375e0a, published on 0.32.

Versioned native and independent TypeScript manifests/planners classify source, proving, relation, VK, statement/codec, setup, verifier, deployment and package changes. They bind upgrade/deployment records and reject stale, downgraded and substituted inputs. Exact fixed-pair assessments are composed with the retained continuous old-key update → old-parent-authorized migration → new-key successor node exercise; immutable legacy Cells explicitly reject retrofit migration.

Acceptance record · exact evidence index.

The maintainer's explicit “不要跑CI和gates” instruction supersedes the original gate-execution acceptance item for this work. No CI/gates ran and no gate success is claimed. Setup is public deterministic test material; this is not production setup admission or public deployment.

Outcome and priority

Scoped follow-up for #42 P3, in the 0.32 workstream. Extend the first exact ZK application's manifests and upgrade planning into an explicit circuit/key/verifier lifecycle across versions, with reproducible compatibility and migration decisions.

Priority: after the #42 P1 application's first authorized migration contract is executable; broader lifecycle work may then proceed alongside P2. Implementer: Codex, with maintainer ownership. Boundary review disposition: Codex implementation and native/independent-consumer mutation review, recorded with the evidence; no independent human review is claimed. No work is assigned to an external collaborator.

Duplicate check and dependencies

#11 provides exact handles/deployment-line foundations; #20 provides transactional package/interface/deployment upgrade plans and explicitly excludes automatic on-chain migration. #22 owns the first profile's initial circuit/VK/codec/deployment/setup admission. This issue owns cross-version ZK manifest comparison, reprove requirements, downgrade policy and authorized state migration evidence. It does not reopen their accepted contracts, and does not require #28/#29's open participants. #43 finance remains separate.

The first migration exercise required by #42 P1 stays in #42. This follow-up cannot be used to close P1 without executing it. The current counter lifecycle is immutable and non-burnable: it requires an identical successor Type Script. A new counter or changed SDK configuration is not migration of an existing Cell. Any new migratable application version must state this legacy limitation explicitly.

Required contract

  • Bind circuit source/compiled identity, statement schema, PK/VK commitments, applicable setup transcript/trust disposition, prover build/toolchain, canonical codecs and exact deployed verifier bytes in bounded versioned manifests. Store large proving artifacts outside normal compilation.
  • Compare old/new manifests through the existing package and deployment upgrade-plan boundaries. Classify source-only, proving-only, statement/codec, VK, circuit relation, verifier and deployment changes separately; unclassified changes fail closed.
  • For every change class, answer whether old Cells remain spendable, old proofs remain usable, reproving is necessary, state migration is possible, and which existing Script authorizes it. Interface compatibility or Type ID alone cannot authorize a new verifier.
  • Define active/yanked, stale-plan and downgrade behavior without treating Registry discovery as consensus authority. Keep setup trust, package discovery, deployment identity and on-chain authorization separate.
  • Preserve owner/state lineage and exact input/output correspondence during any admitted migration. Do not promise retrofit migration where the old deployed Script has no authorization path.

Acceptance

  • Versioned manifests and a deterministic old/new change-impact report are reproducible from exact inputs; shared vectors cover independent consumers.
  • Wrong circuit/VK, codec drift, substituted prover/verifier/code Cell, stale upgrade plans and unauthorized downgrade reject at named boundaries.
  • A continuous old-state spending and authorized migration exercise covers retained state/owner identity, actual predecessor continuity, changed proof/statement identities and post-migration updates.
  • Unauthorized migration, missing/duplicate successors, old-proof replay, rollback and wrong-destination variants reach and fail the intended on-chain checks.
  • Immutable legacy Cells have an explicit tested supported/unsupported disposition. New-instance creation is never reported as their migration.
  • Frozen resource budgets and compiler/checker/builder agreement have direct targeted evidence. The maintainer explicitly instructed no CI or gates on 2026-10-12; those gates were not run or claimed. Review/setup/trust dispositions remain separate from test results.

This is not authorization for a public deployment, setup ceremony, arbitrary verifier registry, new proof system or circuit DSL.

Activity

  1. added this to the 0.32 milestone on Oct 4, 2026
  2. a19q3 commented on Oct 5, 2026

    @a19q3
    CollaboratorAuthor

    The first executable migration prerequisite remains owned by #42 P1, and now has local native/CCC/CKB evidence that this broader lifecycle work can build on. This does not complete #45.

    A separate migratable counter version binds two exact verifier/key deployments and permits only the old-key-authorized 0→1 transition. The native and generated-SDK/CCC paths construct byte-identical migration fixtures. Pinned-node acceptance confirmed a continuous old-key update, migration spending that actual predecessor, and new-key successor update with real fee-input signatures. New-key self-installation and old-key use after migration fail the intended parent checks. Legacy immutable counters remain unsupported for retrofit migration; creation of the new application is not reported as migration of legacy Cells.

    The migration/client snapshot passed unified dev and CI plus its pinned local-node exercise. The completed CI snapshot is identified by source-manifest SHA-256 4131dc08277dc2dd5ccee2c1f8126e836bba50e35b85500c2e2f8176fe75d53d, based on 622c850550428bbe000017c1b55944a9248717cd; its log SHA-256 is 382e5831edf2be98edd1f61d982439b5bd96fb15a0b59059041ff8176719efac. See the #42 evidence update. Source is still local pending signed publication and clean-source full backend acceptance. The second setup is a public test fixture, not a new production setup admission.

    Still required here: deterministic cross-version change classification through the existing upgrade-plan boundary (source/proving/statement/codec/VK/relation/verifier/deployment), explicit proof-reuse/reprove/spendability decisions for each class, lifecycle status/staleness/downgrade semantics, independent consumer vectors and a review disposition for the broader contract. The bounded one-step P1 migration cannot stand in for that general lifecycle acceptance. Keeping this issue open.

  3. a19q3 commented on Oct 12, 2026

    @a19q3
    CollaboratorAuthor

    Completion evidence — 2026-10-12

    Implemented in signed commit 98375e0a, published on 0.32.

    Versioned native and independent TypeScript manifests/planners classify source, proving, relation, VK, statement/codec, setup, verifier, deployment and package changes. They bind upgrade/deployment records and reject stale, downgraded and substituted inputs. Exact fixed-pair assessments are composed with the retained continuous old-key update → old-parent-authorized migration → new-key successor node exercise; immutable legacy Cells explicitly reject retrofit migration.

    Acceptance record · exact evidence index.

    The maintainer's explicit “不要跑CI和gates” instruction supersedes the original gate-execution acceptance item for this work. No CI/gates ran and no gate success is claimed. Setup is public deterministic test material; this is not production setup admission or public deployment.

    The acceptance checklist now records the evidence and the explicit no-gates validation disposition.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions