CinvanaAI
← All projects

Tool · Data & provenance

Manifest File Relocator

Preview a file move, reject stale plans and restore moved files from the recorded journal.

Repository: CinvanaAI/manifest-file-relocator

Recorded synthetic example. Source with a complete offline example.

See the idea in action.

The real planner, executor and rollback restore the original bytes. The demo never touches your existing files.

Example input
Two disposable files and a manifest describing their new relative destinations.
Captured result
{
  "plan": {
    "version": 1,
    "workspace_name": "workspace",
    "manifest_sha256": "ec078cda00f917153cc2d96d743e48c75a50a1faa18084f2b8918bf421cb7afc",
    "item_count": 2,
    "items": [
      {
        "operation_id": "accept-text",
        "source": "inbox/alpha.txt",
        "destination": "accepted/alpha.txt",
        "bytes": 15,
        "sha256": "71f49e4f25b46d85934e84dc2cd7263fc3e886196e66fb4dae5da8d290c29e1c"
      },
      {
        "operation_id": "accept-text",
        "source": "inbox/beta.txt",
        "destination": "accepted/beta.txt",
        "bytes": 14,
        "sha256": "895530c53db52ae4d83617feecea2e53e76b819051f9e3c677c887c76b001504"
      }
    ],
    "plan_sha256": "af7f1eb12d01bae9c36188c9788a71b8228fa27751fb6c2f9ed61d3984438af6"
  },
  "execution": {
    "version": 1,
    "plan_sha256": "af7f1eb12d01bae9c36188c9788a71b8228fa27751fb6c2f9ed61d3984438af6",
    "started_at": "2026-09-19T14:14:23Z",
    "status": "complete",
    "items": [
      {
        "operation_id": "accept-text",
        "source": "inbox/alpha.txt",
        "destination": "accepted/alpha.txt",
        "bytes": 15,
        "sha256": "71f49e4f25b46d85934e84dc2cd7263fc3e886196e66fb4dae5da8d290c29e1c",
        "status": "moved"
      },
      {
        "operation_id": "accept-text",
        "source": "inbox/beta.txt",
        "destination": "accepted/beta.txt",
        "bytes": 14,
        "sha256": "895530c53db52ae4d83617feecea2e53e76b819051f9e3c677c887c76b001504",
        "status": "moved"
      }
    ],
    "journal_sha256": "efc93a628cd1f7f5ed20a98d8c2947afd4efd262affaacc6109f2df871301c8a",
    "finished_at": "2026-09-19T14:14:23Z"
  },
  "rollback": {
    "version": 1,
    "source_journal_sha256": "efc93a628cd1f7f5ed20a98d8c2947afd4efd262affaacc6109f2df871301c8a",
    "started_at": "2026-09-19T14:14:23Z",
    "status": "complete",
    "items": [
      {
        "operation_id": "accept-text",
        "source": "inbox/beta.txt",
        "destination": "accepted/beta.txt",
        "bytes": 14,
        "sha256": "895530c53db52ae4d83617feecea2e53e76b819051f9e3c677c887c76b001504",
        "status": "restored"
      },
      {
        "operation_id": "accept-text",
        "source": "inbox/alpha.txt",
        "destination": "accepted/alpha.txt",
        "bytes": 15,
        "sha256": "71f49e4f25b46d85934e84dc2cd7263fc3e886196e66fb4dae5da8d290c29e1c",
        "status": "restored"
      }
    ],
    "rollback_sha256": "4beaba42e986404a2e7d59bd4dbb0c41022abec20a70a80e750ec1a013ca573d",
    "finished_at": "2026-09-19T14:14:23Z"
  }
}

Try the example.

From the repository root, follow the dependency requirements in the README. This example uses supplied synthetic material.

python -m pip install -e .
python -m examples.offline_demo

The real planner, executor and rollback restore the original bytes. The demo never touches your existing files.

Complete setup and instructions ↗

The interesting part.

The reviewed plan is a byte-specific authorization boundary, and rollback operates against its own observed journal.

Public continuation

Where it came from.

A May 2026 mover.py selection script from a classification workspace.

May 2026 — Historical mover.py script. Source ↗

Replaces the unsafe execution model with reviewed plans, content checks, journals and rollback.

The original folder organization and private instruction files are not reproduced.

Source ↗