Drop the Rakefile for direct ansible-playbook
The tasks were unused, and the vars.yml task wrote a subset of the keys the playbooks consume. READMEs and the upgrade plan now show the direct commands.

Assisted-by: GLM-5.3 via pi
change qrkuqqznrptwxsqvpwnrlywoswprlrmt
commit fbc62c9fbddf36d6e943409a1374d7e41549898b
author Alpha Chen <alpha@kejadlen.dev>
date
parent ymswwpxz
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 998dc09..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,5 +0,0 @@
-# frozen_string_literal: true
-
-source "https://rubygems.org"
-
-gem "rake"
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index eb7649c..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,13 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    rake (13.0.6)
-
-PLATFORMS
-  arm64-darwin-22
-
-DEPENDENCIES
-  rake
-
-BUNDLED WITH
-   2.4.1
diff --git a/README.md b/README.md
index 9076b06..a02b90d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,8 @@
 # boxen
 
+Playbooks run from the repository root against a single host:
+
+```sh
+ansible-playbook -l <host> <host>/<playbook>.yml
+```
+
diff --git a/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md b/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
index c0b9f75..97a734a 100644
--- a/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
+++ b/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
@@ -13,7 +13,8 @@ at 15, which only exists after the upgrade. Commit before, deploy after.
 
 What rides along without changes: Grafana, VictoriaMetrics, Caddy,
 Authelia, and the rest run as containers, and Vector runs as a
-`timberio/vector:*-debian` image. After the upgrade, `rake ansible`
+`timberio/vector:*-debian` image. After the upgrade, the main playbook
+(`ansible-playbook -l lotus-land-story lotus-land-story/main.yml`)
 re-targets the facts-based deb822 repositories (docker, tailscale, redis)
 to bookworm on its own.
 
@@ -49,7 +50,7 @@ to bookworm on its own.
    bookworm-security main` — bookworm dropped the `/updates` suffix.
 2. Re-target the third-party one-line repositories the same way, `sed -i
    s/bullseye/bookworm/ /etc/apt/sources.list.d/*.list`, so bullseye
-   builds don't constrain the dependency solve. `rake ansible` later
+   builds don't constrain the dependency solve. The main playbook later
    replaces these files with deb822 sources.
 3. `apt update && apt upgrade` (minimal first, no new packages), then
    `apt full-upgrade`. Postgres stays at 13: the installed binaries
@@ -73,7 +74,7 @@ it to the volume.
    volume: `sudo pg_createcluster 15 main -d
    /mnt/lotus-land-story/postgresql-15 --start`.
 3. Restore: `sudo -u postgres psql -f /tmp/all.sql postgres`.
-4. Run `rake ansible`. The repository changes apply: 15 paths,
+4. Run the main playbook. The repository changes apply: 15 paths,
    `data_directory` pointing at `postgresql-15`, the tuning values
    (already computed for 15 — see the pgtune comment in `postgres.yml`),
    `listen.conf`, and the `pg_hba.conf` rules.
@@ -92,13 +93,7 @@ it to the volume.
   the Grafana network panels render cadvisor data.
 - `backup.sh` succeeds against the 15 cluster.
 
-## Cleanup and rollback
-
-After the first full `rake ansible`, delete the sed-edited `docker.list`
-from `/etc/apt/sources.list.d/`: `playbooks/docker.yml` writes the deb822 `docker.sources`
-and only removes the other historical filename, so the sed-edited
-one-liner would configure Docker twice. (The deeper fix is the existing
-"consolidate this into the other playbook" TODO in `main.yml`.)
+## Rollback
 
 To roll back, restore the Linode snapshot and redeploy the pre-upgrade
 commit. In place, starting the 13 cluster again reverses the database
diff --git a/lotus-land-story/README.md b/lotus-land-story/README.md
index 83d7987..50ce879 100644
--- a/lotus-land-story/README.md
+++ b/lotus-land-story/README.md
@@ -2,10 +2,10 @@
 
 ```
 # setup
-export LOTUS_LAND_STORY_DOMAIN=...
+echo 'domain = "kejadlen.dev"' > terraform.tfvars
 
 # terraform
-rake terraform
+terraform apply
 
 # add the IP to ~/.ssh/config
 
@@ -13,10 +13,10 @@ rake terraform
 ansible all -m ping
 
 # ansible
-rake ansible
+ansible-playbook -l lotus-land-story lotus-land-story/main.yml
 
 # manually connect to tailscale
 
 # specific playbooks
-rake ansible[playbook]
+ansible-playbook -l lotus-land-story lotus-land-story/<playbook>.yml
 ```
diff --git a/lotus-land-story/Rakefile b/lotus-land-story/Rakefile
deleted file mode 100644
index 8181901..0000000
--- a/lotus-land-story/Rakefile
+++ /dev/null
@@ -1,59 +0,0 @@
-require "open3"
-require "yaml"
-
-DOMAIN = ENV.fetch("LOTUS_LAND_STORY_DOMAIN")
-
-task bootstrap: "pip:sync"
-
-namespace :pip do
-  task :sync => "requirements.txt" do
-    sh "pip-sync requirements.txt"
-  end
-
-  desc ""
-  task :upgrade do
-    out, _ = Open3.capture2e("pip-compile --upgrade --resolver=backtracking requirements.in")
-    File.write("requirements.txt", out)
-  end
-
-  file "requirements.txt" => "requirements.in" do |t|
-    out, _ = Open3.capture2e("pip-compile --resolver=backtracking requirements.in")
-    File.write(t.name, out)
-  end
-end
-
-desc ""
-task terraform: "terraform.tfvars" do
-  sh "terraform apply"
-end
-
-desc ""
-task :ansible, %i[ playbook ] => "vars.yml" do |_, args|
-  playbook = args.fetch(:playbook, "main")
-
-  sh "ansible-playbook --limit=lotus-land-story #{playbook}.yml"
-end
-
-task "terraform.tfvars" do |t|
-  File.write(t.name, "domain = \"#{DOMAIN}\"")
-end
-
-task "vars.yml" do |t|
-  linode_volume = `terraform output -raw lotus_land_story_volume`
-  miniflux_db_password = `op read "op://Private/Miniflux/db password"`.strip
-  miniflux_password = `op read op://Private/Miniflux/password`.strip
-
-  File.write(t.name, YAML.dump({
-    "domain" => DOMAIN,
-    "linode_volume" => linode_volume,
-    "prometheus" => {
-      "linode_api_token" => prometheus_linode_api_token,
-    },
-    "miniflux" => {
-      "db_password" => miniflux_db_password,
-      "password" => miniflux_password,
-    },
-  }))
-end
-
-task default: %i[ terraform ansible ]