agentbundle 0.29.3__tar.gz → 0.29.5__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 (201) hide show
  1. {agentbundle-0.29.3 → agentbundle-0.29.5}/PKG-INFO +23 -3
  2. {agentbundle-0.29.3 → agentbundle-0.29.5}/README-pypi.md +22 -2
  3. agentbundle-0.29.5/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +357 -0
  4. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/manifest.json +4 -4
  5. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +7 -5
  6. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/packs/README.md +2 -2
  7. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/package.py +84 -28
  8. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/self_host_windows.py +16 -5
  9. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/version.py +1 -1
  10. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/PKG-INFO +23 -3
  11. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/SOURCES.txt +1 -4
  12. {agentbundle-0.29.3 → agentbundle-0.29.5}/pyproject.toml +1 -1
  13. agentbundle-0.29.3/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -192
  14. agentbundle-0.29.3/agentbundle/_data/catalogue-scaffold/packs/_example/evals/eval_queries.json +0 -42
  15. agentbundle-0.29.3/tests/test_loop_engine_events_jsonl.py +0 -168
  16. agentbundle-0.29.3/tests/test_workspace_status_engine_autonomous.py +0 -124
  17. {agentbundle-0.29.3 → agentbundle-0.29.5}/README.md +0 -0
  18. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/__init__.py +0 -0
  19. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/__main__.py +0 -0
  20. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/adapter.schema.json +0 -0
  21. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/adapter.toml +0 -0
  22. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  23. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  24. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  25. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  26. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  27. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  28. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  29. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/catalogue.schema.json +0 -0
  30. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/guide.schema.json +0 -0
  31. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/install-defaults.toml +0 -0
  32. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/install-marker.py +0 -0
  33. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/pack.schema.json +0 -0
  34. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  35. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  36. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/profile.schema.json +0 -0
  37. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/skill-manifest.schema.json +0 -0
  38. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/skill.schema.json +0 -0
  39. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/_data/target-vocab.toml +0 -0
  40. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/__init__.py +0 -0
  41. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/__main__.py +0 -0
  42. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapter_root_bins.py +0 -0
  43. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/__init__.py +0 -0
  44. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/claude_code.py +0 -0
  45. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/codex.py +0 -0
  46. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/copilot.py +0 -0
  47. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/cursor.py +0 -0
  48. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/gemini.py +0 -0
  49. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/kiro.py +0 -0
  50. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/kiro_cli.py +0 -0
  51. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/adapters/kiro_ide.py +0 -0
  52. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/contract.py +0 -0
  53. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/lint_packs.py +0 -0
  54. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/main.py +0 -0
  55. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/phase_order.py +0 -0
  56. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/__init__.py +0 -0
  57. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  58. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  59. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  60. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/direct_directory.py +0 -0
  61. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  62. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/hook_id.py +0 -0
  63. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  64. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  65. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/merge_json.py +0 -0
  66. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/projections/user_merge_json.py +0 -0
  67. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  68. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  69. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/marketplace.toml +0 -0
  70. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  71. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  72. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  73. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/recipes/self-host.toml +0 -0
  74. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/scope_rails.py +0 -0
  75. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/self_host.py +0 -0
  76. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/shared_libs.py +0 -0
  77. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/target_resolver.py +0 -0
  78. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/__init__.py +0 -0
  79. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  80. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  81. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  82. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  83. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  84. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  85. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  86. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  87. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  88. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  89. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  90. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  91. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  92. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_contract.py +0 -0
  93. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_contract_scope.py +0 -0
  94. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_contract_v07.py +0 -0
  95. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_contract_v08.py +0 -0
  96. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  97. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  98. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  99. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  100. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  101. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_lint_packs.py +0 -0
  102. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  103. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_pack_schema.py +0 -0
  104. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  105. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  106. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_pipeline.py +0 -0
  107. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  108. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  109. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  110. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_scope_rails.py +0 -0
  111. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_security.py +0 -0
  112. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_self_host_check.py +0 -0
  113. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  114. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  115. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  116. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  117. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  118. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  119. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  120. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_validate.py +0 -0
  121. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_workspace_status_projection.py +0 -0
  122. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  123. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/user_libs.py +0 -0
  124. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/build/validate.py +0 -0
  125. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue.py +0 -0
  126. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/__init__.py +0 -0
  127. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/archive.py +0 -0
  128. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/build.py +0 -0
  129. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/config.py +0 -0
  130. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/defaults.py +0 -0
  131. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  132. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/identity.py +0 -0
  133. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/initialise.py +0 -0
  134. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  135. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/lint.py +0 -0
  136. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/results.py +0 -0
  137. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/self_host.py +0 -0
  138. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  139. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  140. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/catalogue_tooling/verify.py +0 -0
  141. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/categories.py +0 -0
  142. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/cli.py +0 -0
  143. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/__init__.py +0 -0
  144. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/_common.py +0 -0
  145. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/_drop_warning.py +0 -0
  146. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/adapt.py +0 -0
  147. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_build.py +0 -0
  148. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_init.py +0 -0
  149. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_lint.py +0 -0
  150. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_package.py +0 -0
  151. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_self_host.py +0 -0
  152. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  153. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  154. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/catalogue_verify.py +0 -0
  155. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/config.py +0 -0
  156. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/diff.py +0 -0
  157. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/docs.py +0 -0
  158. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/init_state.py +0 -0
  159. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/install.py +0 -0
  160. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/list_installed.py +0 -0
  161. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/list_packs.py +0 -0
  162. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/list_profiles.py +0 -0
  163. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/list_targets.py +0 -0
  164. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/oplog_cmd.py +0 -0
  165. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/pack_config_cmd.py +0 -0
  166. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/pack_evals.py +0 -0
  167. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/package_catalogue.py +0 -0
  168. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/profile.py +0 -0
  169. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/reconcile.py +0 -0
  170. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/render.py +0 -0
  171. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/scaffold.py +0 -0
  172. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/show.py +0 -0
  173. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/uninstall.py +0 -0
  174. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/upgrade.py +0 -0
  175. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/commands/validate.py +0 -0
  176. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/config.py +0 -0
  177. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/https_catalogue.py +0 -0
  178. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/local_exclude.py +0 -0
  179. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/oplog.py +0 -0
  180. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/pack_inventory.py +0 -0
  181. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/render.py +0 -0
  182. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/safety.py +0 -0
  183. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/scaffold.py +0 -0
  184. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/scope.py +0 -0
  185. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/source_defaults.py +0 -0
  186. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/statelock.py +0 -0
  187. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/user_config.py +0 -0
  188. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle/workspace_mcp.py +0 -0
  189. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/dependency_links.txt +0 -0
  190. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/entry_points.txt +0 -0
  191. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/requires.txt +0 -0
  192. {agentbundle-0.29.3 → agentbundle-0.29.5}/agentbundle.egg-info/top_level.txt +0 -0
  193. {agentbundle-0.29.3 → agentbundle-0.29.5}/setup.cfg +0 -0
  194. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_adapter_permissions_projection.py +0 -0
  195. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_linear_primitive.py +0 -0
  196. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_elicit.py +0 -0
  197. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_event_bridge.py +0 -0
  198. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_git.py +0 -0
  199. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_lifecycle.py +0 -0
  200. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_stdin.py +0 -0
  201. {agentbundle-0.29.3 → agentbundle-0.29.5}/tests/test_workspace_mcp_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.29.3
