Repository navigation
Releases: Corvidae-Coding-Projects/Project-Peritus
Release list
Peritus v0.1.9
Peritus 0.1.9
Peritus now uses the selected hosted route and model's actual advertised token capacities throughout
its coding loop. Large-context models no longer inherit a universal 32,768-input / 4,096-output
ceiling from the generated fallback profile. This release is developed on develop, merged into
main, and tagged v0.1.9.
- Resolve route-specific input, output, and shared-context metadata before context selection,
compaction, request negotiation, and generation. Model switches reuse the catalog while selecting
the new model's own capacities. Review and fixer evidence projection use prepared metadata too. - Distinguish a shared input-plus-output window from separate input and output maxima. Uncapped
turns use the shared input window with minimum reply space; generation fits its output allowance
to the remaining context and model maximum. A large output maximum is not reserved on every turn. - Preserve deliberate fixed profiles through
discover_model_limits = false. Existing generated
32K/4K pairs automatically use discovery; other custom pairs stay fixed unless explicitly enabled.
Missing metadata fields keep configured fallbacks. Compatible endpoints and account providers
retain their existing configured behavior. - Avoid repeated metadata loading during normal turns and model selection. Hosted HTTP catalog
failure retains fallbacks without repeating discovery on every tool turn; explicit refresh can
update the catalog. OpenCode retains its required exact-model catalog admission.
The live OpenCode Zen and Go SDK catalogs both advertised a 1,000,000-token shared window and
384,000 maximum output for deepseek-v4.1-flash during this campaign. These are route observations,
not a promise that every provider carrying the same model offers identical capacities. An uncapped
input target is now 999,999 tokens on those routes; the normal 85% compaction trigger is roughly
850K tokens. Explicit output allowances reserve their requested space. OpenCode output control
remains advisory because its runtime does not expose exact output-token enforcement.
The real-testing report and
compact evidence record actual provider catalogs,
configuration policies, model switches, durable-memory readbacks, and live inference. The final
campaign made nine actual inference requests: DeepSeek handled 82K+ estimated input without
compaction and returned exact fixture-file contents; the fixed 32K comparison compacted history;
an actual Codex account run retained its configured limits and completed its file-read workflow.
Six models from the real hosted HTTP catalog also resolved their own capacities.
The completed evidence is reused for this release. No unit, mock, formal-verification, or repository
qualification suites were run. The campaign did not execute full 1M-token inference, generate
384K output, or establish Go subscription entitlement; Go coverage is catalog/selection/policy
operation. Other hosted HTTP inference and UI onboarding were not repeated. Native packaging
builds all six supported OS/architecture packages and operates actual installation, offline
terminal startup, and clean shutdown on the four Unix hosts.
Rust and WebUI version metadata is synchronized to 0.1.9; external dependency pins are unchanged.
Deep Research remains separately distributed through the module market with the same wire contract.
All six native platform packages built successfully. Actual installation, offline terminal connection, clean client exit, and daemon shutdown passed on all four Unix hosts. Package manifests, checksums, and source provenance were checked against cdf106c9b0b13d50446e33606511fec15ce03f6f.
Native build run: https://github.com/Corvidae-Coding-Projects/Project-Peritus/actions/runs/39553792906
Peritus v0.1.8
Peritus v0.1.8 repairs host-side causes of repeated reading and lost task progress.
- Preserve approved external reads, role-owned decisions, next steps, and settled effects through retry, compaction, and restart. Keep reads before later edits/deletions explicitly historical.
- Retain independent reviewer delivery coverage for immutable source pages across invocation boundaries. Repair rejected final output without ordering another grounding pass.
- Track rotating inspection cycles and repeated refusals across workspace, context, and skill tools. Compact unchanged evidence already in view; no-op edits and unrelated commands do not reset progress.
- Keep host feedback separate from user requirements and enforce current permissions/private exclusions through original, wrapped, chained, and derived archive access. Normalize ordinary relative path aliases.
- Admit local work with Read/Write permission while checking Process permission at command launch. Fit large documents as typed UTF-8 pages with exact ranges and continuations.
Completed real testing: 1,120 actual API actions, including generated ranges, cold recovery, role isolation, permission changes, chained archives, and large documents. A real official-provider conversation → design → edit → independent review run reached Accepted in 14 requests and 13 tool calls with workspace Process and Network disabled. Independent execution of its resulting CLI printed exactly After with empty stderr.
All six native packages include the client, daemon, TUI, and platform sandbox helper, with checksums, inventory, SBOM, provenance, and attestations. The release workflow exercises installation and offline terminal startup on the four Unix hosts. Existing behavioral evidence is reused; no unit, mock, formal-verification, or repository qualification suite was run.
Full release notes · Defects and real-testing evidence
The recorded application campaign is bounded Linux evidence, not a multi-hour autonomous soak or a guarantee of every model's next action. No task/read/token quota was added. Deep Research remains separately distributed with its existing wire contract.
Peritus v0.1.7
Peritus v0.1.7 improves skill packaging, run-state isolation, restart cost, replay reuse, and native-plugin diagnostics.
- Bundle every skill and its resources automatically from the canonical
skills/directory, including real-testing. - Keep one run's durable updates from blocking unrelated run updates and reads; share immutable registry metadata.
- Reuse validated conversation replays, refresh after external database changes, and defer historical run/continuation loading until selected.
- Share unchanged continuation artifacts and place lightweight client helpers and plugin components with their architectural owners.
- Drain native-plugin stderr continuously, retain the causal diagnostic and exit status after floods, and reap failed or timed-out children.
Completed real-interface evidence includes 3,799 skill-consumer requests, 56 terminal scenarios, 28 CLI/launcher/shutdown cases, concurrent publication, replay-cache invalidation, copied historical recovery, candidate/trace comparisons, and native-plugin failures. An 8,000-query native replay recorded six cold replays and 7,994 cache hits.
On the recorded copied history, warm startup fell from 182 ms to 30 ms, ready RSS from 61.4 MiB to 28.0 MiB, and logical reads from 18.1 MB to 0.59 MB. Median repeated metadata queries fell from 0.231 ms to 0.015 ms. First history selection pays the deferred load; selected payloads remain resident. These are bounded Linux measurements, not a multi-hour memory-leak assessment or provider-latency claim.
All six native packages include the client, daemon, TUI, and platform sandbox helper, with checksums, inventory, SBOM, provenance, and attestations. Package installation and offline terminal startup are exercised on the four Unix hosts. The existing behavioral evidence is reused; no unit, formal-verification, or repository qualification suite was run.
Full release notes · Real-interface evidence · Performance review
Deep Research remains separately distributed through the module market; its wire contract is unchanged.
Peritus v0.1.6
Fixed
- Preserve literal DSML marker and tag text inside OpenCode tool arguments. Reject competing structured preludes and duplicate JSON keys before converting nested arguments into inert host tool calls.
- Read private traces one selected record at a time, skip irrelevant payloads from their headers, and build only the requested human or JSON representation. Output spooling in the normal Peritus cache preserves complete JSON/error responses without retaining the entire trace or output in memory or using the system's potentially RAM-backed temporary directory.
Real testing
- Passed 108 public OpenCode-adapter wire replays, including 24 seeded generated literal inputs, Zen/Go routing, valid JSON and DSML, malformed payload recovery, duplicate-key rejection, and tool selection/count restrictions. The external vendor supplied a deterministic wire fixture; no live inference or host tool execution is claimed.
- Compared the actual old and new trace CLI across human/JSON and complete/extension-only output. All 24 RSS measurements passed; a roughly 64 MiB trace's JSON-output peak dropped from 342 MiB to 18 MiB. Corruption, torn tails, unavailable temporary storage, actual captured provider events, a filtered sparse 10 GiB record, and public-reader append/reopen behavior passed.
Compatibility and packages
This patch resolves the four confirmed parser and trace-reader findings recorded in v0.1.5. Existing run and trace encodings remain compatible. Peak process memory follows the largest selected trace record; selected output uses automatically removed files in the normal Peritus cache.
Native packages include the client, daemon, TUI and sandbox helper for Linux, macOS and Windows on x86-64 and ARM64. Each includes checksums, inventory, SBOM and provenance. Unix packages additionally exercise actual installation and offline terminal startup. The Deep Research plugin remains separately distributed with an unchanged wire contract.
Native candidate readback
The downloaded Linux x86-64 package reports 0.1.6 and processed a roughly 64 MiB trace through the actual JSON CLI at 12.2 MiB peak RSS. Extension filtering, operation with an unusable system temporary directory, and cache-spool cleanup also passed. This supplements the source-level real-interface campaign.
Peritus v0.1.5
Changed
- Reuse unchanged workspace document ranges already present in the model's current context with compact successful receipts, rather than sending the same body again. Restore omitted evidence from the durable role archive and deliver only missing parts of overlapping reads.
- Preserve exact Unicode line/byte coverage, continuation cursors, and provider-sized archive previews. Unrelated edits keep reusable evidence; changed files refresh through current permissions and file-version checks.
- Retain task plans as explicitly historical progress when their source bindings change, and carry the last completed workspace operation through context reconstruction. Independent review obtains its own evidence.
Added
- Read one run's durable private trace locally with
peritus runs trace --run <ID> [--extensions]. It decodes every retained provider envelope, retry decision, and rejected model reply without a daemon session. - Omit
--runonperitus runs traceto list retained trace identities newest first. In the Runs dashboard,ycopies the selected run's 32-hex identifier. - Repair an OpenCode envelope behind a private prelude containing inline code spans or quoted pseudo-tool markup, or one final Markdown-fenced object. Ambiguous containers, additional candidates, and trailing text are still refused.
- Normalize a complete terminal DeepSeek DSML calls block into the ordinary inert tool-call shape under
peritus.opencode_turn_normalization. Declared-name, argument-object, call-count, and tool-selection checks still apply; incomplete or undeclared calls are refused. DSML ambiguity and literal-argument handling have known review follow-ups recorded in the release notes.
Fixed
-
Reject Windows directory junctions before creating a release archive, including root, nested, and dangling junctions.
-
Include reuse metadata in document response budgets and keep continuation receipts compact, preventing a long sequence of fragments from falling back to repeated source delivery.
-
Retain the rejected reply text when an OpenCode turn is refused, bounded to 16 KiB, and name
peritus runs tracein the failure hint instead of promising a diagnostic that no command could read. -
Announce one model request per logical turn. Retries and refusals report their own transition instead of repeating
Requesting modelfor every bounded attempt. -
Explicitly instruct OpenCode models not to emit DSML, XML/HTML-like tags, special-token markers, or other pseudo-tool syntax in the wire prefix, prompt tail, and correction prompt.
-
Select the OpenCode Zen/Go runtime by native executables only. A Windows OpenCode installation reached through WSL interop no longer passes discovery, so provider setup reports the actionable installation path instead of a model-catalog failure and still finds a native 1.19.0 that appears later on
PATH. -
Check the operating-system credential store before provider setup asks for a key. An unavailable keyring now reports how to start the Linux and WSL Secret Service instead of failing with
PERITUS-SECRETS-006after hidden input and model discovery.
Real testing
-
Workspace evidence reuse passed 20 real API scenarios and 48 seeded range requests, including omitted evidence, fresh-process recovery, changed content, permissions, independent roles, truncated previews, and Unicode byte gaps. Sixty-five already-visible reads returned zero content bytes.
-
Two disposable live official-Codex coding runs reached an accepted result. In the deliberate duplicate-read run, the second read returned a 319-byte reuse receipt with zero source content; the agent then edited the program and completed it. Both produced CLIs passed independent real command-line readback.
-
Measured the retained OpenCode Go run: 82 host attempts, 94 refused replies recorded without their text, 29 scheduled retries, and 71 repeated
Requesting modellines inside a 256-activity window. After the first repair, 29 refusals retained their text; 14 carried a complete envelope behind a prelude and all 14 are now repaired, while 15 DSML pseudo-tool replies without an envelope remain refused. Replayed seven scripted scenarios successfully, and checked trace listing, filtering, and missing-run behavior through the built CLI. -
Inspected a later retained trace with 93 refused replies: 70 used DSML calls markup, 19 contained a JSON envelope, and the remainder used XML-like or hybrid forms. The scripted replay now covers an accepted standard-plus-nested DSML turn, an undeclared DSML tool, and malformed DSML, alongside the earlier prelude and correction cases. All ten scenarios pass against the built provider consumer.
-
Reproduced the reported WSL catalog failure through the actual terminal provider-settings flow, retained the real vendor-command failure and path probes, and re-verified discovery and advertised-model metadata against the official Linux 1.19.0 release asset.
-
Replayed provider setup with and without a session D-Bus and unlocked gnome-keyring. The unavailable store produced the corrective guidance before any key entry; the available store stored a placeholder credential, saved provider settings, and removed it again through the product's own path with no leftover item in the provider namespace. The retained reproducer passed 21 checks.
Compatibility and known issues
- Existing run and working-memory journal formats remain readable. Older source observations without exact range metadata refresh conservatively; local memory can be disabled explicitly. The native Deep Research plugin remains separately distributed.
- Known OpenCode DSML parser issues and whole-trace memory growth remain outside this release's source-reuse fix. See release notes for their concrete scope and the completed evidence.
Known review findings
- OpenCode DSML normalization can rewrite literal argument markers, accept a competing DSML block after a JSON envelope, and collapse duplicate keys in JSON-valued parameters. Host permissions still apply. These cases remain unresolved.
peritus runs traceeagerly buffers the trace and payload copies; large traces use additional memory.
Packages
Native packages cover Linux, macOS, and Windows on x86-64 and ARM64. Each package includes the client, daemon, terminal UI, and platform sandbox helper, with SHA-256 checksums, inventory, SBOM, and provenance. Unix packages also exercise actual installation and offline terminal startup in the release workflow. The Deep Research plugin is distributed separately through the module market.
Peritus v0.1.4
Added
- Search captured public conversation and tool output with Ctrl+F, using local ripgrep and a fallback when it is unavailable. Open complete matching entries and search captured history after reopening a run.
- Select files with the fuzzy Ctrl+O or @ picker, paste clipboard images with Ctrl+V, and edit unsent prompts in the configured external editor with Ctrl+G. Attachments retain explicit preview and confirmation.
- Copy the latest answer with Alt+C or select a code block with Alt+Y. Configure convenience shortcuts through
/keys, and choose persistent dark, light, or plain syntax themes through/theme. - Edit, hold, release, reorder, and withdraw queued steering from the keyboard while retaining the main prompt draft.
Fixed
- Show actual provider acknowledgement, reasoning status, and incoming structured-response byte counts. Preserve the observed phase through waiting heartbeats instead of saying that nothing has arrived while a reply is being generated.
- Preserve unrelated drafts through first-conversation file selection, deferred preview, attachment confirmation, and reopening a run. Continue clipboard-image preview after refreshed conversation metadata arrives.
- Prevent stale search results from selecting the wrong entry and keep copied code blocks within their original assistant answer. Display readable project-relative filenames in the picker while preserving explicit absolute paths.
Real testing
- Reuse the completed actual terminal, daemon, clipboard, editor, provider-progress, and transcript-search campaigns. Optimized terminal journeys passed 56 and 47 overlapping checks, including 36 generated draft-preservation actions; the final optimized attachment replay passed all five checks.
- Transcript search passed five fresh-process consumer runs against a 300-entry corpus, including actual ripgrep, absent-ripgrep fallback, Unicode, literal queries, restart, and private-cache boundaries. Local controls and attachment confirmation did not initiate new provider requests.
- Native release packages additionally exercise actual Unix installation and offline terminal startup. No unit tests, formal verification, or repository verification suites are part of this release workflow.
Compatibility
- Existing daemon protocol and saved conversations remain compatible. Transcript search covers public activity captured by the client; uncaptured older history and disconnected gaps cannot be reconstructed by this cache.
- Linux clipboard and terminal workflows were exercised directly. Native macOS and Windows clipboard helpers are included; the feature campaign did not exercise those helpers on native systems.
- The native Deep Research plugin remains separately distributed through the module market; this release does not change its wire compatibility contract.
Peritus v0.1.3
Added
- Recall submitted terminal instructions with Up/Down, search saved input with F3, and inspect pending steering with F4 while preserving the current draft.
Changed
- Show live edits, code diffs, source ranges, command results, and steering receipts in the terminal. Render Markdown headings, tables, lists, and fenced code with readable contrast while retaining complete tool details.
- Reuse unchanged file observations and checkpoint indexes, and observe command completion once instead of repeatedly scanning the full tracked candidate. Keep fresh observations at review and final settlement boundaries.
- Reuse accepted task designs and source evidence through steering and continuation instead of restarting discovery for a known implementation task.
- Keep stable evidence prefixes ahead of changing working state. Route eligible ChatGPT-account requests through an isolated official Codex cache anchor, with fallback before inference when setup is unavailable.
- Assemble context incrementally from retained exchange metadata and decoded immutable messages. Select history before loading archived bodies, and create obsolete-source receipts without rereading their old payloads.
- Reuse document bytes and sparse line offsets while file identity and change metadata match. Recheck current access on every read; changed sources, eviction, and larger documents retain ordinary fresh/streaming behavior.
Fixed
- Preserve unrelated settled results when one read in a tool batch becomes stale, and keep assistant text from reordering pending calls and results.
- Prevent cold checkpoint-index races from caching altered evidence, and recover Codex routing-anchor failures without an output-offset panic or replaying accepted inference.
- Preserve terminal input history and unsent drafts across delayed replies, paging, conversation changes, and reconnects.
Real testing
- Reuse the completed terminal feedback/formatting, checkpoint/cache, provider-routing, and incremental-context campaigns. The final context campaign passed 240 actions, 68 independent checks, saved recovery/order replays, and a real TUI/daemon/provider journey.
- A 96-page replay returned identical output with about 97.9% fewer logical read bytes. Cache-pressure and source-change replays verified that omitted and obsolete history does not repeatedly reload large old bodies. These are bounded Linux measurements, not a universal speed or provider-cache guarantee.
- Native release packages additionally exercise actual Unix installation and offline terminal startup. No unit tests, formal verification, or repository verification suites are part of this release workflow.
Compatibility
- Existing saved run and working-context formats remain readable; the new caches are disposable host projections. Current source truth, permissions, pending-operation recovery, and provider capacity still apply.
- The native Deep Research plugin remains separately distributed through the module market. This release does not change its wire compatibility contract.
Peritus v0.1.2
Changed
- Perform one startup grounding check per run/workspace, then hand the task plan to implementation. Retries, role changes, compaction, and restarts reuse that completed check instead of restarting repository discovery.
- Reuse hash-verified source observations and accepted task designs. Preserve relevant source and skill evidence through context reconstruction while refreshing changed targets and applying current permissions.
- Deliver concise role instructions and load detailed skills as needed. Record read reuse, provider input/cache usage, context savings, and time to the first actual change.
Fixed
- Make plain
peritus shutdownstop the current user's local daemon without requiring an unknown endpoint, including graceful concurrent shutdown recovery. - Preserve actionable Codex errors when advisory items precede the terminal failure, including unavailable-model diagnostics and configured-provider recovery.
- Hand the exact accepted guided-design draft to independent review and avoid a new provider request solely to add a Markdown heading to a useful task plan.
Real testing
- Reuse the completed real-interface campaigns for shutdown, Codex failures, source/context reuse, and the single-check designer handoff. The final grounding campaign passed 19 readiness/handoff scenarios and 26 retained host/context scenarios.
- A real provider reached implementation on a disposable Peritus checkout after one grounding call, then after zero new calls on a steered restart. A complete CLI change passed actual command-output checks while preserving a concurrent source edit.
- Native release packages additionally exercise actual Unix installation and offline terminal startup. No unit tests, formal verification, or repository verification suites are part of this release workflow.
Compatibility
- Existing source-observation receipts remain readable. Startup readiness is separate from source truth: current reads, hashes, permissions, and behavioral acceptance still govern changes.
- The Deep Research plugin remains separately distributed through the module market; this patch does not change its native plugin compatibility contract.
Peritus v0.1.1
Peritus 0.1.1 adds native Rust plugins, built-in web research, reviewer-model selection, and automatic browser-runtime preparation.
Added
- Discover, install, and explicitly enable self-contained native Rust plugins through the module market in the terminal and browser. The daemon retains permission, provider, tool, and lifecycle authority.
- Add built-in Rust web search and retained page reading without an API key, containers, or search-service setup. Read JavaScript pages through the browser runtime and retrieve exact saved source pages.
- Select a separate reviewer provider and model during startup or provider settings while preserving the ordinary coding model.
- Bundled and installable declarative workflow modules with explicit enablement, read-only tool permissions, separate role memories, immutable package identities, and checkpointed stop/resume. Discover them with
/modulesorperitus modules list. - A bundled Source brief workflow: gatherer, skeptic, synthesis, then final fact checking. Record the broader Deep Research plan and source-admission policy separately.
Changed
- Support Deep Research v1.4.0 from the separate module market: live controversy research, attributed accusations and responses, durable report revisions, and exact checked-report handoff to Design.
- Support optional, steerable Sicko mode with durable checked-report checkpoints, pause/resume, and continued research without a cumulative token, time, source, or round budget. Ordinary research remains the default; provider capacity and machine resources still apply.
- Automatically prepare the private Python, Playwright, and Chromium runtime during native installation, with first-launch preparation and repair for portable or system-package installations.
- Preserve complete recent exchanges that fit the provider context and keep recoverable provider retries from consuming a cumulative local timeout.
Fixed
- Preserve a terminal message submitted while an exact run's conversation binding loads; send it once after binding, retaining explicit mode and newer drafts.
- Cancel plugin exchanges even when stdin is blocked, terminate owned process groups/jobs, serialize stop completion, and retain UTF-8 diagnostic boundaries.
- Refresh native module controls after reconnect and accept steering or pause commands while module work is active.
- Keep long report pages and their continuation instructions intact; bind historical report and evidence readback to the exact checked report.
- Repair managed Chromium sandbox startup on Ubuntu's AppArmor-restricted hosts with exact executable-path profiles, preserving global restrictions and browser sandboxing.
Real testing
- Reuse the completed real-interface campaigns for reviewer setup, native search/page reading, module installation and recovery, automatic browser-runtime setup, and provider-driven terminal/browser research controls. Release builds additionally exercise actual Unix installation and offline terminal startup.
- Research workflow and focused controversy-remake evidence passed; the broader research-quality rubric remains partial, and earlier neutral-topic discovery and delivery failures are retained. This release does not claim exhaustive research quality or native plugin coverage on every operating system.
- No unit tests, formal verification, or repository verification suites are part of this release workflow.
Compatibility
- Deep Research is installed separately from the module market. Sicko mode requires this host's continuing-checkpoint service. The market currently supplies its native Linux x86-64 plugin; the six Peritus host packages do not imply six plugin binaries.
Real-operation evidence: web search, module market, browser runtime, Ubuntu sandbox repair, and research controls and limits.
Native delivery: all six platform builds succeeded. Actual installation, offline TUI connection, and clean daemon shutdown passed on Linux and macOS for both architectures. Windows CLI/daemon versions were executed during native assembly. Downloaded archives, declared payloads, source bindings, checksums, and signed provenance were inspected before publication.
Peritus v0.1.0
Peritus 0.1.0 improves continuity for long-running coding jobs and large retained workspaces.
Changed
- Remove host-imposed coding token budgets and retained working-memory quotas. Keep growing runs usable through paged checkpoints, exact evidence retrieval, streaming recovery, and indexed file baselines.
- Automatically widen older saved working-state policies while preserving entry identities, source references, semantic revisions, and pending-operation recovery. Existing checkpoint formats remain readable.
- Fit the current model view to the selected provider and expose exact cursor pages for retained entry text and large reference lists. Provider capacity and available machine resources remain applicable.
Fixed
- Keep binary database pages and retained NUL-bearing evidence out of model text blocks while preserving file fingerprints, exact evidence identities, and paged retrieval, so ordinary coding runs can continue into their next role.
- Keep in-place coding runs operating while scoped database/runtime files change: derive candidate identity axes from one captured observation, tolerate vanished runtime inventory entries, and restrict automatic command before-images to exact file declarations while retaining directory descendants as comparison evidence.
- Recover valid traces larger than 1 GiB and run metadata larger than 128 MiB. Remove the former observation, entry, text, link, update, snapshot, and scope-inventory cutoffs.
- Preserve the original contents of separately requested cache files when directory inventories exclude those files. Retain earlier before-images through overlapping declarations and legacy journal migration.
- Accept large model-protocol archives, event frames, JSON values, and provider metadata without the former local quotas.
Real testing
- Retain reproducible large-state, binary-evidence, live-runtime, and provider-driven terminal journeys. These include 130,000 observations, 5,000-file inventories, exact persistence/reopening, and a real 33-operation memory update with forty observed source references.
- Reuse the completed develop campaigns for this release. Native package builds additionally exercise installation and real offline terminal startup on Unix. No unit tests or formal verification suites are part of this release workflow.
Compatibility
- New checkpoints use schema 3; older checkpoint schemas 1 and 2 are migrated automatically. Downgrading to an older binary requires restoring its pre-upgrade state backup.
Real-operation evidence: retained-state growth, token budgets, binary evidence, and live runtime files.