--- id: CANP-WP-0003 type: workplan title: "Default registry name reads as 'registry:'" domain: agents repo: canned-prompts status: finished owner: codex topic_slug: practice created: "2026-09-06" updated: "2026-09-06" state_hub_workstream_id: "d7865fc8-a618-5033-a8de-947c59715cf6" --- # Default registry name reads as `registry:` Residual from `CANP-WP-0002` (`origin: residual`, `origin_ref: CANP-WP-0002`). ## Give the default registry a better name ```task id: CANP-WP-0003-T01 status: done priority: low state_hub_task_id: "ead2d409-2b80-5f50-9f0f-a397822ba2ae" ``` `CANP-WP-0002-T02` made a registry's name come from its `registry.yaml`, and otherwise from its directory basename (§ 20.1). The reference tool's default registry lives at `~/.canned-prompts/registry`, so its basename-derived name is `registry`, and every install from it reads: ```text installed registry:practice/pqrst-estimate@0.1.0 ``` That is honest — it is genuinely what the directory is called — but it reads poorly, and `registry:` is a confusing qualifier for the one registry most users will ever see. Deliberately not fixed in `CANP-WP-0002`: special-casing the default path to produce a prettier name would be exactly the kind of magic the § 20.1 rule was written to avoid, and it was not worth an exception mid-task. Options worth weighing: 1. Write a starter `registry.yaml` when the default registry is first created, naming it something like `default` or `local-registry`. Uses the documented mechanism rather than bypassing it; the cost is a tool writing a file into a store the user may consider theirs. 2. Rename the default directory itself, so the basename is already good. Changes an existing on-disk layout. 3. Accept it and document it. Zero code, and the escape hatch — add a `registry.yaml` — already exists and is documented. Option 3 is the current state. Pick deliberately rather than by default. ## Outcome **Decision (operator, 2026-09-06): option 2** — rename the default directory to `~/.canned-prompts/default`, so the § 20.1 basename rule produces a good name with no special case, no file written into the user's store, and no second naming mechanism. **The cost of deferring had been understated.** The workplan recorded this as reading poorly in one output line. It is not only display: the name reaches qualified references, the on-disk catalog layout (`catalog/registry/...`) and `index.yaml` rows (`registry: registry`). Once packages are installed and inclusions recorded, changing it is a migration rather than an edit — which is an argument for deciding early, not late. Delivered: - `default_registry()` returns `~/.canned-prompts/default`. - `check_legacy_registry` refuses to silently create a fresh empty store beside a populated `~/.canned-prompts/registry`. It names the exact `mv`, and the `--registry` flag for keeping the old one. Silently starting empty would have been worse than the wart being fixed. - The check fires only for the default path; an explicitly passed `--registry` is never second-guessed. - Docs updated in both READMEs. Tests 95 → 99.