canned-prompts/examples/pqrst-estimate/prompt.yaml
tegwick 95a8bb31d2 CANP-WP-0002 T07: semver precedence and strict packaging
Two defects from the original review of the seed.

Prerelease ordering was worse than first recorded. parse_semver returned
(major, minor, patch, raw_string), so 1.0.0-rc1 and 1.0.0 tied on the numeric
fields and then compared as strings — "1.0.0-rc1" > "1.0.0". A release
candidate therefore shadowed its own release for `newest` and for `>=`, not
just for the no-version case.

parse_semver now returns a SemVer section 11 precedence key: numeric fields, a
release/prerelease rank, then dot-separated prerelease identifiers with
numeric ones compared numerically. Build metadata is ignored. Beyond ordering,
prereleases are excluded from `any`, `newest` and `>=` entirely; only an exact
pin selects one, so publishing a release candidate never changes what existing
consumers resolve to. A package holding only prereleases now says so rather
than reporting a bare not-found.

Packaging copied the whole source directory, so a stray .git, virtualenv or
scratch file landed in the catalog and registry. Section 2 already required
otherwise — tools MUST ignore unknown non-reserved files unless a manifest
field references them — so this is conformance rather than a new rule. What is
new is that omissions are reported instead of silent:

  not packaged (not a reserved path, not referenced by the manifest): .git/, .venv/, notes.txt

LICENSE joins the reserved paths. Strict packaging would otherwise drop a
package's license text while faithfully copying its `license` field, which
contradicts section 14's instruction to surface licensing on publish and
install.

Spec: 2 (LICENSE, packaging obligation, reporting), 17.1 new, 10.3 note.

Reference CLI: parse_semver rewritten with is_prerelease; select_version and
pick_version updated; copy_package and report_skipped replace copy_immutable.
Tests 65 -> 78.

examples/pqrst-estimate carries a LICENSE and a license field, exercising the
new reserved path.

Also fixes a leaked loop variable in package_members that would have reported
a bad `template` path as an `evals` error.

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
2026-09-06 09:32:42 +02:00

54 lines
1.2 KiB
YAML

format: canned-prompt/v0.1
id: practice/pqrst-estimate
name: PQRST Estimate
version: 0.2.0
summary: 'Produce a post-session estimate of effort distributed across the PQRST categories
for an agentic coding session.
'
type: template
template: prompt.md
dependencies:
prompts:
- id: practice/house-style
version: '>= 0.1.0'
requirement: required
inputs:
- name: house_style
type: content
required: false
description: 'Shared house-style block, composed from practice/house-style.
'
default:
include: practice/house-style
- name: session_summary
type: content
required: true
description: 'Session transcript, summary, or sufficiently detailed account of the
work performed during the coding session.
'
parameters:
include_rationale:
type: boolean
default: true
description: Explain the evidence behind the estimate.
output:
format: markdown
description: A 100% PQRST effort allocation with concise interpretation.
compatibility:
capabilities:
- long-context
tags:
- pqrst
- retrospective
- agentic-coding
- effort-estimation
license: MIT
provenance:
author: canned-prompts seed
examples:
- examples/basic.yaml
evals:
- evals/quality.yaml