Skip to content

Qiongli 2 Rust-Native Platform Migration Roadmap ​

Status: B1 / REL-201 provides a typed, channel-isolated, non-publishing native alpha dry-run and keeps real publication fail-closed; the B2 native workspace scaffold and normal native gates are implemented. CTR-201A-F close the accepted 1.x source-oracle inventory in this tree. CTR-202 and FND-202A are integrated through PR #59 at merge commit e24d26ab: Contract v2 has exact 23/24 closure, and qiongli-content has the typed manifest and three-profile projection contract. FND-202B is integrated through PR #60 at merge commit 29088975 with bounded canonical source collection and green exact-head CI. FND-202C is integrated through PR #61 at merge commit f6a260bb with deterministic writing, content digests, and green exact-head CI. FND-202D is integrated through PR #62 at merge commit ebd2d7be with bounded in-memory verification and profile-scoped direct loading; FND-202E-F remain open. Decision date: July 10, 2026 Execution rebaseline: July 13, 2026 Target branch after the 1.x freeze: 2.x Authoritative accelerated execution roadmap: docs/superpowers/roadmaps/2026-07-13-qiongli-2-accelerated-rust-migration-roadmap.md

Approved acceleration design: docs/superpowers/specs/2026-07-13-qiongli-2-native-acceleration-design.md

This document remains the detailed architecture, boundary, workstream, task, and release-gate catalog. Where its older execution cadence, PR sequence, physical crate list, or Python/Node CI requirements conflict with the July 13 accelerated roadmap, the accelerated roadmap is authoritative.

ARC-201A through ARC-201G were accepted on July 11, 2026. Their reviewed source is docs/architecture/decisions/, and tooling/architecture/arc-201-decisions.json is the CI-validated inventory.

Executive Decision ​

Qiongli will close the Python-led release line with one final planned 1.x prerelease, v1.19.0-beta.1, then move active product development to a Rust-native 2.x line.

The first native release will be v2.0.0-alpha.1, not a beta. A full runtime rewrite changes configuration ownership, project-state writes, installer transactions, agent backends, desktop integration, native packaging, and rollback behavior. Calling the first vertical slice a beta would claim a level of compatibility and operational stability that has not yet been demonstrated.

July 13 Native Acceleration Rebaseline ​

The 1.x line and its accepted compatibility inventory are frozen. Active work now optimizes for completing the Rust-native product rather than repeatedly proving the unchanged Python implementation.

Decision: use one active rolling Draft PR per native milestone. The first rolling branch is feat/2x-native-alpha1 and remains open through the complete alpha.1 vertical slice. FND, CFG, MCP, UI, platform, and release IDs are checkpoint labels inside that PR rather than branch or PR boundaries.

Required 2.x CI uses Rust formatting, check, Clippy, workspace tests, Tier 1 native jobs, and focused tests for concrete changed boundaries. Full Python and Node suites are manual compatibility diagnostics and do not block the rolling PR. Packaging, signing, clean-machine, client activation, and rollback gates run when their artifact or public claim exists.

ADRs 0201-0207 and their concrete safety boundaries remain accepted. Speed comes from removing legacy and process overhead, not from deferring all native validation until the end. The complete design, crate consolidation, R0-R5 critical path, and Ready criteria are defined in the July 13 accelerated roadmap.

Superseded July 12 Execution Rebaseline (Historical) ​

The section below records the cadence used for PRs #59-#62. Its micro-PR and legacy exact-head aggregation rules are superseded for work after PR #62.

The program keeps the Rust-native destination, but changes how work reaches it. The previous plan treated a workstream exit gate as if it were one executable task. CTR-202 consequently combined registry expansion, 52 schemas, runtime behavior, security hardening, smoke execution, documentation, and release gates in one review unit. That made review slow and allowed a contract-coverage task to grow into an unbounded runtime-security task.

Decision: use reviewable changes with milestone aggregation. Small slices are encouraged when they reduce risk, but they are not mandatory process gates.

OptionBenefitCost / riskDecision
Keep workstream-sized implementation batchesFewer branches and PRsLong feedback cycles, mixed risk, hard rollback, security scope expands laterejected
Remove concrete security and artifact checksFaster local iterationRepeats the credential, path, side-effect, and release-claim failures found in CTR-202rejected
Merge reviewable changes and aggregate them into milestonesFast feedback, practical rollback, and less process overheadMaintainers must keep each change coherentadopted

Preferred development cadence ​

Workstream and milestone IDs are planning containers. Implementation follows the same lightweight policy used by the Python line:

  • implement one coherent, useful behavior at a time where practical;
  • keep a change reviewable and testable, but impose no mandatory day, file, tool-count, WIP, or task-ID limit;
  • combine contract, runtime, fixture, and test changes when that produces the clearest working unit;
  • add focused regression coverage for changed behavior and concrete security bugs;
  • split work only when a change becomes difficult to understand, validate, or roll back.

During development, run language-native format, lint, build, and focused tests. Run cross-platform, integration, signing, packaging, and clean-machine checks when preparing the corresponding artifact or release claim. A concrete security failure blocks the affected behavior; it becomes program-wide only when it invalidates a shared contract, accepted baseline, release artifact, or already-promoted trust boundary.

Three gate classes ​

  1. Always blocking: credential or private-data disclosure, path escape, unauthorized write/process/network behavior, data loss, fabricated academic evidence, a false public contract claim, or failure to compile the changed component.
  2. Changed-component merge gates: formatting, linting, focused unit and contract tests, and boundary tests for only the components changed by the slice. Unrelated full-repository debt does not block an exploratory branch.
  3. Milestone and release gates: complete 23/24 coverage, full Tier 1 matrix, package reproducibility, signing, clean-machine, and end-to-end workflow evidence. These aggregate accepted changes; they are not rerun as a prerequisite to every local edit.

Security is therefore an early continuous lane, not late W9 cleanup. A slice that touches secrets, local paths, external adapters, project writes, or profile-specific outputs must state its threat boundary before code changes and must close its P0/P1 findings before merge. P2 design debt may be deferred only with an owner, affected profiles, compensating check, and a named successor slice; it cannot support a complete or release claim.

The target product is one Qiongli Native Platform with multiple execution profiles, not separate Python Full, Rust Lite, Node MCPB, and desktop products. The installed product must provide:

  • a native desktop application for managing skills, MCP servers, providers, integrations, agents, orchestration, updates, diagnostics, and recovery;
  • a full native CLI using the same service layer as the desktop application;
  • a native MCP server with Lite and Full exposure profiles;
  • embedded and materializable skills, agents, workflows, roles, schemas, templates, standards, and platform metadata;
  • local integration adapters for supported Codex and Claude surfaces;
  • a provider-independent agent and orchestrator runtime;
  • signed, target-specific installers and plugin artifacts that require no user-installed Rust, Python, Node.js, npm, uv, pip, or Cargo.

Release-Line Decision ​

Final 1.x release ​

The final planned 1.x beta is v1.19.0-beta.1:

  • Python package version: 1.19.0b1;
  • workflow, npm, plugin, and release tag version: 1.19.0-beta.1;
  • Rust Lite and MCPB component target: 0.2.0-beta.3, because both components changed after their 0.2.0-beta.2 release;
  • baseline tag: v1.18.0-beta.3;
  • release source: dev, following the current prerelease branch policy.

