kanon-cli 3.1.1__tar.gz → 3.3.0__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 (1032) hide show
  1. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/CHANGELOG.md +203 -0
  2. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/PKG-INFO +54 -7
  3. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/README.md +53 -6
  4. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/architecture.md +5 -3
  5. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/catalog-author-guide.md +2 -2
  6. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/cli/catalog-audit.md +4 -4
  7. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/cli/doctor.md +6 -6
  8. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/cli-reference.md +81 -2
  9. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/coming-from-pip-npm-cargo.md +1 -0
  10. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/configuration.md +75 -5
  11. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/doctor.md +1 -1
  12. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/how-it-works.md +1 -1
  13. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/installation.md +5 -1
  14. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/integration-testing.md +18 -18
  15. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/lifecycle.md +32 -3
  16. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/migration-to-add.md +2 -2
  17. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/pipeline-integration.md +4 -4
  18. kanon_cli-3.3.0/docs/privacy.md +90 -0
  19. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/shell-completion.md +3 -3
  20. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/pyproject.toml +3 -1
  21. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/__init__.py +1 -1
  22. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/cli.py +76 -9
  23. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/add.py +2 -0
  24. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/clean.py +54 -4
  25. kanon_cli-3.3.0/src/kanon_cli/commands/list.py +560 -0
  26. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/marketplace.py +3 -0
  27. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/remove.py +5 -1
  28. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/cache.py +1 -1
  29. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/constants.py +184 -4
  30. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/clean.py +85 -4
  31. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/cli_args.py +23 -2
  32. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/install.py +122 -14
  33. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/kanonenv_writer.py +34 -0
  34. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/lockfile.py +99 -14
  35. kanon_cli-3.3.0/src/kanon_cli/core/telemetry.py +1109 -0
  36. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/update_check.py +62 -7
  37. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/conftest.py +42 -4
  38. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/completion/expected-bash.sh +14 -4
  39. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/completion/expected-powershell.ps1 +1 -1
  40. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/completion/expected-zsh.sh +20 -1
  41. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-clean.txt +15 -1
  42. kanon_cli-3.3.0/tests/fixtures/help/kanon-list.txt +35 -0
  43. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-toplevel.txt +4 -1
  44. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/conftest.py +5 -3
  45. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_clean_lifecycle.py +41 -0
  46. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_help_snapshots.py +1 -0
  47. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_install_lifecycle.py +17 -14
  48. kanon_cli-3.3.0/tests/functional/test_list.py +196 -0
  49. kanon_cli-3.3.0/tests/functional/test_list_telemetry.py +119 -0
  50. kanon_cli-3.3.0/tests/functional/test_telemetry_journey.py +309 -0
  51. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_clean_lifecycle.py +2 -2
  52. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_clean_paths.py +48 -1
  53. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_cli_entry_points.py +16 -13
  54. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_completion_bash.py +12 -1
  55. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_concurrency.py +12 -28
  56. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_fs_fault_injection.py +4 -6
  57. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_full_user_journey.py +11 -18
  58. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_gitignore_idempotency.py +17 -14
  59. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_lifecycle.py +57 -50
  60. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_kanon_clean_embedded.py +2 -2
  61. kanon_cli-3.3.0/tests/integration/test_kanon_dir_collision.py +51 -0
  62. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_kanon_full_lifecycle.py +26 -24
  63. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_kanon_install_embedded.py +9 -9
  64. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_lifecycle_recovery.py +15 -12
  65. kanon_cli-3.3.0/tests/integration/test_list_command_json.py +141 -0
  66. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_misc_features.py +5 -3
  67. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/conftest.py +4 -3
  68. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ic.py +6 -7
  69. kanon_cli-3.3.0/tests/scenarios/test_install_graph_capture.py +101 -0
  70. kanon_cli-3.3.0/tests/scenarios/test_list_journey.py +151 -0
  71. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_pk.py +9 -10
  72. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_tc_clean.py +9 -14
  73. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_uj.py +3 -3
  74. kanon_cli-3.3.0/tests/unit/test_build_project_entries.py +156 -0
  75. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cache_layout.py +4 -4
  76. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_clean.py +93 -5
  77. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_clean_command.py +118 -6
  78. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cli.py +156 -6
  79. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants.py +5 -5
  80. kanon_cli-3.3.0/tests/unit/test_constants_list.py +106 -0
  81. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_coverage_gaps.py +2 -2
  82. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_home_flag.py +3 -3
  83. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install.py +4 -2
  84. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_isolation_fixtures.py +3 -3
  85. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_kanonenv_writer.py +36 -0
  86. kanon_cli-3.3.0/tests/unit/test_list.py +466 -0
  87. kanon_cli-3.3.0/tests/unit/test_lockfile_reconcile.py +132 -0
  88. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search.py +15 -25
  89. kanon_cli-3.3.0/tests/unit/test_telemetry.py +1087 -0
  90. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_update_check.py +86 -9
  91. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.claude/settings.json +0 -0
  92. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/.devcontainer.postcreate.sh +0 -0
  93. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/VERSION +0 -0
  94. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/catalog-entry.json +0 -0
  95. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/devcontainer-functions.sh +0 -0
  96. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/devcontainer.json +0 -0
  97. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/fix-line-endings.py +0 -0
  98. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/nix-family-os/README.md +0 -0
  99. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/nix-family-os/tinyproxy-daemon.sh +0 -0
  100. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/nix-family-os/tinyproxy.conf.template +0 -0
  101. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/postcreate-wrapper.sh +0 -0
  102. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/project-setup.sh +0 -0
  103. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/wsl-family-os/README.md +0 -0
  104. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/wsl-family-os/tinyproxy-daemon.sh +0 -0
  105. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.devcontainer/wsl-family-os/tinyproxy.conf.template +0 -0
  106. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/CODEOWNERS +0 -0
  107. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/actions/setup-kanon/action.yml +0 -0
  108. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/workflows/codeql-analysis.yml +0 -0
  109. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/workflows/main-validation.yml +0 -0
  110. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/workflows/pr-validation.yml +0 -0
  111. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.github/workflows/publish.yml +0 -0
  112. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.gitignore +0 -0
  113. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.markdownlint.json +0 -0
  114. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.pre-commit-config.yaml +0 -0
  115. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.tool-versions +0 -0
  116. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/.yamllint +0 -0
  117. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/CLAUDE.md +0 -0
  118. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/CONTRIBUTING.md +0 -0
  119. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/LICENSE +0 -0
  120. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/Makefile +0 -0
  121. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/catalog-format-versioning.md +0 -0
  122. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/catalogs-explained.md +0 -0
  123. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/claude-marketplaces-guide.md +0 -0
  124. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/cli/validate.md +0 -0
  125. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/cli.md +0 -0
  126. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/contributing.md +0 -0
  127. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/creating-manifest-repos.md +0 -0
  128. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/creating-packages.md +0 -0
  129. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/exit-codes.md +0 -0
  130. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/git-auth-setup.md +0 -0
  131. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/list-and-add.md +0 -0
  132. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/lockfile.md +0 -0
  133. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/migrating-existing-kanon-files.md +0 -0
  134. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/multi-source-guide.md +0 -0
  135. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/outdated-and-why.md +0 -0
  136. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/README.md +0 -0
  137. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/internal-fs-layout.md +0 -0
  138. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/manifest-format.md +0 -0
  139. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/python-support.md +0 -0
  140. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/repo-hooks.md +0 -0
  141. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/smart-sync.md +0 -0
  142. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/repo/windows.md +0 -0
  143. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/security-model.md +0 -0
  144. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/setup-guide.md +0 -0
  145. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/test-coverage.md +0 -0
  146. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/testing/matrix-traceability.md +0 -0
  147. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/troubleshooting.md +0 -0
  148. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/url-canonicalization.md +0 -0
  149. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/docs/version-resolution.md +0 -0
  150. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/git-hooks/pre-commit +0 -0
  151. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/git-hooks/pre-push +0 -0
  152. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/link +0 -0
  153. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/requirements-dev.txt +0 -0
  154. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/requirements.txt +0 -0
  155. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/scripts/check_archive_no_duplicates.py +0 -0
  156. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/__main__.py +0 -0
  157. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/__init__.py +0 -0
  158. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/catalog.py +0 -0
  159. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/completion.py +0 -0
  160. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/doctor.py +0 -0
  161. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/install.py +0 -0
  162. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/outdated.py +0 -0
  163. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/repo.py +0 -0
  164. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/search.py +0 -0
  165. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/validate.py +0 -0
  166. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/commands/why.py +0 -0
  167. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/__init__.py +0 -0
  168. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/cached_catalogs.py +0 -0
  169. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/catalog_entries.py +0 -0
  170. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/catalog_versions.py +0 -0
  171. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/lockfile_names.py +0 -0
  172. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/midtoken.py +0 -0
  173. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/pep440_filter.py +0 -0
  174. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/powershell.py +0 -0
  175. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/preamble.py +0 -0
  176. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/project_versions.py +0 -0
  177. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/sanitize.py +0 -0
  178. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/completions/source_names.py +0 -0
  179. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/__init__.py +0 -0
  180. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/catalog.py +0 -0
  181. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/discover.py +0 -0
  182. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/git_runner.py +0 -0
  183. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/include_walker.py +0 -0
  184. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/kanon_hash.py +0 -0
  185. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/kanonenv.py +0 -0
  186. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/manifest.py +0 -0
  187. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/manifest_vars.py +0 -0
  188. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/marketplace.py +0 -0
  189. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/marketplace_validator.py +0 -0
  190. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/metadata.py +0 -0
  191. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/remote_url.py +0 -0
  192. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/url.py +0 -0
  193. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/core/xml_validator.py +0 -0
  194. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/__init__.py +0 -0
  195. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/color.py +0 -0
  196. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/command.py +0 -0
  197. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/editor.py +0 -0
  198. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/error.py +0 -0
  199. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/event_log.py +0 -0
  200. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/fetch.py +0 -0
  201. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_command.py +0 -0
  202. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_config.py +0 -0
  203. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_refs.py +0 -0
  204. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_ssh +0 -0
  205. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_superproject.py +0 -0
  206. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_trace2_event_log.py +0 -0
  207. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/git_trace2_event_log_base.py +0 -0
  208. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/hooks/commit-msg +0 -0
  209. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/hooks/pre-auto-gc +0 -0
  210. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/hooks.py +0 -0
  211. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/main.py +0 -0
  212. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/manifest_xml.py +0 -0
  213. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/pager.py +0 -0
  214. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/platform_utils.py +0 -0
  215. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/platform_utils_win32.py +0 -0
  216. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/progress.py +0 -0
  217. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/project.py +0 -0
  218. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/repo +0 -0
  219. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/repo_logging.py +0 -0
  220. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/repo_trace.py +0 -0
  221. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/requirements.jsonc +0 -0
  222. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/ssh.py +0 -0
  223. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/__init__.py +0 -0
  224. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/abandon.py +0 -0
  225. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/branches.py +0 -0
  226. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/checkout.py +0 -0
  227. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/cherry_pick.py +0 -0
  228. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/diff.py +0 -0
  229. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/diffmanifests.py +0 -0
  230. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/download.py +0 -0
  231. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/envsubst.py +0 -0
  232. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/forall.py +0 -0
  233. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/gc.py +0 -0
  234. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/grep.py +0 -0
  235. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/help.py +0 -0
  236. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/info.py +0 -0
  237. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/init.py +0 -0
  238. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/list.py +0 -0
  239. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/manifest.py +0 -0
  240. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/overview.py +0 -0
  241. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/prune.py +0 -0
  242. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/rebase.py +0 -0
  243. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/selfupdate.py +0 -0
  244. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/smartsync.py +0 -0
  245. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/stage.py +0 -0
  246. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/start.py +0 -0
  247. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/status.py +0 -0
  248. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/sync.py +0 -0
  249. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/subcmds/upload.py +0 -0
  250. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/version_constraints.py +0 -0
  251. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/repo/wrapper.py +0 -0
  252. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/utils/__init__.py +0 -0
  253. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/utils/concurrency.py +0 -0
  254. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/utils/levenshtein.py +0 -0
  255. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/utils/lock_file_path.py +0 -0
  256. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/utils/spawn.py +0 -0
  257. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/src/kanon_cli/version.py +0 -0
  258. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/__init__.py +0 -0
  259. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-1/repo-specs/duplicate-child-marketplace.xml +0 -0
  260. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-1/repo-specs/missing-recommended-marketplace.xml +0 -0
  261. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-1/repo-specs/missing-required-marketplace.xml +0 -0
  262. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-1/repo-specs/multiple-blocks-marketplace.xml +0 -0
  263. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-2/repo-specs/dotted-name-marketplace.xml +0 -0
  264. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-2/repo-specs/hyphenated-name-marketplace.xml +0 -0
  265. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-2/repo-specs/uppercase-name-marketplace.xml +0 -0
  266. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-3/repo-specs/group-a-1-marketplace.xml +0 -0
  267. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-3/repo-specs/group-a-2-marketplace.xml +0 -0
  268. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-3/repo-specs/group-b-1-marketplace.xml +0 -0
  269. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-3/repo-specs/group-b-2-marketplace.xml +0 -0
  270. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-4/repo-specs/file-url-marketplace.xml +0 -0
  271. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-4/repo-specs/query-string-marketplace.xml +0 -0
  272. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/broken-soft-spot-4/repo-specs/unresolvable-marketplace.xml +0 -0
  273. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/legacy-catalog-dir/catalog/sample-entry/.kanon +0 -0
  274. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalog/legacy-catalog-dir/repo-specs/sample.xml +0 -0
  275. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalogs/zero-pep440-tags/README.md +0 -0
  276. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/catalogs/zero-pep440-tags/repo-specs/entry-a/entry-a-marketplace.xml +0 -0
  277. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/completion/__init__.py +0 -0
  278. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/README.md +0 -0
  279. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/conflict-detected.txt +0 -0
  280. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/entry-not-found.txt +0 -0
  281. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/lockfile-hash-mismatch.txt +0 -0
  282. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/lockfile-sha-unreachable.txt +0 -0
  283. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/missing-catalog-source.txt +0 -0
  284. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/missing-required-metadata-field.txt +0 -0
  285. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/source-collision.txt +0 -0
  286. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/errors/zero-pep440-tags-under-prefix.txt +0 -0
  287. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/README.md +0 -0
  288. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-add.txt +0 -0
  289. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-catalog-audit.txt +0 -0
  290. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-catalog.txt +0 -0
  291. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-completion.txt +0 -0
  292. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-doctor.txt +0 -0
  293. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-install.txt +0 -0
  294. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-marketplace.txt +0 -0
  295. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-outdated.txt +0 -0
  296. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-remove.txt +0 -0
  297. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-search.txt +0 -0
  298. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/help/kanon-why.txt +0 -0
  299. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/.gitignore +0 -0
  300. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/README.md +0 -0
  301. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/linter-test-bad.invalid-yaml +0 -0
  302. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/linter-test-bad.md +0 -0
  303. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/linter-test-bad.py +0 -0
  304. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/sample-manifest.xml +0 -0
  305. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/sample-project-config.json +0 -0
  306. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/test.gitconfig +0 -0
  307. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/fixtures/repo/version_constraints_data.json +0 -0
  308. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/__init__.py +0 -0
  309. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_add_alias_journey.py +0 -0
  310. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_alias_consumer_journey.py +0 -0
  311. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_argparse_errors.py +0 -0
  312. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_argparse_help.py +0 -0
  313. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_ci_runs_operator_path_tests.py +0 -0
  314. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_cli_entry_point.py +0 -0
  315. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_completion_snapshots.py +0 -0
  316. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_default_branch_journey.py +0 -0
  317. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_env_int_guard_journey.py +0 -0
  318. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_error_snapshots.py +0 -0
  319. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_exit_code_matrix.py +0 -0
  320. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_groups_filter.py +0 -0
  321. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_help_text_contract.py +0 -0
  322. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_home_flag_unwritable_journey.py +0 -0
  323. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_init_default_branch_prerequisite_journey.py +0 -0
  324. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_install_hermetic_journey.py +0 -0
  325. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_install_real_kanon.py +0 -0
  326. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_install_v3_lock_fail_fast_journey.py +0 -0
  327. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_kanon_home_store_journey.py +0 -0
  328. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_kanon_repo_cli.py +0 -0
  329. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_kanon_repo_e2e.py +0 -0
  330. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_kanon_repo_lifecycle_journey.py +0 -0
  331. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_lifecycle_journey.py +0 -0
  332. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_make_operator_path_targets.py +0 -0
  333. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_marketplace_journey.py +0 -0
  334. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_matrix_traceability_complete.py +0 -0
  335. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_provider_agnostic.py +0 -0
  336. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_abandon_errors.py +0 -0
  337. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_abandon_flags.py +0 -0
  338. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_abandon_happy.py +0 -0
  339. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_branches_errors.py +0 -0
  340. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_branches_flags.py +0 -0
  341. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_branches_happy.py +0 -0
  342. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_checkout_errors.py +0 -0
  343. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_checkout_flags.py +0 -0
  344. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_checkout_happy.py +0 -0
  345. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_cherry_pick_errors.py +0 -0
  346. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_cherry_pick_flags.py +0 -0
  347. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_cherry_pick_happy.py +0 -0
  348. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diff_errors.py +0 -0
  349. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diff_flags.py +0 -0
  350. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diff_happy.py +0 -0
  351. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diffmanifests_errors.py +0 -0
  352. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diffmanifests_flags.py +0 -0
  353. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_diffmanifests_happy.py +0 -0
  354. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_dir_override.py +0 -0
  355. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_download_errors.py +0 -0
  356. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_download_flags.py +0 -0
  357. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_download_happy.py +0 -0
  358. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_envsubst_errors.py +0 -0
  359. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_envsubst_flags.py +0 -0
  360. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_envsubst_happy.py +0 -0
  361. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_exit_codes.py +0 -0
  362. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_forall_errors.py +0 -0
  363. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_forall_flags.py +0 -0
  364. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_forall_happy.py +0 -0
  365. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_gc_errors.py +0 -0
  366. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_gc_flags.py +0 -0
  367. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_gc_happy.py +0 -0
  368. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_grep_errors.py +0 -0
  369. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_grep_flags.py +0 -0
  370. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_grep_happy.py +0 -0
  371. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_help_errors.py +0 -0
  372. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_help_flags.py +0 -0
  373. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_help_happy.py +0 -0
  374. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_info_errors.py +0 -0
  375. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_info_flags.py +0 -0
  376. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_info_happy.py +0 -0
  377. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_init_errors.py +0 -0
  378. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_init_flags.py +0 -0
  379. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_init_happy.py +0 -0
  380. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_init_mirror.py +0 -0
  381. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_list_errors.py +0 -0
  382. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_list_flags.py +0 -0
  383. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_list_happy.py +0 -0
  384. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_manifest_errors.py +0 -0
  385. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_manifest_flags.py +0 -0
  386. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_manifest_happy.py +0 -0
  387. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_manifest_revision_as_tag.py +0 -0
  388. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_overview_errors.py +0 -0
  389. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_overview_flags.py +0 -0
  390. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_overview_happy.py +0 -0
  391. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_passthrough.py +0 -0
  392. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_prune_errors.py +0 -0
  393. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_prune_flags.py +0 -0
  394. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_prune_happy.py +0 -0
  395. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_rebase_errors.py +0 -0
  396. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_rebase_flags.py +0 -0
  397. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_rebase_happy.py +0 -0
  398. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_selfupdate_disabled.py +0 -0
  399. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_selfupdate_errors.py +0 -0
  400. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_selfupdate_flags.py +0 -0
  401. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_selfupdate_happy.py +0 -0
  402. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_smartsync_errors.py +0 -0
  403. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_smartsync_flags.py +0 -0
  404. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_smartsync_happy.py +0 -0
  405. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_stage_errors.py +0 -0
  406. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_stage_flags.py +0 -0
  407. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_stage_happy.py +0 -0
  408. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_start_errors.py +0 -0
  409. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_start_flags.py +0 -0
  410. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_start_happy.py +0 -0
  411. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_status_errors.py +0 -0
  412. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_status_flags.py +0 -0
  413. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_status_happy.py +0 -0
  414. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_sync_errors.py +0 -0
  415. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_sync_flags.py +0 -0
  416. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_sync_happy.py +0 -0
  417. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_upload_errors.py +0 -0
  418. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_upload_flags.py +0 -0
  419. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_repo_upload_happy.py +0 -0
  420. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_singular_catalog_source_inert.py +0 -0
  421. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_stdout_stderr_discipline.py +0 -0
  422. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_update_alert_journey.py +0 -0
  423. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_journey.py +0 -0
  424. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_lifecycle.py +0 -0
  425. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_lockfile.py +0 -0
  426. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_marketplace.py +0 -0
  427. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_xml_errors.py +0 -0
  428. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_validate_xml_repo_root.py +0 -0
  429. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/functional/test_zero_source_clean_error.py +0 -0
  430. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/__init__.py +0 -0
  431. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/conftest.py +0 -0
  432. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/__init__.py +0 -0
  433. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/synthetic/__init__.py +0 -0
  434. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/synthetic/conftest.py +0 -0
  435. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/synthetic/drift.py +0 -0
  436. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/synthetic/test_synthetic_pytest_fixtures.py +0 -0
  437. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/fixtures/synthetic/upgrade_versioned.py +0 -0
  438. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/provider_allowlist.txt +0 -0
  439. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/__init__.py +0 -0
  440. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/conftest.py +0 -0
  441. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_bug_fixes.py +0 -0
  442. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_consolidated_constraints_e2e.py +0 -0
  443. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_envsubst_integration.py +0 -0
  444. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_import_functional.py +0 -0
  445. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_linkfile_copyfile.py +0 -0
  446. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_linkfile_exclude_journey.py +0 -0
  447. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_manifest_parsing.py +0 -0
  448. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_process_isolation.py +0 -0
  449. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_repo_module_smoke.py +0 -0
  450. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_repo_pipeline.py +0 -0
  451. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_repo_run_lifecycle.py +0 -0
  452. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_repo_sync_lifecycle.py +0 -0
  453. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_version_constraints_integration.py +0 -0
  454. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_annotation_roundtrip.py +0 -0
  455. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_contactinfo_roundtrip.py +0 -0
  456. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_copyfile_roundtrip.py +0 -0
  457. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_default_roundtrip.py +0 -0
  458. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_extend_project_roundtrip.py +0 -0
  459. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_include_roundtrip.py +0 -0
  460. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_linkfile_roundtrip.py +0 -0
  461. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_manifest_roundtrip.py +0 -0
  462. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_manifest_server_roundtrip.py +0 -0
  463. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_notice_roundtrip.py +0 -0
  464. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_project_roundtrip.py +0 -0
  465. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_remote_roundtrip.py +0 -0
  466. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_remove_project_roundtrip.py +0 -0
  467. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_repo_hooks_roundtrip.py +0 -0
  468. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_submanifest_roundtrip.py +0 -0
  469. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/repo/test_xml_superproject_roundtrip.py +0 -0
  470. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_add_core.py +0 -0
  471. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_add_dry_run.py +0 -0
  472. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_add_env_var_detection.py +0 -0
  473. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_add_zero_tags.py +0 -0
  474. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_auto_discovery.py +0 -0
  475. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_background_refresh.py +0 -0
  476. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_cache_clock_skew.py +0 -0
  477. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_cache_layout.py +0 -0
  478. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_entry_uniqueness.py +0 -0
  479. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_framework.py +0 -0
  480. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_legacy_dir.py +0 -0
  481. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_metadata.py +0 -0
  482. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_remote_url.py +0 -0
  483. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_source_name.py +0 -0
  484. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_strict.py +0 -0
  485. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_audit_tag_format.py +0 -0
  486. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_catalog_constraints.py +0 -0
  487. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_ci_validation.py +0 -0
  488. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_clean_env_override_cleanup.py +0 -0
  489. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_cached_catalogs.py +0 -0
  490. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_catalog_entries.py +0 -0
  491. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_catalog_versions.py +0 -0
  492. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_lockfile_names.py +0 -0
  493. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_project_versions.py +0 -0
  494. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_complete_source_names.py +0 -0
  495. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_completion_powershell_subcommand.py +0 -0
  496. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_completion_subcommand.py +0 -0
  497. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_completion_zsh.py +0 -0
  498. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_concurrency_serialization.py +0 -0
  499. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_copyfile_fs_effects.py +0 -0
  500. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_cross_platform_contract.py +0 -0
  501. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doc_validation.py +0 -0
  502. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_cache_flags.py +0 -0
  503. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_cache_flags_workspace_independent.py +0 -0
  504. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_consistency.py +0 -0
  505. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_default_subcheck_output.py +0 -0
  506. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_effective_source.py +0 -0
  507. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_prune_cache.py +0 -0
  508. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_doctor_remote_check.py +0 -0
  509. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_envsubst_command.py +0 -0
  510. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_fs_fault_extended.py +0 -0
  511. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_full_lifecycle_synthetic.py +0 -0
  512. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_git_fault_injection.py +0 -0
  513. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_git_retry_env.py +0 -0
  514. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_home_flag_store_relocation.py +0 -0
  515. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_after_add.py +0 -0
  516. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_command.py +0 -0
  517. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_env_var_resolution.py +0 -0
  518. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_errors.py +0 -0
  519. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_include_cycle.py +0 -0
  520. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_include_diamond.py +0 -0
  521. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_lock_file_derivation.py +0 -0
  522. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_lockfile_replay.py +0 -0
  523. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_marketplace_registration.py +0 -0
  524. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_no_kanon_remediation.py +0 -0
  525. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_optional_vars.py +0 -0
  526. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_path_conflict_integration.py +0 -0
  527. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_paths.py +0 -0
  528. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_per_alias_gitbase.py +0 -0
  529. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_reconcile.py +0 -0
  530. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_refresh_lock.py +0 -0
  531. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_refresh_lock_source.py +0 -0
  532. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_remote_url_policy.py +0 -0
  533. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_required_vars.py +0 -0
  534. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_install_strict.py +0 -0
  535. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_json_output_stream_discipline.py +0 -0
  536. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_kanon_add_placeholder_handling.py +0 -0
  537. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_kanonenv_parsing.py +0 -0
  538. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_linkfile_fs_effects.py +0 -0
  539. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_all_versions.py +0 -0
  540. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_all_versions_canonical.py +0 -0
  541. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_all_versions_malformed_revision_resilience.py +0 -0
  542. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_default.py +0 -0
  543. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_detail.py +0 -0
  544. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_filter.py +0 -0
  545. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_format_json.py +0 -0
  546. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_synthetic_catalog_variants.py +0 -0
  547. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_list_tree.py +0 -0
  548. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_lockfile_roundtrip.py +0 -0
  549. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_marketplace_install.py +0 -0
  550. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_marketplace_lifecycle.py +0 -0
  551. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_marketplace_orphan_prune.py +0 -0
  552. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_midtoken_bash.py +0 -0
  553. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_midtoken_zsh.py +0 -0
  554. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_multi_source_aggregation.py +0 -0
  555. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_no_bundled_catalog.py +0 -0
  556. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_no_default_catalog.py +0 -0
  557. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_no_hardcoded_org_values.py +0 -0
  558. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_observability.py +0 -0
  559. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_outdated.py +0 -0
  560. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_outdated_branch_drift.py +0 -0
  561. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_outdated_fail_on_upgrade.py +0 -0
  562. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_outdated_format_json.py +0 -0
  563. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_outdated_refs_tags_revision_parsing.py +0 -0
  564. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_platform_parity.py +0 -0
  565. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_preamble_bash.py +0 -0
  566. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_preamble_zsh.py +0 -0
  567. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_remove_core.py +0 -0
  568. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_remove_dry_run.py +0 -0
  569. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_remove_force_integration.py +0 -0
  570. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_signal_handling.py +0 -0
  571. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_synthetic_drift_fixture.py +0 -0
  572. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_synthetic_upgrade_versioned_fixture.py +0 -0
  573. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_unicode_encoding.py +0 -0
  574. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_validate_marketplace.py +0 -0
  575. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_validate_marketplace_revision_existence.py +0 -0
  576. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_validate_metadata.py +0 -0
  577. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_validate_xml.py +0 -0
  578. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_version_resolution.py +0 -0
  579. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_version_widened_bare_pep440.py +0 -0
  580. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_wheel_e2e.py +0 -0
  581. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_why_ambiguous.py +0 -0
  582. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_why_chain_walker.py +0 -0
  583. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_why_format_json.py +0 -0
  584. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_why_live_resolve.py +0 -0
  585. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_why_not_found_suggestion.py +0 -0
  586. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/integration/test_workspace_dir_env.py +0 -0
  587. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f1_s2_t5_regression.py +0 -0
  588. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f5_s2_t7_regression.py +0 -0
  589. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s1_t1_regression.py +0 -0
  590. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s1_t2_regression.py +0 -0
  591. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s1_t3_regression.py +0 -0
  592. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s1_t4_regression.py +0 -0
  593. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t1_regression.py +0 -0
  594. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t2_regression.py +0 -0
  595. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t3_regression.py +0 -0
  596. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t4_regression.py +0 -0
  597. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t5_regression.py +0 -0
  598. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s2_t6_regression.py +0 -0
  599. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s3_t1_regression.py +0 -0
  600. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_f6_s3_t2_regression.py +0 -0
  601. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/regression/test_e0_install_relative_regression.py +0 -0
  602. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/__init__.py +0 -0
  603. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/_rp_helpers.py +0 -0
  604. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ad.py +0 -0
  605. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_bs.py +0 -0
  606. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_cd.py +0 -0
  607. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_content_pins.py +0 -0
  608. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_cs.py +0 -0
  609. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_doctor_cache.py +0 -0
  610. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_doctor_journey.py +0 -0
  611. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ec.py +0 -0
  612. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ep.py +0 -0
  613. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ev.py +0 -0
  614. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_hv.py +0 -0
  615. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_id.py +0 -0
  616. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ks.py +0 -0
  617. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_lf.py +0 -0
  618. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_lockfile_lifecycle.py +0 -0
  619. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_marketplace_direct_checkout.py +0 -0
  620. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_mk.py +0 -0
  621. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ms.py +0 -0
  622. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_ns_marketplace_and_global_flags.py +0 -0
  623. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_outdated_two_source.py +0 -0
  624. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rc.py +0 -0
  625. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_refresh_lock_existing_checkout.py +0 -0
  626. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rls_exact_vs_range.py +0 -0
  627. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_abandon.py +0 -0
  628. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_branches.py +0 -0
  629. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_checkout.py +0 -0
  630. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_cherry_pick.py +0 -0
  631. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_diff.py +0 -0
  632. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_diffmanifests.py +0 -0
  633. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_download.py +0 -0
  634. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_envsubst.py +0 -0
  635. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_forall.py +0 -0
  636. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_gc.py +0 -0
  637. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_grep.py +0 -0
  638. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_help.py +0 -0
  639. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_info.py +0 -0
  640. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_init.py +0 -0
  641. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_list.py +0 -0
  642. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_manifest.py +0 -0
  643. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_overview.py +0 -0
  644. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_prune.py +0 -0
  645. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_rebase.py +0 -0
  646. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_smartsync.py +0 -0
  647. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_stage.py +0 -0
  648. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_start.py +0 -0
  649. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_status.py +0 -0
  650. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_sync.py +0 -0
  651. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_upload.py +0 -0
  652. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rp_wrap.py +0 -0
  653. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_rx.py +0 -0
  654. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_scenario_coverage_meta.py +0 -0
  655. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_search_multi_source.py +0 -0
  656. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_tc_bootstrap.py +0 -0
  657. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_tc_install.py +0 -0
  658. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_tc_validate.py +0 -0
  659. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_va.py +0 -0
  660. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_va_validate_lockfile.py +0 -0
  661. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_why_surface_query.py +0 -0
  662. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_why_url_path.py +0 -0
  663. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/scenarios/test_why_url_path_placeholder.py +0 -0
  664. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/security/__init__.py +0 -0
  665. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/security/test_security_hardening.py +0 -0
  666. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/test_wheel_layout.py +0 -0
  667. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/__init__.py +0 -0
  668. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/commands/test_repo_dir_resolution.py +0 -0
  669. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/conftest.py +0 -0
  670. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/__init__.py +0 -0
  671. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/conftest.py +0 -0
  672. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/.gitignore +0 -0
  673. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/README.md +0 -0
  674. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/sample-manifest.xml +0 -0
  675. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/sample-project-config.json +0 -0
  676. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/test.gitconfig +0 -0
  677. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/fixtures/version_constraints_data.json +0 -0
  678. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/functional/__init__.py +0 -0
  679. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/functional/test_features.py +0 -0
  680. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/subcmds/__init__.py +0 -0
  681. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/subcmds/test_init_mirror.py +0 -0
  682. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/subcmds/test_manifest_revision_as_tag.py +0 -0
  683. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/subcmds/test_manifest_revision_as_tag_pep440.py +0 -0
  684. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/subcmds/test_selfupdate_stub.py +0 -0
  685. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_abandon_massive.py +0 -0
  686. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_branches_coverage.py +0 -0
  687. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug10_selfupdate_incompatible.py +0 -0
  688. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug11_race_condition.py +0 -0
  689. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug12_backup_preserved.py +0 -0
  690. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug13_init_reinit_warning.py +0 -0
  691. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug14_non_tty_log.py +0 -0
  692. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug15_prerelease_docs.py +0 -0
  693. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug16_nested_var_warning.py +0 -0
  694. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug18_envsubst_double_parse.py +0 -0
  695. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug19_glob_src_error.py +0 -0
  696. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug1_envsubst_malformed_xml.py +0 -0
  697. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug20_glob_dest_file.py +0 -0
  698. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug2_linkfile_errors.py +0 -0
  699. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug3_execv_replaces_process.py +0 -0
  700. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug4_symlink_overwrite.py +0 -0
  701. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug5_empty_envsubst_list.py +0 -0
  702. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug6_undefined_env_vars.py +0 -0
  703. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug7_git_ls_remote_retry.py +0 -0
  704. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug8_ls_remote_stderr.py +0 -0
  705. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_bug9_constraint_resolution_cache.py +0 -0
  706. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_checklocalpath_rules_1_5.py +0 -0
  707. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_checklocalpath_rules_6_11.py +0 -0
  708. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_checkout_massive.py +0 -0
  709. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_cherrypick_coverage.py +0 -0
  710. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_color.py +0 -0
  711. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_command.py +0 -0
  712. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_conftest_fixtures.py +0 -0
  713. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_diffmanifests_deep.py +0 -0
  714. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_doc_validate_git_preconditions.py +0 -0
  715. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_download_coverage.py +0 -0
  716. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_editor.py +0 -0
  717. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_embedded_mode.py +0 -0
  718. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_envsubst_basic.py +0 -0
  719. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_envsubst_edge.py +0 -0
  720. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_envsubst_massive.py +0 -0
  721. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_error.py +0 -0
  722. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_event_log.py +0 -0
  723. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_event_log_massive.py +0 -0
  724. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_fetch.py +0 -0
  725. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_fixture_files.py +0 -0
  726. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_forall_deep.py +0 -0
  727. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_git_command.py +0 -0
  728. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_git_config.py +0 -0
  729. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_git_refs.py +0 -0
  730. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_git_superproject.py +0 -0
  731. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_git_trace2_event_log.py +0 -0
  732. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_gitconfig_coverage.py +0 -0
  733. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_grep_deep.py +0 -0
  734. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_harness_smoke.py +0 -0
  735. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_hooks.py +0 -0
  736. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_import_verification.py +0 -0
  737. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_imports.py +0 -0
  738. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_include_path_resolution.py +0 -0
  739. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_info_deep.py +0 -0
  740. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_init_deep.py +0 -0
  741. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_list_massive.py +0 -0
  742. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_main.py +0 -0
  743. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_main_coverage.py +0 -0
  744. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_main_init_download_boost.py +0 -0
  745. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_makefile_lint_format.py +0 -0
  746. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_makefile_structure.py +0 -0
  747. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_makefile_test_targets.py +0 -0
  748. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_coverage_boost.py +0 -0
  749. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_deep.py +0 -0
  750. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_doc_rp_flags.py +0 -0
  751. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_massive.py +0 -0
  752. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_subcmd_massive.py +0 -0
  753. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_xml.py +0 -0
  754. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_manifest_xml_pep440.py +0 -0
  755. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_medium_files_boost.py +0 -0
  756. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_mkdtemp_cleanup.py +0 -0
  757. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_overview_massive.py +0 -0
  758. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_package_structure.py +0 -0
  759. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_pager.py +0 -0
  760. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_parselist.py +0 -0
  761. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_pep440_edge_1.py +0 -0
  762. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_pep440_edge_2.py +0 -0
  763. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_pep440_ops_ge.py +0 -0
  764. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_pep440_ops_rest.py +0 -0
  765. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_platform_utils.py +0 -0
  766. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_process_isolation.py +0 -0
  767. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_progress.py +0 -0
  768. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project.py +0 -0
  769. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_coverage_boost.py +0 -0
  770. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_coverage_threshold.py +0 -0
  771. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_deep.py +0 -0
  772. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_deep_boost.py +0 -0
  773. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_final_boost.py +0 -0
  774. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_integration.py +0 -0
  775. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_massive.py +0 -0
  776. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_metaproject_boost.py +0 -0
  777. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_methods.py +0 -0
  778. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_project_sync.py +0 -0
  779. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_prune_massive.py +0 -0
  780. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_rebase_coverage.py +0 -0
  781. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_remaining_coverage_boost.py +0 -0
  782. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_repo_envsubst_api.py +0 -0
  783. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_repo_logging.py +0 -0
  784. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_repo_run_api.py +0 -0
  785. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_repo_sync_api.py +0 -0
  786. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_repo_trace.py +0 -0
  787. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_revision_inheritance.py +0 -0
  788. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_revision_tag_branch_sha.py +0 -0
  789. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_ruff_config.py +0 -0
  790. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_selfupdate_embedded.py +0 -0
  791. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_selfupdate_massive.py +0 -0
  792. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_small_files_boost.py +0 -0
  793. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_ssh.py +0 -0
  794. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_ssh_deep.py +0 -0
  795. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_stage_coverage.py +0 -0
  796. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_stage_massive.py +0 -0
  797. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_start_coverage.py +0 -0
  798. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_status_coverage.py +0 -0
  799. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_status_gaps.py +0 -0
  800. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_status_massive.py +0 -0
  801. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmd_imports.py +0 -0
  802. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds.py +0 -0
  803. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_abandon.py +0 -0
  804. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_branches.py +0 -0
  805. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_checkout.py +0 -0
  806. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_cherry_pick.py +0 -0
  807. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_diff.py +0 -0
  808. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_diffmanifests.py +0 -0
  809. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_download.py +0 -0
  810. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_envsubst.py +0 -0
  811. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_forall.py +0 -0
  812. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_gc.py +0 -0
  813. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_grep.py +0 -0
  814. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_help.py +0 -0
  815. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_info.py +0 -0
  816. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_init.py +0 -0
  817. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_list.py +0 -0
  818. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_manifest.py +0 -0
  819. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_overview.py +0 -0
  820. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_prune.py +0 -0
  821. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_rebase.py +0 -0
  822. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_selfupdate.py +0 -0
  823. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_smartsync.py +0 -0
  824. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_stage.py +0 -0
  825. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_start.py +0 -0
  826. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_status.py +0 -0
  827. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_sync.py +0 -0
  828. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_subcmds_upload.py +0 -0
  829. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_superproject_deep.py +0 -0
  830. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_sync_coverage_boost.py +0 -0
  831. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_sync_deep.py +0 -0
  832. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_sync_deep_boost.py +0 -0
  833. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_sync_massive.py +0 -0
  834. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_upload_deep.py +0 -0
  835. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_version_consolidation.py +0 -0
  836. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_version_constraints.py +0 -0
  837. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_wheel_contents.py +0 -0
  838. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_wrapper.py +0 -0
  839. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_annotation_attributes.py +0 -0
  840. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_annotation_crossref.py +0 -0
  841. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_annotation_happy.py +0 -0
  842. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_contactinfo_attributes.py +0 -0
  843. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_contactinfo_crossref.py +0 -0
  844. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_contactinfo_happy.py +0 -0
  845. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_copyfile_attributes.py +0 -0
  846. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_copyfile_crossref.py +0 -0
  847. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_copyfile_happy.py +0 -0
  848. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_default_attributes.py +0 -0
  849. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_default_crossref.py +0 -0
  850. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_default_happy.py +0 -0
  851. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_extend_project_attributes.py +0 -0
  852. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_extend_project_crossref.py +0 -0
  853. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_extend_project_happy.py +0 -0
  854. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_fault_malformed.py +0 -0
  855. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_fault_structural.py +0 -0
  856. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_include_attributes.py +0 -0
  857. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_include_crossref.py +0 -0
  858. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_include_cycles.py +0 -0
  859. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_include_happy.py +0 -0
  860. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_linkfile_attributes.py +0 -0
  861. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_linkfile_crossref.py +0 -0
  862. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_linkfile_happy.py +0 -0
  863. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_attributes.py +0 -0
  864. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_crossref.py +0 -0
  865. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_happy.py +0 -0
  866. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_server_attributes.py +0 -0
  867. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_server_crossref.py +0 -0
  868. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_server_flow.py +0 -0
  869. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_manifest_server_happy.py +0 -0
  870. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_notice_attributes.py +0 -0
  871. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_notice_crossref.py +0 -0
  872. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_notice_happy.py +0 -0
  873. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_project_attributes.py +0 -0
  874. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_project_crossref.py +0 -0
  875. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_project_happy.py +0 -0
  876. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remote_attributes.py +0 -0
  877. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remote_crossref.py +0 -0
  878. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remote_happy.py +0 -0
  879. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remove_project_attributes.py +0 -0
  880. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remove_project_crossref.py +0 -0
  881. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_remove_project_happy.py +0 -0
  882. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_repo_hooks_attributes.py +0 -0
  883. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_repo_hooks_crossref.py +0 -0
  884. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_repo_hooks_happy.py +0 -0
  885. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_submanifest_attributes.py +0 -0
  886. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_submanifest_crossref.py +0 -0
  887. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_submanifest_happy.py +0 -0
  888. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_superproject_attributes.py +0 -0
  889. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_superproject_crossref.py +0 -0
  890. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_superproject_flow.py +0 -0
  891. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xml_superproject_happy.py +0 -0
  892. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xmlbool.py +0 -0
  893. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_xmlint.py +0 -0
  894. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/repo/test_yamllint_config.py +0 -0
  895. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_accessed_at_coalescing.py +0 -0
  896. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_add.py +0 -0
  897. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_add_collision.py +0 -0
  898. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_add_zero_tags.py +0 -0
  899. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_background_refresh.py +0 -0
  900. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_bare_semver_to_tag.py +0 -0
  901. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cache.py +0 -0
  902. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cache_ttl.py +0 -0
  903. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cached_catalogs.py +0 -0
  904. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog.py +0 -0
  905. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_check_parser.py +0 -0
  906. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_entry_uniqueness.py +0 -0
  907. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_framework.py +0 -0
  908. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_legacy_dir.py +0 -0
  909. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_metadata.py +0 -0
  910. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_project_tag_format.py +0 -0
  911. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_remote_url.py +0 -0
  912. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_source_name.py +0 -0
  913. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_strict.py +0 -0
  914. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_audit_tag_format.py +0 -0
  915. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_catalog_source_parsing.py +0 -0
  916. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_check_no_comments.py +0 -0
  917. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_ci_workflows.py +0 -0
  918. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cli_args.py +0 -0
  919. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cli_help_format.py +0 -0
  920. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_cli_json_stream_discipline.py +0 -0
  921. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_cached_catalogs.py +0 -0
  922. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_catalog_entries.py +0 -0
  923. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_catalog_versions.py +0 -0
  924. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_lockfile_names.py +0 -0
  925. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_project_versions.py +0 -0
  926. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_complete_source_names.py +0 -0
  927. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_completion.py +0 -0
  928. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_completion_sanitization.py +0 -0
  929. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_completion_subcommand.py +0 -0
  930. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_concurrency.py +0 -0
  931. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_conftest_scrubber.py +0 -0
  932. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants_doctor_subcheck.py +0 -0
  933. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants_env_int.py +0 -0
  934. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants_install_after_add.py +0 -0
  935. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants_outdated_refs_tags.py +0 -0
  936. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_constants_why_lockfile.py +0 -0
  937. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_derive_source_name.py +0 -0
  938. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_discover.py +0 -0
  939. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_discover_source_names_missing_url.py +0 -0
  940. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_docs_embedded_architecture.py +0 -0
  941. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_docs_remaining_and_catalog.py +0 -0
  942. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor.py +0 -0
  943. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_cache_flags.py +0 -0
  944. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_completion_errors.py +0 -0
  945. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_completion_staleness.py +0 -0
  946. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_consistency.py +0 -0
  947. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_coverage_gaps.py +0 -0
  948. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_effective_source.py +0 -0
  949. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_doctor_remote_reachability.py +0 -0
  950. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_env_isolation.py +0 -0
  951. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_envsubst_subcommand.py +0 -0
  952. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_git_runner.py +0 -0
  953. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_include_walker.py +0 -0
  954. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_color_default.py +0 -0
  955. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_command.py +0 -0
  956. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_conflict_detection.py +0 -0
  957. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_https_enforcement.py +0 -0
  958. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_placeholder_validation.py +0 -0
  959. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_reconcile_decision.py +0 -0
  960. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_refresh_lock.py +0 -0
  961. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_refresh_lock_source.py +0 -0
  962. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_state_matrix.py +0 -0
  963. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_strict_flags.py +0 -0
  964. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_install_strict_lock_orphan_naming.py +0 -0
  965. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_manifest_paths.py +0 -0
  966. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_t14.py +0 -0
  967. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_t4.py +0 -0
  968. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_t5.py +0 -0
  969. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_t6.py +0 -0
  970. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_t7.py +0 -0
  971. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_integration_testing_doc_s2_tier1.py +0 -0
  972. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_kanon_hash.py +0 -0
  973. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_kanonenv.py +0 -0
  974. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_kanonenv_advanced_edge_cases.py +0 -0
  975. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_kanonenv_edge_cases.py +0 -0
  976. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_levenshtein.py +0 -0
  977. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_lock_file_path.py +0 -0
  978. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_lockfile.py +0 -0
  979. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_lockfile_coverage_gaps.py +0 -0
  980. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_lockfile_schema_migration.py +0 -0
  981. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_manifest.py +0 -0
  982. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_marketplace.py +0 -0
  983. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_marketplace_cmd.py +0 -0
  984. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_marketplace_install.py +0 -0
  985. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_marketplace_non_plugin_skip.py +0 -0
  986. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_marketplace_validator.py +0 -0
  987. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_metadata.py +0 -0
  988. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_midtoken_splitter.py +0 -0
  989. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_outdated.py +0 -0
  990. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_outdated_branch_pinned.py +0 -0
  991. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_outdated_fail_on_upgrade.py +0 -0
  992. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_outdated_format_json.py +0 -0
  993. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_pep440_filter.py +0 -0
  994. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_powershell.py +0 -0
  995. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_pre_push_hook.py +0 -0
  996. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_preamble.py +0 -0
  997. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_preamble_semver_tags.py +0 -0
  998. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_provider_agnosticism.py +0 -0
  999. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_pyproject_build_config.py +0 -0
  1000. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_remote_url.py +0 -0
  1001. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_remove.py +0 -0
  1002. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_remove_dry_run.py +0 -0
  1003. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_remove_force.py +0 -0
  1004. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_remove_line_endings.py +0 -0
  1005. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_repo.py +0 -0
  1006. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_repo_abspath.py +0 -0
  1007. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_repo_command.py +0 -0
  1008. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_resolve_catalog_dir.py +0 -0
  1009. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_revision_resolve.py +0 -0
  1010. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_rx_catalog_sub_repo.py +0 -0
  1011. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_sanitize.py +0 -0
  1012. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_all_versions.py +0 -0
  1013. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_coverage_gaps.py +0 -0
  1014. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_detail.py +0 -0
  1015. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_filter.py +0 -0
  1016. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_format_json.py +0 -0
  1017. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_search_tree.py +0 -0
  1018. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_spawn.py +0 -0
  1019. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_url.py +0 -0
  1020. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_validate.py +0 -0
  1021. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_validate_command.py +0 -0
  1022. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_validate_metadata.py +0 -0
  1023. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_version.py +0 -0
  1024. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_version_constraint_errors.py +0 -0
  1025. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_why.py +0 -0
  1026. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_why_ambiguity.py +0 -0
  1027. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_why_format_json.py +0 -0
  1028. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_why_suggestions.py +0 -0
  1029. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tests/unit/test_xml_validator.py +0 -0
  1030. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tools/lint/check_no_comments.py +0 -0
  1031. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/tools/test_tmp_monitor.py +0 -0
  1032. {kanon_cli-3.1.1 → kanon_cli-3.3.0}/uv.lock +0 -0
