stratum-storage (0.09) trixie; urgency=medium

  * `inventory` describes the whole storage of the host in one document (or
    one short summary): every disk and partition with what it carries, md
    arrays with members, state and rebuild progress, volume groups, thin
    pools with occupancy, volumes with their file system and mount, mounted
    file systems with size, used, available and UUID, mounts with options,
    and one aggregated warning list with a suggested fix. `inventory --json`
    is the only call a GUI needs: it parses nothing else.
  * The warnings aggregate degraded or rebuilding arrays, failed members,
    thin pools above 80 % (warning) and 95 % (critical), a volume group with
    no free space and no thin pool, a volume whose file system and mount
    disagree, a mount under /var/lib/vm-reactor/storage that is not in
    /etc/fstab, and mdadm or thin-provisioning-tools missing while an array
    or a thin pool exists.
  * The verb is read-only, takes no lock and answers in well under a second
    on the test host.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 15:10:00 +0100

stratum-storage (0.08) trixie; urgency=medium

  * mdadm is a dependency, not a recommendation: the module creates, grows and
    shrinks md arrays (array create/add/grow/remove) and cannot do its work
    without it. RAID 5/6 are no longer just detected, they are made here.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 13:10:00 +0100

stratum-storage (0.07) trixie; urgency=medium

  * pool resize: the size is read back with a percent of slack, because LVM
    rounds a physical volume down to whole extents - on a small md array the
    old check refused a resize that had worked.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 10:20:00 +0100

stratum-storage (0.06) trixie; urgency=medium

  * `array create` and `array add` take `--wipe`: a device that carries a file
    system or a signature is erased first (wipefs --all) instead of refused;
    a mounted device, a partition table, an array member and a physical volume
    are still refused. The arrays are the base of an LVM thin pool on the
    hosts VM Reactor manages.
  * `pool resize <device>...` runs pvresize so a physical volume takes the new
    size of its device (a larger md array, a grown disk) and reads the size
    back.
  * `array grow <mdN>` takes the spare members into the array (mdadm --grow
    --raid-devices): the array grows while it rebuilds, and pool resize then
    gives the new space to the volume group. Without a spare it is refused.
  * `pool remove <vg> <device>...` moves the data of the devices to the other
    disks (pvmove) and takes them out of the group (vgreduce); a device that is
    not a physical volume of that group is refused.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 09:40:00 +0100

stratum-storage (0.05) trixie; urgency=medium

  * `thinpool create <vg>/<name> [--percent <n>] [--size <n>G]` makes a thin
    pool with lvcreate --type thin-pool - the base VM Reactor keeps the disks
    of its machines and containers in. Without --size it takes --percent of
    the free space of the group (95 by default).
  * `volume remove <vg>/<lv>` removes a volume and reads back that it is gone;
    a thin pool and a volume that still has snapshots are refused, the
    snapshots by name.
  * `volume resize <vg>/<lv> --size <n>G|+<n>G [--fs ext4]` grows a volume
    with lvextend, and with --fs the file system with it (resize2fs); the
    result is read back and compared with the wanted size.
  * `pool create --wipe` accepts a device that carries a file system or a
    signature: the plan shows the wipefs --all step and states what is erased.
    A mounted device, a partition table, an array member and a physical
    volume are refused with or without --wipe.
  * `pool add <vg> <device>... [--wipe]` makes the devices physical volumes
    and joins them to an existing volume group (pvcreate, vgextend), so a
    group grows the same way it was made.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 05:10:00 +0100

stratum-storage (0.04) trixie; urgency=medium

  * format and mount accept a block device (md0, sdb1, /dev/md0) as well as a
    volume, so an array can be formatted and mounted without LVM on top.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 03:45:00 +0100

stratum-storage (0.03) trixie; urgency=medium

  * Add --allow-loop (or STRATUM_STORAGE_ALLOW_LOOP=1) so the creating actions
    can be exercised on loop devices on a machine without spare disks. The
    default stays strict: a loop device is still refused.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 03:20:00 +0100

stratum-storage (0.02) trixie; urgency=medium

  * New actions that create and manage storage. Every one of them checks the
    machine first, prints its plan unless --yes is given, and reads the result
    back afterwards:
    - `array create <mdN> --level <raid0|raid1|raid5|raid6|raid10>
      --devices sdb,sdc` builds an array with mdadm --create --run;
      `array add` and `array remove` grow and shrink one with mdadm --add,
      --fail and --remove.
    - `pool create <vg> <device>...` runs pvcreate and vgcreate.
    - `volume create <vg>/<lv> --size <n>G` makes a thick volume with
      lvcreate --size; with --thin <pool> it makes a thin volume with
      lvcreate --virtualsize --thinpool.
    - `format <vg>/<lv> ext4 [--label <name>]` runs mkfs.ext4 without -F.
    - `mount <vg>/<lv> <path>` creates the path, mounts the volume and adds a
      UUID= line to /etc/fstab.
  * Every action takes --json and --dry-run. Without --yes it prints the plan
    and exits 3, which stratum-core turns into "Apply this change anyway?";
    STRATUM_FORCE=1, set by the menu after that question, counts as consent.
  * A device is refused when it is mounted, belongs to an active array, is an
    LVM physical volume or carries any signature; the refusal names what was
    found on it. No --force is ever passed to mdadm or mkfs.
  * After a change the result is read back with mdadm --detail, pvs/vgs/lvs,
    blkid and findmnt, and a mismatch is reported as a failure.
  * Commands run through a replaceable runner, so the tests never call mdadm,
    lvm or mkfs.

 -- Stratum Project <stratum@skraba.net>  Mon, 09 Nov 2026 02:00:00 +0100

stratum-storage (0.01) trixie; urgency=medium

  * Initial release: read-only storage inventory for the Stratum layer.
  * `stratum storage disks` lists every physical disk with model, serial, WWN
    and what it carries; `status` summarises arrays, volume groups, volumes
    and mounted filesystems; `scan` adds what could be attached next.
  * `doctor` reports degraded arrays, thin pools near capacity, volume groups
    and filesystems that are nearly full, and /etc/fstab entries whose device
    no longer exists. Exits 1 when a critical finding is present.
  * Every command takes --json for machine-readable output.
  * No disk is written to in this version.

 -- Stratum Project <stratum@skraba.net>  Sun, 08 Nov 2026 23:30:00 +0100
