Merge pull request 'fix: Planner files vault items for human-blocked constraints (#723)' (#751) from fix/issue-723 into main

This commit is contained in:
johba 2026-03-26 14:14:08 +01:00
commit 3244e23950
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) 2. Recalculate objective status (READY/BLOCKED/DONE)
3. Add new prerequisites discovered from graph report 3. Add new prerequisites discovered from graph report
4. Add new objectives from VISION.md not yet in tree 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 6. Check RESOURCES.md for newly available capabilities
Bounce/stuck detection for issues in the tree, fetch recent comments: 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: - BOUNCED/LABEL_CHURN: do NOT re-promote. Dispatch groom-backlog formula instead:
tea_file_issue "chore: break down #<N> — bounced <count>x" "<body>" "action" tea_file_issue "chore: break down #<N> — bounced <count>x" "<body>" "action"
- HUMAN_BLOCKED (needs human decision or external resource): file a vault - HUMAN_BLOCKED (needs human decision or external resource): file a vault
procurement item instead of skipping. Write vault/pending/<resource-id>.md: procurement item instead of skipping. First check for duplicates across ALL
# <What is needed> 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 ## What
<description of the resource or decision needed> <description of the resource or decision needed>
## Why ## 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 ## Unblocks
- #<issue> — <title> - #<issue> — <title>
Then mark the prerequisite in the tree as "blocked-on-vault (vault/pending/<id>.md)". 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. 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>" "$FORGE_API/issues/<num>/labels/<priority_label_id>"
Vault procurement: if a constraint needs a resource not in RESOURCES.md with 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: Rules:
- Action budget: the planner may create at most (predictions_addressed + 1) - Action budget: the planner may create at most (predictions_addressed + 1)
@ -216,6 +237,10 @@ Format:
- #NNN: BOUNCED (Nx) — dispatched groom-backlog as #MMM - #NNN: BOUNCED (Nx) — dispatched groom-backlog as #MMM
(or "No stuck issues detected") (or "No stuck issues detected")
## Vault items filed
- vault/pending/<id>.md <what> blocks #NNN
(or "No vault items filed")
## Issues created ## Issues created
- #NNN: title — why (or "No new issues") - #NNN: title — why (or "No new issues")
@ -243,7 +268,7 @@ If no file changes (git status --porcelain), skip.
Otherwise: Otherwise:
BRANCH="chore/planner-$(date -u +%Y%m%d-%H%M)" BRANCH="chore/planner-$(date -u +%Y%m%d-%H%M)"
git checkout -B "$BRANCH" 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 add -u
git diff --cached --quiet && skip git diff --cached --quiet && skip
git commit -m "chore: planner run $(date -u +%Y-%m-%d)" 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 (detected BOUNCED/LABEL_CHURN) are dispatched to the `groom-backlog` formula
in breakdown mode instead of being re-promoted** — this breaks the ping-pong 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 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 are routed through the vault** — the planner files an actionable procurement
the prerequisite as blocked-on-vault in the tree. 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 Phase 4 (journal-and-memory): write updated prerequisite tree + daily journal
entry (committed to git) and update `planner/MEMORY.md` (committed to git). 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. Phase 5 (commit-and-pr): one commit with all file changes, push, create PR.