{
  "schema_version": 3,
  "app": "vaultwarden-backup",
  "display_name": "Vaultwarden backup and restore",
  "upstream_repo": "https://github.com/dani-garcia/vaultwarden",
  "docs_url": "https://github.com/dani-garcia/vaultwarden/wiki/Backing-up-your-vault",
  "status": "ok",
  "summary": {
    "primary_service": "vaultwarden",
    "app_version": "1.37.4",
    "app_version_pinned": true,
    "runs": 3,
    "publishable": true,
    "publishable_note": null,
    "idle_total_mem_mib": 156.72,
    "idle_total_cpu_pct": 0.48,
    "peak_total_mem_mib": 385.76,
    "peak_is_under_load": true,
    "startup_seconds": 2.3,
    "startup_peak_total_mem_mib": 259.51,
    "settled": true,
    "settle_seconds_used": 121.0,
    "peak_max_mib": 386.72,
    "sizing_peak_mib": 386.72,
    "idle_mem_mib": {
      "median": 156.72,
      "min": 156.09,
      "max": 157.88,
      "values": [
        156.72,
        156.09,
        157.88
      ]
    },
    "idle_cpu_pct": {
      "median": 0.48,
      "min": 0.44,
      "max": 0.48,
      "values": [
        0.48,
        0.44,
        0.48
      ]
    },
    "peak_mem_mib": {
      "median": 385.76,
      "min": 382.88,
      "max": 386.72,
      "values": [
        386.72,
        382.88,
        385.76
      ]
    },
    "startup_peak_mem_mib": {
      "median": 259.51,
      "min": 217.86,
      "max": 311.62,
      "values": [
        311.62,
        217.86,
        259.51
      ]
    },
    "startup_s": {
      "median": 2.3,
      "min": 2.3,
      "max": 2.4,
      "values": [
        2.4,
        2.3,
        2.3
      ]
    },
    "settled_after_healthy_s": {
      "median": 138.7,
      "min": 138.7,
      "max": 138.8,
      "values": [
        138.7,
        138.7,
        138.8
      ]
    },
    "settled_runs": 3,
    "per_service": {
      "toolbox": {
        "idle_mem_mib": {
          "median": 139.65,
          "min": 139.43,
          "max": 140.04,
          "values": [
            140.04,
            139.65,
            139.43
          ]
        },
        "peak_mem_mib": {
          "median": 368.4,
          "min": 365.4,
          "max": 369.5,
          "values": [
            369.5,
            365.4,
            368.4
          ]
        }
      },
      "vaultwarden": {
        "idle_mem_mib": {
          "median": 16.68,
          "min": 16.44,
          "max": 18.45,
          "values": [
            16.68,
            16.44,
            18.45
          ]
        },
        "peak_mem_mib": {
          "median": 25.62,
          "min": 25.05,
          "max": 28.43,
          "values": [
            25.62,
            28.43,
            25.05
          ]
        }
      }
    },
    "variance_flag": null,
    "representative_run": 1,
    "cpu_models": [
      "AMD EPYC 9V74 80-Core Processor"
    ],
    "cpu_model_mismatch": false,
    "rule": "idle = median of the run idle means; peak = median of the run peaks (highest simultaneous total, under load when the app has a load step); peak_max_mib = highest run peak; sizing_peak_mib = highest over runs of max(run peak, run startup peak); variance_flag when max/min over runs is above 1.5 for idle or peak."
  },
  "run": {
    "started_at": "2026-10-22T03:53:10Z",
    "date": "2026-10-22",
    "harness_version": "3.0.0",
    "runs_requested": 3,
    "docker_host": null,
    "remote": false,
    "runs_completed": 3
  },
  "host": {
    "label": "github-actions ubuntu-latest (2 vCPU, 8 GB)",
    "ci": {
      "runs_on": "ubuntu-latest",
      "runner_environment": "github-hosted",
      "runner_os": "Linux",
      "runner_arch": "X64",
      "image_os": "ubuntu24",
      "image_version": "20261012.334.1"
    },
    "cpu_model": "AMD EPYC 9V74 80-Core Processor",
    "cpu_model_note": null,
    "cores": 2,
    "mem_total_mib": 7938,
    "kernel": "6.17.0-1022-azure",
    "os": "Ubuntu 24.04.5 LTS",
    "arch": "x86_64",
    "oci_arch": "amd64",
    "docker_server_version": "28.0.4",
    "docker_client_version": "28.0.4",
    "compose_client_version": "2.38.2",
    "storage_driver": "overlay2",
    "containerd_image_store": false,
    "source": "docker info + throwaway container reading /proc/cpuinfo on the daemon host",
    "compose_note": "Compose runs on the client machine; Docker server fields are from the daemon host"
  },
  "helper_images": {
    "curlimages/curl:latest": {
      "pulled_as": "curlimages/curl:latest",
      "digest": "curlimages/curl@sha256:11e64e28c5f58c8d93ee95fcf22ac055f48b0bc440e0ce7d8013bbb5ad6aa8ac"
    }
  },
  "pull_seconds": 5.3,
  "finished_at": "2026-10-22T04:11:18Z",
  "elapsed_seconds": 1087.7,
  "services": {
    "toolbox": {
      "image_ref": "docker:28.5.2-cli",
      "image_repo": "docker",
      "image_tag": "28.5.2-cli",
      "digest": "sha256:625d9431a9f54c5a2bc90f24f0e1c3d55b1349fd857dd85035f98c2c9acbdd4d",
      "digest_note": null,
      "version": "28.5.2-cli",
      "version_source": "tag",
      "version_pinned": true,
      "version_note": null,
      "resolved_tag": "28.5.2-cli",
      "resolved_tag_note": null,
      "image_size": {
        "unpacked_mb": 214.0,
        "unpacked_source": "docker image ls Size: unpacked image on the daemon host, rounded by docker to 3 significant figures",
        "compressed_mb": 75.6,
        "compressed_source": "sum of compressed layer sizes in the registry manifest for linux/amd64",
        "compressed_null_reason": null,
        "unit_note": "MB = 10^6 bytes. unpacked = disk used on the host; compressed = what is downloaded"
      },
      "compose_image": "docker:28.5.2-cli",
      "compose_comment": "sha256:625d9431a9f54c5a2bc90f24f0e1c3d55b1349fd857dd85035f98c2c9acbdd4d  (version 28.5.2-cli, from tag)",
      "restart_count": 0,
      "oom_killed": false
    },
    "vaultwarden": {
      "image_ref": "vaultwarden/server:1.37.4",
      "image_repo": "vaultwarden/server",
      "image_tag": "1.37.4",
      "digest": "sha256:efb3cde962015fcc036b2ea625242248611943b27212ebf4392841fb30fad055",
      "digest_note": null,
      "version": "1.37.4",
      "version_source": "label:org.opencontainers.image.version",
      "version_pinned": true,
      "version_note": null,
      "resolved_tag": "1.37.4",
      "resolved_tag_note": null,
      "image_size": {
        "unpacked_mb": 300.0,
        "unpacked_source": "docker image ls Size: unpacked image on the daemon host, rounded by docker to 3 significant figures",
        "compressed_mb": 90.4,
        "compressed_source": "sum of compressed layer sizes in the registry manifest for linux/amd64",
        "compressed_null_reason": null,
        "unit_note": "MB = 10^6 bytes. unpacked = disk used on the host; compressed = what is downloaded"
      },
      "compose_image": "vaultwarden/server:1.37.4",
      "compose_comment": "sha256:efb3cde962015fcc036b2ea625242248611943b27212ebf4392841fb30fad055  (version 1.37.4, from label:org.opencontainers.image.version)",
      "restart_count": 0,
      "oom_killed": false
    }
  },
  "runs": [
    {
      "run": 1,
      "started_at": "2026-10-22T03:53:17Z",
      "host": {
        "label": "github-actions ubuntu-latest (2 vCPU, 8 GB)",
        "ci": {
          "runs_on": "ubuntu-latest",
          "runner_environment": "github-hosted",
          "runner_os": "Linux",
          "runner_arch": "X64",
          "image_os": "ubuntu24",
          "image_version": "20261012.334.1"
        },
        "cpu_model": "AMD EPYC 9V74 80-Core Processor",
        "cpu_model_note": null,
        "cores": 2,
        "mem_total_mib": 7938,
        "kernel": "6.17.0-1022-azure",
        "os": "Ubuntu 24.04.5 LTS",
        "arch": "x86_64",
        "oci_arch": "amd64",
        "docker_server_version": "28.0.4",
        "docker_client_version": "28.0.4",
        "compose_client_version": "2.38.2",
        "storage_driver": "overlay2",
        "containerd_image_store": false,
        "source": "docker info + throwaway container reading /proc/cpuinfo on the daemon host",
        "compose_note": "Compose runs on the client machine; Docker server fields are from the daemon host"
      },
      "date": "2026-10-22",
      "startup": {
        "seconds": 2.4,
        "ok": true,
        "checks": [
          {
            "type": "http",
            "url": "http://vaultwarden:80/alive",
            "expect_status": [
              200
            ],
            "ok": true,
            "ready_after_s": 2.4,
            "detail": "OK 200"
          }
        ],
        "up_command_seconds": 2.1,
        "definition": "wall clock from starting `docker compose up -d` until every health check passed; checks poll every 0.5 s from a throwaway container on the compose network, so resolution is about +/- 1 s"
      },
      "versions": {
        "toolbox": "28.5.2-cli",
        "vaultwarden": "1.37.4"
      },
      "setup": [
        {
          "exit_code": 0,
          "duration_s": 13.4,
          "reported": {},
          "output_tail": [
            "*",
            "* If you need ICU with non-English locales and legacy charset support, install",
            "* package icu-data-full.",
            "*",
            "bw 2026.10.0",
            "node v22.23.2",
            "sqlite3 3.49.2",
            "cryptography 44.0.3",
            "time -v: ok",
            "Docker version 28.5.2, build ecc6942",
            "2.40.3"
          ],
          "description": "Install the tools the backup host needs inside the toolbox container (Alpine packages: python3, py3-cryptography, sqlite, nodejs, npm, socat, openssl; and the official Bitwarden CLI, npm package @bitwarden/cli 2026.10.0, used as an independent client to check the restored vaults) and print their versions. Not measured."
        },
        {
          "exit_code": 0,
          "duration_s": 2.1,
          "reported": {
            "seed": {
              "items": 225,
              "logins": 200,
              "secure_notes": 20,
              "org_items": 5,
              "attachments": {
                "lab-attachment-0.bin": 16384,
                "lab-attachment-1.bin": 1048576,
                "lab-attachment-2.bin": 10485760
              },
              "send_bytes": 50000,
              "organizations": 1,
              "collections": 1,
              "admin_settings_saved": 1,
              "kdf": "PBKDF2-HMAC-SHA256 600000",
              "verified_after_seeding": true,
              "uninvited_registration_status": 400
            }
          },
          "output_tail": [
            "admin login -> 200 cookie set: True",
            "admin invite -> 200",
            "save one admin setting (creates config.json) -> 200",
            "account registered and logged in (PBKDF2-SHA256 600000 iterations)",
            "created 220 personal items in 0.6s",
            "attachment 0: 16384 bytes plaintext, 16449 bytes stored",
            "attachment 1: 1048576 bytes plaintext, 1048641 bytes stored",
            "attachment 2: 10485760 bytes plaintext, 10485825 bytes stored",
            "seed verification: {'item_count': 'PASS', 'items_decrypt': 'PASS', 'fields_match': 'PASS', 'organization': 'PASS', 'attachments_sha256': 'PASS', 'send_listed': 'PASS'}",
            "uninvited registration -> 400"
          ],
          "description": "Seed the vault with the Bitwarden client cryptography written in Python (no real client is involved): the admin page invites the e-mail address, the account is registered (PBKDF2-SHA256, 600,000 iterations), 200 logins and 20 secure notes are created, three attachments (16 KiB, 1 MiB, 10 MiB of seeded random bytes), one file Send, one organization with one collection and 5 organization logins, and one admin setting is saved (which creates config.json). Everything is then read back from the live server and checked. Not measured."
        }
      ],
      "idle": {
        "per_service": {
          "toolbox": {
            "samples": 11,
            "mem_mean_mib": 140.04,
            "mem_max_mib": 140.2,
            "cpu_mean_pct": 0.48,
            "cpu_max_pct": 2.64
          },
          "vaultwarden": {
            "samples": 11,
            "mem_mean_mib": 16.68,
            "mem_max_mib": 16.9,
            "cpu_mean_pct": 0.0,
            "cpu_max_pct": 0.01
          }
        },
        "total": {
          "samples": 11,
          "dropped_for_total": 0,
          "mem_mean_mib": 156.72,
          "mem_max_mib": 156.99,
          "cpu_mean_pct": 0.48,
          "cpu_max_pct": 2.64
        },
        "window_seconds": 30.2,
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 156.64,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 3.0,
            "total_mem_mib": 156.64,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 156.54,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 9.1,
            "total_mem_mib": 156.64,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 156.7,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 15.1,
            "total_mem_mib": 156.99,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 18.1,
            "total_mem_mib": 156.89,
            "total_cpu_pct": 2.62
          },
          {
            "t_offset_s": 21.2,
            "total_mem_mib": 156.66,
            "total_cpu_pct": 0.01
          },
          {
            "t_offset_s": 24.2,
            "total_mem_mib": 156.66,
            "total_cpu_pct": 2.64
          },
          {
            "t_offset_s": 27.2,
            "total_mem_mib": 156.66,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 30.2,
            "total_mem_mib": 156.86,
            "total_cpu_pct": 0.0
          }
        ],
        "memory_stat": {
          "read_at": "2026-10-22T03:56:09Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 0.09,
              "file_mib": 269.0,
              "active_file_mib": 91.3,
              "inactive_file_mib": 177.7,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 15.25,
              "file_mib": 15.45,
              "active_file_mib": 0.0,
              "inactive_file_mib": 15.45,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.1,
          "method": "docker exec <container> cat /sys/fs/cgroup/memory.stat (cgroup v1: /sys/fs/cgroup/memory/memory.stat); MiB; splits what docker stats shows as one number into anon (heap) and file cache; a field that is absent was not printed by the kernel or not readable (see reason)",
          "taken": "right after the idle window"
        }
      },
      "settle": {
        "settled": true,
        "mode": "detected",
        "settle_seconds_used": 121.0,
        "settle_started_after_healthy_s": 17.7,
        "params": {
          "window_seconds": 60,
          "threshold_pct": 2.0,
          "threshold_min_mib": 10.0,
          "min_seconds": 120,
          "max_seconds": 600
        },
        "last_window": {
          "n": 20,
          "mean_mib": 156.61,
          "min_mib": 156.33,
          "max_mib": 157.15,
          "spread_mib": 0.82,
          "threshold_mib": 10.0
        },
        "rechecks": 0,
        "rule": "settled = over the last window_seconds the stack total varied (max - min) by less than max(threshold_pct of the window mean, threshold_min_mib); not before min_seconds, at the latest max_seconds, both counted from the end of the setup steps; the idle window must also be flat and agree with it. If max_seconds passes without settling, settled=false and the idle window is measured anyway."
      },
      "startup_peak": {
        "per_service_mem_mib": {
          "toolbox": 304.9,
          "vaultwarden": 18.71
        },
        "total_mem_mib": 311.62,
        "samples": 47,
        "note": "highest value across docker stats samples (about one every 2-3 s) from healthy until the stack settled; shorter spikes between samples are not seen"
      },
      "timeline": {
        "step_s": 10,
        "t0": "healthy",
        "offsets_s": [
          10,
          20,
          30,
          40,
          50,
          60,
          70,
          80,
          90,
          100,
          110,
          120,
          130,
          140,
          150,
          160,
          170
        ],
        "total_mem_mib": [
          151.3,
          226.7,
          158.0,
          156.9,
          157.0,
          156.6,
          156.5,
          156.5,
          156.5,
          156.9,
          156.5,
          156.6,
          156.6,
          156.5,
          156.6,
          156.8,
          156.7
        ],
        "per_service_mem_mib": {
          "toolbox": [
            144.6,
            214.0,
            140.0,
            139.9,
            140.2,
            140.1,
            139.9,
            139.9,
            140.0,
            140.1,
            139.9,
            140.1,
            140.0,
            140.0,
            140.1,
            140.0,
            140.1
          ],
          "vaultwarden": [
            6.8,
            12.7,
            18.0,
            17.0,
            16.7,
            16.5,
            16.6,
            16.6,
            16.5,
            16.8,
            16.6,
            16.5,
            16.6,
            16.6,
            16.5,
            16.8,
            16.7
          ]
        }
      },
      "load": {
        "per_service": {
          "toolbox": {
            "samples": 87,
            "mem_mean_mib": 247.39,
            "mem_max_mib": 369.5,
            "cpu_mean_pct": 38.21,
            "cpu_max_pct": 104.33
          },
          "vaultwarden": {
            "samples": 87,
            "mem_mean_mib": 17.01,
            "mem_max_mib": 25.62,
            "cpu_mean_pct": 2.19,
            "cpu_max_pct": 79.64
          }
        },
        "total": {
          "samples": 87,
          "dropped_for_total": 0,
          "mem_mean_mib": 264.4,
          "mem_max_mib": 386.72,
          "cpu_mean_pct": 40.4,
          "cpu_max_pct": 158.05
        },
        "description": "One script inside the toolbox container, in this order. (1) Log in as the seeded user and check the live vault (225 items, field by field; 3 attachments by SHA-256; the organization; the Send). (2) Back up with M1, the SQLite online backup API (`sqlite3 db.sqlite3 \".backup\"`) plus a tar of attachments, sends, config.json and rsa_key*, with Vaultwarden running. (3) M1b, Vaultwarden's own `/vaultwarden backup` plus the same tar. (4) M3, a plain `cp db.sqlite3` (main file only) while four threads keep creating items, to count how many acknowledged items the copy lacks (the extra items are deleted afterwards). (5) M2, a cold copy: `docker stop`, tar of the whole data folder, `docker start`, with the downtime measured until /alive answers. (6) Check that the live vault still verifies. (7) For each backup, restore into a FRESH Vaultwarden project (`docker compose -p vwr-...`, its own volume and network, the same pinned image), start it, log in with the original master password, and verify: all 225 items decrypt and match field by field, the attachments' SHA-256, the organization and collection, the Send, an access token issued before the backup, the rsa key and the admin setting; and the same vault is read again with the official Bitwarden CLI (login over HTTPS, `bw list items`, `bw export`, `bw get attachment`). (8) Three controls: the M1 backup restored with rsa_key*, attachments, or config.json left out. Each timed command reports its seconds and peak resident memory.",
        "duration_s": 171.9,
        "window": "from LAB_MARK load_start (or step start) until 2 s after the step ended",
        "reported_by_script": {
          "vault": {
            "items": 225,
            "attachments_bytes": 11550720,
            "data_folder_bytes": 16169203,
            "data_folder_files": {
              "attachments/1bb6b34d-0596-4a24-80dc-57abc51bc0b6/430cf79e55cad59eba9e": 1048641,
              "attachments/4307f262-c0b4-4a19-8f13-e3afa1f21e8d/dc4caaba859bd96d1f75": 16449,
              "attachments/67978ab4-9260-4260-bbc0-1c01ea068dce/049ac331fe35a481f38b": 10485825,
              "config.json": 48,
              "db.sqlite3": 413696,
              "db.sqlite3-shm": 32768,
              "db.sqlite3-wal": 4120032,
              "rsa_key.pem": 1679,
              "sends/40972498-52d7-4c97-8521-ff293796c29a/7266f1409edfa97378e83e0625a8c59bf3e7383820555cf201e75f78b067c759": 50065
            },
            "live_checks": {
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS"
            },
            "image": "vaultwarden/server:1.37.4"
          },
          "tools": {
            "sqlite3": "3.49.2",
            "tar_and_time": "busybox 1.37.0",
            "bw": "2026.10.0",
            "docker_cli": "Docker version 28.5.2, build ecc6942",
            "vaultwarden": "Vaultwarden 1.37.4"
          },
          "m1_sqlite_online": {
            "method": "sqlite3 .backup + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.477,
            "ok": true,
            "peak_rss_mib": 3.08,
            "commands": {
              "sqlite3_backup": {
                "seconds": 0.009,
                "exit_code": 0,
                "peak_rss_mib": 3.08,
                "output": ""
              },
              "tar_files": {
                "seconds": 0.467,
                "exit_code": 0,
                "peak_rss_mib": 1.19,
                "output": ""
              }
            },
            "db_bytes": 499712,
            "files_tar_bytes": 11605603,
            "backup_bytes": 12105315,
            "db_integrity_check": "ok"
          },
          "m1b_builtin_backup": {
            "method": "vaultwarden backup (built in) + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.494,
            "ok": true,
            "peak_rss_mib": 22.23,
            "commands": {
              "vaultwarden_backup": {
                "seconds": 0.106,
                "exit_code": 0,
                "peak_rss_mib": 22.23,
                "samples": 43,
                "note": "seconds include docker exec; RSS = highest VmHWM of the backup process seen by a polling loop in the container (not exact)"
              },
              "tar_files": {
                "seconds": 0.387,
                "exit_code": 0,
                "peak_rss_mib": 1.28,
                "output": ""
              }
            },
            "db_file": "db_20261022_035611.sqlite3",
            "db_bytes": 499712,
            "files_tar_bytes": 11605603,
            "backup_bytes": 12105315,
            "db_integrity_check": "ok"
          },
          "m3_naive_cp_while_writing": {
            "method": "cp db.sqlite3 (main file only, no -wal) while 4 threads create items + tar of the other files",
            "downtime_s": 0.0,
            "seconds": 1.04,
            "ok": true,
            "peak_rss_mib": 1.17,
            "commands": {
              "cp_db": {
                "seconds": 0.005,
                "exit_code": 0,
                "peak_rss_mib": 0.93,
                "output": ""
              },
              "tar_files": {
                "seconds": 1.035,
                "exit_code": 0,
                "peak_rss_mib": 1.17,
                "output": ""
              }
            },
            "items_created_while_copying": 1022,
            "items_acknowledged_before_cp": 499,
            "write_errors": 0,
            "db_bytes": 839680,
            "wal_bytes_at_copy": 4293072,
            "main_db_bytes_live_at_copy": 839680,
            "shm_present_at_copy": true,
            "db_integrity_check": "ok",
            "backup_bytes": 12445283
          },
          "m2_cold_copy": {
            "method": "docker stop, tar of the whole data folder, docker start",
            "downtime_s": 0.93,
            "seconds": 0.927,
            "ok": true,
            "peak_rss_mib": 1.15,
            "commands": {
              "docker_stop": {
                "seconds": 0.152,
                "exit_code": 0
              },
              "tar_data": {
                "seconds": 0.569,
                "exit_code": 0,
                "peak_rss_mib": 1.15,
                "output": ""
              },
              "docker_start": {
                "seconds": 0.153,
                "exit_code": 0
              }
            },
            "wal_files_after_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "wal_files_before_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "backup_bytes": 13469869,
            "data_tar_bytes": 13469869
          },
          "live_after_backups": {
            "item_count": "PASS",
            "items_decrypt": "PASS",
            "fields_match": "PASS",
            "organization": "PASS",
            "attachments_sha256": "PASS",
            "send_listed": "PASS",
            "old_token_accepted": "PASS"
          },
          "restore_m1_sqlite_online": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.2,
            "container_healthy": true,
            "bw_check_seconds": 34.97,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.71,
            "pass": true
          },
          "restore_m1b_builtin_backup": {
            "restore_script": "tar xzf /backup/m1b/vw-files.tar.gz -C /data; cp /backup/m1b/db_20261022_035611.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.18,
            "container_healthy": true,
            "bw_check_seconds": 35.26,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.72,
            "pass": true
          },
          "restore_m2_cold_copy": {
            "restore_script": "tar xzf /backup/m2/vw-data.tar.gz -C /data",
            "restore_seconds": 2.23,
            "container_healthy": true,
            "bw_check_seconds": 35.91,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.73,
            "pass": true
          },
          "restore_m3_naive_cp_while_writing": {
            "restore_script": "tar xzf /backup/m3/vw-files.tar.gz -C /data; cp /backup/m3/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.22,
            "container_healthy": true,
            "m3_writes": {
              "acknowledged_before_cp": 499,
              "found_in_restored_vault": 388,
              "missing": 111,
              "items_found_in_restored_vault_total": 388
            },
            "bw_check_seconds": 36.68,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "acknowledged_writes_present": "FAIL",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "acknowledged_writes_present": "388 of 499 items acknowledged by the server before the copy are in the restored vault",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.76,
            "pass": false
          },
          "restore_m1_without_rsa_key": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='rsa_key*'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.19,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "FAIL",
              "rsa_key_is_the_original": "FAIL",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 9,
            "failed": 2,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 401 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.7,
            "pass": false
          },
          "restore_m1_without_attachments": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='attachments'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.16,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "FAIL",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.58,
            "pass": false
          },
          "restore_m1_without_config_json": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='config.json'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.2,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "FAIL",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "no config.json",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.73,
            "pass": false
          },
          "summary": {
            "restore_pass": {
              "m1_sqlite_online": true,
              "m1b_builtin_backup": true,
              "m2_cold_copy": true,
              "m3_naive_cp_while_writing": false,
              "m1_without_rsa_key": false,
              "m1_without_attachments": false,
              "m1_without_config_json": false
            },
            "methods_restored_ok": [
              "m1_sqlite_online",
              "m1b_builtin_backup",
              "m2_cold_copy"
            ],
            "all_ok": true
          },
          "all_ok": true
        },
        "output_tail": [
          "restore m2_cold_copy: pass=True passed=15 failed=0 restore_seconds=2.23 error=None",
          "restore m3_naive_cp_while_writing: pass=False passed=15 failed=1 restore_seconds=2.22 error=None",
          "  FAIL acknowledged_writes_present: 388 of 499 items acknowledged by the server before the copy are in the restored vault",
          "restore m1_without_rsa_key: pass=False passed=9 failed=2 restore_seconds=2.19 error=None",
          "  FAIL old_token_accepted: HTTP 401 for an access token issued before the backup",
          "  FAIL rsa_key_is_the_original: rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
          "restore m1_without_attachments: pass=False passed=10 failed=1 restore_seconds=2.16 error=None",
          "  FAIL attachments_sha256: 0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
          "restore m1_without_config_json: pass=False passed=10 failed=1 restore_seconds=2.2 error=None",
          "  FAIL admin_setting_restored: no config.json"
        ],
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 184.0,
            "total_cpu_pct": 130.8,
            "mem_mib": [
              160.9,
              23.1
            ],
            "cpu_pct": [
              70.78,
              60.02
            ]
          },
          {
            "t_offset_s": 2.0,
            "total_mem_mib": 187.02,
            "total_cpu_pct": 158.05,
            "mem_mib": [
              161.4,
              25.62
            ],
            "cpu_pct": [
              78.41,
              79.64
            ]
          },
          {
            "t_offset_s": 4.0,
            "total_mem_mib": 161.6,
            "total_cpu_pct": 35.38,
            "mem_mib": [
              161.6,
              0.0
            ],
            "cpu_pct": [
              35.38,
              0.0
            ]
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 200.19,
            "total_cpu_pct": 62.12,
            "mem_mib": [
              183.3,
              16.89
            ],
            "cpu_pct": [
              33.9,
              28.22
            ]
          },
          {
            "t_offset_s": 8.1,
            "total_mem_mib": 182.59,
            "total_cpu_pct": 33.05,
            "mem_mib": [
              165.7,
              16.89
            ],
            "cpu_pct": [
              33.05,
              0.0
            ]
          },
          {
            "t_offset_s": 10.1,
            "total_mem_mib": 274.19,
            "total_cpu_pct": 46.85,
            "mem_mib": [
              257.3,
              16.89
            ],
            "cpu_pct": [
              46.85,
              0.0
            ]
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 230.24,
            "total_cpu_pct": 61.04,
            "mem_mib": [
              213.1,
              17.14
            ],
            "cpu_pct": [
              61.04,
              0.0
            ]
          },
          {
            "t_offset_s": 14.1,
            "total_mem_mib": 277.54,
            "total_cpu_pct": 40.81,
            "mem_mib": [
              260.4,
              17.14
            ],
            "cpu_pct": [
              40.81,
              0.0
            ]
          },
          {
            "t_offset_s": 16.1,
            "total_mem_mib": 277.37,
            "total_cpu_pct": 60.63,
            "mem_mib": [
              260.6,
              16.77
            ],
            "cpu_pct": [
              60.57,
              0.06
            ]
          },
          {
            "t_offset_s": 18.1,
            "total_mem_mib": 301.63,
            "total_cpu_pct": 30.75,
            "mem_mib": [
              284.9,
              16.73
            ],
            "cpu_pct": [
              30.75,
              0.0
            ]
          },
          {
            "t_offset_s": 20.1,
            "total_mem_mib": 220.79,
            "total_cpu_pct": 61.01,
            "mem_mib": [
              203.7,
              17.09
            ],
            "cpu_pct": [
              61.01,
              0.0
            ]
          },
          {
            "t_offset_s": 22.1,
            "total_mem_mib": 279.16,
            "total_cpu_pct": 0.11,
            "mem_mib": [
              262.3,
              16.86
            ],
            "cpu_pct": [
              0.11,
              0.0
            ]
          },
          {
            "t_offset_s": 24.1,
            "total_mem_mib": 292.76,
            "total_cpu_pct": 97.64,
            "mem_mib": [
              275.9,
              16.86
            ],
            "cpu_pct": [
              97.64,
              0.0
            ]
          },
          {
            "t_offset_s": 26.2,
            "total_mem_mib": 287.26,
            "total_cpu_pct": 0.08,
            "mem_mib": [
              270.4,
              16.86
            ],
            "cpu_pct": [
              0.08,
              0.0
            ]
          },
          {
            "t_offset_s": 28.2,
            "total_mem_mib": 287.96,
            "total_cpu_pct": 52.36,
            "mem_mib": [
              271.1,
              16.86
            ],
            "cpu_pct": [
              52.36,
              0.0
            ]
          },
          {
            "t_offset_s": 30.2,
            "total_mem_mib": 290.26,
            "total_cpu_pct": 0.14,
            "mem_mib": [
              273.4,
              16.86
            ],
            "cpu_pct": [
              0.14,
              0.0
            ]
          },
          {
            "t_offset_s": 32.2,
            "total_mem_mib": 291.86,
            "total_cpu_pct": 47.81,
            "mem_mib": [
              275.0,
              16.86
            ],
            "cpu_pct": [
              47.81,
              0.0
            ]
          },
          {
            "t_offset_s": 34.2,
            "total_mem_mib": 295.56,
            "total_cpu_pct": 2.72,
            "mem_mib": [
              278.7,
              16.86
            ],
            "cpu_pct": [
              2.71,
              0.01
            ]
          },
          {
            "t_offset_s": 36.2,
            "total_mem_mib": 288.73,
            "total_cpu_pct": 50.8,
            "mem_mib": [
              271.3,
              17.43
            ],
            "cpu_pct": [
              45.97,
              4.83
            ]
          },
          {
            "t_offset_s": 38.2,
            "total_mem_mib": 298.93,
            "total_cpu_pct": 0.13,
            "mem_mib": [
              281.5,
              17.43
            ],
            "cpu_pct": [
              0.13,
              0.0
            ]
          },
          {
            "t_offset_s": 40.2,
            "total_mem_mib": 285.89,
            "total_cpu_pct": 73.51,
            "mem_mib": [
              268.7,
              17.19
            ],
            "cpu_pct": [
              73.51,
              0.0
            ]
          },
          {
            "t_offset_s": 42.2,
            "total_mem_mib": 381.59,
            "total_cpu_pct": 0.13,
            "mem_mib": [
              364.4,
              17.19
            ],
            "cpu_pct": [
              0.13,
              0.0
            ]
          },
          {
            "t_offset_s": 44.3,
            "total_mem_mib": 202.46,
            "total_cpu_pct": 29.57,
            "mem_mib": [
              185.3,
              17.16
            ],
            "cpu_pct": [
              29.57,
              0.0
            ]
          },
          {
            "t_offset_s": 46.3,
            "total_mem_mib": 189.85,
            "total_cpu_pct": 36.6,
            "mem_mib": [
              172.9,
              16.95
            ],
            "cpu_pct": [
              36.58,
              0.02
            ]
          },
          {
            "t_offset_s": 48.3,
            "total_mem_mib": 277.35,
            "total_cpu_pct": 29.09,
            "mem_mib": [
              260.4,
              16.95
            ],
            "cpu_pct": [
              29.09,
              0.0
            ]
          },
          {
            "t_offset_s": 50.3,
            "total_mem_mib": 231.85,
            "total_cpu_pct": 66.03,
            "mem_mib": [
              214.9,
              16.95
            ],
            "cpu_pct": [
              66.03,
              0.0
            ]
          },
          {
            "t_offset_s": 52.3,
            "total_mem_mib": 274.45,
            "total_cpu_pct": 34.61,
            "mem_mib": [
              257.5,
              16.95
            ],
            "cpu_pct": [
              34.61,
              0.0
            ]
          },
          {
            "t_offset_s": 54.3,
            "total_mem_mib": 277.45,
            "total_cpu_pct": 41.33,
            "mem_mib": [
              260.5,
              16.95
            ],
            "cpu_pct": [
              41.33,
              0.0
            ]
          },
          {
            "t_offset_s": 56.3,
            "total_mem_mib": 298.75,
            "total_cpu_pct": 33.63,
            "mem_mib": [
              281.8,
              16.95
            ],
            "cpu_pct": [
              33.63,
              0.0
            ]
          },
          {
            "t_offset_s": 58.3,
            "total_mem_mib": 212.15,
            "total_cpu_pct": 51.15,
            "mem_mib": [
              195.2,
              16.95
            ],
            "cpu_pct": [
              51.15,
              0.0
            ]
          },
          {
            "t_offset_s": 60.3,
            "total_mem_mib": 279.85,
            "total_cpu_pct": 0.52,
            "mem_mib": [
              262.9,
              16.95
            ],
            "cpu_pct": [
              0.52,
              0.0
            ]
          },
          {
            "t_offset_s": 62.3,
            "total_mem_mib": 284.15,
            "total_cpu_pct": 88.48,
            "mem_mib": [
              267.2,
              16.95
            ],
            "cpu_pct": [
              88.48,
              0.0
            ]
          },
          {
            "t_offset_s": 64.4,
            "total_mem_mib": 290.45,
            "total_cpu_pct": 2.81,
            "mem_mib": [
              273.5,
              16.95
            ],
            "cpu_pct": [
              2.81,
              0.0
            ]
          },
          {
            "t_offset_s": 66.4,
            "total_mem_mib": 289.97,
            "total_cpu_pct": 49.39,
            "mem_mib": [
              272.7,
              17.27
            ],
            "cpu_pct": [
              44.45,
              4.94
            ]
          },
          {
            "t_offset_s": 68.4,
            "total_mem_mib": 290.47,
            "total_cpu_pct": 0.14,
            "mem_mib": [
              273.2,
              17.27
            ],
            "cpu_pct": [
              0.14,
              0.0
            ]
          },
          {
            "t_offset_s": 70.4,
            "total_mem_mib": 290.91,
            "total_cpu_pct": 47.27,
            "mem_mib": [
              273.8,
              17.11
            ],
            "cpu_pct": [
              47.27,
              0.0
            ]
          },
          {
            "t_offset_s": 72.4,
            "total_mem_mib": 297.38,
            "total_cpu_pct": 0.15,
            "mem_mib": [
              280.4,
              16.98
            ],
            "cpu_pct": [
              0.15,
              0.0
            ]
          },
          {
            "t_offset_s": 74.4,
            "total_mem_mib": 288.18,
            "total_cpu_pct": 54.82,
            "mem_mib": [
              271.2,
              16.98
            ],
            "cpu_pct": [
              54.82,
              0.0
            ]
          },
          {
            "t_offset_s": 76.4,
            "total_mem_mib": 299.38,
            "total_cpu_pct": 0.15,
            "mem_mib": [
              282.4,
              16.98
            ],
            "cpu_pct": [
              0.14,
              0.01
            ]
          },
          {
            "t_offset_s": 78.4,
            "total_mem_mib": 288.88,
            "total_cpu_pct": 70.16,
            "mem_mib": [
              271.9,
              16.98
            ],
            "cpu_pct": [
              70.16,
              0.0
            ]
          },
          {
            "t_offset_s": 80.4,
            "total_mem_mib": 376.76,
            "total_cpu_pct": 15.39,
            "mem_mib": [
              359.8,
              16.96
            ],
            "cpu_pct": [
              15.39,
              0.0
            ]
          },
          {
            "t_offset_s": 82.5,
            "total_mem_mib": 189.66,
            "total_cpu_pct": 26.65,
            "mem_mib": [
              172.7,
              16.96
            ],
            "cpu_pct": [
              26.65,
              0.0
            ]
          },
          {
            "t_offset_s": 84.5,
            "total_mem_mib": 181.66,
            "total_cpu_pct": 24.93,
            "mem_mib": [
              164.7,
              16.96
            ],
            "cpu_pct": [
              24.93,
              0.0
            ]
          },
          {
            "t_offset_s": 86.5,
            "total_mem_mib": 280.16,
            "total_cpu_pct": 73.04,
            "mem_mib": [
              263.2,
              16.96
            ],
            "cpu_pct": [
              73.04,
              0.0
            ]
          },
          {
            "t_offset_s": 88.5,
            "total_mem_mib": 213.96,
            "total_cpu_pct": 33.92,
            "mem_mib": [
              197.0,
              16.96
            ],
            "cpu_pct": [
              33.92,
              0.0
            ]
          },
          {
            "t_offset_s": 90.5,
            "total_mem_mib": 274.66,
            "total_cpu_pct": 65.79,
            "mem_mib": [
              257.7,
              16.96
            ],
            "cpu_pct": [
              65.79,
              0.0
            ]
          },
          {
            "t_offset_s": 92.5,
            "total_mem_mib": 277.06,
            "total_cpu_pct": 21.62,
            "mem_mib": [
              260.1,
              16.96
            ],
            "cpu_pct": [
              21.62,
              0.0
            ]
          },
          {
            "t_offset_s": 94.5,
            "total_mem_mib": 306.46,
            "total_cpu_pct": 27.86,
            "mem_mib": [
              289.5,
              16.96
            ],
            "cpu_pct": [
              27.86,
              0.0
            ]
          },
          {
            "t_offset_s": 96.5,
            "total_mem_mib": 300.54,
            "total_cpu_pct": 28.43,
            "mem_mib": [
              283.2,
              17.34
            ],
            "cpu_pct": [
              23.58,
              4.85
            ]
          },
          {
            "t_offset_s": 98.6,
            "total_mem_mib": 280.03,
            "total_cpu_pct": 35.21,
            "mem_mib": [
              262.8,
              17.23
            ],
            "cpu_pct": [
              35.21,
              0.0
            ]
          },
          {
            "t_offset_s": 100.6,
            "total_mem_mib": 226.43,
            "total_cpu_pct": 60.21,
            "mem_mib": [
              209.2,
              17.23
            ],
            "cpu_pct": [
              60.21,
              0.0
            ]
          },
          {
            "t_offset_s": 102.6,
            "total_mem_mib": 290.93,
            "total_cpu_pct": 19.87,
            "mem_mib": [
              273.7,
              17.23
            ],
            "cpu_pct": [
              19.87,
              0.0
            ]
          },
          {
            "t_offset_s": 104.6,
            "total_mem_mib": 234.23,
            "total_cpu_pct": 75.92,
            "mem_mib": [
              217.0,
              17.23
            ],
            "cpu_pct": [
              75.92,
              0.0
            ]
          },
          {
            "t_offset_s": 106.6,
            "total_mem_mib": 291.05,
            "total_cpu_pct": 39.33,
            "mem_mib": [
              274.0,
              17.05
            ],
            "cpu_pct": [
              39.31,
              0.02
            ]
          },
          {
            "t_offset_s": 108.6,
            "total_mem_mib": 235.35,
            "total_cpu_pct": 75.06,
            "mem_mib": [
              218.3,
              17.05
            ],
            "cpu_pct": [
              75.06,
              0.0
            ]
          },
          {
            "t_offset_s": 110.6,
            "total_mem_mib": 290.25,
            "total_cpu_pct": 12.93,
            "mem_mib": [
              273.2,
              17.05
            ],
            "cpu_pct": [
              12.93,
              0.0
            ]
          },
          {
            "t_offset_s": 112.6,
            "total_mem_mib": 232.65,
            "total_cpu_pct": 66.97,
            "mem_mib": [
              215.6,
              17.05
            ],
            "cpu_pct": [
              66.97,
              0.0
            ]
          },
          {
            "t_offset_s": 114.6,
            "total_mem_mib": 307.85,
            "total_cpu_pct": 22.65,
            "mem_mib": [
              290.8,
              17.05
            ],
            "cpu_pct": [
              22.65,
              0.0
            ]
          },
          {
            "t_offset_s": 116.6,
            "total_mem_mib": 226.0,
            "total_cpu_pct": 56.34,
            "mem_mib": [
              209.0,
              17.0
            ],
            "cpu_pct": [
              56.34,
              0.0
            ]
          },
          {
            "t_offset_s": 118.6,
            "total_mem_mib": 361.9,
            "total_cpu_pct": 70.3,
            "mem_mib": [
              344.9,
              17.0
            ],
            "cpu_pct": [
              70.3,
              0.0
            ]
          },
          {
            "t_offset_s": 120.7,
            "total_mem_mib": 382.1,
            "total_cpu_pct": 2.64,
            "mem_mib": [
              365.1,
              17.0
            ],
            "cpu_pct": [
              2.64,
              0.0
            ]
          },
          {
            "t_offset_s": 122.7,
            "total_mem_mib": 203.5,
            "total_cpu_pct": 0.37,
            "mem_mib": [
              186.5,
              17.0
            ],
            "cpu_pct": [
              0.37,
              0.0
            ]
          },
          {
            "t_offset_s": 124.7,
            "total_mem_mib": 215.6,
            "total_cpu_pct": 62.74,
            "mem_mib": [
              198.6,
              17.0
            ],
            "cpu_pct": [
              62.74,
              0.0
            ]
          },
          {
            "t_offset_s": 126.7,
            "total_mem_mib": 277.81,
            "total_cpu_pct": 4.1,
            "mem_mib": [
              260.5,
              17.31
            ],
            "cpu_pct": [
              0.11,
              3.99
            ]
          },
          {
            "t_offset_s": 128.7,
            "total_mem_mib": 277.63,
            "total_cpu_pct": 87.42,
            "mem_mib": [
              260.6,
              17.03
            ],
            "cpu_pct": [
              87.42,
              0.0
            ]
          },
          {
            "t_offset_s": 130.7,
            "total_mem_mib": 280.63,
            "total_cpu_pct": 5.24,
            "mem_mib": [
              263.6,
              17.03
            ],
            "cpu_pct": [
              5.24,
              0.0
            ]
          },
          {
            "t_offset_s": 132.7,
            "total_mem_mib": 290.43,
            "total_cpu_pct": 49.97,
            "mem_mib": [
              273.4,
              17.03
            ],
            "cpu_pct": [
              49.97,
              0.0
            ]
          },
          {
            "t_offset_s": 134.7,
            "total_mem_mib": 297.43,
            "total_cpu_pct": 13.44,
            "mem_mib": [
              280.4,
              17.03
            ],
            "cpu_pct": [
              13.44,
              0.0
            ]
          },
          {
            "t_offset_s": 136.7,
            "total_mem_mib": 198.3,
            "total_cpu_pct": 54.01,
            "mem_mib": [
              181.3,
              17.0
            ],
            "cpu_pct": [
              54.0,
              0.01
            ]
          },
          {
            "t_offset_s": 138.7,
            "total_mem_mib": 292.3,
            "total_cpu_pct": 3.82,
            "mem_mib": [
              275.3,
              17.0
            ],
            "cpu_pct": [
              3.82,
              0.0
            ]
          },
          {
            "t_offset_s": 140.8,
            "total_mem_mib": 276.7,
            "total_cpu_pct": 98.92,
            "mem_mib": [
              259.7,
              17.0
            ],
            "cpu_pct": [
              98.92,
              0.0
            ]
          },
          {
            "t_offset_s": 142.8,
            "total_mem_mib": 296.8,
            "total_cpu_pct": 2.13,
            "mem_mib": [
              279.8,
              17.0
            ],
            "cpu_pct": [
              2.13,
              0.0
            ]
          },
          {
            "t_offset_s": 144.8,
            "total_mem_mib": 284.0,
            "total_cpu_pct": 104.33,
            "mem_mib": [
              267.0,
              17.0
            ],
            "cpu_pct": [
              104.33,
              0.0
            ]
          },
          {
            "t_offset_s": 146.8,
            "total_mem_mib": 296.2,
            "total_cpu_pct": 10.69,
            "mem_mib": [
              279.2,
              17.0
            ],
            "cpu_pct": [
              10.69,
              0.0
            ]
          },
          {
            "t_offset_s": 148.8,
            "total_mem_mib": 283.2,
            "total_cpu_pct": 98.3,
            "mem_mib": [
              266.2,
              17.0
            ],
            "cpu_pct": [
              98.3,
              0.0
            ]
          },
          {
            "t_offset_s": 150.8,
            "total_mem_mib": 295.1,
            "total_cpu_pct": 10.87,
            "mem_mib": [
              278.1,
              17.0
            ],
            "cpu_pct": [
              10.87,
              0.0
            ]
          },
          {
            "t_offset_s": 152.8,
            "total_mem_mib": 274.3,
            "total_cpu_pct": 94.47,
            "mem_mib": [
              257.3,
              17.0
            ],
            "cpu_pct": [
              94.47,
              0.0
            ]
          },
          {
            "t_offset_s": 154.8,
            "total_mem_mib": 305.1,
            "total_cpu_pct": 16.08,
            "mem_mib": [
              287.6,
              17.5
            ],
            "cpu_pct": [
              15.97,
              0.11
            ]
          },
          {
            "t_offset_s": 156.8,
            "total_mem_mib": 236.32,
            "total_cpu_pct": 77.01,
            "mem_mib": [
              219.1,
              17.22
            ],
            "cpu_pct": [
              72.99,
              4.02
            ]
          },
          {
            "t_offset_s": 158.8,
            "total_mem_mib": 386.72,
            "total_cpu_pct": 76.02,
            "mem_mib": [
              369.5,
              17.22
            ],
            "cpu_pct": [
              76.02,
              0.0
            ]
          },
          {
            "t_offset_s": 160.8,
            "total_mem_mib": 205.87,
            "total_cpu_pct": 17.67,
            "mem_mib": [
              188.7,
              17.17
            ],
            "cpu_pct": [
              17.67,
              0.0
            ]
          },
          {
            "t_offset_s": 162.9,
            "total_mem_mib": 205.57,
            "total_cpu_pct": 0.23,
            "mem_mib": [
              188.4,
              17.17
            ],
            "cpu_pct": [
              0.23,
              0.0
            ]
          },
          {
            "t_offset_s": 164.9,
            "total_mem_mib": 205.47,
            "total_cpu_pct": 28.53,
            "mem_mib": [
              188.4,
              17.07
            ],
            "cpu_pct": [
              28.51,
              0.02
            ]
          },
          {
            "t_offset_s": 166.9,
            "total_mem_mib": 192.44,
            "total_cpu_pct": 33.98,
            "mem_mib": [
              175.4,
              17.04
            ],
            "cpu_pct": [
              33.97,
              0.01
            ]
          },
          {
            "t_offset_s": 168.9,
            "total_mem_mib": 205.24,
            "total_cpu_pct": 0.19,
            "mem_mib": [
              188.2,
              17.04
            ],
            "cpu_pct": [
              0.19,
              0.0
            ]
          },
          {
            "t_offset_s": 170.9,
            "total_mem_mib": 159.94,
            "total_cpu_pct": 27.54,
            "mem_mib": [
              142.9,
              17.04
            ],
            "cpu_pct": [
              27.54,
              0.0
            ]
          },
          {
            "t_offset_s": 172.9,
            "total_mem_mib": 159.84,
            "total_cpu_pct": 0.0,
            "mem_mib": [
              142.8,
              17.04
            ],
            "cpu_pct": [
              0.0,
              0.0
            ]
          }
        ],
        "series_start_offset_s": 2.0,
        "peak_note": "peak = highest value seen across docker stats samples (about one every 2-3 s); shorter spikes between samples are not seen",
        "peak_memory_stat": {
          "read_at": "2026-10-22T03:58:52Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 222.52,
              "file_mib": 365.48,
              "active_file_mib": 91.3,
              "inactive_file_mib": 274.18,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 16.23,
              "file_mib": 0.05,
              "active_file_mib": 0.0,
              "inactive_file_mib": 0.05,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.1,
          "series_index": 79,
          "sample_t_offset_s": 158.8,
          "total_mem_mib": 386.72
        },
        "series_services": [
          "toolbox",
          "vaultwarden"
        ]
      },
      "container_end_state": {
        "toolbox": {
          "restart_count": 0,
          "oom_killed": false
        },
        "vaultwarden": {
          "restart_count": 0,
          "oom_killed": false
        }
      },
      "teardown": {
        "done": true,
        "volumes_removed": true,
        "images_removed": false,
        "error": null
      },
      "warnings": [],
      "finished_at": "2026-10-22T03:59:17Z",
      "elapsed_seconds": 360.1
    },
    {
      "run": 2,
      "started_at": "2026-10-22T03:59:17Z",
      "host": {
        "label": "github-actions ubuntu-latest (2 vCPU, 8 GB)",
        "ci": {
          "runs_on": "ubuntu-latest",
          "runner_environment": "github-hosted",
          "runner_os": "Linux",
          "runner_arch": "X64",
          "image_os": "ubuntu24",
          "image_version": "20261012.334.1"
        },
        "cpu_model": "AMD EPYC 9V74 80-Core Processor",
        "cpu_model_note": null,
        "cores": 2,
        "mem_total_mib": 7938,
        "kernel": "6.17.0-1022-azure",
        "os": "Ubuntu 24.04.5 LTS",
        "arch": "x86_64",
        "oci_arch": "amd64",
        "docker_server_version": "28.0.4",
        "docker_client_version": "28.0.4",
        "compose_client_version": "2.38.2",
        "storage_driver": "overlay2",
        "containerd_image_store": false,
        "source": "docker info + throwaway container reading /proc/cpuinfo on the daemon host",
        "compose_note": "Compose runs on the client machine; Docker server fields are from the daemon host"
      },
      "date": "2026-10-22",
      "startup": {
        "seconds": 2.3,
        "ok": true,
        "checks": [
          {
            "type": "http",
            "url": "http://vaultwarden:80/alive",
            "expect_status": [
              200
            ],
            "ok": true,
            "ready_after_s": 2.3,
            "detail": "OK 200"
          }
        ],
        "up_command_seconds": 2.0,
        "definition": "wall clock from starting `docker compose up -d` until every health check passed; checks poll every 0.5 s from a throwaway container on the compose network, so resolution is about +/- 1 s"
      },
      "versions": {
        "toolbox": "28.5.2-cli",
        "vaultwarden": "1.37.4"
      },
      "setup": [
        {
          "exit_code": 0,
          "duration_s": 14.6,
          "reported": {},
          "output_tail": [
            "*",
            "* If you need ICU with non-English locales and legacy charset support, install",
            "* package icu-data-full.",
            "*",
            "bw 2026.10.0",
            "node v22.23.2",
            "sqlite3 3.49.2",
            "cryptography 44.0.3",
            "time -v: ok",
            "Docker version 28.5.2, build ecc6942",
            "2.40.3"
          ],
          "description": "Install the tools the backup host needs inside the toolbox container (Alpine packages: python3, py3-cryptography, sqlite, nodejs, npm, socat, openssl; and the official Bitwarden CLI, npm package @bitwarden/cli 2026.10.0, used as an independent client to check the restored vaults) and print their versions. Not measured."
        },
        {
          "exit_code": 0,
          "duration_s": 2.2,
          "reported": {
            "seed": {
              "items": 225,
              "logins": 200,
              "secure_notes": 20,
              "org_items": 5,
              "attachments": {
                "lab-attachment-0.bin": 16384,
                "lab-attachment-1.bin": 1048576,
                "lab-attachment-2.bin": 10485760
              },
              "send_bytes": 50000,
              "organizations": 1,
              "collections": 1,
              "admin_settings_saved": 1,
              "kdf": "PBKDF2-HMAC-SHA256 600000",
              "verified_after_seeding": true,
              "uninvited_registration_status": 400
            }
          },
          "output_tail": [
            "admin login -> 200 cookie set: True",
            "admin invite -> 200",
            "save one admin setting (creates config.json) -> 200",
            "account registered and logged in (PBKDF2-SHA256 600000 iterations)",
            "created 220 personal items in 0.5s",
            "attachment 0: 16384 bytes plaintext, 16449 bytes stored",
            "attachment 1: 1048576 bytes plaintext, 1048641 bytes stored",
            "attachment 2: 10485760 bytes plaintext, 10485825 bytes stored",
            "seed verification: {'item_count': 'PASS', 'items_decrypt': 'PASS', 'fields_match': 'PASS', 'organization': 'PASS', 'attachments_sha256': 'PASS', 'send_listed': 'PASS'}",
            "uninvited registration -> 400"
          ],
          "description": "Seed the vault with the Bitwarden client cryptography written in Python (no real client is involved): the admin page invites the e-mail address, the account is registered (PBKDF2-SHA256, 600,000 iterations), 200 logins and 20 secure notes are created, three attachments (16 KiB, 1 MiB, 10 MiB of seeded random bytes), one file Send, one organization with one collection and 5 organization logins, and one admin setting is saved (which creates config.json). Everything is then read back from the live server and checked. Not measured."
        }
      ],
      "idle": {
        "per_service": {
          "toolbox": {
            "samples": 12,
            "mem_mean_mib": 139.65,
            "mem_max_mib": 139.8,
            "cpu_mean_pct": 0.44,
            "cpu_max_pct": 2.7
          },
          "vaultwarden": {
            "samples": 12,
            "mem_mean_mib": 16.44,
            "mem_max_mib": 16.7,
            "cpu_mean_pct": 0.0,
            "cpu_max_pct": 0.03
          }
        },
        "total": {
          "samples": 12,
          "dropped_for_total": 0,
          "mem_mean_mib": 156.09,
          "mem_max_mib": 156.4,
          "cpu_mean_pct": 0.44,
          "cpu_max_pct": 2.7
        },
        "window_seconds": 32.3,
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 155.99,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 3.0,
            "total_mem_mib": 155.99,
            "total_cpu_pct": 2.59
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 155.97,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 9.1,
            "total_mem_mib": 156.07,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 156.37,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 14.1,
            "total_mem_mib": 156.4,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 17.1,
            "total_mem_mib": 156.03,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 20.2,
            "total_mem_mib": 156.18,
            "total_cpu_pct": 0.03
          },
          {
            "t_offset_s": 23.2,
            "total_mem_mib": 155.86,
            "total_cpu_pct": 2.7
          },
          {
            "t_offset_s": 26.2,
            "total_mem_mib": 155.86,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 29.2,
            "total_mem_mib": 156.26,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 32.3,
            "total_mem_mib": 156.06,
            "total_cpu_pct": 0.0
          }
        ],
        "memory_stat": {
          "read_at": "2026-10-22T04:02:11Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 0.09,
              "file_mib": 258.29,
              "active_file_mib": 91.3,
              "inactive_file_mib": 166.99,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 15.02,
              "file_mib": 15.45,
              "active_file_mib": 0.0,
              "inactive_file_mib": 15.45,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.1,
          "method": "docker exec <container> cat /sys/fs/cgroup/memory.stat (cgroup v1: /sys/fs/cgroup/memory/memory.stat); MiB; splits what docker stats shows as one number into anon (heap) and file cache; a field that is absent was not printed by the kernel or not readable (see reason)",
          "taken": "right after the idle window"
        }
      },
      "settle": {
        "settled": true,
        "mode": "detected",
        "settle_seconds_used": 121.0,
        "settle_started_after_healthy_s": 17.7,
        "params": {
          "window_seconds": 60,
          "threshold_pct": 2.0,
          "threshold_min_mib": 10.0,
          "min_seconds": 120,
          "max_seconds": 600
        },
        "last_window": {
          "n": 20,
          "mean_mib": 155.97,
          "min_mib": 155.67,
          "max_mib": 156.3,
          "spread_mib": 0.63,
          "threshold_mib": 10.0
        },
        "rechecks": 0,
        "rule": "settled = over the last window_seconds the stack total varied (max - min) by less than max(threshold_pct of the window mean, threshold_min_mib); not before min_seconds, at the latest max_seconds, both counted from the end of the setup steps; the idle window must also be flat and agree with it. If max_seconds passes without settling, settled=false and the idle window is measured anyway."
      },
      "startup_peak": {
        "per_service_mem_mib": {
          "toolbox": 211.1,
          "vaultwarden": 18.09
        },
        "total_mem_mib": 217.86,
        "samples": 47,
        "note": "highest value across docker stats samples (about one every 2-3 s) from healthy until the stack settled; shorter spikes between samples are not seen"
      },
      "timeline": {
        "step_s": 10,
        "t0": "healthy",
        "offsets_s": [
          10,
          20,
          30,
          40,
          50,
          60,
          70,
          80,
          90,
          100,
          110,
          120,
          130,
          140,
          150,
          160,
          170,
          180
        ],
        "total_mem_mib": [
          173.7,
          184.8,
          157.0,
          156.1,
          156.0,
          155.7,
          156.0,
          156.0,
          156.0,
          156.2,
          156.0,
          155.8,
          155.9,
          155.9,
          156.0,
          156.2,
          156.0,
          156.1
        ],
        "per_service_mem_mib": {
          "toolbox": [
            167.0,
            174.2,
            139.5,
            139.6,
            139.7,
            139.5,
            139.4,
            139.5,
            139.6,
            139.4,
            139.5,
            139.5,
            139.5,
            139.6,
            139.7,
            139.7,
            139.5,
            139.6
          ],
          "vaultwarden": [
            6.8,
            10.6,
            17.5,
            16.5,
            16.3,
            16.2,
            16.6,
            16.5,
            16.4,
            16.8,
            16.5,
            16.3,
            16.4,
            16.3,
            16.3,
            16.6,
            16.5,
            16.5
          ]
        }
      },
      "load": {
        "per_service": {
          "toolbox": {
            "samples": 86,
            "mem_mean_mib": 248.18,
            "mem_max_mib": 365.4,
            "cpu_mean_pct": 40.86,
            "cpu_max_pct": 106.64
          },
          "vaultwarden": {
            "samples": 86,
            "mem_mean_mib": 16.93,
            "mem_max_mib": 28.43,
            "cpu_mean_pct": 2.04,
            "cpu_max_pct": 76.73
          }
        },
        "total": {
          "samples": 86,
          "dropped_for_total": 0,
          "mem_mean_mib": 265.12,
          "mem_max_mib": 382.88,
          "cpu_mean_pct": 42.9,
          "cpu_max_pct": 154.94
        },
        "description": "One script inside the toolbox container, in this order. (1) Log in as the seeded user and check the live vault (225 items, field by field; 3 attachments by SHA-256; the organization; the Send). (2) Back up with M1, the SQLite online backup API (`sqlite3 db.sqlite3 \".backup\"`) plus a tar of attachments, sends, config.json and rsa_key*, with Vaultwarden running. (3) M1b, Vaultwarden's own `/vaultwarden backup` plus the same tar. (4) M3, a plain `cp db.sqlite3` (main file only) while four threads keep creating items, to count how many acknowledged items the copy lacks (the extra items are deleted afterwards). (5) M2, a cold copy: `docker stop`, tar of the whole data folder, `docker start`, with the downtime measured until /alive answers. (6) Check that the live vault still verifies. (7) For each backup, restore into a FRESH Vaultwarden project (`docker compose -p vwr-...`, its own volume and network, the same pinned image), start it, log in with the original master password, and verify: all 225 items decrypt and match field by field, the attachments' SHA-256, the organization and collection, the Send, an access token issued before the backup, the rsa key and the admin setting; and the same vault is read again with the official Bitwarden CLI (login over HTTPS, `bw list items`, `bw export`, `bw get attachment`). (8) Three controls: the M1 backup restored with rsa_key*, attachments, or config.json left out. Each timed command reports its seconds and peak resident memory.",
        "duration_s": 170.0,
        "window": "from LAB_MARK load_start (or step start) until 2 s after the step ended",
        "reported_by_script": {
          "vault": {
            "items": 225,
            "attachments_bytes": 11550720,
            "data_folder_bytes": 16169199,
            "data_folder_files": {
              "attachments/77e7284c-387a-4625-a1f5-ec128f6da8c9/9811dc20e8cb0629278b": 16449,
              "attachments/a54036a2-19f6-407c-980c-120514fc581b/04c7f750a1f2e4c10ac5": 1048641,
              "attachments/ddfd7176-2234-432f-a2fe-3d4269f1cc93/ccfbc5eeb137fd35cc06": 10485825,
              "config.json": 48,
              "db.sqlite3": 413696,
              "db.sqlite3-shm": 32768,
              "db.sqlite3-wal": 4120032,
              "rsa_key.pem": 1675,
              "sends/6ef4861e-fc4e-4201-adbd-211953e17d75/c96346acff09895a15f15ffce6d96ff9218fca1615b7964ea01bc534ecfa44b3": 50065
            },
            "live_checks": {
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS"
            },
            "image": "vaultwarden/server:1.37.4"
          },
          "tools": {
            "sqlite3": "3.49.2",
            "tar_and_time": "busybox 1.37.0",
            "bw": "2026.10.0",
            "docker_cli": "Docker version 28.5.2, build ecc6942",
            "vaultwarden": "Vaultwarden 1.37.4"
          },
          "m1_sqlite_online": {
            "method": "sqlite3 .backup + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.401,
            "ok": true,
            "peak_rss_mib": 3.38,
            "commands": {
              "sqlite3_backup": {
                "seconds": 0.005,
                "exit_code": 0,
                "peak_rss_mib": 3.38,
                "output": ""
              },
              "tar_files": {
                "seconds": 0.395,
                "exit_code": 0,
                "peak_rss_mib": 1.25,
                "output": ""
              }
            },
            "db_bytes": 499712,
            "files_tar_bytes": 11605669,
            "backup_bytes": 12105381,
            "db_integrity_check": "ok"
          },
          "m1b_builtin_backup": {
            "method": "vaultwarden backup (built in) + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.494,
            "ok": true,
            "peak_rss_mib": 21.92,
            "commands": {
              "vaultwarden_backup": {
                "seconds": 0.104,
                "exit_code": 0,
                "peak_rss_mib": 21.92,
                "samples": 42,
                "note": "seconds include docker exec; RSS = highest VmHWM of the backup process seen by a polling loop in the container (not exact)"
              },
              "tar_files": {
                "seconds": 0.388,
                "exit_code": 0,
                "peak_rss_mib": 1.19,
                "output": ""
              }
            },
            "db_file": "db_20261022_040214.sqlite3",
            "db_bytes": 499712,
            "files_tar_bytes": 11605669,
            "backup_bytes": 12105381,
            "db_integrity_check": "ok"
          },
          "m3_naive_cp_while_writing": {
            "method": "cp db.sqlite3 (main file only, no -wal) while 4 threads create items + tar of the other files",
            "downtime_s": 0.0,
            "seconds": 0.941,
            "ok": true,
            "peak_rss_mib": 1.27,
            "commands": {
              "cp_db": {
                "seconds": 0.005,
                "exit_code": 0,
                "peak_rss_mib": 0.85,
                "output": ""
              },
              "tar_files": {
                "seconds": 0.936,
                "exit_code": 0,
                "peak_rss_mib": 1.27,
                "output": ""
              }
            },
            "items_created_while_copying": 936,
            "items_acknowledged_before_cp": 477,
            "write_errors": 0,
            "db_bytes": 827392,
            "wal_bytes_at_copy": 4185952,
            "main_db_bytes_live_at_copy": 827392,
            "shm_present_at_copy": true,
            "db_integrity_check": "ok",
            "backup_bytes": 12433061
          },
          "m2_cold_copy": {
            "method": "docker stop, tar of the whole data folder, docker start",
            "downtime_s": 0.92,
            "seconds": 0.92,
            "ok": true,
            "peak_rss_mib": 1.15,
            "commands": {
              "docker_stop": {
                "seconds": 0.156,
                "exit_code": 0
              },
              "tar_data": {
                "seconds": 0.55,
                "exit_code": 0,
                "peak_rss_mib": 1.15,
                "output": ""
              },
              "docker_start": {
                "seconds": 0.161,
                "exit_code": 0
              }
            },
            "wal_files_after_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "wal_files_before_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "backup_bytes": 13435207,
            "data_tar_bytes": 13435207
          },
          "live_after_backups": {
            "item_count": "PASS",
            "items_decrypt": "PASS",
            "fields_match": "PASS",
            "organization": "PASS",
            "attachments_sha256": "PASS",
            "send_listed": "PASS",
            "old_token_accepted": "PASS"
          },
          "restore_m1_sqlite_online": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.22,
            "container_healthy": true,
            "bw_check_seconds": 35.5,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.71,
            "pass": true
          },
          "restore_m1b_builtin_backup": {
            "restore_script": "tar xzf /backup/m1b/vw-files.tar.gz -C /data; cp /backup/m1b/db_20261022_040214.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.2,
            "container_healthy": true,
            "bw_check_seconds": 34.86,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.72,
            "pass": true
          },
          "restore_m2_cold_copy": {
            "restore_script": "tar xzf /backup/m2/vw-data.tar.gz -C /data",
            "restore_seconds": 2.26,
            "container_healthy": true,
            "bw_check_seconds": 34.5,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.71,
            "pass": true
          },
          "restore_m3_naive_cp_while_writing": {
            "restore_script": "tar xzf /backup/m3/vw-files.tar.gz -C /data; cp /backup/m3/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.2,
            "container_healthy": true,
            "m3_writes": {
              "acknowledged_before_cp": 477,
              "found_in_restored_vault": 379,
              "missing": 98,
              "items_found_in_restored_vault_total": 379
            },
            "bw_check_seconds": 36.21,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "acknowledged_writes_present": "FAIL",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "acknowledged_writes_present": "379 of 477 items acknowledged by the server before the copy are in the restored vault",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.76,
            "pass": false
          },
          "restore_m1_without_rsa_key": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='rsa_key*'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.29,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "FAIL",
              "rsa_key_is_the_original": "FAIL",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 9,
            "failed": 2,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 401 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.7,
            "pass": false
          },
          "restore_m1_without_attachments": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='attachments'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.17,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "FAIL",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.58,
            "pass": false
          },
          "restore_m1_without_config_json": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='config.json'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.18,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "FAIL",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "no config.json",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.72,
            "pass": false
          },
          "summary": {
            "restore_pass": {
              "m1_sqlite_online": true,
              "m1b_builtin_backup": true,
              "m2_cold_copy": true,
              "m3_naive_cp_while_writing": false,
              "m1_without_rsa_key": false,
              "m1_without_attachments": false,
              "m1_without_config_json": false
            },
            "methods_restored_ok": [
              "m1_sqlite_online",
              "m1b_builtin_backup",
              "m2_cold_copy"
            ],
            "all_ok": true
          },
          "all_ok": true
        },
        "output_tail": [
          "restore m2_cold_copy: pass=True passed=15 failed=0 restore_seconds=2.26 error=None",
          "restore m3_naive_cp_while_writing: pass=False passed=15 failed=1 restore_seconds=2.2 error=None",
          "  FAIL acknowledged_writes_present: 379 of 477 items acknowledged by the server before the copy are in the restored vault",
          "restore m1_without_rsa_key: pass=False passed=9 failed=2 restore_seconds=2.29 error=None",
          "  FAIL old_token_accepted: HTTP 401 for an access token issued before the backup",
          "  FAIL rsa_key_is_the_original: rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
          "restore m1_without_attachments: pass=False passed=10 failed=1 restore_seconds=2.17 error=None",
          "  FAIL attachments_sha256: 0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
          "restore m1_without_config_json: pass=False passed=10 failed=1 restore_seconds=2.18 error=None",
          "  FAIL admin_setting_restored: no config.json"
        ],
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 182.86,
            "total_cpu_pct": 129.41,
            "mem_mib": [
              160.4,
              22.46
            ],
            "cpu_pct": [
              73.13,
              56.28
            ]
          },
          {
            "t_offset_s": 2.0,
            "total_mem_mib": 189.33,
            "total_cpu_pct": 154.94,
            "mem_mib": [
              160.9,
              28.43
            ],
            "cpu_pct": [
              78.21,
              76.73
            ]
          },
          {
            "t_offset_s": 4.0,
            "total_mem_mib": 161.5,
            "total_cpu_pct": 39.26,
            "mem_mib": [
              161.5,
              0.0
            ],
            "cpu_pct": [
              39.26,
              0.0
            ]
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 199.35,
            "total_cpu_pct": 53.06,
            "mem_mib": [
              182.5,
              16.85
            ],
            "cpu_pct": [
              33.07,
              19.99
            ]
          },
          {
            "t_offset_s": 8.0,
            "total_mem_mib": 188.65,
            "total_cpu_pct": 36.73,
            "mem_mib": [
              171.8,
              16.85
            ],
            "cpu_pct": [
              36.73,
              0.0
            ]
          },
          {
            "t_offset_s": 10.1,
            "total_mem_mib": 273.75,
            "total_cpu_pct": 30.32,
            "mem_mib": [
              256.9,
              16.85
            ],
            "cpu_pct": [
              30.32,
              0.0
            ]
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 226.65,
            "total_cpu_pct": 65.53,
            "mem_mib": [
              209.8,
              16.85
            ],
            "cpu_pct": [
              65.53,
              0.0
            ]
          },
          {
            "t_offset_s": 14.1,
            "total_mem_mib": 271.95,
            "total_cpu_pct": 43.45,
            "mem_mib": [
              255.1,
              16.85
            ],
            "cpu_pct": [
              43.45,
              0.0
            ]
          },
          {
            "t_offset_s": 16.1,
            "total_mem_mib": 274.39,
            "total_cpu_pct": 55.16,
            "mem_mib": [
              257.6,
              16.79
            ],
            "cpu_pct": [
              55.11,
              0.05
            ]
          },
          {
            "t_offset_s": 18.1,
            "total_mem_mib": 295.45,
            "total_cpu_pct": 31.73,
            "mem_mib": [
              278.6,
              16.85
            ],
            "cpu_pct": [
              31.73,
              0.0
            ]
          },
          {
            "t_offset_s": 20.1,
            "total_mem_mib": 202.59,
            "total_cpu_pct": 44.11,
            "mem_mib": [
              185.8,
              16.79
            ],
            "cpu_pct": [
              44.11,
              0.0
            ]
          },
          {
            "t_offset_s": 22.1,
            "total_mem_mib": 277.49,
            "total_cpu_pct": 12.26,
            "mem_mib": [
              260.8,
              16.69
            ],
            "cpu_pct": [
              12.26,
              0.0
            ]
          },
          {
            "t_offset_s": 24.1,
            "total_mem_mib": 271.79,
            "total_cpu_pct": 106.64,
            "mem_mib": [
              255.1,
              16.69
            ],
            "cpu_pct": [
              106.64,
              0.0
            ]
          },
          {
            "t_offset_s": 26.1,
            "total_mem_mib": 286.69,
            "total_cpu_pct": 0.2,
            "mem_mib": [
              270.0,
              16.69
            ],
            "cpu_pct": [
              0.2,
              0.0
            ]
          },
          {
            "t_offset_s": 28.1,
            "total_mem_mib": 278.99,
            "total_cpu_pct": 85.19,
            "mem_mib": [
              262.3,
              16.69
            ],
            "cpu_pct": [
              85.19,
              0.0
            ]
          },
          {
            "t_offset_s": 30.1,
            "total_mem_mib": 289.89,
            "total_cpu_pct": 0.16,
            "mem_mib": [
              273.2,
              16.69
            ],
            "cpu_pct": [
              0.16,
              0.0
            ]
          },
          {
            "t_offset_s": 32.2,
            "total_mem_mib": 287.69,
            "total_cpu_pct": 85.32,
            "mem_mib": [
              271.0,
              16.69
            ],
            "cpu_pct": [
              85.32,
              0.0
            ]
          },
          {
            "t_offset_s": 34.2,
            "total_mem_mib": 295.89,
            "total_cpu_pct": 0.14,
            "mem_mib": [
              279.2,
              16.69
            ],
            "cpu_pct": [
              0.14,
              0.0
            ]
          },
          {
            "t_offset_s": 36.2,
            "total_mem_mib": 285.34,
            "total_cpu_pct": 77.69,
            "mem_mib": [
              268.3,
              17.04
            ],
            "cpu_pct": [
              73.5,
              4.19
            ]
          },
          {
            "t_offset_s": 38.2,
            "total_mem_mib": 297.34,
            "total_cpu_pct": 0.11,
            "mem_mib": [
              280.5,
              16.84
            ],
            "cpu_pct": [
              0.11,
              0.0
            ]
          },
          {
            "t_offset_s": 40.2,
            "total_mem_mib": 274.1,
            "total_cpu_pct": 88.94,
            "mem_mib": [
              256.9,
              17.2
            ],
            "cpu_pct": [
              88.94,
              0.0
            ]
          },
          {
            "t_offset_s": 42.2,
            "total_mem_mib": 380.4,
            "total_cpu_pct": 50.78,
            "mem_mib": [
              363.2,
              17.2
            ],
            "cpu_pct": [
              50.78,
              0.0
            ]
          },
          {
            "t_offset_s": 44.2,
            "total_mem_mib": 188.04,
            "total_cpu_pct": 25.91,
            "mem_mib": [
              171.2,
              16.84
            ],
            "cpu_pct": [
              25.91,
              0.0
            ]
          },
          {
            "t_offset_s": 46.2,
            "total_mem_mib": 180.56,
            "total_cpu_pct": 9.63,
            "mem_mib": [
              163.8,
              16.76
            ],
            "cpu_pct": [
              9.62,
              0.01
            ]
          },
          {
            "t_offset_s": 48.2,
            "total_mem_mib": 275.26,
            "total_cpu_pct": 94.81,
            "mem_mib": [
              258.5,
              16.76
            ],
            "cpu_pct": [
              94.81,
              0.0
            ]
          },
          {
            "t_offset_s": 50.2,
            "total_mem_mib": 278.06,
            "total_cpu_pct": 0.11,
            "mem_mib": [
              261.3,
              16.76
            ],
            "cpu_pct": [
              0.11,
              0.0
            ]
          },
          {
            "t_offset_s": 52.3,
            "total_mem_mib": 279.56,
            "total_cpu_pct": 76.45,
            "mem_mib": [
              262.8,
              16.76
            ],
            "cpu_pct": [
              76.45,
              0.0
            ]
          },
          {
            "t_offset_s": 54.3,
            "total_mem_mib": 276.56,
            "total_cpu_pct": 16.76,
            "mem_mib": [
              259.8,
              16.76
            ],
            "cpu_pct": [
              16.76,
              0.0
            ]
          },
          {
            "t_offset_s": 56.3,
            "total_mem_mib": 305.36,
            "total_cpu_pct": 26.93,
            "mem_mib": [
              288.6,
              16.76
            ],
            "cpu_pct": [
              26.93,
              0.0
            ]
          },
          {
            "t_offset_s": 58.3,
            "total_mem_mib": 292.96,
            "total_cpu_pct": 29.96,
            "mem_mib": [
              276.2,
              16.76
            ],
            "cpu_pct": [
              29.96,
              0.0
            ]
          },
          {
            "t_offset_s": 60.3,
            "total_mem_mib": 276.86,
            "total_cpu_pct": 16.46,
            "mem_mib": [
              260.1,
              16.76
            ],
            "cpu_pct": [
              16.46,
              0.0
            ]
          },
          {
            "t_offset_s": 62.3,
            "total_mem_mib": 282.06,
            "total_cpu_pct": 98.2,
            "mem_mib": [
              265.3,
              16.76
            ],
            "cpu_pct": [
              98.2,
              0.0
            ]
          },
          {
            "t_offset_s": 64.3,
            "total_mem_mib": 287.06,
            "total_cpu_pct": 1.13,
            "mem_mib": [
              270.3,
              16.76
            ],
            "cpu_pct": [
              1.13,
              0.0
            ]
          },
          {
            "t_offset_s": 66.3,
            "total_mem_mib": 276.68,
            "total_cpu_pct": 100.53,
            "mem_mib": [
              259.5,
              17.18
            ],
            "cpu_pct": [
              95.72,
              4.81
            ]
          },
          {
            "t_offset_s": 68.3,
            "total_mem_mib": 290.58,
            "total_cpu_pct": 2.89,
            "mem_mib": [
              273.4,
              17.18
            ],
            "cpu_pct": [
              2.89,
              0.0
            ]
          },
          {
            "t_offset_s": 70.3,
            "total_mem_mib": 277.11,
            "total_cpu_pct": 92.56,
            "mem_mib": [
              260.1,
              17.01
            ],
            "cpu_pct": [
              92.56,
              0.0
            ]
          },
          {
            "t_offset_s": 72.4,
            "total_mem_mib": 289.41,
            "total_cpu_pct": 0.26,
            "mem_mib": [
              272.4,
              17.01
            ],
            "cpu_pct": [
              0.26,
              0.0
            ]
          },
          {
            "t_offset_s": 74.4,
            "total_mem_mib": 276.77,
            "total_cpu_pct": 86.88,
            "mem_mib": [
              259.8,
              16.97
            ],
            "cpu_pct": [
              86.88,
              0.0
            ]
          },
          {
            "t_offset_s": 76.4,
            "total_mem_mib": 298.72,
            "total_cpu_pct": 0.19,
            "mem_mib": [
              281.8,
              16.92
            ],
            "cpu_pct": [
              0.17,
              0.02
            ]
          },
          {
            "t_offset_s": 78.4,
            "total_mem_mib": 285.22,
            "total_cpu_pct": 84.7,
            "mem_mib": [
              268.3,
              16.92
            ],
            "cpu_pct": [
              84.7,
              0.0
            ]
          },
          {
            "t_offset_s": 80.4,
            "total_mem_mib": 380.72,
            "total_cpu_pct": 25.75,
            "mem_mib": [
              363.8,
              16.92
            ],
            "cpu_pct": [
              25.75,
              0.0
            ]
          },
          {
            "t_offset_s": 82.4,
            "total_mem_mib": 188.44,
            "total_cpu_pct": 26.55,
            "mem_mib": [
              171.6,
              16.84
            ],
            "cpu_pct": [
              26.55,
              0.0
            ]
          },
          {
            "t_offset_s": 84.4,
            "total_mem_mib": 180.64,
            "total_cpu_pct": 15.03,
            "mem_mib": [
              163.8,
              16.84
            ],
            "cpu_pct": [
              15.03,
              0.0
            ]
          },
          {
            "t_offset_s": 86.4,
            "total_mem_mib": 279.04,
            "total_cpu_pct": 87.11,
            "mem_mib": [
              262.2,
              16.84
            ],
            "cpu_pct": [
              87.11,
              0.0
            ]
          },
          {
            "t_offset_s": 88.5,
            "total_mem_mib": 206.14,
            "total_cpu_pct": 11.56,
            "mem_mib": [
              189.3,
              16.84
            ],
            "cpu_pct": [
              11.56,
              0.0
            ]
          },
          {
            "t_offset_s": 90.5,
            "total_mem_mib": 280.34,
            "total_cpu_pct": 73.77,
            "mem_mib": [
              263.5,
              16.84
            ],
            "cpu_pct": [
              73.77,
              0.0
            ]
          },
          {
            "t_offset_s": 92.5,
            "total_mem_mib": 276.04,
            "total_cpu_pct": 10.1,
            "mem_mib": [
              259.2,
              16.84
            ],
            "cpu_pct": [
              10.1,
              0.0
            ]
          },
          {
            "t_offset_s": 94.5,
            "total_mem_mib": 304.74,
            "total_cpu_pct": 31.96,
            "mem_mib": [
              287.9,
              16.84
            ],
            "cpu_pct": [
              31.96,
              0.0
            ]
          },
          {
            "t_offset_s": 96.5,
            "total_mem_mib": 305.41,
            "total_cpu_pct": 43.96,
            "mem_mib": [
              288.2,
              17.21
            ],
            "cpu_pct": [
              39.27,
              4.69
            ]
          },
          {
            "t_offset_s": 98.5,
            "total_mem_mib": 277.57,
            "total_cpu_pct": 14.92,
            "mem_mib": [
              260.5,
              17.07
            ],
            "cpu_pct": [
              14.92,
              0.0
            ]
          },
          {
            "t_offset_s": 100.5,
            "total_mem_mib": 277.87,
            "total_cpu_pct": 97.45,
            "mem_mib": [
              260.8,
              17.07
            ],
            "cpu_pct": [
              97.45,
              0.0
            ]
          },
          {
            "t_offset_s": 102.5,
            "total_mem_mib": 290.67,
            "total_cpu_pct": 0.21,
            "mem_mib": [
              273.6,
              17.07
            ],
            "cpu_pct": [
              0.21,
              0.0
            ]
          },
          {
            "t_offset_s": 104.5,
            "total_mem_mib": 286.17,
            "total_cpu_pct": 91.75,
            "mem_mib": [
              269.1,
              17.07
            ],
            "cpu_pct": [
              91.75,
              0.0
            ]
          },
          {
            "t_offset_s": 106.5,
            "total_mem_mib": 291.89,
            "total_cpu_pct": 0.17,
            "mem_mib": [
              274.9,
              16.99
            ],
            "cpu_pct": [
              0.15,
              0.02
            ]
          },
          {
            "t_offset_s": 108.5,
            "total_mem_mib": 287.42,
            "total_cpu_pct": 62.98,
            "mem_mib": [
              270.5,
              16.92
            ],
            "cpu_pct": [
              62.98,
              0.0
            ]
          },
          {
            "t_offset_s": 110.6,
            "total_mem_mib": 289.82,
            "total_cpu_pct": 0.14,
            "mem_mib": [
              272.9,
              16.92
            ],
            "cpu_pct": [
              0.14,
              0.0
            ]
          },
          {
            "t_offset_s": 112.6,
            "total_mem_mib": 287.72,
            "total_cpu_pct": 70.65,
            "mem_mib": [
              270.8,
              16.92
            ],
            "cpu_pct": [
              70.65,
              0.0
            ]
          },
          {
            "t_offset_s": 114.6,
            "total_mem_mib": 299.12,
            "total_cpu_pct": 0.14,
            "mem_mib": [
              282.2,
              16.92
            ],
            "cpu_pct": [
              0.14,
              0.0
            ]
          },
          {
            "t_offset_s": 116.6,
            "total_mem_mib": 289.72,
            "total_cpu_pct": 60.9,
            "mem_mib": [
              272.8,
              16.92
            ],
            "cpu_pct": [
              60.9,
              0.0
            ]
          },
          {
            "t_offset_s": 118.6,
            "total_mem_mib": 376.19,
            "total_cpu_pct": 2.74,
            "mem_mib": [
              359.3,
              16.89
            ],
            "cpu_pct": [
              2.74,
              0.0
            ]
          },
          {
            "t_offset_s": 120.6,
            "total_mem_mib": 202.69,
            "total_cpu_pct": 19.25,
            "mem_mib": [
              185.8,
              16.89
            ],
            "cpu_pct": [
              19.25,
              0.0
            ]
          },
          {
            "t_offset_s": 122.6,
            "total_mem_mib": 192.49,
            "total_cpu_pct": 38.77,
            "mem_mib": [
              175.6,
              16.89
            ],
            "cpu_pct": [
              38.77,
              0.0
            ]
          },
          {
            "t_offset_s": 124.6,
            "total_mem_mib": 282.39,
            "total_cpu_pct": 39.29,
            "mem_mib": [
              265.5,
              16.89
            ],
            "cpu_pct": [
              39.29,
              0.0
            ]
          },
          {
            "t_offset_s": 126.6,
            "total_mem_mib": 226.25,
            "total_cpu_pct": 58.69,
            "mem_mib": [
              209.0,
              17.25
            ],
            "cpu_pct": [
              54.6,
              4.09
            ]
          },
          {
            "t_offset_s": 128.6,
            "total_mem_mib": 274.92,
            "total_cpu_pct": 49.45,
            "mem_mib": [
              257.9,
              17.02
            ],
            "cpu_pct": [
              49.45,
              0.0
            ]
          },
          {
            "t_offset_s": 130.7,
            "total_mem_mib": 293.52,
            "total_cpu_pct": 76.79,
            "mem_mib": [
              276.6,
              16.92
            ],
            "cpu_pct": [
              76.79,
              0.0
            ]
          },
          {
            "t_offset_s": 132.7,
            "total_mem_mib": 300.61,
            "total_cpu_pct": 48.13,
            "mem_mib": [
              283.6,
              17.01
            ],
            "cpu_pct": [
              48.13,
              0.0
            ]
          },
          {
            "t_offset_s": 134.7,
            "total_mem_mib": 307.21,
            "total_cpu_pct": 47.8,
            "mem_mib": [
              290.2,
              17.01
            ],
            "cpu_pct": [
              47.8,
              0.0
            ]
          },
          {
            "t_offset_s": 136.7,
            "total_mem_mib": 291.58,
            "total_cpu_pct": 28.88,
            "mem_mib": [
              274.6,
              16.98
            ],
            "cpu_pct": [
              28.87,
              0.01
            ]
          },
          {
            "t_offset_s": 138.7,
            "total_mem_mib": 232.68,
            "total_cpu_pct": 74.57,
            "mem_mib": [
              215.7,
              16.98
            ],
            "cpu_pct": [
              74.57,
              0.0
            ]
          },
          {
            "t_offset_s": 140.7,
            "total_mem_mib": 295.38,
            "total_cpu_pct": 41.54,
            "mem_mib": [
              278.4,
              16.98
            ],
            "cpu_pct": [
              41.54,
              0.0
            ]
          },
          {
            "t_offset_s": 142.7,
            "total_mem_mib": 226.48,
            "total_cpu_pct": 56.75,
            "mem_mib": [
              209.5,
              16.98
            ],
            "cpu_pct": [
              56.75,
              0.0
            ]
          },
          {
            "t_offset_s": 144.7,
            "total_mem_mib": 294.98,
            "total_cpu_pct": 60.18,
            "mem_mib": [
              278.0,
              16.98
            ],
            "cpu_pct": [
              60.18,
              0.0
            ]
          },
          {
            "t_offset_s": 146.7,
            "total_mem_mib": 215.28,
            "total_cpu_pct": 29.27,
            "mem_mib": [
              198.3,
              16.98
            ],
            "cpu_pct": [
              29.27,
              0.0
            ]
          },
          {
            "t_offset_s": 148.7,
            "total_mem_mib": 293.78,
            "total_cpu_pct": 23.35,
            "mem_mib": [
              276.8,
              16.98
            ],
            "cpu_pct": [
              23.35,
              0.0
            ]
          },
          {
            "t_offset_s": 150.8,
            "total_mem_mib": 227.08,
            "total_cpu_pct": 51.39,
            "mem_mib": [
              210.1,
              16.98
            ],
            "cpu_pct": [
              51.39,
              0.0
            ]
          },
          {
            "t_offset_s": 152.8,
            "total_mem_mib": 303.58,
            "total_cpu_pct": 26.91,
            "mem_mib": [
              286.6,
              16.98
            ],
            "cpu_pct": [
              26.91,
              0.0
            ]
          },
          {
            "t_offset_s": 154.8,
            "total_mem_mib": 225.03,
            "total_cpu_pct": 45.2,
            "mem_mib": [
              207.8,
              17.23
            ],
            "cpu_pct": [
              45.11,
              0.09
            ]
          },
          {
            "t_offset_s": 156.8,
            "total_mem_mib": 362.48,
            "total_cpu_pct": 74.61,
            "mem_mib": [
              345.0,
              17.48
            ],
            "cpu_pct": [
              70.54,
              4.07
            ]
          },
          {
            "t_offset_s": 158.8,
            "total_mem_mib": 382.88,
            "total_cpu_pct": 2.75,
            "mem_mib": [
              365.4,
              17.48
            ],
            "cpu_pct": [
              2.75,
              0.0
            ]
          },
          {
            "t_offset_s": 160.8,
            "total_mem_mib": 205.32,
            "total_cpu_pct": 7.26,
            "mem_mib": [
              188.2,
              17.12
            ],
            "cpu_pct": [
              7.26,
              0.0
            ]
          },
          {
            "t_offset_s": 162.8,
            "total_mem_mib": 191.72,
            "total_cpu_pct": 37.63,
            "mem_mib": [
              174.6,
              17.12
            ],
            "cpu_pct": [
              37.63,
              0.0
            ]
          },
          {
            "t_offset_s": 164.8,
            "total_mem_mib": 183.71,
            "total_cpu_pct": 16.04,
            "mem_mib": [
              166.7,
              17.01
            ],
            "cpu_pct": [
              16.02,
              0.02
            ]
          },
          {
            "t_offset_s": 166.8,
            "total_mem_mib": 204.88,
            "total_cpu_pct": 7.77,
            "mem_mib": [
              187.9,
              16.98
            ],
            "cpu_pct": [
              7.76,
              0.01
            ]
          },
          {
            "t_offset_s": 168.8,
            "total_mem_mib": 159.28,
            "total_cpu_pct": 43.73,
            "mem_mib": [
              142.3,
              16.98
            ],
            "cpu_pct": [
              43.73,
              0.0
            ]
          },
          {
            "t_offset_s": 170.8,
            "total_mem_mib": 159.28,
            "total_cpu_pct": 0.0,
            "mem_mib": [
              142.3,
              16.98
            ],
            "cpu_pct": [
              0.0,
              0.0
            ]
          }
        ],
        "series_start_offset_s": 1.9,
        "peak_note": "peak = highest value seen across docker stats samples (about one every 2-3 s); shorter spikes between samples are not seen",
        "peak_memory_stat": {
          "read_at": "2026-10-22T04:04:54Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 31.87,
              "file_mib": 353.62,
              "active_file_mib": 91.31,
              "inactive_file_mib": 262.32,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 16.18,
              "file_mib": 0.05,
              "active_file_mib": 0.0,
              "inactive_file_mib": 0.05,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.2,
          "series_index": 79,
          "sample_t_offset_s": 158.8,
          "total_mem_mib": 382.88
        },
        "series_services": [
          "toolbox",
          "vaultwarden"
        ]
      },
      "container_end_state": {
        "toolbox": {
          "restart_count": 0,
          "oom_killed": false
        },
        "vaultwarden": {
          "restart_count": 0,
          "oom_killed": false
        }
      },
      "teardown": {
        "done": true,
        "volumes_removed": true,
        "images_removed": false,
        "error": null
      },
      "warnings": [],
      "finished_at": "2026-10-22T04:05:18Z",
      "elapsed_seconds": 360.3
    },
    {
      "run": 3,
      "started_at": "2026-10-22T04:05:18Z",
      "host": {
        "label": "github-actions ubuntu-latest (2 vCPU, 8 GB)",
        "ci": {
          "runs_on": "ubuntu-latest",
          "runner_environment": "github-hosted",
          "runner_os": "Linux",
          "runner_arch": "X64",
          "image_os": "ubuntu24",
          "image_version": "20261012.334.1"
        },
        "cpu_model": "AMD EPYC 9V74 80-Core Processor",
        "cpu_model_note": null,
        "cores": 2,
        "mem_total_mib": 7938,
        "kernel": "6.17.0-1022-azure",
        "os": "Ubuntu 24.04.5 LTS",
        "arch": "x86_64",
        "oci_arch": "amd64",
        "docker_server_version": "28.0.4",
        "docker_client_version": "28.0.4",
        "compose_client_version": "2.38.2",
        "storage_driver": "overlay2",
        "containerd_image_store": false,
        "source": "docker info + throwaway container reading /proc/cpuinfo on the daemon host",
        "compose_note": "Compose runs on the client machine; Docker server fields are from the daemon host"
      },
      "date": "2026-10-22",
      "startup": {
        "seconds": 2.3,
        "ok": true,
        "checks": [
          {
            "type": "http",
            "url": "http://vaultwarden:80/alive",
            "expect_status": [
              200
            ],
            "ok": true,
            "ready_after_s": 2.3,
            "detail": "OK 200"
          }
        ],
        "up_command_seconds": 2.0,
        "definition": "wall clock from starting `docker compose up -d` until every health check passed; checks poll every 0.5 s from a throwaway container on the compose network, so resolution is about +/- 1 s"
      },
      "versions": {
        "toolbox": "28.5.2-cli",
        "vaultwarden": "1.37.4"
      },
      "setup": [
        {
          "exit_code": 0,
          "duration_s": 14.7,
          "reported": {},
          "output_tail": [
            "*",
            "* If you need ICU with non-English locales and legacy charset support, install",
            "* package icu-data-full.",
            "*",
            "bw 2026.10.0",
            "node v22.23.2",
            "sqlite3 3.49.2",
            "cryptography 44.0.3",
            "time -v: ok",
            "Docker version 28.5.2, build ecc6942",
            "2.40.3"
          ],
          "description": "Install the tools the backup host needs inside the toolbox container (Alpine packages: python3, py3-cryptography, sqlite, nodejs, npm, socat, openssl; and the official Bitwarden CLI, npm package @bitwarden/cli 2026.10.0, used as an independent client to check the restored vaults) and print their versions. Not measured."
        },
        {
          "exit_code": 0,
          "duration_s": 2.2,
          "reported": {
            "seed": {
              "items": 225,
              "logins": 200,
              "secure_notes": 20,
              "org_items": 5,
              "attachments": {
                "lab-attachment-0.bin": 16384,
                "lab-attachment-1.bin": 1048576,
                "lab-attachment-2.bin": 10485760
              },
              "send_bytes": 50000,
              "organizations": 1,
              "collections": 1,
              "admin_settings_saved": 1,
              "kdf": "PBKDF2-HMAC-SHA256 600000",
              "verified_after_seeding": true,
              "uninvited_registration_status": 400
            }
          },
          "output_tail": [
            "admin login -> 200 cookie set: True",
            "admin invite -> 200",
            "save one admin setting (creates config.json) -> 200",
            "account registered and logged in (PBKDF2-SHA256 600000 iterations)",
            "created 220 personal items in 0.6s",
            "attachment 0: 16384 bytes plaintext, 16449 bytes stored",
            "attachment 1: 1048576 bytes plaintext, 1048641 bytes stored",
            "attachment 2: 10485760 bytes plaintext, 10485825 bytes stored",
            "seed verification: {'item_count': 'PASS', 'items_decrypt': 'PASS', 'fields_match': 'PASS', 'organization': 'PASS', 'attachments_sha256': 'PASS', 'send_listed': 'PASS'}",
            "uninvited registration -> 400"
          ],
          "description": "Seed the vault with the Bitwarden client cryptography written in Python (no real client is involved): the admin page invites the e-mail address, the account is registered (PBKDF2-SHA256, 600,000 iterations), 200 logins and 20 secure notes are created, three attachments (16 KiB, 1 MiB, 10 MiB of seeded random bytes), one file Send, one organization with one collection and 5 organization logins, and one admin setting is saved (which creates config.json). Everything is then read back from the live server and checked. Not measured."
        }
      ],
      "idle": {
        "per_service": {
          "toolbox": {
            "samples": 11,
            "mem_mean_mib": 139.43,
            "mem_max_mib": 139.6,
            "cpu_mean_pct": 0.24,
            "cpu_max_pct": 2.65
          },
          "vaultwarden": {
            "samples": 11,
            "mem_mean_mib": 18.45,
            "mem_max_mib": 26.8,
            "cpu_mean_pct": 0.24,
            "cpu_max_pct": 2.58
          }
        },
        "total": {
          "samples": 11,
          "dropped_for_total": 0,
          "mem_mean_mib": 157.88,
          "mem_max_mib": 166.1,
          "cpu_mean_pct": 0.48,
          "cpu_max_pct": 2.65
        },
        "window_seconds": 30.2,
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 156.9,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 3.0,
            "total_mem_mib": 156.8,
            "total_cpu_pct": 2.65
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 156.8,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 9.1,
            "total_mem_mib": 156.7,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 166.1,
            "total_cpu_pct": 2.58
          },
          {
            "t_offset_s": 15.1,
            "total_mem_mib": 157.1,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 18.1,
            "total_mem_mib": 157.1,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 21.2,
            "total_mem_mib": 157.3,
            "total_cpu_pct": 0.01
          },
          {
            "t_offset_s": 24.2,
            "total_mem_mib": 157.4,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 27.2,
            "total_mem_mib": 157.4,
            "total_cpu_pct": 0.0
          },
          {
            "t_offset_s": 30.2,
            "total_mem_mib": 157.06,
            "total_cpu_pct": 0.0
          }
        ],
        "memory_stat": {
          "read_at": "2026-10-22T04:08:09Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 0.09,
              "file_mib": 258.27,
              "active_file_mib": 91.3,
              "inactive_file_mib": 166.97,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 16.18,
              "file_mib": 15.44,
              "active_file_mib": 0.0,
              "inactive_file_mib": 15.44,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.1,
          "method": "docker exec <container> cat /sys/fs/cgroup/memory.stat (cgroup v1: /sys/fs/cgroup/memory/memory.stat); MiB; splits what docker stats shows as one number into anon (heap) and file cache; a field that is absent was not printed by the kernel or not readable (see reason)",
          "taken": "right after the idle window"
        }
      },
      "settle": {
        "settled": true,
        "mode": "detected",
        "settle_seconds_used": 121.1,
        "settle_started_after_healthy_s": 17.7,
        "params": {
          "window_seconds": 60,
          "threshold_pct": 2.0,
          "threshold_min_mib": 10.0,
          "min_seconds": 120,
          "max_seconds": 600
        },
        "last_window": {
          "n": 21,
          "mean_mib": 157.09,
          "min_mib": 156.8,
          "max_mib": 157.34,
          "spread_mib": 0.54,
          "threshold_mib": 10.0
        },
        "rechecks": 0,
        "rule": "settled = over the last window_seconds the stack total varied (max - min) by less than max(threshold_pct of the window mean, threshold_min_mib); not before min_seconds, at the latest max_seconds, both counted from the end of the setup steps; the idle window must also be flat and agree with it. If max_seconds passes without settling, settled=false and the idle window is measured anyway."
      },
      "startup_peak": {
        "per_service_mem_mib": {
          "toolbox": 252.7,
          "vaultwarden": 18.1
        },
        "total_mem_mib": 259.51,
        "samples": 49,
        "note": "highest value across docker stats samples (about one every 2-3 s) from healthy until the stack settled; shorter spikes between samples are not seen"
      },
      "timeline": {
        "step_s": 10,
        "t0": "healthy",
        "offsets_s": [
          10,
          20,
          30,
          40,
          50,
          60,
          70,
          80,
          90,
          100,
          110,
          120,
          130,
          140,
          150,
          160,
          170
        ],
        "total_mem_mib": [
          166.5,
          193.5,
          157.5,
          157.3,
          157.1,
          157.0,
          157.0,
          157.0,
          157.0,
          157.2,
          157.3,
          156.9,
          157.1,
          157.1,
          156.8,
          159.4,
          157.3
        ],
        "per_service_mem_mib": {
          "toolbox": [
            159.7,
            182.7,
            139.6,
            139.5,
            139.5,
            139.5,
            139.6,
            139.6,
            139.6,
            139.4,
            139.6,
            139.5,
            139.4,
            139.7,
            139.4,
            139.4,
            139.6
          ],
          "vaultwarden": [
            6.8,
            10.7,
            17.9,
            17.7,
            17.5,
            17.5,
            17.5,
            17.4,
            17.4,
            17.7,
            17.7,
            17.5,
            17.7,
            17.4,
            17.4,
            20.1,
            17.7
          ]
        }
      },
      "load": {
        "per_service": {
          "toolbox": {
            "samples": 87,
            "mem_mean_mib": 246.05,
            "mem_max_mib": 368.4,
            "cpu_mean_pct": 37.99,
            "cpu_max_pct": 110.05
          },
          "vaultwarden": {
            "samples": 87,
            "mem_mean_mib": 17.04,
            "mem_max_mib": 25.05,
            "cpu_mean_pct": 2.01,
            "cpu_max_pct": 79.71
          }
        },
        "total": {
          "samples": 87,
          "dropped_for_total": 0,
          "mem_mean_mib": 263.09,
          "mem_max_mib": 385.76,
          "cpu_mean_pct": 40.01,
          "cpu_max_pct": 160.2
        },
        "description": "One script inside the toolbox container, in this order. (1) Log in as the seeded user and check the live vault (225 items, field by field; 3 attachments by SHA-256; the organization; the Send). (2) Back up with M1, the SQLite online backup API (`sqlite3 db.sqlite3 \".backup\"`) plus a tar of attachments, sends, config.json and rsa_key*, with Vaultwarden running. (3) M1b, Vaultwarden's own `/vaultwarden backup` plus the same tar. (4) M3, a plain `cp db.sqlite3` (main file only) while four threads keep creating items, to count how many acknowledged items the copy lacks (the extra items are deleted afterwards). (5) M2, a cold copy: `docker stop`, tar of the whole data folder, `docker start`, with the downtime measured until /alive answers. (6) Check that the live vault still verifies. (7) For each backup, restore into a FRESH Vaultwarden project (`docker compose -p vwr-...`, its own volume and network, the same pinned image), start it, log in with the original master password, and verify: all 225 items decrypt and match field by field, the attachments' SHA-256, the organization and collection, the Send, an access token issued before the backup, the rsa key and the admin setting; and the same vault is read again with the official Bitwarden CLI (login over HTTPS, `bw list items`, `bw export`, `bw get attachment`). (8) Three controls: the M1 backup restored with rsa_key*, attachments, or config.json left out. Each timed command reports its seconds and peak resident memory.",
        "duration_s": 172.6,
        "window": "from LAB_MARK load_start (or step start) until 2 s after the step ended",
        "reported_by_script": {
          "vault": {
            "items": 225,
            "attachments_bytes": 11550720,
            "data_folder_bytes": 16169203,
            "data_folder_files": {
              "attachments/7888c3dd-16cf-4fd9-88c6-5530c6eace73/a839abd1979af1be809a": 1048641,
              "attachments/8565c11c-25f5-4fa6-a76d-98486ab833c7/81be9289e1356e3e702e": 10485825,
              "attachments/d1053434-6c57-4eca-b1bb-5153efc10af9/03fe4fd041694a0c4ed3": 16449,
              "config.json": 48,
              "db.sqlite3": 413696,
              "db.sqlite3-shm": 32768,
              "db.sqlite3-wal": 4120032,
              "rsa_key.pem": 1679,
              "sends/15f5d40e-45d2-4ba6-8a8a-55135251d27f/8c4aaf6310aec894019b12321a4576c1f9e66591ffcc1da678818952d9931172": 50065
            },
            "live_checks": {
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS"
            },
            "image": "vaultwarden/server:1.37.4"
          },
          "tools": {
            "sqlite3": "3.49.2",
            "tar_and_time": "busybox 1.37.0",
            "bw": "2026.10.0",
            "docker_cli": "Docker version 28.5.2, build ecc6942",
            "vaultwarden": "Vaultwarden 1.37.4"
          },
          "m1_sqlite_online": {
            "method": "sqlite3 .backup + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.419,
            "ok": true,
            "peak_rss_mib": 3.27,
            "commands": {
              "sqlite3_backup": {
                "seconds": 0.005,
                "exit_code": 0,
                "peak_rss_mib": 3.27,
                "output": ""
              },
              "tar_files": {
                "seconds": 0.413,
                "exit_code": 0,
                "peak_rss_mib": 1.14,
                "output": ""
              }
            },
            "db_bytes": 499712,
            "files_tar_bytes": 11605675,
            "backup_bytes": 12105387,
            "db_integrity_check": "ok"
          },
          "m1b_builtin_backup": {
            "method": "vaultwarden backup (built in) + tar of attachments, sends, config.json, rsa_key*",
            "downtime_s": 0.0,
            "seconds": 0.497,
            "ok": true,
            "peak_rss_mib": 22.32,
            "commands": {
              "vaultwarden_backup": {
                "seconds": 0.107,
                "exit_code": 0,
                "peak_rss_mib": 22.32,
                "samples": 45,
                "note": "seconds include docker exec; RSS = highest VmHWM of the backup process seen by a polling loop in the container (not exact)"
              },
              "tar_files": {
                "seconds": 0.388,
                "exit_code": 0,
                "peak_rss_mib": 1.13,
                "output": ""
              }
            },
            "db_file": "db_20261022_040812.sqlite3",
            "db_bytes": 499712,
            "files_tar_bytes": 11605675,
            "backup_bytes": 12105387,
            "db_integrity_check": "ok"
          },
          "m3_naive_cp_while_writing": {
            "method": "cp db.sqlite3 (main file only, no -wal) while 4 threads create items + tar of the other files",
            "downtime_s": 0.0,
            "seconds": 0.938,
            "ok": true,
            "peak_rss_mib": 1.25,
            "commands": {
              "cp_db": {
                "seconds": 0.007,
                "exit_code": 0,
                "peak_rss_mib": 0.79,
                "output": ""
              },
              "tar_files": {
                "seconds": 0.93,
                "exit_code": 0,
                "peak_rss_mib": 1.25,
                "output": ""
              }
            },
            "items_created_while_copying": 944,
            "items_acknowledged_before_cp": 461,
            "write_errors": 0,
            "db_bytes": 831488,
            "wal_bytes_at_copy": 4231272,
            "main_db_bytes_live_at_copy": 831488,
            "shm_present_at_copy": true,
            "db_integrity_check": "ok",
            "backup_bytes": 12437163
          },
          "m2_cold_copy": {
            "method": "docker stop, tar of the whole data folder, docker start",
            "downtime_s": 0.93,
            "seconds": 0.928,
            "ok": true,
            "peak_rss_mib": 1.16,
            "commands": {
              "docker_stop": {
                "seconds": 0.161,
                "exit_code": 0
              },
              "tar_data": {
                "seconds": 0.557,
                "exit_code": 0,
                "peak_rss_mib": 1.16,
                "output": ""
              },
              "docker_start": {
                "seconds": 0.157,
                "exit_code": 0
              }
            },
            "wal_files_after_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "wal_files_before_stop": [
              "db.sqlite3-shm",
              "db.sqlite3-wal"
            ],
            "backup_bytes": 13425303,
            "data_tar_bytes": 13425303
          },
          "live_after_backups": {
            "item_count": "PASS",
            "items_decrypt": "PASS",
            "fields_match": "PASS",
            "organization": "PASS",
            "attachments_sha256": "PASS",
            "send_listed": "PASS",
            "old_token_accepted": "PASS"
          },
          "restore_m1_sqlite_online": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.22,
            "container_healthy": true,
            "bw_check_seconds": 35.34,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.73,
            "pass": true
          },
          "restore_m1b_builtin_backup": {
            "restore_script": "tar xzf /backup/m1b/vw-files.tar.gz -C /data; cp /backup/m1b/db_20261022_040812.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.26,
            "container_healthy": true,
            "bw_check_seconds": 36.04,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.72,
            "pass": true
          },
          "restore_m2_cold_copy": {
            "restore_script": "tar xzf /backup/m2/vw-data.tar.gz -C /data",
            "restore_seconds": 2.25,
            "container_healthy": true,
            "bw_check_seconds": 35.31,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 0,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.69,
            "pass": true
          },
          "restore_m3_naive_cp_while_writing": {
            "restore_script": "tar xzf /backup/m3/vw-files.tar.gz -C /data; cp /backup/m3/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.17,
            "container_healthy": true,
            "m3_writes": {
              "acknowledged_before_cp": 461,
              "found_in_restored_vault": 382,
              "missing": 79,
              "items_found_in_restored_vault_total": 382
            },
            "bw_check_seconds": 36.91,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "bw_login": "PASS",
              "bw_list_items": "PASS",
              "bw_export": "PASS",
              "bw_attachments_sha256": "PASS",
              "acknowledged_writes_present": "FAIL",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 15,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "bw_login": "official Bitwarden CLI logged in over HTTPS",
              "bw_list_items": "bw list items: 225 items listed, 225 of 225 match in every field",
              "bw_export": "bw export (JSON, personal vault) holds 220 items, 220 expected",
              "bw_attachments_sha256": "3 of 3 attachments downloaded with bw get attachment and SHA-256 matches",
              "acknowledged_writes_present": "382 of 461 items acknowledged by the server before the copy are in the restored vault",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.77,
            "pass": false
          },
          "restore_m1_without_rsa_key": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='rsa_key*'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.2,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "FAIL",
              "rsa_key_is_the_original": "FAIL",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 9,
            "failed": 2,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 401 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.69,
            "pass": false
          },
          "restore_m1_without_attachments": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='attachments'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.19,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "FAIL",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "PASS",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "config.json holds the saved admin setting",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.58,
            "pass": false
          },
          "restore_m1_without_config_json": {
            "restore_script": "tar xzf /backup/m1/vw-files.tar.gz -C /data --exclude='config.json'; cp /backup/m1/db.sqlite3 /data/db.sqlite3",
            "restore_seconds": 2.18,
            "container_healthy": true,
            "checks": {
              "login": "PASS",
              "item_count": "PASS",
              "items_decrypt": "PASS",
              "fields_match": "PASS",
              "organization": "PASS",
              "attachments_sha256": "PASS",
              "send_listed": "PASS",
              "old_token_accepted": "PASS",
              "rsa_key_is_the_original": "PASS",
              "admin_setting_restored": "FAIL",
              "send_file_sha256": "PASS"
            },
            "passed": 10,
            "failed": 1,
            "details": {
              "login": "logged in with the original master password",
              "item_count": "225 found, 225 expected",
              "items_decrypt": "225 of 225 decrypt with the account's keys",
              "fields_match": "225 of 225 items match in every field (200 logins, 20 secure notes, 5 organization logins)",
              "organization": "1 organization, 1 collection",
              "attachments_sha256": "3 of 3 attachments downloaded and decrypted with the expected SHA-256",
              "send_listed": "1 Send listed, 1 expected",
              "old_token_accepted": "HTTP 200 for an access token issued before the backup",
              "rsa_key_is_the_original": "rsa_key.pem in the restored folder has the live key's SHA-256",
              "admin_setting_restored": "no config.json",
              "send_file_sha256": "1 file(s) under /data/sends; blob SHA-256 matches"
            },
            "verify_seconds": 0.74,
            "pass": false
          },
          "summary": {
            "restore_pass": {
              "m1_sqlite_online": true,
              "m1b_builtin_backup": true,
              "m2_cold_copy": true,
              "m3_naive_cp_while_writing": false,
              "m1_without_rsa_key": false,
              "m1_without_attachments": false,
              "m1_without_config_json": false
            },
            "methods_restored_ok": [
              "m1_sqlite_online",
              "m1b_builtin_backup",
              "m2_cold_copy"
            ],
            "all_ok": true
          },
          "all_ok": true
        },
        "output_tail": [
          "restore m2_cold_copy: pass=True passed=15 failed=0 restore_seconds=2.25 error=None",
          "restore m3_naive_cp_while_writing: pass=False passed=15 failed=1 restore_seconds=2.17 error=None",
          "  FAIL acknowledged_writes_present: 382 of 461 items acknowledged by the server before the copy are in the restored vault",
          "restore m1_without_rsa_key: pass=False passed=9 failed=2 restore_seconds=2.2 error=None",
          "  FAIL old_token_accepted: HTTP 401 for an access token issued before the backup",
          "  FAIL rsa_key_is_the_original: rsa_key.pem differs from the live one (Vaultwarden generated a new key)",
          "restore m1_without_attachments: pass=False passed=10 failed=1 restore_seconds=2.19 error=None",
          "  FAIL attachments_sha256: 0 of 3 attachments downloaded and decrypted with the expected SHA-256; ['lab-attachment-0.bin: download HTTP 404', 'lab-attachment-1.bin: download HTTP 404', 'lab-attachment-2.bin: download HTTP 404']",
          "restore m1_without_config_json: pass=False passed=10 failed=1 restore_seconds=2.18 error=None",
          "  FAIL admin_setting_restored: no config.json"
        ],
        "series": [
          {
            "t_offset_s": 0.0,
            "total_mem_mib": 183.71,
            "total_cpu_pct": 127.81,
            "mem_mib": [
              160.5,
              23.21
            ],
            "cpu_pct": [
              74.95,
              52.86
            ]
          },
          {
            "t_offset_s": 2.0,
            "total_mem_mib": 186.05,
            "total_cpu_pct": 160.2,
            "mem_mib": [
              161.0,
              25.05
            ],
            "cpu_pct": [
              80.49,
              79.71
            ]
          },
          {
            "t_offset_s": 4.0,
            "total_mem_mib": 161.4,
            "total_cpu_pct": 40.3,
            "mem_mib": [
              161.4,
              0.0
            ],
            "cpu_pct": [
              40.3,
              0.0
            ]
          },
          {
            "t_offset_s": 6.0,
            "total_mem_mib": 199.92,
            "total_cpu_pct": 54.23,
            "mem_mib": [
              182.8,
              17.12
            ],
            "cpu_pct": [
              34.28,
              19.95
            ]
          },
          {
            "t_offset_s": 8.0,
            "total_mem_mib": 184.52,
            "total_cpu_pct": 35.88,
            "mem_mib": [
              167.4,
              17.12
            ],
            "cpu_pct": [
              35.88,
              0.0
            ]
          },
          {
            "t_offset_s": 10.1,
            "total_mem_mib": 274.32,
            "total_cpu_pct": 47.93,
            "mem_mib": [
              257.2,
              17.12
            ],
            "cpu_pct": [
              47.93,
              0.0
            ]
          },
          {
            "t_offset_s": 12.1,
            "total_mem_mib": 216.82,
            "total_cpu_pct": 46.17,
            "mem_mib": [
              199.7,
              17.12
            ],
            "cpu_pct": [
              46.17,
              0.0
            ]
          },
          {
            "t_offset_s": 14.1,
            "total_mem_mib": 277.92,
            "total_cpu_pct": 54.82,
            "mem_mib": [
              260.8,
              17.12
            ],
            "cpu_pct": [
              54.82,
              0.0
            ]
          },
          {
            "t_offset_s": 16.1,
            "total_mem_mib": 277.81,
            "total_cpu_pct": 32.04,
            "mem_mib": [
              260.7,
              17.11
            ],
            "cpu_pct": [
              31.97,
              0.07
            ]
          },
          {
            "t_offset_s": 18.1,
            "total_mem_mib": 301.85,
            "total_cpu_pct": 34.93,
            "mem_mib": [
              284.9,
              16.95
            ],
            "cpu_pct": [
              34.93,
              0.0
            ]
          },
          {
            "t_offset_s": 20.1,
            "total_mem_mib": 206.98,
            "total_cpu_pct": 44.39,
            "mem_mib": [
              189.9,
              17.08
            ],
            "cpu_pct": [
              44.39,
              0.0
            ]
          },
          {
            "t_offset_s": 22.1,
            "total_mem_mib": 277.58,
            "total_cpu_pct": 4.76,
            "mem_mib": [
              260.5,
              17.08
            ],
            "cpu_pct": [
              4.76,
              0.0
            ]
          },
          {
            "t_offset_s": 24.1,
            "total_mem_mib": 281.08,
            "total_cpu_pct": 110.05,
            "mem_mib": [
              264.2,
              16.88
            ],
            "cpu_pct": [
              110.05,
              0.0
            ]
          },
          {
            "t_offset_s": 26.1,
            "total_mem_mib": 285.98,
            "total_cpu_pct": 0.18,
            "mem_mib": [
              269.1,
              16.88
            ],
            "cpu_pct": [
              0.18,
              0.0
            ]
          },
          {
            "t_offset_s": 28.2,
            "total_mem_mib": 279.48,
            "total_cpu_pct": 88.1,
            "mem_mib": [
              262.6,
              16.88
            ],
            "cpu_pct": [
              88.1,
              0.0
            ]
          },
          {
            "t_offset_s": 30.2,
            "total_mem_mib": 288.68,
            "total_cpu_pct": 0.24,
            "mem_mib": [
              271.8,
              16.88
            ],
            "cpu_pct": [
              0.24,
              0.0
            ]
          },
          {
            "t_offset_s": 32.2,
            "total_mem_mib": 277.78,
            "total_cpu_pct": 88.35,
            "mem_mib": [
              260.9,
              16.88
            ],
            "cpu_pct": [
              88.35,
              0.0
            ]
          },
          {
            "t_offset_s": 34.2,
            "total_mem_mib": 288.68,
            "total_cpu_pct": 3.03,
            "mem_mib": [
              271.8,
              16.88
            ],
            "cpu_pct": [
              3.03,
              0.0
            ]
          },
          {
            "t_offset_s": 36.2,
            "total_mem_mib": 280.26,
            "total_cpu_pct": 101.8,
            "mem_mib": [
              262.9,
              17.36
            ],
            "cpu_pct": [
              96.97,
              4.83
            ]
          },
          {
            "t_offset_s": 38.2,
            "total_mem_mib": 305.56,
            "total_cpu_pct": 0.24,
            "mem_mib": [
              288.2,
              17.36
            ],
            "cpu_pct": [
              0.24,
              0.0
            ]
          },
          {
            "t_offset_s": 40.2,
            "total_mem_mib": 285.71,
            "total_cpu_pct": 106.84,
            "mem_mib": [
              268.2,
              17.51
            ],
            "cpu_pct": [
              106.84,
              0.0
            ]
          },
          {
            "t_offset_s": 42.2,
            "total_mem_mib": 380.91,
            "total_cpu_pct": 25.92,
            "mem_mib": [
              363.4,
              17.51
            ],
            "cpu_pct": [
              25.92,
              0.0
            ]
          },
          {
            "t_offset_s": 44.2,
            "total_mem_mib": 188.33,
            "total_cpu_pct": 29.3,
            "mem_mib": [
              171.2,
              17.13
            ],
            "cpu_pct": [
              29.3,
              0.0
            ]
          },
          {
            "t_offset_s": 46.2,
            "total_mem_mib": 180.27,
            "total_cpu_pct": 16.04,
            "mem_mib": [
              163.3,
              16.97
            ],
            "cpu_pct": [
              16.02,
              0.02
            ]
          },
          {
            "t_offset_s": 48.3,
            "total_mem_mib": 278.37,
            "total_cpu_pct": 87.56,
            "mem_mib": [
              261.4,
              16.97
            ],
            "cpu_pct": [
              87.56,
              0.0
            ]
          },
          {
            "t_offset_s": 50.3,
            "total_mem_mib": 205.67,
            "total_cpu_pct": 8.81,
            "mem_mib": [
              188.7,
              16.97
            ],
            "cpu_pct": [
              8.81,
              0.0
            ]
          },
          {
            "t_offset_s": 52.3,
            "total_mem_mib": 280.47,
            "total_cpu_pct": 74.44,
            "mem_mib": [
              263.5,
              16.97
            ],
            "cpu_pct": [
              74.44,
              0.0
            ]
          },
          {
            "t_offset_s": 54.3,
            "total_mem_mib": 274.67,
            "total_cpu_pct": 4.95,
            "mem_mib": [
              257.7,
              16.97
            ],
            "cpu_pct": [
              4.95,
              0.0
            ]
          },
          {
            "t_offset_s": 56.3,
            "total_mem_mib": 290.37,
            "total_cpu_pct": 23.71,
            "mem_mib": [
              273.4,
              16.97
            ],
            "cpu_pct": [
              23.71,
              0.0
            ]
          },
          {
            "t_offset_s": 58.3,
            "total_mem_mib": 297.77,
            "total_cpu_pct": 19.37,
            "mem_mib": [
              280.8,
              16.97
            ],
            "cpu_pct": [
              19.37,
              0.0
            ]
          },
          {
            "t_offset_s": 60.3,
            "total_mem_mib": 277.77,
            "total_cpu_pct": 65.47,
            "mem_mib": [
              260.8,
              16.97
            ],
            "cpu_pct": [
              65.47,
              0.0
            ]
          },
          {
            "t_offset_s": 62.3,
            "total_mem_mib": 213.97,
            "total_cpu_pct": 34.0,
            "mem_mib": [
              197.0,
              16.97
            ],
            "cpu_pct": [
              34.0,
              0.0
            ]
          },
          {
            "t_offset_s": 64.3,
            "total_mem_mib": 290.07,
            "total_cpu_pct": 42.41,
            "mem_mib": [
              273.1,
              16.97
            ],
            "cpu_pct": [
              42.41,
              0.0
            ]
          },
          {
            "t_offset_s": 66.4,
            "total_mem_mib": 232.12,
            "total_cpu_pct": 79.34,
            "mem_mib": [
              214.9,
              17.22
            ],
            "cpu_pct": [
              74.63,
              4.71
            ]
          },
          {
            "t_offset_s": 68.4,
            "total_mem_mib": 290.02,
            "total_cpu_pct": 39.23,
            "mem_mib": [
              272.8,
              17.22
            ],
            "cpu_pct": [
              39.23,
              0.0
            ]
          },
          {
            "t_offset_s": 70.4,
            "total_mem_mib": 235.12,
            "total_cpu_pct": 76.09,
            "mem_mib": [
              217.9,
              17.22
            ],
            "cpu_pct": [
              76.09,
              0.0
            ]
          },
          {
            "t_offset_s": 72.4,
            "total_mem_mib": 289.03,
            "total_cpu_pct": 17.27,
            "mem_mib": [
              272.0,
              17.03
            ],
            "cpu_pct": [
              17.27,
              0.0
            ]
          },
          {
            "t_offset_s": 74.4,
            "total_mem_mib": 221.53,
            "total_cpu_pct": 50.43,
            "mem_mib": [
              204.5,
              17.03
            ],
            "cpu_pct": [
              50.43,
              0.0
            ]
          },
          {
            "t_offset_s": 76.4,
            "total_mem_mib": 298.6,
            "total_cpu_pct": 25.98,
            "mem_mib": [
              281.6,
              17.0
            ],
            "cpu_pct": [
              25.96,
              0.02
            ]
          },
          {
            "t_offset_s": 78.4,
            "total_mem_mib": 211.9,
            "total_cpu_pct": 29.82,
            "mem_mib": [
              194.9,
              17.0
            ],
            "cpu_pct": [
              29.82,
              0.0
            ]
          },
          {
            "t_offset_s": 80.4,
            "total_mem_mib": 351.5,
            "total_cpu_pct": 43.13,
            "mem_mib": [
              334.5,
              17.0
            ],
            "cpu_pct": [
              43.13,
              0.0
            ]
          },
          {
            "t_offset_s": 82.4,
            "total_mem_mib": 380.7,
            "total_cpu_pct": 0.06,
            "mem_mib": [
              363.7,
              17.0
            ],
            "cpu_pct": [
              0.06,
              0.0
            ]
          },
          {
            "t_offset_s": 84.4,
            "total_mem_mib": 202.08,
            "total_cpu_pct": 11.17,
            "mem_mib": [
              185.1,
              16.98
            ],
            "cpu_pct": [
              11.17,
              0.0
            ]
          },
          {
            "t_offset_s": 86.5,
            "total_mem_mib": 208.68,
            "total_cpu_pct": 46.43,
            "mem_mib": [
              191.7,
              16.98
            ],
            "cpu_pct": [
              46.43,
              0.0
            ]
          },
          {
            "t_offset_s": 88.5,
            "total_mem_mib": 275.98,
            "total_cpu_pct": 3.79,
            "mem_mib": [
              259.0,
              16.98
            ],
            "cpu_pct": [
              3.79,
              0.0
            ]
          },
          {
            "t_offset_s": 90.5,
            "total_mem_mib": 271.88,
            "total_cpu_pct": 100.19,
            "mem_mib": [
              254.9,
              16.98
            ],
            "cpu_pct": [
              100.19,
              0.0
            ]
          },
          {
            "t_offset_s": 92.5,
            "total_mem_mib": 279.28,
            "total_cpu_pct": 5.93,
            "mem_mib": [
              262.3,
              16.98
            ],
            "cpu_pct": [
              5.93,
              0.0
            ]
          },
          {
            "t_offset_s": 94.5,
            "total_mem_mib": 287.88,
            "total_cpu_pct": 76.44,
            "mem_mib": [
              270.9,
              16.98
            ],
            "cpu_pct": [
              76.44,
              0.0
            ]
          },
          {
            "t_offset_s": 96.5,
            "total_mem_mib": 291.1,
            "total_cpu_pct": 14.47,
            "mem_mib": [
              273.9,
              17.2
            ],
            "cpu_pct": [
              10.49,
              3.98
            ]
          },
          {
            "t_offset_s": 98.5,
            "total_mem_mib": 250.5,
            "total_cpu_pct": 98.62,
            "mem_mib": [
              233.3,
              17.2
            ],
            "cpu_pct": [
              98.62,
              0.0
            ]
          },
          {
            "t_offset_s": 100.5,
            "total_mem_mib": 278.0,
            "total_cpu_pct": 2.53,
            "mem_mib": [
              260.8,
              17.2
            ],
            "cpu_pct": [
              2.53,
              0.0
            ]
          },
          {
            "t_offset_s": 102.5,
            "total_mem_mib": 287.06,
            "total_cpu_pct": 75.9,
            "mem_mib": [
              269.9,
              17.16
            ],
            "cpu_pct": [
              75.9,
              0.0
            ]
          },
          {
            "t_offset_s": 104.6,
            "total_mem_mib": 288.16,
            "total_cpu_pct": 0.06,
            "mem_mib": [
              271.0,
              17.16
            ],
            "cpu_pct": [
              0.06,
              0.0
            ]
          },
          {
            "t_offset_s": 106.6,
            "total_mem_mib": 287.06,
            "total_cpu_pct": 30.48,
            "mem_mib": [
              269.9,
              17.16
            ],
            "cpu_pct": [
              30.47,
              0.01
            ]
          },
          {
            "t_offset_s": 108.6,
            "total_mem_mib": 294.11,
            "total_cpu_pct": 0.1,
            "mem_mib": [
              277.0,
              17.11
            ],
            "cpu_pct": [
              0.1,
              0.0
            ]
          },
          {
            "t_offset_s": 110.6,
            "total_mem_mib": 289.11,
            "total_cpu_pct": 36.95,
            "mem_mib": [
              272.1,
              17.01
            ],
            "cpu_pct": [
              36.95,
              0.0
            ]
          },
          {
            "t_offset_s": 112.6,
            "total_mem_mib": 289.51,
            "total_cpu_pct": 0.08,
            "mem_mib": [
              272.5,
              17.01
            ],
            "cpu_pct": [
              0.08,
              0.0
            ]
          },
          {
            "t_offset_s": 114.6,
            "total_mem_mib": 287.01,
            "total_cpu_pct": 26.41,
            "mem_mib": [
              270.0,
              17.01
            ],
            "cpu_pct": [
              26.41,
              0.0
            ]
          },
          {
            "t_offset_s": 116.6,
            "total_mem_mib": 299.71,
            "total_cpu_pct": 0.11,
            "mem_mib": [
              282.7,
              17.01
            ],
            "cpu_pct": [
              0.11,
              0.0
            ]
          },
          {
            "t_offset_s": 118.6,
            "total_mem_mib": 285.81,
            "total_cpu_pct": 26.97,
            "mem_mib": [
              268.8,
              17.01
            ],
            "cpu_pct": [
              26.97,
              0.0
            ]
          },
          {
            "t_offset_s": 120.6,
            "total_mem_mib": 381.21,
            "total_cpu_pct": 2.7,
            "mem_mib": [
              364.2,
              17.01
            ],
            "cpu_pct": [
              2.7,
              0.0
            ]
          },
          {
            "t_offset_s": 122.6,
            "total_mem_mib": 202.21,
            "total_cpu_pct": 18.09,
            "mem_mib": [
              185.2,
              17.01
            ],
            "cpu_pct": [
              18.09,
              0.0
            ]
          },
          {
            "t_offset_s": 124.6,
            "total_mem_mib": 184.31,
            "total_cpu_pct": 49.42,
            "mem_mib": [
              167.3,
              17.01
            ],
            "cpu_pct": [
              49.42,
              0.0
            ]
          },
          {
            "t_offset_s": 126.7,
            "total_mem_mib": 280.33,
            "total_cpu_pct": 18.19,
            "mem_mib": [
              263.2,
              17.13
            ],
            "cpu_pct": [
              13.52,
              4.67
            ]
          },
          {
            "t_offset_s": 128.7,
            "total_mem_mib": 248.66,
            "total_cpu_pct": 84.16,
            "mem_mib": [
              231.6,
              17.06
            ],
            "cpu_pct": [
              84.16,
              0.0
            ]
          },
          {
            "t_offset_s": 130.7,
            "total_mem_mib": 274.96,
            "total_cpu_pct": 25.27,
            "mem_mib": [
              257.9,
              17.06
            ],
            "cpu_pct": [
              25.27,
              0.0
            ]
          },
          {
            "t_offset_s": 132.7,
            "total_mem_mib": 278.06,
            "total_cpu_pct": 63.73,
            "mem_mib": [
              261.0,
              17.06
            ],
            "cpu_pct": [
              63.73,
              0.0
            ]
          },
          {
            "t_offset_s": 134.7,
            "total_mem_mib": 300.56,
            "total_cpu_pct": 52.45,
            "mem_mib": [
              283.5,
              17.06
            ],
            "cpu_pct": [
              52.45,
              0.0
            ]
          },
          {
            "t_offset_s": 136.7,
            "total_mem_mib": 311.56,
            "total_cpu_pct": 48.23,
            "mem_mib": [
              294.5,
              17.06
            ],
            "cpu_pct": [
              48.21,
              0.02
            ]
          },
          {
            "t_offset_s": 138.7,
            "total_mem_mib": 291.76,
            "total_cpu_pct": 29.64,
            "mem_mib": [
              274.7,
              17.06
            ],
            "cpu_pct": [
              29.64,
              0.0
            ]
          },
          {
            "t_offset_s": 140.7,
            "total_mem_mib": 274.71,
            "total_cpu_pct": 95.22,
            "mem_mib": [
              257.7,
              17.01
            ],
            "cpu_pct": [
              95.22,
              0.0
            ]
          },
          {
            "t_offset_s": 142.7,
            "total_mem_mib": 299.41,
            "total_cpu_pct": 5.8,
            "mem_mib": [
              282.4,
              17.01
            ],
            "cpu_pct": [
              5.8,
              0.0
            ]
          },
          {
            "t_offset_s": 144.7,
            "total_mem_mib": 246.41,
            "total_cpu_pct": 80.82,
            "mem_mib": [
              229.4,
              17.01
            ],
            "cpu_pct": [
              80.82,
              0.0
            ]
          },
          {
            "t_offset_s": 146.8,
            "total_mem_mib": 294.21,
            "total_cpu_pct": 60.09,
            "mem_mib": [
              277.2,
              17.01
            ],
            "cpu_pct": [
              60.09,
              0.0
            ]
          },
          {
            "t_offset_s": 148.8,
            "total_mem_mib": 225.41,
            "total_cpu_pct": 49.21,
            "mem_mib": [
              208.4,
              17.01
            ],
            "cpu_pct": [
              49.21,
              0.0
            ]
          },
          {
            "t_offset_s": 150.8,
            "total_mem_mib": 293.81,
            "total_cpu_pct": 22.97,
            "mem_mib": [
              276.8,
              17.01
            ],
            "cpu_pct": [
              22.97,
              0.0
            ]
          },
          {
            "t_offset_s": 152.8,
            "total_mem_mib": 214.21,
            "total_cpu_pct": 25.94,
            "mem_mib": [
              197.2,
              17.01
            ],
            "cpu_pct": [
              25.94,
              0.0
            ]
          },
          {
            "t_offset_s": 154.8,
            "total_mem_mib": 309.1,
            "total_cpu_pct": 39.48,
            "mem_mib": [
              291.6,
              17.5
            ],
            "cpu_pct": [
              39.39,
              0.09
            ]
          },
          {
            "t_offset_s": 156.8,
            "total_mem_mib": 188.56,
            "total_cpu_pct": 7.86,
            "mem_mib": [
              171.2,
              17.36
            ],
            "cpu_pct": [
              3.8,
              4.06
            ]
          },
          {
            "t_offset_s": 158.8,
            "total_mem_mib": 289.96,
            "total_cpu_pct": 35.57,
            "mem_mib": [
              272.6,
              17.36
            ],
            "cpu_pct": [
              35.57,
              0.0
            ]
          },
          {
            "t_offset_s": 160.8,
            "total_mem_mib": 385.76,
            "total_cpu_pct": 2.81,
            "mem_mib": [
              368.4,
              17.36
            ],
            "cpu_pct": [
              2.81,
              0.0
            ]
          },
          {
            "t_offset_s": 162.8,
            "total_mem_mib": 204.47,
            "total_cpu_pct": 15.48,
            "mem_mib": [
              187.3,
              17.17
            ],
            "cpu_pct": [
              15.48,
              0.0
            ]
          },
          {
            "t_offset_s": 164.8,
            "total_mem_mib": 204.44,
            "total_cpu_pct": 51.28,
            "mem_mib": [
              187.4,
              17.04
            ],
            "cpu_pct": [
              51.25,
              0.03
            ]
          },
          {
            "t_offset_s": 166.9,
            "total_mem_mib": 204.44,
            "total_cpu_pct": 0.21,
            "mem_mib": [
              187.4,
              17.04
            ],
            "cpu_pct": [
              0.2,
              0.01
            ]
          },
          {
            "t_offset_s": 168.9,
            "total_mem_mib": 204.62,
            "total_cpu_pct": 18.66,
            "mem_mib": [
              187.6,
              17.02
            ],
            "cpu_pct": [
              18.66,
              0.0
            ]
          },
          {
            "t_offset_s": 170.9,
            "total_mem_mib": 191.72,
            "total_cpu_pct": 45.06,
            "mem_mib": [
              174.7,
              17.02
            ],
            "cpu_pct": [
              45.06,
              0.0
            ]
          },
          {
            "t_offset_s": 172.9,
            "total_mem_mib": 159.42,
            "total_cpu_pct": 0.0,
            "mem_mib": [
              142.4,
              17.02
            ],
            "cpu_pct": [
              0.0,
              0.0
            ]
          }
        ],
        "series_start_offset_s": 1.8,
        "peak_note": "peak = highest value seen across docker stats samples (about one every 2-3 s); shorter spikes between samples are not seen",
        "peak_memory_stat": {
          "read_at": "2026-10-22T04:10:54Z",
          "per_service": {
            "toolbox": {
              "cgroup": "v2",
              "anon_mib": 221.91,
              "file_mib": 352.27,
              "active_file_mib": 91.3,
              "inactive_file_mib": 260.97,
              "shmem_mib": 0.0
            },
            "vaultwarden": {
              "cgroup": "v2",
              "anon_mib": 16.23,
              "file_mib": 0.05,
              "active_file_mib": 0.0,
              "inactive_file_mib": 0.05,
              "shmem_mib": 0.0
            }
          },
          "read_lag_s": 0.1,
          "series_index": 80,
          "sample_t_offset_s": 160.8,
          "total_mem_mib": 385.76
        },
        "series_services": [
          "toolbox",
          "vaultwarden"
        ]
      },
      "container_end_state": {
        "toolbox": {
          "restart_count": 0,
          "oom_killed": false
        },
        "vaultwarden": {
          "restart_count": 0,
          "oom_killed": false
        }
      },
      "teardown": {
        "done": true,
        "volumes_removed": true,
        "images_removed": false,
        "error": null
      },
      "warnings": [],
      "finished_at": "2026-10-22T04:11:18Z",
      "elapsed_seconds": 360.3
    }
  ],
  "load_defined": true,
  "notes": [
    "This is a command lab, like the restic/Borg/Kopia comparison: the harness's idle and peak RAM (docker stats of the Vaultwarden and toolbox containers) include the toolbox's file cache and the Node processes of the Bitwarden CLI, and say nothing about the backups. The numbers are in `runs[].load.reported_by_script`: per method `seconds`, `downtime_s`, `peak_rss_mib`, sizes and the restore verification. The harness does not take medians of those keys.",
    "Seeding: Python script (vwbackup.py) with the documented Bitwarden client cryptography (PBKDF2-SHA256 600,000 iterations for the master key, AES-256-CBC + HMAC-SHA256 EncStrings, RSA-2048 key pairs, RSA-OAEP-SHA1 for the organization key), the same as lab/apps/vaultwarden-caddy/vwclient.py. The official Bitwarden CLI (@bitwarden/cli 2026.10.0) has no command to register an account, so it cannot seed an empty server.",
    "The stack is Vaultwarden alone over plain HTTP on the Compose network, because a backup copies the data folder and the folder is the same behind Caddy. The web vault's HTTPS requirement concerns browsers; this test has no browser and talks to the API.",
    "Peak RSS: sqlite3, tar and cp run under busybox `time -v` (the kernel's high-water mark of that process). `vaultwarden backup` runs in the Vaultwarden container and is sampled by a polling loop (highest VmHWM seen), so it is a lower bound. `docker stop`/`start` are not RSS-measured (they are requests to the daemon).",
    "Lab-only compose override compose.lab.yaml (NOT in the published compose): Adds a `toolbox` container (docker:28.5.2-cli, the Docker socket, the live data volume and a backups volume) that runs the backup commands, stops and starts the live container and creates the separate restore projects. A backup host would run these commands from cron; the socket is there only so the lab can drive docker.",
    "Service(s) toolbox exist only in the lab-only compose override and are NOT in the published compose; their figures are in the result, their image line is not in the verified compose."
  ],
  "warnings": [],
  "files": {
    "compose": "vaultwarden-backup.compose.yaml",
    "env": "vaultwarden-backup.env"
  },
  "definitions": {
    "memory": "cgroup working set as reported by `docker stats` (usage minus inactive file cache), MiB = 2^20 bytes",
    "cpu": "percent of ONE core as reported by `docker stats` (4 busy cores = 400)",
    "total": "stats over the sum of all containers at the same instant",
    "sample_interval": "docker stats --no-stream takes about 1-2 s per call, so samples are 2-3 s apart",
    "runs": "each run is a full fresh cycle (up, health, setup, settle, idle, load, down -v); the published figure is the median over the runs, shown with the min-max range; see summary.rule"
  }
}
