agentbundle 0.18.0__tar.gz → 0.20.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.18.0 → agentbundle-0.20.0}/PKG-INFO +4 -2
  2. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/pack.schema.json +24 -0
  3. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/__init__.py +0 -1
  4. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/contract.py +1 -1
  5. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/lint_packs.py +4 -4
  6. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/main.py +4 -4
  7. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/self_host.py +5 -5
  8. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_claude_code.py +1 -1
  9. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_codex.py +1 -1
  10. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_copilot.py +1 -1
  11. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_cursor.py +1 -1
  12. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_gemini.py +1 -1
  13. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_kiro.py +1 -1
  14. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +1 -1
  15. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +1 -1
  16. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +1 -1
  17. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +1 -1
  18. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_contract.py +3 -3
  19. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_contract_scope.py +2 -2
  20. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_contract_v07.py +2 -2
  21. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_contract_v08.py +1 -1
  22. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_end_to_end_build.py +1 -1
  23. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +7 -8
  24. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +2 -2
  25. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_lint_packs.py +4 -4
  26. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_pack_schema.py +1 -1
  27. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_pack_schema_install.py +1 -1
  28. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_pipeline.py +1 -1
  29. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +2 -2
  30. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_projectable_subset.py +1 -1
  31. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_security.py +1 -1
  32. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_self_host_check.py +14 -14
  33. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_shared_prefix_contract.py +2 -2
  34. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_validate.py +1 -1
  35. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/config.py +1 -1
  36. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/lint.py +5 -5
  37. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/package.py +2 -2
  38. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/cli.py +23 -0
  39. agentbundle-0.20.0/agentbundle/commands/docs.py +117 -0
  40. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/pack_evals.py +1 -1
  41. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/profile.py +1 -1
  42. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/validate.py +4 -4
  43. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/version.py +3 -3
  44. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/PKG-INFO +4 -2
  45. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/SOURCES.txt +1 -0
  46. {agentbundle-0.18.0 → agentbundle-0.20.0}/pyproject.toml +6 -4
  47. {agentbundle-0.18.0 → agentbundle-0.20.0}/README.md +0 -0
  48. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/__init__.py +0 -0
  49. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/__main__.py +0 -0
  50. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/adapter.schema.json +0 -0
  51. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/adapter.toml +0 -0
  52. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/catalogue.schema.json +0 -0
  53. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/install-defaults.toml +0 -0
  54. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/install-marker.py +0 -0
  55. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  56. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  57. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/_data/profile.schema.json +0 -0
  58. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/__main__.py +0 -0
  59. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapter_root_bins.py +0 -0
  60. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/__init__.py +0 -0
  61. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/claude_code.py +0 -0
  62. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/codex.py +0 -0
  63. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/copilot.py +0 -0
  64. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/cursor.py +0 -0
  65. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/gemini.py +0 -0
  66. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/kiro.py +0 -0
  67. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
  68. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
  69. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/phase_order.py +0 -0
  70. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/__init__.py +0 -0
  71. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  72. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  73. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  74. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/direct_directory.py +0 -0
  75. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  76. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/hook_id.py +0 -0
  77. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  78. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  79. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/merge_json.py +0 -0
  80. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/projections/user_merge_json.py +0 -0
  81. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  82. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  83. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/marketplace.toml +0 -0
  84. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  85. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  86. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  87. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/recipes/self-host.toml +0 -0
  88. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/scope_rails.py +0 -0
  89. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/shared_libs.py +0 -0
  90. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/target_resolver.py +0 -0
  91. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/__init__.py +0 -0
  92. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  93. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  94. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  95. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  96. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  97. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  98. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  99. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  100. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
  101. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  102. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  103. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  104. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  105. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  106. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  107. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  108. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/user_libs.py +0 -0
  109. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/build/validate.py +0 -0
  110. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue.py +0 -0
  111. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
  112. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/archive.py +0 -0
  113. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/build.py +0 -0
  114. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
  115. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  116. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/results.py +0 -0
  117. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
  118. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  119. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/catalogue_tooling/verify.py +0 -0
  120. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/categories.py +0 -0
  121. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/__init__.py +0 -0
  122. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/_common.py +0 -0
  123. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/_drop_warning.py +0 -0
  124. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/adapt.py +0 -0
  125. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_build.py +0 -0
  126. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_lint.py +0 -0
  127. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_package.py +0 -0
  128. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_self_host.py +0 -0
  129. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  130. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  131. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/catalogue_verify.py +0 -0
  132. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/config.py +0 -0
  133. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/diff.py +0 -0
  134. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/init_state.py +0 -0
  135. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/install.py +0 -0
  136. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/list_installed.py +0 -0
  137. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/list_packs.py +0 -0
  138. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/list_profiles.py +0 -0
  139. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/list_targets.py +0 -0
  140. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/package_catalogue.py +0 -0
  141. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/reconcile.py +0 -0
  142. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/render.py +0 -0
  143. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/scaffold.py +0 -0
  144. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/show.py +0 -0
  145. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/uninstall.py +0 -0
  146. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/commands/upgrade.py +0 -0
  147. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/config.py +0 -0
  148. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/https_catalogue.py +0 -0
  149. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/pack_inventory.py +0 -0
  150. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/render.py +0 -0
  151. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/safety.py +0 -0
  152. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/scope.py +0 -0
  153. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/source_defaults.py +0 -0
  154. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/statelock.py +0 -0
  155. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle/user_config.py +0 -0
  156. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/dependency_links.txt +0 -0
  157. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/entry_points.txt +0 -0
  158. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/requires.txt +0 -0
  159. {agentbundle-0.18.0 → agentbundle-0.20.0}/agentbundle.egg-info/top_level.txt +0 -0
  160. {agentbundle-0.18.0 → agentbundle-0.20.0}/setup.cfg +0 -0
  161. {agentbundle-0.18.0 → agentbundle-0.20.0}/tests/test_linear_primitive.py +0 -0