@@ -2,8 +2,205 @@
2
2
 
3
3
 
4
4
 
5
+ ## v3.3.0 (2026-07-17)
6
+
7
+ ### Feature
8
+
9
+ * feat: kanon list command + usage telemetry, full install-graph capture, and update-warning enhancement (#91)
10
+
11
+ * feat: add usage telemetry, full install-graph capture, and update-warning enhancement
12
+
13
+ Emit one structured usage-telemetry event per CLI command to the Caylent
14
+ collector, fully capturing what was installed (every direct source plus every
15
+ transitive repo package with URLs and resolved content SHAs), and enhance the
16
+ "update available" warning.
17
+
18
+ Telemetry (new core/telemetry.py):
19
+ - Hooked via try/finally around dispatch in cli.py; captures command, subcommand,
20
+ boolean flag names, allowlisted flag values, outcome (exit code/status/error
21
+ class/duration), runtime environment, and credential-stripped git provenance.
22
+ - OTLP/HTTP logs JSON with one log record whose body is a flat
23
+ {tool,timestamp,event_type,payload} object (payload a JSON string); POSTed via
24
+ stdlib urllib in a detached, non-blocking, silent, never-fail background
25
+ process (utils/spawn.spawn_detached), HTTPS-only guard, timeouts + body cap.
26
+ - Auto opted-in by default; the only opt-out is KANON_TELEMETRY_DISABLED (no
27
+ --no-telemetry flag). KANON_TELEMETRY_ENDPOINT / --telemetry-endpoint and
28
+ KANON_TELEMETRY_DEBUG / --telemetry-debug are supported.
29
+ - Zero-secret allowlist: never raw argv, keys, tokens, credentials, env-var
30
+ values, or file contents; every URL is credential-stripped.
31
+
32
+ Full install-graph capture (core/install.py):
33
+ - Populate SourceEntry.projects on install by resolving project -> remote -> URL
34
+ from the already-synced manifests (walk_includes_collecting_remotes +
35
+ join_project_repo_url + canonicalize_repo_url) joined with the captured content
36
+ pins. This also fixes `kanon why` showing an empty project layer on
37
+ install-written lockfiles. Telemetry emits payload.install_graph and a
38
+ flattened payload.installed_packages[] (direct + transitive), capped under the
39
+ collector body limit with install_graph_truncated on overflow.
40
+
41
+ Update-warning enhancement (core/update_check.py):
42
+ - Yellow banner with the current version in red and the latest in green; a red
43
+ "no internet access -- could not check for updates" notice on a failed fetch,
44
+ shown at most once per window; default KANON_UPDATE_CHECK_TTL lowered to 3h.
45
+
46
+ Docs: new docs/privacy.md (collected fields, encryption, opt-out) linked from
47
+ README; telemetry rows in docs/cli-reference.md and docs/configuration.md;
48
+ regenerated help + completion snapshots.
49
+
50
+ * test: include telemetry global flags in bash completion expectation
51
+
52
+ The new --telemetry-debug / --telemetry-endpoint global flags now appear in the
53
+ top-level bash completion, so the exact-match global_flags row in
54
+ test_completion_bash.py is extended to include them.
55
+
56
+ * test: use provider-neutral remote name in build_project_entries fixture
57
+
58
+ The provider-agnostic host gate forbids the bare token 'gh'; rename the fixture
59
+ manifest remote from 'gh' to 'origin' so the manifest XML fixtures carry no
60
+ provider-specific reference.
61
+
62
+ * fix: record real command outcome in telemetry and emit for --version/--help/bare invocations
63
+
64
+ * feat: add kanon list command (declared vs installed source inventory)
65
+
66
+ Add `kanon list`, the flat inventory command that reconciles the sources
67
+ declared in .kanon against those installed in .kanon.lock and tags each one
68
+ installed / not-installed / orphan -- the kanon analogue of `pip list` /
69
+ `npm ls` / `poetry show`.
70
+
71
+ Flags: --declared, --tree, --status <installed|not-installed|orphan>,
72
+ --format <table|json>, --kanon-file, --lock-file. Every failure path yields a
73
+ clean single-prefixed ERROR (no traceback). The command emits usage telemetry
74
+ like every other command (command=list, --tree flag, --format/--status values
75
+ via the flag-value allowlist).
76
+
77
+ The declared-vs-installed partition reuses a new non-raising
78
+ reconcile_declared_installed() extracted from check_lockfile_consistency (one
79
+ source of truth). Covered by unit/functional/integration/scenario tests plus a
80
+ real-git add->install->edit->list journey; list.py at 100% coverage. Help and
81
+ shell-completion snapshots and docs updated.
82
+
83
+ The 3.0.0 list->search rename left guards asserting `list` is an unknown
84
+ command; those are updated to reflect `list` now being a distinct command.
85
+
86
+ * test: isolate test subprocesses from coverage subprocess measurement
87
+
88
+ Under `pytest --cov` (make test) pytest-cov and coverage export COV_CORE_* /
89
+ COVERAGE_PROCESS_* so spawned subprocesses auto-start coverage. A measured
90
+ `kanon` subprocess then writes a .coverage-data directory into its working
91
+ directory -- resolved relative to the child CWD on some filesystems -- which
92
+ behavioural subprocess tests that inspect the child filesystem
93
+ (`kanon repo status --orphans`) or parse its stderr (`--telemetry-debug` JSON)
94
+ then trip over, non-deterministically across OS / filesystem.
95
+
96
+ Strip the coverage subprocess-trigger variables from the child environment in
97
+ the functional and scenario subprocess runners and the telemetry-journey env
98
+ builder via a shared strip_subprocess_coverage_env helper. Behavioural CLI
99
+ subprocess tests do not need coverage of the child; the 90% coverage gate is
100
+ measured in-process on the unit tier, which uses its own runner and is
101
+ unaffected. ([`57246f8`](https://github.com/caylent-solutions/kanon/commit/57246f8a8a46b99ad2b35a954289d7a9e7d1966c))
102
+
103
+
104
+ ## v3.2.0 (2026-07-13)
105
+
106
+ ### Chore
107
+
108
+ * chore(release): 3.2.0 ([`b503e3c`](https://github.com/caylent-solutions/kanon/commit/b503e3cf92479b6192b186ad6b2481563c916074))
109
+
110
+ ### Feature
111
+
112
+ * feat(clean): ~/.kanon-home store rename, .kanon-dir guard, --purge/--purge-all (store-only teardown with no .kanon), no unconditional .gitignore (#89)
113
+
114
+ * feat(clean): add --purge/--purge-all; default home store to ~/.kanon-home; clean error when .kanon is a directory
115
+
116
+ Three related changes so kanon works cleanly from any directory (including
117
+ $HOME) and can be fully torn down with the tool:
118
+
119
+ - Rename the default home store directory from ~/.kanon to ~/.kanon-home so it
120
+ no longer collides with the project .kanon config file. Running kanon from
121
+ $HOME previously crashed with a cryptic "Is a directory". Only the default
122
+ changes; the --home/--store-dir flag and KANON_HOME env are unchanged. No
123
+ auto-migration: a leftover ~/.kanon store is an orphaned cache, safe to delete.
124
+
125
+ - When a writer (add / remove / marketplace enable|disable) must read or write
126
+ the .kanon config FILE but finds a .kanon DIRECTORY there, fail fast with a
127
+ clean, actionable error naming the exact rm -rf <path> command and telling the
128
+ user to re-run, instead of the cryptic IsADirectoryError.
129
+
130
+ - Add kanon clean --purge (also delete this project's .kanon and .kanon.lock)
131
+ and kanon clean --purge-all (also remove the shared KANON_HOME store dir).
132
+ --purge-all validates it removes ONLY kanon-owned content: it refuses unsafe
133
+ KANON_HOME paths (filesystem root, your home, or a parent of home/cwd), removes
134
+ only the store/ and cache/ subdirs, and removes the home root only when empty;
135
+ any non-kanon entries are kept with a warning.
136
+
137
+ Tests: unit + integration + functional for all three changes (the
138
+ directory-collision guard for all writers and the --purge-all safety refusals
139
+ included). Docs and the clean/toplevel --help snapshots updated.
140
+
141
+ * test(clean): sync completion goldens and stub signature for --purge flags
142
+
143
+ The new kanon clean --purge / --purge-all flags changed the bash and zsh
144
+ shell-completion output, so regenerate the committed golden fixtures. Also
145
+ extend the clean() side-effect stub in the path-resolution integration test
146
+ to accept the new purge / purge_home keyword arguments, matching the updated
147
+ core clean() signature.
148
+
149
+ * fix(clean): remove the shared home store on --purge-all even when no .kanon is present
150
+
151
+ kanon clean --purge-all is machine-global: it must tear down the shared
152
+ KANON_HOME store even when there is no discoverable project .kanon (for example
153
+ right after kanon clean --purge deleted it). Previously it failed with
154
+ "No .kanon file found ..." and left ~/.kanon-home in place.
155
+
156
+ _run now detects the no-usable-.kanon case (auto-discovery FileNotFoundError, or
157
+ an explicit path that is not a file) and, when --purge-all is set, removes only
158
+ the shared home store via remove_kanon_home_store(), preserving every safety
159
+ refusal (filesystem root, the user home directory, an ancestor of the home or
160
+ current directory). Plain clean and --purge without --purge-all still require a
161
+ discoverable .kanon.
162
+
163
+ Regenerates the clean help snapshot and the zsh completion golden for the
164
+ updated --purge-all help text.
165
+
166
+ * fix(install): stop writing an unconditional .gitignore; keep only the in-git-repo store safety net
167
+
168
+ In the 3.x store model both gitignore writes targeted <KANON_HOME>/store/.gitignore.
169
+ kanon install wrote .packages/ and .kanon-data/ into that file unconditionally,
170
+ littering a .gitignore even for the default ~/.kanon-home (which is not a git
171
+ repo). Remove the unconditional write.
172
+
173
+ The store safety net (write_store_gitignore_if_in_git_repo) is retained: kanon
174
+ still writes <KANON_HOME>/store/.gitignore containing "*" ONLY when the store
175
+ sits inside a git working tree, so a KANON_HOME inside a repo never commits the
176
+ fetched-artifact cache (spec Section 3.5). With the default ~/.kanon-home, kanon
177
+ writes no .gitignore at all.
178
+
179
+ update_gitignore now requires its entries argument (the removed default was the
180
+ only unconditional caller). Tests that asserted the removed unconditional write
181
+ now assert the new behavior (no .gitignore for a non-git store); the append-helper
182
+ mechanics tests pass explicit entries; the safety-net tests are unchanged.
183
+
184
+ Docs (how-it-works, architecture, lifecycle, integration-testing) updated;
185
+ lifecycle also documents clean --purge-all running without a .kanon.
186
+
187
+ ---------
188
+
189
+ Co-authored-by: t <t@e.x> ([`d9b0ad1`](https://github.com/caylent-solutions/kanon/commit/d9b0ad1856ab58487b7ed3efdc3ff9d87b60b193))
190
+
191
+ ### Unknown
192
+
193
+ * Merge pull request #90 from caylent-solutions/release-3.2.0
194
+
195
+ Release 3.2.0 ([`fb944e2`](https://github.com/caylent-solutions/kanon/commit/fb944e251cf650020070e29cb28a26cbffc886da))
196
+
197
+
5
198
  ## v3.1.1 (2026-06-27)
6
199
 
200
+ ### Chore
201
+
202
+ * chore(release): 3.1.1 ([`890b026`](https://github.com/caylent-solutions/kanon/commit/890b026b47ca8820b41ca8d218658e50691254a2))
203
+
7
204
  ### Fix
8
205
 
9
206
  * fix: outdated handles namespaced/bare exact tags; why disambiguates same-URL sources (#87)
@@ -31,6 +228,12 @@ distinct alias tokens + alias round-trip for why).
31
228
 
32
229
  Co-authored-by: t <t@e.x> ([`0d45f67`](https://github.com/caylent-solutions/kanon/commit/0d45f673243861b0aaef823f6d95e0a548c447d4))
33
230
 
231
+ ### Unknown
232
+
233
+ * Merge pull request #88 from caylent-solutions/release-3.1.1
234
+
235
+ Release 3.1.1 ([`cec7213`](https://github.com/caylent-solutions/kanon/commit/cec7213109c0e307e80751e728c6a59751e20794))
236
+
34
237
 
35
238
  ## v3.1.0 (2026-06-27)
36
239
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kanon-cli
3
- Version: 3.1.1
3
+ Version: 3.3.0
4
4
  Summary: Kanon (Kanon Package Manager) CLI tool
5
5
  Project-URL: Homepage, https://github.com/caylent-solutions/kanon
6
6
  Project-URL: Issues, https://github.com/caylent-solutions/kanon/issues
@@ -55,6 +55,7 @@ via declarative manifests.
55
55
  - [kanon remove](#kanon-remove)
56
56
  - [kanon install](#kanon-install)
57
57
  - [kanon clean](#kanon-clean)
58
+ - [kanon list](#kanon-list)
58
59
  - [kanon outdated](#kanon-outdated)
59
60
  - [kanon why](#kanon-why)
60
61
  - [kanon doctor](#kanon-doctor)
@@ -183,7 +184,7 @@ git commit -m "feat: add my-package 1.2.3"
183
184
 
184
185
  Committing both files ensures the entire team installs the same resolved
185
186
  package versions. The synced artifacts live in the shared `KANON_HOME`
186
- store (`~/.kanon` by default), never in your project, so there is nothing
187
+ store (`~/.kanon-home` by default), never in your project, so there is nothing
187
188
  package-related to commit beyond `.kanon` and `.kanon.lock`.
188
189
 
189
190
  ---
@@ -208,6 +209,7 @@ persistent installation and advanced options, see
208
209
  | `kanon search` | List packages available in a catalog or show detail for one | [docs/list-and-add.md](docs/list-and-add.md) |
209
210
  | `kanon add` | Add a package (with optional version constraint) to `.kanon` | [docs/list-and-add.md](docs/list-and-add.md) |
210
211
  | `kanon remove` | Remove a package from `.kanon` | [docs/list-and-add.md](docs/list-and-add.md) |
212
+ | `kanon list` | List sources declared in `.kanon` vs installed in `.kanon.lock` (installed / not-installed / orphan) | [docs/cli-reference.md](docs/cli-reference.md#kanon-list) |
211
213
  | `kanon outdated` | Show packages in `.kanon` that have newer versions available | [docs/outdated-and-why.md](docs/outdated-and-why.md) |
212
214
  | `kanon why` | Explain why a specific package version was resolved | [docs/outdated-and-why.md](docs/outdated-and-why.md) |
213
215
  | `kanon install` | Resolve, clone, and symlink all packages; writes `.kanon.lock` | [docs/lockfile.md](docs/lockfile.md) |
@@ -216,7 +218,7 @@ persistent installation and advanced options, see
216
218
  | `kanon validate xml` | Validate XML manifests under `repo-specs/` | [docs/repo/manifest-format.md](docs/repo/manifest-format.md) |
217
219
  | `kanon validate marketplace` | Validate marketplace XML manifests under `repo-specs/` | [docs/repo/manifest-format.md](docs/repo/manifest-format.md) |
218
220
  | `kanon validate metadata` | Validate catalog entry metadata | [docs/catalog-author-guide.md](docs/catalog-author-guide.md) |
219
- | `kanon clean` | Remove synced packages and Kanon state (`--orphans` also prunes unreferenced marketplaces) | [docs/lifecycle.md](docs/lifecycle.md) |
221
+ | `kanon clean` | Remove synced packages and Kanon state (`--orphans` prunes unreferenced marketplaces; `--purge` also deletes `.kanon`/`.kanon.lock`; `--purge-all` also removes the `KANON_HOME` store) | [docs/lifecycle.md](docs/lifecycle.md) |
220
222
  | `kanon repo` | Low-level manifest-driven repo sync subsystem | [docs/repo/README.md](docs/repo/README.md) |
221
223
  | `kanon marketplace` | Manage the per-dependency Claude marketplace install flag in `.kanon` (`enable` / `disable` / `status`) | [docs/configuration.md](docs/configuration.md) |
222
224
  | `kanon completion` | Emit a shell completion script for bash, zsh, or powershell | [docs/shell-completion.md](docs/shell-completion.md) |
@@ -572,6 +574,8 @@ Executes the full teardown lifecycle.
572
574
  kanon clean # auto-discover .kanon by walking up from cwd
573
575
  kanon clean .kanon # explicit path to .kanon file
574
576
  kanon clean --orphans # also unregister orphaned marketplaces
577
+ kanon clean --purge # also delete .kanon and .kanon.lock
578
+ kanon clean --purge-all # also remove the KANON_HOME store directory
575
579
  ```
576
580
 
577
581
  **Behavior:**
@@ -585,6 +589,32 @@ With `--orphans`, before the normal teardown kanon also unregisters any
585
589
  kanon-owned marketplaces recorded in `.kanon.lock` that are no longer
586
590
  referenced by `.kanon`, pruning them from `~/.claude`.
587
591
 
592
+ With `--purge`, kanon also deletes this project's `.kanon` and `.kanon.lock`
593
+ files. With `--purge-all`, it additionally removes the shared `KANON_HOME`
594
+ store directory (default `~/.kanon-home`), removing only kanon-owned content
595
+ (`store/`, `cache/`, and the emptied root) and refusing unsafe `KANON_HOME`
596
+ paths such as your home directory or the filesystem root.
597
+
598
+ ### kanon list
599
+
600
+ Lists the sources declared in `.kanon` against those installed in `.kanon.lock`,
601
+ tagging each `installed`, `not-installed`, or `orphan` -- the kanon analogue of
602
+ `pip list` / `npm ls`.
603
+
604
+ ```bash
605
+ kanon list # every source, declared vs installed, tagged
606
+ kanon list --declared # only sources declared in .kanon (no orphans)
607
+ kanon list --status orphan # only sources in the lock no longer declared
608
+ kanon list --tree # expand installed sources to transitive packages
609
+ kanon list --format json # machine-readable JSON
610
+ ```
611
+
612
+ A source is `installed` when it is in both files, `not-installed` when declared
613
+ but not yet locked (run `kanon install`), and `orphan` when locked but no longer
614
+ declared. Key options: `--declared`, `--tree`, `--status {installed,not-installed,orphan}`,
615
+ `--format {table,json}`, `--kanon-file`, `--lock-file`. See
616
+ [docs/cli-reference.md](docs/cli-reference.md#kanon-list).
617
+
588
618
  ### kanon outdated
589
619
 
590
620
  Compares each source in `.kanon` against the catalog and emits a table of
@@ -795,9 +825,9 @@ and `kanon catalog audit`. `kanon install` is hermetic: it reads only
795
825
  `.kanon` and `.kanon.lock` and does not consult a catalog source.
796
826
 
797
827
  **`KANON_HOME`**
798
- Root of the shared kanon store and caches (default `~/.kanon`). The
828
+ Root of the shared kanon store and caches (default `~/.kanon-home`). The
799
829
  `--home` / `--store-dir <path>` global flag overrides it for a single
800
- invocation; precedence is flag > `KANON_HOME` > `~/.kanon`. Replaces the
830
+ invocation; precedence is flag > `KANON_HOME` > `~/.kanon-home`. Replaces the
801
831
  removed `KANON_WORKSPACE_DIR` / `KANON_CACHE_DIR` variables. Synced artifacts
802
832
  and the per-`.kanon` workspace lock both live under `${KANON_HOME}/store/`,
803
833
  so the project directory holds only `.kanon` (plus `.kanon.lock` after the
@@ -900,7 +930,7 @@ regardless of which source provided each package.
900
930
  ### Directory Structure After Install
901
931
 
902
932
  Fetched artifacts live in the shared `KANON_HOME` store
903
- (`$KANON_HOME`, default `~/.kanon`), content-addressed and deduped across
933
+ (`$KANON_HOME`, default `~/.kanon-home`), content-addressed and deduped across
904
934
  projects. Only `.kanon` and `.kanon.lock` live in (and are committed to)
905
935
  the project itself:
906
936
 
@@ -909,7 +939,7 @@ project/
909
939
  .kanon # Configuration (committed)
910
940
  .kanon.lock # Resolved SHAs (committed)
911
941
 
912
- $KANON_HOME/ # Shared store (default ~/.kanon; not in the repo)
942
+ $KANON_HOME/ # Shared store (default ~/.kanon-home; not in the repo)
913
943
  store/
914
944
  .kanon-data/
915
945
  sources/
@@ -1475,6 +1505,23 @@ version bumps.
1475
1505
  supported; see [Platform support](#platform-support) and use WSL2)
1476
1506
  - [Contributing](CONTRIBUTING.md) -- How to create and maintain Kanon
1477
1507
  packages and marketplaces
1508
+ - [Privacy & Telemetry](docs/privacy.md) -- What usage telemetry kanon
1509
+ collects, why, how it is encrypted, and how to turn it off
1510
+
1511
+ ---
1512
+
1513
+ ## Usage telemetry
1514
+
1515
+ kanon emits one anonymised-by-design usage event per command to help the
1516
+ maintainers understand which commands and package sources are used. Telemetry
1517
+ is **on by default**, runs **silently** and **non-blocking**, never blocks or
1518
+ fails your command, and serialises only an explicit allowlist of kanon-computed
1519
+ fields -- never raw argv, credentials, keys, tokens, env-var values, or file
1520
+ contents (every URL is credential-stripped before it is sent).
1521
+
1522
+ Disable it entirely by setting `KANON_TELEMETRY_DISABLED=1`. See
1523
+ [docs/privacy.md](docs/privacy.md) for the full list of collected fields and the
1524
+ transit/at-rest encryption.
1478
1525
 
1479
1526
  ---
1480
1527
 
@@ -33,6 +33,7 @@ via declarative manifests.
33
33
  - [kanon remove](#kanon-remove)
34
34
  - [kanon install](#kanon-install)
35
35
  - [kanon clean](#kanon-clean)
36
+ - [kanon list](#kanon-list)
36
37
  - [kanon outdated](#kanon-outdated)
37
38
  - [kanon why](#kanon-why)
38
39
  - [kanon doctor](#kanon-doctor)
@@ -161,7 +162,7 @@ git commit -m "feat: add my-package 1.2.3"
161
162
 
162
163
  Committing both files ensures the entire team installs the same resolved
163
164
  package versions. The synced artifacts live in the shared `KANON_HOME`
164
- store (`~/.kanon` by default), never in your project, so there is nothing
165
+ store (`~/.kanon-home` by default), never in your project, so there is nothing
165
166
  package-related to commit beyond `.kanon` and `.kanon.lock`.
166
167
 
167
168
  ---
@@ -186,6 +187,7 @@ persistent installation and advanced options, see
186
187
  | `kanon search` | List packages available in a catalog or show detail for one | [docs/list-and-add.md](docs/list-and-add.md) |
187
188
  | `kanon add` | Add a package (with optional version constraint) to `.kanon` | [docs/list-and-add.md](docs/list-and-add.md) |
188
189
  | `kanon remove` | Remove a package from `.kanon` | [docs/list-and-add.md](docs/list-and-add.md) |
190
+ | `kanon list` | List sources declared in `.kanon` vs installed in `.kanon.lock` (installed / not-installed / orphan) | [docs/cli-reference.md](docs/cli-reference.md#kanon-list) |
189
191
  | `kanon outdated` | Show packages in `.kanon` that have newer versions available | [docs/outdated-and-why.md](docs/outdated-and-why.md) |
190
192
  | `kanon why` | Explain why a specific package version was resolved | [docs/outdated-and-why.md](docs/outdated-and-why.md) |
191
193
  | `kanon install` | Resolve, clone, and symlink all packages; writes `.kanon.lock` | [docs/lockfile.md](docs/lockfile.md) |
@@ -194,7 +196,7 @@ persistent installation and advanced options, see
194
196
  | `kanon validate xml` | Validate XML manifests under `repo-specs/` | [docs/repo/manifest-format.md](docs/repo/manifest-format.md) |
195
197
  | `kanon validate marketplace` | Validate marketplace XML manifests under `repo-specs/` | [docs/repo/manifest-format.md](docs/repo/manifest-format.md) |
196
198
  | `kanon validate metadata` | Validate catalog entry metadata | [docs/catalog-author-guide.md](docs/catalog-author-guide.md) |
197
- | `kanon clean` | Remove synced packages and Kanon state (`--orphans` also prunes unreferenced marketplaces) | [docs/lifecycle.md](docs/lifecycle.md) |
199
+ | `kanon clean` | Remove synced packages and Kanon state (`--orphans` prunes unreferenced marketplaces; `--purge` also deletes `.kanon`/`.kanon.lock`; `--purge-all` also removes the `KANON_HOME` store) | [docs/lifecycle.md](docs/lifecycle.md) |
198
200
  | `kanon repo` | Low-level manifest-driven repo sync subsystem | [docs/repo/README.md](docs/repo/README.md) |
199
201
  | `kanon marketplace` | Manage the per-dependency Claude marketplace install flag in `.kanon` (`enable` / `disable` / `status`) | [docs/configuration.md](docs/configuration.md) |
200
202
  | `kanon completion` | Emit a shell completion script for bash, zsh, or powershell | [docs/shell-completion.md](docs/shell-completion.md) |
@@ -550,6 +552,8 @@ Executes the full teardown lifecycle.
550
552
  kanon clean # auto-discover .kanon by walking up from cwd
551
553
  kanon clean .kanon # explicit path to .kanon file
552
554
  kanon clean --orphans # also unregister orphaned marketplaces
555
+ kanon clean --purge # also delete .kanon and .kanon.lock
556
+ kanon clean --purge-all # also remove the KANON_HOME store directory
553
557
  ```
554
558
 
555
559
  **Behavior:**
@@ -563,6 +567,32 @@ With `--orphans`, before the normal teardown kanon also unregisters any
563
567
  kanon-owned marketplaces recorded in `.kanon.lock` that are no longer
564
568
  referenced by `.kanon`, pruning them from `~/.claude`.
565
569
 
570
+ With `--purge`, kanon also deletes this project's `.kanon` and `.kanon.lock`
571
+ files. With `--purge-all`, it additionally removes the shared `KANON_HOME`
572
+ store directory (default `~/.kanon-home`), removing only kanon-owned content
573
+ (`store/`, `cache/`, and the emptied root) and refusing unsafe `KANON_HOME`
574
+ paths such as your home directory or the filesystem root.
575
+
576
+ ### kanon list
577
+
578
+ Lists the sources declared in `.kanon` against those installed in `.kanon.lock`,
579
+ tagging each `installed`, `not-installed`, or `orphan` -- the kanon analogue of
580
+ `pip list` / `npm ls`.
581
+
582
+ ```bash
583
+ kanon list # every source, declared vs installed, tagged
584
+ kanon list --declared # only sources declared in .kanon (no orphans)
585
+ kanon list --status orphan # only sources in the lock no longer declared
586
+ kanon list --tree # expand installed sources to transitive packages
587
+ kanon list --format json # machine-readable JSON
588
+ ```
589
+
590
+ A source is `installed` when it is in both files, `not-installed` when declared
591
+ but not yet locked (run `kanon install`), and `orphan` when locked but no longer
592
+ declared. Key options: `--declared`, `--tree`, `--status {installed,not-installed,orphan}`,
593
+ `--format {table,json}`, `--kanon-file`, `--lock-file`. See
594
+ [docs/cli-reference.md](docs/cli-reference.md#kanon-list).
595
+
566
596
  ### kanon outdated
567
597
 
568
598
  Compares each source in `.kanon` against the catalog and emits a table of
@@ -773,9 +803,9 @@ and `kanon catalog audit`. `kanon install` is hermetic: it reads only
773
803
  `.kanon` and `.kanon.lock` and does not consult a catalog source.
774
804
 
775
805
  **`KANON_HOME`**
776
- Root of the shared kanon store and caches (default `~/.kanon`). The
806
+ Root of the shared kanon store and caches (default `~/.kanon-home`). The
777
807
  `--home` / `--store-dir <path>` global flag overrides it for a single
778
- invocation; precedence is flag > `KANON_HOME` > `~/.kanon`. Replaces the
808
+ invocation; precedence is flag > `KANON_HOME` > `~/.kanon-home`. Replaces the
779
809
  removed `KANON_WORKSPACE_DIR` / `KANON_CACHE_DIR` variables. Synced artifacts
780
810
  and the per-`.kanon` workspace lock both live under `${KANON_HOME}/store/`,
781
811
  so the project directory holds only `.kanon` (plus `.kanon.lock` after the
@@ -878,7 +908,7 @@ regardless of which source provided each package.
878
908
  ### Directory Structure After Install
879
909
 
880
910
  Fetched artifacts live in the shared `KANON_HOME` store
881
- (`$KANON_HOME`, default `~/.kanon`), content-addressed and deduped across
911
+ (`$KANON_HOME`, default `~/.kanon-home`), content-addressed and deduped across
882
912
  projects. Only `.kanon` and `.kanon.lock` live in (and are committed to)
883
913
  the project itself:
884
914
 
@@ -887,7 +917,7 @@ project/
887
917
  .kanon # Configuration (committed)
888
918
  .kanon.lock # Resolved SHAs (committed)
889
919
 
890
- $KANON_HOME/ # Shared store (default ~/.kanon; not in the repo)
920
+ $KANON_HOME/ # Shared store (default ~/.kanon-home; not in the repo)
891
921
  store/
892
922
  .kanon-data/
893
923
  sources/
@@ -1453,6 +1483,23 @@ version bumps.
1453
1483
  supported; see [Platform support](#platform-support) and use WSL2)
1454
1484
  - [Contributing](CONTRIBUTING.md) -- How to create and maintain Kanon
1455
1485
  packages and marketplaces
1486
+ - [Privacy & Telemetry](docs/privacy.md) -- What usage telemetry kanon
1487
+ collects, why, how it is encrypted, and how to turn it off
1488
+
1489
+ ---
1490
+
1491
+ ## Usage telemetry
1492
+
1493
+ kanon emits one anonymised-by-design usage event per command to help the
1494
+ maintainers understand which commands and package sources are used. Telemetry
1495
+ is **on by default**, runs **silently** and **non-blocking**, never blocks or
1496
+ fails your command, and serialises only an explicit allowlist of kanon-computed
1497
+ fields -- never raw argv, credentials, keys, tokens, env-var values, or file
1498
+ contents (every URL is credential-stripped before it is sent).
1499
+
1500
+ Disable it entirely by setting `KANON_TELEMETRY_DISABLED=1`. See
1501
+ [docs/privacy.md](docs/privacy.md) for the full list of collected fields and the
1502
+ transit/at-rest encryption.
1456
1503
 
1457
1504
  ---
1458
1505
 
@@ -74,7 +74,6 @@ the source of truth for which clones exist.
74
74
  <project-root>/
75
75
  .kanon # operator-authored config file
76
76
  .kanon.lock # generated lockfile (commit this)
77
- .gitignore # auto-updated by kanon install (idempotent)
78
77
  .kanon-data/
79
78
  .kanon-install.lock # flock-managed concurrency lock
80
79
  sources/
@@ -97,8 +96,11 @@ Key paths:
97
96
  - **`.packages/`** -- aggregated symlinks pointing into the per-source
98
97
  `.packages/*` entries. This is the only directory operators need to
99
98
  reference in downstream tooling.
100
- - **`.gitignore`** -- `kanon install` appends `.packages/` and
101
- `.kanon-data/` (idempotent; no duplicate entries are written).
99
+ - **`<KANON_HOME>/store/.gitignore`** -- `kanon install` writes this
100
+ safety net (containing `*`) ONLY when the shared `KANON_HOME` store sits
101
+ inside a git working tree, so the fetched-artifact cache is never committed.
102
+ With the default `~/.kanon-home` (not a git repo), `kanon install` writes no
103
+ `.gitignore` at all.
102
104
 
103
105
  If the `.kanon-data/` directory layout becomes inconsistent (for example after
104
106
  a SIGTERM mid-clone), run `kanon clean` to prune and recover.
@@ -100,7 +100,7 @@ To audit a remote manifest repo, set `KANON_HOME` and supply the
100
100
  source in `<git_url>@<ref>` form:
101
101
 
102
102
  ```bash
103
- export KANON_HOME=~/.kanon
103
+ export KANON_HOME=~/.kanon-home
104
104
  kanon catalog audit https://example.com/org/manifest-repo.git@main
105
105
  ```
106
106
 
@@ -409,7 +409,7 @@ before publishing a release. The steps assume a scratch clone at
409
409
  6. **List catalog entries via scratch source:**
410
410
 
411
411
  ```bash
412
- export KANON_HOME=~/.kanon
412
+ export KANON_HOME=~/.kanon-home
413
413
  kanon search --catalog-source ./scratch@main
414
414
  ```
415
415
 
@@ -171,7 +171,7 @@ spec Section 3.6 (trust model / credential isolation).
171
171
 
172
172
  The cache lives under the shared `KANON_HOME` store root. `KANON_HOME`
173
173
  resolves from the `--home` / `--store-dir` flag, then the `KANON_HOME`
174
- environment variable, then the `~/.kanon` default, so a remote audit target
174
+ environment variable, then the `~/.kanon-home` default, so a remote audit target
175
175
  works without setting `KANON_HOME` explicitly.
176
176
 
177
177
  ## Source-name-derivation check (`--check source-name-derivation`)
@@ -436,7 +436,7 @@ operators encounter resolver failures:
436
436
  # Inventory non-PEP-440 tags in a local manifest repo
437
437
  kanon catalog audit --check tag-format /path/to/manifest-repo
438
438
 
439
- # Inventory a remote manifest repo (uses the shared KANON_HOME store; ~/.kanon by default)
439
+ # Inventory a remote manifest repo (uses the shared KANON_HOME store; ~/.kanon-home by default)
440
440
  kanon catalog audit --check tag-format https://github.com/org/manifest-repo.git@main
441
441
  ```
442
442
 
@@ -601,7 +601,7 @@ kanon catalog audit
601
601
  # Audit an explicit local path
602
602
  kanon catalog audit /path/to/manifest-repo
603
603
 
604
- # Audit a remote repo (cached under the shared KANON_HOME store; ~/.kanon by default)
604
+ # Audit a remote repo (cached under the shared KANON_HOME store; ~/.kanon-home by default)
605
605
  kanon catalog audit https://github.com/org/manifest-repo.git@main
606
606
 
607
607
  # Run only metadata and tag-format checks
@@ -624,7 +624,7 @@ kanon catalog audit https://github.com/org/repo.git@v1.0.0 \
624
624
  |----------|---------|-------------|
625
625
  | `KANON_CATALOG_AUDIT_FORMAT` | `text` | Default output format. CLI `--format` takes precedence. |
626
626
  | `KANON_CATALOG_AUDIT_CACHE_TTL_SECONDS` | `3600` | Cache TTL in seconds for remote clones. Must be a positive integer. |
627
- | `KANON_HOME` | `~/.kanon` | Shared kanon home (store + caches); the audit cache lives under `${KANON_HOME}/cache`. Overridden by the `--home` / `--store-dir` flag. |
627
+ | `KANON_HOME` | `~/.kanon-home` | Shared kanon home (store + caches); the audit cache lives under `${KANON_HOME}/cache`. Overridden by the `--home` / `--store-dir` flag. |
628
628
  | `KANON_ALLOW_INSECURE_REMOTES` | (unset) | When set to `1`, suppresses R002 findings for non-HTTPS/SSH remote URLs. Any value other than `1` is treated as unset. Intended for local test fixtures only; do not set in production CI pipelines. R001 and R003 findings are never suppressed by this variable. |
629
629
 
630
630
  ## Related commands
@@ -57,7 +57,7 @@ emitted). Exit code is 1 when any error-level finding is detected.
57
57
  recreating the directory empty with mode `0700`. Reports an info finding
58
58
  with the count of files removed. This flag is independent of the health
59
59
  checks. `KANON_HOME` resolves from the `--home` / `--store-dir` flag, the
60
- `KANON_HOME` env var, then the `~/.kanon` default, so the cache directory is
60
+ `KANON_HOME` env var, then the `~/.kanon-home` default, so the cache directory is
61
61
  always resolved.
62
62
 
63
63
  `--prune-cache`
@@ -67,7 +67,7 @@ emitted). Exit code is 1 when any error-level finding is detected.
67
67
  stale `.kanon-data/.kanon-install.lock` files (mtime older than
68
68
  `KANON_DOCTOR_STALE_LOCK_AGE_HOURS` hours) as advisory findings -- doctor
69
69
  does NOT delete them. The cache directory is resolved from `KANON_HOME`
70
- (flag, env var, or `~/.kanon` default); the stale-lock scan always runs from
70
+ (flag, env var, or `~/.kanon-home` default); the stale-lock scan always runs from
71
71
  the current working directory.
72
72
 
73
73
  ## Subchecks
@@ -258,7 +258,7 @@ INFO: Completion cache refreshed: 3 file(s) removed from /home/user/.kanon/cache
258
258
  ```
259
259
 
260
260
  `KANON_HOME` resolves from the `--home` / `--store-dir` flag, the `KANON_HOME`
261
- env var, then the `~/.kanon` default, so the completion-cache directory is
261
+ env var, then the `~/.kanon-home` default, so the completion-cache directory is
262
262
  always resolved.
263
263
 
264
264
  ### Subcheck 7: Completion errors report
@@ -268,7 +268,7 @@ from `${KANON_HOME}/cache/completion-errors.log`. This log is written by shell
268
268
  completion callback failures (see E7 / `docs/shell-completion.md`).
269
269
 
270
270
  `kanon doctor` only reads this log -- it does NOT modify, truncate, or rotate it.
271
- The cache directory is resolved from `KANON_HOME` (flag, env var, or `~/.kanon`
271
+ The cache directory is resolved from `KANON_HOME` (flag, env var, or `~/.kanon-home`
272
272
  default); when the log file does not exist this subcheck reports the info notice
273
273
  below.
274
274
 
@@ -417,7 +417,7 @@ INFO: Advisory: stale install lock found at /path/to/.kanon-data/.kanon-install.
417
417
  ```
418
418
 
419
419
  `KANON_HOME` resolves from the `--home` / `--store-dir` flag, the `KANON_HOME`
420
- env var, then the `~/.kanon` default, so the cache prune always runs against
420
+ env var, then the `~/.kanon-home` default, so the cache prune always runs against
421
421
  the resolved cache directory; the stale-lock scan runs independently from the
422
422
  current working directory.
423
423
 
@@ -440,7 +440,7 @@ are emitted. Health checks (subchecks 1-5, 6, 7, 9, 11) always run after.
440
440
  | `KANON_RESOLVE_TIMEOUT` | `30` | Timeout in seconds for each `git ls-remote` call |
441
441
  | `KANON_GIT_RETRY_COUNT` | `3` | Maximum number of `git ls-remote` attempts |
442
442
  | `KANON_GIT_RETRY_DELAY` | `1` | Inter-attempt delay in seconds (read by doctor; not applied to the `git ls-remote` retry path, which delegates to `git_runner.run_git_ls_remote` and uses immediate retries with no time-based delay) |
443
- | `KANON_HOME` | `~/.kanon` | Shared kanon home (store + caches); cache lives under `${KANON_HOME}/cache`. Resolves from the `--home` / `--store-dir` flag, then this env var, then the `~/.kanon` default |
443
+ | `KANON_HOME` | `~/.kanon-home` | Shared kanon home (store + caches); cache lives under `${KANON_HOME}/cache`. Resolves from the `--home` / `--store-dir` flag, then this env var, then the `~/.kanon-home` default |
444
444
  | `KANON_COMPLETION_ERRORS_REPORT_LIMIT` | `5` | Maximum number of recent completion-error log lines to display in subcheck 7 |
445
445
  | `KANON_CACHE_PRUNE_AGE_DAYS` | `30` | Files older than this many days (by atime) are removed by `--prune-cache` (subcheck 10) |
446
446
  | `KANON_DOCTOR_STALE_LOCK_SCAN_MAX_DEPTH` | `4` | Maximum directory depth for the stale install-lock scan in `--prune-cache` (subcheck 10) |