v1.18.0-beta.4 is rejected because the current work adds public Contract v2 configuration and literature-planning behavior. It is a feature-bearing minor line, not a patch-only correction to beta.3.

After post-release acceptance, create release/1.x-python at the accepted tag. That branch is a compatibility oracle and critical-fix line. Normal feature development stops there. Critical security or release-breakage corrections may override the "final planned beta" rule, but require an explicit exception and a matching Rust fix. Support ends 90 days after Qiongli 2 stable unless a later support decision replaces this policy.

After the acceptance receipt and normalized migration baseline are committed and pushed, create 2.x from that post-release baseline commit. All native implementation then targets 2.x; do not create it early from the dirty or unaccepted 1.x tree. dev remains the recorded 1.x integration endpoint unless the maintainer branch policy is explicitly revised later.

2.x prerelease choice ​

OptionCompatibility signalOperational riskDecision
Start at v2.0.0-beta.1Implies feature completeness and migration readinessToo strong before parity, native matrix, and rollback evidenceRejected
Start at v2.0.0-alpha.1Clearly communicates incomplete and changing contractsRequires release tooling to learn alpha tagsRecommended
Publish a separate 0.x native productIsolates technical riskSplits the product, marketplace identity, and support storyRejected

The decision is based on five criteria: public-contract stability, behavioral parity, data-migration safety, native artifact truth, and recoverability. It can change directly to beta only if the Rust implementation already satisfies all beta-entry gates in this roadmap before the first public 2.x artifact. The current repository does not satisfy those gates.

Product Promise And Boundaries ​

Zero language-runtime dependency ​

For an end user, the production promise is:

  • no Rust toolchain or Cargo;
  • no Python, pip, uv, or virtual environment;
  • no Node.js, npm, npx, or package lifecycle installation;
  • no language-runtime bootstrap during first launch;
  • no production command that shells out to python3, node, npx, uv, or cargo run;
  • GUI, CLI, MCP, local installation, skills, and orchestration start on a clean supported machine after installing the signed Qiongli artifact.

Build and maintainer environments may use Rust, Python, and Node.js until their tooling is migrated. That does not weaken the end-user runtime promise, but no maintainer-only dependency may leak into a production payload or launch path.

Academic workflows may optionally use domain software such as R, Python, LaTeX, Pandoc, Zotero, or statistical packages. Those are capability-specific optional integrations. Their absence must be diagnosed clearly and must not prevent the core platform from starting.

Model execution is still required ​

Zero language-runtime dependency does not mean zero model dependency. Agent and orchestrator execution requires at least one usable model backend:

  • host-native execution when a client exposes a supported host capability;
  • direct OpenAI API execution;
  • direct Anthropic API execution;
  • a future compatible provider implementation; or
  • an optional external Codex, Claude, or other CLI adapter.

The native installer must not present an optional external CLI as a required runtime. Qiongli must implement an AgentBackend boundary and direct HTTP/API paths so the core orchestrator remains usable without those CLIs. Subscription or desktop-app authentication must not be assumed to be reusable by Qiongli unless the host documents and exposes that capability.

AgentBackend is model transport, not a complete local agent. Direct APIs also require a native ToolHost governed by an AgentExecutionPolicy: tool-call loop, project-root and symlink sandbox, read/write allowlists, shell disabled by default or explicitly approved, MCP/service tool routing, call/time/output limits, cancellation, result truncation, redaction, and an audit trail. The orchestrator may not treat unrestricted host filesystem or command execution as an implicit consequence of using a direct model API.

Local and cloud boundaries ​

The native installer can manage files and registrations on the user's machine. It cannot inject a local executable into a hosted cloud worker that does not mount the user's filesystem.

  • Codex CLI and a documented Codex surface in the ChatGPT desktop app can consume locally registered skills, plugin metadata, and native MCP commands.
  • ChatGPT desktop behavior outside a validated Codex/plugin surface remains host-supported or remote-only; Qiongli does not infer local activation from the Codex filesystem path.
  • Claude Code local sessions can consume local skills-directory or marketplace plugins and bundled native MCP commands.
  • Claude Desktop local support must use a validated direct-plugin/MCPB or other documented local integration path.
  • ChatGPT web, Codex cloud, and Claude cloud sessions require a separately deployed remote MCP/service or a host-supported skill upload. Remote MCP is a separate post-local milestone, not a hidden function of the desktop binary.

Canonical Source And Repository Boundaries ​

The Rust migration changes implementations, not sources of academic truth.

BoundaryCanonical source2.x rule
Academic workflows and skillscontent/workflow/, content/skills/, content/templates/, content/roles/Embed or materialize; do not translate into Rust source
Academic and data standardscontent/standards/, content/schemas/Preserve as workflow guidance and versioned content; do not make AC1 a migration gate
MCP capability contractscontent/mcp-contracts/Complete Contract v2 before Full cutover
Product and target modelcontent/distribution/Compile target-aware install and release plans
Python 1.x behaviorpackages/python-qiongli/ plus frozen fixturesCompatibility oracle only after the final 1.x beta
Rust Lite behaviorpackages/qiongli-lite-mcp/Extract into shared crates while retaining a compatibility binary
Legacy Node behaviorpackages/qiongli-literature-mcpb/, packages/npm-qiongli/Frozen oracle until parity or explicit retirement decision
Native implementationpackages/qiongli-native/New Rust workspace and product runtime
Repository code policylanguage-native tooling and normal reviewRC1 remains optional reference material, not a required migration validator
Marketplace catalogsexternal marketplace repositoryDo not copy external catalog state into this repository

Generated plugins, desktop bundles, installers, caches, and release archives remain generated outputs. The native runtime may embed a compiled resource pack, but that pack must be reproducible from canonical content/ sources.

Lightweight development policy ​

Decision update: RC1 repository governance and AC1 academic-code governance are removed from the 2.x migration critical path. Their planned enforcement tasks are cancelled. They may remain as optional review guidance, but they do not block a branch, PR, milestone, alpha, beta, or stable release.

The Rust migration follows the development policy that kept the Python line productive:

  • implement one useful behavior at a time and review the actual diff;
  • require the changed component to compile and run its focused tests;
  • use normal Rust formatting, Clippy, Cargo tests, and ordinary code review;
  • permit reviewed crates, locked third-party dependencies, build scripts, platform APIs, UI libraries, and explicit process execution when the feature needs them;
  • run broader integration, platform, packaging, signing, and clean-machine checks when preparing the relevant artifact, not before routine development;
  • treat real credential disclosure, private-data exposure, path traversal, command injection, unauthorized writes, corruption, and data loss as concrete bugs in the affected component. Fix and regress-test them without creating a separate governance program first.

validate_repository_source.py and the RC1 contract become optional diagnostic tools and are removed from required CI. They must not block development or be used as a dependency for FND, MCP, UI, installer, agent, or orchestrator work. Language-native tools and existing component tests remain authoritative.

AC1 similarly stops being an enforced workflow layer. Existing Stage I and academic-code material may continue to offer reproducibility, lineage, diagnostics, and review suggestions, but migration work does not need to build or port an AC1 validator. A user or journal may explicitly request a stricter replication workflow; that is a workflow feature, not a platform-development or release prerequisite.

