Sylin.Koan.Data.Cutover 1.0.44

dotnet add package Sylin.Koan.Data.Cutover --version 1.0.44
                    
NuGet\Install-Package Sylin.Koan.Data.Cutover -Version 1.0.44
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sylin.Koan.Data.Cutover" Version="1.0.44" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sylin.Koan.Data.Cutover" Version="1.0.44" />
                    
Directory.Packages.props
<PackageReference Include="Sylin.Koan.Data.Cutover" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sylin.Koan.Data.Cutover --version 1.0.44
                    
#r "nuget: Sylin.Koan.Data.Cutover, 1.0.44"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sylin.Koan.Data.Cutover@1.0.44
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sylin.Koan.Data.Cutover&version=1.0.44
                    
Install as a Cake Addin
#tool nuget:?package=Sylin.Koan.Data.Cutover&version=1.0.44
                    
Install as a Cake Tool

Sylin.Koan.Data.Cutover

Use this package for one deliberate operational move: copy the active default Entity database into a new, empty configured source, verify exact logical readback, and atomically make that source the host's new default. SQLite, MongoDB, and PostgreSQL are the first graduated providers, including moves between them. The package is discovered by AddKoan(); there is no manual registrar.

Install

dotnet add package Sylin.Koan.Data.Cutover

Requirements

This supported envelope is intentionally narrow. It requires one host, no external writers during the run, graduated SQLite, MongoDB, or PostgreSQL routes, string-keyed default-routed Entity roots, a Managed + ReadWrite empty target, and no segmentation, managed fields, stored transforms, custom read filters, delete overrides, or compatibility mappings on the included roots. Plan() reports a stable blocker and correction for anything outside that envelope.

Configure two physically distinct sources and keep the configured Default source unchanged:

{
  "Koan": {
    "Data": {
      "Sources": {
        "Default": {
          "Adapter": "sqlite",
          "ConnectionString": "Data Source=./data/current.db"
        },
        "Mongo": {
          "Adapter": "mongo",
          "ConnectionString": "mongodb://localhost:27017",
          "Database": "app_next",
          "StorageLifecycle": "Managed",
          "Access": "ReadWrite"
        },
        "Postgres": {
          "Adapter": "postgres",
          "ConnectionString": "Host=localhost;Database=app_next;Username=app;Password=...",
          "StorageLifecycle": "Managed",
          "Access": "ReadWrite"
        }
      },
      "Cutover": {
        "WriterOwnership": "HostExclusiveOrExternallyQuiesced"
      }
    }
  }
}

Usage

Assert writer ownership only when no process can write either database outside this host's Koan Data paths. Then plan and run the transition:

using Koan.Data.Core;
using Koan.Data.Cutover;

var transition = Data.Source("Mongo").PromoteToDefault();
var plan = await transition.Plan(ct);

if (!plan.CanRun)
{
    foreach (var blocker in plan.Blockers)
        logger.LogError("{Code}: {Reason} Correction: {Correction}",
            blocker.Code, blocker.Reason, blocker.Correction);
    return;
}

var receipt = await transition.Run(ct);

// A later verified move uses exactly the same application language.
var postgresReceipt = await Data.Source("Postgres").PromoteToDefault().Run(ct);

Use the verified default-route cutover how-to for the complete maintenance-window checklist, blocker handling, durable-state preservation, and quarantine recovery procedure.

Guarantees and boundaries

The active pointer is persisted outside both databases at .Koan/data/active-route.json beneath the host content root; override it with Koan:Data:Route:StatePath. Preserve that file with the deployment. After activation, unqualified Entity and Direct calls use the target, retained default-derived repositories fail as stale, and explicit EntityContext.Source("Default") access still addresses the old configured source. Koan never performs an automatic rollback.

A failed run leaves the old default active. Once target mutation could have begun, the target is durably quarantined and normal Data access rejects it until an operator empties or reprovisions it and a later verified run succeeds. See TECHNICAL.md and DATA-0111 for the complete internal and architecture contracts.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.44 121 9/13/2026
1.0.42 100 9/12/2026
1.0.40 96 9/12/2026
1.0.39 108 9/10/2026
1.0.36 108 9/10/2026
1.0.33 92 9/9/2026
1.0.30 97 9/9/2026
1.0.28 97 9/9/2026
1.0.24 97 9/9/2026
1.0.23 106 9/9/2026
1.0.19 112 9/5/2026
1.0.18 122 8/30/2026
1.0.17 104 8/30/2026
1.0.16 109 8/28/2026
1.0.15 110 8/28/2026
1.0.14 108 8/28/2026
1.0.13 99 8/28/2026
1.0.12 103 8/28/2026
1.0.11 119 8/27/2026
1.0.7 119 8/25/2026
Loading failed