Merge pull request 'fix: feat: kill prediction/backlog — planner must act or dismiss, with action budget (#686)' (#703) from fix/issue-686 into main
This commit is contained in:
commit
62bb7db559
5 changed files with 24 additions and 22 deletions
|
|
@ -106,7 +106,7 @@ Issues flow: `backlog` → `in-progress` → PR → CI → review → merge →
|
||||||
| `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) |
|
| `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 |
|
| `vision` | Goal anchors — high-level objectives from VISION.md. | Planner, humans |
|
||||||
| `prediction/unreviewed` | Unprocessed prediction filed by predictor. | predictor-run.sh |
|
| `prediction/unreviewed` | Unprocessed prediction filed by predictor. | predictor-run.sh |
|
||||||
| `prediction/backlog` | Prediction triaged as WATCH — not urgent, tracked. | Planner (triage-predictions step) |
|
| `prediction/dismissed` | Prediction triaged as DISMISS — planner disagrees, closed with reason. | Planner (triage-predictions step) |
|
||||||
| `prediction/actioned` | Prediction promoted or dismissed by planner. | 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 |
|
| `action` | Operational task for the action-agent to execute via formula. | Planner, humans |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -389,7 +389,7 @@ if [ "$ORPHAN_COUNT" -gt 0 ]; then
|
||||||
# Formula guard: formula-labeled issues should not be worked on by dev-agent.
|
# Formula guard: formula-labeled issues should not be worked on by dev-agent.
|
||||||
# Remove in-progress label and skip to prevent infinite respawn cycle (#115).
|
# Remove in-progress label and skip to prevent infinite respawn cycle (#115).
|
||||||
ORPHAN_LABELS=$(echo "$ORPHANS_JSON" | jq -r '.[0].labels[].name' 2>/dev/null) || true
|
ORPHAN_LABELS=$(echo "$ORPHANS_JSON" | jq -r '.[0].labels[].name' 2>/dev/null) || true
|
||||||
SKIP_LABEL=$(echo "$ORPHAN_LABELS" | grep -oE '^(formula|action|prediction/backlog|prediction/unreviewed)$' | head -1) || true
|
SKIP_LABEL=$(echo "$ORPHAN_LABELS" | grep -oE '^(formula|action|prediction/dismissed|prediction/unreviewed)$' | head -1) || true
|
||||||
if [ -n "$SKIP_LABEL" ]; then
|
if [ -n "$SKIP_LABEL" ]; then
|
||||||
log "issue #${ISSUE_NUM} has '${SKIP_LABEL}' label — removing in-progress, skipping"
|
log "issue #${ISSUE_NUM} has '${SKIP_LABEL}' label — removing in-progress, skipping"
|
||||||
curl -sf -X DELETE -H "Authorization: token ${FORGE_TOKEN}" \
|
curl -sf -X DELETE -H "Authorization: token ${FORGE_TOKEN}" \
|
||||||
|
|
@ -640,7 +640,7 @@ for i in $(seq 0 $((BACKLOG_COUNT - 1))); do
|
||||||
# Formula guard: formula-labeled issues must not be picked up by dev-agent.
|
# Formula guard: formula-labeled issues must not be picked up by dev-agent.
|
||||||
# A formula issue that accidentally acquires the backlog label should be skipped.
|
# A formula issue that accidentally acquires the backlog label should be skipped.
|
||||||
ISSUE_LABELS=$(echo "$BACKLOG_JSON" | jq -r ".[$i].labels[].name" 2>/dev/null) || true
|
ISSUE_LABELS=$(echo "$BACKLOG_JSON" | jq -r ".[$i].labels[].name" 2>/dev/null) || true
|
||||||
SKIP_LABEL=$(echo "$ISSUE_LABELS" | grep -oE '^(formula|action|prediction/backlog|prediction/unreviewed)$' | head -1) || true
|
SKIP_LABEL=$(echo "$ISSUE_LABELS" | grep -oE '^(formula|action|prediction/dismissed|prediction/unreviewed)$' | head -1) || true
|
||||||
if [ -n "$SKIP_LABEL" ]; then
|
if [ -n "$SKIP_LABEL" ]; then
|
||||||
log "issue #${ISSUE_NUM} has '${SKIP_LABEL}' label — skipping in backlog scan"
|
log "issue #${ISSUE_NUM} has '${SKIP_LABEL}' label — skipping in backlog scan"
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -71,15 +71,18 @@ and file-at-constraints steps.
|
||||||
|
|
||||||
3. Read available formulas: $FACTORY_ROOT/formulas/*.toml and $PROJECT_REPO_ROOT/formulas/*.toml
|
3. Read available formulas: $FACTORY_ROOT/formulas/*.toml and $PROJECT_REPO_ROOT/formulas/*.toml
|
||||||
|
|
||||||
4. For each prediction, choose one action:
|
4. For each prediction, choose one of two actions (no fence-sitting):
|
||||||
- PROMOTE_ACTION: maps to a formula -> create action issue, close prediction
|
- ACTION: agree with the prediction -> create a backlog or action issue,
|
||||||
- PROMOTE_BACKLOG: warrants dev work -> create backlog issue, close prediction
|
relabel to prediction/actioned, close the prediction
|
||||||
- WATCH: not urgent -> comment why, relabel to prediction/backlog, keep open
|
- DISMISS: disagree or noise -> comment reasoning, relabel to
|
||||||
- DISMISS: noise or covered -> comment reasoning, close prediction
|
prediction/dismissed, close the prediction
|
||||||
|
|
||||||
|
If a dismissed prediction is real, the predictor will re-file it with
|
||||||
|
stronger evidence next run. The issue history is the predictor's memory.
|
||||||
|
|
||||||
5. Execute triage using tea helpers:
|
5. Execute triage using tea helpers:
|
||||||
- Create issues: tea_file_issue "<title>" "<body>" "backlog" (or "action")
|
- Create issues: tea_file_issue "<title>" "<body>" "backlog" (or "action")
|
||||||
- Relabel: tea_relabel <num> "prediction/actioned" (or "prediction/backlog")
|
- Relabel: tea_relabel <num> "prediction/actioned" (or "prediction/dismissed")
|
||||||
- Comment: tea_comment <num> "<reasoning>"
|
- Comment: tea_comment <num> "<reasoning>"
|
||||||
- Close: tea_close <num>
|
- Close: tea_close <num>
|
||||||
|
|
||||||
|
|
@ -163,7 +166,9 @@ Vault procurement: if a constraint needs a resource not in RESOURCES.md with
|
||||||
recurring cost, create vault/pending/<resource-id>.md instead of an issue.
|
recurring cost, create vault/pending/<resource-id>.md instead of an issue.
|
||||||
|
|
||||||
Rules:
|
Rules:
|
||||||
- Maximum 5 items per run (issues + procurement combined)
|
- Action budget: the planner may create at most (predictions_addressed + 1)
|
||||||
|
new issues per run if any predictions were triaged, or 4 if no predictions.
|
||||||
|
This covers issues from Part A promotions + Part C constraint filing combined.
|
||||||
- No issues filed past the bottleneck
|
- No issues filed past the bottleneck
|
||||||
- Leave existing premature issues as-is
|
- Leave existing premature issues as-is
|
||||||
- Only reference formulas that exist on disk
|
- Only reference formulas that exist on disk
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ Set up the working environment and load your prediction history.
|
||||||
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
||||||
"$FORGE_API/issues?state=open&type=issues&labels=prediction%2Funreviewed&limit=50"
|
"$FORGE_API/issues?state=open&type=issues&labels=prediction%2Funreviewed&limit=50"
|
||||||
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
||||||
"$FORGE_API/issues?state=open&type=issues&labels=prediction%2Fbacklog&limit=50"
|
"$FORGE_API/issues?state=closed&type=issues&labels=prediction%2Fdismissed&limit=50&sort=updated&direction=desc"
|
||||||
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
curl -sf -H "Authorization: token $FORGE_TOKEN" \
|
||||||
"$FORGE_API/issues?state=closed&type=issues&labels=prediction%2Factioned&limit=50&sort=updated&direction=desc"
|
"$FORGE_API/issues?state=closed&type=issues&labels=prediction%2Factioned&limit=50&sort=updated&direction=desc"
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ Set up the working environment and load your prediction history.
|
||||||
- What you predicted (title + body)
|
- What you predicted (title + body)
|
||||||
- What the planner decided (comments — look for triage reasoning)
|
- What the planner decided (comments — look for triage reasoning)
|
||||||
- Outcome: actioned (planner valued it), dismissed (planner rejected it),
|
- Outcome: actioned (planner valued it), dismissed (planner rejected it),
|
||||||
watching (planner deferred it), unreviewed (planner hasn't seen it yet)
|
unreviewed (planner hasn't seen it yet)
|
||||||
|
|
||||||
3. Read the prerequisite tree:
|
3. Read the prerequisite tree:
|
||||||
cat "$PROJECT_REPO_ROOT/planner/prerequisite-tree.md"
|
cat "$PROJECT_REPO_ROOT/planner/prerequisite-tree.md"
|
||||||
|
|
@ -75,12 +75,8 @@ Review your prediction history from the preflight step:
|
||||||
- Which predictions did the planner action? Those are areas where your
|
- Which predictions did the planner action? Those are areas where your
|
||||||
instincts were right. The planner values those signals.
|
instincts were right. The planner values those signals.
|
||||||
- Which were dismissed? You were wrong or the planner disagreed. Don't
|
- Which were dismissed? You were wrong or the planner disagreed. Don't
|
||||||
repeat the same theory without new evidence.
|
repeat the same theory without new evidence. If conditions have changed
|
||||||
- Which are watching (prediction/backlog)? Check if conditions changed.
|
since the dismissal, you may re-file with stronger evidence.
|
||||||
If changed → file a new prediction superseding it (close the old one
|
|
||||||
as prediction/actioned with "superseded by #NNN").
|
|
||||||
If stale (30+ days, unchanged) → close it.
|
|
||||||
If recent and unchanged → leave it.
|
|
||||||
|
|
||||||
## Finding weaknesses
|
## Finding weaknesses
|
||||||
|
|
||||||
|
|
@ -169,7 +165,7 @@ tea is pre-configured with login "$TEA_LOGIN" and repo "$FORGE_REPO".
|
||||||
--body "Superseded by #NNN"
|
--body "Superseded by #NNN"
|
||||||
|
|
||||||
5. Do NOT duplicate existing open predictions. If your theory matches
|
5. Do NOT duplicate existing open predictions. If your theory matches
|
||||||
an open prediction/unreviewed or prediction/backlog issue, skip it.
|
an open prediction/unreviewed issue, skip it.
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
|
|
@ -177,7 +173,6 @@ tea is pre-configured with login "$TEA_LOGIN" and repo "$FORGE_REPO".
|
||||||
- Each exploit counts as 2 (prediction + action dispatch)
|
- Each exploit counts as 2 (prediction + action dispatch)
|
||||||
- So: 5 explores, or 2 exploits + 1 explore, or 1 exploit + 3 explores
|
- So: 5 explores, or 2 exploits + 1 explore, or 1 exploit + 3 explores
|
||||||
- Never re-file a dismissed prediction without new evidence
|
- Never re-file a dismissed prediction without new evidence
|
||||||
- When superseding a prediction/backlog issue, close the old one properly
|
|
||||||
- Action issues must reference existing formulas — don't invent formulas
|
- Action issues must reference existing formulas — don't invent formulas
|
||||||
- Be specific: name the file, the metric, the threshold, the formula
|
- Be specific: name the file, the metric, the threshold, the formula
|
||||||
- If no weaknesses found, file nothing — that's a strong signal the project is healthy
|
- If no weaknesses found, file nothing — that's a strong signal the project is healthy
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,10 @@ tree from `planner/MEMORY.md` and `planner/prerequisite-tree.md`. Also reads
|
||||||
all available formulas: factory formulas (`$FACTORY_ROOT/formulas/*.toml`) and
|
all available formulas: factory formulas (`$FACTORY_ROOT/formulas/*.toml`) and
|
||||||
project-specific formulas (`$PROJECT_REPO_ROOT/formulas/*.toml`). Phase 1
|
project-specific formulas (`$PROJECT_REPO_ROOT/formulas/*.toml`). Phase 1
|
||||||
(prediction-triage): triage `prediction/unreviewed` issues filed by the
|
(prediction-triage): triage `prediction/unreviewed` issues filed by the
|
||||||
Predictor — for each prediction: promote to action, promote to backlog, watch
|
Predictor — for each prediction: action (create issue, relabel to
|
||||||
(relabel to prediction/backlog), or dismiss with reasoning. Phase 2
|
prediction/actioned, close) or dismiss (comment reason, relabel to
|
||||||
|
prediction/dismissed, close). No fence-sitting — dismissed predictions get
|
||||||
|
re-filed by the predictor with stronger evidence if still valid. Phase 2
|
||||||
(update-prerequisite-tree): scan repo state + open/closed issues, mark resolved
|
(update-prerequisite-tree): scan repo state + open/closed issues, mark resolved
|
||||||
prerequisites, discover new ones, update the tree. **Also scans comments on
|
prerequisites, discover new ones, update the tree. **Also scans comments on
|
||||||
referenced issues for bounce/stuck signals** (BOUNCED, ESCALATED, LABEL_CHURN)
|
referenced issues for bounce/stuck signals** (BOUNCED, ESCALATED, LABEL_CHURN)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue