From dd61f6438e0f4afe87f59f42c4be37bb57022d61 Mon Sep 17 00:00:00 2001 From: openhands Date: Fri, 20 Mar 2026 09:36:37 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20address=20review=20=E2=80=94=20disambigu?= =?UTF-8?q?ate=20label=20placeholders,=20relabel=20before=20close?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename in WATCH path to 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 — " 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) --- AGENTS.md | 4 ++++ formulas/run-planner.toml | 40 ++++++++++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 1254a3b..4f90665 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -311,6 +311,10 @@ Issues flow through these states: | `tech-debt` | Pre-existing issue flagged by AI reviewer, not introduced by a PR. | review-pr.sh (auto-created follow-ups) | | `underspecified` | Dev-agent refused the issue as too large or vague. | dev-poll.sh (on preflight `too_large`), dev-agent.sh (on mid-run `too_large` refusal) | | `vision` | Goal anchors — high-level objectives from VISION.md. | Planner, humans | +| `prediction/unreviewed` | Unprocessed prediction filed by predictor. | prediction-agent.sh | +| `prediction/backlog` | Prediction triaged as WATCH — not urgent, tracked. | Planner (triage-predictions step) | +| `prediction/actioned` | Prediction promoted or dismissed by planner. | Planner (triage-predictions step) | +| `action` | Operational task for the action-agent to execute via formula. | Planner, humans | ### Dependency conventions diff --git a/formulas/run-planner.toml b/formulas/run-planner.toml index 8add108..137029e 100644 --- a/formulas/run-planner.toml +++ b/formulas/run-planner.toml @@ -109,21 +109,33 @@ Evidence from the preflight step informs whether each prediction is valid curl -sf -H "Authorization: token $CODEBERG_TOKEN" \ "$CODEBERG_API/issues?state=open&type=issues&limit=50" +3b. Resolve label IDs needed for triage (fetch via $CODEBERG_API/labels): + - → prediction/unreviewed + - → prediction/backlog + - → prediction/actioned (create if missing, + color #c2e0c6, description "Prediction triaged by planner") + - → backlog + - → action + These are DISTINCT labels — do not reuse IDs across them. + 4. For each prediction, read the title and body. Choose one action: - PROMOTE_ACTION: maps to an available formula → create an action issue with YAML front matter referencing the formula name and vars. - Close the prediction with comment "Actioned as #NNN". + Relabel prediction/unreviewed → prediction/actioned, then close + with comment "Actioned as #NNN — ". - PROMOTE_BACKLOG: warrants dev work → create a backlog issue. - Close the prediction with comment "Actioned as #NNN". + Relabel prediction/unreviewed → prediction/actioned, then close + with comment "Actioned as #NNN — ". - WATCH: not urgent but worth tracking → post a comment explaining why it is not urgent, then relabel from prediction/unreviewed to prediction/backlog. Do NOT close. - DISMISS: noise, already covered by an open issue, or not actionable → - post a comment with explicit reasoning, then close the prediction. + relabel prediction/unreviewed → prediction/actioned, post a comment + with explicit reasoning, then close the prediction. Every decision MUST include reasoning in a comment on the prediction issue. @@ -134,12 +146,19 @@ Evidence from the preflight step informs whether each prediction is valid curl -sf -X POST -H "Authorization: token $CODEBERG_TOKEN" \ -H "Content-Type: application/json" "$CODEBERG_API/issues" \ -d '{"title":"...","body":"...","labels":[]}' - b. Comment on the prediction with "Actioned as #NNN": + b. Comment on the prediction with "Actioned as #NNN — ": curl -sf -X POST -H "Authorization: token $CODEBERG_TOKEN" \ -H "Content-Type: application/json" \ "$CODEBERG_API/issues//comments" \ -d '{"body":"Actioned as #NNN — "}' - c. Close the prediction: + c. Relabel: remove prediction/unreviewed, add prediction/actioned: + curl -sf -X DELETE -H "Authorization: token $CODEBERG_TOKEN" \ + "$CODEBERG_API/issues//labels/" + curl -sf -X POST -H "Authorization: token $CODEBERG_TOKEN" \ + -H "Content-Type: application/json" \ + "$CODEBERG_API/issues//labels" \ + -d '{"labels":[]}' + d. Close the prediction: curl -sf -X PATCH -H "Authorization: token $CODEBERG_TOKEN" \ -H "Content-Type: application/json" \ "$CODEBERG_API/issues/" \ @@ -153,11 +172,18 @@ Evidence from the preflight step informs whether each prediction is valid curl -sf -X POST -H "Authorization: token $CODEBERG_TOKEN" \ -H "Content-Type: application/json" \ "$CODEBERG_API/issues//labels" \ - -d '{"labels":[]}' + -d '{"labels":[]}' For DISMISS: a. Comment with explicit reasoning - b. Close the prediction issue + b. Relabel: remove prediction/unreviewed, add prediction/actioned: + curl -sf -X DELETE -H "Authorization: token $CODEBERG_TOKEN" \ + "$CODEBERG_API/issues//labels/" + curl -sf -X POST -H "Authorization: token $CODEBERG_TOKEN" \ + -H "Content-Type: application/json" \ + "$CODEBERG_API/issues//labels" \ + -d '{"labels":[]}' + c. Close the prediction issue 6. Track promoted predictions — they compete with vision gaps in the strategic-planning step for the per-cycle 5-issue limit.