From a3abf9f37a82f6408dac7b9a863ff108506aa15a Mon Sep 17 00:00:00 2001 From: openhands Date: Wed, 18 Mar 2026 21:20:09 +0000 Subject: [PATCH 1/3] fix: docs: document opinionated design constraints (#30) Co-Authored-By: Claude Sonnet 4.6 --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 4164b63..58c4c83 100644 --- a/README.md +++ b/README.md @@ -165,3 +165,14 @@ disinto/ - **Self-improving** — when Claude fixes something new, the lesson is appended to best-practices for next time - **Project-agnostic** — all project-specific values (repo, paths, CI IDs) come from `.env`, not hardcoded scripts +### Runtime constraints + +Disinto is intentionally opinionated about its own runtime. These are hard constraints, not preferences: + +- **Debian + GNU userland** — all scripts target Debian with standard GNU tools (`bash`, `awk`, `sed`, `date`, `timeout`). No portability shims for macOS or BSD. +- **Shell and binaries only** — disinto itself has no Python, Node.js, or other interpreted runtime dependencies. Every agent is a bash script. If you need a helper, write it in bash or use an existing binary. +- **Few, powerful dependencies** — the only required non-standard tools are `jq`, `curl`, `git`, `tmux`, and `psql`. Adding a new disinto-level dependency requires a strong justification. +- **Node.js and Foundry are target-project dependencies** — if your target repo uses Node or Solidity, install those on the host. They are not part of disinto's core and must not be assumed present in disinto scripts. + +The goal: any Debian machine with the prerequisites listed above can run disinto. Keep it that way. + From 7e008991a71bed3dc58ac0dedadeb3dada042785 Mon Sep 17 00:00:00 2001 From: openhands Date: Wed, 18 Mar 2026 21:24:27 +0000 Subject: [PATCH 2/3] fix: agent-smoke.sh: use [(][)] instead of \(\) for BusyBox grep ERE compat BusyBox grep (Alpine CI) does not treat \( as a literal paren in -E mode, causing inject_formula to appear undefined even though it is defined in lib/agent-session.sh. Using [(][)] is unambiguous in both GNU grep and BusyBox grep. Co-Authored-By: Claude Sonnet 4.6 --- .woodpecker/agent-smoke.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/agent-smoke.sh b/.woodpecker/agent-smoke.sh index d280992..7bdcae3 100644 --- a/.woodpecker/agent-smoke.sh +++ b/.woodpecker/agent-smoke.sh @@ -20,7 +20,7 @@ FAILED=0 # Extract function names defined in a bash script (top-level or indented). get_fns() { local f="$1" - grep -Eo '[a-zA-Z_][a-zA-Z0-9_]+[[:space:]]*\(\)' "$f" 2>/dev/null \ + grep -Eo '[a-zA-Z_][a-zA-Z0-9_]+[[:space:]]*[(][)]' "$f" 2>/dev/null \ | sed 's/[[:space:]]*()//' | sort -u || true } From d38a797aa9a88316e5d271a8cf7afd17d62468d3 Mon Sep 17 00:00:00 2001 From: openhands Date: Wed, 18 Mar 2026 21:29:21 +0000 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20correct=20runtime=20constraints=20?= =?UTF-8?q?=E2=80=94=20python3=20is=20a=20core=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python3 is used directly by dev/dev-poll.sh (JSON CI-fix tracker), lib/load-project.sh (TOML parsing via tomllib), and gardener/gardener-poll.sh (recipe-matching engine). Add it to the dependency list and rephrase the runtime constraint to reflect what is actually true. Co-Authored-By: Claude Sonnet 4.6 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 58c4c83..caa1dbe 100644 --- a/README.md +++ b/README.md @@ -170,8 +170,8 @@ disinto/ Disinto is intentionally opinionated about its own runtime. These are hard constraints, not preferences: - **Debian + GNU userland** — all scripts target Debian with standard GNU tools (`bash`, `awk`, `sed`, `date`, `timeout`). No portability shims for macOS or BSD. -- **Shell and binaries only** — disinto itself has no Python, Node.js, or other interpreted runtime dependencies. Every agent is a bash script. If you need a helper, write it in bash or use an existing binary. -- **Few, powerful dependencies** — the only required non-standard tools are `jq`, `curl`, `git`, `tmux`, and `psql`. Adding a new disinto-level dependency requires a strong justification. +- **Shell + a small set of runtimes** — every agent is a bash script. The only interpreted runtimes used by disinto core are `python3` (TOML parsing in `lib/load-project.sh`, JSON state tracking in `dev/dev-poll.sh`, recipe matching in `gardener/gardener-poll.sh`) and `claude` (the AI CLI). No Ruby, Perl, or other runtimes. Do not add new runtime dependencies without a strong justification. +- **Few, powerful dependencies** — required non-standard tools: `jq`, `curl`, `git`, `tmux`, `psql`, and `python3` (≥ 3.11 for `tomllib`; or install `tomli` for older Pythons). Adding anything beyond this list requires justification. - **Node.js and Foundry are target-project dependencies** — if your target repo uses Node or Solidity, install those on the host. They are not part of disinto's core and must not be assumed present in disinto scripts. The goal: any Debian machine with the prerequisites listed above can run disinto. Keep it that way.