Update the agents-update step in run-gardener.toml to enforce the ~200-line
size limit on root AGENTS.md. When exceeded, the gardener now splits
per-directory sections into {dir}/AGENTS.md files with watermarks,
replacing verbose sections in root with a summary table of pointers.
Root keeps: overview, directory map, architecture decisions, key conventions.
Per-directory files get: role, trigger, key files, env vars, lifecycle.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove the orphaned post-session dust accumulator from gardener-agent.sh
(no longer reached after #367 moved gardener-poll.sh to action issues).
Add a dedicated dust-bundling formula step to run-gardener.toml that
handles the full lifecycle: dedup, timestamps, 30-day TTL expiry, and
bundling groups with 3+ items into backlog issues.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the unreliable escalation JSONL system (supervisor/escalations-*.jsonl
consumed by gardener) with direct blocked label + diagnostic comment on the
original issue.
When a dev-agent or action-agent session fails (PHASE:failed, idle timeout,
crash, CI exhausted):
- Capture last 50 lines from tmux pane via tmux capture-pane
- Post a structured diagnostic comment on the issue (exit reason, timestamp,
PR number, tmux output)
- Label the issue "blocked" (instead of restoring "backlog")
- Remove in-progress label
Removed:
- Escalation JSONL write paths in dev-agent.sh, phase-handler.sh, dev-poll.sh,
action-agent.sh
- is_escalated() helper in dev-poll.sh
- Escalation triage (P2f section) in supervisor-poll.sh
- Escalation processing + recipe engine in gardener-poll.sh
- ci-escalation-recipes step from run-gardener.toml formula
- escalations*.jsonl from .gitignore
Added:
- post_blocked_diagnostic() shared helper in phase-handler.sh
- ensure_blocked_label_id() helper (creates label via API if not exists)
- is_blocked() helper in dev-poll.sh (replaces is_escalated)
- Blocked issues listing in supervisor/preflight.sh
Kept:
- Matrix notifications on failure (unchanged)
- CI fix counter logic (still tracks attempts)
- needs_human injection in supervisor/gardener (not escalation-related)
- Gardener grooming (gardener-agent.sh still invoked)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix critical: use double quotes for $PHASE_FILE in formula phase signal
- Fix low: use limit=50 for backlog/in-progress/blocked issue counts
- Fix nit: correct misleading comment about escalation reply timing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename planner-poll.sh → planner-run.sh: direct cron executor that
creates a tmux session with Claude (opus), injects the formula as
context, monitors phase file, handles crash recovery and cleanup.
No action issues, no action-poll dependency.
- Source disinto project config explicitly (projects/disinto.toml)
instead of defaulting to harb via env.sh.
- Update formulas/run-planner.toml (v2): remove agents-update step
(now handled by gardener per #246), add journal-and-memory step
(daily journal entries committed to git + local MEMORY.md update),
add commit-and-pr step (one commit, one PR per run).
- Create planner/journal/ directory for daily raw logs.
- Update crontab: weekly Sunday 6AM call to planner-run.sh.
- Update AGENTS.md to reflect new architecture.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add --recipes-only flag to gardener-poll.sh to skip grooming call when
invoked by the formula's ci-escalation-recipes step (prevents double-run)
- Update formula step to pass --recipes-only
- Add lib/file-action-issue.sh to AGENTS.md shared helpers table
- Clarify TOML arg scope in gardener trigger description
- Fix log prefixes in gardener-run.sh (poll: → run:)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixes#363
## Changes
Created formulas/run-gardener.toml with 7 steps: preflight (pull latest), agents-update (AGENTS.md watermark check), stale-pr-cleanup (ping/close inactive PRs), dust-bundling (group trivial issues into bundles of 3+), ci-health (detect systemic CI failures), blocked-review (triage blocked issues per #352), and commit-and-pr (single commit with all file changes). No memory, no journal. All git writes collected in the final commit-and-pr step; API calls happen during the run. Steps follow the established formula TOML format with needs dependencies.
Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/disinto/pulls/366
Reviewed-by: Disinto_bot <disinto_bot@noreply.codeberg.org>
- Rename <backlog_label_id> in WATCH path to <prediction_backlog_label_id>
to avoid collision with the plain backlog label in strategic-planning
- Add prediction/actioned relabeling before close for PROMOTE and DISMISS
paths so closed predictions are distinguishable from unprocessed ones
- Make step 4 comment format consistent with step 5: "Actioned as #NNN —
<reasoning>" everywhere
- Add step 3b for explicit label ID resolution with create-if-missing for
the new prediction/actioned label
- Document prediction/* and action labels in AGENTS.md label table
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Expand the triage-predictions step in run-planner.toml with four explicit
triage actions (PROMOTE_ACTION, PROMOTE_BACKLOG, WATCH, DISMISS), each
with API execution details and mandatory reasoning comments. Promoted
predictions now close the original with "Actioned as #NNN" and compete
with vision gaps for the per-cycle 5-issue limit in strategic-planning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TOML declares model = "opus". planner-poll.sh includes model: opus in
the issue YAML front matter. action-agent.sh extracts it and exports
CLAUDE_MODEL. create_agent_session passes --model to claude if set.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Persist DEPLOY_SHA and TARGET to temp files for cross-step reads
- Use ln -s + mv -T for truly atomic symlink swap
- Guard against empty title extraction in verify step
- Add repo_root var instead of hardcoded path
- Append deploy history before pruning old deploys
- Add prune-old-deploys to verify step needs for unambiguous ordering
- Explicit no-op early exit via NOOP sentinel
- Follow redirects with curl -L in verify step
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- upgrade-dependency.toml: fix forge upgrade command (forge update, not
forge install); remove redundant `npm install` after lockfile write;
simplify description to "Upgrade {{package}} to {{to_version}}" so it
reads cleanly when from_version is omitted
- add-rpc-method.toml: remove dead `namespace` variable; inline namespace
derivation logic into register-method step description
- BOOTSTRAP.md: mark formula label entry as requiring feat/formula merge;
add YAML front matter example so operators know the issue schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>