3
+ Version: 0.29.5
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: Apache-2.0 OR MIT
@@ -156,6 +156,13 @@ Produces a deterministic, reproducible gzip archive (versioned) and a mutable ch
156
156
  descriptor JSON (`stable.json`), ready to upload to Artifactory. Identical inputs
157
157
  produce byte-identical archives (honors `SOURCE_DATE_EPOCH`).
158
158
 
159
+ Build residue is excluded, so it does not matter whether you packaged a working
160
+ tree you had just tested or npm-installed in. Pruned at every level of a pack:
161
+ `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.ruff_cache`, `.tox`,
162
+ `.hypothesis`, `htmlcov`, `node_modules`, `.venv`, `venv` — plus `*.pyc`,
163
+ `*.pyo`, `.DS_Store`, `coverage.xml` and `.coverage*` shards. The drop is
164
+ silent, so do not name a directory you mean to ship after one of those.
165
+
159
166
  **Source distribution for air-gapped or self-hosted catalogues:**
160
167
 
161
168
  ```bash
@@ -167,7 +174,7 @@ agentbundle catalogue package \
167
174
  --output dist/
168
175
  ```
169
176
 
170
- Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist (packs, profiles, guides, marketplace manifest, legal files). Includes a `self-hosted-source-manifest.json` with per-file SHA-256 digests and provenance fields. `agentbundle install` refuses to install a source archive, preventing accidental misuse.
177
+ Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist (packs, profiles, guides, marketplace manifest, legal files), with the same build-residue exclusions as the default flavour. Includes a `self-hosted-source-manifest.json` with per-file SHA-256 digests and provenance fields. `agentbundle install` refuses to install a source archive, preventing accidental misuse.
171
178
 
172
179
  **Org bootstrap — ship the default channel in your fork:**
173
180
 
@@ -234,16 +241,29 @@ my-pack/
234
241
  .claude-plugin/
235
242
  plugin.json # Claude Code plugin manifest (hand-authored)
