Look up UNDERSPECIFIED_LABEL_ID via the Gitea labels API (with fallback)
and use the numeric ID in both phase-handler.sh (PHASE:failed/too_large)
and dev-poll.sh (preflight too_large), matching the pattern already used
for BACKLOG_LABEL_ID.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 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>
Fixes#349
## Changes
Add &sort=oldest to the backlog API call in dev/dev-poll.sh (line 401) so issues are picked FIFO instead of the Gitea default LIFO order.
Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/disinto/pulls/350
Reviewed-by: Disinto_bot <disinto_bot@noreply.codeberg.org>
Replace single-page curl fetch with codeberg_api_all() which paginates
through all pages of PR files. This ensures large PRs with 50+ files
correctly detect code files on all pages, preventing CI from being
incorrectly bypassed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Guard against overwriting terminal phases (PHASE:done, PHASE:merged)
in on-stop-failure.sh to prevent false failures from same-turn race
- Declare sf_phase_marker explicitly in StopFailure block instead of
relying on phase_marker from PostToolUse block
- Add authentication_failed test (10c) and terminal phase guard tests
(10g, 10h)
- Fix fragile nested command substitution in test 10f fail() message
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each of the three review-check sites (orphan, stuck-PR, backlog) now
fetches reviews with a single curl call, storing the JSON response and
jq-filtering both HAS_APPROVE and HAS_CHANGES from the cached result.
This eliminates the race window where a review submitted between the
two calls could cause a transient mismatch.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add phase-handler.sh to dev/ directory listing (#216)
- Update agent count from six to eight, add action+predictor (#324)
- Add action-agent.sh to lib/agent-session.sh Sourced by column (#326)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Guard 2: add /tmp/* to allowlist so normal temp file cleanup is not blocked
- Guard 1: block bare `git push --force` (no branch arg) since upstream may
point to primary branch
- Guard 4: allow flags between verb and branch (`git switch --detach main`),
escape branch name for regex safety, exclude -b/-B/-c/-C (branch creation)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add factory-fixes-itself.webp (107K vs 169K JPG, 37% smaller) and
wrap the image in a <picture><source> element matching the existing
al76 pattern. The original JPG is kept as fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add baseline comparison to detect-duplicates.py: when DIFF_BASE is set
(via CI_COMMIT_TARGET_BRANCH for PRs), the script compares findings
against the base branch and only fails on new duplicates introduced by
the PR. Pre-existing duplicates are reported as informational.
For push events (no DIFF_BASE), the script reports all findings but
exits 0 (informational only). Removes failure:ignore from the CI step
so new duplicates properly block PRs.
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>
- og:url now has trailing slash matching canonical link
- "It happened today" → "The factory fixed itself" (not stale on static page)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>