Commit graph

988 commits

Author SHA1 Message Date
johba
59b4cafcfc fix: log Claude output diagnostics on no_push failure
Some checks failed
ci/woodpecker/push/ci Pipeline failed
Save agent_run output to agent-run-last.json. On no_push, log the
result text, turn count, and cost. Save full output to
no-push-{issue}-{ts}.json for later analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:03:17 +00:00
06da075505 Merge pull request 'fix: fix: DELETE /issues/{n}/labels/{id} uses label name instead of numeric ID (silent no-op) (#41)' (#46) from fix/issue-41 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 21:50:12 +00:00
johba
cb39cbcace chore: gitignore smoke-init.yml to prevent agents recreating it
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:49:30 +00:00
johba
f3e37b1711 chore: permanently remove smoke-init.yml
Some checks failed
ci/woodpecker/push/ci Pipeline failed
This keeps getting re-added by agents. It spins up a full Forgejo
inside CI and never finishes within the timeout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:49:03 +00:00
Agent
76a4d42a42 fix: fix: DELETE /issues/{n}/labels/{id} uses label name instead of numeric ID (silent no-op) (#41)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/push/smoke-init removed
ci/woodpecker/pr/smoke-init removed
2026-03-28 21:44:11 +00:00
johba
b30252d32b feat: llama agent runs as dev-qwen Forgejo identity
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
FORGE_TOKEN_OVERRIDE in compose env sets a per-agent token.
PRs, issue claims, and comments from the llama agent now show
dev-qwen instead of dev-bot.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:00:24 +00:00
65ccfd730e Merge pull request 'fix: fix: install age and sops in agents Dockerfile (#30)' (#34) from fix/issue-30 into main
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
2026-03-28 20:40:13 +00:00
Agent
0ccecf6ae5 fix: restore tea CLI and add sops checksum verification (#30)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/pr/smoke-init removed
2026-03-28 19:58:50 +00:00
Claude
120b3d3a4b ci: remove docker/** from smoke-init path trigger
The smoke-init pipeline tests `disinto init` against a Forgejo
instance — it does not build or use the agents Docker image.
Changes under docker/ should not trigger this workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:58:50 +00:00
Claude
499f459c19 ci: retrigger smoke-init (Docker socket timeout — pre-existing infra issue)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:58:04 +00:00
Claude
892970f06d ci: retrigger smoke-init (Docker socket timeout on previous run)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:58:04 +00:00
Claude
8814905ede fix: install age and sops in agents Dockerfile (#30)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:58:04 +00:00
8f891e95de Merge pull request 'fix: fix: use Forgejo assignee as issue lock to prevent concurrent claims (#38)' (#40) from fix/issue-38 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 19:44:16 +00:00
Agent
4c08b7840e fix: fix: use Forgejo assignee as issue lock to prevent concurrent claims (#38)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
2026-03-28 19:31:27 +00:00
98a71f9192 Merge pull request 'fix: feat: disinto secrets migrate — encrypt existing plaintext .env (#33)' (#37) from fix/issue-33 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 19:19:19 +00:00
d231d21a8c Merge pull request 'fix: feat: disinto secrets add — store individual encrypted secrets (#31)' (#35) from fix/issue-31 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 19:14:02 +00:00
Claude
ec58cb1745 fix: suppress terminal echo for secret input and guard against overwrites
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
- Use `read -rs` to hide typed secret value from terminal
- Prompt for confirmation before overwriting an existing secret

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:10:55 +00:00
Claude
1b52761336 fix: feat: disinto secrets add — store individual encrypted secrets (#31)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 19:10:55 +00:00
Agent
e0fe5c80ea fix: feat: disinto secrets migrate — encrypt existing plaintext .env (#33)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
2026-03-28 19:10:46 +00:00
d70301766c Merge pull request 'fix: fix: mount age key directory into agents containers (#32)' (#36) from fix/issue-32 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 19:04:01 +00:00
johba
e351e02f60 chore: remove smoke-init CI workflow
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
smoke-init spins up a full Forgejo instance inside CI and never
finishes within the 5-minute timeout. It blocks all PRs.

Remove it entirely until it can be optimized to run fast enough.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 18:58:56 +00:00
Agent
3d84390a54 fix: fix: mount age key directory into agents containers (#32)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/push/smoke-init removed
ci/woodpecker/pr/smoke-init removed
2026-03-28 18:53:35 +00:00
johba
6b0e9b5f4d feat: add entrypoint for llama dev-agent container (#29)
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Simple while-true loop that runs dev-poll with llama backend env vars.
No cron, no guard files, no activation state — just polls and spawns.
Repo auto-cloned on first start.

To be used with a separate agents-llama compose service that sets
ANTHROPIC_BASE_URL to the llama-server address.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:33:09 +00:00
e6b57dc9f1 fix: fix: install networkx in agents container for build-graph.py (#14) (#28)
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Fixes #14

## Changes

Co-authored-by: Claude <noreply@anthropic.com>
Reviewed-on: #28
Co-authored-by: dev-bot <dev-bot@disinto.local>
Co-committed-by: dev-bot <dev-bot@disinto.local>
2026-03-28 17:12:27 +00:00
2c5f495987 Merge pull request 'fix: fix: remove PROMPT.md files — formulas are the source of truth (#12)' (#27) from fix/issue-12 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 16:46:16 +00:00
Claude
aa73ff88c4 fix: remove PROMPT.md files — formulas are the source of truth (#12)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
- Delete gardener/PROMPT.md (dust-vs-ore rules already in run-gardener.toml)
- Delete supervisor/PROMPT.md (content covered by run-supervisor.toml;
  migrate unique "Learning" section into formula's journal step)
- Delete vault/PROMPT.md and create formulas/run-vault.toml as the
  source-of-truth formula for vault action classification/routing
- Update supervisor/supervisor-poll.sh to read from formula instead of PROMPT.md
- Update vault/vault-agent.sh to read from formula instead of PROMPT.md
- Update supervisor/AGENTS.md, vault/AGENTS.md, README.md references

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 16:40:21 +00:00
johba
3ce6354f4f fix: add FORGE_URL and PROJECT_REPO_ROOT to crontab env template
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Cron does not inherit compose env vars. Without these, dev-poll fails
with cd: /home/johba/disinto: No such file or directory (host path
instead of container path).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 16:30:43 +00:00
johba
c1939fbb9a chore: delete obsolete skill/ folder — replaced by disinto-factory/
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
The old skill/ reflects tmux-based pre-containerization architecture.
disinto-factory/ is the current skill with Docker Compose setup.

Closes #16

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:33:48 +00:00
7fd61e9d0e Merge pull request 'fix: fix: smoke-init should only run on pull_request events, not push (#21)' (#22) from fix/issue-21 into main
Some checks are pending
ci/woodpecker/push/ci Pipeline is pending
ci/woodpecker/push/smoke-init Pipeline is pending
Reviewed-on: #22
2026-03-28 15:32:41 +00:00
Claude
79ae7f8690 fix: fix: smoke-init should only run on pull_request events, not push (#21)
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/pr/smoke-init Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:32:34 +00:00
johba
55406b1e3d chore: delete unused gardener/recipes — formulas are the source of truth
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
These 4 recipe files (cascade-rebase, chicken-egg-ci, flaky-test,
shellcheck-violations) are never referenced by any script.
The gardener uses formulas/run-gardener.toml.

Closes #23

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 15:31:12 +00:00
645cf82327 Merge pull request 'fix: fix: review-poll.sh still uses tmux for session cleanup and injection (#11)' (#18) from fix/issue-11 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 15:14:01 +00:00
Claude
d485d5e005 fix: remove unused PR_BRANCH variable after inject function removal
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/push/smoke-init skipped (not init-related)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:43:51 +00:00
Claude
42a5a4ef85 fix: review-poll.sh still uses tmux for session cleanup and injection (#11)
Replace tmux session discovery with .sid file globbing for stale session
cleanup and re-review triggering. Remove inject_review_into_dev_session
(dead code — both review and dev sessions now use SDK agent_run).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:43:51 +00:00
johba
8c368c632e feat: set 5-minute pipeline timeout after WP repo activation
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Prevents smoke-init and other heavy CI steps from hanging for 40+ min.
Applied automatically during disinto init.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:41:17 +00:00
johba
44b180b783 fix: remove lib/env.sh from smoke-init path filter
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
env.sh changes don't need a full Forgejo init smoke test.
Prevents 40-minute CI hangs on env fixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:38:35 +00:00
johba
80811498e4 fix: local keyword outside function in env.sh
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:59:07 +00:00
johba
d82d80cabb fix: preserve FORGE_URL when sourcing .env inside container
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/push/smoke-init Pipeline failed
source .env clobbers FORGE_URL from http://forgejo:3000 (Docker DNS)
to http://localhost:3000 (unreachable inside container). Save and
restore FORGE_URL around the source.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:58:46 +00:00
johba
a80bdde5e4 fix: cron polls get no FORGE_TOKEN — env.sh skipped .env in container
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Root cause: env.sh skipped sourcing .env when DISINTO_CONTAINER=1,
assuming compose injects all env vars. But cron jobs do NOT inherit
compose env vars — they only get crontab-level variables.

Result: FORGE_TOKEN was empty in every cron poll. API calls returned
nothing, polls silently found "no open PRs" and exited.

Fix: always source .env regardless of DISINTO_CONTAINER. Compose env
vars (FORGE_URL) are set in the crontab env and take precedence.
Entrypoint also adds FORGE_URL to crontab env vars.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:43:17 +00:00
47d22e014b Merge pull request 'fix: Migrate planner, predictor, supervisor to SDK (#6)' (#17) from fix/issue-6 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 13:32:18 +00:00
Claude
ab5f96dc96 fix: guard cd in formula_worktree_setup with || return (SC2164)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:16:29 +00:00
Claude
de2e7dc1fb fix: Migrate planner, predictor, supervisor to SDK (#6)
Some checks failed
ci/woodpecker/push/ci Pipeline failed
ci/woodpecker/pr/ci Pipeline failed
Replace tmux-based run_formula_and_monitor() with synchronous agent_run()
from lib/agent-sdk.sh, matching the pattern established in gardener-run.sh.

Key changes per agent:
- Drop agent-session.sh, use agent-sdk.sh (SID_FILE, LOGFILE)
- Remove SESSION_NAME, PHASE_FILE, PHASE_POLL_INTERVAL (tmux/phase artifacts)
- Strip phase protocol from prompt footer (SDK mode needs no phase signals)
- Preserve all prompt composition: context blocks, memory, journal, preflight

Shared helpers added to lib/formula-session.sh:
- build_sdk_prompt_footer(): build_prompt_footer minus phase protocol
- formula_worktree_setup(): fetch + cleanup + create worktree + EXIT trap

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:06:34 +00:00
johba
8f389d9dab fix: add USER=agent to crontab env (unbound variable in cron)
Some checks are pending
ci/woodpecker/push/ci Pipeline is pending
ci/woodpecker/push/smoke-init Pipeline is pending
env.sh references $USER which is not set in cron environment.
With set -u (pipefail), this causes env.sh to exit before setting
DISINTO_LOG_DIR, resulting in log writes to the read-only mount.

Root cause of silent cron failures since containerized setup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:50:57 +00:00
johba
afeb50fc18 fix: cron env missing DISINTO_CONTAINER=1, logs go to ro mount
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Cron jobs run with minimal environment — no Docker compose env vars.
Without DISINTO_CONTAINER=1, env.sh falls back to FACTORY_ROOT for
log paths, which is the read-only disinto mount. Polls silently fail.

Fix: set DISINTO_CONTAINER=1 as crontab environment variable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:42:34 +00:00
johba
a054e0791d fix: cron entries log to cron.log instead of /dev/null
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/smoke-init Pipeline failed
Cron poll errors were silently swallowed, making it impossible to
diagnose why agents stopped picking up issues. Now logs to
/home/agent/data/logs/cron.log.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:37:50 +00:00
74d9b328e7 Merge pull request 'fix: Migrate action-agent.sh to SDK + shared libraries (#5)' (#13) from fix/issue-5 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
2026-03-28 11:25:53 +00:00
johba
0762ab73ff fix: review-poll.sh writes log to read-only mount
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
LOGFILE pointed to SCRIPT_DIR (inside the ro disinto mount).
Use DISINTO_LOG_DIR which points to writable /home/agent/data/logs/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:19:24 +00:00
Claude
6f64013fc6 fix: Migrate action-agent.sh to SDK + shared libraries (#5)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
Rewrite action-agent from tmux session + phase-handler pattern to
synchronous SDK pattern (agent_run via claude -p). Uses shared libraries:
- agent-sdk.sh for one-shot Claude invocation
- issue-lifecycle.sh for issue_check_deps/issue_close/issue_block
- pr-lifecycle.sh for pr_create/pr_walk_to_merge
- worktree.sh for worktree_create/worktree_cleanup

Add default callback stubs to phase-handler.sh (cleanup_worktree,
cleanup_labels) so it is self-contained now that action-agent.sh
no longer sources it. Update agent-smoke.sh accordingly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:15:10 +00:00
Claude
83ab2930e6 fix: Migrate action-agent.sh to SDK + shared libraries (#5)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:15:10 +00:00
johba
02dd03eaaf chore: remove BOOTSTRAP.md, slim CLAUDE.md
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
BOOTSTRAP.md is superseded by the disinto-factory skill (SKILL.md).
CLAUDE.md now just points to AGENTS.md and the skill.
Updated AGENTS.md reference accordingly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 11:14:42 +00:00