1.x and 2.x state coexistence policy ​

Alpha uses copy-on-migrate, never an in-place global-state rewrite:

  • QIONGLI_CONFIG_HOME remains the compatibility root;
  • legacy 1.x global files remain at their existing paths and are read-only to the 2.x importer;
  • 2.x global config, state, migration receipts, and managed markers live under QIONGLI_CONFIG_HOME/v2/; changing that root requires a superseding state migration ADR and cannot be an implementation-local platform choice;
  • legacy project state under <project>/.qiongli/ is read-only during preview; migrated 2.x state is first written under <project>/.qiongli/v2/;
  • before acceptance, 2.x may dual-read legacy state as a fallback but writes only to the v2 namespace; after acceptance it reads v2 first and exposes legacy data only through an explicit compatibility/import view;
  • secret values are copied to the OS keychain only with user approval. The legacy credential source is not deleted automatically; optional cleanup is a separate previewable action after the keychain reference is verified;
  • 1.x never reads or writes the v2 namespace. Downgrade restores host registrations to 1.x and uses the untouched legacy state or a verified pre-migration backup.

ADR 0204 fixes these literal directory names. A future superseding state ADR may change them only through a tested migration that preserves the same isolation, copy-on-migrate, secret-retention, and downgrade properties.

Target Architecture ​

mermaid
flowchart TD
    C["Canonical content, contracts, standards, and target metadata"]
    B["Build-time resource and contract compiler"]
    P["Signed embedded Qiongli resource pack"]
    K["Rust domain and platform service layer"]
    CLI["Native CLI"]
    GUI["Native desktop UI"]
    MCP["Native MCP server: Lite and Full profiles"]
    ORC["Agent runtime and orchestrator"]
    INS["Installer, doctor, updater, and rollback"]
    ADP["Codex, Claude, Desktop, and local-client adapters"]
    API["Direct model and research-provider APIs"]
    OUT["Target-specific installers and plugin artifacts"]

    C --> B --> P --> K
    K --> CLI
    K --> GUI
    K --> MCP
    K --> ORC
    K --> INS
    K --> ADP
    ORC --> API
    INS --> OUT
    ADP --> OUT

CLI, GUI, MCP, and internal worker modes are thin frontends over the same Rust services. ADR 0201 selects one canonical multi-mode qiongli executable per target. A platform-native desktop entry and CLI link resolve to those same product bytes; a minimal OS-required launcher is packaging metadata, not a second product runtime. Platform plugin artifacts may carry the same target binary with a profile-constrained invocation and complete artifact identity.

Proposed Rust Workspace ​

text
packages/qiongli-native/
  Cargo.toml
  crates/
    qiongli-content/
    qiongli-config/
    qiongli-runtime/
    qiongli-execution/
    qiongli-platform/
    qiongli-ui/
    qiongli-testkit/
  apps/
    qiongli/
CrateResponsibilityPrimary migration inputs
qiongli-contentTyped contracts, embedded resource pack, selection, materialization, version and integrity checkscontent/mcp-contracts/, workflow, skills, roles, templates, subjects, venue profiles
qiongli-configGlobal config, project state, migrations, keychain facade, redaction, atomic writesprovider config, project manifest, guidance and experience state
qiongli-runtimeProviders, MCP transports and dispatch, domain services, query normalization, evidence export, and Zotero bridgeRust Lite plus accepted Python/Node oracle behavior
qiongli-executionAgent backends, native tool loop, task DAG, orchestration, workers, synthesis, review, artifact and quality gatesPython bridges, orchestrator, workflow contracts, and host security policy
qiongli-platformHost discovery, declarative install plans, transactions, managed markers, repair, removal, update, and rollbackcurrent installers, client-config logic, and release metadata
qiongli-uiNative desktop components and view models onlyshared services; no duplicated business logic
qiongli-testkitGolden corpus, oracle adapters, clean-machine and target-install fixturesPython, Node, Rust, release receipts

Contracts, providers, MCP, agents, ToolHost, orchestration, installation, and updating remain explicit Rust module boundaries inside these seven crates. They should split into new physical crates only when an independent artifact, security boundary, or measured build bottleneck requires it. This keeps the initial dependency graph and review surface small without erasing architecture.

packages/qiongli-lite-mcp/ remains as a temporary compatibility package during alpha. Its behavior moves into qiongli-runtime and its public binary becomes a profile-constrained invocation of the canonical qiongli app before the compatibility package is retired or reduced to packaging metadata.

Runtime Profiles ​

ProfileIncluded runtimeAllowed behaviorDistribution
skill-onlyEmbedded/materialized content onlyHost-routed workflows; no local process requiredZIP or host-supported skills package
liteNative MCP plus bounded providersRead/configure/search/export/preview; no arbitrary shell or agent launchMarketplace/direct plugin or MCPB
fullEntire native service layerProject writes, domain runtime, agents, orchestration, validation, installersSigned desktop/CLI installer and local plugin
remoteFuture deployed serviceHosted MCP for web/cloud surfacesSeparate service and security program

Lite and Full are capability policies over the same contracts and shared crates. Native executable packages bind the allowed ceiling through a signed launch grant; a command argument may reduce but never raise it. Lite and Full must not become independent language implementations again.

Integration Strategy ​

Surface2.x local strategyRequired user actionBoundary
Codex CLIRegister a target-aware personal or repo plugin and MCP entry from one InstallPlanRefresh or start a new task when requiredNever write Codex plugin cache directly
Codex in ChatGPT desktop localMaterialize the correct native plugin and register it through the documented Codex personal/repo marketplace sourceThe host may still require install/enable and restartNo undocumented cache mutation or UI automation
ChatGPT desktop outside CodexHost-supported skills/plugin flow or future remote MCP only until local activation is documented and validatedHost/workspace policy appliesDo not reuse Codex paths as an inferred ChatGPT install API
Claude Code CLIPrefer personal skills-directory plugin for direct local discovery; support marketplace form tooReload plugins or start a new sessionPreserve trust and MCP approval semantics
Claude Code desktop localUse the same local plugin/skills path for local sessionsSelect local environment and reload as requiredDo not claim local plugins reach cloud sessions
Claude DesktopBuild and validate a direct-plugin/MCPB adapter and lifecycleImport/enable may remain host-controlledGate on real client activation evidence
Antigravity/HermesPreserve only after adapter contract and real acceptanceHost-specificTier 2 unless explicitly promoted
ChatGPT web/Codex cloudSkills-only upload or future production remote MCPWorkspace/admin policy appliesLocal binary cannot install into hosted workers
Claude cloud sessionsFuture remote service or host-supported content pathWorkspace/admin policy appliesLocal filesystem integrations do not transfer

Current host documentation supports Codex personal/repo marketplaces and says the host installs marketplace plugins into its own cache. Therefore the Qiongli installer registers supported Codex source metadata and manages its own payload, but never treats the host cache as an installation API and never generalizes that path to every ChatGPT desktop mode. Claude Code documents skills-directory plugins that load without a marketplace install, and marketplace plugins that are copied to a host cache; Qiongli follows those public boundaries.

Public marketplace delivery of a local native MCP remains target-sensitive. Until a host exposes an operating-system/architecture selector, a generic marketplace entry must not pretend that one native artifact supports every machine. Use target-specific artifacts, the local integration manager, skills-only delivery, or a future remote MCP.

