Continuity, KindKeeping’s first work, is available now.Find out more
← Back to Continuity

Recovery guide

This is the START-HERE template. Each owner fills in the parts in [[double brackets]], prints it and keeps it away from the computer.

<!--
  TEMPLATE. The filled-in copy is NOT kept in Git: it names real places.
  Fill every [[…]], then print it. Keep printed copies at L1, L2, and L3,
  and a digital copy in the recovery bundle on every backup disk.
  START-HERE never contains secrets: no passwords, keys, or PINs.
  Every command below is checked during the yearly restore test.
-->

# START HERE

**Last updated:** [[YYYY-MM-DD]] · **Printed copies:** home, [[L2]], [[L3]]

## 1. What this is

**Continuity** is [[OWNER NAME]]'s private record of their life and
affairs: projects, servers, accounts, documents, obligations, decisions,
wishes, and a description of who they are (About me).

It is written in plain text files, locked with strong encryption. Nothing
in it is lost if the Continuity app stops working. The app is only a
convenience. Everything can be opened with free, common tools by following
this page.

This page contains **no secrets**. The codes that open Continuity are kept
separately, in the places listed in section 3.

**You may be reading this because:**

- you are [[OWNER NAME]] and have forgotten how this works. That is
  expected, and this page is written for you. Go slowly; nothing here
  can be broken by reading.
- you are someone [[OWNER NAME]] trusts, helping them or handling their
  affairs. Holding this page gives you **no legal authority**. Legal
  authority comes only from legal documents (will, power of attorney).
  Where they are is written inside Continuity, in the `documents` records,
  and here: [[WHERE LEGAL DOCUMENTS ARE, e.g. "lawyer X, city Y" or "home safe"]].

## 2. What to do first

1. **Do not delete, format, or "clean up" anything:** no disks, servers,
   accounts, or files. Nothing here needs to be deleted to recover.
2. **Do not cancel any service or subscription** until you have read the
   `do not touch` list (section 7). Some things keep other things running.
3. Find the **nearest way in** (section 4).
4. Once you are in, look at what is **urgent** (section 7).

## 3. Where everything is

| What | Where | Notes |
|---|---|---|
| Server that holds the live copy (VPS) | [[provider, hostname]] | Paid until [[date]]. Account details: in Continuity (c2) and in the password manager. |
| Backup disk 1 ("HDD-home") | [[place at home]] | Label: [[label]]. Also holds the recovery bundle. |
| Backup disk 2 ("HDD-offsite") | [[L2: place]] | Swapped with disk 1 every [[interval]]. |
| Online backup ("object store") | [[provider, bucket name]] | Login in the password manager. |
| Yearly archives (`*.tar.age`) | On both backup disks, in `archive/`; critical documents also on [[write-once media, place]] | Newest is the one to use. |
| Vault code DAILY | In the password manager, entry "Continuity vault code" | A long code starting with `AGE-SECRET-KEY-1`. Opens the data. |
| Sign-in code for the app | In the password manager, entry "Continuity sign-in" | Only for the Continuity app. Not needed for recovery. |
| Paper recovery kit (sealed envelope) | [[L3: bank, branch, box number]] | Contains the vault code PAPER, the master keys, and the backup passwords. Access: [[who can open the box]]. |
| Password manager (KeePassXC) | [[where the .kdbx file and its backups are]] | How it is unlocked: [[short description, no secrets]]. |
| Laptop | [[description]] | Not needed for recovery. |

## 4. The ways in

Pick the first one you can use.

| | You need | Use when |
|---|---|---|
| **A** | The vault code DAILY (password manager) + a computer | normal use |
| **C** | The paper recovery kit + a computer | the password manager cannot be opened |

And one of these copies of the data:

| | Copy | Easiest? |
|---|---|---|
| 1 | The **yearly archive** on a backup disk | **Yes.** Two tools, a few commands. Content as of the archive date. |
| 2 | A **backup disk** (restic) | Newest content. More steps. |
| 3 | The **server** | Only if it still runs and you can log in. |

If no computer person is available: steps 5.1 and 5.4 are the simplest.
Anyone comfortable with a terminal can follow them.

## 5. Step by step

### 5.1 Prepare a computer

Any computer will do. The most reliable choice is a **Linux live USB**
(Ubuntu [[version]] or newer). It needs no installation.

1. Start the computer from the Ubuntu USB stick and choose "Try Ubuntu".
2. Open a Terminal.
3. Get the tools. Either
   - **offline:** plug in a backup disk, then copy `recovery-bundle/bin/*`
     into `~/bin` and run `export PATH=~/bin:$PATH`,
   - **or online:** `sudo apt install age gocryptfs restic`.

   Versions known to work: age [[x.y.z]], gocryptfs [[x.y.z]],
   restic [[x.y.z]]. Newer versions should read the same data.

### 5.2 The vault code (what proves you may open the data)

A vault code is one long line starting with `AGE-SECRET-KEY-1`.

- **Path A:** copy it from the password manager, entry "Continuity vault
  code".
- **Path C:** it is in the paper kit, marked PAPER. On paper it is
  printed in groups; type it **without the spaces**, as one line.

Put it into a file: `nano ~/id.txt`, paste or type the line, then save
with Ctrl+O and exit with Ctrl+X. A typo is detected: age will refuse the
code instead of decrypting wrongly. Delete the file when you are done:
`shred -u ~/id.txt`.

