Capabilities
Every capability, and how far along each one is
A migration tool that overstates itself gets found out on someone's live mail server. So this page marks each capability with its real state, including the ones still being built. Nothing is left out to make the list look better.
- Live shipped, and proven against a real system
- Proving built and tested, proving itself against real systems now
- Building being built — do not plan a migration around it yet
Mail migration
Tenants and individual mailboxes.
| Capability | What it does | State |
|---|---|---|
| Microsoft 365 connect | Admin consent, then the granted permissions shown as a matrix with every missing scope named. | Proving |
| Microsoft 365 discovery | Users, groups, shared mailboxes, resources and sizes across a tenant. | Building |
| Google Workspace | Directory and mailbox migration through a service account you authorise. | Building |
| Gmail per-mailbox | One mailbox with its owner's app password, endpoint fixed by the engine. | Live |
| Generic IMAP | A named server, bound before the credential is stored and checked against a network policy. | Live |
| Identity mapping and plan | Source identity to destination address, with waves, quotas, exclusions and an approval gate. | Live |
| Provisioning | Accounts, aliases, groups, quotas and folder sharing, created idempotently. | Live |
| Credential delivery | One-time activation links to the old mailbox; no password is ever shown or stored in a report. | Live |
| Wave scheduler and sync | imapsync at a pinned upstream version, paced per provider, resumable per mailbox. | Live |
| Settings translation | Rules to Sieve, out-of-office, signatures. | Live |
| Contacts and calendars | Graph and Google to CardDAV and CalDAV. | Building |
| Verification and signed report | Per-folder counts, 256 bucketed Message-ID digests, flag samples, a second round on disagreements. | Live |
| Cutover and coexistence | DNS and MX on a checklist, forwarding for late mail, a final sweep. | Live |
Server migration
Whole Ubuntu machines, cloud to your hardware.
| Capability | What it does | State |
|---|---|---|
| Inventory | Packages, services, users, databases, volumes and configuration, read from the running source. | Live |
| Compatibility report | What will not move, with hard-fail rules rather than warnings nobody reads. | Live |
| Safety snapshot | A restore point before anything is built, or the owner's recorded waiver. | Live |
| Destination build | Ansible-built destination, checked against the plan before a byte is synced. | Live |
| Database standby | pgBackRest, XtraBackup or logical replication, with lag watched to the second. | Live |
| File sync loops | Repeated passes until both sides match, then a final pass under a short freeze. | Live |
| Server verification | Services, ports, checksums and database row counts compared across the two. | Live |
| Cutover and rollback | DNS or load-balancer switch, cooling period, rollback as a DNS change. | Live |
| Object storage | Buckets copied with a checksum per object. | Live |
| A server comes home here | The destination is your local ChertMail host, not a fresh cloud server. | Building |
Store migration
Salla to ChertStore.
| Capability | What it does | State |
|---|---|---|
| Merchant API reader | Catalogue, customers, orders and coupons, with per-endpoint rate limits and pages kept as evidence. | Proving |
| Bulk export reader | Asynchronous exports with a bounded wait, identified by content and not by filename. | Proving |
| Dashboard file ingest | CSV and Excel with column mapping, Arabic and Hijri dates, errors by line number. | Live |
| Public storefront reader | Allowlisted hosts, every redirect re-checked, signed-in pages refused, robots obeyed. | Proving |
| Immutable staging | Content-addressed, read-only, with provenance per record and a re-hash check. | Live |
| Store normalisation | One canonical model from whichever sources supplied each field. | Building |
| Load into ChertStore | Upsert by external id into Bagisto, so a second run creates nothing. | Building |
| 301 redirect map | Every old product URL mapped from its id, exported as web-server config and probed. | Building |
Security and evidence
The parts that make a result trustworthy.
| Capability | What it does | State |
|---|---|---|
| Content never in the control plane | Data-plane activities are refused registration on a control-plane worker, at startup. | Live |
| Secrets in a vault | OpenBao leases bound to the job, revoked at close, never in git or a log. | Live |
| Hash-chained ledger | Append-only, with no second write path, covering every consequential action. | Live |
| Signed verification report | Per-job signing key, chained to the ledger, verifiable after the fact. | Live |
| Permanent revocation | Disabling an account raises a version that invalidates every token ever issued to it. | Live |
| Endpoint authority | A source decides where its credential may be sent; a request cannot name a host. | Live |
| Network policy | Loopback, private, link-local and metadata addresses refused, on every resolved address and every redirect. | Live |
| Destination conformance suite | The same contract tests run against the real destination and the fake, including logging in with an issued token. | Live |
Console and operations
What an operator sees and runs.
| Capability | What it does | State |
|---|---|---|
| Server dashboard | What is installed here, whether it answers, what it holds, how much disk is left. | Live |
| A card per source | Each card carries its own preparation and checks it before a job is created. | Live |
| Mapping and approvals | Review every identity, approve each gate, see what a run would change before it runs. | Live |
| English and Arabic | One codebase, right-to-left as a first-class direction, WCAG 2.1 AA. | Live |
| CLI | Every console action available at a prompt, against the same API. | Live |
| Debian packaging | Signed .deb, systemd units, private apt repository, upgrade path. | Live |
| Offline bundle | An install with no network at all, for air-gapped sites. | Building |
| Doctor | Check a host before trusting it with a migration. | Live |
Start with ten mailboxes.
Run a pilot wave, read the signed report, then move the rest. Nothing at the source changes either way.