Skip to content

Commit febb1c4

Browse files
committed
Round 98: cross-category eval_harness fixture library registry
Add PROMPT_LIBRARY_REPO_ROOT and make_category_eval_harness_fixture DRY helper; refactor all seven category harness files; add test_prompt_eval_harness_fixture_library_registry.py; sync governance (GLOSSARY step 30, panel record, Decision Index). 672 pytest.
1 parent 963ac0c commit febb1c4

18 files changed

Lines changed: 204 additions & 50 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–97)
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–98)
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 & 2 deletions
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–97). Not agent instructions — operator checklist.
340+
Ongoing upkeep after panel close (Rounds 1–98). 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

@@ -369,5 +369,5 @@ Ongoing upkeep after panel close (Rounds 1–97). Not agent instructions — ope
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.
370370
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`.
371371
28. When editing eval_harness score floors, keep `PROMPT_EVAL_MIN_SCORE` in `prompt_eval_helpers.py` and use `assert_prompt_meets_eval_harness_floor` in per-category `test_*_prompts_eval_harness.py` guards; run `test_prompt_eval_harness_score_library_registry.py`.
372-
28. When editing eval_harness score floors, keep `PROMPT_EVAL_MIN_SCORE` in `prompt_eval_helpers.py` and use `assert_prompt_meets_eval_harness_floor` in per-category `test_*_prompts_eval_harness.py` guards; run `test_prompt_eval_harness_score_library_registry.py`.
373372
29. When editing per-category `reference_workflow_skills` guards, use `assert_prompt_references_workflow_skill` in `prompt_eval_helpers.py` (preamble-scoped, not fenced templates); run `test_prompt_workflow_skill_reference_library_registry.py` plus per-category harness guards.
373+
30. When editing per-category eval_harness fixtures, keep `PROMPT_LIBRARY_REPO_ROOT` and `make_category_eval_harness_fixture` in `prompt_eval_helpers.py`; run `test_prompt_eval_harness_fixture_library_registry.py` plus per-category harness guards.

reflective-prompt-library/PROJECT_KNOWLEDGE.md

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

7373
## Decision Index
7474

75+
- 2026-06-25 Round 98 panel — cross-category eval_harness fixture library registry (`test_prompt_eval_harness_fixture_library_registry.py`, DRY `make_category_eval_harness_fixture`, `PROMPT_LIBRARY_REPO_ROOT`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7576
- 2026-06-25 Round 97 panel — cross-category workflow skill reference library registry (`test_prompt_workflow_skill_reference_library_registry.py`, DRY `assert_prompt_references_workflow_skill`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7677
- 2026-06-25 Round 96 panel — cross-category eval_harness score floor library registry (`test_prompt_eval_harness_score_library_registry.py`, DRY `assert_prompt_meets_eval_harness_floor`) → [record](plans/multi-agent-panel-consensus-2026-06-25.md)
7778
- 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)

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–97, options A–HK) 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–98, options A–HP) 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_workflow_skill_coverage_library_registry.py`, `test_prompt_eval_harness_score_library_registry.py`, `test_prompt_workflow_skill_reference_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; 660+ 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); eval_harness score floor registry (`PROMPT_EVAL_MIN_SCORE`, Round 96); workflow skill reference registry (`assert_prompt_references_workflow_skill`, Round 97)
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_prompt_eval_harness_score_library_registry.py`, `test_prompt_workflow_skill_reference_library_registry.py`, `test_prompt_eval_harness_fixture_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; 670+ 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); eval_harness score floor registry (`PROMPT_EVAL_MIN_SCORE`, Round 96); workflow skill reference registry (`assert_prompt_references_workflow_skill`, Round 97); eval_harness fixture registry (`make_category_eval_harness_fixture`, Round 98)
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–97; 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–98; 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: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,3 +2935,55 @@ User directive (repeat): review prompts, plans, skills, and Socratic/critical-th
29352935

29362936
**Resealed 2026-06-25** after **Round 97** (options HG–HK). Workflow skill references are now library-registry checked across all `00-core``06-repo` categories with shared `assert_prompt_references_workflow_skill` (preamble-scoped). Holdout expansion remains recurrence-gated maintenance.
29372937

2938+
## Round 98 — cross-category eval_harness fixture library registry (2026-06-25)
2939+
2940+
**Options HL–HP** | Six-lens panel (Opus, Codex, Gemini, Composer, Sakana, GLM)
2941+
2942+
### Round 98 options
2943+
2944+
| ID | Proposal | Verdict |
2945+
| --- | --- | --- |
2946+
| HL | DRY `make_category_eval_harness_fixture` + `PROMPT_LIBRARY_REPO_ROOT` in `prompt_eval_helpers.py` | **Agree** |
2947+
| HM | `test_prompt_eval_harness_fixture_library_registry.py` — fixture + `REPO_ROOT` parity registry | **Agree** |
2948+
| HN | GLOSSARY playbook step 30 + governance sync | **Agree** |
2949+
| HO | ROUTE holdout expansion | **Defer** |
2950+
| HP | Router / tenth skill / benchmark CI | **Reject** |
2951+
2952+
### Round 98 verdict table
2953+
2954+
| ID | Option | Verdict | Action |
2955+
| --- | --- | --- | --- |
2956+
| HL | EvalHarness fixture DRY factory | **Agree** | `make_category_eval_harness_fixture` + `PROMPT_LIBRARY_REPO_ROOT` |
2957+
| HM | EvalHarness fixture library registry | **Agree** | `test_prompt_eval_harness_fixture_library_registry.py` |
2958+
| HN | Playbook + docs | **Agree** | step 30; panel round 98 sync |
2959+
| HO | Holdout expansion | **Defer** | maintenance |
2960+
| HP | Router/tenth skill/benchmark CI | **Reject** | no change |
2961+
2962+
### Socratic rationale (Round 98)
2963+
2964+
- **Opus:** Round 97 closed workflow skill references; seven per-category harness files still duplicate identical module-scoped `EvalHarness` fixtures with no library-wide falsifiability.
2965+
- **Codex:** Centralizing `make_category_eval_harness_fixture` prevents `repo_root` drift; `PROMPT_LIBRARY_REPO_ROOT` object-identity checks catch path miscalculations.
2966+
- **Gemini:** Zero runtime cost; removes boilerplate only.
2967+
- **Composer:** Mirrors R91–R97 registry pattern; one factory + one registry file.
2968+
- **Sakana:** Fixture parity documents that all categories evaluate prompts against the same TeaPrompt root.
2969+
- **GLM:** Playbook step 30 gives operators a single checklist line for harness fixture edits.
2970+
2971+
**All roles agree.**
2972+
2973+
## Implemented Changes (Round 98)
2974+
2975+
- `plans/tests/prompt_eval_helpers.py`: `PROMPT_LIBRARY_REPO_ROOT`, `make_category_eval_harness_fixture`
2976+
- `plans/tests/test_*_prompts_eval_harness.py`: DRY harness fixtures via shared factory
2977+
- `plans/tests/test_prompt_eval_harness_fixture_library_registry.py`: cross-category fixture registry
2978+
- `GLOSSARY.md`: playbook Rounds 1–98; step 30 for eval_harness fixture library registry; dedupe step 28
2979+
- `QUALITY_GATES_SUMMARY.md`: fixture registry note; panel Rounds 1–98; 670+ pytest floor
2980+
- `PROJECT_KNOWLEDGE.md`: Decision Index Round 98 entry
2981+
- `README.md`, `reflective-prompt-library/README.md`, `test_readme_governance.py`: panel round 98 sync
2982+
2983+
## Verification (Round 98)
2984+
2985+
- `make all`: 672 pytest + ROUTE-001/002/003 100%
2986+
2987+
---
2988+
2989+
**Resealed 2026-06-25** after **Round 98** (options HL–HP). Eval_harness fixtures are now library-registry checked across all `00-core``06-repo` categories with shared `make_category_eval_harness_fixture` and `PROMPT_LIBRARY_REPO_ROOT`. Holdout expansion remains recurrence-gated maintenance.

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@
2424

2525
PROMPT_EVAL_MIN_SCORE = 80.0
2626

27+
PROMPT_LIBRARY_REPO_ROOT = str(Path(__file__).resolve().parent.parent.parent.parent)
28+
29+
CATEGORY_EVAL_HARNESS_FIXTURE_MARKER = "_from_category_eval_harness_fixture"
30+
31+
32+
def make_category_eval_harness_fixture(repo_root: str):
33+
"""Return a module-scoped EvalHarness pytest fixture bound to repo_root."""
34+
import pytest
35+
from eval_harness import EvalHarness
36+
37+
@pytest.fixture(scope="module")
38+
def harness() -> EvalHarness:
39+
return EvalHarness(repo_root=repo_root)
40+
41+
setattr(harness, CATEGORY_EVAL_HARNESS_FIXTURE_MARKER, True)
42+
return harness
43+
44+
2745

2846
def assert_prompt_contract_headings(prompt_path: Path) -> None:
2947
"""Contract headings must appear in preamble outside fenced template blocks."""

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
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_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, assert_prompt_references_workflow_skill, assert_prompt_meets_eval_harness_floor # noqa: E402
12+
from prompt_eval_helpers import PROMPT_LIBRARY_REPO_ROOT, make_category_eval_harness_fixture, 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, assert_prompt_references_workflow_skill, assert_prompt_meets_eval_harness_floor # noqa: E402
1313

1414
REQUIRED_HEADINGS = PROMPT_CONTRACT_HEADINGS
1515
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
1616

1717
AGENT_DIR = Path(__file__).parent.parent.parent / "04-agent"
18-
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
18+
REPO_ROOT = PROMPT_LIBRARY_REPO_ROOT
1919

2020
AGENT_PROMPTS = tuple(sorted(AGENT_DIR.glob("*.md")))
2121
AGENT_COVER_WORKFLOW_SKILLS = (
@@ -43,9 +43,7 @@
4343

4444

4545

46-
@pytest.fixture(scope="module")
47-
def harness() -> EvalHarness:
48-
return EvalHarness(repo_root=REPO_ROOT)
46+
harness = make_category_eval_harness_fixture(REPO_ROOT)
4947

5048

5149
@pytest.mark.parametrize("prompt_path", AGENT_PROMPTS, ids=lambda p: p.name)

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
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_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, assert_prompt_references_workflow_skill, assert_prompt_meets_eval_harness_floor # noqa: E402
12+
from prompt_eval_helpers import PROMPT_LIBRARY_REPO_ROOT, make_category_eval_harness_fixture, 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, assert_prompt_references_workflow_skill, assert_prompt_meets_eval_harness_floor # noqa: E402
1313

1414
REQUIRED_HEADINGS = PROMPT_CONTRACT_HEADINGS
1515
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
1616

1717
CONTEXT_DIR = Path(__file__).parent.parent.parent / "03-context"
18-
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
18+
REPO_ROOT = PROMPT_LIBRARY_REPO_ROOT
1919

2020
CONTEXT_PROMPTS = tuple(sorted(CONTEXT_DIR.glob("*.md")))
2121
CONTEXT_COVER_WORKFLOW_SKILLS = (
@@ -40,9 +40,7 @@
4040

4141

4242

43-
@pytest.fixture(scope="module")
44-
def harness() -> EvalHarness:
45-
return EvalHarness(repo_root=REPO_ROOT)
43+
harness = make_category_eval_harness_fixture(REPO_ROOT)
4644

4745

4846
@pytest.mark.parametrize("prompt_path", CONTEXT_PROMPTS, ids=lambda p: p.name)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
from eval_harness import EvalHarness # noqa: E402
1212
from prompt_eval_helpers import (
13+
PROMPT_LIBRARY_REPO_ROOT,
14+
make_category_eval_harness_fixture,
1315
PROMPT_CONTRACT_HEADINGS,
1416
PROMPT_EVAL_MIN_SCORE,
1517
assert_primary_workflow_surface_preamble,
@@ -27,7 +29,7 @@
2729
MIN_SCORE = PROMPT_EVAL_MIN_SCORE
2830

2931
CORE_DIR = Path(__file__).parent.parent.parent / "00-core"
30-
REPO_ROOT = str(Path(__file__).parent.parent.parent.parent)
32+
REPO_ROOT = PROMPT_LIBRARY_REPO_ROOT
3133

3234
CORE_PROMPTS = tuple(sorted(CORE_DIR.glob("*.md")))
3335
CORE_COVER_WORKFLOW_SKILLS = (
@@ -51,9 +53,7 @@
5153
CORE_PROMPTS_WITH_HUMAN_REVIEW = prompts_with_human_review(CORE_PROMPTS)
5254

5355

54-
@pytest.fixture(scope="module")
55-
def harness() -> EvalHarness:
56-
return EvalHarness(repo_root=REPO_ROOT)
56+
harness = make_category_eval_harness_fixture(REPO_ROOT)
5757

5858

5959
@pytest.mark.parametrize("prompt_path", CORE_PROMPTS, ids=lambda p: p.name)

0 commit comments

Comments
 (0)