236
243
  README.md # the pack's portable doc — projected with the pack
237
- .apm/ # primitives — projected by the build pipeline
244
+ .apm/ # runtime — projected by the build pipeline
238
245
  skills/<name>/
239
246
  SKILL.md # the skill body; one folder per skill
247
+ scripts/ # helper code the skill invokes
240
248
  references/ # progressive-disclosure docs, loaded on demand
241
249
  assets/ # templates the skill copies into the repo
250
+ evals/ # activation + output-quality evals, skill-local
242
251
  agents/<name>.md # subagents
243
252
  hooks/<name>.py # lifecycle hooks
253
+ tests/ # implementation tests — NEVER projected
254
+ skills/<name>/
255
+ hooks/
256
+ pack/
244
257
  seeds/ # files scaffolded into the adopter repo
245
258
  ```
246
259
 
260
+ Three boundaries: the **pack** owns and executes its tests, **`.apm/`** is the
261
+ runtime export boundary, and a **skill** owns its eval fixtures. Only `.apm/`
262
+ and `seeds/` are projected into an installed environment — `tests/` is visible
263
+ in a catalogue archive, so an extracted pack can verify itself, but `install`
264
+ never places it. Keep tests out of `.apm/` even though the installer would
265
+ ignore them there; the separation is structural, not incidental.
266
+
247
267
  `pack.toml` is the **single source of truth** for a pack's metadata. Declare
248
268
  `license`, `[[pack.maintainers]]`, `[pack.links]`, `categories`, and
249
269
  `keywords` once; the build projects the cleanly-mappable subset — plus the
@@ -134,6 +134,13 @@ Produces a deterministic, reproducible gzip archive (versioned) and a mutable ch
134
134
  descriptor JSON (`stable.json`), ready to upload to Artifactory. Identical inputs
135
135
  produce byte-identical archives (honors `SOURCE_DATE_EPOCH`).
136
136
 
137
+ Build residue is excluded, so it does not matter whether you packaged a working
138
+ tree you had just tested or npm-installed in. Pruned at every level of a pack:
139
+ `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.ruff_cache`, `.tox`,
140
+ `.hypothesis`, `htmlcov`, `node_modules`, `.venv`, `venv` — plus `*.pyc`,
141
+ `*.pyo`, `.DS_Store`, `coverage.xml` and `.coverage*` shards. The drop is
142
+ silent, so do not name a directory you mean to ship after one of those.
143
+
137
144
  **Source distribution for air-gapped or self-hosted catalogues:**
138
145
 
139
146
  ```bash
@@ -145,7 +152,7 @@ agentbundle catalogue package \
145
152
  --output dist/
146
153
  ```
147
154
 
148
- Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist (packs, profiles, guides, marketplace manifest, legal files). Includes a `self-hosted-source-manifest.json` with per-file SHA-256 digests and provenance fields. `agentbundle install` refuses to install a source archive, preventing accidental misuse.
155
+ Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist (packs, profiles, guides, marketplace manifest, legal files), with the same build-residue exclusions as the default flavour. Includes a `self-hosted-source-manifest.json` with per-file SHA-256 digests and provenance fields. `agentbundle install` refuses to install a source archive, preventing accidental misuse.
149
156
 
150
157
  **Org bootstrap — ship the default channel in your fork:**
151
158
 
@@ -212,16 +219,29 @@ my-pack/
212
219
  .claude-plugin/
213
220
  plugin.json # Claude Code plugin manifest (hand-authored)
214
221
  README.md # the pack's portable doc — projected with the pack
215
- .apm/ # primitives — projected by the build pipeline
222
+ .apm/ # runtime — projected by the build pipeline
216
223
  skills/<name>/
217
224
  SKILL.md # the skill body; one folder per skill
225
+ scripts/ # helper code the skill invokes
218
226
  references/ # progressive-disclosure docs, loaded on demand
219
227
  assets/ # templates the skill copies into the repo
228
+ evals/ # activation + output-quality evals, skill-local
220
229
  agents/<name>.md # subagents
221
230
  hooks/<name>.py # lifecycle hooks
231
+ tests/ # implementation tests — NEVER projected
232
+ skills/<name>/
233
+ hooks/
234
+ pack/
222
235
  seeds/ # files scaffolded into the adopter repo
223
236
  ```
224
237
 
238
+ Three boundaries: the **pack** owns and executes its tests, **`.apm/`** is the
239
+ runtime export boundary, and a **skill** owns its eval fixtures. Only `.apm/`
240
+ and `seeds/` are projected into an installed environment — `tests/` is visible
241
+ in a catalogue archive, so an extracted pack can verify itself, but `install`
242
+ never places it. Keep tests out of `.apm/` even though the installer would
243
+ ignore them there; the separation is structural, not incidental.
244
+
225
245
  `pack.toml` is the **single source of truth** for a pack's metadata. Declare