The Continuity tools (`tools/unlock` and others) ask for the code instead
and need no file. Spaces don't matter there.

### 5.3 The unlock files

`keys/` contains small locked files (`c1.pass.age` … `c5.pass.age`,
`restic-*.pass.age`). You find them on every backup disk in
`recovery-bundle/keys/`. Copy that folder to `~/keys`.

### 5.4 Open the yearly archive (simplest)

The archive files are on the backup disk in `archive/`, named
`c1-YYYY-MM-DD.tar.age` … `c5-…`. Take the newest date. Files ending in
`.pq.tar.age` are a second copy that opens only with the post-quantum
identity (the `AGE-SECRET-KEY-PQ-1…` line in the paper kit). Use them the
same way.

```
mkdir -p ~/continuity/c1
age -d -i ~/id.txt /media/$USER/<DISK>/archive/c1-<DATE>.tar.age | tar -x -C ~/continuity/c1
```

Repeat for c2 … c5. The records are now readable in `~/continuity/`.
This copy is **not encrypted**. Keep this computer with you, and when you
are done, shut it down (a live USB forgets everything).

### 5.5 Restore from a backup disk (newest data)

```
age -d -i ~/id.txt ~/keys/restic-<TARGET>.pass.age \
  | restic -r /media/$USER/<DISK>/restic --password-file /dev/stdin restore latest --target ~/restore
```

`<TARGET>` is `hdd-home` or `hdd-offsite`, matching the disk. Path C
without the unlock files: run only the `restic …` part, without
`--password-file /dev/stdin`, and restic asks for the password printed in
the paper kit. Type it **exactly as printed, dashes included**.

The restored `~/restore/cipher/c1` … `c5` are still locked. Open them
(5.6).

### 5.6 Open a locked compartment

```
mkdir -p ~/mnt/c1
age -d -i ~/id.txt ~/keys/c1.pass.age | gocryptfs -passfile /dev/stdin ~/restore/cipher/c1 ~/mnt/c1
```

Repeat for c2 … c5. Without the unlock files, use the master key printed
in the paper kit:
`gocryptfs -masterkey=<the 8 groups of 8 characters, dashes included> ~/restore/cipher/c1 ~/mnt/c1`.
Close with `fusermount -u ~/mnt/c1`.

### 5.7 On the server (normal use, path A)

From [[OWNER NAME]]'s laptop, with the Continuity repository:
`tools/start` asks for the vault code, unlocks the vault on the server,
starts the app, and opens it in the browser. Sign in there with the
sign-in code. `tools/stop` closes the app and locks the vault again.

By hand, with the vault code in `~/id.txt` (5.2):

```
age -d -i ~/id.txt keys/c1.pass.age \
  | ssh continuity@[[host]] 'gocryptfs -passfile /dev/stdin continuity-data/cipher/c1 continuity-data/mnt/c1'
```

## 6. What is in each compartment

| Folder | Contains |
|---|---|
| c1 | General: people, projects, obligations, procedures, administration; the key inventory and restore-test log |
| c2 | Infrastructure: servers, domains, technical accounts |
| c3 | Documents: where papers are, scans |
| c4 | Finances: bank accounts, payments, assets |
| c5 | Personal: About me, wishes |

Inside each: `records/<area>/<ID>.md` are the records (plain text,
readable in any editor). `files/` holds scans and images. The format is
explained in **data-format.md** (recovery bundle, `docs/`).

## 7. What is urgent, and what must not be touched

Once the data is open (for example in `~/continuity` or `~/mnt`):

**Due soon** (obligations, sorted by date):

```
grep -rH '^due:' ~/continuity/*/records/obligations | sort -t: -k3
```

**Do not touch** (things that must not be changed, cancelled, or deleted,
and why):

```
grep -rl '^do_not_touch: true' ~/continuity | xargs grep -H '^do_not_touch_note:'
```

**What was decided and wished** (each wish is dated; a wish with
`superseded_by` set was later changed, so read the newer one):

```
grep -rH '^title:' ~/continuity/c5/records/wishes
```

Wishes are **personal instructions, not legal authority**. Check the legal
documents (section 1).

If the Continuity repository is at hand, `tools/stale-report` lists all
of this at once, and `tools/validate` checks that nothing is broken.

**Old information:** each record has `last_verified`. If that date is long
ago, the record may no longer be true. Check before acting on it.

## 8. Never do these

- Never run `gocryptfs -init` on an existing folder, `restic forget`, or
  `restic prune`, and never format a backup disk. These destroy data or
  history.
- Never type a code or password from the paper kit into a website or
  send it to anyone. The only web page that asks for a code is the
  Continuity app itself, and it asks for the **sign-in** code, never a
  vault code.
- Never store the paper kit with a backup disk.
- If the paper kit's seal was broken by someone other than
  [[OWNER NAME]], treat all codes as exposed: see "Rotation" in the key
  procedure (Continuity c1, procedures).

## 9. After recovery

- Write down what happened and when, in Continuity (c1) or on paper.
- If a code was lost or exposed, follow the "key lost" procedure in c1
  (`tools/new-code`, then `tools/rewrap`).
- Update this page and reprint it.