Report unsatisfied dependencies on add and install
Found while verifying the repo against INTENT.md's eight success criteria for a first practical release, after CANP-WP-0002 finished. Criterion 5 is "publish a version to a registry and install it elsewhere". Installing practice/pqrst-estimate into a fresh catalog reported success, and rendering it then failed with "included package not found: practice/house-style". CANP-WP-0002-T03 introduced this — composition made a package installable but unrenderable, and nothing said so at install time. The error was honest, but reaching it after a successful-looking install is the silently-incomplete failure section 23 now names as the thing this format avoids. `add` and `install` now name declared prompt dependencies the target catalog cannot satisfy, including a package present at no matching version. They do not fetch anything: section 10 leaves dependency resolution to the consumer, and auto-installing transitively is a resolver — a separate decision from refusing to hand over a package that looks fine and is not. Whether `install` should offer `--with-dependencies` is left open as a design question rather than smuggled in as a bug fix. Tests 81 -> 84. Recorded as CANP-WP-ADHOC-2026-09-06. 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
526e9abdfd
commit
4b2bda0013
5 changed files with 130 additions and 0 deletions
|
|
@ -785,3 +785,26 @@ def test_unknown_format_is_rejected(tmp_path: Path) -> None:
|
|||
)
|
||||
with pytest.raises(cp.CannedPromptError, match="unsupported format"):
|
||||
cp.validate_package(pkg)
|
||||
|
||||
|
||||
# --- unsatisfied dependencies are reported, not fetched (§ 10) ---
|
||||
|
||||
def test_missing_dependency_is_reported(composed: Path) -> None:
|
||||
"""Installing a composing package without its fragment must not look fine."""
|
||||
package_dir, _ = cp.resolve_installed(composed, "review/change", None)
|
||||
manifest = cp.validate_package(package_dir)
|
||||
empty = composed.parent / "empty-catalog"
|
||||
assert cp.missing_dependencies(empty, manifest) == ["style/house@1.0.0"]
|
||||
|
||||
|
||||
def test_present_dependency_is_not_reported(composed: Path) -> None:
|
||||
package_dir, _ = cp.resolve_installed(composed, "review/change", None)
|
||||
manifest = cp.validate_package(package_dir)
|
||||
assert cp.missing_dependencies(composed, manifest) == []
|
||||
|
||||
|
||||
def test_dependency_present_but_wrong_version_is_reported(composed: Path) -> None:
|
||||
package_dir, _ = cp.resolve_installed(composed, "review/change", None)
|
||||
manifest = cp.validate_package(package_dir)
|
||||
manifest["dependencies"]["prompts"][0]["version"] = "9.9.9"
|
||||
assert cp.missing_dependencies(composed, manifest) == ["style/house@9.9.9"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue