Commit 9c15321ed6904cbb2de0679b7203d09e1484c27d
1 parent
fa930b9b
graphlemon: auto-commit uncommitted changes for 5bbc2989-acb3-49b9-999b-7304e1ba…
…9856-main-checkout-drift
Showing
2 changed files
with
34 additions
and
0 deletions
.claude/agent-memory/planner/MEMORY.md
| ... | ... | @@ -8,3 +8,4 @@ |
| 8 | 8 | - [nav current-project-context PRD: consistent](project_nav_current_project_context_prd.md) — reviewed 2026-08-06, no contradictions; FR-5's "query-string parsing fix" is actually an add (render() has no query-string parsing today, only hash-path regex) — flag as accuracy issue at SDD stage, not a PRD contradiction |
| 9 | 9 | - [deploy_stage.py ConcurrentDeploymentError PRD: consistent](project_deploy_stage_concurrent_conflict_prd.md) — reviewed 2026-08-07, no contradictions; all facts (staged→candidate_starting transition, ux_deployment_active terminal set) verified against code |
| 10 | 10 | - [skills detail-content bug: already fixed](project_skills_detail_content_bug_already_fixed.md) — get_skill_content/route/panel/tests all present 2026-08-13; only unverified is git commit/Validator status, not missing code |
| 11 | +- [judge_prompt must reject narrative-wrapper output](feedback_judge_prompt_narrative_wrapper.md) — brd/sdd/benchmark judge_prompts need explicit "no completion-status framing, no hedged-deferred content, no prose summarizing what should be a table" instruction, generic quality prompts don't catch it | ... | ... |
.claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md
0 → 100644
| 1 | +--- | |
| 2 | +name: judge-prompt-narrative-wrapper | |
| 3 | +description: Work Graph judge_prompts for brd/sdd/benchmark nodes must explicitly reject "workflow completed" narrative-wrapper output, not just check for topical content | |
| 4 | +metadata: | |
| 5 | + type: feedback | |
| 6 | +--- | |
| 7 | + | |
| 8 | +planner_reviewer rejected a Work Graph's SDD and Benchmark nodes (2026-08-13, task: fix missing | |
| 9 | +concurrency mutex in `supervisor/deploy_stage.stage_deployment()`) because both artifacts were | |
| 10 | +narrative completion reports ("The graphlemon Work Node (planner) workflow completed. It produced | |
| 11 | +an SDD for the goal '...'") wrapping only a few bullet points, with the SDD explicitly hedging | |
| 12 | +"let me know if you want the full SDD text" instead of including it. PRD passed because it was an | |
| 13 | +actual structured document with FR/AC tables; BRD partially failed for the same narrative-report | |
| 14 | +tone despite having real content (G1/G2/G3 gaps) inside it. | |
| 15 | + | |
| 16 | +**Why:** this is exactly the failure mode SOUL.md's judgment principles call out — narrative | |
| 17 | +"what I just did" text standing in for the actual deliverable. It's easy for a Planner Work Node | |
| 18 | +to slip into this because its own execution wrapper naturally produces "workflow completed, it | |
| 19 | +produced X" framing; without an explicit judge instruction against it, generic "is this a good | |
| 20 | +SDD" judge_prompts don't reliably catch it since the summary bullets *are* topically relevant, just | |
| 21 | +not the full document. | |
| 22 | + | |
| 23 | +**How to apply:** when writing `judge_prompt` for brd/sdd/benchmark Work Graph nodes (especially on | |
| 24 | +a retry after a planner_reviewer rejection), explicitly instruct the judge to fail if: (a) the | |
| 25 | +artifact opens with a completion-status sentence about the workflow/agent itself rather than the | |
| 26 | +document's own subject matter, (b) it ends with hedging like "let me know if you want more detail" | |
| 27 | +or "awaiting direction on whether to continue" instead of being self-contained, or (c) it | |
| 28 | +summarizes in prose what should be enumerated (e.g. Benchmark scenarios need real IDs/ | |
| 29 | +preconditions/expected-assertions tables, not "9 test scenarios defined: ..."). Ground the | |
| 30 | +substantive completeness bar in real code facts read fresh (don't just trust the failed attempt's | |
| 31 | +own framing) — see [[project_deploy_stage_concurrent_conflict_prd]] for the concrete facts used | |
| 32 | +here (`ux_deployment_active` already exists; the real gap is the raw `sqlite3.IntegrityError` | |
| 33 | +leaking untranslated). | ... | ... |