Skip to content

Stop building the standalone constructd binary#399

Merged
edwin-zvs merged 1 commit into
mainfrom
drop-constructd-binary
Jun 8, 2026
Merged

Stop building the standalone constructd binary#399
edwin-zvs merged 1 commit into
mainfrom
drop-constructd-binary

Conversation

@edwin-zvs

Copy link
Copy Markdown
Contributor

What

Drops the standalone constructd binary. Since #396 (construct daemon run) and #398 (TUI auto-start), constructd was just a thin alias with no unique role. The daemon crate (agentd) is now library-only and the daemon ships solely inside construct.

How

  • crates/daemon: removed the [[bin]] constructd target and deleted the main.rs shim — lib-only crate now.
  • e2e harness (crates/e2e/src/lib.rs): spawns construct daemon run and copies construct as the relocatable daemon binary (instead of constructd run).
  • scripts (test_agentd.sh, smoke.sh): launch the daemon via construct daemon run.
  • release.yml + install.sh: dropped constructd from BINS (and -p agentd from the release build). The release tarball keeps its historical constructd-<target> asset name — already-released install.sh / construct upgrade builds fetch that exact name, so renaming it would break the download URL.
  • Docs/comments/spec updated; specs/0026 now states there is no standalone daemon binary.

⚠️ One-time upgrade caveat

construct upgrade runs the install.sh baked into the already-installed binary, which copies every name in its BINS — including constructd — from the new tarball and aborts if one is missing (install.sh is all-or-nothing). So upgrading from a pre-this-change version into this version via construct upgrade will fail with "binary 'constructd' missing from archive".

Workaround for that single hop: re-run the install one-liner (which uses the new, constructd-less install.sh). New installs and all subsequent upgrades are unaffected. I kept the tarball asset name as constructd-<target>.tar.gz specifically so the download still resolves; only the in-archive binary set changed.

If you'd rather avoid even that one-hop break, the alternative is a transition release that ships constructd as a copy for one version — happy to do that instead; flagging so it's a conscious choice.

Verification

  • cargo build --workspace → produces construct, construct-mcp, 5 construct-adapter-*, and no constructd
  • cargo test -p agentd → 66 passed ✓
  • cargo test -p agentd-e2e --test restart → 3 passed, incl. restart_reloads_updated_binary (swaps the relocatable construct binary and verifies the daemon re-execs it) ✓

🤖 Generated with Claude Code

The daemon has had no unique role since #396/#398: `construct daemon run`
runs it and the TUI auto-starts one. `constructd` was just a thin alias,
so drop it — the daemon crate (`agentd`) is now library-only and the
daemon ships solely inside `construct`.

- crates/daemon: remove the `[[bin]] constructd` target and delete the
  `main.rs` shim; the crate is lib-only now.
- e2e harness: spawn `construct daemon run` (and copy `construct` as the
  relocatable daemon binary) instead of `constructd run`.
- scripts/test_agentd.sh, scripts/smoke.sh: launch via `construct daemon run`.
- release.yml + install.sh: drop `constructd` from BINS (and `-p agentd`
  from the release build). The release tarball KEEPS its historical
  `constructd-<target>` asset name — already-released install.sh /
  `construct upgrade` builds fetch that exact name, so renaming it would
  break the download URL.
- Docs/spec/comments updated; spec 0026 records that there is no standalone
  daemon binary and notes the one-time upgrade caveat below.

Upgrade caveat (one-time): an `install.sh` baked into an *older* binary
lists `constructd` in its `BINS` and aborts when it's absent from the new
tarball, so `construct upgrade` across this single version hop fails —
re-run the install one-liner instead. New installs and subsequent upgrades
are unaffected.

Verified: `cargo build --workspace` produces no `constructd`;
`cargo test -p agentd` (66) and the e2e restart suite (3, incl.
`restart_reloads_updated_binary`) pass with the daemon spawned as
`construct daemon run`.
@edwin-zvs
edwin-zvs merged commit 3343ab2 into main Jun 8, 2026
1 check passed
@edwin-zvs
edwin-zvs deleted the drop-constructd-binary branch June 8, 2026 02:11
@edwin-zvs edwin-zvs mentioned this pull request Jun 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant