D-10 closure runbook v2: lab build + lab infocheck driven workflow #105

Open
opened 2026-05-17 22:01:52 +00:00 by mik-tf · 0 comments
Owner

Why this issue

hero_proc#102 tracks D-10 closure (every demo-set repo passes lab build + lab infocheck cleanly). The per-session "manual sweep" playbook we refined across s101–s107 has been superseded by the lab build --release --install --workspace + lab infocheck driven flow. This issue is the canonical runbook for closing the remaining work under the new tooling.

Current state (2026-05-17 session, after live lab infocheck inventory + 6 rebuild probes)

  • 17/35 effective clean — 11 confirmed at inventory + 6 stale-install false positives that flipped clean after lab build --release --install --workspace (no source changes).
  • ~15 wholesale-shape repos remain as real D-10 work (no service_base!(), no service.toml on disk; need full canonical-base bootstrap).
  • 2 repos blocked on canonical pattern question for non-service binaries in lib workspaces — see hero_skills#258.
  • 1 special casemycelium_network is not a Rust workspace lab infocheck can audit; out of scope.

The 17 effective-clean break down: T1 = 6/6, T2 from prior manual sweeps = 6/6 (hero_slides, hero_books, hero_biz, hero_collab, hero_office, hero_foundry), plus the 6 stale-install confirmations = hero_compute, hero_proxy, hero_codescalers, hero_whiteboard, hero_memory, hero_embedder. Live tracker #102#33220 carries the full per-session history.

The 15 remaining wholesale-shape repos (D-10 real work)

Source state: 0 of N main.rs files have service_base!(), no service.toml on disk. Each needs full canonical-base bootstrap.

  • hero_os — s122 70f627d (5 binaries: cli + server + admin + app + web; service_base!() macro wholesale + lesson #19 forward_env_if_set on both spawned ActionSpecs + PATH_ROOT env block added to server+admin service.tomls; smoke 6/6 met)
  • hero_osis — s123 7d8b3a2
  • hero_livekit — s114 01e48e7 (4 binaries: server + admin + lk-backend + hero_do_hero_livekit)
  • hero_logic — s110 ba74b2b
  • hero_indexer — s109 e60eca8
  • hero_voice — s119 f8503b3 (4 binaries: cli + server + admin + voiced; first end-to-end validation of transcribe + TTS branches of herolib_ai v0.6.0 API + paired src/bin/hero_voice.rs → src/main.rs restructure, 5/5 met)
  • hero_agent — s120 a141d48 (3 binaries canonical + herolib_ai v0.6.0 transcribe-surface migration — last AI-rename ripple absorbed, 5/5 met)
  • hero_code_indexer — s111 95ccdad
  • hero_lib_rhai — s121 b4d138a
  • hero_matrixchat — s115 635619b (3 binaries canonical + web.sock→admin.sock pair, 5/5 met)
  • hero_planner — s116 bdfbfb4
  • hero_researcher — s118 ee3431b (2 binaries: cli + server; herolib_ai v0.6.0 migration paired + web.sock→admin.sock rename, 5/5 met)
  • hero_wallet — s112 42cb6393
  • hero_webbuilder — s117 5f726af (4 binaries: cli + server + admin + web; herolib_ai v0.6.0 migration paired with D-10 sweep, 5/5 met)
  • hero_website_framework — s113 6c88a34

Per-repo runbook (safe-by-default variant)

This variant adds two checkpoints to the standard flow — it doesn't fork from it. Same commands, same destination, just two extra pauses to confirm no broken state ships.

# §0 prep (once per host, idempotent)
source ~/hero/cfg/init.sh
lab user init --root ~/hero     # absorb any HeroConfig migration drift
lab skills sync                  # latest hero_skills + ~/.claude/skills/

# §1 per-repo sweep
cd lhumina_code/<repo>
git pull --ff-only origin development     # manual pull, NOT lab build -u (skip auto-push)
git checkout -b development_mik           # local-only feature branch

# write service.toml + wire service_base!() per crate
# - service_base!() macro at module scope
# - validate_service_toml(SERVICE_TOML) first in main()
# - handle_info_flag(SERVICE_TOML) before any clap parsing
# - daemons: print_startup_banner + prepare_sockets
# - daemons: add /.well-known/heroservice.json route
# - daemons: [[env]] PATH_ROOT default="~/hero" in service.toml

lab build --release --install --workspace --policy-mode warn   # build + install
lab infocheck                                                  # MUST return 0 findings

# daemons only:
lab service <svc> --install --start                            # smoke

cargo test --workspace --release --no-fail-fast                # quality bar; document pre-existing fails

# === CHECKPOINT 1: user review before squash ===
# show D-10 5/5 evidence, await user OK

git checkout development && git pull --ff-only origin development
git merge --squash development_mik
git commit -m "$(cat <<'EOF'
chore(<repo>): D-10 closure — <summary>

<body with D-10 5/5 evidence>

Refs: https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102
EOF
)"
# NOTE: do NOT use -s flag (auto-injects email); manual `Signed-off-by: mik-tf` trailer if needed

