agentbundle 0.17.0__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {agentbundle-0.17.0 → agentbundle-0.18.0}/PKG-INFO +1 -1
  2. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/adapter.toml +1 -1
  3. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/pack.schema.json +84 -48
  4. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_pack_schema.py +3 -3
  5. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +1 -1
  6. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_projectable_subset.py +3 -3
  7. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/diagnostics.py +4 -0
  8. agentbundle-0.18.0/agentbundle/catalogue_tooling/lint.py +1895 -0
  9. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/verify.py +362 -9
  10. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/cli.py +2 -2
  11. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/install.py +1 -1
  12. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/profile.py +1 -1
  13. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/upgrade.py +3 -2
  14. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/version.py +1 -1
  15. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/PKG-INFO +1 -1
  16. {agentbundle-0.17.0 → agentbundle-0.18.0}/pyproject.toml +1 -1
  17. agentbundle-0.17.0/agentbundle/catalogue_tooling/lint.py +0 -648
  18. {agentbundle-0.17.0 → agentbundle-0.18.0}/README.md +0 -0
  19. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/__init__.py +0 -0
  20. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/__main__.py +0 -0
  21. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/adapter.schema.json +0 -0
  22. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/catalogue.schema.json +0 -0
  23. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/install-defaults.toml +0 -0
  24. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/install-marker.py +0 -0
  25. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  26. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  27. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/_data/profile.schema.json +0 -0
  28. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/__init__.py +0 -0
  29. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/__main__.py +0 -0
  30. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapter_root_bins.py +0 -0
  31. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/__init__.py +0 -0
  32. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/claude_code.py +0 -0
  33. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/codex.py +0 -0
  34. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/copilot.py +0 -0
  35. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/cursor.py +0 -0
  36. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/gemini.py +0 -0
  37. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/kiro.py +0 -0
  38. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
  39. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
  40. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/contract.py +0 -0
  41. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/lint_packs.py +0 -0
  42. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/main.py +0 -0
  43. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/phase_order.py +0 -0
  44. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/__init__.py +0 -0
  45. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  46. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  47. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  48. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/direct_directory.py +0 -0
  49. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  50. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/hook_id.py +0 -0
  51. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  52. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  53. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/merge_json.py +0 -0
  54. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/projections/user_merge_json.py +0 -0
  55. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  56. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  57. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/marketplace.toml +0 -0
  58. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  59. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  60. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  61. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/recipes/self-host.toml +0 -0
  62. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/scope_rails.py +0 -0
  63. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/self_host.py +0 -0
  64. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/shared_libs.py +0 -0
  65. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/target_resolver.py +0 -0
  66. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/__init__.py +0 -0
  67. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  68. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  69. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  70. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  71. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  72. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  73. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  74. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  75. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  76. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  77. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  78. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  79. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  80. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_contract.py +0 -0
  81. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_contract_scope.py +0 -0
  82. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_contract_v07.py +0 -0
  83. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_contract_v08.py +0 -0
  84. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  85. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  86. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  87. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  88. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  89. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_lint_packs.py +0 -0
  90. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  91. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  92. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  93. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_pipeline.py +0 -0
  94. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  95. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
  96. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_security.py +0 -0
  97. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_self_host_check.py +0 -0
  98. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  99. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  100. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  101. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  102. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  103. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  104. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  105. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_validate.py +0 -0
  106. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  107. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/user_libs.py +0 -0
  108. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/build/validate.py +0 -0
  109. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue.py +0 -0
  110. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
  111. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/archive.py +0 -0
  112. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/build.py +0 -0
  113. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/config.py +0 -0
  114. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
  115. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/package.py +0 -0
  116. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/results.py +0 -0
  117. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
  118. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  119. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/categories.py +0 -0
  120. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/__init__.py +0 -0
  121. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/_common.py +0 -0
  122. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/_drop_warning.py +0 -0
  123. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/adapt.py +0 -0
  124. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_build.py +0 -0
  125. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_lint.py +0 -0
  126. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_package.py +0 -0
  127. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_self_host.py +0 -0
  128. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  129. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  130. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/catalogue_verify.py +0 -0
  131. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/config.py +0 -0
  132. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/diff.py +0 -0
  133. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/init_state.py +0 -0
  134. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/list_installed.py +0 -0
  135. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/list_packs.py +0 -0
  136. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/list_profiles.py +0 -0
  137. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/list_targets.py +0 -0
  138. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/pack_evals.py +0 -0
  139. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/package_catalogue.py +0 -0
  140. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/reconcile.py +0 -0
  141. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/render.py +0 -0
  142. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/scaffold.py +0 -0
  143. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/show.py +0 -0
  144. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/uninstall.py +0 -0
  145. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/commands/validate.py +0 -0
  146. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/config.py +0 -0
  147. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/https_catalogue.py +0 -0
  148. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/pack_inventory.py +0 -0
  149. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/render.py +0 -0
  150. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/safety.py +0 -0
  151. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/scope.py +0 -0
  152. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/source_defaults.py +0 -0
  153. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/statelock.py +0 -0
  154. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle/user_config.py +0 -0
  155. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/SOURCES.txt +0 -0
  156. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/dependency_links.txt +0 -0
  157. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/entry_points.txt +0 -0
  158. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/requires.txt +0 -0
  159. {agentbundle-0.17.0 → agentbundle-0.18.0}/agentbundle.egg-info/top_level.txt +0 -0
  160. {agentbundle-0.17.0 → agentbundle-0.18.0}/setup.cfg +0 -0
  161. {agentbundle-0.17.0 → agentbundle-0.18.0}/tests/test_linear_primitive.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.17.0
