Skip to content

Commit 2485b20

Browse files
committed
Round 95: cross-category workflow skill coverage library registry
Six-lens panel (GW–HA): DRY assert_category_workflow_skill_coverage, frozen *_COVER_WORKFLOW_SKILLS per harness, and test_workflow_skill_coverage_library_registry.py with 01-thinking exempt.
1 parent 19242e4 commit 2485b20

16 files changed

Lines changed: 181 additions & 61 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Full library docs: [reflective-prompt-library/README.md](reflective-prompt-libra
2121
## Governance
2222

2323
- **Contributing:** [CONTRIBUTING.md](CONTRIBUTING.md) — quality gates, routing maintenance (R8–R12), `make all`
24-
- **Panel record:** [multi-agent-panel-consensus](reflective-prompt-library/plans/multi-agent-panel-consensus-2026-06-25.md) — six-lens Socratic consensus (Rounds 1–94)
24+
- **Panel record:** [multi-agent-panel-consensus](reflective-prompt-library/plans/multi-agent-panel-consensus-2026-06-25.md) — six-lens Socratic consensus (Rounds 1–95)
2525
- **Operator playbook:** [GLOSSARY.md](reflective-prompt-library/GLOSSARY.md) — Governance Maintenance Playbook
2626

2727
The repository contains:

reflective-prompt-library/GLOSSARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ Curated top-of-cheatsheet summary of high-confusion routing traps (ROUTE-002 hol
337337

338338
## Governance Maintenance Playbook / 治理維護手冊
339339

340-
Ongoing upkeep after panel close (Rounds 1–94). Not agent instructions — operator checklist.
340+
Ongoing upkeep after panel close (Rounds 1–95). Not agent instructions — operator checklist.
341341

342342
**Operational test:** Before router tuning, add fresh ROUTE-002/003 holdout phrases; run `make all`; record decisions in `PROJECT_KNOWLEDGE.md` Decision Index when governance surface changes.
343343

@@ -367,3 +367,4 @@ Ongoing upkeep after panel close (Rounds 1–94). Not agent instructions — ope
367367
24. When adding composable prompts or editing `*_SKILL_LINKS` / `*_THINKING_LINKS`, keep per-category dict keys aligned with prompt globs and run `test_prompt_skill_links_library_registry.py` plus `test_all_*_prompts_have_skill_link` in `test_prompt_cross_links.py`.
368368
25. When adding composable prompts or editing eval_harness contract preambles, keep `PROMPT_CONTRACT_HEADINGS` / `PROMPT_EVAL_MIN_SCORE` in `prompt_eval_helpers.py` and run `test_prompt_contract_library_registry.py` plus per-category `test_*_prompts_eval_harness.py` guards.
369369
26. When editing composable prompt Purpose preambles, keep `Primary workflow surface(s)` / Supporting-lens lines via `assert_primary_workflow_surface_preamble` in `prompt_eval_helpers.py`; update `SUPPORTING_LENS_PRIMARY_SURFACE_BY_CATEGORY` for exemptions; run `test_prompt_primary_workflow_surface_library_registry.py` plus per-category `test_*_prompts_eval_harness.py` guards.
370+
27. When editing category workflow skill coverage tuples, keep frozen `*_COVER_WORKFLOW_SKILLS` in `test_*_prompts_eval_harness.py` aligned with `assert_category_workflow_skill_coverage`; `01-thinking` stays exempt (consumer graph); run `test_workflow_skill_coverage_library_registry.py`.

reflective-prompt-library/PROJECT_KNOWLEDGE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ deferred promotions are recurrence-gated — see [panel backlog](plans/multi-age
7474

7575
- 2026-06-25 Round 85 panel — composable prompt Primary workflow surface preamble guards (`test_*_prompts_eval_harness.py`) + Supporting-lens exemption → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7676
- 2026-06-25 Round 94 panel — cross-category Primary workflow surface preamble library registry (`test_prompt_primary_workflow_surface_library_registry.py`, DRY `assert_primary_workflow_surface_preamble`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
77+
- 2026-06-25 Round 95 panel — cross-category workflow skill coverage library registry (`test_workflow_skill_coverage_library_registry.py`, DRY `assert_category_workflow_skill_coverage`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7778
- 2026-06-25 Round 93 panel — cross-category eval_harness contract heading library registry (`test_prompt_contract_library_registry.py`, DRY `PROMPT_CONTRACT_HEADINGS`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7879
- 2026-06-25 Round 92 panel — cross-category skill/thinking cross-link library registry (`test_prompt_skill_links_library_registry.py`) + missing `test_all_*_prompts_have_skill_link` guards → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7980
- 2026-06-25 Round 91 panel — cross-category Human Review library registry (`test_human_review_library_registry.py`, `PROMPT_LIBRARY_CATEGORIES`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)

reflective-prompt-library/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Pick **Strictness L1–L6** first (`skills/reflective-dispatch/SKILL.md`, [GLOSS
3030

3131
## Governance Panel Record
3232

33-
Multi-agent Socratic consensus on project goals and the nine skills (Rounds 1–94, options A–GV) is recorded in [plans/multi-agent-panel-consensus-2026-06-25.md](plans/multi-agent-panel-consensus-2026-06-25.md). Run `make all` before claiming routing or governance changes are verified.
33+
Multi-agent Socratic consensus on project goals and the nine skills (Rounds 1–95, options A–HA) is recorded in [plans/multi-agent-panel-consensus-2026-06-25.md](plans/multi-agent-panel-consensus-2026-06-25.md). Run `make all` before claiming routing or governance changes are verified.
3434

3535
## Directory Map
3636

reflective-prompt-library/plans/QUALITY_GATES_SUMMARY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ ROUTE-002 measures unseen phrasing separately from ROUTE-001. Round 7 (2026-06-2
314314
2. **ROUTE-001/002/003 in CI** — 128 + 102 + 53 paraphrases at 100% consistency (seeded fixtures); `validate_route_fixture.py` gates minimum coverage
315315
3. **Governance validators** — links, lint, governance metadata, PROJECT_KNOWLEDGE, benchmark fixture, skill examples
316316
4. **Harness policy docs** — CONTRIBUTING, AGENTS, SKILL_INSTALLATION, maintenance playbook
317-
5. **Doc anti-drift** — `test_routing_contract.py`, cheatsheet parity tests, `test_readme_governance.py`, `test_thinking_prompts_eval_harness.py`, `test_engineering_prompts_eval_harness.py`, `test_prompt_cross_links.py`, `test_core_prompts_eval_harness.py`, `test_human_review_library_registry.py`, `test_prompt_skill_links_library_registry.py`, `test_prompt_contract_library_registry.py`, `test_prompt_primary_workflow_surface_library_registry.py`, `test_agent_prompts_eval_harness.py`, `test_context_prompts_eval_harness.py`, `test_domain_prompts_eval_harness.py`, `test_repo_prompts_eval_harness.py`, `test_validate_governance.py`, `test_validate_links.py`, `test_lint_skills.py`, `test_skill_module_contract.py` (Escalation subsection + Trigger/Methods/Output/Never; 630+ pytest anti-drift suite in CI); reciprocal thinking-lens ↔ skill checks and `00-core` + composable `Primary workflow surface(s)` ↔ `*_SKILL_LINKS` parity in `test_prompt_cross_links.py` (including strict Primary workflow surfaces parity via `test_thinking_lens_primary_surfaces_match_consumer_graph`); Human Review + Escalation route-target guards in thinking/skill contract tests; composable `Primary workflow surface(s)` / Supporting-lens preamble guards and composable `## Human Review` preamble guards (route to `reflective-risk`) via `prompt_eval_helpers.assert_human_review_preamble` in `test_*_prompts_eval_harness.py`; frozen `*_HUMAN_REVIEW_REQUIRED` / `*_HUMAN_REVIEW_EXEMPT` set parity across all prompt categories (Round 90); library-wide contract heading registry (`PROMPT_CONTRACT_HEADINGS`, Round 93)
317+
5. **Doc anti-drift** — `test_routing_contract.py`, cheatsheet parity tests, `test_readme_governance.py`, `test_thinking_prompts_eval_harness.py`, `test_engineering_prompts_eval_harness.py`, `test_prompt_cross_links.py`, `test_core_prompts_eval_harness.py`, `test_human_review_library_registry.py`, `test_prompt_skill_links_library_registry.py`, `test_prompt_contract_library_registry.py`, `test_prompt_primary_workflow_surface_library_registry.py`, `test_workflow_skill_coverage_library_registry.py`, `test_agent_prompts_eval_harness.py`, `test_context_prompts_eval_harness.py`, `test_domain_prompts_eval_harness.py`, `test_repo_prompts_eval_harness.py`, `test_validate_governance.py`, `test_validate_links.py`, `test_lint_skills.py`, `test_skill_module_contract.py` (Escalation subsection + Trigger/Methods/Output/Never; 640+ pytest anti-drift suite in CI); reciprocal thinking-lens ↔ skill checks and `00-core` + composable `Primary workflow surface(s)` ↔ `*_SKILL_LINKS` parity in `test_prompt_cross_links.py` (including strict Primary workflow surfaces parity via `test_thinking_lens_primary_surfaces_match_consumer_graph`); Human Review + Escalation route-target guards in thinking/skill contract tests; composable `Primary workflow surface(s)` / Supporting-lens preamble guards and composable `## Human Review` preamble guards (route to `reflective-risk`) via `prompt_eval_helpers.assert_human_review_preamble` in `test_*_prompts_eval_harness.py`; frozen `*_HUMAN_REVIEW_REQUIRED` / `*_HUMAN_REVIEW_EXEMPT` set parity across all prompt categories (Round 90); library-wide contract heading registry (`PROMPT_CONTRACT_HEADINGS`, Round 93); workflow skill coverage registry (`*_COVER_WORKFLOW_SKILLS`, Round 95)
318318

319319
### Ongoing maintenance (not blockers)
320320

@@ -384,4 +384,4 @@ Phase 1 quality-gate tooling and documentation are **complete**. Routing consist
384384
- ✅ Benchmark fixture gate plus optional manual benchmark runs
385385
- ✅ Research-backed design decisions
386386

387-
The project is positioned to grow sustainably with quality discipline built in from the start. **No open implementation blockers** remain from panel Rounds 1–94; work is recurrence-gated maintenance per playbook. The next measurable quality target is **holdout expansion before router tuning** and optional manual baseline-vs-skill benchmark runs — not shipping new core skills without promotion evidence.
387+
The project is positioned to grow sustainably with quality discipline built in from the start. **No open implementation blockers** remain from panel Rounds 1–95; work is recurrence-gated maintenance per playbook. The next measurable quality target is **holdout expansion before router tuning** and optional manual baseline-vs-skill benchmark runs — not shipping new core skills without promotion evidence.

reflective-prompt-library/plans/tests/prompt_eval_helpers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,13 @@ def assert_primary_workflow_surface_preamble(
118118
f"{prompt_path.name} Purpose should list Primary workflow surface(s)"
119119
)
120120

121+
def assert_category_workflow_skill_coverage(
122+
prompts: tuple[Path, ...],
123+
required_skills: tuple[str, ...],
124+
category_label: str,
125+
) -> None:
126+
"""Category corpus must mention each required workflow skill at least once."""
127+
text = "\n".join(p.read_text(encoding="utf-8") for p in prompts)
128+
for skill in required_skills:
129+
assert skill in text, f"{category_label} should reference {skill}"
130+

reflective-prompt-library/plans/tests/test_agent_prompts_eval_harness.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
sys.path.insert(0, str(Path(__file__).parent))
1010

1111
from eval_harness import EvalHarness # noqa: E402
12-
from prompt_eval_helpers import assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
12+
from prompt_eval_helpers import assert_category_workflow_skill_coverage, assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
1313

1414
REQUIRED_HEADINGS = PROMPT_CONTRACT_HEADINGS
1515
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
@@ -18,6 +18,13 @@
1818
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
1919

2020
AGENT_PROMPTS = tuple(sorted(AGENT_DIR.glob("*.md")))
21+
AGENT_COVER_WORKFLOW_SKILLS = (
22+
"reflective-dispatch",
23+
"reflective-spec-plan",
24+
"reflective-review",
25+
"reflective-handoff-retro",
26+
"reflective-research",
27+
)
2128
AGENT_PROMPTS_WITH_HUMAN_REVIEW = prompts_with_human_review(AGENT_PROMPTS)
2229
AGENT_HUMAN_REVIEW_REQUIRED = frozenset({
2330
"agent-scaffold-provenance.md",
@@ -62,15 +69,9 @@ def test_agent_prompts_reference_workflow_skills():
6269

6370

6471
def test_agent_prompts_cover_agent_workflow_surfaces():
65-
text = "\n".join(p.read_text(encoding="utf-8") for p in AGENT_PROMPTS)
66-
for skill in (
67-
"reflective-dispatch",
68-
"reflective-spec-plan",
69-
"reflective-review",
70-
"reflective-handoff-retro",
71-
"reflective-research",
72-
):
73-
assert skill in text, f"04-agent should reference {skill}"
72+
assert_category_workflow_skill_coverage(
73+
AGENT_PROMPTS, AGENT_COVER_WORKFLOW_SKILLS, "04-agent"
74+
)
7475

7576

7677
def test_agent_prompts_have_workflow_surface_preamble_line():

reflective-prompt-library/plans/tests/test_context_prompts_eval_harness.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
sys.path.insert(0, str(Path(__file__).parent))
1010

1111
from eval_harness import EvalHarness # noqa: E402
12-
from prompt_eval_helpers import assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
12+
from prompt_eval_helpers import assert_category_workflow_skill_coverage, assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
1313

1414
REQUIRED_HEADINGS = PROMPT_CONTRACT_HEADINGS
1515
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
@@ -18,6 +18,12 @@
1818
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
1919

2020
CONTEXT_PROMPTS = tuple(sorted(CONTEXT_DIR.glob("*.md")))
21+
CONTEXT_COVER_WORKFLOW_SKILLS = (
22+
"reflective-dispatch",
23+
"reflective-brief",
24+
"reflective-handoff-retro",
25+
"reflective-research",
26+
)
2127
CONTEXT_PROMPTS_WITH_HUMAN_REVIEW = prompts_with_human_review(CONTEXT_PROMPTS)
2228
CONTEXT_HUMAN_REVIEW_REQUIRED = frozenset({
2329
"context-handoff.md",
@@ -60,14 +66,9 @@ def test_context_prompts_reference_workflow_skills():
6066

6167

6268
def test_context_prompts_cover_context_workflow_surfaces():
63-
text = "\n".join(p.read_text(encoding="utf-8") for p in CONTEXT_PROMPTS)
64-
for skill in (
65-
"reflective-dispatch",
66-
"reflective-brief",
67-
"reflective-handoff-retro",
68-
"reflective-research",
69-
):
70-
assert skill in text, f"03-context should reference {skill}"
69+
assert_category_workflow_skill_coverage(
70+
CONTEXT_PROMPTS, CONTEXT_COVER_WORKFLOW_SKILLS, "03-context"
71+
)
7172

7273

7374
def test_context_prompts_have_primary_workflow_surfaces_line():

reflective-prompt-library/plans/tests/test_core_prompts_eval_harness.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
PROMPT_CONTRACT_HEADINGS,
1414
PROMPT_EVAL_MIN_SCORE,
1515
assert_primary_workflow_surface_preamble,
16-
assert_prompt_contract_headings, # noqa: E402
16+
assert_category_workflow_skill_coverage, assert_prompt_contract_headings, # noqa: E402
1717
assert_human_review_exempt_have_no_preamble_section,
1818
assert_human_review_preamble,
1919
assert_human_review_required_matches_detection,
@@ -28,6 +28,10 @@
2828
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
2929

3030
CORE_PROMPTS = tuple(sorted(CORE_DIR.glob("*.md")))
31+
CORE_COVER_WORKFLOW_SKILLS = (
32+
"reflective-brief",
33+
"reflective-dispatch",
34+
)
3135
CORE_HUMAN_REVIEW_REQUIRED = frozenset({
3236
"core-full.md",
3337
"core-minimal.md",
@@ -72,9 +76,9 @@ def test_core_prompts_reference_workflow_skills():
7276

7377

7478
def test_core_prompts_cover_brief_and_dispatch():
75-
text = "\n".join(p.read_text(encoding="utf-8") for p in CORE_PROMPTS)
76-
assert "reflective-brief" in text
77-
assert "reflective-dispatch" in text
79+
assert_category_workflow_skill_coverage(
80+
CORE_PROMPTS, CORE_COVER_WORKFLOW_SKILLS, "00-core"
81+
)
7882

7983

8084
def test_core_prompts_have_primary_workflow_surfaces_line():

reflective-prompt-library/plans/tests/test_domain_prompts_eval_harness.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
sys.path.insert(0, str(Path(__file__).parent))
1010

1111
from eval_harness import EvalHarness # noqa: E402
12-
from prompt_eval_helpers import assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
12+
from prompt_eval_helpers import assert_category_workflow_skill_coverage, assert_human_review_preamble, assert_primary_workflow_surface_preamble, prompts_with_human_review, assert_human_review_required_matches_detection, assert_human_review_exempt_have_no_preamble_section, assert_human_review_sets_partition, PROMPT_CONTRACT_HEADINGS, PROMPT_EVAL_MIN_SCORE, assert_prompt_contract_headings # noqa: E402
1313

1414
REQUIRED_HEADINGS = PROMPT_CONTRACT_HEADINGS
1515
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
@@ -18,6 +18,13 @@
1818
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
1919

2020
DOMAIN_PROMPTS = tuple(sorted(DOMAIN_DIR.glob("*.md")))
21+
DOMAIN_COVER_WORKFLOW_SKILLS = (
22+
"reflective-risk",
23+
"reflective-research",
24+
"reflective-brief",
25+
"reflective-spec-plan",
26+
"reflective-review",
27+
)
2128
DOMAIN_PROMPTS_WITH_HUMAN_REVIEW = prompts_with_human_review(DOMAIN_PROMPTS)
2229
DOMAIN_HUMAN_REVIEW_REQUIRED = frozenset({
2330
"creative-template.md",
@@ -60,15 +67,9 @@ def test_domain_prompts_reference_workflow_skills():
6067

6168

6269
def test_domain_prompts_cover_domain_workflow_surfaces():
63-
text = "\n".join(p.read_text(encoding="utf-8") for p in DOMAIN_PROMPTS)
64-
for skill in (
65-
"reflective-risk",
66-
"reflective-research",
67-
"reflective-brief",
68-
"reflective-spec-plan",
69-
"reflective-review",
70-
):
71-
assert skill in text, f"05-domain should reference {skill}"
70+
assert_category_workflow_skill_coverage(
71+
DOMAIN_PROMPTS, DOMAIN_COVER_WORKFLOW_SKILLS, "05-domain"
72+
)
7273

7374

7475
def test_domain_prompts_have_primary_workflow_surfaces_line():

0 commit comments

Comments
 (0)