All Void 2.0 superpowers specs and implementation plans now live at
docs/superpowers/{specs,plans}/ inside the repo. Previously they were
at /project/docs/superpowers/ which was not under git.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7.2 KiB
Void 2.0 Plan 1 — Execution Progress
Updated: 2026-05-31 (session paused at 92% context)
Plan: /project/docs/superpowers/plans/2026-05-31-void-v2-plan1-foundation.md
Spec: /project/docs/superpowers/specs/2026-05-31-void-v2-design.md
Repo: /project/src/void-v2/ (git init done, on branch main)
Execution mode: subagent-driven-development
Status by Phase
| Phase | Plan Tasks | Status | Notes |
|---|---|---|---|
| A — Scaffolding | 1, 4 | DONE | Repo init + Node project init. 2 commits. |
| B — Infrastructure | 2, 3 | DONE | void2-db (CT 310 @ 192.168.1.12) + void2-app (CT 311 @ 192.168.1.13) running on Z. Postgres 16.14 + pgvector 0.8.2 + pgcrypto 1.3. DB user void + database void created. Verified reachable from this LXC. .env populated. |
| C — Migrations | 5, 6, 8, 10, 12, 14, 16 | READY | DB is reachable — can dispatch Task 5 implementer. |
| D — Repos | 7, 9, 11, 13, 15, 16-real | Blocked by B | All entity repos. |
| E — Auth + Server | 17, 18, 19, 20 | Blocked by B | Capability check, owner middleware, Express, /health smoke. |
| F — Deploy + docs | 21, 22 | Blocked by E | systemd, push.sh, completion doc. |
Completed Tasks
Task 1 — Repo Scaffolding [commit 0ede9fe]
- 5 files:
.gitignore,README.md,CHANGELOG.md,docs/VERSION_HISTORY.md,.env.example - Spec reviewed ✅, code quality reviewed ✅
Task 4 — Node Project Init [commit 45186f7]
package.json(name=void-server, version=2.0.0-alpha.1, type=module)- 7 runtime deps + 2 dev deps installed
vitest.config.js,lib/log.js(pino logger)- NOT YET REVIEWED — spec + code quality review skipped due to token pressure. Re-do on resume if desired, OR proceed (Task 4 is mechanical setup with no functional code).
Deviations from Plan
- Express 5.2.1 installed (plan said "Express 4"). Express 5 is the current
npm install expressdefault. Likely fine — Express 5 changed middleware error handling (promises auto-catch) and removed deprecated APIs, but our usage (json body, simple middlewares) works on both. Flag if any test fails with Express 5-specific behaviour. - Debian 13 used for LXCs (plan said 12). Only
debian-13-standard_13.1-2template was on Z. No functional impact. - Storage:
localzfson Z (plan saiddonatello-zfs). Donatello + Leonardo ZFS pools are OFFLINE — leftover from your 2026-05-22 SATA bus incident. HA migrate is NOT blocked —localzfsis the standard pattern here (CT 104, 105, 106, 108-112 all run on it) and PVE storage replication to Z3 every 15 min is configured. Replication jobs310-0and311-0added with*/15schedule, matching the rest of the fleet.pct migrate 310 z3will work like every other CT. Donatello/Leonardo restoration is a separate issue, not Void-blocking. su - postgresinstead ofsudo -u postgres— Debian 13 minimal doesn't ship sudo. Not a deviation in outcome, just adjusted command form.- DB password stored at
/root/void2-db-pass.txton Z (chmod 600). Also baked into/project/src/void-v2/.envon this LXC.
Awaiting User — Phase B (Tasks 2 + 3)
These need PVE host access. Agent inside /project cannot run them.
Task 2 — Provision LXCs on PVE host z
Pick two free CT IDs (suggestion: 310 = void2-db, 311 = void2-app) and two free IPs on 192.168.1.0/24.
# On PVE host as root
pct create 310 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname void2-db \
--cores 2 --memory 4096 --swap 1024 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.1.X/24,gw=192.168.1.1 \
--storage donatello-zfs --rootfs donatello-zfs:32 \
--unprivileged 1 --features nesting=1 --onboot 1 --start 0
cat >> /etc/pve/lxc/310.conf <<'EOF'
lxc.apparmor.profile: unconfined
EOF
pct start 310
pct create 311 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname void2-app \
--cores 4 --memory 4096 --swap 1024 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.1.Y/24,gw=192.168.1.1 \
--storage donatello-zfs --rootfs donatello-zfs:16 \
--unprivileged 1 --features nesting=1 --onboot 1 --start 0
cat >> /etc/pve/lxc/311.conf <<'EOF'
lxc.apparmor.profile: unconfined
EOF
pct start 311
Task 3 — Install Postgres 16 + pgvector on void2-db (CT 310)
pct enter 310
apt update
apt install -y curl ca-certificates gnupg
install -d /usr/share/postgresql-common/pgdg
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
-o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
https://apt.postgresql.org/pub/repos/apt $(. /etc/os-release; echo $VERSION_CODENAME)-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list
apt update
apt install -y postgresql-16 postgresql-16-pgvector
sed -i "s/^#listen_addresses.*/listen_addresses = '*'/" /etc/postgresql/16/main/postgresql.conf
cat >> /etc/postgresql/16/main/pg_hba.conf <<'EOF'
host void void 192.168.1.0/24 scram-sha-256
EOF
systemctl restart postgresql
DB_PASS=$(openssl rand -base64 24)
echo "Generated DB password (SAVE THIS): $DB_PASS"
sudo -u postgres psql <<EOF
CREATE USER void WITH PASSWORD '$DB_PASS';
CREATE DATABASE void OWNER void;
\c void
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pgcrypto;
EOF
SAVE THE DB PASSWORD somewhere safe — needed for .env on resume.
After user completes Tasks 2 + 3
Report back with:
void2-dbIPvoid2-appIP- The DB password
- Confirmation that
psql -h <void2-db-ip> -U void -d void -c 'SELECT version();'succeeds from any LAN host
Then update /project/src/void-v2/.env:
DATABASE_URL=postgres://void:<PASSWORD>@<VOID2_DB_IP>:5432/void
OWNER_TOKEN=<generate via openssl rand -base64 24>
PORT=3000
LOG_LEVEL=info
NODE_ENV=development
How to Resume
In the next session, say something like:
"Resume Plan 1 Void 2.0 execution. Read
/project/docs/superpowers/plans/2026-05-31-void-v2-plan1-progress.md— Phases A+B done, start dispatching from Task 5."
Resume agent should:
- Read this progress file
- Verify DB still reachable:
PGPASSWORD=$(ssh root@192.168.1.124 'grep DB_PASS /root/void2-db-pass.txt | cut -d= -f2') psql -h 192.168.1.12 -U void -d void -c 'SELECT 1;' - Continue dispatching implementer subagents for Task 5 onward
- Token-saving advice: skip code-quality review for trivial scaffolding tasks (the spec compliance review is sufficient there); do full two-stage review for repo + auth + server code
Next subagent dispatch (when ready)
Task 5: Postgres Pool + Migration Runner — full task text in plan file lines covering DB pool, migration runner with idempotency, test helpers.
Quick environment cheatsheet for resume
- Repo:
/project/src/void-v2/(onmain, 2 commits) - DB:
192.168.1.12:5432, uservoid, dbvoid, password in.envand at/root/void2-db-pass.txton Z (192.168.1.124) - App LXC ready (CT 311 @ 192.168.1.13) but Node not installed there yet (Task 21 handles that)
cd /project/src/void-v2 && npm testshould work once tests exist;.envwill be picked up bydotenv- SSH to Z:
ssh root@192.168.1.124(key auth works) - SSH to void2-db/app:
pct exec 310 -- bash/pct exec 311 -- bashfrom Z (via the SSH chain)