agentbundle 0.17.1__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.17.1 → agentbundle-0.19.0}/PKG-INFO +4 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/adapter.toml +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/pack.schema.json +84 -48
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/__init__.py +0 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/contract.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/lint_packs.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/main.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/self_host.py +5 -5
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_claude_code.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_codex.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_copilot.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_cursor.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_gemini.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract.py +3 -3
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_scope.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_v07.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_contract_v08.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_end_to_end_build.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +7 -8
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_packs.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema_install.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_pipeline.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +3 -3
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_projectable_subset.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_security.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_check.py +14 -14
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_shared_prefix_contract.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_validate.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/config.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/diagnostics.py +4 -0
- agentbundle-0.19.0/agentbundle/catalogue_tooling/lint.py +1895 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/package.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/verify.py +362 -9
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/cli.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/install.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/pack_evals.py +1 -1
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/profile.py +2 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/validate.py +4 -4
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/version.py +3 -3
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/PKG-INFO +4 -2
- {agentbundle-0.17.1 → agentbundle-0.19.0}/pyproject.toml +6 -4
- agentbundle-0.17.1/agentbundle/catalogue_tooling/lint.py +0 -648
- {agentbundle-0.17.1 → agentbundle-0.19.0}/README.md +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/__main__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/categories.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/config.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/render.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/safety.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/scope.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/statelock.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle/user_config.py +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/SOURCES.txt +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.17.1 → agentbundle-0.19.0}/setup.cfg +0 -0
- {agentbundle-0.17.1 → 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
|
|
@@ -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
|
|
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": {
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
193
|
-
|
|
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
|
}
|
|
@@ -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.17.1 → 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.17.1 → 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:
|