diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index f9d2b305..98f187a8 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -10,11 +10,12 @@ If you are learning the product for the first time, start with: ## Release posture -`v19.0.1` is the current release. Applications open a `Runtime`, address causal +`v19.0.2` is the current release. Applications open a `Runtime`, address causal `Lane`s, write validated `Intent`s, consume bounded `Observation` streams of -`Reading`s, and keep `Receipt`s. The patch adds the safe one-shot retained-v18 -migration without changing the v19 application grammar. Git history and -git-cas remain separate infrastructure concerns composed behind the Runtime. +`Reading`s, and keep `Receipt`s. The patch makes the safe one-shot retained-v18 +migration observable at per-commit granularity and durable after the TUI exits, +without changing the v19 application grammar. Git history and git-cas remain +separate infrastructure concerns composed behind the Runtime. The longer release notes live in [CHANGELOG.md](CHANGELOG.md). The runtime architecture below describes current implementation boundaries, not aspirational diff --git a/CHANGELOG.md b/CHANGELOG.md index c5de3071..81ea0636 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [19.0.2] - 2026-07-29 + +### Release notes + +`v19.0.2` makes the safe v18-to-v19 migration observable and unambiguous +throughout long inventories and rewrites. It emits progress for every commit, +keeps terminal rendering bounded without hiding phase, writer, or final +transitions, and prints durable success, authority-change, scratch-verification, +and recovery-ref evidence after the framed application exits. + +This patch does not change the v19 runtime API, storage format, package +entrypoints, or application grammar. + +### Fixed + +- Published inventory and rewrite progress for every migrated commit while + coalescing only terminal redraws on a bounded cadence. +- Preserved phase, writer, named-step, and final progress at rendering + boundaries so long migrations no longer appear frozen. +- Printed an explicit post-TUI report with migration status, repository, graph, + writer count, scratch verification, authoritative-ref change status, and + recovery-ref prefix. +- Contained terminal and scheduled renderer failures so display I/O cannot + replace, mask, or asynchronously terminate the migration outcome. + +### Documentation + +- Added the streaming indexed recursive WARP architecture plan as future design + evidence; it does not claim that the runtime implementation has landed. + ## [19.0.1] - 2026-07-28 ### Release notes diff --git a/README.md b/README.md index bcfe9281..c190da0c 100644 --- a/README.md +++ b/README.md @@ -46,19 +46,21 @@ It lets you: ## Latest release -`v19.0.1` is the current release. It keeps the public runtime boundary +`v19.0.2` is the current release. It keeps the public runtime boundary introduced in v19.0.0—open `Runtime`, address causal `Lane`s, write validated `Intent`s, consume bounded `Observation` streams of `Reading`s, and retain -`Receipt`s—and replaces the unsafe v19.0.0 retained-state migrator. Existing -repositories with retained v18 state require the v19.0.1 one-shot migration -below before any v19 process opens them. Do not use the v19.0.0 migrator on an -authoritative repository. - -The exact merged-main release gate's representative migrated-v18 retained scan -was 31.1% faster cold, 32.1% faster warm, used 20.1–21.3% less operation CPU, -and issued 46.6% fewer Git commands than published v18.2.1. These measurements -cover the bounded 16-property fixture workload; they are not a universal -workload claim. +`Receipt`s—and includes the safe retained-state migrator introduced in v19.0.1. +The patch publishes per-commit progress during long inventory and rewrite +phases and prints durable completion and recovery evidence after the TUI exits. +Existing repositories with retained v18 state require the v19.0.2 one-shot +migration below before any v19 process opens them. Do not use the v19.0.0 +migrator on an authoritative repository. + +The v19.0.1 merged-main release gate's representative migrated-v18 retained +scan was 31.1% faster cold, 32.1% faster warm, used 20.1–21.3% less operation +CPU, and issued 46.6% fewer Git commands than published v18.2.1. These +measurements cover the bounded 16-property fixture workload; they are not a +universal workload claim. See [CHANGELOG.md](CHANGELOG.md) for the full in-repository release notes. @@ -73,7 +75,7 @@ domain modules provide the validated intents and observers for an application. > starting the application, and run the confirmed migration: > > ```bash -> npm exec --package=@git-stunts/git-warp@19.0.1 -- \ +> npm exec --package=@git-stunts/git-warp@19.0.2 -- \ > git-warp-v18-to-v19 \ > --repo /path/to/repository \ > --graph diff --git a/docs/migrations/v19/README.md b/docs/migrations/v19/README.md index e9d6b343..e05a53e8 100644 --- a/docs/migrations/v19/README.md +++ b/docs/migrations/v19/README.md @@ -1,8 +1,8 @@ # v19 Public API Migration Guide > **Status:** The public grammar shipped in `v19.0.0`. The retained-state -> migration described below requires `v19.0.1`; do not use the `v19.0.0` -> migrator on an authoritative repository. v19.0.1 ships the generic +> migration described below requires `v19.0.2`; do not use the `v19.0.0` +> migrator on an authoritative repository. v19.0.2 ships the generic > constructors and an executable generated-SDK reference; each application > still owns the renderer that assigns domain meaning. @@ -27,7 +27,7 @@ not fixed: one Git repository may contain several independent WARP graphs. Run the migration once: ```bash -npm exec --package=@git-stunts/git-warp@19.0.1 -- git-warp-v18-to-v19 \ +npm exec --package=@git-stunts/git-warp@19.0.2 -- git-warp-v18-to-v19 \ --repo /path/to/repository \ --graph ``` @@ -223,7 +223,7 @@ Use `--dry-run` only when you explicitly want a rehearsal whose result will be discarded: ```bash -npm exec --package=@git-stunts/git-warp@19.0.1 -- git-warp-v18-to-v19 \ +npm exec --package=@git-stunts/git-warp@19.0.2 -- git-warp-v18-to-v19 \ --repo /path/to/repository \ --graph \ --dry-run @@ -367,7 +367,7 @@ meaning. ### Prerequisites -Use Node.js 22.18 or newer, install `@git-stunts/git-warp@19.0.1` in the +Use Node.js 22.18 or newer, install `@git-stunts/git-warp@19.0.2` in the application, and install the exact Wesley version used by the executable reference. Wesley is a native Rust CLI; install the [Rust toolchain and Cargo](https://rustup.rs/) first when `cargo` is not @@ -466,7 +466,7 @@ above: npm run check:users ``` -git-warp v19.0.1 does not ship a universal renderer that guesses arbitrary +git-warp v19.0.2 does not ship a universal renderer that guesses arbitrary application semantics. The renderer is deliberately application-owned. The checked-in reference supports `NODE_ADD`, `PROPERTY_SET`, bounded `PROPERTY` Observers, string decoding, and the exact `registerUser`, `assignRole`, diff --git a/docs/operations/README.md b/docs/operations/README.md index ebe0977b..57b7e55b 100644 --- a/docs/operations/README.md +++ b/docs/operations/README.md @@ -16,8 +16,9 @@ It does not mutate authoritative history or silently repair git-cas. ## Migrate retained v18 state -Use only the v19.0.1 migrator on an authoritative repository. The v19.0.0 -migrator is unsafe for retained v18 state. +Use the v19.0.2 migrator on an authoritative repository. The v19.0.1 migrator +is safe but lacks complete per-commit progress and durable post-TUI completion +evidence. The v19.0.0 migrator is unsafe for retained v18 state. Prepare and test the v19 application without opening the authoritative repository. During the maintenance window, stop every writer and make an @@ -37,7 +38,7 @@ names, reports source and scratch capacity, and asks for confirmation: ```bash GRAPH_NAME=your-graph-name -npm exec --package=@git-stunts/git-warp@19.0.1 -- \ +npm exec --package=@git-stunts/git-warp@19.0.2 -- \ git-warp-v18-to-v19 \ --repo "$REPOSITORY" \ --graph "$GRAPH_NAME" diff --git a/docs/topics/README.md b/docs/topics/README.md index 8191ea1c..e51f4b98 100644 --- a/docs/topics/README.md +++ b/docs/topics/README.md @@ -5,13 +5,13 @@ specific task. ## Current release -`v19.0.1` is the current release. It ships the Runtime, Lane, Intent, Observer, +`v19.0.2` is the current release. It ships the Runtime, Lane, Intent, Observer, Observation, Reading, and Receipt application vocabulary, bounded retained -reads, and the safe one-shot v18-to-v19 substrate migration. Do not use the -v19.0.0 migrator on an authoritative repository. Operator workflows live -outside the topic shelf in [Operations](../operations/). The full -breaking-change, migration, and performance narrative lives in the root -[CHANGELOG](../../CHANGELOG.md). +reads, and the safe one-shot v18-to-v19 substrate migration with per-commit +progress and durable completion evidence. Do not use the v19.0.0 migrator on an +authoritative repository. Operator workflows live outside the topic shelf in +[Operations](../operations/). The full breaking-change, migration, and +performance narrative lives in the root [CHANGELOG](../../CHANGELOG.md). ## Start here diff --git a/docs/topics/api/README.md b/docs/topics/api/README.md index e2a0b09d..c885f32c 100644 --- a/docs/topics/api/README.md +++ b/docs/topics/api/README.md @@ -1,6 +1,6 @@ # v19 Public Vocabulary Checkpoint -> **Status:** Current in `v19.0.1`; introduced in `v19.0.0`. +> **Status:** Current in `v19.0.2`; introduced in `v19.0.0`. > > This document is the normative product vocabulary and public-surface design. > The Runtime, Lane, Intent, Observer, streaming Observation, Reading, Receipt, diff --git a/jsr.json b/jsr.json index 99b68560..98d693bd 100644 --- a/jsr.json +++ b/jsr.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/git-warp", - "version": "19.0.1", + "version": "19.0.2", "imports": { "roaring": "npm:roaring@^2.7.0" }, diff --git a/package-lock.json b/package-lock.json index 76b7a86a..3936ae14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@git-stunts/git-warp", - "version": "19.0.1", + "version": "19.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@git-stunts/git-warp", - "version": "19.0.1", + "version": "19.0.2", "license": "Apache-2.0", "workspaces": [ "packages/*" @@ -8005,7 +8005,7 @@ }, "packages/warp-adapters": { "name": "@git-stunts/warp-adapters", - "version": "19.0.1", + "version": "19.0.2", "license": "Apache-2.0", "engines": { "node": ">=22.0.0" @@ -8013,7 +8013,7 @@ }, "packages/warp-kernel": { "name": "@git-stunts/warp-kernel", - "version": "19.0.1", + "version": "19.0.2", "license": "Apache-2.0", "engines": { "node": ">=22.0.0" @@ -8021,7 +8021,7 @@ }, "packages/warp-orset": { "name": "@git-stunts/warp-orset", - "version": "19.0.1", + "version": "19.0.2", "license": "Apache-2.0", "engines": { "node": ">=22.0.0" diff --git a/package.json b/package.json index 27822e1f..7ca9291c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/git-warp", - "version": "19.0.1", + "version": "19.0.2", "description": "Git-native causal history runtime for intent writes, timeline reads, and receipts.", "type": "module", "license": "Apache-2.0", diff --git a/packages/warp-adapters/package.json b/packages/warp-adapters/package.json index 4e466edf..e127898a 100644 --- a/packages/warp-adapters/package.json +++ b/packages/warp-adapters/package.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/warp-adapters", - "version": "19.0.1", + "version": "19.0.2", "description": "Infrastructure adapters: Git/CAS, crypto, and HTTP for git-warp.", "private": true, "type": "module", diff --git a/packages/warp-kernel/package.json b/packages/warp-kernel/package.json index 7cd5a570..e44a9cc8 100644 --- a/packages/warp-kernel/package.json +++ b/packages/warp-kernel/package.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/warp-kernel", - "version": "19.0.1", + "version": "19.0.2", "description": "Domain engine: services, WarpState, and controllers for git-warp.", "private": true, "type": "module", diff --git a/packages/warp-orset/package.json b/packages/warp-orset/package.json index 847b7974..9b0ce668 100644 --- a/packages/warp-orset/package.json +++ b/packages/warp-orset/package.json @@ -1,6 +1,6 @@ { "name": "@git-stunts/warp-orset", - "version": "19.0.1", + "version": "19.0.2", "description": "ORSet engine: trie, cursor, cache, and session primitives for git-warp.", "private": true, "type": "module", diff --git a/scripts/v18-to-v19/README.md b/scripts/v18-to-v19/README.md index 5ab7cc2f..b7b0fd44 100644 --- a/scripts/v18-to-v19/README.md +++ b/scripts/v18-to-v19/README.md @@ -25,7 +25,7 @@ Stop every process that can write to the repository and make a normal backup. After installing v19 without starting the application, run the migration: ```bash -npm exec --package=@git-stunts/git-warp@19.0.1 -- git-warp-v18-to-v19 \ +npm exec --package=@git-stunts/git-warp@19.0.2 -- git-warp-v18-to-v19 \ --repo /path/to/repository \ --graph ``` @@ -72,7 +72,7 @@ public API, and validates its receipt. Use `--dry-run` only when you explicitly want a disposable rehearsal: ```bash -npm exec --package=@git-stunts/git-warp@19.0.1 -- git-warp-v18-to-v19 \ +npm exec --package=@git-stunts/git-warp@19.0.2 -- git-warp-v18-to-v19 \ --repo /path/to/repository \ --graph \ --dry-run diff --git a/test/unit/scripts/v19-migration-guidance.test.ts b/test/unit/scripts/v19-migration-guidance.test.ts index 497f321f..0f508940 100644 --- a/test/unit/scripts/v19-migration-guidance.test.ts +++ b/test/unit/scripts/v19-migration-guidance.test.ts @@ -10,6 +10,8 @@ const MIGRATION_GUIDE = readFileSync(join(ROOT, 'docs/migrations/v19/README.md') const OPERATIONS_GUIDE = readFileSync(join(ROOT, 'docs/operations/README.md'), 'utf8'); const ROOT_README = readFileSync(join(ROOT, 'README.md'), 'utf8'); const TOPICS_INDEX = readFileSync(join(ROOT, 'docs/topics/README.md'), 'utf8'); +const SAFE_MIGRATION_COMMAND = + /npm exec --package=@git-stunts\/git-warp@19\.0\.2 -- \\\r?\n(?:> )?[ \t]+git-warp-v18-to-v19/u; function generatedSdkSection(): string { const start = MIGRATION_GUIDE.indexOf('## Generated Domain SDKs'); @@ -20,15 +22,15 @@ function generatedSdkSection(): string { } describe('v19 migration guidance', () => { - it('keeps every public release signpost on v19.0.1', () => { - expect(ROOT_README).toContain('`v19.0.1` is the current release'); - expect(ARCHITECTURE).toContain('`v19.0.1` is the current release'); - expect(TOPICS_INDEX).toContain('`v19.0.1` is the current release'); - expect(API_GUIDE).toContain('Current in `v19.0.1`'); + it('keeps every public release signpost on v19.0.2', () => { + expect(ROOT_README).toContain('`v19.0.2` is the current release'); + expect(ARCHITECTURE).toContain('`v19.0.2` is the current release'); + expect(TOPICS_INDEX).toContain('`v19.0.2` is the current release'); + expect(API_GUIDE).toContain('Current in `v19.0.2`'); }); - it('keeps the root README on the safe one-pass v19.0.1 migration', () => { - expect(ROOT_README).toContain('@git-stunts/git-warp@19.0.1'); + it('keeps the root README on the safe one-pass v19.0.2 migration', () => { + expect(ROOT_README).toMatch(SAFE_MIGRATION_COMMAND); expect(ROOT_README).toContain('--repo /path/to/repository'); expect(ROOT_README).toContain('--graph '); expect(ROOT_README).toContain('--dry-run'); @@ -54,7 +56,7 @@ describe('v19 migration guidance', () => { it('gives operators one complete maintenance-window checklist', () => { expect(OPERATIONS_GUIDE).toContain('## Migrate retained v18 state'); - expect(OPERATIONS_GUIDE).toContain('@git-stunts/git-warp@19.0.1'); + expect(OPERATIONS_GUIDE).toMatch(SAFE_MIGRATION_COMMAND); expect(OPERATIONS_GUIDE).toContain('git clone --mirror --no-hardlinks'); expect(OPERATIONS_GUIDE).toContain('already-current'); expect(OPERATIONS_GUIDE).toContain('Keep the recovery refs');