Migration Workstreams ​

W0 — 1.x closeout and immutable baseline ​

  • resolve all release-blocking P0/P1/P2 findings in the current Stage 1 work;
  • commit the current capability-contract, configuration, and literature batches without mixing generated release outputs into source commits;
  • publish v1.19.0-beta.1 with honest pilot coverage and target identity;
  • freeze Python, Node, Rust Lite, CLI, install, state, and orchestration behavior into normalized fixtures;
  • create release/1.x-python only after postflight acceptance.

Exit gate: the final release is reproducible, its tree is clean, and its exact tag, component versions, artifacts, checksums, target triples, and known limitations are recorded.

W1 — Contract and parity foundation ​

  • complete the accepted-source CTR-201 baseline before beginning either successor: freeze CLI help, arguments, stdout/stderr, JSON output, exit codes, dry-run and side-effect behavior, error classes, and the orchestrator runtime scenarios required by the parent inventory;
  • inventory all skills, tasks, roles, workflows, subjects, templates, and standards at the final 1.x tag;
  • track generated-package and published-archive parity as an unassigned downstream governance boundary rather than a CTR-201 exit dependency;
  • normalize local absolute paths and nondeterministic timestamps in oracle data;
  • add a differential harness that can run Python/Node oracles in CI but stores runtime-independent golden results for Rust tests;
  • after CTR-201 reaches its exit gate, aggregate bounded CTR-202 contract and security slices toward the frozen accepted public-surface union: 23 canonical tools and 24 public names. The parent CTR-202 ID is not an implementation batch. FND-202 remains a separate successor to CTR-201 and does not wait for the CTR-202 aggregation gate.

CTR-201 exit gate: the accepted-source MCP, CLI, content, and orchestrator baseline is closed, normalized, digest-bound, and contains no unclassified required capture gap. An explicitly approved disposition may replace unsafe or inapplicable runtime execution, but omission may not.

CTR-202 exit gate: 23/23 frozen canonical tools and 24/24 frozen public names are Contract v2-backed, exact profile closure and complete-mode validation pass, and no mutable runtime declaration can silently shrink the target. Changing the target requires an explicit reviewed amendment to the accepted inventory and compatibility rationale.

CTR-202 completion evidence maps to the following concerns. These IDs no longer dictate branch, PR, or implementation shape:

IDScopeDepends onSlice evidence
SEC-201ARecord the incident, threat boundaries, and execution/side-effect class for all 34 casesCTR-201complete risk matrix with no sensitive values
SEC-201BHermetic MCP harness with isolated HOME/CWD/config/project and default-denied network/listener/process/write effectsSEC-201Aguard self-tests catch each prohibited effect
CTR-202AProfile-scoped security metadata, schema, and validator semanticsSEC-201AFull/Lite divergent-path mutation tests
SEC-201CShared non-reflective errors and credential-output sanitizationSEC-201BFull and Lite nested canary tests
SEC-201DManaged-path, minimal external-adapter environment/output, and declared side-effect boundarySEC-201Btraversal, symlink, process, and unauthorized-write tests
CTR-202BConfiguration tools: three canonical, four public namesCTR-202A, SEC-201Ccontract/schema/fixture-only change and bounded calls
CTR-202CLiterature status, planning, and evidence export: three toolsCTR-202A, SEC-201Ccontract/schema/fixture-only change and provider/error canaries
CTR-202DLiterature execution, routing, and task planning: three shared toolsCTR-202A, SEC-201Cprofile-specific contract outputs and path/query declarations
CTR-202EMarketplace Lite Zotero tools: two toolsCTR-202A, SEC-201CLite-only contract/manifest and safe-call closure
CTR-202FFull evidence/provider inspection: three toolsCTR-202A, SEC-201C, SEC-201Dcontract-only closure plus accepted adapter-boundary evidence
CTR-202GFull subject status/update: two toolsCTR-202A, SEC-201C, SEC-201Dcontract-only read/proposal/write declarations
CTR-202HFull doctor, lifecycle, and journal-fit: three toolsCTR-202A, SEC-201C, SEC-201Dcontract-only project-path and read-only declarations
CTR-202IFull experience query/show/lessons: three toolsCTR-202A, SEC-201C, SEC-201Dcontract-only managed-record and redaction declarations
CTR-202JFull task execution: one toolCTR-202A, SEC-201C, SEC-201Dcontract-only preview/execution side-effect declaration
CTR-202KAggregate frozen 23/24 coverage and switch complete modeCTR-202B through CTR-202Jexact closure, 34-case corpus, no open security blocker

Contract, runtime, fixture, and test changes may be combined when they form one coherent working behavior. Concrete conformance or security bugs are fixed in their owning component and verified with focused regressions.

FND-202 is likewise an epic, not one implementation change:

IDScopeDepends onSlice evidence
FND-202AResource-pack manifest, version, and profile projection contractFND-201, CTR-201schema and golden manifest
FND-202BCanonical source collector with traversal, symlink, duplicate, and size rejectionFND-202Anegative boundary tests
FND-202CDeterministic writer and content digestFND-202Btwo clean builds produce the same bytes/hash
FND-202DRust verifier/loader with no materializationFND-202Ccorrupt/version/profile tests and load/list smoke
FND-202EAtomic materializer restricted to a temporary/approved targetFND-202D, SEC-201Bbefore/after filesystem receipt and permission tests
FND-202FSource-drift and portable Tier 1 verification aggregationFND-202C, FND-202D, FND-202Enormalized tree parity, drift mutation, and CI receipt

The implementation and remaining acceptance contract, exact profile matrix, safety probes, compatibility debt, and nonclaims are recorded in docs/development/ctr-202-capability-contract-v2.md.

W1 exit gate: both gates above pass. Closing a CTR-201 source-oracle slice is not evidence that the Rust implementation conforms to it.

