This release is a pre-release and may not be stable for production use.
On Board Personal Import 5.0.0a2
Status: DO NOT PUBLISH. This is an unpublished alpha component intended for
later integration into onboard-personal. It does not modify or replace the
stable On Board v4 command.
The importer copies one local v4 .agent-mem board into a new, empty Personal
Central data root. It requires an explicit owner principal and owner agent; it
does not infer either identity from legacy labels. Legacy agents remain
unbound for later review.
Safety boundary
- Stop Personal Central before every
import,archive-backfill,retry,rollback, andstatusoperation.--confirm-central-stoppedis an operator attestation; the tool does not detect or stop a running Central process. - The source is read under its
.board.lock. The tool verifies the live tree before and after the lock-bounded copy and performs all conversion from the sealed private copy. - The completed proof becomes authoritative only after the durable
freeze_completedstate anchors its exact bytes and all three copied trees. If interruption occurs before that anchor, retry discards the unanchored output and revalidates the live source. Source writes after the anchor do not become a retry or rollback precondition. full-source-backuppreserves every supported regular source file byte. Original metadata is recorded in the source seal, while private-copy modes are normalized.source-snapshotis a separate import-domain copy with a synthetic write fence; these hashes are intentionally different.- Source symlinks, hard links, special entries, duplicate JSON keys, duplicate memory or ticket identifiers, and malformed record shapes fail closed.
- The alpha accepts at most 100,000 tree entries, 64 MiB per regular file, and 256 MiB of regular-file payload per tree. Oversized inputs fail before installation; these are explicit compatibility limits, not truncation.
- The Central target must be absent or an empty private directory. Import into an existing non-empty Personal data root is intentionally out of scope.
- Conversion halts at
review_requiredbefore target installation whenever a masked quarantine row or unbound legacy agent remains. A private worksheet is written under the run directory. Installation resumes only after a complete decision file and explicit bind-or-RETIREcoverage replay as idempotent, leaving zeroUNMAPPEDagents. - Install and rollback use durable state, parent-directory fsync, private backups, and exact tree seals. A changed post-import Central tree is moved to rollback quarantine before the original empty baseline is restored.
- The stable v4 Homebrew installation is hashed immediately before and after conversion. Later package-manager changes do not disable retry or rollback.
- The tool opens no network listener and makes no remote call.
Command contract
Use the canonical Homebrew Cellar directory, not the opt symlink:
STABLE_INSTALL="$(brew --cellar onboard-memory)/4.0.4"
onboard-personal-import import /path/to/project/.agent-mem /path/to/new-central-data \
--run-dir /path/to/private-import-run \
--board-id personal-board \
--owner-principal-id personal-owner \
--owner-agent-name local-agent \
--stable-install-root "$STABLE_INSTALL" \
--confirm-central-stopped
onboard-personal-import retry /path/to/private-import-run \
--confirm-central-stopped
onboard-personal-import status /path/to/private-import-run \
--confirm-central-stopped
pursers-personal-import archive-backfill /path/to/project/.agent-mem/archive.json \
/path/to/existing-central-data \
--board-id personal-board \
--scrub-profile internal \
--redact-secrets-record ARCHIVE-record-key \
--confirm-central-stopped
onboard-personal-import decide /path/to/private-import-run \
--policy /path/to/POLICY-signed.json
onboard-personal-import review /path/to/private-import-run \
--decisions /path/to/private-decisions.json \
--bindings /path/to/private-bindings.json \
--confirm-central-stopped
onboard-personal-import rollback /path/to/private-import-run \
--confirm-central-stopped
archive-backfill is for boards imported before archive.json became part of
the import domain. It appends deterministic archived-memory records only;
rerunning it does not duplicate rows and it never rewrites existing memories.
The default strict scrub profile rejects every detected violation. Use
--scrub-profile internal only when home paths must be retained byte-exact;
all non-posix_home violations remain fail-closed.
Repeat --redact-secrets-record only for explicitly approved archive record
keys. Secret spans in those records are replaced with scrub markers and the
rules are recorded as provenance; a missing or clean listed key is an error.
When import reports review_required, use the private files under the owned
run directory:
decideaccepts an owned0600policy JSON document withschema_version: 1,status: "POLICY-SIGNED-READY", the matchingboard_idandworksheet_sha256, and arulesobject mapping every rule present in the worksheet toaccept-as-is,redact-span, ordrop. It writesevidence/policy-decisions-<policy-hash>.jsonas an owned0600complete decisions file. Use--outputto select another file in an owned0700directory. Mixed rules on one record escalate the entire record to the most restrictive action (drop, thenredact-span, thenaccept-as-is). Secret-class rules cannot be auto-accepted.evidence/quarantine-worksheet.jsonlists masked quarantine rows. Create an owned0600decisions file with the sameboard_id,worksheet_sha256, and one entry per worksheet row. SetstatustoREVIEWED-SIGNED-READY, includereview_metadata.reviewed_at, preserve each row'srecord_key,record_type,record_id,field, andrules, and replacedecisionwith exactlyaccept-as-is,redact-span, ordrop. A decision applies to the whole top-level legacy record, so every row for the same record must use the same action; mixed per-field actions fail closed.accept-as-ispreserves reviewed content, except a secret-bearing structural memory, agent, ticket, artifact, or state key identifier is always replaced by its stablesha256-...safe identifier.redact-spanuses the same structural normalization. This exception prevents the raw identifier from becoming a database key, worksheet key, or log value.evidence/identity-binding-worksheet.jsonexplains every legacy identity; copyevidence/identity-bindings-template.jsonto a separate owned0600decisions file. Replace each applicablePENDINGvalue withRETIREor an approved Central principal ID. Keys userecord:<record_id>so duplicate display names remain unambiguous. Delete template entries for quarantined agents that the quarantine decision drops; keep and decide entries restored byaccept-as-isorredact-span, and updateentry_countto the number of binding keys. Do not edit the sealed worksheet or template in place.
Pass the completed owned 0600 files to review. The tool copies and seals
them before use; incomplete, extra, ambiguous, or changed decisions fail before
installation.
The source, run directory, Central target, and stable installation must be disjoint. Run and target parents must be owned by the current user and must not be group- or other-writable. State, receipts, backups, worksheets, and quarantine remain private under the run directory.
The runtime uses only the Python standard library. Building the distribution
requires the build dependencies declared in pyproject.toml. Nothing in this
alpha is published or installed by its preparation workflow.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pursers_personal_import-5.0.0a2-py3-none-any.whl.
File metadata
- Download URL: pursers_personal_import-5.0.0a2-py3-none-any.whl
- Upload date:
- Size: 65.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
102a2e9cc709066f0ba1f0074fa40ce30692c8cfcc895e17fdefdc526c59b22d
|
|
| MD5 |
c4575317167894fd2ed4cc35f46057e9
|
|
| BLAKE2b-256 |
19ebed45599438f481d3d7930fd2fcef65e201648cd5b88af67f81605799dbed
|
Provenance
The following attestation bundles were made for pursers_personal_import-5.0.0a2-py3-none-any.whl:
Publisher:
publish-pypi.yml on swisspra/Pursers
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pursers_personal_import-5.0.0a2-py3-none-any.whl -
Subject digest:
102a2e9cc709066f0ba1f0074fa40ce30692c8cfcc895e17fdefdc526c59b22d - Sigstore transparency entry: 2582958214
- Sigstore integration time:
-
Permalink:
swisspra/Pursers@1b0a20b6e07d6bc6a6dd436419fbe7728c669e6a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/swisspra
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@1b0a20b6e07d6bc6a6dd436419fbe7728c669e6a -
Trigger Event:
workflow_dispatch
-
Statement type: