Skip to content

Commit 6f21891

Browse files
committed
Round 92: cross-category skill/thinking cross-link library registry
Add missing per-category skill-link completeness tests for agent, context, domain, and repo prompts; introduce library-wide cross-link registry mirroring Round 91 HR pattern; sync governance to Round 92.
1 parent 0f799db commit 6f21891

10 files changed

Lines changed: 184 additions & 11 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–91)
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–92)
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–91). Not agent instructions — operator checklist.
340+
Ongoing upkeep after panel close (Rounds 1–92). 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

@@ -364,3 +364,4 @@ Ongoing upkeep after panel close (Rounds 1–91). Not agent instructions — ope
364364
21. When editing `00-core/` Human Review coverage, keep `CORE_HUMAN_REVIEW_REQUIRED` and `CORE_HUMAN_REVIEW_EXEMPT` in `test_core_prompts_eval_harness.py` aligned with preamble `## Human Review` sections; run core HR parity tests.
365365
22. When editing Human Review coverage on thinking lenses or composable prompts (`01-thinking``06-repo`), keep frozen `*_HUMAN_REVIEW_REQUIRED` / `*_HUMAN_REVIEW_EXEMPT` sets in `test_*_prompts_eval_harness.py` aligned with preamble `## Human Review` sections; use `prompt_eval_helpers.assert_human_review_*` parity helpers and run HR set partition tests.
366366
23. When adding composable prompts or new categories, keep `PROMPT_LIBRARY_CATEGORIES` and `test_human_review_library_registry.py` aligned so frozen HR sets cover every `00-core``06-repo` prompt exactly once.
367+
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`.

reflective-prompt-library/PROJECT_KNOWLEDGE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ deferred promotions are recurrence-gated — see [panel backlog](plans/multi-age
7373
## Decision Index
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)
76+
- 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)
7677
- 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)
7778
- 2026-06-25 Round 90 panel — library-wide Human Review required/exempt set parity (`01-thinking``06-repo`) + DRY `prompt_eval_helpers` HR set guards → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7879
- 2026-06-25 Round 89 panel — `00-core` Human Review required/exempt set parity (`CORE_HUMAN_REVIEW_REQUIRED` / `CORE_HUMAN_REVIEW_EXEMPT`) → [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–91, options A–GE) 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–92, options A–GL) 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_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; 590+ 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)
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_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; 600+ 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)
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–91; 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–92; 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/multi-agent-panel-consensus-2026-06-25.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2632,3 +2632,48 @@ User directive (repeat): review prompts, plans, skills, and Socratic/critical-th
26322632

26332633
**Resealed 2026-06-25** after **Round 91** (options GC–GG). Human Review frozen sets are now cross-checked by a single library registry (`00-core``06-repo`). Holdout expansion remains recurrence-gated maintenance.
26342634

2635+
---
2636+
2637+
## Round 92 — cross-category skill/thinking cross-link library registry (2026-06-25)
2638+
2639+
**Options GH–GL** | Six-lens panel (Opus, Codex, Gemini, Composer, Sakana, GLM)
2640+
2641+
### Round 92 options
2642+
2643+
| ID | Proposal | Verdict |
2644+
| --- | --- | --- |
2645+
| GH | Missing `test_all_{agent,context,domain,repo}_prompts_have_skill_link` completeness guards in `test_prompt_cross_links.py` | **Agree** |
2646+
| GI | `test_prompt_skill_links_library_registry.py` cross-category `*_SKILL_LINKS` / `*_THINKING_LINKS` registry + library glob parity | **Agree** |
2647+
| GJ | GLOSSARY playbook step 24 + governance sync | **Agree** |
2648+
| GK | ROUTE holdout expansion | **Defer** |
2649+
| GL | Router / tenth skill / benchmark CI | **Reject** |
2650+
2651+
### Round 92 verdict table
2652+
2653+
| ID | Option | Verdict | Action |
2654+
| --- | --- | --- | --- |
2655+
| GH | Skill link completeness | **Agree** | four missing per-category `have_skill_link` tests |
2656+
| GI | Cross-link library registry | **Agree** | registry for composable categories + thinking consumer map |
2657+
| GJ | Playbook + docs | **Agree** | step 24; panel round 92 sync |
2658+
| GK | Holdout expansion | **Defer** | maintenance |
2659+
| GL | Router/tenth skill/benchmark CI | **Reject** | no change |
2660+
2661+
**All roles agree.**
2662+
2663+
## Implemented Changes (Round 92)
2664+
2665+
- `plans/tests/test_prompt_cross_links.py`: `test_all_{agent,context,domain,repo}_prompts_have_skill_link`
2666+
- `plans/tests/test_prompt_skill_links_library_registry.py`: cross-category skill/thinking link registry + library glob parity
2667+
- `GLOSSARY.md`: playbook Rounds 1–92; step 24 for cross-link library registry
2668+
- `QUALITY_GATES_SUMMARY.md`: cross-link registry note; panel Rounds 1–92; 600+ pytest floor
2669+
- `PROJECT_KNOWLEDGE.md`: Decision Index Round 92 entry
2670+
- `README.md`, `reflective-prompt-library/README.md`, `test_readme_governance.py`: panel round 92 sync
2671+
2672+
## Verification (Round 92)
2673+
2674+
- `make all`: pytest + ROUTE-001/002/003 100%
2675+
2676+
## Panel status (updated)
2677+
2678+
**Resealed 2026-06-25** after **Round 92** (options GH–GL). Primary workflow surface cross-links are now library-registry checked (`00-core`, `02-engineering``06-repo`) with thinking-lens consumer map parity for `01-thinking`. Holdout expansion remains recurrence-gated maintenance.
2679+

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ def test_round_boundary_terms_present(glossary_text: str):
3030
assert heading in glossary_text, f"missing glossary section: {heading}"
3131

3232

33-
def test_maintenance_playbook_references_round_91(glossary_text: str):
33+
def test_maintenance_playbook_references_round_92(glossary_text: str):
3434
playbook = glossary_text.split("## Governance Maintenance Playbook", 1)[1]
35-
assert "Rounds 1–91" in playbook
36-
assert "Rounds 1–90" not in playbook and "Rounds 1-90" not in playbook
35+
assert "Rounds 1–92" in playbook
36+
assert "Rounds 1–91" not in playbook and "Rounds 1-90" not in playbook
3737

3838

3939

@@ -44,7 +44,7 @@ def test_maintenance_playbook_steps_on_separate_lines(glossary_text: str):
4444
assert re.search(r"guards\.\d+\.", playbook) is None, (
4545
"playbook steps merged without newline between numbers"
4646
)
47-
for step in ("17.", "18.", "19.", "20.", "21.", "22.", "23."):
47+
for step in ("17.", "18.", "19.", "20.", "21.", "22.", "23.", "24."):
4848
assert step in playbook
4949

5050

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,10 @@ def test_all_agent_prompts_have_thinking_cross_link():
463463
assert set(AGENT_THINKING_LINKS) == {p.name for p in AGENT_PROMPTS}
464464

465465

466+
def test_all_agent_prompts_have_skill_link():
467+
assert set(AGENT_SKILL_LINKS) == {p.name for p in AGENT_PROMPTS}
468+
469+
466470
@pytest.mark.parametrize("prompt_name,skill_refs", AGENT_SKILL_LINKS.items())
467471
def test_agent_prompt_maps_workflow_skill(prompt_name: str, skill_refs: tuple[str, ...]):
468472
preamble = _preamble(AGENT_DIR / prompt_name)
@@ -512,6 +516,10 @@ def test_all_context_prompts_have_thinking_cross_link():
512516
assert set(CONTEXT_THINKING_LINKS) == {p.name for p in CONTEXT_PROMPTS}
513517

514518

519+
def test_all_context_prompts_have_skill_link():
520+
assert set(CONTEXT_SKILL_LINKS) == {p.name for p in CONTEXT_PROMPTS}
521+
522+
515523
@pytest.mark.parametrize("prompt_name,skill_refs", CONTEXT_SKILL_LINKS.items())
516524
def test_context_prompt_maps_workflow_skill(prompt_name: str, skill_refs: tuple[str, ...]):
517525
preamble = _preamble(CONTEXT_DIR / prompt_name)
@@ -547,6 +555,10 @@ def test_all_domain_prompts_have_thinking_cross_link():
547555
assert set(DOMAIN_THINKING_LINKS) == {p.name for p in DOMAIN_PROMPTS}
548556

549557

558+
def test_all_domain_prompts_have_skill_link():
559+
assert set(DOMAIN_SKILL_LINKS) == {p.name for p in DOMAIN_PROMPTS}
560+
561+
550562
@pytest.mark.parametrize("prompt_name,skill_refs", DOMAIN_SKILL_LINKS.items())
551563
def test_domain_prompt_maps_workflow_skill(prompt_name: str, skill_refs: tuple[str, ...]):
552564
preamble = _preamble(DOMAIN_DIR / prompt_name)
@@ -582,6 +594,10 @@ def test_all_repo_prompts_have_thinking_cross_link():
582594
assert set(REPO_THINKING_LINKS) == {p.name for p in REPO_PROMPTS}
583595

584596

597+
def test_all_repo_prompts_have_skill_link():
598+
assert set(REPO_SKILL_LINKS) == {p.name for p in REPO_PROMPTS}
599+
600+
585601
@pytest.mark.parametrize("prompt_name,skill_refs", REPO_SKILL_LINKS.items())
586602
def test_repo_prompt_maps_workflow_skill(prompt_name: str, skill_refs: tuple[str, ...]):
587603
preamble = _preamble(REPO_DIR / prompt_name)
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
"""Cross-category Primary workflow surface / thinking-lens link registry anti-drift."""
2+
3+
import sys
4+
from pathlib import Path
5+
6+
import pytest
7+
8+
sys.path.insert(0, str(Path(__file__).parent))
9+
10+
from prompt_eval_helpers import PROMPT_LIBRARY_CATEGORIES # noqa: E402
11+
from test_prompt_cross_links import ( # noqa: E402
12+
AGENT_PROMPTS,
13+
AGENT_SKILL_LINKS,
14+
AGENT_THINKING_LINKS,
15+
CONTEXT_PROMPTS,
16+
CONTEXT_SKILL_LINKS,
17+
CONTEXT_THINKING_LINKS,
18+
CORE_PROMPTS,
19+
CORE_SKILL_LINKS,
20+
CORE_THINKING_LINKS,
21+
DOMAIN_PROMPTS,
22+
DOMAIN_SKILL_LINKS,
23+
DOMAIN_THINKING_LINKS,
24+
ENGINEERING_PROMPTS,
25+
ENGINEERING_SKILL_LINKS,
26+
ENGINEERING_THINKING_LINKS,
27+
REPO_PROMPTS,
28+
REPO_SKILL_LINKS,
29+
REPO_THINKING_LINKS,
30+
THINKING_LENS_SKILL_CONSUMERS,
31+
THINKING_PROMPTS,
32+
)
33+
34+
LIBRARY_ROOT = Path(__file__).parent.parent.parent
35+
36+
CROSS_LINK_CATEGORY_REGISTRY = (
37+
("00-core", CORE_PROMPTS, CORE_SKILL_LINKS, CORE_THINKING_LINKS),
38+
(
39+
"02-engineering",
40+
ENGINEERING_PROMPTS,
41+
ENGINEERING_SKILL_LINKS,
42+
ENGINEERING_THINKING_LINKS,
43+
),
44+
(
45+
"03-context",
46+
CONTEXT_PROMPTS,
47+
CONTEXT_SKILL_LINKS,
48+
CONTEXT_THINKING_LINKS,
49+
),
50+
("04-agent", AGENT_PROMPTS, AGENT_SKILL_LINKS, AGENT_THINKING_LINKS),
51+
(
52+
"05-domain",
53+
DOMAIN_PROMPTS,
54+
DOMAIN_SKILL_LINKS,
55+
DOMAIN_THINKING_LINKS,
56+
),
57+
("06-repo", REPO_PROMPTS, REPO_SKILL_LINKS, REPO_THINKING_LINKS),
58+
)
59+
60+
61+
def test_cross_link_registry_lists_composable_categories_except_thinking():
62+
assert tuple(cat for cat, *_ in CROSS_LINK_CATEGORY_REGISTRY) == tuple(
63+
c for c in PROMPT_LIBRARY_CATEGORIES if c != "01-thinking"
64+
)
65+
66+
67+
@pytest.mark.parametrize(
68+
"category,prompts,skill_links,thinking_links",
69+
CROSS_LINK_CATEGORY_REGISTRY,
70+
ids=[row[0] for row in CROSS_LINK_CATEGORY_REGISTRY],
71+
)
72+
def test_cross_link_registry_category_dicts_cover_prompts(
73+
category: str,
74+
prompts: tuple[Path, ...],
75+
skill_links: dict[str, tuple[str, ...]],
76+
thinking_links: dict[str, tuple[str, ...]],
77+
):
78+
prompt_names = {p.name for p in prompts}
79+
assert set(skill_links) == prompt_names, f"{category}: SKILL_LINKS keys != prompts"
80+
assert set(thinking_links) == prompt_names, (
81+
f"{category}: THINKING_LINKS keys != prompts"
82+
)
83+
84+
85+
def test_cross_link_registry_library_wide_unique_filenames():
86+
basenames: list[str] = []
87+
for _category, prompts, _skill_links, _thinking_links in CROSS_LINK_CATEGORY_REGISTRY:
88+
basenames.extend(p.name for p in prompts)
89+
basenames.extend(p.name for p in THINKING_PROMPTS)
90+
assert len(basenames) == len(frozenset(basenames)), (
91+
"duplicate prompt basenames across categories"
92+
)
93+
94+
95+
def test_cross_link_registry_matches_library_glob():
96+
globbed: list[Path] = []
97+
for category in PROMPT_LIBRARY_CATEGORIES:
98+
globbed.extend(sorted((LIBRARY_ROOT / category).glob("*.md")))
99+
registry_paths = [
100+
p
101+
for _category, prompts, _skill_links, _thinking_links in CROSS_LINK_CATEGORY_REGISTRY
102+
for p in prompts
103+
]
104+
registry_paths.extend(THINKING_PROMPTS)
105+
assert sorted(globbed) == sorted(registry_paths)
106+
107+
108+
def test_thinking_lenses_tracked_in_consumer_map():
109+
expected = {f"01-thinking/{path.name}" for path in THINKING_PROMPTS}
110+
assert set(THINKING_LENS_SKILL_CONSUMERS) == expected

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
METHODOLOGY_MAP_EN = Path(__file__).parent.parent.parent / "METHODOLOGY_MAP.md"
1111
SKILL_MAP = Path(__file__).parent.parent.parent / "skills" / "skill-map.md"
1212

13-
CURRENT_PANEL_ROUND = "91"
14-
CURRENT_PANEL_OPTIONS = "A–GE"
13+
CURRENT_PANEL_ROUND = "92"
14+
CURRENT_PANEL_OPTIONS = "A–GL"
1515

1616

1717
@pytest.fixture(scope="module")

0 commit comments

Comments
 (0)