katalyst-taxonomy-cli 2.0.1a6__tar.gz → 2.0.1a7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/PKG-INFO +1 -1
  2. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/pyproject.toml +1 -1
  3. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/kinds.py +4 -0
  4. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_cli_version.py +1 -1
  5. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_schemas_command.py +6 -6
  6. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_core_schema.py +7 -7
  7. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_create.py +1 -1
  8. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_kinds.py +8 -1
  9. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_relocate.py +4 -1
  10. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/.gitignore +0 -0
  11. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/__init__.py +0 -0
  12. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/__main__.py +0 -0
  13. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/_wiring.py +0 -0
  14. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/app.py +0 -0
  15. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/__init__.py +0 -0
  16. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/api.py +0 -0
  17. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/backend.py +0 -0
  18. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/bundle.py +0 -0
  19. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/clone.py +0 -0
  20. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config.py +0 -0
  21. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_filters.py +0 -0
  22. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_home.py +0 -0
  23. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_plugins.py +0 -0
  24. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_profile.py +0 -0
  25. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_schemas.py +0 -0
  26. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/config_sources.py +0 -0
  27. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/core.py +0 -0
  28. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/create.py +0 -0
  29. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/deps.py +0 -0
  30. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/diff.py +0 -0
  31. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/drafts.py +0 -0
  32. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/export.py +0 -0
  33. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/init.py +0 -0
  34. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/lifecycle.py +0 -0
  35. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/lint.py +0 -0
  36. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/migrate.py +0 -0
  37. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/plugin.py +0 -0
  38. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/promote.py +0 -0
  39. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/query.py +0 -0
  40. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/relate.py +0 -0
  41. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/relocate.py +0 -0
  42. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/remove.py +0 -0
  43. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/rescaffold.py +0 -0
  44. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/resolve.py +0 -0
  45. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/rollback.py +0 -0
  46. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/self_update.py +0 -0
  47. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/show.py +0 -0
  48. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/status.py +0 -0
  49. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/sync.py +0 -0
  50. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/update.py +0 -0
  51. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/commands/versions.py +0 -0
  52. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/context.py +0 -0
  53. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/discovery.py +0 -0
  54. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/fields.py +0 -0
  55. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/install.py +0 -0
  56. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/installer.py +0 -0
  57. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/options.py +0 -0
  58. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/output.py +0 -0
  59. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/py.typed +0 -0
  60. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/src/katalyst_taxonomy_cli/releases.py +0 -0
  61. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/conftest.py +0 -0
  62. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_add.py +0 -0
  63. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_add_bundle.py +0 -0
  64. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_api_command.py +0 -0
  65. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_backend_option.py +0 -0
  66. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_clone.py +0 -0
  67. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_command_signatures.py +0 -0
  68. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_command.py +0 -0
  69. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_explain.py +0 -0
  70. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_home.py +0 -0
  71. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_plugins_command.py +0 -0
  72. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_profiles.py +0 -0
  73. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_config_sources.py +0 -0
  74. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_create_owners.py +0 -0
  75. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_create_typed_and_variants.py +0 -0
  76. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_deps.py +0 -0
  77. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_git_backend_cli.py +0 -0
  78. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_github_backend_cli.py +0 -0
  79. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_import_change_set.py +0 -0
  80. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_import_inside_repo.py +0 -0
  81. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_install.py +0 -0
  82. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_installer.py +0 -0
  83. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_kinds_plugin_settings.py +0 -0
  84. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_labels_annotations.py +0 -0
  85. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_lifecycle_kind_selector.py +0 -0
  86. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_lint_output.py +0 -0
  87. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_lint_profile_graph.py +0 -0
  88. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_lint_strict.py +0 -0
  89. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_migrate.py +0 -0
  90. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_optional_extras.py +0 -0
  91. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_output.py +0 -0
  92. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_plugin_command.py +0 -0
  93. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_plugin_gating.py +0 -0
  94. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_relate_update.py +0 -0
  95. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_releases.py +0 -0
  96. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_remove.py +0 -0
  97. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_repository_targets.py +0 -0
  98. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_self_channels.py +0 -0
  99. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_self_update.py +0 -0
  100. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_template_merge.py +0 -0
  101. {katalyst_taxonomy_cli-2.0.1a6 → katalyst_taxonomy_cli-2.0.1a7}/tests/test_update_in_place.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: katalyst-taxonomy-cli
3
- Version: 2.0.1a6
3
+ Version: 2.0.1a7
4
4
  Summary: CLI for katalyst-taxonomy — the kata command
5
5
  Author: eSimplicity
6
6
  License: Proprietary
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "katalyst-taxonomy-cli"
3
- version = "2.0.1a6"
3
+ version = "2.0.1a7"
4
4
  description = "CLI for katalyst-taxonomy — the kata command"
