Pimpo
Documentation

Data formats#

From v1.0 these formats are frozen. A newer Pimpo reads data written by any older one, and every upgrade takes a snapshot first (before-VERSION, brought back by Go back to the previous version or pimpo restore). A change to a format adds; it does not rename, remove or reinterpret.

The promise is tested: internal/compat keeps, for each frozen format, data written by the version that froze it (internal/compat/testdata/<format>/), and every build opens it. Those files are never edited. A new format gets a new folder, written with PIMPO_WRITE_COMPAT=1 go test ./internal/compat -run WriteFixtures, while the old folders stay.

FormatWhereVersionRule
Database (event log, routines, explorations, runs, chats, progress, vault)pimpo.db, SQLitePRAGMA user_version = 1New tables and columns only, with defaults. The event log is append-only and hash-chained (prev, hash); the way a hash is computed never changes. A Pimpo refuses a database with a newer user_version than it knows instead of writing to it.
Routineroutine_versions.body, gallery and repository files1 (no field)JSON {name, description, manifest, code, tests}. New fields are optional and older Pimpos ignore them. Gallery signatures cover the bytes, so a routine is never rewritten to add a field.
Connectorconnectors/<name>/connector.json1 (no field)JSON manifest with capabilities (name, risk, signature) and contract. Risks keep their meaning; new fields are optional.
Memorymemory/*.md1One fact per line, with its trust (high, low, learned) and source.
Company file<name>.company.yaml, exported from a companyformat: 1YAML with the company (its memory rules and code_env among its settings, and each member's coder and code_sandbox), departments, roles and members, never naming a person: people's seats go to whoever imports it. Pimpo's own templates are company files built into it (internal/company/templates). A Pimpo refuses a file with a newer format. New fields are optional. Companies themselves live in pimpo.db (companies, company_parts), each part as JSON, so fields are added without new columns.
Backup.pimpo filePIMPO-SEALED-2 header, manifest.format = pimpo-backup-2The header (with the scrypt cost) and then a gzip tar with a manifest listing the SHA-256 of every file, the database copy, memory, connectors and the secrets, all sealed with the passphrase (scrypt + AES-GCM). Cloud backups sealed as PIMPO-SEALED-1 or ZODIM-SEALED-1 still open; pimpo-backup-1 files not sealed as a whole (and zodim-backup-1, vigia-backup-1) open only with pimpo import --unsealed.

Long-term support#

Each .0 release of an even minor version (v2.0, v2.2…) is LTS, with security fixes for 12 months in a release/X.Y branch (Releases and support). v1.0 starts the first line.

This page is built from the repository's documentation. Improve it on GitHub.