@@ -1,12 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.18.0
3
+ Version: 0.20.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
7
7
  Project-URL: Homepage, https://github.com/eugenelim/agent-ready-repo
8
8
  Project-URL: Source, https://github.com/eugenelim/agent-ready-repo
9
- Project-URL: Documentation, https://github.com/eugenelim/agent-ready-repo/blob/main/docs/guides/_shared/how-to/install-agentbundle-from-clone.md
9
+ Project-URL: Documentation, https://eugenelim.github.io/agent-ready-repo/docs/
10
+ Project-URL: Catalogue Format, https://eugenelim.github.io/agent-ready-repo/docs/reference/catalogue-format
11
+ Project-URL: Changelog, https://eugenelim.github.io/agent-ready-repo/docs/changelog
10
12
  Classifier: Development Status :: 4 - Beta
11
13
  Classifier: License :: OSI Approved :: Apache Software License
12
14
  Classifier: License :: OSI Approved :: MIT License
@@ -199,6 +199,30 @@
199
199
  "pattern": "^[^/].*"
200
200
  }
201
201
  },
202
+ "runtime-dependencies": {
203
+ "type": "array",
204
+ "description": "External runtime dependencies required by this pack's skills.",
205
+ "items": {
206
+ "type": "object",
207
+ "additionalProperties": false,
208
+ "required": ["ecosystem", "package"],
209
+ "properties": {
210
+ "ecosystem": {
211
+ "type": "string",
212
+ "enum": ["pypi", "npm", "cargo", "go", "homebrew", "apt", "system"]
213
+ },
214
+ "package": {"type": "string"},
215
+ "version": {"type": "string"},
216
+ "optional": {"type": "boolean", "default": false},
217
+ "skills": {
218
+ "type": "array",
219
+ "items": {"type": "string"}
220
+ },
221
+ "install": {"type": "string"},
222
+ "note": {"type": "string"}
223
+ }
224
+ }
225
+ },
202
226
  "layout": {
203
227
  "type": "object",
204
228
  "additionalProperties": false,
@@ -44,7 +44,6 @@ def _cmd_validate(args: argparse.Namespace) -> int:
44
44
 
45
45
  schema_path = (
46
46
  Path(__file__).resolve().parent.parent.parent.parent.parent
47
- / "docs"
48
47
  / "contracts"
49
48
  / "adapter.schema.json"
50
49
  )
@@ -1,6 +1,6 @@
1
1
  """Contract loader.
2
2
 
3
- Reads `docs/contracts/adapter.toml` via `tomllib` and
3
+ Reads `contracts/adapter.toml` via `tomllib` and
4
4
  returns a dict. No validation logic — `validate.py` does that, and
5
5
  the CLI's `validate` subcommand wires the two together.
6
6
 
@@ -18,7 +18,7 @@ Three checks, applied to every pack under a `--packs-dir`:
18
18
  exceed the strictest `description-max-length`. Multi-line YAML
19
19
  descriptions (`>`, `|`, continuation lines) are refused outright
20
20
  rather than mis-parsed. Constraints come from
21
- `docs/contracts/target-vocab.toml` — see
21
+ `contracts/target-vocab.toml` — see
22
22
  `docs/specs/lint-packs-target-vocab/spec.md`.
23
23
 
24
24
  The lint is Python-only so it runs on every CI platform without
@@ -48,7 +48,7 @@ _PACK_SUBTREES = ("seeds", ".apm")
48
48
  # Path to the sibling vocab file, relative to a repo root. The loader
49
49
  # walks up from a caller-supplied start until an ancestor contains
50
50
  # this relative path.
51
- _VOCAB_RELPATH = Path("docs/contracts/target-vocab.toml")
51
+ _VOCAB_RELPATH = Path("contracts/target-vocab.toml")
52
52
 
53
53
  # Sentinel returned by `_extract_frontmatter_fields` when a key's
54
54
  # value position is `>`, `|`, or empty (signaling a folded / nested
@@ -58,7 +58,7 @@ _MULTILINE = object()
58
58
 
59
59
 
60
60
  class Constraints(NamedTuple):
61
- """Strictest-cap snapshot of `docs/contracts/target-vocab.toml`.
61
+ """Strictest-cap snapshot of `contracts/target-vocab.toml`.
62
62
 
63
63
  `binding_targets` keys (`"description_max"`, `"name_max"`,
64
64
  `"name_pattern"`) carry the ASCII-sorted list of targets enforcing
@@ -84,7 +84,7 @@ def _walk_up_for_vocab(start: Path) -> Path | None:
84
84
 
85
85
 
86
86
  def _load_target_vocab(start: Path) -> tuple[dict | None, str | None]:
87
- """Walk up from `start` looking for `docs/contracts/target-vocab.toml`;
87
+ """Walk up from `start` looking for `contracts/target-vocab.toml`;
88
88
  fall back to walking up from this module's own ancestor chain when
89
89
  the explicit walk fails. This keeps the gate working when an
90
90
  adopter points `--packs-dir` at a tmp tree outside the repo while
@@ -53,7 +53,7 @@ _GITHUB_URL_RE = re.compile(
53
53
 
54
54
  def _bundled_or_repo(name: str) -> Path:
55
55
  """Locate a data file shipped under both `agentbundle/_data/` and
56
- `<repo>/docs/contracts/`.
56
+ `<repo>/contracts/`.
57
57
 
58
58
  Prefer the bundled copy when present on disk (works in a `pip install`
59
59
  and a dev checkout); fall back to the repo path for dev checkouts
@@ -64,7 +64,7 @@ def _bundled_or_repo(name: str) -> Path:
64
64
  bundled = PACKAGE_ROOT.parent / "_data" / name
65
65
  if bundled.exists():
66
66
  return bundled
67
- return REPO_ROOT / "docs" / "contracts" / name
67
+ return REPO_ROOT / "contracts" / name
68
68
 
69
69
 
70
70
  def _read_bundled(name: str) -> str:
@@ -73,7 +73,7 @@ def _read_bundled(name: str) -> str:
73
73
  Resolution order:
74
74
  1. `<package>/_data/<name>` via `importlib.resources` — works for
75
75
  filesystem installs AND inside a `zipapp` archive.
76
- 2. `<repo>/docs/contracts/<name>` — dev fallback for source trees
76
+ 2. `<repo>/contracts/<name>` — dev fallback for source trees
77
77
  whose `_data/` hasn't been populated.
78
78
  """
79
79
  try:
@@ -84,7 +84,7 @@ def _read_bundled(name: str) -> str:
84
84
  return resource.read_text(encoding="utf-8")
85
85
  except (FileNotFoundError, ModuleNotFoundError):
86
86
  pass
87
- return (REPO_ROOT / "docs" / "contracts" / name).read_text(encoding="utf-8")
87
+ return (REPO_ROOT / "contracts" / name).read_text(encoding="utf-8")
88
88
 
89
89
 
90
90
  CONTRACT_PATH = _bundled_or_repo("adapter.toml")
@@ -357,11 +357,11 @@ EXCLUDED_PATTERNS: tuple[str, ...] = (
357
357
  "docs/specs/*/plan.md",
358
358
  "docs/specs/*/state.json",
359
359
  "docs/specs/*/notes/**",
360
- "docs/contracts/**",
360
+ "contracts/**",
361
361
  "docs/architecture/*.md",
362
362
  "docs/product/*.md",
363
363
  "docs/knowledge/*.md",
364
- "docs/guides/**/*.md",
364
+ "guides/**/*.md",
365
365
  # Seeded-once / adopter-curated files (RFC-0002 Manual semantics).
366
366
  "workspace.toml", # RFC-0069: seeded once; adopter-curated thereafter
367
367
  # Manual seed-projected paths (RFC-0002 amendment 2026-05-25). The
@@ -445,7 +445,7 @@ _EXCLUDED_REGEXES: tuple[re.Pattern[str], ...] = tuple(
445
445
  # → Manual; this allow-list shrank to one entry (`docs/CONVENTIONS.md`)
446
446
  # accordingly. The reclassified paths now fall through to
447
447
  # EXCLUDED_PATTERNS coverage (`docs/architecture/*.md`,
448
- # `docs/product/*.md`, `docs/knowledge/*.md`, `docs/guides/**/*.md`,
448
+ # `docs/product/*.md`, `docs/knowledge/*.md`, `guides/**/*.md`,
449
449
  # and the 8 explicit additions listed above). See RFC-0002 §
450
450
  # Amendments § 2026-05-25.
451
451
  PROJECTED_README_OVERRIDES: tuple[str, ...] = (
@@ -538,8 +538,8 @@ def _project_seeds(packs_dir: Path, output_root: Path) -> dict[Path, Path]:
538
538
  # by-quadrant guide tree here: the seed stays by-quadrant for
539
539
  # adopters, but writing it during self-host litters a repo that
540
540
  # owns its guides (e.g. organized by pack) with untracked
541
- # `docs/guides/<quadrant>/README.md` on every build-self run.
542
- if relative.as_posix().startswith("docs/guides/"):
541
+ # `guides/<quadrant>/README.md` on every build-self run.
542
+ if relative.as_posix().startswith("guides/"):
543
543
  continue
544
544
  if _is_excluded(relative) and (output_root / relative).exists():
545
545
  # Manual file on disk — leave it alone. The seed is
@@ -11,7 +11,7 @@ from agentbundle.build.adapters.claude_code import project, project_packs
11
11
  from agentbundle.build.contract import load as load_contract
12
12
 
13
13
  REPO_ROOT = Path(__file__).resolve().parents[5]
14
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
14
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
15
15
 
16
16
 
17
17
  def _seed_pack(root: Path) -> Path:
@@ -19,7 +19,7 @@ from agentbundle.build.adapters.codex import (
19
19
  from agentbundle.build.contract import load as load_contract
20
20
 
21
21
  REPO_ROOT = Path(__file__).resolve().parents[5]
22
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
22
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
23
23
 
24
24
 
25
25
  def _seed_pack(root: Path, name: str = "pack", skill_prefix: str = "") -> Path:
@@ -10,7 +10,7 @@ from agentbundle.build.adapters.copilot import project
10
10
  from agentbundle.build.contract import load as load_contract
11
11
 
12
12
  REPO_ROOT = Path(__file__).resolve().parents[5]
13
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
13
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
14
14
 
15
15
 
16
16
  def _seed_pack(root: Path) -> Path:
@@ -21,7 +21,7 @@ from agentbundle.build.contract import load as load_contract
21
21
  from agentbundle.scope import contract_version_at_least
22
22
 
23
23
  REPO_ROOT = Path(__file__).resolve().parents[5]
24
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
24
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
25
25
 
26
26
 
27
27
  def _seed_agent(pack: Path, name: str, *, tools: str | None, model: str | None = None) -> None:
@@ -25,7 +25,7 @@ from agentbundle.build.projections.gemini_command_toml import (
25
25
  )
26
26
 
27
27
  REPO_ROOT = Path(__file__).resolve().parents[5]
28
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
28
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
29
29
 
30
30
  _COMMAND_RULE = {"target-path": ".gemini/commands/"}
31
31
 
@@ -13,7 +13,7 @@ from agentbundle.build.adapters.kiro import project, project_packs
13
13
  from agentbundle.build.contract import load as load_contract
14
14
 
15
15
  REPO_ROOT = Path(__file__).resolve().parents[5]
16
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
16
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
17
17
 
18
18
 
19
19
  def _seed_pack(root: Path) -> Path:
@@ -17,7 +17,7 @@ from agentbundle.build.adapters import ADAPTERS, kiro_ide
17
17
  from agentbundle.build.contract import load as load_contract
18
18
 
19
19
  REPO_ROOT = Path(__file__).resolve().parents[5]
20
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
20
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
21
21
 
22
22
 
23
23
  def _seed_pack(root: Path) -> Path:
@@ -17,7 +17,7 @@ from agentbundle.build.adapters.kiro_cli import project
17
17
  from agentbundle.build.contract import load as load_contract
18
18
 
19
19
  REPO_ROOT = Path(__file__).resolve().parents[5]
20
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
20
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
21
21
 
22
22
 
23
23
  def _seed_agent_pack(root: Path, tools: str = "Read, Grep, Glob, Bash") -> Path:
@@ -16,7 +16,7 @@ from agentbundle.build.adapters.kiro_ide import project
16
16
  from agentbundle.build.contract import load as load_contract
17
17
 
18
18
  REPO_ROOT = Path(__file__).resolve().parents[5]
19
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
19
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
20
20
 
21
21
 
22
22
  def _seed_agent_pack(root: Path, tools: str = "Read, Grep", model: str | None = None) -> Path:
@@ -23,7 +23,7 @@ from agentbundle.build.adapters import ADAPTERS
23
23
  from agentbundle.build.contract import load as load_contract
24
24
 
25
25
  REPO_ROOT = Path(__file__).resolve().parents[5]
26
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
26
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
27
27
  ARCHITECT_PACK = REPO_ROOT / "packs" / "architect"
28
28
  AGENT_NAME = "design-reviewer"
29
29
 
@@ -27,8 +27,8 @@ import unittest
27
27
  from pathlib import Path
28
28
 
29
29
  REPO_ROOT = Path(__file__).resolve().parents[5]
30
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
31
- SCHEMA_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.schema.json"
30
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
31
+ SCHEMA_PATH = REPO_ROOT / "contracts" / "adapter.schema.json"
32
32
 
33
33
  # All seven RFC-0001 projection modes.
34
34
  SEVEN_RFC_MODES = {
@@ -584,7 +584,7 @@ class TestCodexSkillDirectDirectory(unittest.TestCase):
584
584
  AC1: Codex `skill` is `direct-directory` projecting to
585
585
  `.agents/skills/` with `on-conflict = "prompt-then-preserve"`;
586
586
  no managed-block delimiter keys remain on the entry.
587
- AC2: `docs/contracts/adapter.toml` and the bundled `_data/adapter.toml`
587
+ AC2: `contracts/adapter.toml` and the bundled `_data/adapter.toml`
588
588
  are byte-identical.
589
589
  AC15: The seed AGENTS.md no longer carries the legacy delimiter pair.
590
590
  """
@@ -20,8 +20,8 @@ import unittest
20
20
  from pathlib import Path
21
21
 
22
22
  REPO_ROOT = Path(__file__).resolve().parents[5]
23
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
24
- SCHEMA_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.schema.json"
23
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
24
+ SCHEMA_PATH = REPO_ROOT / "contracts" / "adapter.schema.json"
25
25
 
26
26
 
27
27
  def _load_schema() -> dict:
@@ -5,7 +5,7 @@ Verifies the T1 edits landed:
5
5
 
6
6
  - ``[contract] version == "0.7"`` in both the runtime data file
7
7
  (`_data/adapter.toml`) and the docs mirror
8
- (`docs/contracts/adapter.toml`). The two files must stay byte-
8
+ (`contracts/adapter.toml`). The two files must stay byte-
9
9
  aligned per the v0.3-schema sync test; this module pins the
10
10
  version on both as belt-and-braces (AC1 for both RFCs).
11
11
  - **RFC-0012 surface:**
@@ -39,7 +39,7 @@ REPO_ROOT = Path(__file__).resolve().parents[5]
39
39
  DATA_CONTRACT_PATH = (
40
40
  REPO_ROOT / "packages" / "agentbundle" / "agentbundle" / "_data" / "adapter.toml"
41
41
  )
42
- DOCS_CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
42
+ DOCS_CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
43
43
  DATA_SCHEMA_PATH = (
44
44
  REPO_ROOT
45
45
  / "packages"
@@ -35,7 +35,7 @@ REPO_ROOT = Path(__file__).resolve().parents[5]
35
35
  DATA_CONTRACT_PATH = (
36
36
  REPO_ROOT / "packages" / "agentbundle" / "agentbundle" / "_data" / "adapter.toml"
37
37
  )
38
- DOCS_CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
38
+ DOCS_CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
39
39
  DATA_SCHEMA_PATH = (
40
40
  REPO_ROOT
41
41
  / "packages"
@@ -139,7 +139,7 @@ class CheckCommandTests(unittest.TestCase):
139
139
  from agentbundle.build.self_host import run_self_host
140
140
 
141
141
  contract = load_contract(
142
- REPO_ROOT / "docs" / "contracts" / "adapter.toml"
142
+ REPO_ROOT / "contracts" / "adapter.toml"
143
143
  )
144
144
  # Pre-seed using the self-host runner so the working
145
145
  # tree exactly matches what `make build-check` will render
@@ -1,8 +1,8 @@
1
1
  """`tools/lint-agents-md.py` check #8 — the Diátaxis-structure block.
2
2
 
3
3
  After the per-pack guide migration (ADR-0020) the four Diátaxis quadrant
4
- directories may live either at the top level (`docs/guides/<quadrant>/`, the
5
- by-quadrant scaffold an adopter installs) or under `docs/guides/_shared/`
4
+ directories may live either at the top level (`guides/<quadrant>/`, the
5
+ by-quadrant scaffold an adopter installs) or under `guides/_shared/`
6
6
  (the per-pack layout this catalogue uses). The check passes in *either*
7
7
  layout and fails only when a quadrant name resolves to neither.
8
8
 
@@ -36,8 +36,7 @@ _MISSING_SUBSTR = "is missing Diátaxis subdirectories"
36
36
  def _seed_common(root: Path) -> None:
37
37
  (root / "AGENTS.md").write_text("# AGENTS.md\n", encoding="utf-8")
38
38
  (root / "CLAUDE.md").symlink_to("AGENTS.md")
39
- (root / "docs").mkdir(parents=True, exist_ok=True)
40
- (root / "docs" / "guides").mkdir(parents=True, exist_ok=True)
39
+ (root / "guides").mkdir(parents=True, exist_ok=True)
41
40
 
42
41
 
43
42
  def _make_quadrants(base: Path) -> None:
@@ -63,7 +62,7 @@ class DiataxisBlockTests(unittest.TestCase):
63
62
  with tempfile.TemporaryDirectory() as tmp:
64
63
  root = Path(tmp)
65
64
  _seed_common(root)
66
- _make_quadrants(root / "docs" / "guides")
65
+ _make_quadrants(root / "guides")
67
66
  result = _run_linter(root)
68
67
  self.assertIn(_OK_SUBSTR, result.stdout)
69
68
  self.assertNotIn(_MISSING_SUBSTR, result.stderr)
@@ -72,9 +71,9 @@ class DiataxisBlockTests(unittest.TestCase):
72
71
  with tempfile.TemporaryDirectory() as tmp:
73
72
  root = Path(tmp)
74
73
  _seed_common(root)
75
- _make_quadrants(root / "docs" / "guides" / "_shared")
74
+ _make_quadrants(root / "guides" / "_shared")
76
75
  # A representative pack home, no top-level quadrant dirs.
77
- (root / "docs" / "guides" / "core" / "how-to").mkdir(parents=True)
76
+ (root / "guides" / "core" / "how-to").mkdir(parents=True)
78
77
  result = _run_linter(root)
79
78
  self.assertIn(_OK_SUBSTR, result.stdout)
80
79
  self.assertNotIn(_MISSING_SUBSTR, result.stderr)
@@ -83,7 +82,7 @@ class DiataxisBlockTests(unittest.TestCase):
83
82
  with tempfile.TemporaryDirectory() as tmp:
84
83
  root = Path(tmp)
85
84
  _seed_common(root)
86
- # docs/guides/ exists but carries no quadrant dirs in either spot.
85
+ # guides/ exists but carries no quadrant dirs in either spot.
87
86
  result = _run_linter(root)
88
87
  self.assertIn(_MISSING_SUBSTR, result.stderr)
89
88
  for q in QUADRANTS:
@@ -7,7 +7,7 @@ The check fires through the linter's existing `warn(...)` closure
7
7
 
8
8
  Test shape: CLI subprocess invocation in a `tmp_path` scratch tree
9
9
  that mirrors the repo's layout (root `AGENTS.md`, `CLAUDE.md` symlink,
10
- synthetic `docs/contracts/adapter.toml`). The linter is run with
10
+ synthetic `contracts/adapter.toml`). The linter is run with
11
11
  `cwd=tmp_path`; the test asserts the return code and stderr.
12
12
  """
13
13
 
@@ -54,7 +54,7 @@ def _seed_tree(
54
54
  contract_body: str,
55
55
  agents_md_body: str,
56
56
  ) -> None:
57
- contracts = root / "docs" / "contracts"
57
+ contracts = root / "contracts"
58
58
  contracts.mkdir(parents=True)
59
59
  (contracts / "adapter.toml").write_text(contract_body, encoding="utf-8")
60
60
 
@@ -3,7 +3,7 @@ names in pack content before they reach a release artefact.
3
3
 
4
4
  Also covers the per-target metadata gate landed under
5
5
  docs/specs/lint-packs-target-vocab/: skill/agent name pattern, name
6
- length, and description length per docs/contracts/target-vocab.toml.
6
+ length, and description length per contracts/target-vocab.toml.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
@@ -495,7 +495,7 @@ class LintPackVocabTests(unittest.TestCase):
495
495
  both walks fail deterministically."""
496
496
  from unittest.mock import patch
497
497
  from agentbundle.build import lint_packs as lp_module
498
- sentinel = Path("docs/contracts/__nonexistent_target_vocab__.toml")
498
+ sentinel = Path("contracts/__nonexistent_target_vocab__.toml")
499
499
  with tempfile.TemporaryDirectory() as tmp:
500
500
  packs_dir = Path(tmp) / "isolated" / "packs"
501
501
  packs_dir.mkdir(parents=True)
@@ -596,7 +596,7 @@ class LintPackVocabTests(unittest.TestCase):
596
596
  packs_dir = root / "packs"
597
597
  packs_dir.mkdir(parents=True)
598
598
  _write_minimal_pack(packs_dir / "p", name="p")
599
- vocab_dir = root / "docs" / "contracts"
599
+ vocab_dir = root / "contracts"
600
600
  vocab_dir.mkdir(parents=True)
601
601
  (vocab_dir / "target-vocab.toml").write_text(body, encoding="utf-8")
602
602
  args = argparse.Namespace(packs_dir=str(packs_dir))
@@ -682,7 +682,7 @@ class LintPackVocabTests(unittest.TestCase):
682
682
  packs_dir = root / "packs"
683
683
  packs_dir.mkdir(parents=True)
684
684
  _write_minimal_pack(packs_dir / "p", name="p")
685
- vocab_dir = root / "docs" / "contracts"
685
+ vocab_dir = root / "contracts"
686
686
  vocab_dir.mkdir(parents=True)
687
687
  (vocab_dir / "target-vocab.toml").write_text(
688
688
  '[target.alpha]\nname-pattern = "^[a-z][a-z0-9-]*$"\n'
@@ -21,7 +21,7 @@ from pathlib import Path
21
21
 
22
22
  REPO_ROOT = Path(__file__).resolve().parents[5]
23
23
  PACK_SCHEMA_PATH = (
24
- REPO_ROOT / "docs" / "contracts" / "pack.schema.json"
24
+ REPO_ROOT / "contracts" / "pack.schema.json"
25
25
  )
26
26
 
27
27
 
@@ -32,7 +32,7 @@ import unittest
32
32
  from pathlib import Path
33
33
 
34
34
  REPO_ROOT = Path(__file__).resolve().parents[5]
35
- PACK_SCHEMA_PATH = REPO_ROOT / "docs" / "contracts" / "pack.schema.json"
35
+ PACK_SCHEMA_PATH = REPO_ROOT / "contracts" / "pack.schema.json"
36
36
 
37
37
 
38
38
  def _load_schema() -> dict:
@@ -23,7 +23,7 @@ from agentbundle.build.main import (
23
23
  )
24
24
 
25
25
  REPO_ROOT = Path(__file__).resolve().parents[5]
26
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
26
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
27
27
  FIXTURES = Path(__file__).resolve().parent / "fixtures"
28
28
 
29
29
 
@@ -20,10 +20,10 @@ from pathlib import Path
20
20
 
21
21
  REPO_ROOT = Path(__file__).resolve().parents[5]
22
22
  PLUGIN_MANIFEST_SCHEMA_PATH = (
23
- REPO_ROOT / "docs" / "contracts" / "plugin-manifest.schema.json"
23
+ REPO_ROOT / "contracts" / "plugin-manifest.schema.json"
24
24
  )
25
25
  PLUGIN_MANIFEST_DERIVED_SCHEMA_PATH = (
26
- REPO_ROOT / "docs" / "contracts" / "plugin-manifest.derived.schema.json"
26
+ REPO_ROOT / "contracts" / "plugin-manifest.derived.schema.json"
27
27
  )
28
28
 
29
29
 
@@ -20,7 +20,7 @@ from pathlib import Path
20
20
 
21
21
  REPO_ROOT = Path(__file__).resolve().parents[5]
22
22
  DERIVED_SCHEMA_PATH = (
23
- REPO_ROOT / "docs" / "contracts" / "plugin-manifest.derived.schema.json"
23
+ REPO_ROOT / "contracts" / "plugin-manifest.derived.schema.json"
24
24
  )
25
25
 
26
26
  ENRICHED_TOML = """
@@ -21,7 +21,7 @@ from agentbundle.build.main import (
21
21
  )
22
22
 
23
23
  REPO_ROOT = Path(__file__).resolve().parents[5]
24
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
24
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
25
25
 
26
26
 
27
27
  class PathTraversalGuardTests(unittest.TestCase):
@@ -37,7 +37,7 @@ from agentbundle.build.self_host import (
37
37
  )
38
38
 
39
39
  REPO_ROOT = Path(__file__).resolve().parents[5]
40
- CONTRACT_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.toml"
40
+ CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
41
41
 
42
42
 
43
43
  def _seed_pack(root: Path, name: str = "core") -> Path:
@@ -767,7 +767,7 @@ class ExcludedGlobTests(unittest.TestCase):
767
767
  self.assertFalse(_is_excluded(Path("docs/CONVENTIONS.md")))
768
768
 
769
769
  # All 19 reclassified paths are now Excluded (either via
770
- # existing `docs/<area>/*.md` patterns, the `docs/guides/**/*.md`
770
+ # existing `docs/<area>/*.md` patterns, the `guides/**/*.md`
771
771
  # pattern, or one of the 8 explicit additions made by the
772
772
  # amendment).
773
773
  for path in (
@@ -780,12 +780,12 @@ class ExcludedGlobTests(unittest.TestCase):
780
780
  "docs/product/README.md",
781
781
  "docs/product/roadmap.md",
782
782
  "docs/product/changelog.md",
783
- # Covered by `docs/guides/**/*.md`:
784
- "docs/guides/README.md",
785
- "docs/guides/_shared/tutorials/README.md",
786
- "docs/guides/_shared/how-to/README.md",
787
- "docs/guides/_shared/reference/README.md",
788
- "docs/guides/_shared/explanation/README.md",
783
+ # Covered by `guides/**/*.md`:
784
+ "guides/README.md",
785
+ "guides/_shared/tutorials/README.md",
786
+ "guides/_shared/how-to/README.md",
787
+ "guides/_shared/reference/README.md",
788
+ "guides/_shared/explanation/README.md",
789
789
  # Explicit literal additions:
790
790
  "workspace.toml", # RFC-0069: seeded once; adopter-curated thereafter
791
791
  "docs/CHARTER.md",
@@ -964,10 +964,10 @@ class SeedProjectionTests(unittest.TestCase):
964
964
  at install, not via self-host projection. `_project_seeds`
965
965
  (self-host only) must NOT scaffold the by-quadrant guide tree:
966
966
  doing so litters a repo that owns its guides (e.g. organized by
967
- pack) with untracked `docs/guides/<quadrant>/README.md` on every
967
+ pack) with untracked `guides/<quadrant>/README.md` on every
968
968
  build-self run. Regression for the per-pack-migration drift —
969
969
  the seed scaffold stays by-quadrant for adopters, but self-host
970
- must leave the repo's own `docs/guides/` alone.
970
+ must leave the repo's own `guides/` alone.
971
971
  """
972
972
  from agentbundle.build.self_host import _project_seeds
973
973
 
@@ -976,8 +976,8 @@ class SeedProjectionTests(unittest.TestCase):
976
976
  packs_dir = tmp_path / "packs"
977
977
  packs_dir.mkdir()
978
978
  pack = packs_dir / "user-guide-diataxis"
979
- (pack / "seeds" / "docs" / "guides" / "tutorials").mkdir(parents=True)
980
- (pack / "seeds" / "docs" / "guides" / "tutorials" / "README.md").write_text(
979
+ (pack / "seeds" / "guides" / "tutorials").mkdir(parents=True)
980
+ (pack / "seeds" / "guides" / "tutorials" / "README.md").write_text(
981
981
  "# Tutorials\n", encoding="utf-8"
982
982
  )
983
983
  (pack / "pack.toml").write_text(
@@ -985,12 +985,12 @@ class SeedProjectionTests(unittest.TestCase):
985
985
  encoding="utf-8",
986
986
  )
987
987
  output = tmp_path / "out"
988
- output.mkdir() # No pre-existing docs/guides tree
988
+ output.mkdir() # No pre-existing guides tree
989
989
 
990
990
  _project_seeds(packs_dir, output)
991
991
 
992
992
  self.assertFalse(
993
- (output / "docs" / "guides" / "tutorials" / "README.md").exists(),
993
+ (output / "guides" / "tutorials" / "README.md").exists(),
994
994
  "self-host projection must not scaffold by-quadrant guides",
995
995
  )
996
996
 
@@ -19,7 +19,7 @@ _DATA_COPY = (
19
19
  _REPO_ROOT
20
20
  / "packages/agentbundle/agentbundle/_data/adapter.toml"
21
21
  )
22
- _DOCS_COPY = _REPO_ROOT / "docs/contracts/adapter.toml"
22
+ _DOCS_COPY = _REPO_ROOT / "contracts/adapter.toml"
23
23
 
24
24
 
25
25
  def _contract() -> dict:
@@ -103,7 +103,7 @@ class ContractMirrorTests(unittest.TestCase):
103
103
  self.assertEqual(
104
104
  _DATA_COPY.read_bytes(),
105
105
  _DOCS_COPY.read_bytes(),
106
- "the _data/ and docs/contracts/ adapter.toml copies must be identical",
106
+ "the _data/ and contracts/ adapter.toml copies must be identical",
107
107
  )
108
108
 
109
109
 
@@ -11,7 +11,7 @@ from pathlib import Path
11
11
  from agentbundle.build.validate import validate
12
12
 
13
13
  REPO_ROOT = Path(__file__).resolve().parents[5]
14
- SCHEMA_PATH = REPO_ROOT / "docs" / "contracts" / "adapter.schema.json"
14
+ SCHEMA_PATH = REPO_ROOT / "contracts" / "adapter.schema.json"
15
15
 
16
16
 
17
17
  class TypeKeywordTests(unittest.TestCase):