5
5
  license = { text = "Proprietary" }
6
6
  requires-python = ">=3.12"
@@ -207,6 +207,10 @@ def _print_detail(ctx: CliContext, detail: dict[str, Any], fields: list[FieldSpe
207
207
  ("nested", _yes(storage.get("nest_under_parent"))),
208
208
  ]
209
209
  )
210
+ for parent_kind, field in sorted(
211
+ cast("dict[str, str]", storage.get("directory_from") or {}).items()
212
+ ):
213
+ out.echo(f" under a {parent_kind}: in the directory its {field} names")
210
214
 
211
215
  out.heading("Scaffold")
212
216
  scaffold = cast("dict[str, Any] | None", (storage or {}).get("scaffold"))
@@ -43,7 +43,7 @@ def test_version_flag_lists_the_loaded_schemas_with_their_versions() -> None:
43
43
  shown.append(line.strip())
44
44
  assert shown == [f"{r.name} {r.version}" for r in installed_releases()]
45
45
  assert any(line.startswith("katalyst-core ") for line in shown)
46
- assert "test-structure 2.0.0" in shown
46
+ assert "test-structure 2.1.0" in shown
47
47
 
48
48
 
49
49
  def test_a_schema_that_does_not_load_does_not_hide_the_version(
@@ -241,7 +241,7 @@ class TestReport:
241
241
 
242
242
  class TestVersionPin:
243
243
  def test_a_satisfied_pin_on_a_schema_bundle_loads_it(self, repo: Path) -> None:
244
- """``test-structure`` is really installed at 2.0.0, so this pin really holds.
244
+ """``test-structure`` is really installed at 2.1.0, so this pin really holds.
245
245
 
246
246
  The previous spelling pinned ``katalyst-test-bundle`` — the distribution
247
247
  name, which no ``spec.schemas`` entry can select — and then asserted the
@@ -252,7 +252,7 @@ class TestVersionPin:
252
252
  _write_config(
253
253
  repo,
254
254
  declared=("test-structure",),
255
- versions={"test-structure": "2.0.0"},
255
+ versions={"test-structure": "2.1.0"},
256
256
  )
257
257
 
258
258
  entry = next(b for b in _run_json(repo)["bundles"] if b["name"] == "test-structure")
@@ -272,7 +272,7 @@ class TestVersionPin:
272
272
  assert code != 0
273
273
  assert "test-structure" in output
274
274
  assert "expected 9.9.9" in output
275
- assert "found 2.0.0" in output
275
+ assert "found 2.1.0" in output
276
276
 
277
277
  def test_a_violated_pin_on_an_installed_template_bundle_names_the_installed_version(
278
278
  self, repo: Path
@@ -314,8 +314,8 @@ class TestSchemaVersions:
314
314
  payload = _run_json(repo)
315
315
  by_name = {entry["name"]: entry for entry in payload["bundles"]}
316
316
  structure = by_name["test-structure"]["schema"]
317
- assert structure["version"] == "2.0.0"
318
- assert structure["archive"] == {"state": "released", "latest": "2.0.0"}
317
+ assert structure["version"] == "2.1.0"
318
+ assert structure["archive"] == {"state": "released", "latest": "2.1.0"}
319
319
 
320
320
  def test_a_template_bundle_has_no_schema(self, repo: Path) -> None:
321
321
  _write_config(repo, declared=("app-docker",))
@@ -336,4 +336,4 @@ class TestSchemaVersions:
336
336
  code, output = _run(repo)
337
337
  assert code == 0, output
338
338
  assert "katalyst-core schema" in output
339
- assert "2.0.0 (released (latest archived 2.0.0))" in output
339
+ assert "2.1.0 (released (latest archived 2.1.0))" in output
@@ -23,13 +23,13 @@ def _invoke(*args: str) -> tuple[int, str]:
23
23
  def test_check_passes_for_every_installed_schema() -> None:
24
24
  code, out = _invoke("check")
25
25
  assert code == 0, out
26
- assert "test-structure 2.0.0 against 2.0.0: ok" in out
26
+ assert "test-structure 2.1.0 against 2.1.0: ok" in out
27
27
  assert "katalyst-core 0.2.0 against 0.2.0: ok" in out
28
28
 
29
29
 
30
30
  def test_diff_of_an_unchanged_schema() -> None:
31
31
  code, out = _invoke("diff", "--bundle", "test-structure")
32
- assert (code, out) == (0, "test-structure 2.0.0 -> 2.0.0: no changes\n")
32
+ assert (code, out) == (0, "test-structure 2.1.0 -> 2.1.0: no changes\n")
33
33
  code, out = _invoke("diff", "--bundle", "test-structure", "--json")
34
34
  assert json.loads(out)["test-structure"]["bump"] == "none"
35
35
 
@@ -67,7 +67,7 @@ def test_diff_writes_a_migration_skeleton(changed: SchemaRelease) -> None:
67
67
  assert "environment: field template_replacements is now replacements" in out
68
68
  assert "Needs a major bump." in out
69
69
  assert "Bump test-structure to 3.0.0" in out
70
- path = changed.migration_file(Version.parse("2.0.0"), Version.parse("3.0.0"))
70
+ path = changed.migration_file(Version.parse("2.1.0"), Version.parse("3.0.0"))
71
71
  skeleton = yaml.safe_load(path.read_text(encoding="utf-8"))
72
72
  assert skeleton["steps"] == [
73
73
  {
@@ -85,7 +85,7 @@ def test_diff_writes_a_migration_skeleton(changed: SchemaRelease) -> None:
85
85
  def test_check_fails_on_a_change_without_a_bump(changed: SchemaRelease) -> None:
86
86
  code, out = _invoke("check")
87
87
  assert code != 0
88
- assert "the schema changed (breaking) but is still 2.0.0; bump it" in out
88
+ assert "the schema changed (breaking) but is still 2.1.0; bump it" in out
89
89
  assert "the schema version gate failed for test-structure" in out
90
90
 
91
91
 
@@ -201,10 +201,10 @@ def test_changelog_of_an_unchanged_schema_says_so() -> None:
201
201
  def test_changelog_renders_the_breaking_change_and_its_step(
202
202
  changed: SchemaRelease, monkeypatch: pytest.MonkeyPatch
203
203
  ) -> None:
204
- path = changed.migration_file(Version.parse("2.0.0"), Version.parse("3.0.0"))
204
+ path = changed.migration_file(Version.parse("2.1.0"), Version.parse("3.0.0"))
205
205
  path.parent.mkdir(exist_ok=True)
206
206
  path.write_text(
207
- "from: 2.0.0\nto: 3.0.0\nsteps:\n"
207
+ "from: 2.1.0\nto: 3.0.0\nsteps:\n"
208
208
  " - rename_field: {kind: environment, from: template_replacements, to: replacements}\n",
209
209
  encoding="utf-8",
210
210
  )
@@ -214,7 +214,7 @@ def test_changelog_renders_the_breaking_change_and_its_step(
214
214
  monkeypatch.setattr(evolution, "installed_releases", lambda: [bumped])
215
215
  code, out = _invoke("changelog", "--bundle", "test-structure")
216
216
  assert code == 0, out
217
- assert out.startswith("## Schema changes\n\n### test-structure 2.0.0 → 3.0.0\n")
217
+ assert out.startswith("## Schema changes\n\n### test-structure 2.1.0 → 3.0.0\n")
218
218
  assert (
219
219
  "`kata tax migrate` runs `rename_field environment.template_replacements → replacements`."
220
220
  in out
@@ -576,7 +576,7 @@ class TestCreateNestsBeneathTheExistingParent:
576
576
 
577
577
  assert refused.exit_code != 0
578
578
  assert (
579
- "Parent 'shine' is of kind 'system'; kind 'layer' takes a parent of kind 'stack'"
579
+ "Parent 'shine' is of kind 'system'; kind 'layer' takes a parent of kind 'library' or 'stack'"
580
580
  in refused.output
581
581
  )
582
582
  assert not list(repo.rglob("svc"))
@@ -64,7 +64,14 @@ def test_the_text_names_what_a_kind_declares(repo: Path) -> None:
64
64
  assert code == 0, out
65
65
  for heading in ("Parents", "Fields", "Storage", "Scaffold", "Relationship carriers"):
66
66
  assert heading in out
67
- assert "under stack" in out
67
+ assert "under library, stack" in out
68
+
69
+
70
+ def test_the_storage_says_where_a_parent_names_the_directory(repo: Path) -> None:
71
+ del repo
72
+ code, out = _kata("kinds", "show", "layer")
73
+ assert code == 0, out
74
+ assert "under a library: in the directory its path names" in out
68
75
 
69
76
 
70
77
  def test_the_list_has_wing_label_and_placement(repo: Path) -> None:
@@ -101,7 +101,10 @@ def test_the_plan_as_json(shop: Path) -> None:
101
101
  [
102
102
  (("rename", "filesystem:shop.api", "web"), "The new name is taken"),
103
103
  (("move", "filesystem:shop.api", "--under", "shop.api.svc"), "under its own descendant"),
104
- (("move", "filesystem:shop.api.svc", "--under", "shop"), "A layer's parent is a stack"),
104
+ (
105
+ ("move", "filesystem:shop.api.svc", "--under", "shop"),
106
+ "A layer's parent is a library or stack",
107
+ ),
105
108
  (("move", "filesystem:shop.api.svc", "--under", "shop.web"), "outside their scope"),
106
109
  ],
107
110
  )