From 9c15321ed6904cbb2de0679b7203d09e1484c27d Mon Sep 17 00:00:00 2001 From: graphlemon Date: Thu, 13 Aug 2026 17:39:16 +0800 Subject: [PATCH] graphlemon: auto-commit uncommitted changes for 5bbc2989-acb3-49b9-999b-7304e1ba9856-main-checkout-drift --- .claude/agent-memory/planner/MEMORY.md | 1 + .claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 0 deletions(-) create mode 100644 .claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md diff --git a/.claude/agent-memory/planner/MEMORY.md b/.claude/agent-memory/planner/MEMORY.md index cbac6ad..cc04dc3 100644 --- a/.claude/agent-memory/planner/MEMORY.md +++ b/.claude/agent-memory/planner/MEMORY.md @@ -8,3 +8,4 @@ - [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 - [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 - [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 +- [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 diff --git a/.claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md b/.claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md new file mode 100644 index 0000000..780d520 --- /dev/null +++ b/.claude/agent-memory/planner/feedback_judge_prompt_narrative_wrapper.md @@ -0,0 +1,33 @@ +--- +name: judge-prompt-narrative-wrapper +description: Work Graph judge_prompts for brd/sdd/benchmark nodes must explicitly reject "workflow completed" narrative-wrapper output, not just check for topical content +metadata: + type: feedback +--- + +planner_reviewer rejected a Work Graph's SDD and Benchmark nodes (2026-08-13, task: fix missing +concurrency mutex in `supervisor/deploy_stage.stage_deployment()`) because both artifacts were +narrative completion reports ("The graphlemon Work Node (planner) workflow completed. It produced +an SDD for the goal '...'") wrapping only a few bullet points, with the SDD explicitly hedging +"let me know if you want the full SDD text" instead of including it. PRD passed because it was an +actual structured document with FR/AC tables; BRD partially failed for the same narrative-report +tone despite having real content (G1/G2/G3 gaps) inside it. + +**Why:** this is exactly the failure mode SOUL.md's judgment principles call out — narrative +"what I just did" text standing in for the actual deliverable. It's easy for a Planner Work Node +to slip into this because its own execution wrapper naturally produces "workflow completed, it +produced X" framing; without an explicit judge instruction against it, generic "is this a good +SDD" judge_prompts don't reliably catch it since the summary bullets *are* topically relevant, just +not the full document. + +**How to apply:** when writing `judge_prompt` for brd/sdd/benchmark Work Graph nodes (especially on +a retry after a planner_reviewer rejection), explicitly instruct the judge to fail if: (a) the +artifact opens with a completion-status sentence about the workflow/agent itself rather than the +document's own subject matter, (b) it ends with hedging like "let me know if you want more detail" +or "awaiting direction on whether to continue" instead of being self-contained, or (c) it +summarizes in prose what should be enumerated (e.g. Benchmark scenarios need real IDs/ +preconditions/expected-assertions tables, not "9 test scenarios defined: ..."). Ground the +substantive completeness bar in real code facts read fresh (don't just trust the failed attempt's +own framing) — see [[project_deploy_stage_concurrent_conflict_prd]] for the concrete facts used +here (`ux_deployment_active` already exists; the real gap is the raw `sqlite3.IntegrityError` +leaking untranslated). -- libgit2 0.21.4