agentbundle 0.51.0__tar.gz → 0.52.1__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 (689) hide show
  1. {agentbundle-0.51.0/agentbundle.egg-info → agentbundle-0.52.1}/PKG-INFO +20 -1
  2. {agentbundle-0.51.0 → agentbundle-0.52.1}/README-pypi.md +19 -0
  3. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/workspace_status_engine.py +141 -131
  4. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/workspace_status_prune.py +20 -16
  5. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/version.py +1 -1
  6. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/workspace_mcp.py +1 -1
  7. {agentbundle-0.51.0 → agentbundle-0.52.1/agentbundle.egg-info}/PKG-INFO +20 -1
  8. {agentbundle-0.51.0 → agentbundle-0.52.1}/pyproject.toml +1 -1
  9. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_agent_plugin_projection.py +10 -2
  10. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_tools.py +59 -2
  11. {agentbundle-0.51.0 → agentbundle-0.52.1}/MANIFEST.in +0 -0
  12. {agentbundle-0.51.0 → agentbundle-0.52.1}/README.md +0 -0
  13. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/__init__.py +0 -0
  14. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/__main__.py +0 -0
  15. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/__init__.py +0 -0
  16. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/adapter.schema.json +0 -0
  17. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/adapter.toml +0 -0
  18. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/agent-plugin-extension-namespaces.schema.json +0 -0
  19. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/agent-plugin-extension-namespaces.toml +0 -0
  20. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-index.schema.json +0 -0
  21. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
  22. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  23. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
  24. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
  25. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/CLAUDE.md +0 -0
  26. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  27. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
  28. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
  29. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
  30. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  31. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  32. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  33. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/CLAUDE.md +0 -0
  34. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  35. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  36. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  37. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
  38. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_layout_declared_section.py +0 -0
  39. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
  40. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
  41. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue.schema.json +0 -0
  42. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/close_work.py +0 -0
  43. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/cooling.py +0 -0
  44. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/distribution-routes.schema.json +0 -0
  45. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/distribution-routes.toml +0 -0
  46. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/file_safety.py +0 -0
  47. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/guide.schema.json +0 -0
  48. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/install-defaults.toml +0 -0
  49. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/install-marker.py +0 -0
  50. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/knowledge-captured-observation.schema.json +0 -0
  51. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/marketplace-entry.schema.json +0 -0
  52. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/pack.schema.json +0 -0
  53. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  54. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  55. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/profile.schema.json +0 -0
  56. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/public-contracts.txt +0 -0
  57. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/skill-manifest.schema.json +0 -0
  58. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/skill.schema.json +0 -0
  59. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/target-vocab.toml +0 -0
  60. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/LICENSE.md +0 -0
  61. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/PROVENANCE.md +0 -0
  62. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/mcp.schema.json +0 -0
  63. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/plugin.schema.json +0 -0
  64. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/work_intake_refresh.py +0 -0
  65. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/bounded_metadata.py +0 -0
  66. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/__init__.py +0 -0
  67. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/__main__.py +0 -0
  68. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapter_root_bins.py +0 -0
  69. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/__init__.py +0 -0
  70. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/_sweep_guard.py +0 -0
  71. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/claude_code.py +0 -0
  72. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/codex.py +0 -0
  73. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/copilot.py +0 -0
  74. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/cursor.py +0 -0
  75. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/gemini.py +0 -0
  76. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro.py +0 -0
  77. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro_cli.py +0 -0
  78. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro_ide.py +0 -0
  79. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/contract.py +0 -0
  80. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/hook_wiring_rules.py +0 -0
  81. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/lint_packs.py +0 -0
  82. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/main.py +0 -0
  83. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/phase_order.py +0 -0
  84. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projection_io.py +0 -0
  85. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/__init__.py +0 -0
  86. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  87. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  88. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  89. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/direct_directory.py +0 -0
  90. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  91. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/hook_id.py +0 -0
  92. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  93. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  94. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/merge_json.py +0 -0
  95. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/plugin_hooks.py +0 -0
  96. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/user_merge_json.py +0 -0
  97. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  98. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  99. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/marketplace.toml +0 -0
  100. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-agent-plugin.toml +0 -0
  101. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  102. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  103. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  104. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/self-host.toml +0 -0
  105. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_agent_plugin.py +0 -0
  106. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_apm.py +0 -0
  107. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_claude_plugins.py +0 -0
  108. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_lookup.py +0 -0
  109. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/scope_rails.py +0 -0
  110. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/self_host.py +0 -0
  111. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/shared_libs.py +0 -0
  112. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/target_resolver.py +0 -0
  113. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/user_libs.py +0 -0
  114. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/validate.py +0 -0
  115. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue.py +0 -0
  116. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/__init__.py +0 -0
  117. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/direct_http.py +0 -0
  118. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/jfrog_cli.py +0 -0
  119. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/models.py +0 -0
  120. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/__init__.py +0 -0
  121. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/archive.py +0 -0
  122. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/build.py +0 -0
  123. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/config.py +0 -0
  124. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
  125. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/defaults.py +0 -0
  126. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  127. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/file_safety.py +0 -0
  128. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/identity.py +0 -0
  129. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/index_generator.py +0 -0
  130. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/initialise.py +0 -0
  131. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  132. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/journey_validator.py +0 -0
  133. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/lint.py +0 -0
  134. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/manifest.py +0 -0
  135. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/okf_discovery.py +0 -0
  136. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/package.py +0 -0
  137. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/results.py +0 -0
  138. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/self_host.py +0 -0
  139. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
  140. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  141. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  142. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/verify.py +0 -0
  143. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/version_ranges.py +0 -0
  144. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/categories.py +0 -0
  145. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/cli.py +0 -0
  146. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/__init__.py +0 -0
  147. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/_common.py +0 -0
  148. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/_drop_warning.py +0 -0
  149. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/adapt.py +0 -0
  150. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_build.py +0 -0
  151. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_contracts.py +0 -0
  152. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_index.py +0 -0
  153. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_init.py +0 -0
  154. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_lint.py +0 -0
  155. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_package.py +0 -0
  156. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_self_host.py +0 -0
  157. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_sync.py +0 -0
  158. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  159. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  160. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_verify.py +0 -0
  161. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/config.py +0 -0
  162. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/diff.py +0 -0
  163. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/docs.py +0 -0
  164. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/init_state.py +0 -0
  165. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/install.py +0 -0
  166. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_installed.py +0 -0
  167. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_packs.py +0 -0
  168. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_profiles.py +0 -0
  169. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_targets.py +0 -0
  170. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/oplog_cmd.py +0 -0
  171. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/pack_config_cmd.py +0 -0
  172. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/pack_evals.py +0 -0
  173. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/package_catalogue.py +0 -0
  174. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/profile.py +0 -0
  175. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/reconcile.py +0 -0
  176. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/render.py +0 -0
  177. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/scaffold.py +0 -0
  178. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/show.py +0 -0
  179. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/uninstall.py +0 -0
  180. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/upgrade.py +0 -0
  181. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/validate.py +0 -0
  182. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/config.py +0 -0
  183. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_install.py +0 -0
  184. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source.py +0 -0
  185. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source_acquisition.py +0 -0
  186. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source_state.py +0 -0
  187. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_validate.py +0 -0
  188. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/https_catalogue.py +0 -0
  189. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/local_exclude.py +0 -0
  190. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/oplog.py +0 -0
  191. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/pack_inventory.py +0 -0
  192. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/render.py +0 -0
  193. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/safety.py +0 -0
  194. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/scaffold.py +0 -0
  195. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/scope.py +0 -0
  196. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/source_defaults.py +0 -0
  197. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/statelock.py +0 -0
  198. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/system_trust.py +0 -0
  199. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/user_config.py +0 -0
  200. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/SOURCES.txt +0 -0
  201. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/dependency_links.txt +0 -0
  202. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/entry_points.txt +0 -0
  203. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/requires.txt +0 -0
  204. {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/top_level.txt +0 -0
  205. {agentbundle-0.51.0 → agentbundle-0.52.1}/conftest.py +0 -0
  206. {agentbundle-0.51.0 → agentbundle-0.52.1}/setup.cfg +0 -0
  207. {agentbundle-0.51.0 → agentbundle-0.52.1}/templates/install-marker.py +0 -0
  208. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/__init__.py +0 -0
  209. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/_direct_acquisition.py +0 -0
  210. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/_support.py +0 -0
  211. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/__init__.py +0 -0
  212. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/README.md +0 -0
  213. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
  214. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
  215. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
  216. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
  217. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
  218. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
  219. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
  220. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
  221. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
  222. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
  223. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
  224. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
  225. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
  226. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
  227. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
  228. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
  229. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
  230. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
  231. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
  232. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
  233. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
  234. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
  235. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
  236. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
  237. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
  238. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_codex.py +0 -0
  239. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_copilot.py +0 -0
  240. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_cursor.py +0 -0
  241. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_gemini.py +0 -0
  242. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro.py +0 -0
  243. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
  244. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
  245. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
  246. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
  247. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_agent_boundary_metadata_projection.py +0 -0
  248. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
  249. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract.py +0 -0
  250. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_scope.py +0 -0
  251. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_v07.py +0 -0
  252. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_v08.py +0 -0
  253. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
  254. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_contract.py +0 -0
  255. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_golden.py +0 -0
  256. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_resolution.py +0 -0
  257. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_end_to_end_build.py +0 -0
  258. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
  259. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_lint_packs.py +0 -0
  260. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
  261. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema.py +0 -0
  262. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
  263. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema_install.py +0 -0
  264. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pipeline.py +0 -0
  265. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_hooks.py +0 -0
  266. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
  267. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
  268. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_policy_registry_projection.py +0 -0
  269. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projectable_subset.py +0 -0
  270. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projection_io.py +0 -0
  271. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projections_merge_json.py +0 -0
  272. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_route_lookup.py +0 -0
  273. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_scope_rails.py +0 -0
  274. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_security.py +0 -0
  275. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_check.py +0 -0
  276. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
  277. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
  278. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
  279. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_sequential_implementer_dispatch_projection.py +0 -0
  280. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
  281. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
  282. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_user_libs_projection.py +0 -0
  283. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_validate.py +0 -0
  284. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
  285. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/conftest.py +0 -0
  286. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_agentbundle_show_schema.py +0 -0
  287. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_catalogue_fetch_credential_boundary.py +0 -0
  288. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_skill_schema.py +0 -0
  289. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
  290. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/adapt/values.toml +0 -0
  291. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
  292. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
  293. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
  294. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
  295. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
  296. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
  297. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
  298. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
  299. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
  300. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
  301. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
  302. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield/values.toml +0 -0
  303. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
  304. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
  305. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
  306. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
  307. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
  308. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
  309. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
  310. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
  311. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
  312. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
  313. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
  314. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_sync/adapter_contract_major_mismatch/pack.toml +0 -0
  315. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/catalogue.toml +0 -0
  316. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/hook-wiring/example.json +0 -0
  317. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/SKILL.md +0 -0
  318. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/scripts/run.py +0 -0
  319. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/JOURNEY.md +0 -0
  320. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/pack.toml +0 -0
  321. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-without-journey/pack.toml +0 -0
  322. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/profiles/test-profile.toml +0 -0
  323. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/cognitive-load-hosts.json +0 -0
  324. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
  325. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
  326. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
  327. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
  328. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
  329. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
  330. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
  331. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
  332. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
  333. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
  334. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
  335. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
  336. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
  337. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
  338. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
  339. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/direct/ac35_corpus_verdicts.json +0 -0
  340. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/direct/golden_state_0_5.toml +0 -0
  341. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/golden.json +0 -0
  342. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/witness-packs/portable/.apm/skills/example/SKILL.md +0 -0
  343. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/witness-packs/portable/pack.toml +0 -0
  344. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/.claude-plugin/marketplace.json +0 -0
  345. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/AGENTS.md +0 -0
  346. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/LICENSE-APACHE +0 -0
  347. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/LICENSE-MIT +0 -0
  348. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/agentbundle/_data/install-defaults.toml +0 -0
  349. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/catalogue.toml +0 -0
  350. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
  351. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
  352. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/pack.toml +0 -0
  353. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/seeds/AGENTS.md +0 -0
  354. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/beta/.claude-plugin/plugin.json +0 -0
  355. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/beta/pack.toml +0 -0
  356. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/profiles/example.toml +0 -0
  357. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
  358. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
  359. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
  360. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
  361. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
  362. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
  363. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
  364. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
  365. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
  366. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
  367. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
  368. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list-installed/golden_120col.txt +0 -0
  369. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list-installed/golden_80col.txt +0 -0
  370. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
  371. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
  372. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
  373. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
  374. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
  375. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
  376. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
  377. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
  378. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
  379. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
  380. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
  381. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
  382. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
  383. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
  384. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
  385. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
  386. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
  387. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
  388. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
  389. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
  390. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
  391. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
  392. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
  393. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
  394. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
  395. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
  396. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
  397. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
  398. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
  399. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
  400. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/agentbundle-show.schema.json +0 -0
  401. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/catalogue.json +0 -0
  402. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/installed_state.json +0 -0
  403. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
  404. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
  405. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
  406. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
  407. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
  408. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
  409. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
  410. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
  411. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
  412. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
  413. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
  414. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
  415. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
  416. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
  417. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
  418. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
  419. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
  420. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
  421. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
  422. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
  423. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
  424. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
  425. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
  426. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
  427. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
  428. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
  429. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
  430. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
  431. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/__init__.py +0 -0
  432. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_cmd.py +0 -0
  433. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_dual_scope.py +0 -0
  434. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_preflight_detection.py +0 -0
  435. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_schema_migration.py +0 -0
  436. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_apm_install_route.py +0 -0
  437. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_blank_catalogue.py +0 -0
  438. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
  439. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_round_trip.py +0 -0
  440. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
  441. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_check_drift_gates.py +0 -0
  442. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_derivation_apm.py +0 -0
  443. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
  444. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_init.py +0 -0
  445. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_adapter_compat.py +0 -0
  446. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_dependencies.py +0 -0
  447. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_external_portability.py +0 -0
  448. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_fixture_checks.py +0 -0
  449. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_marketplace.py +0 -0
  450. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_output_drift.py +0 -0
  451. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_package_preflight.py +0 -0
  452. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_plugin_path.py +0 -0
  453. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_profile_schema.py +0 -0
  454. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_step1.py +0 -0
  455. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_index_generator.py +0 -0
  456. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_integration.py +0 -0
  457. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_journey_validator.py +0 -0
  458. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_schema.py +0 -0
  459. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
  460. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_claude_plugins_install_route.py +0 -0
  461. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_config_cascade.py +0 -0
  462. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_credential_brokers_pack_install.py +0 -0
  463. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_credentials_wheel.py +0 -0
  464. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_direct_install.py +0 -0
  465. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
  466. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_editable_source_detection.py +0 -0
  467. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_fixtures_validate.py +0 -0
  468. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_hook_wiring_ingress.py +0 -0
  469. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_adapt_chain.py +0 -0
  470. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_cmd.py +0 -0
  471. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_converters_user_scope.py +0 -0
  472. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_copilot_full_parity.py +0 -0
  473. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_core_smoke.py +0 -0
  474. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_default_source.py +0 -0
  475. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dependencies_gate.py +0 -0
  476. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
  477. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dual_scope.py +0 -0
  478. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_layout_is_best_effort.py +0 -0
  479. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_orphan_reshape.py +0 -0
  480. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_pack_metadata_shape.py +0 -0
  481. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_profile.py +0 -0
  482. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_profile_live.py +0 -0
  483. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
  484. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_research_user_scope.py +0 -0
  485. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_seed_delivery.py +0 -0
  486. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_session_start_wiring.py +0 -0
  487. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_upgrade_offer.py +0 -0
  488. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_user_hooks.py +0 -0
  489. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
  490. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_jfrog_cli_contract.py +0 -0
  491. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
  492. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
  493. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
  494. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_list_packs_cmd.py +0 -0
  495. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_local_scope_install.py +0 -0
  496. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_marketplace_entry_validation.py +0 -0
  497. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_marketplace_manifest_regression.py +0 -0
  498. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_multi_pack_install.py +0 -0
  499. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
  500. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_plugin_route_membership.py +0 -0
  501. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_portable_catalogue_authentication.py +0 -0
  502. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_recommends_cross_scope.py +0 -0
  503. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_reconcile.py +0 -0
  504. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_reserved_path_filter.py +0 -0
  505. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_scaffold_projection.py +0 -0
  506. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_self_host_schema_migration.py +0 -0
  507. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
  508. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_shared_prefix_coexistence.py +0 -0
  509. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_show_cmd.py +0 -0
  510. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_tier_invariants.py +0 -0
  511. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_trust_fallback_tls.py +0 -0
  512. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_uninstall_cmd.py +0 -0
  513. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_uninstall_user_hooks.py +0 -0
  514. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
  515. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_cmd.py +0 -0
  516. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_user_hooks.py +0 -0
  517. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_version_gate_matrix.py +0 -0
  518. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
  519. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_zipapp.py +0 -0
  520. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/performance/__init__.py +0 -0
  521. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/performance/test_direct_family2_budget_cost.py +0 -0
  522. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_adapter_permissions_projection.py +0 -0
  523. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_elicit.py +0 -0
  524. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_event_bridge.py +0 -0
  525. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_git.py +0 -0
  526. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_git_scope.py +0 -0
  527. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_layout_override.py +0 -0
  528. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_lifecycle.py +0 -0
  529. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_stdin.py +0 -0
  530. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/__init__.py +0 -0
  531. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/conftest.py +0 -0
  532. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_adapt_discovery_schema.py +0 -0
  533. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_adapter_symlink_policy.py +0 -0
  534. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_append_layout_section.py +0 -0
  535. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_architect_readme_install_command.py +0 -0
  536. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue.py +0 -0
  537. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_ci_contract.py +0 -0
  538. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_curation_deps.py +0 -0
  539. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_fetch.py +0 -0
  540. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_fetch_jfrog.py +0 -0
  541. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
  542. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_pack_defaults.py +0 -0
  543. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
  544. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
  545. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_sync.py +0 -0
  546. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_sync_fixture_set.py +0 -0
  547. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_archive.py +0 -0
  548. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_build.py +0 -0
  549. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
  550. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_file_safety.py +0 -0
  551. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
  552. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_identity.py +0 -0
  553. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_init.py +0 -0
  554. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_lint.py +0 -0
  555. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_package.py +0 -0
  556. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
  557. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
  558. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
  559. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_verify.py +0 -0
  560. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_trust_fallback.py +0 -0
  561. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave2_schema.py +0 -0
  562. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave2_validation.py +0 -0
  563. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
  564. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
  565. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
  566. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
  567. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_catalogue_optional.py +0 -0
  568. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_help_lists_config.py +0 -0
  569. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_list_targets_help.py +0 -0
  570. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_namespace_fixture.py +0 -0
  571. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_path_normalisation.py +0 -0
  572. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_profile_surface.py +0 -0
  573. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_scope_flags.py +0 -0
  574. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_codex_agent_toml.py +0 -0
  575. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_codex_projection_modes.py +0 -0
  576. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cognitive_load_seed_contract.py +0 -0
  577. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_collect_tree_symlinks.py +0 -0
  578. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_common_classify_seeds.py +0 -0
  579. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_config.py +0 -0
  580. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_config_cmd.py +0 -0
  581. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_configured_adapter.py +0 -0
  582. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_confirm_helper.py +0 -0
  583. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_contract_parity.py +0 -0
  584. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_contract_v0_3_schema.py +0 -0
  585. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_agent_md.py +0 -0
  586. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_hooks_json.py +0 -0
  587. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
  588. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_credbroker_lint_hardening.py +0 -0
  589. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_dependencies_batch.py +0 -0
  590. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_diff_cmd.py +0 -0
  591. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_admission.py +0 -0
  592. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_architecture_controls.py +0 -0
  593. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_diagnostics.py +0 -0
  594. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_lifecycle_facts.py +0 -0
  595. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_source_acquisition.py +0 -0
  596. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_source_state.py +0 -0
  597. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_upgrade.py +0 -0
  598. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_validate.py +0 -0
  599. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_footprint_ownership.py +0 -0
  600. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_https_catalogue.py +0 -0
  601. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_init_state_cmd.py +0 -0
  602. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
  603. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
  604. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
  605. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
  606. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_event_dropped_wirings.py +0 -0
  607. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_first_value_handoff.py +0 -0
  608. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_force_help.py +0 -0
  609. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_inband_detection.py +0 -0
  610. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_messages.py +0 -0
  611. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_messages_repo_scope.py +0 -0
  612. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_refusal_ordering.py +0 -0
  613. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_state_provenance.py +0 -0
  614. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
  615. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
  616. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
  617. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_layout_bases_anchoring.py +0 -0
  618. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
  619. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_installed_cmd.py +0 -0
  620. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_installed_status.py +0 -0
  621. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_targets_cmd.py +0 -0
  622. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_exclude_git_cache.py +0 -0
  623. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_schema.py +0 -0
  624. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
  625. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t12_show.py +0 -0
  626. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t2_resolve.py +0 -0
  627. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t3_config.py +0 -0
  628. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t4_state_path.py +0 -0
  629. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
  630. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
  631. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t8_install.py +0 -0
  632. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t9_exclude.py +0 -0
  633. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_marker_schema_version_parity.py +0 -0
  634. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_merge_into_agent_json.py +0 -0
  635. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
  636. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_nested_symlink_hardening.py +0 -0
  637. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_offer_upgrade_namespace.py +0 -0
  638. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_okf_discovery.py +0 -0
  639. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_org_bootstrap.py +0 -0
  640. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_orphan_sweep_guards.py +0 -0
  641. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_config_api.py +0 -0
  642. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_inventory.py +0 -0
  643. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_layout_section_schema.py +0 -0
  644. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_package_catalogue.py +0 -0
  645. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_packstate_source_provenance.py +0 -0
  646. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pipeline_phase_order.py +0 -0
  647. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_plugin_scope_filter.py +0 -0
  648. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_profile_reader.py +0 -0
  649. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render.py +0 -0
  650. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render_cmd.py +0 -0
  651. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render_table.py +0 -0
  652. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_state_path.py +0 -0
  653. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
  654. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
  655. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_route_surface_parity.py +0 -0
  656. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety.py +0 -0
  657. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
  658. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
  659. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_scaffold_cmd.py +0 -0
  660. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_scope.py +0 -0
  661. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_self_host_windows.py +0 -0
  662. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_shared_prefix_disclosure.py +0 -0
  663. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_source_conflict_guard.py +0 -0
  664. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_source_defaults.py +0 -0
  665. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v01_refuse_write.py +0 -0
  666. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v02.py +0 -0
  667. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v0_4_schema.py +0 -0
  668. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_statelock.py +0 -0
  669. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_statelock_hardening.py +0 -0
  670. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_system_trust.py +0 -0
  671. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_target_resolver.py +0 -0
  672. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_toml_emitters.py +0 -0
  673. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_unresolved_markers.py +0 -0
  674. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_bulk_all.py +0 -0
  675. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_recap.py +0 -0
  676. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_source_inference.py +0 -0
  677. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_io.py +0 -0
  678. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_isolation.py +0 -0
  679. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_path.py +0 -0
  680. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_source.py +0 -0
  681. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_merge_json.py +0 -0
  682. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_attach_to_agent.py +0 -0
  683. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_categories.py +0 -0
  684. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_cmd.py +0 -0
  685. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
  686. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_values_from_shapes.py +0 -0
  687. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_version.py +0 -0
  688. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_windows_direct_suite_registration.py +0 -0
  689. {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_workspace_mcp_events_poller.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.51.0
3
+ Version: 0.52.1
4
4
  Summary: npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent.
5
5
  Author-email: eugenelim <eugenelim@users.noreply.github.com>
6
6
  License-Expression: Apache-2.0 OR MIT
@@ -35,6 +35,25 @@ python -m pip install agentbundle
35
35
 
36
36
  Requires Python 3.11+. Runs on macOS, Linux, and Windows.
37
37
 
38
+ ## What's new in 0.52.1
39
+
40
+ The workspace-status engine and MCP tool now route `shape` entries to
41
+ `intent`. The shaping suggestion and the `shape` dispatch need
42
+ `product-engineering` 1.0.0 or later.
43
+
44
+ ## What's new in 0.52.0
45
+
46
+ The workspace-status MCP tool now surfaces a former legacy entry (a bare
47
+ `spec/<slug>` string or other accepted legacy shape) as an `unsupported_legacy`
48
+ finding. The entry is absent from `ready` and `blocked`; ordinary
49
+ reconciliation no longer accepts legacy shapes as lifecycle members. A
50
+ canonical entry with a surviving historical alias appears in `blocked` with a
51
+ `duplicate_membership` finding and does not appear in `ready`. Delete the alias
52
+ and the canonical entry dispatches normally.
53
+
54
+ The `capture-work` alias for `work-intake` is removed as part of Core 3.0.0.
55
+ All intake requests should go to `work-intake`.
56
+
38
57
  ## What's new in 0.51.0
39
58
 
40
59
  HTTPS catalogue acquisition now selects credentials automatically. Set
@@ -14,6 +14,25 @@ python -m pip install agentbundle
14
14
 
15
15
  Requires Python 3.11+. Runs on macOS, Linux, and Windows.
16
16
 
17
+ ## What's new in 0.52.1
18
+
19
+ The workspace-status engine and MCP tool now route `shape` entries to
20
+ `intent`. The shaping suggestion and the `shape` dispatch need
21
+ `product-engineering` 1.0.0 or later.
22
+
23
+ ## What's new in 0.52.0
24
+
25
+ The workspace-status MCP tool now surfaces a former legacy entry (a bare
26
+ `spec/<slug>` string or other accepted legacy shape) as an `unsupported_legacy`
27
+ finding. The entry is absent from `ready` and `blocked`; ordinary
28
+ reconciliation no longer accepts legacy shapes as lifecycle members. A
29
+ canonical entry with a surviving historical alias appears in `blocked` with a
30
+ `duplicate_membership` finding and does not appear in `ready`. Delete the alias
31
+ and the canonical entry dispatches normally.
32
+
33
+ The `capture-work` alias for `work-intake` is removed as part of Core 3.0.0.
34
+ All intake requests should go to `work-intake`.
35
+
17
36
  ## What's new in 0.51.0
18
37
 
19
38
  HTTPS catalogue acquisition now selects credentials automatically. Set
@@ -442,6 +442,10 @@ class Initiative:
442
442
  work: InitiativeWork
443
443
  shaping: InitiativeShaping
444
444
  brief_queue: BriefQueue | None
445
+ # An open shaping or brief entry that no canonical parse accepted. Ordinary
446
+ # reconciliation drops it from the typed lists above, so closeout reads this
447
+ # flag to keep an unsupported entry from passing as an empty initiative.
448
+ has_unsupported_open_entry: bool = False
445
449
 
446
450
 
447
451
  @dataclasses.dataclass
@@ -1350,6 +1354,7 @@ def _accepted_legacy_entry(collection: str, raw: object) -> LegacyWorkspaceEntry
1350
1354
  )
1351
1355
  if (
1352
1356
  _is_legacy_slug(raw.get("slug"))
1357
+ and isinstance(entry_type, str)
1353
1358
  and entry_type in _SHAPING_TYPES
1354
1359
  and needs_are_supported
1355
1360
  ):
@@ -1381,6 +1386,7 @@ def _accepted_legacy_entry(collection: str, raw: object) -> LegacyWorkspaceEntry
1381
1386
  summary_is_supported = "summary" not in raw or isinstance(raw["summary"], str)
1382
1387
  if (
1383
1388
  _is_legacy_slug(raw.get("slug"))
1389
+ and isinstance(raw.get("type"), str)
1384
1390
  and raw.get("type") in _SHAPING_TYPES
1385
1391
  and needs_are_supported
1386
1392
  and source_is_supported
@@ -2546,13 +2552,12 @@ def _parse_membership_entry(
2546
2552
  status: str,
2547
2553
  ) -> tuple[
2548
2554
  WorkspaceMembership | None,
2549
- LegacyWorkspaceMembership | None,
2550
2555
  list[RoutingFinding],
2551
2556
  str | None,
2552
2557
  ]:
2553
2558
  parsed, findings = parse_workspace_entry(raw)
2554
2559
  if parsed is not None:
2555
- return WorkspaceMembership(parsed, ini_slug, collection, status), None, [], None
2560
+ return WorkspaceMembership(parsed, ini_slug, collection, status), [], None
2556
2561
  raw_path = raw.get("path") if isinstance(raw, dict) else None
2557
2562
  if _is_repository_relative_path(raw_path):
2558
2563
  findings = [
@@ -2560,23 +2565,19 @@ def _parse_membership_entry(
2560
2565
  if not finding.path else finding
2561
2566
  for finding in findings
2562
2567
  ]
2563
- legacy = parse_legacy_workspace_entry(collection, raw)
2564
- if legacy.finding.code == "legacy_entry":
2565
- return None, LegacyWorkspaceMembership(legacy, ini_slug, collection, status), [
2566
- legacy.finding
2567
- ], None
2568
+ legacy = _legacy_path_finding(collection, raw)
2568
2569
  if legacy.finding.code == "invalid_artifact_path" and not _is_target_like_entry(raw):
2569
- return None, None, [legacy.finding], None
2570
+ return None, [legacy.finding], None
2570
2571
  if legacy.finding.code == "unsupported_legacy" and not _is_target_like_entry(raw):
2571
- return None, None, [legacy.finding], None
2572
+ return None, [legacy.finding], None
2572
2573
  if findings:
2573
2574
  blocks_dependencies = any(
2574
2575
  finding.code in {"invalid_entry", "invalid_artifact_path"}
2575
2576
  for finding in findings
2576
2577
  )
2577
2578
  blocked_path = _target_like_blocked_path(raw) if blocks_dependencies else None
2578
- return None, None, findings, blocked_path
2579
- return None, None, [legacy.finding], None
2579
+ return None, findings, blocked_path
2580
+ return None, [legacy.finding], None
2580
2581
 
2581
2582
 
2582
2583
  def _extract_canonical_memberships(
@@ -2588,7 +2589,6 @@ def _extract_canonical_memberships(
2588
2589
  list[ParseBlockedWorkspaceMembership],
2589
2590
  ]:
2590
2591
  memberships: list[WorkspaceMembership] = []
2591
- legacy_memberships: list[LegacyWorkspaceMembership] = []
2592
2592
  findings: list[RoutingFinding] = []
2593
2593
  parse_blocked_memberships: list[ParseBlockedWorkspaceMembership] = []
2594
2594
  for section_name, top_level_names in _TOP_LEVEL_ENTRY_COLLECTIONS.items():
@@ -2605,7 +2605,6 @@ def _extract_canonical_memberships(
2605
2605
  for entry_index, raw_entry in enumerate(entries):
2606
2606
  (
2607
2607
  membership,
2608
- legacy_membership,
2609
2608
  entry_findings,
2610
2609
  blocked_path,
2611
2610
  ) = _parse_membership_entry(raw_entry, collection, "", "")
@@ -2613,10 +2612,6 @@ def _extract_canonical_memberships(
2613
2612
  memberships.append(
2614
2613
  dataclasses.replace(membership, entry_index=entry_index)
2615
2614
  )
2616
- if legacy_membership is not None:
2617
- legacy_memberships.append(
2618
- dataclasses.replace(legacy_membership, entry_index=entry_index)
2619
- )
2620
2615
  if blocked_path is not None:
2621
2616
  parse_blocked_memberships.append(
2622
2617
  ParseBlockedWorkspaceMembership(
@@ -2665,7 +2660,6 @@ def _extract_canonical_memberships(
2665
2660
  for entry_index, raw_entry in enumerate(entries):
2666
2661
  (
2667
2662
  membership,
2668
- legacy_membership,
2669
2663
  entry_findings,
2670
2664
  blocked_path,
2671
2665
  ) = _parse_membership_entry(raw_entry, collection, ini_slug, status)
@@ -2673,10 +2667,6 @@ def _extract_canonical_memberships(
2673
2667
  memberships.append(
2674
2668
  dataclasses.replace(membership, entry_index=entry_index)
2675
2669
  )
2676
- if legacy_membership is not None:
2677
- legacy_memberships.append(
2678
- dataclasses.replace(legacy_membership, entry_index=entry_index)
2679
- )
2680
2670
  if blocked_path is not None:
2681
2671
  parse_blocked_memberships.append(
2682
2672
  ParseBlockedWorkspaceMembership(
@@ -2687,7 +2677,73 @@ def _extract_canonical_memberships(
2687
2677
  )
2688
2678
  )
2689
2679
  findings.extend(entry_findings)
2690
- return memberships, legacy_memberships, findings, parse_blocked_memberships
2680
+ return memberships, [], findings, parse_blocked_memberships
2681
+
2682
+
2683
+ def extract_legacy_migration_memberships(workspace: dict) -> list[LegacyWorkspaceMembership]:
2684
+ """Return accepted legacy memberships for explicit migration operations only."""
2685
+
2686
+ memberships: list[LegacyWorkspaceMembership] = []
2687
+ for section_name, top_level_names in _TOP_LEVEL_ENTRY_COLLECTIONS.items():
2688
+ section = workspace.get(section_name, {})
2689
+ if not isinstance(section, dict):
2690
+ continue
2691
+ for list_name in top_level_names:
2692
+ entries = section.get(list_name, [])
2693
+ if not isinstance(entries, list):
2694
+ continue
2695
+ collection = _collection_label(section_name, list_name)
2696
+ for entry_index, raw_entry in enumerate(entries):
2697
+ legacy = parse_legacy_workspace_entry(collection, raw_entry)
2698
+ if legacy.finding.code == "legacy_entry":
2699
+ memberships.append(
2700
+ LegacyWorkspaceMembership(
2701
+ legacy,
2702
+ "",
2703
+ collection,
2704
+ "",
2705
+ entry_index=entry_index,
2706
+ )
2707
+ )
2708
+ for raw_ini_slug, section in workspace.items():
2709
+ if not isinstance(raw_ini_slug, str) or not _CANONICAL_INITIATIVE_RE.fullmatch(
2710
+ raw_ini_slug
2711
+ ):
2712
+ continue
2713
+ if not isinstance(section, dict):
2714
+ continue
2715
+ status = section.get("status", "")
2716
+ status = status if isinstance(status, str) else ""
2717
+ for section_name, initiative_names in _INITIATIVE_ENTRY_COLLECTIONS.items():
2718
+ subsection = section.get(section_name, {})
2719
+ if not isinstance(subsection, dict):
2720
+ continue
2721
+ for list_name in initiative_names:
2722
+ entries = subsection.get(list_name, [])
2723
+ if entries is None:
2724
+ entries = []
2725
+ if (
2726
+ section_name == "brief_queue"
2727
+ and list_name == "executing"
2728
+ and isinstance(entries, str)
2729
+ ):
2730
+ entries = [] if entries == "" else [entries]
2731
+ if not isinstance(entries, list):
2732
+ continue
2733
+ collection = _collection_label(section_name, list_name)
2734
+ for entry_index, raw_entry in enumerate(entries):
2735
+ legacy = parse_legacy_workspace_entry(collection, raw_entry)
2736
+ if legacy.finding.code == "legacy_entry":
2737
+ memberships.append(
2738
+ LegacyWorkspaceMembership(
2739
+ legacy,
2740
+ raw_ini_slug,
2741
+ collection,
2742
+ status,
2743
+ entry_index=entry_index,
2744
+ )
2745
+ )
2746
+ return memberships
2691
2747
 
2692
2748
 
2693
2749
  def _membership_status(membership: WorkspaceMembership) -> str | None:
@@ -2993,12 +3049,9 @@ def resolve_selected_memberships(
2993
3049
  workspace: dict, selected_artifact_paths: list[str]
2994
3050
  ) -> dict[str, list[dict]]:
2995
3051
  """Resolve selected occurrences from already-parsed workspace state."""
2996
- (
2997
- memberships,
2998
- legacy_memberships,
2999
- findings,
3000
- parse_blocked_memberships,
3001
- ) = _extract_canonical_memberships(workspace)
3052
+ memberships, _legacy_memberships, findings, parse_blocked_memberships = (
3053
+ _extract_canonical_memberships(workspace)
3054
+ )
3002
3055
  if any(finding.code == "invalid_workspace" for finding in findings):
3003
3056
  raise ValueError("invalid workspace")
3004
3057
 
@@ -3022,22 +3075,6 @@ def resolve_selected_memberships(
3022
3075
  "form": "canonical",
3023
3076
  }
3024
3077
  )
3025
- for legacy_membership in legacy_memberships:
3026
- path = _legacy_canonical_alias(legacy_membership.entry)
3027
- if (
3028
- legacy_membership.collection not in _SELECTED_SPEC_COLLECTIONS
3029
- or path not in occurrences_by_path
3030
- ):
3031
- continue
3032
- occurrences_by_path[path].append(
3033
- {
3034
- "canonical_artifact_path": path,
3035
- "initiative": legacy_membership.ini_slug or None,
3036
- "collection": legacy_membership.collection,
3037
- "entry_index": legacy_membership.entry_index,
3038
- "form": "legacy",
3039
- }
3040
- )
3041
3078
  for blocked_membership in parse_blocked_memberships:
3042
3079
  path = blocked_membership.canonical_artifact_path
3043
3080
  if (
@@ -3086,8 +3123,6 @@ def selected_membership_status(root: Path, selectors: list[str]) -> dict[str, ob
3086
3123
  except OSError:
3087
3124
  return {"error": {"code": "invalid_workspace"}}
3088
3125
  try:
3089
- # The pure seam calls _extract_canonical_memberships(...) and
3090
- # _legacy_canonical_alias(...) for selected identity resolution.
3091
3126
  occurrences_by_path = resolve_selected_memberships(
3092
3127
  workspace, selected_artifact_paths
3093
3128
  )
@@ -3107,26 +3142,6 @@ def selected_membership_status(root: Path, selectors: list[str]) -> dict[str, ob
3107
3142
  }
3108
3143
 
3109
3144
 
3110
- def _legacy_membership_is_cooled(
3111
- membership: LegacyWorkspaceMembership,
3112
- root: Path | None,
3113
- cooled: frozenset[Path],
3114
- ) -> bool:
3115
- """True when a legacy membership's canonical artifact is cooled.
3116
-
3117
- A legacy entry stores `spec/alpha`, so the canonical alias has to be
3118
- recovered before the membership key applies. Resolving the stored form
3119
- directly yields `<root>/spec/alpha`, which cannot equal any cooled path
3120
- whatever the lifecycle record says, so the check silently never fires.
3121
- """
3122
- if root is None or not cooled:
3123
- return False
3124
- alias = _legacy_canonical_alias(membership.entry)
3125
- if alias is None:
3126
- return False
3127
- return _confined_artifact_path(root, alias) in cooled
3128
-
3129
-
3130
3145
  def _membership_is_cooled(
3131
3146
  membership: WorkspaceMembership,
3132
3147
  root: Path | None,
@@ -3148,7 +3163,6 @@ def _brief_child_spec_states(
3148
3163
  workspace: dict,
3149
3164
  root: Path | None,
3150
3165
  cooled: frozenset[Path],
3151
- legacy_memberships: list[LegacyWorkspaceMembership],
3152
3166
  ) -> tuple[dict[str, set[str]], frozenset[str], frozenset[str]]:
3153
3167
  """Map each brief to its children's observed states; flag unevaluable scope.
3154
3168
 
@@ -3196,21 +3210,10 @@ def _brief_child_spec_states(
3196
3210
  # with no repair available — declaring a resolving path was already done,
3197
3211
  # and declaring empty would be false.
3198
3212
  #
3199
- # Legacy memberships are included because a bare-string brief queue entry
3200
- # carries `kind = "brief"` and a real path, and a child declaring it has
3201
- # declared the truth. Reading them here decides attribution only; it
3202
- # dispatches nothing, which is the line the routing contract draws.
3203
- # Two comprehensions rather than one over an unpacked pair: the canonical
3204
- # and legacy membership types differ, so unpacking them together widens the
3205
- # element type to `object` and the attribute access stops type-checking.
3206
3213
  brief_membership_paths = {
3207
3214
  membership.entry.path
3208
3215
  for membership in memberships
3209
3216
  if membership.entry.kind == "brief" and membership.entry.path is not None
3210
- } | {
3211
- legacy.entry.path
3212
- for legacy in legacy_memberships
3213
- if legacy.entry.kind == "brief" and legacy.entry.path is not None
3214
3217
  }
3215
3218
  for membership in memberships:
3216
3219
  entry = membership.entry
@@ -3656,7 +3659,7 @@ def cooled_work_entry_paths(
3656
3659
  initiative parse builds `queue` and `active` by list comprehension over those
3657
3660
  same arrays. So index `i` names the same element on both sides.
3658
3661
  """
3659
- memberships, legacy_memberships, _findings, _blocked = (
3662
+ memberships, _legacy_memberships, _findings, _blocked = (
3660
3663
  _extract_canonical_memberships(workspace)
3661
3664
  )
3662
3665
  by_initiative: dict[str, set[tuple[str, int]]] = {}
@@ -3667,13 +3670,6 @@ def cooled_work_entry_paths(
3667
3670
  by_initiative.setdefault(membership.ini_slug, set()).add(
3668
3671
  (membership.collection, membership.entry_index)
3669
3672
  )
3670
- for legacy in legacy_memberships:
3671
- if not legacy.collection.startswith("work."):
3672
- continue
3673
- if _legacy_membership_is_cooled(legacy, root, cooled):
3674
- by_initiative.setdefault(legacy.ini_slug, set()).add(
3675
- (legacy.collection, legacy.entry_index)
3676
- )
3677
3673
  return by_initiative
3678
3674
 
3679
3675
 
@@ -3694,13 +3690,12 @@ def run_canonical_reconciliation(
3694
3690
  path = blocked.canonical_artifact_path
3695
3691
  parse_blocked_path_counts[path] = parse_blocked_path_counts.get(path, 0) + 1
3696
3692
  # Cooling is applied at evaluation and emission, never here. Every fact
3697
- # derived below — by_path, duplicate_paths, cycle_paths, legacy_alias_counts
3698
- # and the structural loop — must see a cooled artifact as *cooled*, not as
3699
- # *absent*, or a lifecycle record silently erases unrelated conclusions
3700
- # about it. What the cooled set governs is the artifact *body*: for a cooled
3701
- # membership the structural loop and _brief_child_spec_states skip the
3702
- # predicates that would have to open it, keeping the ones derived from the
3703
- # workspace entry alone.
3693
+ # derived below — by_path, duplicate_paths, cycle_paths, and the structural
3694
+ # loop — must see a cooled artifact as *cooled*, not as *absent*, or a
3695
+ # lifecycle record silently erases unrelated conclusions about it. What the
3696
+ # cooled set governs is the artifact *body*: for a cooled membership the
3697
+ # structural loop and _brief_child_spec_states skip the predicates that would
3698
+ # have to open it, keeping the ones derived from the workspace entry alone.
3704
3699
  parse_blocked_paths = set(parse_blocked_path_counts)
3705
3700
  local_memberships = [
3706
3701
  membership for membership in memberships if membership.entry.path is not None
@@ -3709,44 +3704,35 @@ def run_canonical_reconciliation(
3709
3704
  for membership in local_memberships:
3710
3705
  assert membership.entry.path is not None
3711
3706
  by_path.setdefault(membership.entry.path, []).append(membership)
3712
- legacy_alias_counts: dict[str, int] = {}
3713
- for legacy_membership in legacy_memberships:
3714
- alias = _legacy_canonical_alias(legacy_membership.entry)
3715
- if alias is not None:
3716
- legacy_alias_counts[alias] = legacy_alias_counts.get(alias, 0) + 1
3717
3707
  duplicate_paths = {
3718
3708
  path
3719
3709
  for path, items in by_path.items()
3720
- if len(items) + legacy_alias_counts.get(path, 0) > 1
3710
+ if len(items) > 1
3721
3711
  }
3722
- mixed_parse_legacy_duplicate_paths = {
3723
- path
3724
- for path in parse_blocked_paths
3725
- if path not in by_path and legacy_alias_counts.get(path, 0) > 0
3712
+ # Alias-refused paths: canonical reconciliation may decode a historical alias
3713
+ # only to refuse. A canonical entry stays non-dispatchable while any historical
3714
+ # entry that the retained decoder maps to the same artifact path survives
3715
+ # anywhere in the workspace. One extraction per reconciliation run.
3716
+ _alias_refused_paths = {
3717
+ _alias_path
3718
+ for _m in extract_legacy_migration_memberships(workspace)
3719
+ if (_alias_path := _legacy_canonical_alias(_m.entry)) is not None
3720
+ and _alias_path in by_path
3726
3721
  }
3722
+ duplicate_paths.update(_alias_refused_paths)
3727
3723
  parse_only_duplicate_paths = {
3728
3724
  path
3729
3725
  for path, count in parse_blocked_path_counts.items()
3730
3726
  if count > 1 and path not in by_path
3731
3727
  }
3732
- legacy_only_duplicate_paths = {
3733
- path
3734
- for path, count in legacy_alias_counts.items()
3735
- if count > 1 and path not in by_path
3736
- }
3737
- legacy_only_duplicate_findings = [
3728
+ parse_only_duplicate_findings = [
3738
3729
  _finding("duplicate_membership", path, "duplicate lifecycle entry")
3739
- for path in sorted(
3740
- legacy_only_duplicate_paths
3741
- | mixed_parse_legacy_duplicate_paths
3742
- | parse_only_duplicate_paths
3743
- )
3730
+ for path in sorted(parse_only_duplicate_paths)
3744
3731
  ]
3745
3732
  cycle_paths = _dependency_cycles(local_memberships)
3746
3733
  brief_child_states, briefs_with_cooled_children, cooled_scope_unknown = (
3747
3734
  _brief_child_spec_states(
3748
3735
  local_memberships, workspace, root, cooled,
3749
- legacy_memberships=legacy_memberships,
3750
3736
  )
3751
3737
  )
3752
3738
  # Emitted here rather than in `_structural_findings`, whose findings add
@@ -3762,8 +3748,6 @@ def run_canonical_reconciliation(
3762
3748
  )
3763
3749
  duplicate_paths.update(path for path in parse_blocked_paths if path in by_path)
3764
3750
  structurally_blocked_paths: set[str] = {
3765
- *legacy_only_duplicate_paths,
3766
- *mixed_parse_legacy_duplicate_paths,
3767
3751
  *parse_only_duplicate_paths,
3768
3752
  *parse_blocked_paths,
3769
3753
  }
@@ -3827,7 +3811,7 @@ def run_canonical_reconciliation(
3827
3811
  }
3828
3812
  findings = [
3829
3813
  *parse_findings,
3830
- *legacy_only_duplicate_findings,
3814
+ *parse_only_duplicate_findings,
3831
3815
  *cooled_membership_findings,
3832
3816
  *cooled_scope_findings,
3833
3817
  *(finding for evaluation in evaluations for finding in evaluation.findings),
@@ -3835,20 +3819,34 @@ def run_canonical_reconciliation(
3835
3819
  return CanonicalWorkspaceResult(
3836
3820
  cooled=cooled,
3837
3821
  memberships=memberships,
3838
- # Emission, not derivation: `legacy_alias_counts` above still counts a
3839
- # cooled legacy entry, so cooling one half of a duplicate pair does not
3840
- # erase the duplicate finding for the half that stays visible.
3841
- legacy_memberships=[
3842
- membership
3843
- for membership in legacy_memberships
3844
- if not _legacy_membership_is_cooled(membership, root, cooled)
3845
- ],
3822
+ legacy_memberships=[],
3846
3823
  findings=findings,
3847
3824
  evaluations=evaluations,
3848
3825
  dispatch_by_path=dispatch_by_path,
3849
3826
  )
3850
3827
 
3851
3828
 
3829
+ def _has_unsupported_open_entry(shaping_raw: object, brief_raw: object) -> bool:
3830
+ """True when an open shaping or brief collection holds a non-canonical entry."""
3831
+
3832
+ def raw_entries(section: object, name: str) -> list[object]:
3833
+ if not isinstance(section, dict):
3834
+ return []
3835
+ entries = section.get(name, [])
3836
+ if isinstance(entries, list):
3837
+ return entries
3838
+ return [] if entries in ("", None) else [entries]
3839
+
3840
+ open_entries = [
3841
+ *raw_entries(shaping_raw, "active"),
3842
+ *raw_entries(shaping_raw, "backlog"),
3843
+ *raw_entries(brief_raw, "executing"),
3844
+ *raw_entries(brief_raw, "ready"),
3845
+ *raw_entries(brief_raw, "draft"),
3846
+ ]
3847
+ return any(parse_workspace_entry(raw)[0] is None for raw in open_entries)
3848
+
3849
+
3852
3850
  def _supported_brief_queue_path(raw: object) -> str | None:
3853
3851
  """Return a canonical target or released scalar brief-queue path."""
3854
3852
  if isinstance(raw, str):
@@ -3963,6 +3961,9 @@ def extract_initiatives(workspace: dict) -> list[Initiative]:
3963
3961
  work=work,
3964
3962
  shaping=shaping,
3965
3963
  brief_queue=brief_queue,
3964
+ has_unsupported_open_entry=_has_unsupported_open_entry(
3965
+ shaping_raw, brief_raw
3966
+ ),
3966
3967
  ))
3967
3968
  return initiatives
3968
3969
 
@@ -4882,7 +4883,7 @@ def extract_top_level_backlog(workspace: dict) -> list[ShapingEntry]:
4882
4883
 
4883
4884
 
4884
4885
  _SHAPING_TYPE_TO_SKILL: dict[str, str] = {
4885
- "shape": "frame-intent",
4886
+ "shape": "intent",
4886
4887
  "research": "desk-research-project-start",
4887
4888
  "strategy": "frame-situation",
4888
4889
  "design": "experience-status",
@@ -4909,10 +4910,10 @@ def check_shaping_guard(
4909
4910
  continue
4910
4911
  for entry in ini.shaping.active + ini.shaping.backlog:
4911
4912
  if entry.slug == spec_slug:
4912
- return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "frame-intent")
4913
+ return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
4913
4914
  for entry in (top_level_backlog or []):
4914
4915
  if entry.slug == spec_slug:
4915
- return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "frame-intent")
4916
+ return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
4916
4917
  return None
4917
4918
 
4918
4919
 
@@ -5084,6 +5085,14 @@ def _repair_entry_eligibility(
5084
5085
  }
5085
5086
  if blocking_codes - {"impossible_transition", "unapproved_spec"}:
5086
5087
  return False, "type2-queue-canonical-blocked"
5088
+ # Defence in depth: canonical reconciliation already refuses dispatch
5089
+ # while a historical alias survives, but the repair seam also checks so
5090
+ # moving the entry does not leave the spec in two lifecycle collections.
5091
+ if any(
5092
+ _legacy_canonical_alias(membership.entry) == spec_path
5093
+ for membership in extract_legacy_migration_memberships(workspace)
5094
+ ):
5095
+ return False, "type2-queue-canonical-blocked"
5087
5096
  return True, None
5088
5097
  return False, "type2-queue-canonical-blocked"
5089
5098
 
@@ -5781,9 +5790,10 @@ def compute_migration_plan(
5781
5790
  )
5782
5791
  )
5783
5792
  canonical = run_canonical_reconciliation(workspace, root)
5793
+ migration_memberships = extract_legacy_migration_memberships(workspace)
5784
5794
  matches = [
5785
5795
  membership
5786
- for membership in canonical.legacy_memberships
5796
+ for membership in migration_memberships
5787
5797
  if membership.ini_slug == selection.source_membership["ini_slug"]
5788
5798
  and membership.collection == selection.source_membership["collection"]
5789
5799
  and membership.entry_index == selection.source_membership["entry_index"]
@@ -46,10 +46,21 @@ _legacy_canonical_alias = _engine._legacy_canonical_alias
46
46
  _migration_file_bytes = _engine._migration_file_bytes
47
47
  _parse_membership_entry = _engine._parse_membership_entry
48
48
  confine_migration_path = _engine.confine_migration_path
49
+ parse_legacy_workspace_entry = _engine.parse_legacy_workspace_entry
49
50
  parse_workspace = _engine.parse_workspace
50
51
  resolve_selected_memberships = _engine.resolve_selected_memberships
51
52
 
52
53
 
54
+ def _repair_legacy_entry(collection: str, raw: object):
55
+ """Decode a historical legacy entry for prune closure, or return None.
56
+
57
+ Ordinary reconciliation rejects these shapes. Prune is a repair operation,
58
+ so a surviving legacy alias must still deny closure of the artifact it names.
59
+ """
60
+ legacy = parse_legacy_workspace_entry(collection, raw)
61
+ return legacy if legacy.finding.code == "legacy_entry" else None
62
+
63
+
53
64
  def _resolve_prune_closure_memberships(
54
65
  workspace: dict, selected_artifact_paths: list[str]
55
66
  ) -> dict[str, list[dict]]:
@@ -77,12 +88,17 @@ def _resolve_prune_closure_memberships(
77
88
  collection = ".".join(collection_parts)
78
89
  status = value.get("status", "") if initiative is not None else ""
79
90
  status = status if isinstance(status, str) else ""
80
- membership, legacy, _, blocked_path = _parse_membership_entry(
91
+ membership, _, blocked_path = _parse_membership_entry(
81
92
  value,
82
93
  collection,
83
94
  initiative or "",
84
95
  status,
85
96
  )
97
+ legacy = (
98
+ _repair_legacy_entry(collection, value) if membership is None else None
99
+ )
100
+ if legacy is not None:
101
+ blocked_path = None
86
102
  path: str | None = None
87
103
  form = ""
88
104
  if (
@@ -92,7 +108,7 @@ def _resolve_prune_closure_memberships(
92
108
  path = membership.entry.path
93
109
  form = "canonical"
94
110
  elif legacy is not None:
95
- legacy_path = _legacy_canonical_alias(legacy.entry)
111
+ legacy_path = _legacy_canonical_alias(legacy)
96
112
  if legacy_path in occurrences_by_path:
97
113
  path = legacy_path
98
114
  form = "legacy"
@@ -140,21 +156,9 @@ def _resolve_prune_closure_memberships(
140
156
  else string_parts
141
157
  )
142
158
  collection = ".".join(collection_parts)
143
- status = ""
144
- if initiative is not None:
145
- section = workspace.get(initiative)
146
- if isinstance(section, dict) and isinstance(
147
- section.get("status"), str
148
- ):
149
- status = section["status"]
150
- _, legacy, _, _ = _parse_membership_entry(
151
- child,
152
- collection,
153
- initiative or "",
154
- status,
155
- )
159
+ legacy = _repair_legacy_entry(collection, child)
156
160
  if legacy is not None:
157
- path = _legacy_canonical_alias(legacy.entry)
161
+ path = _legacy_canonical_alias(legacy)
158
162
  if path in occurrences_by_path:
159
163
  occurrence = {
160
164
  "canonical_artifact_path": path,
@@ -14,7 +14,7 @@ import tomllib
14
14
  from importlib.resources import files
15
15
  from pathlib import Path
16
16
 
17
- CLI_VERSION = "0.51.0"
17
+ CLI_VERSION = "0.52.1"
18
18
 
19
19
  _HERE = Path(__file__).resolve().parent
20
20
 
@@ -86,7 +86,7 @@ _LIFECYCLE_MANIFEST: dict[str, dict] = {
86
86
  "required_pack": "desk-research",
87
87
  },
88
88
  "shape": {
89
- "dispatch_skill": "frame-intent",
89
+ "dispatch_skill": "intent",
90
90
  "output_pattern": [
91
91
  "docs/product/intents/{slug}.md",
92
92
  "docs/product/shaping/{slug}/**",