Register with Custodian State Hub and seed format open-questions workplan
Register canned-prompts under agents / practice (topic
c1d199b6-55ee-4db6-b49e-257a9f0f15ac, workplan prefix CANP-WP) via
`statehub register`, then replace the generated placeholders with
repo-specific facts.
- SCOPE.md: real boundaries drawn from INTENT.md's deliberate boundary,
current state (spec v0.1 + reference CLI, 3/3 tests pass, example
round-trips), and the developer workflow.
- AGENTS.md: drop the unresolved {CREDENTIAL_ROUTING} template token left
by the generator.
- CANP-WP-0001: bootstrap tasks closed.
- CANP-WP-0002: new workplan carrying the five § 23 open questions promoted
from "experience will decide" to "decide for v0.2" — optional-input
defaults (static or derived), registry namespaces/ownership, prompt
composition, canonical eval schemas, typed context/dependency contracts —
plus two reference-implementation conformance defects found in review
(prerelease versions sort as newest; copy_immutable packages the whole
source directory).
Also lands the previously untracked seed: INTENT.md, the CPF v0.1 spec,
the reference CLI, and examples/pqrst-estimate.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bjefh8NUiEiahN4JLwoSKM
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 388925@bnt-lap001
Assistant-Session: 3507023f-e0fd-4a1e-9d90-a0d4217d1502
This commit is contained in:
parent
985b41dc87
commit
dc615ef530
19 changed files with 2130 additions and 2 deletions
53
reference/tests/test_canned_prompts.py
Normal file
53
reference/tests/test_canned_prompts.py
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
import canned_prompts as cp
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def package(tmp_path: Path) -> Path:
|
||||
pkg = tmp_path / "pkg"
|
||||
pkg.mkdir()
|
||||
(pkg / "prompt.yaml").write_text(
|
||||
"""\
|
||||
format: canned-prompt/v0.1
|
||||
id: demo/hello
|
||||
name: Hello
|
||||
version: 1.0.0
|
||||
summary: Say hello.
|
||||
template: prompt.md
|
||||
inputs:
|
||||
- name: person
|
||||
required: true
|
||||
parameters:
|
||||
tone:
|
||||
type: enum
|
||||
values: [warm, formal]
|
||||
default: warm
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(pkg / "prompt.md").write_text(
|
||||
"Say hello to {{ person }} in a {{ tone }} tone.\n", encoding="utf-8"
|
||||
)
|
||||
return pkg
|
||||
|
||||
|
||||
def test_validate_and_render(package: Path) -> None:
|
||||
manifest = cp.validate_package(package)
|
||||
values = cp.resolve_values(manifest, {"person": "Ada"})
|
||||
rendered = cp.render_template((package / "prompt.md").read_text(), values)
|
||||
assert rendered == "Say hello to Ada in a warm tone.\n"
|
||||
|
||||
|
||||
def test_missing_required_input_fails(package: Path) -> None:
|
||||
manifest = cp.validate_package(package)
|
||||
with pytest.raises(cp.CannedPromptError, match="missing required input"):
|
||||
cp.resolve_values(manifest, {})
|
||||
|
||||
|
||||
def test_undeclared_placeholder_fails(package: Path) -> None:
|
||||
(package / "prompt.md").write_text("{{ missing }}\n", encoding="utf-8")
|
||||
with pytest.raises(cp.CannedPromptError, match="undeclared placeholders"):
|
||||
cp.validate_package(package)
|
||||
Loading…
Add table
Add a link
Reference in a new issue