Current execution record:

  • the CTR-201A derived-inventory slice is merged and validation-backed;
  • CTR-201B's static Python Full CLI inventory captures 46 canonical and 49 public command paths, five console entrypoints, 164 non-help actions, and 27 defaults that resolve to the current working directory;
  • CTR-201C captures the accepted-source DECLARED/STATIC orchestrator control contract and compatibility boundary: 13 stages, 76 tasks, 104 required dependency edges, three runtime agent IDs, nine functional agent IDs, 82 routing skill IDs, 11 logical MCP capabilities, four quality gates, five built-in profiles, and the B1/H3 team and worker configurations. Public worker mode and adapter spellings use hyphens while internal normalized values use underscores. Worker orchestration is disabled by default; when it is explicitly enabled for a configured task, the recognized codex-subagent and claude-cowork adapter names still fall back to generic_prompt because native dispatch is not implemented;
  • the 82 skill values are unique routing IDs, not an installable-skill count. The frozen skill_catalog has 83 declarations because academic-context-maintainer is declared twice with the same value. The 11 MCP values are logical capability IDs, distinct from the 23 canonical and 24 public MCP tool names;
  • CTR-201B records authored parser help metadata only. CTR-201E separately captures formatted parser output and bounded handler cases, then links every unexecuted handler dimension to an inventory-only disposition owned by LEG-201; Full handler runtime parity remains unclaimed;
  • CTR-201C alone does not prove that agents run, solo/triad runtime parity, state or resume behavior, concurrency, failure or cancellation semantics, or quality-gate semantic execution. The accepted handler makes doctor part of an advisory route sequence; _tool_task_run(run_agents=true) does not call or enforce it. CTR-201C also does not implement plugin or Marketplace behavior or a Rust orchestrator;
  • CTR-201D partitions all 377 accepted content/ files into 12 disjoint roots and 11 logical resource kinds. It freezes skill-only, marketplace-lite (with lite as an explicit alias), and full source projections plus three accepted-source materialized skill subtrees: 178 files for the Qiongli Next Desktop/Web skill-only profile, 342 files for the Qiongli Next Marketplace Lite skill subtree, and 343 files for the Full CLI global skill subtree;
  • CTR-201D does not claim byte parity for published ZIP/TAR/plugin wrappers, release archives, host activation, or Rust resource-pack behavior. The accepted A8 evidence contains source package trees and release asset hashes, but no archive-member tree inventory;
  • CTR-201E implements the accepted-source Full CLI runtime-inventory-freeze slice. It classifies the 49 public command paths and five console entrypoints already fixed by CTR-201B across formatted help, stdout/stderr, JSON, exit codes, normalized error classes, dry-run and side-effect behavior, zero-argument behavior, aliases, and legacy npm dispatch. Unexecuted handler scenarios bind to CTR-201E-D001/D002, npm handler parity binds to D003, all three remain LEG-201 work, and cross-platform schema validation is not a Tier 1 runtime-parity claim;
  • CTR-201E is merged through protected PR #57. It closes only the CLI runtime inventory slice and does not establish Full handler or Tier 1 runtime parity;
  • CTR-201F closes the accepted-source orchestrator runtime inventory with 44 normalized deterministic cases (one A8 plus 43 bounded), six behavior dimensions, and six machine-bound dispositions. It covers the accepted control-flow matrix without claiming real Codex, Claude, or Antigravity launches, strict single-agent solo enforcement, public cancellation, real session resume, native worker dispatch, semantic quality-gate execution, or cross-platform runtime parity;
  • CTR-201 is source-oracle complete after CTR-201F. This completion means every required MCP, CLI, content, and orchestrator inventory gap is captured or explicitly dispositioned; it is not Rust conformance evidence;
  • B1 (REL-201) is implemented as a non-publishing contract: native version, channel, branch, planned target identity, notes, registry isolation, and rollback/promotion metadata are dry-run validated, while public native publication remains blocked by later artifact and acceptance work;
  • CTR-201F canonical re-extraction runs in the Ubuntu full tier with Python 3.12. Windows and macOS validate the checked portable artifact and parent binding only; that matrix is not a cross-platform runtime-parity claim;
  • published ZIP/TAR/plugin-wrapper and archive-member parity remains an unassigned downstream governance boundary. CTR-201D does not establish it, but it is not a CTR-201 completion dependency;
  • CTR-202 is integrated through PR #59 with exact 23/24 closure, profile-level sensitive-output metadata, bounded external-adapter environment/error handling, managed experience paths, shared input validation, nested credential redaction, and green exact-head CI;
  • FND-202A is integrated through PR #59 in qiongli-content. FND-202B is integrated through PR #60 and collects the 12 allowlisted canonical roots into sorted, typed, in-memory resources while failing closed on traversal, links, portable path collisions, unsupported file types, and configured count/size limits. FND-202C is integrated through PR #61 and deterministically writes the version 1 header, canonical manifest, and ordered payload with entry, content root, and whole-core SHA-256 identities. FND-202D is integrated through PR #62 and verifies the expected whole-core digest, bounded canonical manifest, content root, entry payloads, and portable paths before exposing immutable resources through a declared profile. Its exact-head native and checkout-installation checks passed; FND-202E-F remain open inside the alpha.1 rolling PR.

W2 — Native core, config, and data migration ​

  • create the Rust workspace and common error/result model;
  • compile canonical content into a signed, versioned resource pack;
  • define a stable config-home contract and OS keychain abstraction;
  • add schema_version to all Qiongli-owned mutable state;
  • implement the version-scoped copy-on-migrate and dual-read rules defined above for global config, project state, keychain references, and markers;
  • implement backup, atomic replacement, idempotent forward migration, failure rollback, owner-only permissions, and secret redaction;
  • import 1.x provider config, project manifest, guidance, experience, and install markers without modifying the source until the user accepts a plan.

Exit gate: migration fixtures pass on all Tier 1 systems, failed migrations restore byte-equivalent source state, and 1.x never reads partially migrated 2.x data as if it were valid.

W3 — Provider kernel and MCP parity ​

  • extract current Rust Lite search, providers, configuration, Zotero, and MCP framing into shared crates;
  • preserve Lite safety policy while enabling Full project-write handlers;
  • migrate read-only tools before project-writing and execution tools;
  • implement stdio first; add local HTTP only where a supported client needs it;
  • test schema, success payload, semantic error, redaction, side effect, timeout, cancellation, pagination, rate-limit, and no-provider behavior.

Exit gate: Rust passes every Contract v2 golden call and real bounded smoke without Python or Node in the production process tree.

W4 — Domain runtime and academic workflow parity ​

  • migrate project inference and manifest handling;
  • migrate subject routing, refinement, lifecycle, guidance, and resource materialization;
  • migrate experience records, journal fit, literature artifacts, screening, full-text, and citation graph behavior;
  • preserve useful existing Stage I tasks, provenance, and reproduction behaviors as workflow content, without making AC1 enforcement or a new academic-code validator a native migration dependency;
  • keep canonical academic policy in content/, not hard-coded in Rust.

Exit gate: the same project fixtures produce semantically equivalent managed files, proposed actions, warnings, and quality decisions.

W5 — Agent runtime and orchestrator ​

  • define AgentBackend before porting orchestration logic;
  • implement direct OpenAI and Anthropic adapters, plus an optional external CLI compatibility adapter;
  • implement ToolHost and AgentExecutionPolicy before allowing direct API backends to read, write, call tools, or execute approved local actions;
  • maintain a backend capability matrix and make an explicit retain, optional, or remove decision for host-native, Codex/Claude CLI, Antigravity, and future adapters; only verified rows may be advertised;
  • define task/run state, cancellation, retry, streaming, budget, model metadata, and credential boundaries;
  • decompose the Python orchestrator into task graph, routing, worker execution, synthesis, review, artifact, and quality services;
  • preserve solo, duo, triad, primary/reviewer/verifier, worker fan-out and barriers, merge/review, resumability, profiles, artifacts, and Stage I gates;
  • expose orchestration through CLI, GUI, and Full MCP without three separate implementations.

Exit gate: all frozen orchestrator scenarios pass, unavailable backends fail with a structured diagnosis, and at least one direct API backend completes the full workflow through the policy-enforced native ToolHost on a machine with no external agent CLI.

The R4D implementation sequence keeps that exit gate incremental: freeze the backend/policy/ToolHost contracts; add one fixed direct Responses adapter; route existing Full project services through the bounded in-process ToolHost; expose redacted opt-in settings, credential lifecycle, readiness, and explicit connection testing through App, CLI, and Full MCP; then compose the first single-run backend/tool loop before exposing an explicitly confirmed Full run surface. Multi-worker scheduling, durable recovery, and workflow acceptance remain R4E work rather than being folded into the transport or credential boundary.