git push origin development      # direct push, no PR
git branch -D development_mik    # local cleanup; remote was never created since -u was skipped

# === CHECKPOINT 2: update tracker ===
# PATCH #102#33220 with new row + D-10 5/5 evidence

Release pipeline (linux-x86_64 binaries)

Once a repo is clean (D-10 acceptance), publish via:

lab build --upload --release --platforms linux-x86_64 --workspace

Uploads to a rolling lab-latest Forgejo release on the repo. Other machines fetch via lab build --download --install <repo>.

Methodology notes

  • lab infocheck measures local install state, not just source. If $PATH_ROOT/bin/<name> exists, it runs the installed binary's --info --json. So a repo can read "dirty" on a stale machine and "clean" on a fresh one. Always lab build --release --install before reading the inventory for an authoritative count.
  • lab build exits 0 even when targets fail. Parse ~/hero/var/build_report.md ("targets: N built, M failed") for the truth, not the exit code.
  • lab build -u auto-pushes the working branch. Under the no-PR workflow used here, skip -u and pull manually. Kristof's parallel agent fleet uses the -u path with auto-push; that's also fine — different gate position, same destination.
  • lab build --repair only fires on cargo compile failures, not on pre-build --info-gate failures. Wholesale-shape repos (no service_base!() wiring) must be hand-bootstrapped or driven via lab agent; the build repair loop won't bootstrap them.
  • hero_proc#102 — D-10 tracker (parent; 88K-char history comment at #33220).
  • hero_skills#258 — canonical pattern question for non-service binaries in lib workspaces (hero_lib, hero_rpc).
  • hero_lib#139 — original demo/util-binary cleanup latent.
## Why this issue [hero_proc#102](https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102) tracks D-10 closure (every demo-set repo passes `lab build` + `lab infocheck` cleanly). The per-session "manual sweep" playbook we refined across s101–s107 has been superseded by the `lab build --release --install --workspace` + `lab infocheck` driven flow. This issue is the canonical runbook for closing the remaining work under the new tooling. ## Current state (2026-05-17 session, after live `lab infocheck` inventory + 6 rebuild probes) - **17/35 effective clean** — 11 confirmed at inventory + 6 stale-install false positives that flipped clean after `lab build --release --install --workspace` (no source changes). - **~15 wholesale-shape repos remain** as real D-10 work (no `service_base!()`, no `service.toml` on disk; need full canonical-base bootstrap). - **2 repos blocked on canonical pattern question** for non-service binaries in lib workspaces — see [hero_skills#258](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/258). - **1 special case** — `mycelium_network` is not a Rust workspace `lab infocheck` can audit; out of scope. The 17 effective-clean break down: T1 = 6/6, T2 from prior manual sweeps = 6/6 (hero_slides, hero_books, hero_biz, hero_collab, hero_office, hero_foundry), plus the 6 stale-install confirmations = hero_compute, hero_proxy, hero_codescalers, hero_whiteboard, hero_memory, hero_embedder. Live tracker [#102#33220](https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102#issuecomment-33220) carries the full per-session history. ## The 15 remaining wholesale-shape repos (D-10 real work) Source state: 0 of N main.rs files have `service_base!()`, no `service.toml` on disk. Each needs full canonical-base bootstrap. - [x] `hero_os` — s122 [`70f627d`](https://forge.ourworld.tf/lhumina_code/hero_os/commit/70f627d) (5 binaries: cli + server + admin + app + web; service_base!() macro wholesale + lesson #19 forward_env_if_set on both spawned ActionSpecs + PATH_ROOT [[env]] block added to server+admin service.tomls; smoke 6/6 met) - [x] `hero_osis` — s123 [`7d8b3a2`](https://forge.ourworld.tf/lhumina_code/hero_osis/commit/7d8b3a2) - [x] `hero_livekit` — s114 [`01e48e7`](https://forge.ourworld.tf/lhumina_code/hero_livekit/commit/01e48e7) (4 binaries: server + admin + lk-backend + hero_do_hero_livekit) - [x] `hero_logic` — s110 ba74b2b - [x] `hero_indexer` — s109 e60eca8 - [x] `hero_voice` — s119 [`f8503b3`](https://forge.ourworld.tf/lhumina_code/hero_voice/commit/f8503b3) (4 binaries: cli + server + admin + voiced; first end-to-end validation of transcribe + TTS branches of herolib_ai v0.6.0 API + paired `src/bin/hero_voice.rs → src/main.rs` restructure, 5/5 met) - [x] `hero_agent` — s120 [`a141d48`](https://forge.ourworld.tf/lhumina_code/hero_agent/commit/a141d48) (3 binaries canonical + herolib_ai v0.6.0 transcribe-surface migration — last AI-rename ripple absorbed, 5/5 met) - [x] `hero_code_indexer` — s111 [95ccdad](https://forge.ourworld.tf/lhumina_code/hero_code_indexer/commit/95ccdad) - [x] `hero_lib_rhai` — s121 [`b4d138a`](https://forge.ourworld.tf/lhumina_code/hero_lib_rhai/commit/b4d138a) - [x] `hero_matrixchat` — s115 [`635619b`](https://forge.ourworld.tf/lhumina_code/hero_matrixchat/commit/635619b) (3 binaries canonical + web.sock→admin.sock pair, 5/5 met) - [x] `hero_planner` — s116 [`bdfbfb4`](https://forge.ourworld.tf/lhumina_code/hero_planner/commit/bdfbfb4) - [x] `hero_researcher` — s118 [`ee3431b`](https://forge.ourworld.tf/lhumina_code/hero_researcher/commit/ee3431b) (2 binaries: cli + server; herolib_ai v0.6.0 migration paired + web.sock→admin.sock rename, 5/5 met) - [x] `hero_wallet` — s112 [`42cb6393`](https://forge.ourworld.tf/lhumina_code/hero_wallet/commit/42cb6393) - [x] `hero_webbuilder` — s117 [`5f726af`](https://forge.ourworld.tf/lhumina_code/hero_webbuilder/commit/5f726af) (4 binaries: cli + server + admin + web; herolib_ai v0.6.0 migration paired with D-10 sweep, 5/5 met) - [x] `hero_website_framework` — s113 [`6c88a34`](https://forge.ourworld.tf/lhumina_code/hero_website_framework/commit/6c88a34) ## Per-repo runbook (safe-by-default variant) This variant adds two checkpoints to the standard flow — it doesn't fork from it. Same commands, same destination, just two extra pauses to confirm no broken state ships. ```bash # §0 prep (once per host, idempotent) source ~/hero/cfg/init.sh lab user init --root ~/hero # absorb any HeroConfig migration drift lab skills sync # latest hero_skills + ~/.claude/skills/ # §1 per-repo sweep cd lhumina_code/<repo> git pull --ff-only origin development # manual pull, NOT lab build -u (skip auto-push) git checkout -b development_mik # local-only feature branch # write service.toml + wire service_base!() per crate # - service_base!() macro at module scope # - validate_service_toml(SERVICE_TOML) first in main() # - handle_info_flag(SERVICE_TOML) before any clap parsing # - daemons: print_startup_banner + prepare_sockets # - daemons: add /.well-known/heroservice.json route # - daemons: [[env]] PATH_ROOT default="~/hero" in service.toml lab build --release --install --workspace --policy-mode warn # build + install lab infocheck # MUST return 0 findings # daemons only: lab service <svc> --install --start # smoke cargo test --workspace --release --no-fail-fast # quality bar; document pre-existing fails # === CHECKPOINT 1: user review before squash === # show D-10 5/5 evidence, await user OK git checkout development && git pull --ff-only origin development git merge --squash development_mik git commit -m "$(cat <<'EOF' chore(<repo>): D-10 closure — <summary> <body with D-10 5/5 evidence> Refs: https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102 EOF )" # NOTE: do NOT use -s flag (auto-injects email); manual `Signed-off-by: mik-tf` trailer if needed git push origin development # direct push, no PR git branch -D development_mik # local cleanup; remote was never created since -u was skipped # === CHECKPOINT 2: update tracker === # PATCH #102#33220 with new row + D-10 5/5 evidence ``` ## Release pipeline (linux-x86_64 binaries) Once a repo is clean (D-10 acceptance), publish via: ```bash lab build --upload --release --platforms linux-x86_64 --workspace ``` Uploads to a rolling `lab-latest` Forgejo release on the repo. Other machines fetch via `lab build --download --install <repo>`. ## Methodology notes - **`lab infocheck` measures local install state, not just source.** If `$PATH_ROOT/bin/<name>` exists, it runs the installed binary's `--info --json`. So a repo can read "dirty" on a stale machine and "clean" on a fresh one. Always `lab build --release --install` before reading the inventory for an authoritative count. - **`lab build` exits 0 even when targets fail.** Parse `~/hero/var/build_report.md` ("targets: N built, M failed") for the truth, not the exit code. - **`lab build -u` auto-pushes the working branch.** Under the no-PR workflow used here, skip `-u` and pull manually. Kristof's parallel agent fleet uses the `-u` path with auto-push; that's also fine — different gate position, same destination. - **`lab build --repair` only fires on cargo compile failures**, not on pre-build `--info`-gate failures. Wholesale-shape repos (no `service_base!()` wiring) must be hand-bootstrapped or driven via `lab agent`; the build repair loop won't bootstrap them. ## Related - [hero_proc#102](https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102) — D-10 tracker (parent; 88K-char history comment at [#33220](https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102#issuecomment-33220)). - [hero_skills#258](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/258) — canonical pattern question for non-service binaries in lib workspaces (hero_lib, hero_rpc). - [hero_lib#139](https://forge.ourworld.tf/lhumina_code/hero_lib/issues/139) — original demo/util-binary cleanup latent.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_proc#105
No description provided.