diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9677fb1..4d2e423 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -106,9 +106,11 @@ To add a new role, justify why an existing member is insufficient. ### 4. ๐Ÿ› Bug fix Use the bug report issue template. All bug fix PRs must: -- Include a regression test (in `.github/workflows/ci.yml` if hook-related) +- Include a regression test (under `tests/` โ€” fixture, e2e, or boilerplate + lint as appropriate; CI wiring lives in `.github/workflows/ci.yml`) - Pass `bash scripts/verify-plugin.sh` -- Include a LESSON entry in `LESSONS.md` (root cause + prevention) +- Include a LESSON entry in `plugins/preview-forge/memory/LESSONS.md` + (root cause + prevention) ### 5. ๐Ÿ“ Documentation / spec diff --git a/plugins/preview-forge/agents/ideation/ideation-lead.md b/plugins/preview-forge/agents/ideation/ideation-lead.md index e495ce8..8546056 100644 --- a/plugins/preview-forge/agents/ideation/ideation-lead.md +++ b/plugins/preview-forge/agents/ideation/ideation-lead.md @@ -29,12 +29,12 @@ model: opus - I1์€ **ํ•ญ์ƒ** 3-batch AskUserQuestion์„ ์ˆ˜ํ–‰ํ•˜์—ฌ `runs//idea.spec.json`์„ ์‚ฐ์ถœ (์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์Šคํ‚ต) - ์‚ฐ์ถœ๋œ `idea.spec.json._filled_ratio`๋ฅผ 4-tier๋กœ ๋งคํ•‘ (v1.7.0+ A-4 โ€” B-1๊ณผ ๋™์‹œ ship; threshold 0.4 ์„ค์ • ๊ทผ๊ฑฐ: B-1 fast-path ์‹ค์ œ minimum์€ 5/9 โ‰ˆ 0.56 (idea_summary + target_persona + primary_surface + killer_feature + must_have_constraints; nested object๋Š” binary slot ๊ทœ์น™). 5/9์— edge-case safety margin์„ ๋”ํ•ด 0.5 โ†’ 0.4๋กœ ๋‚ด๋ฆผ. PR #51 R2 review์—์„œ ์›๋ž˜ "4/9 โ‰ˆ 0.44" ๊ทผ๊ฑฐ๋Š” binary slot ๊ทœ์น™์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๋กœ ์ •์ • โ€” `idea-clarifier.md` ยง"Soft anchor ์ •์ฑ…" ์ฐธ์กฐ): - | `_filled_ratio` | tier | dispatch ๋™์ž‘ | advocate ๋ฐ›๋Š” ์‹ ํ˜ธ | + | `_filled_ratio` | tier (script `mode=`) | dispatch ๋™์ž‘ | advocate ๋ฐ›๋Š” ์‹ ํ˜ธ | |---|---|---|---| - | `โ‰ฅ 0.7` | **high** | ์ •์ƒ dispatch, spec์„ ground truth๋กœ ์‚ฌ์šฉ | `IDEA_SPEC_CONFIDENCE: high` | - | `0.4 โ‰ค ratio < 0.7` | **medium** | ์ •์ƒ dispatch, spec์„ hint๋กœ ์‚ฌ์šฉ (์ž์œ  ํ•ด์„ ํ—ˆ์šฉ ํญ โ†‘) | `IDEA_SPEC_CONFIDENCE: medium` | - | `0.2 โ‰ค ratio < 0.4` | **low** | ์ •์ƒ dispatch + Blackboard `ideation.spec_confidence_tier=low` (์ด์ „ `low_spec_quality`์˜ ํ›„๊ณ„) | `IDEA_SPEC_CONFIDENCE: low` | - | `< 0.2` | **fallback** | **v1.5.4 path**: advocate dispatch ์‹œ `idea.spec.json`์„ **์ „๋‹ฌํ•˜์ง€ ์•Š์Œ** (`IDEA_SPEC: ` โ€” `<...>` ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋Š” ๋ฆฌํ„ฐ๋Ÿด์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋Ÿฐํƒ€์ž„ substitution ๊ฒฐ๊ณผ; ์•„๋ž˜ ยง2 dispatch template๊ณผ ๋™์ผ ํ˜•์‹). Blackboard `ideation.spec_fallback_v1_5_4=true` ๊ธฐ๋ก. B-3 "Skip interview" ์„ ํƒ์ž๊ฐ€ ์ž๋™์œผ๋กœ ์ด ๊ฒฝ๋กœ ์ง„์ž… (ratio โ‰ˆ 0.11) | spec ๋ฏธ์ „๋‹ฌ | + | `โ‰ฅ 0.7` | **high** (`ground-truth`) | ์ •์ƒ dispatch, spec์„ ground truth๋กœ ์‚ฌ์šฉ | `IDEA_SPEC_CONFIDENCE: high` | + | `0.4 โ‰ค ratio < 0.7` | **medium** (`hint`) | ์ •์ƒ dispatch, spec์„ hint๋กœ ์‚ฌ์šฉ (์ž์œ  ํ•ด์„ ํ—ˆ์šฉ ํญ โ†‘) | `IDEA_SPEC_CONFIDENCE: medium` | + | `0.2 โ‰ค ratio < 0.4` | **low** (`low-confidence`) | ์ •์ƒ dispatch + Blackboard `ideation.spec_confidence_tier=low` (์ด์ „ `low_spec_quality`์˜ ํ›„๊ณ„) | `IDEA_SPEC_CONFIDENCE: low` | + | `< 0.2` | **fallback** (`fallback-omit-spec`) | **v1.5.4 path**: advocate dispatch ์‹œ `idea.spec.json`์„ **์ „๋‹ฌํ•˜์ง€ ์•Š์Œ** (`IDEA_SPEC: ` โ€” `<...>` ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋Š” ๋ฆฌํ„ฐ๋Ÿด์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋Ÿฐํƒ€์ž„ substitution ๊ฒฐ๊ณผ; ์•„๋ž˜ ยง2 dispatch template๊ณผ ๋™์ผ ํ˜•์‹). Blackboard `ideation.spec_fallback_v1_5_4=true` ๊ธฐ๋ก. B-3 "Skip interview" ์„ ํƒ์ž๊ฐ€ ์ž๋™์œผ๋กœ ์ด ๊ฒฝ๋กœ ์ง„์ž… (ratio โ‰ˆ 0.11) | spec ๋ฏธ์ „๋‹ฌ (`IDEA_SPEC_CONFIDENCE` ๋ผ์ธ๋„ ๋ˆ„๋ฝ) | hard gate ์—†์Œ โ€” ํ•ด์ปคํ†ค ๋ฐ๋ชจ UX ์šฐ์„ . weak-replay short-circuit์ด ๋จผ์ € ๊ฑธ๋Ÿฌ์กŒ๋‹ค๋ฉด ์ด ๊ฒฝ๋กœ์—๋Š” ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. I_LEAD๋Š” Bash ๋„๊ตฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ stderr ๋Œ€์‹  Blackboard๋กœ ๊ธฐ๋ก. @@ -120,9 +120,17 @@ IDEA_SPEC: ```text ROLE: (P01 ~ P26 ์ค‘ ์„ ํƒ) IDEA: +# IDEA_SPEC + IDEA_SPEC_CONFIDENCE ๋‘ ์ค„์˜ **๊ตฌ์กฐ**(์–ด๋А ๋ผ์ธ์„ ํฌํ•จํ• ์ง€, +# ์–ด๋–ค confidence ๋ผ๋ฒจ์„ ์“ธ์ง€, fallback์—์„œ IDEA_SPEC_CONFIDENCE๋ฅผ ๋ˆ„๋ฝํ• ์ง€)๋Š” +# I_LEAD๊ฐ€ ยง1 Enforcement ๋‹จ๊ณ„์—์„œ +# `bash scripts/filled-ratio-gate.sh --prompt-fragment runs//idea.spec.json` +# ์˜ stdout์œผ๋กœ ๊ฒฐ์ •ํ•œ๋‹ค (byte-stable, 4-tier๋ณ„๋กœ ์ •ํ•ด์ง„ scaffold). I_LEAD๋Š” ๊ทธ +# scaffold์˜ `/idea.spec.json โ€ฆ>` ์ž๋ฆฌ์—๋งŒ ์‹ค์ œ JSON ๋ณธ๋ฌธ์„ +# ๋ผ์›Œ๋„ฃ๊ณ  ๊ทธ ์™ธ wordingยท๋ผ์ธ ์œ ๋ฌด๋Š” ์†๋Œ€์ง€ ์•Š๋Š”๋‹ค โ€” tier ํŒ๋‹จยทomit ์—ฌ๋ถ€ ๋“ฑ์€ +# advocate ์ชฝ์—์„œ second-guess ํ•˜์ง€ ์•Š๋Š”๋‹ค. fallback-omit-spec tier์—์„œ๋Š” +# IDEA_SPEC_CONFIDENCE ๋ผ์ธ์ด ์˜๋„์ ์œผ๋กœ ๋ˆ„๋ฝ๋˜์–ด ๋“ค์–ด์˜ค๋ฏ€๋กœ, advocate๋Š” ๊ทธ +# ๋ถ€์žฌ ์ž์ฒด๋ฅผ "spec ์—†์Œ" ์‹ ํ˜ธ๋กœ ํ•ด์„ํ•˜๋ฉด ๋œ๋‹ค (๋ณ„๋„์˜ default ๊ฐ’์„ ๋งŒ๋“ค์–ด๋‚ด์ง€ ๋ง ๊ฒƒ). IDEA_SPEC: - # ๋‹จ, A-4 fallback tier(< 0.2)์ธ ๊ฒฝ์šฐ IDEA_SPEC ๋ผ์ธ ์ž์ฒด๋ฅผ ๋นผ๊ณ  - # `IDEA_SPEC: `๋กœ ๋Œ€์ฒดํ•œ๋‹ค. # Advocate๋Š” spec์˜ ์ฑ„์›Œ์ง„ ํ•„๋“œ๋ฅผ ground truth๋กœ ์‚ผ๋˜, null/"unknown" ํ•„๋“œ๋Š” # ์ž์œ  ํ•ด์„ ๊ฐ€๋Šฅ. v1.7.0+ A-6: **๋ชจ๋“ ** spec ํ•ด์„์€ ๋ฐ˜๋“œ์‹œ 6-tuple์˜ # spec_alignment_notes์— ๊ธฐ๋ก (null ํ•„๋“œ๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅธ ๊ฒฝ์šฐ๋„). @@ -131,10 +139,11 @@ IDEA_SPEC: # v1.7.0+ A-4 โ€” A-4 ยง1 ํ‘œ ์ฐธ์กฐ. - # `high`: spec ๊ทธ๋Œ€๋กœ anchor. divergence ์ตœ์†Œํ™”. - # `medium`: spec์„ hint๋กœ. null ํ•„๋“œ๋Š” ์ž์œ  ํ•ด์„ OK, ์ฑ„์›Œ์ง„ ํ•„๋“œ๋Š” anchor. - # `low`: spec์€ ์•ฝํ•œ hint. ํฐ divergence ํ—ˆ์šฉ (์ตœ์†Œ ratio๊ฐ€ 4 required only์ธ ๊ฒฝ์šฐ). - # `fallback` tier์—์„œ๋Š” ์ด ๋ผ์ธ๋„ ํ•จ๊ป˜ ๋ˆ„๋ฝ๋œ๋‹ค (advocate๋Š” spec ๋ฐ›์ง€ ์•Š์Œ). + # `high` (mode=ground-truth) : spec ๊ทธ๋Œ€๋กœ anchor. divergence ์ตœ์†Œํ™”. + # `medium`(mode=hint) : spec์„ hint๋กœ. null ํ•„๋“œ๋Š” ์ž์œ  ํ•ด์„ OK, ์ฑ„์›Œ์ง„ ํ•„๋“œ๋Š” anchor. + # `low` (mode=low-confidence) : spec์€ ์•ฝํ•œ hint. ํฐ divergence ํ—ˆ์šฉ. + # `fallback-omit-spec` tier์—์„œ๋Š” ์ด ๋ผ์ธ ์ž์ฒด๊ฐ€ fragment์—์„œ ๋ˆ„๋ฝ๋œ๋‹ค + # (advocate๋Š” spec์„ ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ v1.5.4 marker ํ•œ ์ค„๋งŒ ๋ณธ๋‹ค). DOMAIN_HINT: MOCKUP_GUIDANCE: ํŽ˜๋ฅด์†Œ๋‚˜์— ๋งž๋Š” self-contained mockup.html (inline CSS only, max 500 lines) OUTPUT_FORMAT: