Commit graph

675 commits

Author SHA1 Message Date
johba
e041b20823 Merge pull request 'fix: Push to public mirrors after merge (#614)' (#621) from fix/issue-614 into main 2026-03-23 20:27:23 +01:00
openhands
d3f831f39e fix: Register lib/mirrors.sh in CI smoke test (#614)
Add mirrors.sh to the LIB_FUNS scan and check_script list so the
agent-smoke function resolution test recognizes mirror_push.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:20:59 +00:00
openhands
7bc74caa63 fix: Push to public mirrors after merge (#614)
Add fire-and-forget mirror push support so merges to the primary branch
are automatically pushed to configured public mirrors (GitHub, Codeberg,
etc.). Mirror failures are logged but never block the pipeline.

- lib/mirrors.sh: new shared mirror_push() helper
- lib/load-project.sh: parse [mirrors] TOML section into MIRROR_* env vars
- dev/phase-handler.sh: call mirror_push after do_merge() success
- dev/dev-poll.sh: call mirror_push after try_direct_merge() success
- gardener/gardener-run.sh: call mirror_push after _gardener_merge() success
- bin/disinto: set up mirror remotes during init, add commented mirrors to
  generated TOML
- projects/*.toml.example: show [mirrors] section (commented out)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:19:16 +00:00
johba
a4cbe1e8c6 Merge pull request 'fix: Encrypt secrets at rest with SOPS + age (#613)' (#620) from fix/issue-613 into main 2026-03-23 20:09:02 +01:00
openhands
3e2f8f9623 fix: Address review feedback on SOPS integration (#613)
- Warn on stderr when .env.enc decryption fails instead of silent || true
- Guard ensure_age_key() against empty age-keygen -y output
- Fix stale comment on write_secrets_encrypted()

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 19:04:58 +00:00
openhands
5ccf09b28d fix: Encrypt secrets at rest with SOPS + age (#613)
- lib/env.sh: Two-tier secret loader (SOPS .env.enc > plaintext .env),
  remove ~/.netrc fallback
- bin/disinto: Add age key generation and SOPS encryption during init,
  remove write_netrc(), add `disinto secrets` subcommand (edit/show/migrate),
  add sops+age to preflight warnings
- .env.example: Annotate vars as [SECRET] or [CONFIG]
- .gitignore: Allow .env.enc and .sops.yaml to be committed
- BOOTSTRAP.md: Document SOPS + age setup, key backup, secret management
- AGENTS.md: Update AD-005 and coding conventions for .env.enc

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:58:33 +00:00
johba
28cdec3e7b Merge pull request 'chore: gardener housekeeping' (#617) from chore/gardener-20260323-1805 into main 2026-03-23 19:29:02 +01:00
openhands
d9427ebe78 chore: gardener housekeeping 2026-03-23 2026-03-23 18:05:26 +00:00
johba
a2016db5c3 Merge pull request 'fix: Wire Woodpecker CI to local Forgejo (#612)' (#616) from fix/issue-612 into main 2026-03-23 18:54:48 +01:00
openhands
50dff34b89 fix: Wire Woodpecker CI to local Forgejo (#612)
Add ci_commit_status() and ci_pipeline_number() helpers to
lib/ci-helpers.sh that query Woodpecker directly with a forge API
fallback. Replace all 12 inline forge commit status calls across 6
files with the new helpers.

Add setup_woodpecker() to bin/disinto init that creates a Forgejo
OAuth2 app for Woodpecker and activates the repo.

Document manual Woodpecker+Forgejo setup in BOOTSTRAP.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 17:19:01 +00:00
johba
7de1dca12c Merge pull request 'fix: Replace Codeberg dependency with local Forgejo instance (#611)' (#615) from fix/issue-611 into main 2026-03-23 18:08:59 +01:00
openhands
a66bd91721 fix: Replace Codeberg dependency with local Forgejo instance (#611)
- Add setup_forge() to bin/disinto: provisions Forgejo via Docker,
  creates admin + bot users (dev-bot, review-bot), generates API
  tokens, creates repo, and pushes code — all automated
- Rename env vars: CODEBERG_TOKEN→FORGE_TOKEN, REVIEW_BOT_TOKEN→
  FORGE_REVIEW_TOKEN, CODEBERG_REPO→FORGE_REPO, CODEBERG_API→
  FORGE_API, CODEBERG_WEB→FORGE_WEB, CODEBERG_BOT_USERNAMES→
  FORGE_BOT_USERNAMES (with backwards-compat fallbacks)
- Rename API helpers: codeberg_api()→forge_api(), codeberg_api_all()
  →forge_api_all() (with compat aliases)
- Add forge_url field to project TOML; load-project.sh derives
  FORGE_API/FORGE_WEB from forge_url + repo
- Update parse_repo_slug() to accept any host URL, not just codeberg
- Forgejo data stored under ~/.disinto/forgejo/ (not in factory repo)
- Update all 58 files: agent scripts, formulas, docs, site HTML

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 16:57:12 +00:00
johba
39d30faf45 Merge pull request 'fix: feat: predictor v3 — abstract adversary with explore/exploit and formula dispatch (#609)' (#610) from fix/issue-609 into main 2026-03-23 16:34:03 +01:00
openhands
14e1c9ecde fix: feat: predictor v3 — abstract adversary with explore/exploit and formula dispatch (#609)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 13:56:59 +00:00
johba
537a4ae567 Merge pull request 'chore: gardener housekeeping' (#606) from chore/gardener-20260323-1247 into main 2026-03-23 13:59:02 +01:00
johba
979f872a68 Merge pull request 'fix: fix: increase planner constraint budget from 3 to 5 issues per run (#607)' (#608) from fix/issue-607 into main 2026-03-23 13:54:02 +01:00
openhands
6d3294823e fix: increase planner constraint budget from 3 to 5 issues per run (#607)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:50:28 +00:00
openhands
0775514bf8 chore: gardener housekeeping 2026-03-23 2026-03-23 12:47:32 +00:00
johba
6b27ae3692 Merge pull request 'fix: fix: gardener must enrich issue body when promoting to backlog — add acceptance criteria + affected files (#598)' (#605) from fix/issue-598 into main 2026-03-23 13:44:02 +01:00
openhands
1522fa698c fix: gardener must enrich issue body when promoting to backlog — add acceptance criteria + affected files (#598)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:32:36 +00:00
johba
eb7e24cb1d Merge pull request 'chore: gardener housekeeping 2026-03-23' (#603) from chore/gardener-20260323-1208 into main 2026-03-23 13:28:38 +01:00
johba
64b0412e41 Merge pull request 'fix: feat: planner reads issue comments to detect bounced/stuck work — delegates spec-out to formula (#595)' (#604) from fix/issue-595 into main 2026-03-23 13:24:03 +01:00
openhands
9f0a81145b fix: feat: planner reads issue comments to detect bounced/stuck work — delegates spec-out to formula (#595)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:16:33 +00:00
openhands
38f4b385cc chore: gardener housekeeping 2026-03-23
- Update all AGENTS.md watermarks to f6fb79d (current HEAD)
- lib/AGENTS.md: document nudge behavior in agent-session.sh stop hook
- pending-actions.json: enrich #598 body + promote to backlog
2026-03-23 12:08:26 +00:00
johba
1c909e58b3 Merge pull request 'fix: feat: predictor re-evaluates prediction/backlog issues — evolve stale watches into targeted warnings (#588)' (#602) from fix/issue-588 into main 2026-03-23 12:59:02 +01:00
openhands
a225b05070 fix: feat: predictor re-evaluates prediction/backlog issues — evolve stale watches into targeted warnings (#588)
Add a re-evaluate-backlog step to the predictor formula between
collect-signals and analyze-and-predict. For each open prediction/backlog
issue, the predictor now reads the original context and planner comments,
extracts the assumptions that made it "watch, don't act", and re-checks
those conditions against current system state.

Three outcomes:
- CONDITIONS_CHANGED → file new prediction/unreviewed, close old as superseded
- STALE (30+ days, conditions stable) → close as prediction/actioned
- UNCHANGED_RECENT → skip (existing behavior)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 11:51:43 +00:00
johba
f6fb79d94b Merge pull request 'fix: fix: parse-deps.sh inline regex matches every line — awk /pattern/i flag is invalid (#600)' (#601) from fix/issue-600 into main 2026-03-23 12:19:02 +01:00
openhands
c7d7ee9cfb fix: parse-deps.sh inline regex matches every line — awk /pattern/i flag is invalid (#600)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 10:59:47 +00:00
johba
c1110e5e48 Merge pull request 'fix: fix: stop hook should nudge Claude when PHASE file is empty — prevents silent exit without PHASE:done (#585)' (#599) from fix/issue-585 into main 2026-03-23 11:14:02 +01:00
openhands
742b64e743 fix: stop hook should nudge Claude when PHASE file is empty — prevents silent exit without PHASE:done (#585)
When Claude finishes a response but hasn't written to the PHASE file,
the stop hook now injects a nudge into the tmux session instead of just
marking idle. This gives Claude another chance to complete the phase
protocol before the monitor loop times out.

Key changes:
- on-idle-stop.sh: check phase file emptiness, nudge via tmux (max 2)
- agent-session.sh: pass phase_file + session to stop hook, clean up
  nudge counter on session teardown

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:56:49 +00:00
johba
c316d2a3b6 Merge pull request 'fix: monitor_phase_loop docstring lists 'break' as a possible _MONITOR_LOOP_EXIT value but it is never set (#435)' (#597) from fix/issue-435 into main 2026-03-23 10:49:02 +01:00
openhands
b769eaa182 fix: monitor_phase_loop docstring lists 'break' as a possible _MONITOR_LOOP_EXIT value but it is never set (#435)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:39:48 +00:00
johba
4b9f12fdf7 Merge pull request 'fix: Unnecessary SC2034 suppression on REPO_ROOT in review-poll.sh (#433)' (#596) from fix/issue-433 into main 2026-03-23 10:34:02 +01:00
openhands
e42a49285f fix: Unnecessary SC2034 suppression on REPO_ROOT in review-poll.sh (#433)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:19:56 +00:00
johba
8382d245fb Merge pull request 'fix: P4 sweep uses ${PROJECT_NAME} without fallback, unlike proj_name (#429)' (#594) from fix/issue-429 into main 2026-03-23 10:14:02 +01:00
openhands
7627aef1c0 fix: P4 sweep uses ${PROJECT_NAME} without fallback, unlike proj_name (#429)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 09:10:24 +00:00
johba
a490ac7183 Merge pull request 'fix: Hook scripts don't follow #!/usr/bin/env bash convention from AGENTS.md (#330)' (#593) from fix/issue-330 into main 2026-03-23 10:08:28 +01:00
openhands
0e5f4607c7 chore: retrigger CI 2026-03-23 09:01:57 +00:00
openhands
0be64bdf31 fix: Hook scripts don't follow #!/usr/bin/env bash convention from AGENTS.md (#330)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:59:56 +00:00
johba
cc813e84d0 Merge pull request 'fix: Clarify 'Watch it work' CTA link label (#311)' (#592) from fix/issue-311 into main 2026-03-23 09:54:02 +01:00
openhands
2719b975b1 fix: Clarify 'Watch it work' CTA link label (#311)
Rename the CTA link from 'Watch it work' to 'See active issues' so
visitors know the link leads to the issue tracker, not a demo or live view.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:49:57 +00:00
johba
cd1524013d Merge pull request 'fix: Deduplicate .example h2 / .section h2 CSS (#310)' (#591) from fix/issue-310 into main 2026-03-23 09:44:04 +01:00
openhands
bca5330e72 fix: Deduplicate .example h2 / .section h2 CSS (#310)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:40:16 +00:00
johba
dcfdd6fc9b Merge pull request 'fix: Duplicate read_phase definition in phase-test.sh (#179)' (#590) from fix/issue-179 into main 2026-03-23 09:34:05 +01:00
openhands
13f62390a7 fix: Duplicate read_phase definition in phase-test.sh (#179)
Source the canonical read_phase() from lib/agent-session.sh instead of
maintaining a local copy that could drift.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:30:13 +00:00
johba
a7cd2bbf5b Merge pull request 'fix: BACKLOG_NUMS array in supervisor-poll.sh is never queried (#110)' (#589) from fix/issue-110 into main 2026-03-23 09:24:02 +01:00
openhands
fbe645a305 fix: BACKLOG_NUMS array in supervisor-poll.sh is never queried (#110)
The BACKLOG_NUMS associative array was built to track which issue numbers
are in the backlog, but the DFS cycle-detection code used NODE_COLOR as
a membership guard instead. This meant deps pointing to non-backlog issues
were only skipped by coincidence (they weren't in NODE_COLOR either).

Three changes:
- Remove SC2034 suppression since BACKLOG_NUMS is now actually queried
- Initialize NODE_COLOR from BACKLOG_NUMS keys (all backlog issues) instead
  of DEPS_OF keys (only issues with dependencies), so every backlog issue
  gets a proper DFS color
- Replace the NODE_COLOR membership check with BACKLOG_NUMS in the DFS, so
  the guard explicitly asks "is this dep a backlog issue?" rather than
  relying on NODE_COLOR initialization as a proxy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:16:13 +00:00
johba
6744429fe1 Merge pull request 'fix: al76.png (3MB) at repo root is now unused (#93)' (#587) from fix/issue-93 into main 2026-03-23 09:09:02 +01:00
openhands
3fa4aff520 ci: retrigger — pipeline #935 flaky failure unrelated to change
Pipeline #936 (same commit) passed all steps. #935 agent-smoke
failed intermittently on BusyBox awk function resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 08:01:43 +00:00
openhands
2212f62aab fix: al76.png (3MB) at repo root is now unused (#93)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 07:54:55 +00:00