mirror of
https://github.com/nearai/ironclaw.git
synced 2026-09-02 23:56:24 +08:00
* fix(docker): install curl so orchestrator healthchecks can run Forward-port of #7303 from release/1.1.0-rc.1 onto this release branch. The runtime stage installs only ca-certificates, postgresql-client and sqlite3 on top of debian:bookworm-slim, which ships no HTTP client. Hosted orchestrators probe the container with an in-container HTTP healthcheck -- the CrabShack worker template runs test: ["CMD-SHELL", "curl -fsS http://localhost:3000/ || exit 1"] so the probe could never execute. The container is never marked healthy, the deploy times out, and the instance is moved to `error` -- while the listener is serving 200s the entire time. The regression test is scoped to the runtime stage rather than the whole file: this branch's `railway_cli` build stage already installs curl for its own download, so the upstream whole-file substring assertion would pass here while the shipped image still had no HTTP client. Verified red before the Dockerfile change, green after. Also ports the other half of #7303's planner fix: `_root_test_partitions` globbed only `tests/reborn_*.rs`, so `tests/dockerfile_runtime_home.rs` (and `trace_format`, `trace_llm_tests`, the `e2e_trace_runtime_policy_*` pair) hit the planner's fail-closed arm -- touching this test in a PR failed `Detect Reborn test scope`. The inventory now covers every root test target cargo auto-discovers. This branch's separate decision to keep `Dockerfile`/`.dockerignore` as static control paths (#7084) is left intact. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(ci): align the root-partition runner with the planner inventory Addresses both review findings on #7555. Codex P1 — the planner and `scripts/ci/run-reborn-root-partition.sh` both index a sorted list of root tests and take `index % partitions`, so the two inventories have to match exactly. Widening only the planner shifted every assignment: the planner scheduled `dockerfile_runtime_home` into partition 0 while the runner, still globbing `reborn_*.rs`, executed a different set and never ran it. The job passed anyway. The runner now discovers the same `tests/*.rs` set cargo auto-discovers. The new regression test drives the real script with a stubbed `cargo` and `timeout` and compares what it executes, per partition, against `_root_test_partitions()` — behavior, not script text. Verified it fails when the runner's glob is narrowed back. IronLoop medium — `Dockerfile` and `.dockerignore` were static control paths (#7084) on the premise that no Reborn Rust lane reads the image definition. That premise is false: `tests/dockerfile_runtime_home.rs` asserts the runtime packages, the entrypoint's behavior, and the seed configs. `platform-and-compat.yml` builds the image but never runs those assertions, so a Dockerfile-only PR that dropped `curl` would have passed exactly as 1.1.0 did. Those paths, plus the two seed configs the same test reads, now schedule that test's partition. The routing set is enumerated rather than globbed as `docker/**`: `config.production.toml` and `process-sandbox-entrypoint.sh` have no owning lane and must keep failing closed, which `test_sibling_container_inputs_still_require_a_decision` pins. `docker/reborn/entrypoint.sh` keeps its earlier static-control decision — it is matched before this branch is reached. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>