feat(railiance): implement CUST-WP-0032 Haskell build machine infra

Packer build definition, cloud-init autoinstall, GHCup toolchain script,
boot-time registration agent (state-hub + autossh dual tunnel), systemd
unit, key injection, remote-build Makefile, smoke test, and deployment
README. All 15 tasks complete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-20 12:01:30 +02:00
parent 67b990170d
commit 9bc761c2b5
17 changed files with 901 additions and 16 deletions

View File

@@ -4,7 +4,7 @@ type: workplan
title: "Haskell Build Machine — VirtualBox Image & State-Hub Integration"
domain: railiance
repo: the-custodian
status: todo
status: done
owner: custodian
topic_slug: railiance
created: "2026-04-20"
@@ -79,7 +79,7 @@ Workstation (WSL2)
```task
id: CUST-WP-0032-T01
status: todo
status: done
priority: high
state_hub_task_id: "1430844c-82f2-4e7b-88b2-6e74a29167c4"
```
@@ -126,7 +126,7 @@ echo "Next: inject keys with scripts/inject-keys.sh, then start VM"
```task
id: CUST-WP-0032-T02
status: todo
status: done
priority: high
state_hub_task_id: "816bd164-ed1a-4d57-bdeb-c9e3d9e4d614"
```
@@ -151,7 +151,7 @@ Packer boot_command sequence:
```task
id: CUST-WP-0032-T03
status: todo
status: done
priority: high
state_hub_task_id: "2900ae95-828b-4ced-8821-ded6b4a52e61"
```
@@ -206,7 +206,7 @@ runuser -l build -c "source ~/.ghcup/env && ghcup run --ghc $GHC_SECONDARY -- gh
```task
id: CUST-WP-0032-T04
status: todo
status: done
priority: high
state_hub_task_id: "5267d2f3-f8fb-4072-a9fa-40b18cf888bd"
```
@@ -246,7 +246,7 @@ dpkg-reconfigure openssh-server
```task
id: CUST-WP-0032-T05
status: todo
status: done
priority: high
state_hub_task_id: "18ee959d-30b7-4a06-9a84-02c4e5d7ba83"
```
@@ -406,7 +406,7 @@ if __name__ == "__main__":
```task
id: CUST-WP-0032-T06
status: todo
status: done
priority: high
state_hub_task_id: "1a6bf2a2-91e8-46f9-a82c-de08ccfda729"
```
@@ -465,7 +465,7 @@ REMOTE_PORT=12222
```task
id: CUST-WP-0032-T07
status: todo
status: done
priority: medium
state_hub_task_id: "6bb36de9-df03-452d-bb1c-3dfc5a695265"
```
@@ -504,7 +504,7 @@ Create `scripts/inject-keys.sh` implementing Option B.
```task
id: CUST-WP-0032-T08
status: todo
status: done
priority: high
state_hub_task_id: "a42342cb-41ef-4915-8ce5-923a36bd2918"
```
@@ -539,7 +539,7 @@ bridge-status:
```task
id: CUST-WP-0032-T09
status: todo
status: done
priority: medium
state_hub_task_id: "5ea059a0-94c3-4b6e-ae99-cf20a6c4af1c"
```
@@ -566,7 +566,7 @@ Add `make install-ssh-config` target that appends this to `~/.ssh/config`
```task
id: CUST-WP-0032-T10
status: todo
status: done
priority: low
state_hub_task_id: "6bfd43de-b1e2-4114-b509-d1c78d066756"
```
@@ -601,7 +601,7 @@ ports:
```task
id: CUST-WP-0032-T11
status: todo
status: done
priority: high
state_hub_task_id: "f7efd28e-0ae4-41c9-bd76-649bd17bec16"
```
@@ -632,7 +632,7 @@ capability_type_entry_id: "<uuid-returned>"
```task
id: CUST-WP-0032-T12
status: todo
status: done
priority: low
state_hub_task_id: "55f30877-7fe7-4aaa-b74a-f9ab435f1d9a"
```
@@ -656,7 +656,7 @@ If filtering by `capability_type` is not supported, document the workaround
```task
id: CUST-WP-0032-T13
status: todo
status: done
priority: high
state_hub_task_id: "4c27f5db-a0c1-4f43-97a7-87472ce3a1cc"
```
@@ -723,7 +723,7 @@ vm-info:
```task
id: CUST-WP-0032-T14
status: todo
status: done
priority: high
state_hub_task_id: "b3a9613d-0d08-4f08-9361-d7e42c07069a"
```
@@ -743,7 +743,7 @@ Create `infra/build-machines/smoke-test.sh` that automates steps 2-5.
```task
id: CUST-WP-0032-T15
status: todo
status: done
priority: medium
state_hub_task_id: "4d858d77-4b9d-4f75-820a-b8f9d2dd3f19"
```