W6 — Installer, integration manager, doctor, and updater ​

  • replace three installer inference paths with one declarative InstallPlan;
  • make plan preview, conflict detection, apply, verify, repair, remove, upgrade, and rollback use the same target and managed-file model;
  • preserve unmanaged user configuration and fail closed on conflicting entries; approval may select a different supported scope but never authorizes an overwrite of state Qiongli cannot prove it owns;
  • implement Codex and Claude local adapters within documented source and trust boundaries;
  • display which surfaces are installed, registered, enabled, active, unsupported, or remote-only;
  • verify signatures and checksums before atomic self-update.

Exit gate: every supported local client passes fresh install, upgrade from 1.x, repair, uninstall, and rollback acceptance with no orphaned managed entries.

W7 — Native desktop application ​

  • select and record a pure-Rust desktop toolkit before implementation;
  • implement onboarding, install profile, provider and secret configuration, skills manager, MCP manager, integration status, agent backend manager, orchestrator runs, diagnostics, update, and rollback views;
  • use service-layer commands and typed events; do not move business logic into UI callbacks;
  • meet keyboard navigation, readable scaling, error recovery, localization, and screen-reader expectations defined for the chosen toolkit;
  • make every mutating action previewable and auditable.

Exit gate: a clean-machine user can install, configure a backend, register one supported desktop/CLI host, run a diagnostic and a bounded agent workflow, then remove or roll back Qiongli without opening a shell.

W8 — Native release matrix and supply chain ​

Tier 1 targets:

  • macOS arm64;
  • Windows x86_64;
  • Linux x86_64.

Tier 2 candidates are macOS x86_64, Windows arm64, and Linux arm64. Promotion requires measured demand and native-runner capacity.

Work includes target-native builds, macOS signing/notarization, Windows Authenticode signing, Linux packages, checksums, signatures, SBOM, provenance, installer launch tests, update rollback tests, and clean-VM dependency audits. Cross-compilation alone is not release evidence.

Exit gate: every advertised target has a target-native startup receipt and no generic artifact contains an undisclosed current-host binary.

W9 — Continuous security, data, and repository governance ​

  • start at SEC-201A and run beside every workstream; W9 is not a late hardening phase that waits until the product is otherwise complete;
  • retain fail-closed config parsing, atomic writes, non-reflective errors, profile-scoped sensitive-output metadata, redaction, loopback-only local setup, bounded requests, and explicit network-provider consent;
  • treat managed paths and external commands as explicit capabilities: reject traversal and symlink redirection, minimize child environments, declare read/write/network/process effects, and return allowlisted public results;
  • store secrets in the OS keychain where available, with a documented secure fallback and no secret values in status, logs, crash reports, or fixtures;
  • define telemetry as opt-in and non-blocking; alpha ships with no remote telemetry by default;
  • use normal component tests and code review rather than RC1/AC1 enforcement;
  • permit the crates, dependencies, build scripts, platform APIs, FFI, and explicit process adapters required by the implementation, with ordinary scoped review and tests;
  • preserve academic data identity, provenance, and deidentification where the workflow actually uses them, without a separate governance milestone.

Slice exit gate: no P0/P1 finding in the touched trust boundary remains open. Beta exit gate: no high-severity security, private-data, unsafe-path, or supply-chain finding remains open across the promoted product surface.

W10 — Legacy retirement ​

  • retire Node production paths only after their behavior is migrated or explicitly removed by contract;
  • inventory each Node-only behavior, including advanced search controls and Zotero search/upsert, and give it a migrated, contractually removed, or retained compatibility disposition with evidence;
  • stop publishing the Python product runtime only after 2.x beta migration and rollback gates pass;
  • retain frozen oracle fixtures and maintenance branch history;
  • decide separately whether maintainer-only Python/Node release tooling migrates before 2.0 stable; it may not ship in production artifacts regardless;
  • remove compatibility aliases only through declared deprecation windows.

Exit gate: production packages contain no Python/Node runtime path, release docs identify the final 1.x support policy, and deletion does not remove the parity evidence needed to audit the migration.

For Node retirement, a "green prerelease" means the disposition manifest is complete, every migrated item passes Rust oracle/contract tests, every removed item has an approved compatibility note, production payload/process scans show no Node invocation, rollback evidence passes, and no open P0/P1 regression is attributable to the retirement.

Accelerated Release Train And Milestone Gates ​

Migration stagePublic versionRequired outcome
M0 — 1.x closeoutv1.19.0-beta.1Accepted and frozen Python oracle; complete
R0 — Native control planenoneOne rolling Draft PR, Rust-native required CI, legacy suites non-blocking
R1-R3 — Alpha vertical slicev2.0.0-alpha.1Embedded content, versioned config, Lite MCP, CLI/GUI, doctor, current-host install, native packaging, and clean-machine proof
R4 — Full native capabilityv2.0.0-alpha.2Full MCP, domain runtime, agents, ToolHost, orchestrator, workflow parity, and no production Python/Node fallback
R5 — Qualificationv2.0.0-beta.1Tier 1 signed artifacts, state migration, rollback, host receipts, performance, accessibility, and all beta-entry gates
Hardeningv2.0.0-beta.NReal-user migration fixes and no unresolved P0/P1 defects
Stablev2.0.0Stable gates, support policy, rollback, and supply-chain evidence complete

Version numbers follow demonstrated user capability, not the number of internal task IDs completed. R0-R5 are dependency-ordered checkpoints inside a small number of rolling milestone PRs; they are not a mandate to create branches or PRs for each workstream.

Execution horizon ​

The migration is managed by critical-path order and exit evidence rather than calendar estimates. A working checkpoint should be committed whenever a coherent native boundary compiles and passes its focused tests. The rolling PR is kept current with its capability ledger, next batch, and explicit nonclaims. Unavailable signing credentials, target runners, provider accounts, or desktop client acceptance block only the public claim that needs them; they do not stop independent native implementation from continuing in the same branch.

Program Task Catalog ​

Rows in this catalog are program outcomes rather than mandatory branch or PR shapes. Maintainers may implement them through the smallest coherent changes that keep review and validation practical.