226
246
  `license`, `[[pack.maintainers]]`, `[pack.links]`, `categories`, and
227
247
  `keywords` once; the build projects the cleanly-mappable subset — plus the
@@ -0,0 +1,357 @@
1
+ ---
2
+ title: "Catalogue authoring standards"
3
+ summary: "Routing table for every catalogue authoring standard: pack manifests, skill frontmatter, profile format, lint and verify commands, CI contract, and packaging."
4
+ pack: _shared
5
+ kind: reference
6
+ status: stable
7
+ ---
8
+
9
+ # Catalogue authoring standards
10
+
11
+ Machine contracts in `contracts/` are normative. These guides explain how to use them.
12
+
13
+ Each section below names the authoritative contract and points to the guide that
14
+ explains it. When a guide and its contract disagree, the contract is right.
15
+
16
+ ---
17
+
18
+ ## 1. Catalogue manifest
19
+
20
+ **Contract:** `contracts/catalogue.schema.json`
21
+
22
+ - `guides/_shared/how-to/create-a-catalogue.md` — scaffold a new catalogue with
23
+ `agentbundle catalogue init`.
24
+ - `guides/_shared/how-to/create-external-catalogue.md` — self-hosted or enterprise-deployed
25
+ variant. (Available in the full guide library; not bundled in this scaffold.)
26
+
27
+ ---
28
+
29
+ ## 2. Pack manifest
30
+
31
+ **Contract:** `contracts/pack.schema.json`
32
+
33
+ The `pack.toml` file at the root of every pack. Required fields: `[pack]` with `name`
34
+ and `version`; `[pack.adapter-contract]` with `version`.
35
+
36
+ - [packs/README.md](../../../packs/README.md) — pack layout, versioning rules, lint commands.
37
+ - [packs/AGENTS.md](../../../packs/AGENTS.md) — agent-facing schema map and primary workflow.
38
+
39
+ ---
40
+
41
+ ## 3. Pack README standard
42
+
43
+ A pack README serves adopters, not contributors. It states the pack's intent and the
44
+ user journey it serves — not a skill inventory. See the `_example` pack for a template.
45
+
46
+ - [packs/_example/README.md](../../../packs/_example/README.md) — canonical example.
47
+
48
+ ---
49
+
50
+ ## 4. Pack layout
51
+
52
+ Three boundaries, each owned by a different thing:
53
+
54
+ - The **pack** is the ownership and test-execution boundary.
55
+ - `.apm/` is the **runtime export** boundary.
56
+ - A **skill** is the evaluation-fixture boundary.
57
+
58
+ ```
59
+ packs/<pack>/
60
+ ├── pack.toml
61
+ ├── README.md
62
+ ├── .apm/ # runtime — projected into installed environments
63
+ │ └── skills/<skill>/
64
+ │ ├── SKILL.md
65
+ │ ├── scripts/
66
+ │ ├── references/
67
+ │ ├── assets/
68
+ │ └── evals/ # skill-local, projected with the skill
69
+ ├── tests/ # implementation verification — never projected
70
+ │ └── skills/<skill>/
71
+ └── seeds/ # governance files projected to the repo root
72
+ ```
73
+
74
+ Deterministic implementation tests live under `packs/<pack>/tests/`. Runtime
75
+ skill evals live under `.apm/skills/<skill>/evals/`. `[pack.evals].skills`
76
+ selects which skill-local activation evals the pack evaluator runs.
77
+
78
+ Primitive sources live under `.apm/` and are projected per adapter by `catalogue self-host`.
79
+
80
+ | Source directory | Primitive type |
81
+ |------------------|----------------|
82
+ | `.apm/skills/` | Skills |
83
+ | `.apm/agents/` | Subagents |
84
+ | `.apm/hooks/` | Hook bodies |
85
+ | `.apm/hook-wiring/` | Hook wiring |
86
+ | `.apm/commands/` | Commands |
87
+ | `.apm/shared-libs/` | Shared libraries |
88
+ | `.apm/skills/<skill>/evals/` | Activation and output-quality evals (projected with the skill) |
89
+
90
+ ### Tests live with the pack, outside the payload they validate
91
+
92
+ Keep tests beside the pack they validate, but out of the runtime payload.
93
+ `.apm/` holds only files meant to participate in installation, projection, or
94
+ execution — so a test never belongs there, **even where the installer happens
95
+ to ignore its path**. Runtime separation is expressed by directory structure,
96
+ not by relying on an implicit exclusion that a future adapter may not honour.
97
+
98
+ ```
99
+ packs/<pack>/tests/
100
+ ├── skills/
101
+ │ └── <skill>/ # unit/, integration/, fixtures/ as the skill warrants
102
+ ├── hooks/
103
+ ├── pack/ # manifest, metadata, projection
104
+ └── fixtures/
105
+ ```
106
+
107
+ Tests should execute or import the real implementation under `.apm/`. Never
108
+ duplicate production code into the test tree.
109
+
110
+ ### Tests versus evaluations
111
+
112
+ Two different questions, two homes.
113
+
114
+ | | `tests/` | `evals/` |
115
+ |---|---|---|
116
+ | Verifies | Deterministic software behaviour | Agent-level behaviour |
117
+ | Covers | Function output, parsing, exit status, CLI behaviour, error handling, projected install contents | Whether a skill activates, whether a near-miss avoids activation, whether output satisfies a rubric |
118
+ | Run by | pytest, Vitest, Go test, shell tooling | The eval runner |
119
+ | Lives at | `packs/<pack>/tests/` | `.apm/skills/<skill>/evals/` |
120
+
121
+ Evaluations do not replace unit or integration tests for scripts.
122
+
123
+ Evals are skill-local by design, not by accident. A fixture only means anything
124
+ next to the skill it exercises, so it belongs to the skill and is projected with
125
+ it — the adapters copy `.apm/skills/<skill>/` wholesale. That is why the `tests/`
126
+ rule is scoped to the `.apm/` boundary rather than "anything that isn't runtime":
127
+ `evals/` is runtime-adjacent content, a test suite is not. The linter enforces
128
+ this — it looks for `eval_queries.json` and `evals.json` under
129
+ `<skill>/evals/`, and requires one for every skill named in `[pack.evals].skills`.
130
+
131
+ A **diagnostic** may live under `.apm/` when it is an intentional runtime
132
+ feature users or agents invoke — `scripts/doctor.py`,
133
+ `scripts/check_environment.py`. Those are runtime commands, not test suites.
134
+
135
+ ### Catalogue archives may carry tests; installers must not install them
136
+
137
+ A catalogue or source archive walks `packs/**`, so it carries a pack's
138
+ `pack.toml`, `README.md`, `.apm/**`, `seeds/**`, `tests/**`, `docs/**`,
139
+ `.claude-plugin/`, and pack-root markdown. Shipping tests in a source-oriented
140
+ archive supports downstream verification, auditing, security review, and
141
+ testing an extracted release.
142
+
143
+ Catalogue inclusion does not imply runtime installation. Installers and
144
+ projection adapters treat `.apm/` and `seeds/` as the projected surfaces, so
145
+ nothing outside those two — `tests/` included — reaches an installed
146
+ environment.
147
+
148
+ ### Test dependencies are not runtime dependencies
149
+
150
+ A skill's runtime dependency declaration lists only what the installed skill
151
+ needs at run time. `pytest`, `hypothesis`, `vitest`, `eslint`,
152
+ `mypy`, `ruff` and friends belong in development configuration.
153
+
154
+ Fixtures under a pack's test tree ship in the archive, so they must carry no
155
+ credentials or private data, prefer synthetic data, stay modest in size, and
156
+ name their licence when sourced externally. Fuzzing corpora, generated output,
157
+ coverage reports, and caches are neither committed nor packaged.
158
+
159
+ The packager enforces the second half. It prunes these directory names at every
160
+ level of a pack, and never descends into them:
161
+
162
+ ```
163
+ __pycache__ .pytest_cache .mypy_cache .ruff_cache .tox
164
+ .hypothesis htmlcov node_modules .venv venv
165
+ ```
166
+
167
+ plus `*.pyc`, `*.pyo`, `.DS_Store`, `coverage.xml`, and any `.coverage*` shard.
168
+ A directory you mean to ship must not be named one of those — the drop is
169
+ silent. Note this is matched by name at any depth, so it is deliberately *not*
170
+ the same list as the repository-root exclusions.
171
+
172
+ ### Repository-root tests
173
+
174
+ A test concerning one pack stays inside that pack. Behaviour no single pack
175
+ owns — the catalogue system, packaging, shared projection machinery, profiles,
176
+ cross-pack interaction — belongs to the repository, not to a pack.
177
+
178
+ Where that lives is the repository's call. This catalogue splits it: behaviour
179
+ that exercises the engine keeps to the engine's own suite
180
+ (`packages/agentbundle/tests/`), while cross-pack *lints* — the ones that read
181
+ every pack's tree and belong to no pack — live with the repository's other
182
+ tooling. Neither is a root `tests/` tree; a catalogue that wants the separate
183
+ tree can add one. Don't create a top-level directory for a single test — the
184
+ ownership rule is what matters, not the path.
185
+
186
+ ### One test process per skill
187
+
188
+ Run each skill's suite in its own process. This is a correctness requirement,
189
+ not a performance preference.
190
+
191
+ Skills are independent, so two of them may reasonably ship a `render.py`, and
192
+ their suites may both be called `test_render.py`. Collect them into one pytest
193
+ run and two things break: pytest refuses the duplicate test basenames outright
194
+ (`import file mismatch`), and if it did not, the first `render` module imported
195
+ would serve every suite that expects its own.
196
+
197
+ ```
198
+ pytest packs/<pack>/tests/skills/<skill>/ # one invocation per skill
199
+ ```
200
+
201
+ An invocation that spans two skill test directories is safe only while their
202
+ basenames happen not to collide — which is a property of today's contents, not
203
+ of the layout. Keep the invocations separate and the question never arises.
204
+
205
+ ### Normative summary
206
+
207
+ - A pack **MUST** be the ownership boundary for its tests.
208
+ - Pack-specific tests **MUST** live under `packs/<pack>/tests/`.
209
+ - Ordinary tests **MUST NOT** live under `.apm/`.
210
+ - `.apm/` **MUST** contain only runtime or projectable content.
211
+ - Agent evaluations **MUST** live under `.apm/skills/<skill>/evals/` and stay
212
+ distinct from implementation tests.
213
+ - Test dependencies **MUST NOT** be declared as runtime dependencies.
214
+ - Tests **MAY** be included in catalogue or source archives.
215
+ - Tests **MUST NOT** be projected into installed agent environments. Evals
216
+ **are** projected, as a skill subdirectory — they are runtime-adjacent.
217
+ - Tests that no single pack owns **SHOULD** be kept out of pack test trees,
218
+ wherever the repository chooses to put them.
219
+ - CI **SHOULD** exercise both the source implementation and the projected
220
+ runtime artifact.
221
+
222
+ Release validation should therefore project the pack into a temporary agent
223
+ environment, smoke-test it there, and confirm the projection contains no
224
+ `tests/`, `__pycache__/`, `.pytest_cache/`, coverage output, or
225
+ `test-results/`.
226
+
227
+ ---
228
+
229
+ ## 5. Skill frontmatter and body
230
+
231
+ **Contract:** `contracts/skill.schema.json`
232
+
233
+ Every skill is a Markdown file with YAML frontmatter. Required frontmatter keys:
234
+ `title`, `description` (≤ 1024 characters), `kind`.
235
+
236
+ - `guides/_shared/how-to/author-a-skill.md` — frontmatter key list, body structure,
237
+ naming rules, progressive-disclosure pattern, three-tier dependency policy, and eval
238
+ coverage. (Available in the full guide library; not bundled in this scaffold.)
239
+
240
+ ---
241
+
242
+ ## 6. Skill body and progressive disclosure
243
+
244
+ Long skills use progressive disclosure: a brief required-reading summary at the top,
245
+ with detail sections the agent loads on demand. This keeps context usage bounded.
246
+
247
+ See `guides/_shared/how-to/author-a-skill.md` for the full pattern.
248
+
249
+ ---
250
+
251
+ ## 7. Profile format
252
+
253
+ **Contract:** `contracts/profile.schema.json`
254
+
255
+ A profile is a blessed combination of packs installed in a single command.
256
+
257
+ - [profiles/README.md](../../../profiles/README.md) — profile layout and authoring rules.
258
+ - [profiles/AGENTS.md](../../../profiles/AGENTS.md) — agent-facing schema map.
259
+ - `guides/_shared/how-to/design-a-profile.md` — step-by-step authoring guide. (Available
260
+ in the full guide library; not bundled in this scaffold.)
261
+
262
+ ---
263
+
264
+ ## 8. Lint and verify commands
265
+
266
+ ```bash
267
+ agentbundle catalogue lint --root . # style and basic correctness
268
+ agentbundle catalogue verify --root . # full validation (lint + schema + self-host drift)
269
+ agentbundle catalogue self-host --root . --check # scaffold projection drift check
270
+ ```
271
+
272
+ Run all three before opening a PR. The CI contract (section 9) details the exit codes.
273
+
274
+ ---
275
+
276
+ ## 9. CI contract
277
+
278
+ **Contract:** `contracts/catalogue-ci-contract.md` (in this scaffold)
279
+
280
+ Provider-neutral validation, packaging, publication, and evidence requirements for a
281
+ catalogue CI pipeline.
282
+
283
+ - [catalogue-ci-contract.md](catalogue-ci-contract.md) — exit codes, required steps,
284
+ evidence manifest.
285
+
286
+ ---
287
+
288
+ ## 10. Package and publication
289
+
290
+ ```bash
291
+ agentbundle catalogue package --root . --output dist/
292
+ ```
293
+
294
+ Produces a distributable archive with a content manifest. See the CI contract (section 9)
295
+ for the full pipeline sequence.
296
+
297
+ ---
298
+
299
+ ## 11. Optional pack integrations
300
+
301
+ **Contract:** `contracts/pack.schema.json` (`[[pack.integrations]]` array)
302
+
303
+ A pack can declare optional behavior seams with other packs using the
304
+ `[[pack.integrations]]` array table in `pack.toml`. The entire array is
305
+ optional — packs without integrations remain fully valid and installable.
306
+
307
+ **The ten fields** (all fields in each entry are required except `version`):
308
+
309
+ | Field | Type | Required | Description |
310
+ |-------|------|----------|-------------|
311
+ | `id` | string | yes | Unique kebab-case identifier within this pack |
312
+ | `pack` | string | yes | Name of the target pack |
313
+ | `kind` | string | yes | One of: `input`, `augment`, `review`, `handoff` |
314
+ | `role` | string | yes | Short user-facing label for this integration |
315
+ | `consumers` | string[] | yes | Type-qualified primitive refs in the declaring pack |
316
+ | `providers` | string[] | yes | Type-qualified primitive refs in the target pack |
317
+ | `when` | string | yes | Human-readable conditions under which this seam activates |
318
+ | `purpose` | string | yes | What the integration achieves when active |
319
+ | `fallback` | string | yes | What the consuming skill does when the target pack is absent |
320
+ | `version` | string | no | Semver range of the target pack version |
321
+
322
+ **The four `kind` values:**
323
+
324
+ - `input` — the target provides an artifact the declaring pack's skill reads
325
+ - `augment` — the target pack's skill is inlined into the consuming skill's workflow
326
+ - `review` — the target pack's agent or skill is invoked as a reviewer pass
327
+ - `handoff` — the consuming skill passes control to the target at a defined boundary
328
+
329
+ **What integrations are not:**
330
+
331
+ No auto-install (declaring an integration does not install the target pack), no
332
+ dependency closure (`[pack.dependencies]` owns hard requirements), no executable
333
+ `when` expressions (the `when` field is explanatory text only).
334
+
335
+ **The `fallback` requirement:**
336
+
337
+ Every integration must declare what the consuming skill does when the target is
338
+ absent. An agent reading the integration without the target installed needs to
339
+ know how to proceed.
340
+
341
+ **Lint and verify:**
342
+
343
+ ```bash
344
+ agentbundle catalogue verify --root .
345
+ ```
346
+
347
+ Primitive refs (e.g., `"skill:work-loop"`) are validated against the declaring
348
+ and target packs' `.apm/` directories. An absent target pack does not fail
349
+ verification — the check is portable across catalogues that may not include
350
+ every optional pack.
351
+
352
+ ---
353
+
354
+ ## Journey format
355
+
356
+ > **Not yet available.** Wave 4 of the catalogue-contracts initiative will define the
357
+ > journey format and its contract. This section will be filled in when that wave ships.
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "files": {
3
- "guides/_shared/reference/catalogue-authoring-standards.md": "4fe9ce077af089ab52840d1b3de600c09ca23eace114c1e28c4685a3b7289520",
3
+ "guides/_shared/reference/catalogue-authoring-standards.md": "cec0f7afd7a0bf61d7bedd9facd096b083cb7413679a6fbcd0af28d40bece58c",
4
4
  "guides/_shared/reference/catalogue-ci-contract.md": "fae793ab47989b6dd3c731afcb0b4cda21c7d08bbe7fa40fca6d3abb3d158141",
5
- "packs/AGENTS.md": "4d9e94478d3c941d4a08c8827ed9d30edaa07207854eac020b9fc3014f5b3237",
6
- "packs/README.md": "68a141500fed78988dbfe7400ea9b8fa0b7d97186d420a93dfe40763272b69ee",
5
+ "packs/AGENTS.md": "861a029007741cd7645cdfcc018e5ac85cf218d332f6688115156c9c676381b8",
6
+ "packs/README.md": "d2de5f9556f4c8e521103474bde74636e02cc805f9bf5312a3a61a1f3eb45d8f",
7
7
  "packs/_example/.apm/skills/example-skill/SKILL.md": "33be8cbf4b2c014a5a63e788b7d0b350ad8061c6c4b2579369a3e984135bf9f1",
8
+ "packs/_example/.apm/skills/example-skill/evals/eval_queries.json": "f41ecda0834a22f3b4823c81ab02e58b0e4beba610e3b40c185579abff9cfeee",
8
9
  "packs/_example/.claude-plugin/plugin.json": "d38c8456640d5e2f9296361f7e3e675e368ddd3eb22a6245267560f460155f41",
9
10
  "packs/_example/README.md": "ef130c9c1f97a75a07cc59fc55fc5b3bf71846dd2f06c3cddf5a1154023b6ef6",
10
- "packs/_example/evals/eval_queries.json": "f41ecda0834a22f3b4823c81ab02e58b0e4beba610e3b40c185579abff9cfeee",
11
11
  "packs/_example/pack.toml": "94e2c7fd25d4d115858728c7ecb8f739adfd0f594b29596c106daba0791a4b94",
12
12
  "profiles/AGENTS.md": "8950438d9e0f57c13613104c88c90b598b53196c91bfdced6d63e4e01b5e9254",
13
13
  "profiles/README.md": "a0b0268edc57fc575f7fea08f3363ba7da9f6e67dc4a0a6f8bd38c9668c97922",
@@ -5,12 +5,17 @@ Read `packs/AGENTS.local.md` when present — it carries host-specific overrides
5
5
 
6
6
  ## Pack layout
7
7
 
8
+ The pack is the ownership and test-execution boundary; `.apm/` is the runtime export boundary; a skill is the
9
+ evaluation-fixture boundary. Tests go in `packs/<pack>/tests/`, never under `.apm/`; evals stay skill-local at
10
+ `.apm/skills/<skill>/evals/` and project with the skill. `tools/lint-pack-test-boundary.py` enforces both across
11
+ every pack, plus one pytest process per skill test dir. Shape: `docs/architecture/pack-layout.md`.
12
+
8
13
  | Path | Purpose |
9
14
  |------|---------|
10
15
  | `pack.toml` | Pack metadata — version, description, adapter-contract, categories |
11
16
  | `.claude-plugin/plugin.json` | Claude plugin manifest source (must match `pack.toml` version, stay schema-valid) |
12
17
  | `seeds/` | Adopter scaffold templates (brownfield install) |
13
- | `docs/` | Concept anchor and pack guides — never projected or installed |
18
+ | `tests/` · `docs/` | Never projected — implementation tests (`skills/<skill>/`, `hooks/`, `pack/`) · concept anchor and pack guides |
14
19
  | `.apm/skills/` | Skill sources → projected per adapter |
15
20
  | `.apm/agents/` | Agent sources → projected per adapter |
16
21
  | `.apm/hooks/` | Hook-body sources → projected per adapter |
@@ -40,10 +45,7 @@ installed, and are not included in packaged archives. See `packs/README.md`.
40
45
  | `[pack.evals]` | — | `skills` (array of covered skill names) |
41
46
  | `[pack.recipes.*]` | `description` | `steps`, `adapter` |
42
47
  | `[pack.dependencies]` | — | `required`, `recommended`, `conflicts` (arrays) |
43
- | `[pack.seeds]` | — | Seed path configuration |
44
- | `[pack.layout]` | — | Per-scope layout overrides |
45
- | `[pack.first-value]` | — | First-value install metadata |
46
- | `[pack.adaptation]` | — | Adaptation inference rules |
48
+ | `[pack.seeds]` · `[pack.layout]` · `[pack.first-value]` · `[pack.adaptation]` | — | Seed paths · per-scope layout overrides · first-value install metadata · adaptation inference rules |
47
49
 
48
50
  `[pack.install]` is required when `adapter-contract.version` ≥ 0.2.
49
51
 
@@ -20,7 +20,7 @@ Copy `packs/_example` to `packs/<your-pack>`, then:
20
20
  1. Update `pack.toml` — set `[pack].name`, `version`, `description`, and `[pack.install]` fields.
21
21
  2. Update `.claude-plugin/plugin.json` — set `name`, `version`, and `description` to match.
22
22
  3. Rename `.apm/skills/example-skill` to your skill name and rewrite `SKILL.md`.
23
- 4. Update `evals/eval_queries.json` with activation fixtures for your skill.
23
+ 4. Update `.apm/skills/<skill>/evals/eval_queries.json` with activation fixtures for your skill.
24
24
  5. Rewrite `README.md` with your pack's outcome, audience, and install instructions.
25
25
  6. Run `agentbundle catalogue verify --root .` from the catalogue root.
26
26
 
@@ -50,7 +50,7 @@ full primitive directory list and adapter-contract map.
50
50
 
51
51
  `seeds/` holds adopter scaffold templates delivered on brownfield install.
52
52
 
53
- `evals/eval_queries.json` holds Tier-A activation eval fixtures — should-trigger and near-miss
53
+ `.apm/skills/<skill>/evals/eval_queries.json` holds Tier-A activation eval fixtures — should-trigger and near-miss
54
54
  queries for each user-triggered skill. List every covered skill in `[pack.evals].skills`.
55
55
 
56
56
  ## Versioning expectations