3
+ Version: 0.18.0
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
@@ -11,7 +11,7 @@
11
11
  # table; v0.7).
12
12
  # RFC-0013 / docs/specs/credential-broker-contract (governance bump, v0.7 —
13
13
  # admitted as a co-residing v0.7 contributor; the `metadata.auth` lint
14
- # surface lives in tools/lint-agent-artifacts.py, not in this file).
14
+ # surface lives in verify.py (_step_agent_artifacts), not in this file).
15
15
  # docs/specs/dropped-primitives-coverage (v0.8): codex `agent` projects to
16
16
  # `.codex/agents/<name>.toml` via new `codex-agent-toml` mode; codex
17
17
  # `hook-wiring` projects to `.codex/hooks.json` via existing `merge-json`
@@ -1,9 +1,15 @@
1
1
  {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "pack.schema.json",
4
+ "title": "PackConfig",
5
+ "description": "JSON Schema for pack.toml — pack metadata and adapter-contract configuration.",
2
6
  "type": "object",
7
+ "additionalProperties": false,
3
8
  "required": ["pack"],
4
9
  "properties": {
5
10
  "pack": {
6
11
  "type": "object",
12
+ "additionalProperties": false,
7
13
  "required": ["name", "version"],
8
14
  "properties": {
9
15
  "name": {"type": "string"},
@@ -13,6 +19,7 @@
13
19
  "display_name": {"type": "string"},
14
20
  "license": {"type": "string"},
15
21
  "catalogue": {"type": "string"},
22
+ "lint-seeds": {"type": "boolean"},
16
23
  "categories": {
17
24
  "type": "array",
18
25
  "items": {"type": "string"},
@@ -27,6 +34,7 @@
27
34
  "type": "array",
28
35
  "items": {
29
36
  "type": "object",
37
+ "additionalProperties": false,
30
38
  "required": ["name"],
31
39
  "properties": {
32
40
  "name": {"type": "string"},
@@ -37,6 +45,7 @@
37
45
  },
38
46
  "links": {
39
47
  "type": "object",
48
+ "additionalProperties": false,
40
49
  "properties": {
41
50
  "homepage": {"type": "string"},
42
51
  "repository": {"type": "string"},
@@ -46,24 +55,77 @@
46
55
  "icon": {"type": "string"}
47
56
  }
48
57
  },
49
- "metadata": {"type": "object"},
58
+ "metadata": {
59
+ "type": "object",
60
+ "description": "Open extension table — additionalProperties intentionally unrestricted."
61
+ },
50
62
  "adapter-contract": {
51
63
  "type": "object",
64
+ "additionalProperties": false,
52
65
  "properties": {
53
66
  "version": {"type": "string"}
54
67
  }
55
68
  },
69
+ "install": {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": ["default-scope"],
73
+ "properties": {
74
+ "default-scope": {"enum": ["repo", "user"]},
75
+ "allowed-scopes": {
76
+ "type": "array",
77
+ "minItems": 1,
78
+ "items": {"enum": ["repo", "user"]}
79
+ },
80
+ "user-scope-hooks": {"type": "boolean"},
81
+ "allowed-adapters": {
82
+ "type": "array",
83
+ "minItems": 1,
84
+ "uniqueItems": true,
85
+ "items": {"type": "string"}
86
+ }
87
+ },
88
+ "if": {
89
+ "properties": {"default-scope": {"enum": ["user"]}},
90
+ "required": ["default-scope"]
91
+ },
92
+ "then": {
93
+ "properties": {
94
+ "allowed-scopes": {"contains": {"enum": ["user"]}}
95
+ }
96
+ },
97
+ "else": {
98
+ "properties": {
99
+ "allowed-scopes": {"contains": {"enum": ["repo"]}}
100
+ }
101
+ }
102
+ },
103
+ "evals": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "description": "Tier-A activation eval coverage — lists every user-triggered skill that ships evals/eval_queries.json.",
107
+ "properties": {
108
+ "skills": {
109
+ "type": "array",
110
+ "items": {"type": "string"},
111
+ "uniqueItems": true
112
+ }
113
+ }
114
+ },
56
115
  "recipes": {
57
116
  "type": "array",
117
+ "description": "Named catalogue recipes this pack participates in.",
58
118
  "items": {"type": "string"}
59
119
  },
60
120
  "dependencies": {
61
121
  "type": "object",
122
+ "additionalProperties": false,
62
123
  "properties": {
63
124
  "required": {
64
125
  "type": "array",
65
126
  "items": {
66
127
  "type": "object",
128
+ "additionalProperties": false,
67
129
  "required": ["catalogue", "pack", "version"],
68
130
  "properties": {
69
131
  "catalogue": {"type": "string"},
@@ -76,6 +138,7 @@
76
138
  "type": "array",
77
139
  "items": {
78
140
  "type": "object",
141
+ "additionalProperties": false,
79
142
  "required": ["catalogue", "pack", "version"],
80
143
  "properties": {
81
144
  "catalogue": {"type": "string"},
@@ -88,6 +151,7 @@
88
151
  "type": "array",
89
152
  "items": {
90
153
  "type": "object",
154
+ "additionalProperties": false,
91
155
  "required": ["catalogue", "pack", "version"],
92
156
  "properties": {
93
157
  "catalogue": {"type": "string"},
@@ -100,12 +164,14 @@
100
164
  },
101
165
  "adaptation": {
102
166
  "type": "object",
167
+ "additionalProperties": false,
103
168
  "properties": {
104
169
  "infer-from": {"type": "string"},
105
170
  "substitutions": {
106
171
  "type": "array",
107
172
  "items": {
108
173
  "type": "object",
174
+ "additionalProperties": false,
109
175
  "properties": {
110
176
  "marker": {"type": "string"},
111
177
  "infer-from": {"type": "string"}
@@ -116,6 +182,7 @@
116
182
  "type": "array",
117
183
  "items": {
118
184
  "type": "object",
185
+ "additionalProperties": false,
119
186
  "properties": {
120
187
  "target": {"type": "string"},
121
188
  "section-marker": {"type": "string"},
@@ -134,26 +201,31 @@
134
201
  },
135
202
  "layout": {
136
203
  "type": "object",
204
+ "additionalProperties": false,
137
205
  "properties": {
138
206
  "repo": {
139
207
  "type": "object",
208
+ "additionalProperties": false,
140
209
  "properties": {
141
210
  "parent": {"type": "string"},
142
- "template": {"type": "string"}
211
+ "template": {"type": "string"},
212
+ "output_dir": {"type": "string"}
143
213
  }
144
214
  },
145
215
  "user": {
146
216
  "type": "object",
217
+ "additionalProperties": false,
147
218
  "properties": {
148
219
  "parent": {"type": "string"},
149
- "template": {"type": "string"}
220
+ "template": {"type": "string"},
221
+ "output_dir": {"type": "string"}
150
222
  }
151
223
  }
152
224
  }
153
225
  },
154
226
  "first-value": {
155
227
  "type": "object",
156
- "description": "Pack first-value contract (RFC-0064 Amendment #4). Level A required for all packs; Level B required when level-b = true.",
228
+ "additionalProperties": false,
157
229
  "properties": {
158
230
  "audience-posture": {"type": "string", "enum": ["non-technical", "mixed", "technical"]},
159
231
  "surfaces": {"type": "array", "items": {"type": "string"}},
@@ -168,61 +240,25 @@
168
240
  "tutorial": {"type": "string"},
169
241
  "writes-to-repo": {"type": "boolean"},
170
242
  "safety-gate": {"type": "string"}
171
- },
172
- "additionalProperties": false
243
+ }
173
244
  }
174
245
  },
175
246
  "if": {
247
+ "required": ["adapter-contract"],
176
248
  "properties": {
177
249
  "adapter-contract": {
178
250
  "type": "object",
179
- "properties": {"version": {"enum": ["0.2", "0.3", "0.6"]}},
180
- "required": ["version"]
181
- }
182
- },
183
- "required": ["adapter-contract"]
184
- },
185
- "then": {
186
- "required": ["install"],
187
- "properties": {
188
- "install": {
189
- "type": "object",
190
- "required": ["default-scope"],
251
+ "required": ["version"],
191
252
  "properties": {
192
- "default-scope": {"enum": ["repo", "user"]},
193
- "allowed-scopes": {
194
- "type": "array",
195
- "minItems": 1,
196
- "items": {"enum": ["repo", "user"]}
197
- },
198
- "user-scope-hooks": {"type": "boolean"},
199
- "allowed-adapters": {
200
- "type": "array",
201
- "minItems": 1,
202
- "uniqueItems": true,
203
- "items": {"type": "string"}
204
- }
205
- },
206
- "if": {
207
- "properties": {"default-scope": {"enum": ["user"]}},
208
- "required": ["default-scope"]
209
- },
210
- "then": {
211
- "properties": {
212
- "allowed-scopes": {
213
- "contains": {"enum": ["user"]}
214
- }
215
- }
216
- },
217
- "else": {
218
- "properties": {
219
- "allowed-scopes": {
220
- "contains": {"enum": ["repo"]}
221
- }
253
+ "version": {
254
+ "pattern": "^0\\.([2-9]|[1-9][0-9])|^[1-9]"
222
255
  }
223
256
  }
224
257
  }
225
258
  }
259
+ },
260
+ "then": {
261
+ "required": ["install"]
226
262
  }
227
263
  }
228
264
  }
@@ -277,9 +277,9 @@ categories = ["research", "documentation"]
277
277
  keywords = ["osint", "synthesis", "citations"]
278
278
 
279
279
  [[pack.maintainers]]
280
- name = "Eugene Lim"
281
- email = "eugenelim@users.noreply.github.com"
282
- url = "https://github.com/eugenelim"
280
+ name = "Example User"
281
+ email = "example@example.com"
282
+ url = "https://github.com/example-user"
283
283
 
284
284
  [pack.links]
285
285
  homepage = "https://example.com"
@@ -169,7 +169,7 @@ class PluginManifestSchemaProjectableSubsetTests(unittest.TestCase):
169
169
  # category is marketplace-only — not a valid field in plugin.json (derived schema).
170
170
  # It is kept in the source schema's allow-list for hand-authored files only.
171
171
  _SUBSET = {
172
- "author": {"name": "Eugene Lim", "email": "eugenelim@users.noreply.github.com"},
172
+ "author": {"name": "Example User", "email": "example@example.com"},
173
173
  "license": "Apache-2.0",
174
174
  "homepage": "https://example.com",
175
175
  "repository": "https://github.com/example/repo",
@@ -34,8 +34,8 @@ categories = ["research", "documentation"]
34
34
  keywords = ["osint", "synthesis", "citations"]
35
35
 
36
36
  [[pack.maintainers]]
37
- name = "Eugene Lim"
38
- email = "eugenelim@users.noreply.github.com"
37
+ name = "Example User"
38
+ email = "example@example.com"
39
39
 
40
40
  [pack.links]
41
41
  homepage = "https://example.com"
@@ -59,7 +59,7 @@ class DeriveProjectableSubsetTests(unittest.TestCase):
59
59
  self.assertEqual(
60
60
  subset,
61
61
  {
62
- "author": {"name": "Eugene Lim", "email": "eugenelim@users.noreply.github.com"},
62
+ "author": {"name": "Example User", "email": "example@example.com"},
63
63
  "license": "Apache-2.0",
64
64
  "homepage": "https://example.com",
65
65
  "repository": "https://github.com/example/repo",
@@ -36,3 +36,7 @@ class DiagnosticCode(str, enum.Enum):
36
36
  CAT_L025 = "CAT-L025" # Primitive name exceeds max length
37
37
  CAT_L026 = "CAT-L026" # Primitive description exceeds max length
38
38
  CAT_L027 = "CAT-L027" # Multiline metadata form not supported
39
+ CAT_L028 = "CAT-L028" # Install profile invariant violation (scope, deps, order)
40
+ CAT_L029 = "CAT-L029" # Catalogue seeds lint failure (blocklist, placeholder, patterns.jsonl)
41
+ CAT_L030 = "CAT-L030" # First-value contract violation (Level A/B fields, writes-to-repo, tutorial)
42
+ CAT_L031 = "CAT-L031" # Credentialed-skill convention violation (D1/D2/D2b/D3/broker-specific)