agentbundle 0.18.0__tar.gz → 0.19.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.
- {agentbundle-0.18.0 → agentbundle-0.19.0}/PKG-INFO +4 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/__init__.py +0 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/contract.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/lint_packs.py +4 -4
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/main.py +4 -4
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/self_host.py +5 -5
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_claude_code.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_codex.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_copilot.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_cursor.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_gemini.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract.py +3 -3
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_scope.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_v07.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_v08.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_end_to_end_build.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +7 -8
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_packs.py +4 -4
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema_install.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_pipeline.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_projectable_subset.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_security.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_check.py +14 -14
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_shared_prefix_contract.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_validate.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/config.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/lint.py +5 -5
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/package.py +2 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/pack_evals.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/profile.py +1 -1
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/validate.py +4 -4
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/version.py +3 -3
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/PKG-INFO +4 -2
- {agentbundle-0.18.0 → agentbundle-0.19.0}/pyproject.toml +6 -4
- {agentbundle-0.18.0 → agentbundle-0.19.0}/README.md +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/__main__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/categories.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/cli.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/config.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/render.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/safety.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/scope.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/statelock.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/user_config.py +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/SOURCES.txt +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.0}/setup.cfg +0 -0
- {agentbundle-0.18.0 → agentbundle-0.19.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.
|
|
3
|
+
Version: 0.19.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.
|
|
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
|
|
@@ -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
|
-
`
|
|
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("
|
|
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 `
|
|
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 `
|
|
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>/
|
|
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 / "
|
|
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>/
|
|
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 / "
|
|
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
|
-
"
|
|
360
|
+
"contracts/**",
|
|
361
361
|
"docs/architecture/*.md",
|
|
362
362
|
"docs/product/*.md",
|
|
363
363
|
"docs/knowledge/*.md",
|
|
364
|
-
"
|
|
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`, `
|
|
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
|
-
# `
|
|
542
|
-
if relative.as_posix().startswith("
|
|
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
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_claude_code.py
RENAMED
|
@@ -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 / "
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
16
|
+
CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def _seed_pack(root: Path) -> Path:
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_alias.py
RENAMED
|
@@ -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 / "
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
31
|
-
SCHEMA_PATH = REPO_ROOT / "
|
|
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: `
|
|
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 / "
|
|
24
|
-
SCHEMA_PATH = REPO_ROOT / "
|
|
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
|
-
(`
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
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 (`
|
|
5
|
-
by-quadrant scaffold an adopter installs) or under `
|
|
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 / "
|
|
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 / "
|
|
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 / "
|
|
74
|
+
_make_quadrants(root / "guides" / "_shared")
|
|
76
75
|
# A representative pack home, no top-level quadrant dirs.
|
|
77
|
-
(root / "
|
|
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
|
-
#
|
|
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 `
|
|
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 / "
|
|
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
|
|
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("
|
|
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 / "
|
|
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 / "
|
|
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'
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema_install.py
RENAMED
|
@@ -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 / "
|
|
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 / "
|
|
26
|
+
CONTRACT_PATH = REPO_ROOT / "contracts" / "adapter.toml"
|
|
27
27
|
FIXTURES = Path(__file__).resolve().parent / "fixtures"
|
|
28
28
|
|
|
29
29
|
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_plugin_manifest_schema.py
RENAMED
|
@@ -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 / "
|
|
23
|
+
REPO_ROOT / "contracts" / "plugin-manifest.schema.json"
|
|
24
24
|
)
|
|
25
25
|
PLUGIN_MANIFEST_DERIVED_SCHEMA_PATH = (
|
|
26
|
-
REPO_ROOT / "
|
|
26
|
+
REPO_ROOT / "contracts" / "plugin-manifest.derived.schema.json"
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_projectable_subset.py
RENAMED
|
@@ -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 / "
|
|
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 / "
|
|
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 / "
|
|
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 `
|
|
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 `
|
|
784
|
-
"
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
788
|
-
"
|
|
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 `
|
|
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 `
|
|
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" / "
|
|
980
|
-
(pack / "seeds" / "
|
|
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
|
|
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 / "
|
|
993
|
+
(output / "guides" / "tutorials" / "README.md").exists(),
|
|
994
994
|
"self-host projection must not scaffold by-quadrant guides",
|
|
995
995
|
)
|
|
996
996
|
|
{agentbundle-0.18.0 → agentbundle-0.19.0}/agentbundle/build/tests/test_shared_prefix_contract.py
RENAMED
|
@@ -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 / "
|
|
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
|
|
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 / "
|
|
14
|
+
SCHEMA_PATH = REPO_ROOT / "contracts" / "adapter.schema.json"
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class TypeKeywordTests(unittest.TestCase):
|
|
@@ -165,7 +165,7 @@ def _load_adapter_names() -> frozenset[str]:
|
|
|
165
165
|
here = Path(__file__).resolve()
|
|
166
166
|
# packages/agentbundle/agentbundle/catalogue_tooling/config.py -> repo root
|
|
167
167
|
repo_root = here.parents[4]
|
|
168
|
-
adapter_toml = repo_root / "
|
|
168
|
+
adapter_toml = repo_root / "contracts" / "adapter.toml"
|
|
169
169
|
if adapter_toml.exists():
|
|
170
170
|
try:
|
|
171
171
|
data = tomllib.loads(adapter_toml.read_text(encoding="utf-8"))
|
|
@@ -294,11 +294,11 @@ _SEEDS_REQUIRED_PLACEHOLDERS: dict[str, tuple[str, ...]] = {
|
|
|
294
294
|
"workspace.toml": ("[backlog]",),
|
|
295
295
|
"docs/CONVENTIONS.md": (),
|
|
296
296
|
"AGENTS.md": ("<project-name>",),
|
|
297
|
-
"
|
|
298
|
-
"
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
"
|
|
297
|
+
"guides/README.md": (),
|
|
298
|
+
"guides/tutorials/README.md": (),
|
|
299
|
+
"guides/how-to/README.md": (),
|
|
300
|
+
"guides/reference/README.md": (),
|
|
301
|
+
"guides/explanation/README.md": (),
|
|
302
302
|
"packages/README.md": (),
|
|
303
303
|
"packages/_example/README.md": ("`_example`",),
|
|
304
304
|
"packages/_example/AGENTS.md": ("placeholder package",),
|