IDTaskDepends onCompletion evidence
RLS-101Close current Stage 1 security and compatibility findingsnonetargeted regressions and zero release-blocking findings
RLS-102Commit, version, validate, publish, and accept final 1.x betaRLS-101accepted v1.19.0-beta.1 receipt
RLS-103Create Python maintenance baseline and support policyRLS-102release/1.x-python and frozen manifest
ARC-201Record native architecture, UI, backend, state, and installer ADRsRLS-102accepted ADR 0201-0207 set and CI validator
REL-201Add alpha version/tag/channel support to release toolingRLS-102, FND-201 native version sourcealpha dry-run and parser tests
CTR-201Generate complete MCP/CLI/content/orchestrator baseline inventoryRLS-102normalized freeze manifest
SEC-201Establish MCP/runtime trust-boundary baselineCTR-201aggregate SEC-201A-D threat, harness, redaction, path, adapter, and side-effect evidence
CTR-202Aggregate Capability Contract v2CTR-201, SEC-201CTR-202A-K exact 23-canonical / 24-public profile closure and smoke corpus
LEG-201Inventory and disposition every Python/Node/Rust Lite legacy behaviorCTR-201capability disposition manifest and normalized oracles
FND-201Scaffold packages/qiongli-native/ workspaceARC-201fmt/clippy/test on Tier 1 CI
FND-202Aggregate deterministic embedded resource packFND-201, CTR-201FND-202A-F format, reproducible digest, loader, materialization, and drift evidence
CFG-201Define versioned global config and secret-store facadeARC-201, FND-201cross-platform config tests
CFG-202Version and migrate project/guidance/experience stateCFG-201, CTR-201import, idempotency and rollback fixtures
PRV-201Extract Rust provider kernel from the frozen Lite surfaceFND-201, CTR-201Lite compatibility suite
MCP-201Extract Lite transport, protocol, dispatch, and profile policyFND-201, CTR-201stdio and frozen-Lite contract suite
MCP-202Aggregate Full read/config migration slicesMCP-201, CFG-201, relevant accepted CTR-202 childper-family Full golden calls
MCP-203Migrate Full project-write toolsMCP-202, CFG-202, DOM-201side-effect and rollback tests
MCP-204Expose agent/orchestrator execution tools through Full MCPMCP-203, DOM-202, AGT-203, ORC-203execution-policy and end-to-end tests
DOM-201Migrate project and subject runtimeCFG-202, FND-202fixture parity
DOM-202Migrate guidance, experience, literature artifacts, and journal fitDOM-201fixture parity
AGT-201Define and implement AgentBackend protocolARC-201, CFG-201fake backend and direct API tests
AGT-202Add direct OpenAI and Anthropic backendsAGT-201redacted live opt-in smoke
AGT-203Implement ToolHost and AgentExecutionPolicyAGT-201, CFG-201sandbox, approval, tool-loop, limit, redaction and audit tests
AGT-204Add optional external CLI compatibility adaptersAGT-201unavailable/timeout/cancel tests
AGT-205Decide and test the advertised backend matrix, including host-native and Antigravity dispositionAGT-202, AGT-203, AGT-204, INT-204per-backend capability and acceptance matrix
ORC-201Port task graph, state, resume, and profilesCTR-201, CFG-202, AGT-201frozen scenario parity
ORC-202Port solo/duo/triad workers and synthesisORC-201, AGT-202, AGT-203deterministic sandboxed fake-backend suite
ORC-203Port artifacts, review, quality, and useful Stage I behaviorORC-202, DOM-202, AGT-203end-to-end academic workflow suite
PLT-201Define one target-aware InstallPlanARC-201, CTR-201schema and preview fixtures
PLT-202Implement transactional installer and managed markersPLT-201, CFG-201install/remove/rollback tests
INT-201Implement Codex local source registrationPLT-202CLI and desktop activation receipt
INT-202Implement Claude Code skills-directory and marketplace adaptersPLT-202CLI and desktop local receipt
INT-203Implement and validate Claude Desktop direct adapterPLT-202real client activation receipt
INT-204Classify Antigravity, Hermes, and future adaptersPLT-201tier decision and contract
UI-201Implement native shell, onboarding, navigation, and accessibility baseARC-201, FND-201desktop UI tests
UI-202Implement skills, MCP, provider, and integration managementUI-201, CFG-201, PLT-202clean-machine user journey
UI-203Implement agents, orchestration, diagnostics, update, and rollback viewsUI-202, ORC-203, UPD-201end-to-end user journey
UPD-201Implement signed channel metadata and atomic updaterPLT-202, REL-201update and rollback matrix
PKG-201Build Tier 1 native artifact matrixFND-201target-native startup receipts
PKG-202Add signing, notarization, SBOM, provenance, and checksumsPKG-201verified release evidence
QAT-201Add clean-machine zero-runtime acceptanceFND-202, CFG-201, MCP-201, PLT-202, UI-202, INT-201, INT-202, UPD-201full alpha-slice no-language-runtime process audit
RET-201Remove Node production fallbackLEG-201, PRV-201, DOM-202, MCP-204, two qualified green prereleasesdisposition, payload and process audit
RET-202Stop Python product runtime publicationbeta-entry gatesregistry/channel transition receipt
REM-201Design remote MCP for cloud/web surfaceslocal beta evidenceseparate threat model and service decision

CTR-201 decomposition ledger ​

These IDs are engineering work-item children of CTR-201; they are not new canonical academic Task IDs. A child must not depend on its parent because the parent exit gate depends on completion of its required children.

IDScopeDepends onStatus / exit evidence
CTR-201ADerived semantic inventory and frozen-baseline bindingaccepted v1.19.0-beta.1 baselinemerged; validation-backed master ledger
CTR-201BAccepted-source static Full CLI semanticsCTR-201Amerged; closed command/parser inventory
CTR-201CAccepted-source declared/static orchestrator control contractCTR-201Amerged; closed declared-control inventory
CTR-201DCanonical content and materialized skill-subtree closureCTR-201Amerged; source and materialized-tree digests
CTR-201EAccepted-source Full CLI runtime inventory freezeCTR-201A, CTR-201B, accepted v1.19.0-beta.1 baselinemerged through protected PR #57; checked digest-bound matrix and three LEG-201 dispositions; Full handler parity not claimed
CTR-201FAccepted-source orchestrator runtime inventory closureCTR-201A, CTR-201C, accepted v1.19.0-beta.1 baseline44 cases (1 A8 + 43 bounded), 6 behavior dimensions, and 6 explicit dispositions close the source-oracle inventory; real agents, Rust implementation, and cross-platform runtime parity not claimed

CTR-201E closes only the CLI-runtime inventory slice. CTR-201F closes the remaining accepted-source orchestrator-runtime inventory requirement, so the parent CTR-201 source-oracle gate is complete. Archive and published-package parity remains an unassigned downstream governance boundary rather than a CTR-201 blocker. CTR-202 and FND-202 are separate successors in the declared program DAG and their CTR-201 dependency is closed. CTR-202 is complete and integrated through PR #59 with exact-head CI. FND-202A is also integrated through PR #59. FND-202B is integrated through PR #60 with exact-head CI. FND-202C is integrated through PR #61 with green exact-head CI. FND-202D is integrated through PR #62 with green exact-head CI. FND-202E-F are the next content checkpoints in the single alpha.1 rolling PR.

Cancelled governance tasks ​

The proposed GOV-201A-C and GOV-202A-C enforcement work is cancelled and removed from the migration DAG. RC1 and AC1 documents may remain for historical context or optional review, but no replacement governance implementation is required. Normal language-native checks and concrete regression tests are sufficient.

REM-201 is intentionally outside the local alpha critical path.

Beta Entry Gates ​

