fix: Planner files vault items for human-blocked constraints (#723)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
openhands 2026-03-26 13:01:36 +00:00
parent 4c8cfbc0fa
commit 36cd0c1817
2 changed files with 35 additions and 8 deletions

View file

@ -117,7 +117,7 @@ Update the tree:
2. Recalculate objective status (READY/BLOCKED/DONE)
3. Add new prerequisites discovered from graph report
4. Add new objectives from VISION.md not yet in tree
5. Check vault state: vault/pending/*.md (blocked-on-vault), vault/fired/*.md (resolved?)
5. Check vault state: vault/pending/*.md + vault/approved/*.md (blocked-on-vault), vault/fired/*.md (resolved?)
6. Check RESOURCES.md for newly available capabilities
Bounce/stuck detection for issues in the tree, fetch recent comments:
@ -150,14 +150,33 @@ Stuck issue handling:
- BOUNCED/LABEL_CHURN: do NOT re-promote. Dispatch groom-backlog formula instead:
tea_file_issue "chore: break down #<N> — bounced <count>x" "<body>" "action"
- HUMAN_BLOCKED (needs human decision or external resource): file a vault
procurement item instead of skipping. Write vault/pending/<resource-id>.md:
# <What is needed>
procurement item instead of skipping. First check for duplicates across ALL
vault directories (pending/, approved/, fired/) if a file with the same
slug already exists in any of them, do NOT create a new one.
Naming: vault/pending/<project>-<slug>.md (e.g. disinto-github-org.md).
Write with this template:
# Request: <short description>
## What
<description of the resource or decision needed>
## Why
<which objective/issue this unblocks>
Blocks #<issue> (<title>), which blocks <downstream objective>.
Waiting since <date constraint was first identified>.
## Human action
1. <concrete step>
2. <concrete step>
3. Paste result here or in #<issue>
## Factory will then
- <what the factory does once the resource is available>
- <downstream work that unblocks>
## Unblocks
- #<issue> — <title>
Then mark the prerequisite in the tree as "blocked-on-vault (vault/pending/<id>.md)".
Do NOT skip or mark as "awaiting human decision" the vault owns the human interface.
@ -174,7 +193,9 @@ Priority label sync:
"$FORGE_API/issues/<num>/labels/<priority_label_id>"
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/<project>-<slug>.md instead of an issue.
Use the same template as HUMAN_BLOCKED above (What/Why/Human action/Factory will then/Unblocks).
Dedup: check vault/pending/ + vault/approved/ + vault/fired/ before creating.
Rules:
- Action budget: the planner may create at most (predictions_addressed + 1)
@ -216,6 +237,10 @@ Format:
- #NNN: BOUNCED (Nx) — dispatched groom-backlog as #MMM
(or "No stuck issues detected")
## Vault items filed
- vault/pending/<id>.md <what> blocks #NNN
(or "No vault items filed")
## Issues created
- #NNN: title — why (or "No new issues")
@ -243,7 +268,7 @@ If no file changes (git status --porcelain), skip.
Otherwise:
BRANCH="chore/planner-$(date -u +%Y%m%d-%H%M)"
git checkout -B "$BRANCH"
git add planner/prerequisite-tree.md planner/journal/ planner/MEMORY.md
git add planner/prerequisite-tree.md planner/journal/ planner/MEMORY.md vault/pending/
git add -u
git diff --cached --quiet && skip
git commit -m "chore: planner run $(date -u +%Y-%m-%d)"

View file

@ -27,8 +27,10 @@ dev-agent) or `action` (run existing formula, action-agent). **Stuck issues
(detected BOUNCED/LABEL_CHURN) are dispatched to the `groom-backlog` formula
in breakdown mode instead of being re-promoted** — this breaks the ping-pong
loop by splitting them into dev-agent-sized sub-issues. **Human-blocked issues
are routed through the vault** — the planner files a procurement item and marks
the prerequisite as blocked-on-vault in the tree.
are routed through the vault** — the planner files an actionable procurement
item (`vault/pending/<project>-<slug>.md` with What/Why/Human action/Factory
will then sections) and marks the prerequisite as blocked-on-vault in the tree.
Deduplication: checks pending/ + approved/ + fired/ before creating.
Phase 4 (journal-and-memory): write updated prerequisite tree + daily journal
entry (committed to git) and update `planner/MEMORY.md` (committed to git).
Phase 5 (commit-and-pr): one commit with all file changes, push, create PR.