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

Closed
opened 2026-05-17 22:01:52 +00:00 by mik-tf · 1 comment
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-19 — s124 close)

  • 34/35 effective clean — all wholesale-shape D-10 sweeps DONE (s109–s123) + hero_lib + hero_rpc closed at s124 via D-11 decision on hero_skills#258.
  • 0 remainingmycelium_network D-10 closure landed: PR #48 MERGED at 2026-05-19T18:05:19Z (merge commit 9abc843, base development_crate_layout). 35/35 effective clean (100%) — hero_proc#102 D-10 arc CLOSED across all 35 repos in D-07 scope. See #102#33220 Session 125 update for full smoke + cargo test detail.
  • Open cosmetichero_skills#265 — lab infocheck false-positive on lib+bin shape (src/main.rs:0 not-existing finding). Runtime --info --json check is the operational gate; per s123 hero_osis_server precedent + s124 hero_lib + hero_rpc, the false-positive is accepted as cosmetic, repos count toward "effective clean" when runtime gate is green.

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

Non-service bin lib-workspaces (D-11 pattern)

hero_lib + hero_rpc host helper / demo / codegen bins in lib workspaces, not long-running services. Canonical pattern locked at D-11 (s124) per hero_skills#258: minimal service.toml with kind = "cmdline" (or cli / server for tools/examples that shape that way) + skip = true + service_base!() macro (canonical) or inline SERVICE_TOML/BUILD_NR consts (Lesson #20 for src/bin/<name>.rs). Runtime --info --json is the gate; lab infocheck false-positives on lib+bin shape are accepted as cosmetic per #265.

  • hero_lib — s124 33b5a3fb (3 crates wired: ai_archive + clients + web; 4 bins total. ai_test/ai_direct_test was already clean. lab build 4/4 built; --info JSON 4/4 canonical; lab infocheck 2/4 clean + 2/4 #265-class cosmetic FP)
  • hero_rpc — s124 b1c8621 (5 crates wired: crates/generator + crates/hero_lifecycle + example/petstore_client + example/petstore_server + example/recipe_server. lab build 5/5 built; --info JSON 5/5 canonical; lab infocheck 3/5 clean + 2/5 #265-class cosmetic FP. Bonus: hero_lifecycle bin renamed from mainhero_lifecycle via explicit [[bin]] block in Cargo.toml)

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). Resolved s124 → D-11.
  • D-11 — canonical pattern for non-service bins in lib workspaces (locked s124).
  • hero_skills#265 — lab infocheck lib+bin source-walker false-positive (cosmetic; runtime --info gate authoritative).
  • 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-19 — s124 close) - **34/35 effective clean** — all wholesale-shape D-10 sweeps DONE (s109–s123) + `hero_lib` + `hero_rpc` closed at s124 via D-11 decision on [hero_skills#258](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/258). - **0 remaining** — `mycelium_network` D-10 closure landed: **[PR #48 MERGED](https://forge.ourworld.tf/geomind_code/mycelium_network/pulls/48)** at 2026-05-19T18:05:19Z (merge commit [`9abc843`](https://forge.ourworld.tf/geomind_code/mycelium_network/commit/9abc843), base `development_crate_layout`). **35/35 effective clean (100%) — hero_proc#102 D-10 arc CLOSED across all 35 repos in D-07 scope.** See [#102#33220](https://forge.ourworld.tf/lhumina_code/hero_proc/issues/102#issuecomment-33220) Session 125 update for full smoke + cargo test detail. - **Open cosmetic** — [hero_skills#265](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/265) — lab infocheck false-positive on lib+bin shape (`src/main.rs:0` not-existing finding). Runtime `--info --json` check is the operational gate; per s123 hero_osis_server precedent + s124 hero_lib + hero_rpc, the false-positive is accepted as cosmetic, repos count toward "effective clean" when runtime gate is green. 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) ## Non-service bin lib-workspaces (D-11 pattern) `hero_lib` + `hero_rpc` host helper / demo / codegen bins in lib workspaces, not long-running services. Canonical pattern locked at D-11 (s124) per [hero_skills#258](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/258): minimal `service.toml` with `kind = "cmdline"` (or `cli` / `server` for tools/examples that shape that way) + `skip = true` + `service_base!()` macro (canonical) or inline `SERVICE_TOML/BUILD_NR` consts (Lesson #20 for `src/bin/<name>.rs`). Runtime `--info --json` is the gate; `lab infocheck` false-positives on lib+bin shape are accepted as cosmetic per #265. - [x] `hero_lib` — s124 [`33b5a3fb`](https://forge.ourworld.tf/lhumina_code/hero_lib/commit/33b5a3fb) (3 crates wired: `ai_archive` + `clients` + `web`; 4 bins total. `ai_test/ai_direct_test` was already clean. lab build 4/4 built; --info JSON 4/4 canonical; lab infocheck 2/4 clean + 2/4 #265-class cosmetic FP) - [x] `hero_rpc` — s124 [`b1c8621`](https://forge.ourworld.tf/lhumina_code/hero_rpc/commit/b1c8621) (5 crates wired: `crates/generator` + `crates/hero_lifecycle` + `example/petstore_client` + `example/petstore_server` + `example/recipe_server`. lab build 5/5 built; --info JSON 5/5 canonical; lab infocheck 3/5 clean + 2/5 #265-class cosmetic FP. Bonus: hero_lifecycle bin renamed from `main` → `hero_lifecycle` via explicit `[[bin]]` block in Cargo.toml) ## 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). Resolved s124 → D-11. - D-11 — canonical pattern for non-service bins in lib workspaces (locked s124). - [hero_skills#265](https://forge.ourworld.tf/lhumina_code/hero_skills/issues/265) — lab infocheck lib+bin source-walker false-positive (cosmetic; runtime --info gate authoritative). - [hero_lib#139](https://forge.ourworld.tf/lhumina_code/hero_lib/issues/139) — original demo/util-binary cleanup latent.
Member

Closing as obsolete — own body declares the D-10 arc complete.

The issue body's "Current state (2026-05-19 — s124 close)" section reads:

35/35 effective clean (100%) — hero_proc#102 D-10 arc CLOSED across all 35 repos in D-07 scope.

The runbook this issue was meant to track has reached its terminal state. The remaining live tracker at #102#33220 carries the per-session history.

Closing as obsolete.

Closing as obsolete — own body declares the D-10 arc complete. The issue body's "Current state (2026-05-19 — s124 close)" section reads: > **35/35 effective clean (100%) — hero_proc#102 D-10 arc CLOSED across all 35 repos in D-07 scope.** The runbook this issue was meant to track has reached its terminal state. The remaining live tracker at #102#33220 carries the per-session history. Closing as obsolete.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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.