v2.0.0-beta.1 is allowed only when all are true:

  • every supported public MCP name is contract-backed and Rust-conformant;
  • Full CLI commands preserve documented arguments, output, exit, dry-run, and error semantics or carry an approved migration note;
  • canonical skills, tasks, roles, workflows, templates, subjects, and package combinations materialize without drift;
  • 1.x global and project state imports are idempotent, backed up, and reversible;
  • solo, duo, triad, primary/reviewer/verifier, worker, synthesis, artifact, and quality-gate scenarios pass;
  • at least one direct model API backend completes an end-to-end workflow without an external CLI;
  • the native ToolHost enforces project-root/symlink boundaries, read/write policy, shell approval, MCP/service tool policy, limits, cancellation, redaction, and audit for that direct-backend workflow;
  • every backend advertised in beta has a capability declaration and matching acceptance evidence; host-native, external CLI, Antigravity, and other adapters are either verified or explicitly not advertised;
  • GUI, CLI, MCP, installer, updater, skills, and orchestrator pass on clean Tier 1 machines without Rust, Python, or Node.js;
  • production payloads contain no forbidden language-runtime invocation;
  • Codex and Claude local adapters have real install, activation, upgrade, uninstall, and rollback receipts for each advertised surface;
  • all advertised native artifacts are target-identified, signed where required, and started on the target operating system;
  • no open P0/P1 security, data-loss, migration, installation, or release defect;
  • the Node disposition manifest is complete, Node production fallback is removed after two qualified green prereleases, and Python is no longer required by the product path being promoted.

Stable Entry Gates ​

v2.0.0 additionally requires:

  • at least two consecutive green beta releases with no rollback of a public contract or state schema;
  • migration and rollback documentation tested by someone other than the implementer;
  • no unresolved P0/P1 defect and an explicitly accepted P2 list;
  • signed and reproducible Tier 1 release artifacts with SBOM and provenance;
  • accessibility, localization, performance, startup, update, crash recovery, and uninstall acceptance;
  • final 1.x support and end-of-life communication;
  • ordinary component, integration, platform, packaging, and security tests for the released scope passing.

Quality And Acceptance Matrix ​

LayerRequired evidence
Contractschema validation, aliases, errors, side effects, redaction, golden calls
UnitRust unit/property tests for pure services and parser boundaries
DifferentialRust output against normalized Python/Node/Rust Lite oracles
Stateimport, backup, repeated migration, corruption, permission and rollback tests
Installerpreview, conflict, managed/unmanaged, apply, repair, update, remove, rollback
Integrationreal local client discovery, activation, tool listing and safe call
Orchestratorfake deterministic backends plus opt-in real direct API smoke
Desktopkeyboard, scaling, failure recovery and complete user journeys
Nativetarget-native startup, signing verification and clean-machine dependency audit
Supply chainlocked dependencies, license policy, SBOM, provenance, checksum, signature

Metrics ​

Track these values per prerelease:

  • capability contract coverage;
  • CLI command and option parity;
  • normalized content/materialization parity;
  • state migration fixture coverage and rollback success;
  • orchestrator scenario parity;
  • supported local integration acceptance coverage;
  • target-native artifact startup coverage;
  • clean-machine zero-runtime success rate;
  • production process-tree forbidden-runtime count;
  • open P0/P1/P2 migration defects;
  • binary, installer, embedded-resource, and update sizes;
  • cold GUI, CLI, and MCP startup time;
  • managed-file rollback and uninstall residue rate.

Risk Register ​

RiskImpactMitigation
Translating Python file by fileHidden behaviors and state semantics disappearContract and oracle freeze before porting
Orchestrator remains coupled to external CLIsZero-dependency promise is falseAgentBackend first; direct API implementation before beta
Direct API agents receive unrestricted local toolsData loss, secret exposure, or arbitrary executionNative ToolHost, project sandbox, allowlists, approvals, limits and audit
Partial Contract v2 is treated as completeFull tools drift or vanishGenerated full inventory and blocking coverage gate
Contract completion mixes unrelated schemas, runtimes, security, and release gatesReview time grows and a documentation task becomes an unsafe refactorkeep changes coherent; split only when review or validation becomes unclear
Optional RC1/AC1 guidance is treated as mandatoryMigration returns to governance-first developmentkeep both outside required CI, dependencies, and release gates
Project files are rewritten without schema migrationIrrecoverable user data lossbackup, forward-only versioning, atomic writes and rollback
GUI duplicates CLI logicLong-term behavioral driftone service layer and typed frontend commands
Marketplace payload claims unsupported platformsInstalled MCP cannot starttarget identity, local variant selection, honest marketplace scope
Host cache is treated as a public APIClient updates break installswrite only documented source/config locations
Cloud support is inferred from local supportUsers expect unavailable hosted executionexplicit remote profile and separate service milestone
Node is deleted by language rather than behaviorZotero/search behavior regressesfrozen Node oracle and explicit retirement decisions
Python line keeps receiving featuresMigration baseline never stabilizesrelease/1.x-python critical-fix-only policy
Pure Rust UI blocks accessibility or packagingDesktop quality slipstoolkit ADR and prototype gate before UI expansion
Secrets enter config, logs, or fixturesCredential exposurekeychain facade, allowlist status, redaction and secret scans

Rollback Strategy ​

  • Never mutate a 1.x state file before a backup and validated migration plan exist.
  • Keep 1.x global/project state and 2.x v2/ namespaces separate during alpha; import is copy-on-migrate and legacy files remain untouched by default.
  • Copy approved credentials into the keychain, verify the new reference, and retain the legacy source until a separate cleanup plan is accepted.
  • Use versioned managed markers so uninstall removes only Qiongli-owned files.
  • An alpha install can switch host registrations back to the accepted 1.x binary and content without downgrading already migrated project state.
  • If project state cannot be safely downgraded, restore the pre-migration backup and preserve the 2.x copy for diagnosis.
  • Native self-update must use an A/B or equivalent staged replacement with a last-known-good executable and verified metadata.

Explicit Non-Goals For The First Alpha ​

  • a hosted multi-tenant control plane;
  • silently bypassing client marketplace, trust, approval, or admin policy;
  • reusing undocumented desktop application credentials;
  • arbitrary shell execution in the Lite profile;
  • removing every maintainer Python or Node script before the product runtime is complete;
  • promising every operating system or architecture before target-native evidence exists;
  • changing canonical academic policies merely to simplify Rust implementation.

External Platform Constraints ​

The integration design must be revalidated at each alpha because host behavior can change. Current primary references:

  • OpenAI, Build plugins for personal/repo marketplace registration and host-managed plugin cache;
  • OpenAI, Submit plugins for public MCP submission and production-server requirements;
  • Anthropic, Plugins reference for skills-directory plugins, ${CLAUDE_PLUGIN_ROOT}, and marketplace cache behavior;
  • Anthropic, Desktop application for local versus cloud session boundaries.

Definition Of Program Done ​

The migration is complete when a user can install a signed Qiongli 2 artifact on every supported Tier 1 platform and, without installing a language runtime:

  1. launch the native UI or CLI;
  2. inspect and configure skills, MCPs, providers, model backends, integrations, agents, and updates;
  3. register Qiongli with a supported local Codex or Claude surface through a documented host boundary;
  4. run Lite MCP tools and a Full project workflow;
  5. run the orchestrator with agents through a supported backend and the native, policy-enforced tool host;
  6. preserve academic code, data, provenance, artifact, and quality standards;
  7. upgrade, repair, uninstall, or roll back without losing unmanaged files or pre-migration state;
  8. verify the installed binary, target identity, version, checksums, and release evidence;
  9. operate with no production dependency on Rust, Python, Node.js, npm, uv, pip, or Cargo.

Qiongli documentation