Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

## Unreleased

## 3.4.11 - 2026-11-03

- Exclude only root-level `.codex-provisioning-<16-hex>.guard` files from backup,
inventory, safety copies, and legacy restore payloads. The official Codex Windows
sandbox creates these empty delete-on-close guards solely to pin directories
during privileged provisioning; chats, projects, settings, near-matching names,
nested guard files, and all other `*.guard` files remain mandatory.
- Keep the operation header and current status visibly failed after an exception
instead of returning to the misleading `Ready` state.

## 3.4.10 - 2026-11-02

- Replaced the single `*.dist-info` exception with a complete, read-only preflight
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
**One-click Codex backup, restore, and Windows PC migration.**

[![Windows](https://img.shields.io/badge/Windows-10%20%7C%2011-0078D4?logo=windows)](https://github.com/dkwolf1/Codex-Lifeboat)
[![Stable: 3.4.10](https://img.shields.io/badge/stable-v3.4.10-16a34a)](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.10)
[![Stable: 3.4.11](https://img.shields.io/badge/stable-v3.4.11-16a34a)](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.11)
[![CI](https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/ci.yml/badge.svg)](https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

[Wiki](https://github.com/dkwolf1/Codex-Lifeboat/wiki) · [Nederlands](docs/nl/README.md) · [Security](SECURITY.md) · [Documentation](docs/IMPLEMENTATION-ROADMAP.md)

> **Stable release:** version 3.4.10 preflights complete Codex project dependency
> trees and requires explicit review of the exact inaccessible paths before they
> can be excluded. Large restores use conservative peak-space and runtime reserve
> checks, and rollback is still attempted if a full disk prevents an error-journal
> update. It passes all 95 source checks and 12 automated compatibility scenarios.
> **Stable release:** version 3.4.11 safely ignores only Codex's root-level,
> delete-on-close Windows provisioning guards while keeping every ordinary or
> near-matching file mandatory. It retains the reviewed dependency preflight and
> large-restore protections from 3.4.10, and passes all 97 source checks and 12
> automated compatibility scenarios.
> The migration workflow also has prior
> physical Windows 11 PC A → PC B → PC A evidence. Keep an independent copy of
> irreplaceable data and read the [testing guide](docs/TESTING-GUIDE.md).
Expand All @@ -22,7 +22,7 @@ https://mechscript.nl/en/codex-lifeboat-backup-restore-migrate-en/

## Download for Windows

### [Download Codex Lifeboat 3.4.10 for Windows](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.10)
### [Download Codex Lifeboat 3.4.11 for Windows](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.11)

On the release page, download only:

Expand Down
2 changes: 1 addition & 1 deletion build.ps1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[CmdletBinding()]
param(
[string]$Version = '3.4.10',
[string]$Version = '3.4.11',
[string]$PythonPath,
[switch]$SkipTests
)
Expand Down
6 changes: 3 additions & 3 deletions docs/KNOWN-LIMITATIONS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Known limitations of release 3.4.10
# Known limitations of release 3.4.11

1. There is no published stable import contract for the local Codex database.
The assistant therefore inspects schemas and must be retested after major future
Expand Down Expand Up @@ -40,11 +40,11 @@
normalization. Edited records, changed metadata, malformed JSONL, an empty
rollout, destination-ahead history, and arbitrary divergence require an
explicit user decision. Lifeboat does not perform a general-purpose chat merge.
13. Version 3.4.10 is stable after automated source/EXE/ZIP testing and a successful
13. Version 3.4.11 is stable after automated source/EXE/ZIP testing and a successful
physical Windows 11 A-to-B-to-A hand-off. A physical Windows 10 run and removal
of a real USB drive during an active write are not yet documented.
14. Restore is transactional with automatic rollback but is not yet a general
resumable file-copy engine. Very large restores can take substantial time.
Version 3.4.10 conservatively accounts for logical bytes, estimated allocation
Version 3.4.11 conservatively accounts for logical bytes, estimated allocation
overhead and a safety reserve, and rechecks free space during large writes;
another process can still consume space unexpectedly.
14 changes: 7 additions & 7 deletions docs/RELEASE-CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

[Nederlands](nl/RELEASE-CHECKLIST.md)

This checklist publishes Codex Lifeboat 3.4.10 as a **stable release**. The tag
This checklist publishes Codex Lifeboat 3.4.11 as a **stable release**. The tag
workflow builds and validates fresh release assets, creates
their checksums and provenance attestations, and publishes the GitHub release.

## Before pushing

- Confirm that `git status --short` contains only intended 3.4.10 changes.
- Confirm that `git status --short` contains only intended 3.4.11 changes.
- Confirm that no real backup, database, token, `.env`, EXE, ZIP, or build
directory is staged.
- Keep the generated `dist` directory locally; `.gitignore` deliberately prevents
it from entering the repository.
- Do not create the `v3.4.10` tag until the `main` CI run is green.
- Do not create the `v3.4.11` tag until the `main` CI run is green.

## Publish with PowerShell

Expand All @@ -31,15 +31,15 @@ Wait until the `main` CI run is green at
<https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/ci.yml>. Then run:

```powershell
git tag -a v3.4.10 -m "Codex Lifeboat 3.4.10 stable release"
git push origin v3.4.10
git tag -a v3.4.11 -m "Codex Lifeboat 3.4.11 stable release"
git push origin v3.4.11
```

The tag triggers `.github/workflows/release.yml`. Do **not** also create a manual
release with the same tag: the workflow creates it as the stable latest release.
Follow it at
<https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/release.yml>, then
open <https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.10>.
open <https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.11>.

## Verify the published release

Expand All @@ -64,7 +64,7 @@ gh attestation verify .\Codex-Lifeboat-Windows-x64-Portable.zip --repo dkwolf1/C

## Stable-release evidence

The 95-check source/EXE/ZIP gate, 12/12 automated Windows scenarios, and a physical
The 97-check source/EXE/ZIP gate, 12/12 automated Windows scenarios, and a physical
Windows 11 PC A → PC B → PC A workflow all passed. The physical workflow included
both verify operations and opening and continuing work in Codex after restore.
Windows 10 and USB-interruption coverage remain documented as pending. Public
Expand Down
6 changes: 3 additions & 3 deletions docs/nl/KNOWN-LIMITATIONS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Bekende grenzen van release 3.4.10
# Bekende grenzen van release 3.4.11

1. OpenAI publiceert geen stabiel importcontract voor de lokale Codex-database.
De app gebruikt daarom schema-inspectie en moet na toekomstige grote
Expand Down Expand Up @@ -43,11 +43,11 @@
Gewijzigde records of metadata, ongeldige JSONL, een lege rollout, een langere
doelchat en iedere andere afwijking vragen een expliciete gebruikerskeuze.
Lifeboat voert geen algemene chatmerge uit.
13. Versie 3.4.10 is stabiel na bron-, EXE- en uitgepakte-ZIP-tests en een geslaagde
13. Versie 3.4.11 is stabiel na bron-, EXE- en uitgepakte-ZIP-tests en een geslaagde
fysieke Windows 11-route van A naar B en terug. Een fysieke Windows 10-test en
het lostrekken van een echte USB-stick tijdens schrijven zijn nog niet vastgelegd.
14. Herstel is transactioneel met automatische rollback, maar nog geen algemeen
hervatbare bestandskopieerengine. Zeer grote restores kunnen veel tijd kosten.
Versie 3.4.10 telt logische bytes, geschatte bestandssysteemallocatie en een
Versie 3.4.11 telt logische bytes, geschatte bestandssysteemallocatie en een
veiligheidsreserve conservatief mee en controleert vrije ruimte opnieuw tijdens
grote schrijfacties; een ander proces kan ruimte nog steeds onverwacht vullen.
13 changes: 6 additions & 7 deletions docs/nl/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@

[Wiki](https://github.com/dkwolf1/Codex-Lifeboat/wiki) · [English](../../README.md) · [Beveiliging](../../SECURITY.md) · [Documentatie](IMPLEMENTATION-ROADMAP.md)

> **Stabiele release:** versie 3.4.10 controleert vooraf volledige Codex-
> dependencybomen en vereist expliciete goedkeuring van de exacte ontoegankelijke
> paden voordat ze mogen worden uitgesloten. Grote restores gebruiken een
> conservatieve piekruimte- en runtime-reservecontrole; rollback wordt ook gestart
> als een volle schijf het foutjournaal niet kan bijwerken. Alle 95 broncontroles en
> 12 geautomatiseerde compatibiliteitsscenario's slagen. Voor de
> **Stabiele release:** versie 3.4.11 negeert veilig alleen de root-level,
> delete-on-close Windows-provisioningguards van Codex; gewone en bijna gelijknamige
> bestanden blijven verplicht. De gecontroleerde dependency-preflight en
> restorebeveiliging uit 3.4.10 blijven behouden. Alle 97 broncontroles en 12
> geautomatiseerde compatibiliteitsscenario's slagen. Voor de
> migratiewerkwijze bestaat bovendien eerder fysiek bewijs van een Windows 11-
> route van pc A naar pc B en terug. Bewaar onvervangbare gegevens ook apart en
> lees de [testhandleiding](TESTHANDLEIDING.md).

## Downloaden voor Windows

### [Download Codex Lifeboat 3.4.10](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.10)
### [Download Codex Lifeboat 3.4.11](https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.11)

Download op de releasepagina uitsluitend dit bestand:

Expand Down
14 changes: 7 additions & 7 deletions docs/nl/RELEASE-CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

[English](../RELEASE-CHECKLIST.md)

Deze checklist publiceert Codex Lifeboat 3.4.10 als **stabiele release**. De
Deze checklist publiceert Codex Lifeboat 3.4.11 als **stabiele release**. De
tag-workflow bouwt en controleert nieuwe releasebestanden, maakt de
checksums en herkomstverklaringen en publiceert de GitHub-release.

## Vóór het pushen

- Controleer dat `git status --short` alleen bedoelde 3.4.10-wijzigingen bevat.
- Controleer dat `git status --short` alleen bedoelde 3.4.11-wijzigingen bevat.
- Stage geen echte back-up, database, token, `.env`, EXE, ZIP of bouwmap.
- De lokale map `dist` hoort niet in Git en wordt bewust genegeerd.
- Maak tag `v3.4.10` pas nadat de CI-run van `main` groen is.
- Maak tag `v3.4.11` pas nadat de CI-run van `main` groen is.

## Publiceren met PowerShell

Expand All @@ -29,15 +29,15 @@ Wacht tot de `main`-CI groen is op
<https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/ci.yml>. Voer dan uit:

```powershell
git tag -a v3.4.10 -m "Codex Lifeboat 3.4.10 stable release"
git push origin v3.4.10
git tag -a v3.4.11 -m "Codex Lifeboat 3.4.11 stable release"
git push origin v3.4.11
```

De tag start `.github/workflows/release.yml`. Maak niet daarnaast handmatig een
release met dezelfde tag: de workflow maakt deze als stabiele nieuwste release.
Volg de uitvoering op
<https://github.com/dkwolf1/Codex-Lifeboat/actions/workflows/release.yml> en open
daarna <https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.10>.
daarna <https://github.com/dkwolf1/Codex-Lifeboat/releases/tag/v3.4.11>.

## Gepubliceerde release controleren

Expand All @@ -60,7 +60,7 @@ Controleer na downloaden eventueel de GitHub-herkomstverklaring:
gh attestation verify .\Codex-Lifeboat-Windows-x64-Portable.zip --repo dkwolf1/Codex-Lifeboat
```

De 95 bron-/EXE-/ZIP-controles, 12/12 geautomatiseerde Windows-scenario's en een
De 97 bron-/EXE-/ZIP-controles, 12/12 geautomatiseerde Windows-scenario's en een
fysieke Windows 11-route van pc A naar pc B en terug zijn geslaagd. Die route bevatte
beide controles en verder werken in Codex na herstel. Windows 10 en USB-onderbreking
blijven als open aanvullende dekking vermeld. Testers mogen nooit echte back-ups
Expand Down
41 changes: 41 additions & 0 deletions docs/nl/releases/v3.4.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Codex Lifeboat 3.4.11 — Windows-provisioningguards

[English](../../releases/v3.4.11.md)

Codex Lifeboat 3.4.11 verhelpt een back-upfout door een actieve Windows-
sandboxprovisioningguard direct onder `.codex`.

## Opgelost

- Herkent uitsluitend root-level namen volgens
`.codex-provisioning-<16 hexadecimale tekens>.guard`.
- Sluit die guards consequent uit van back-upinventarisatie, het kopiëren van het
draagbare profiel, herstelveiligheidskopieën en legacy-profielpayloads.
- Houdt bijna gelijknamige bestanden, geneste guardbestanden, gewone `*.guard`-
bestanden, gesprekken, projecten, instellingen en registraties verplicht.
- Behoudt een actieve provisioningguard op de doelcomputer wanneer een ouder
package er toevallig één bevat.
- Houdt na een fout de bewerkingskop en huidige status zichtbaar op mislukt, in
plaats van terug te vallen naar het misleidende `Gereed`.

De officiële Windows-sandbox van Codex maakt deze lege bestanden met
`FILE_DELETE_ON_CLOSE` om een vastgezette map tijdens geprivilegieerde provisioning
niet-leeg te houden. Het is synchronisatie-/runtimestatus en geen gebruikersdata.

## Controle

- Positieve dekking toegevoegd voor geldige guardnamen in kleine en hoofdletters.
- Negatieve dekking toegevoegd voor suffixen, ongeldige ID's, geneste guards en
gewone bestanden.
- Back-upinventarisatie, kopiëren, veiligheidskopie en legacy-herstel zijn getest.
- Een regressiecontrole voor de eindstatus van de GUI is toegevoegd.
- Alle 97 broncontroles en alle 12 geautomatiseerde Windows-
compatibiliteitsscenario's slagen.

## Download

Download `Codex-Lifeboat-Windows-x64-Portable.zip`, pak het bestand volledig uit en
start `Codex-Lifeboat.exe`.

De EXE blijft onondertekend. Houd de oude computer en een onafhankelijke
herstelkopie ongewijzigd totdat de doelcomputer alle controles na herstel doorstaat.
40 changes: 40 additions & 0 deletions docs/releases/v3.4.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Codex Lifeboat 3.4.11 — Windows provisioning guard handling

[Nederlands](../nl/releases/v3.4.11.md)

Codex Lifeboat 3.4.11 fixes a backup failure caused by a live Windows sandbox
provisioning guard directly below `.codex`.

## Fixed

- Recognizes only root-level names matching
`.codex-provisioning-<16 hexadecimal characters>.guard`.
- Excludes those guards consistently from backup inventory, portable-profile
copying, restore safety copies, and legacy portable-profile restore payloads.
- Keeps all near-matching names, nested guard files, ordinary `*.guard` files,
conversations, projects, settings, and registrations mandatory.
- Preserves a destination computer's live provisioning guard when validating an
older package that happens to contain one.
- Keeps the operation header and current status visibly failed after an exception
instead of returning to the misleading `Ready` state.

The official Codex Windows sandbox creates these empty files with
`FILE_DELETE_ON_CLOSE` to keep a pinned directory nonempty during privileged
provisioning. They are synchronization/runtime state, not user data.

## Validation

- Added positive coverage for lowercase and uppercase valid guard names.
- Added negative coverage for suffixes, malformed IDs, nested guard files, and
ordinary files.
- Added backup inventory, copy, safety-copy, and legacy-restore coverage.
- Added a terminal GUI-state regression check.
- All 97 source checks and all 12 automated Windows compatibility scenarios pass.

## Download

Download `Codex-Lifeboat-Windows-x64-Portable.zip`, extract it completely, and run
`Codex-Lifeboat.exe`.

The executable remains unsigned. Keep the old computer and an independent recovery
copy unchanged until the destination has passed post-restore checks.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "codex-lifeboat"
version = "3.4.10"
version = "3.4.11"
description = "One-click Codex backup, restore and Windows PC migration utility"
readme = "README.md"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion src/codex_transfer/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.4.10"
__version__ = "3.4.11"
19 changes: 17 additions & 2 deletions src/codex_transfer/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

FORMAT_ID = "codex-portable-backup"
FORMAT_VERSION = "2.4"
GENERATOR_VERSION = "3.4.10"
GENERATOR_VERSION = "3.4.11"
PROGRESS_CALLBACK = None
STATUS_CALLBACK = None
_RUNTIME_EXECUTABLE: Path | None = None
Expand Down Expand Up @@ -75,6 +75,9 @@
"process_manager",
"thread-writer-locks",
}
CODEX_PROVISIONING_GUARD_PATTERN = re.compile(
r"^\.codex-provisioning-[0-9a-f]{16}\.guard$", re.IGNORECASE
)
ATTACHMENT_PATTERN = re.compile(
r"(?i)([a-z]:[\\/][^\x00\r\n\"<>|?*]{1,2048}?\.(?:png|jpe?g|webp|gif|bmp|pdf|docx?|xlsx?|pptx?|csv|zip))"
)
Expand All @@ -88,6 +91,11 @@ class BackupError(RuntimeError):
pass


def is_codex_provisioning_guard_name(name: str) -> bool:
"""Match only Codex's root-level, delete-on-close Windows sandbox guard."""
return CODEX_PROVISIONING_GUARD_PATTERN.fullmatch(str(name)) is not None


def new_path_budget() -> dict[str, Any]:
return {
"longest": None,
Expand Down Expand Up @@ -1118,7 +1126,12 @@ def _portable_profile_stats(
lowered = entry.name.lower()
if lowered in {value.lower() for value in handled_names}:
continue
if lowered in blocked_names or lowered in blocked_dirs or entry.is_symlink():
if (
lowered in blocked_names
or lowered in blocked_dirs
or is_codex_provisioning_guard_name(entry.name)
or entry.is_symlink()
):
continue
package_prefix = f"codex/portable-profile/{entry.name}"
if entry.is_dir():
Expand Down Expand Up @@ -1944,6 +1957,8 @@ def copy_portable_codex_profile(
continue
if lowered in {value.lower() for value in BLOCKED_CODEX_DIRS}:
continue
if is_codex_provisioning_guard_name(entry.name):
continue
relative = f"codex/portable-profile/{entry.name}"
if entry.is_symlink():
warnings.append(f"Codex symbolic link or reparse point skipped: {entry}")
Expand Down
3 changes: 2 additions & 1 deletion src/codex_transfer/compatibility_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"dependencyExclusionsRequireExplicitApproval",
"dependencyExclusionReportRoundTrips",
"otherUnreadableDirectoriesFailClosed",
"provisioningGuardRuntimeExcluded",
),
),
(
Expand All @@ -80,7 +81,7 @@
(
"progress-state-transitions",
"Measured and non-measurable work have unambiguous progress states",
("progressTransitionsClear",),
("progressTransitionsClear", "operationFailureStatusPersists"),
),
)

Expand Down
Loading
Loading