agentbundle 0.51.0__tar.gz → 0.52.1__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.51.0/agentbundle.egg-info → agentbundle-0.52.1}/PKG-INFO +20 -1
- {agentbundle-0.51.0 → agentbundle-0.52.1}/README-pypi.md +19 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/workspace_status_engine.py +141 -131
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/workspace_status_prune.py +20 -16
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/version.py +1 -1
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/workspace_mcp.py +1 -1
- {agentbundle-0.51.0 → agentbundle-0.52.1/agentbundle.egg-info}/PKG-INFO +20 -1
- {agentbundle-0.51.0 → agentbundle-0.52.1}/pyproject.toml +1 -1
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_agent_plugin_projection.py +10 -2
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_tools.py +59 -2
- {agentbundle-0.51.0 → agentbundle-0.52.1}/MANIFEST.in +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/__main__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/agent-plugin-extension-namespaces.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/agent-plugin-extension-namespaces.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-index.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/CLAUDE.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/CLAUDE.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_layout_declared_section.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/close_work.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/cooling.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/distribution-routes.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/distribution-routes.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/file_safety.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/knowledge-captured-observation.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/public-contracts.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/LICENSE.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/PROVENANCE.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/mcp.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/plugin.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/_data/work_intake_refresh.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/bounded_metadata.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/_sweep_guard.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/main.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-agent-plugin.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_agent_plugin.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_apm.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_claude_plugins.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/route_lookup.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/self_host.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/direct_http.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/jfrog_cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_fetch/models.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/index_generator.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/journey_validator.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/manifest.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/okf_discovery.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/package.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/catalogue_tooling/version_ranges.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/categories.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_contracts.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_index.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_sync.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source_acquisition.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_source_state.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/direct_validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/oplog.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/render.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/safety.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/statelock.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/system_trust.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle/user_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/SOURCES.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/conftest.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/setup.cfg +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/templates/install-marker.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/_direct_acquisition.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/_support.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_agent_boundary_metadata_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_golden.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_distribution_route_resolution.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_policy_registry_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projection_io.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_route_lookup.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_check.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_sequential_implementer_dispatch_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/conftest.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_agentbundle_show_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_catalogue_fetch_credential_boundary.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/contracts/test_skill_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_sync/adapter_contract_major_mismatch/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/catalogue.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/hook-wiring/example.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/scripts/run.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/JOURNEY.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/packs/pack-without-journey/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/catalogue_wave4/profiles/test-profile.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/cognitive-load-hosts.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/direct/ac35_corpus_verdicts.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/direct/golden_state_0_5.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/golden.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/witness-packs/portable/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/distribution-routes/witness-packs/portable/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/LICENSE-APACHE +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/LICENSE-MIT +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/catalogue.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/alpha/seeds/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/beta/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/external_catalogue/profiles/example.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/agentbundle-show.schema.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/catalogue.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/show_contract/installed_state.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_adapter_compat.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_dependencies.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_external_portability.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_fixture_checks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_marketplace.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_output_drift.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_package_preflight.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_plugin_path.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_profile_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_verify_step1.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_index_generator.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_integration.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_journey_validator.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_catalogue_wave4_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_direct_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_editable_source_detection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_default_source.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_layout_is_best_effort.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_jfrog_cli_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_portable_catalogue_authentication.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_show_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_trust_fallback_tls.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/performance/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/performance/test_direct_family2_budget_cost.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_git_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_layout_override.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/__init__.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/conftest.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_adapter_symlink_policy.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_fetch.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_fetch_jfrog.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_sync.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_sync_fixture_set.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_archive.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_file_safety.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_lint.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_package.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_tooling_verify.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_trust_fallback.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave2_validation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_list_targets_help.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_namespace_fixture.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_cognitive_load_seed_contract.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_collect_tree_symlinks.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_admission.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_architecture_controls.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_diagnostics.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_lifecycle_facts.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_source_acquisition.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_source_state.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_upgrade.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_direct_validate.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_https_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_layout_bases_anchoring.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_exclude_git_cache.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_offer_upgrade_namespace.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_okf_discovery.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_orphan_sweep_guards.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pack_layout_section_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_package_catalogue.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_route_surface_parity.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_source_defaults.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_statelock_hardening.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_system_trust.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_version.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_windows_direct_suite_registration.py +0 -0
- {agentbundle-0.51.0 → agentbundle-0.52.1}/tests/unit/test_workspace_mcp_events_poller.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.1
|
|
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-Expression: Apache-2.0 OR MIT
|
|
@@ -35,6 +35,25 @@ python -m pip install agentbundle
|
|
|
35
35
|
|
|
36
36
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
37
37
|
|
|
38
|
+
## What's new in 0.52.1
|
|
39
|
+
|
|
40
|
+
The workspace-status engine and MCP tool now route `shape` entries to
|
|
41
|
+
`intent`. The shaping suggestion and the `shape` dispatch need
|
|
42
|
+
`product-engineering` 1.0.0 or later.
|
|
43
|
+
|
|
44
|
+
## What's new in 0.52.0
|
|
45
|
+
|
|
46
|
+
The workspace-status MCP tool now surfaces a former legacy entry (a bare
|
|
47
|
+
`spec/<slug>` string or other accepted legacy shape) as an `unsupported_legacy`
|
|
48
|
+
finding. The entry is absent from `ready` and `blocked`; ordinary
|
|
49
|
+
reconciliation no longer accepts legacy shapes as lifecycle members. A
|
|
50
|
+
canonical entry with a surviving historical alias appears in `blocked` with a
|
|
51
|
+
`duplicate_membership` finding and does not appear in `ready`. Delete the alias
|
|
52
|
+
and the canonical entry dispatches normally.
|
|
53
|
+
|
|
54
|
+
The `capture-work` alias for `work-intake` is removed as part of Core 3.0.0.
|
|
55
|
+
All intake requests should go to `work-intake`.
|
|
56
|
+
|
|
38
57
|
## What's new in 0.51.0
|
|
39
58
|
|
|
40
59
|
HTTPS catalogue acquisition now selects credentials automatically. Set
|
|
@@ -14,6 +14,25 @@ python -m pip install agentbundle
|
|
|
14
14
|
|
|
15
15
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
16
16
|
|
|
17
|
+
## What's new in 0.52.1
|
|
18
|
+
|
|
19
|
+
The workspace-status engine and MCP tool now route `shape` entries to
|
|
20
|
+
`intent`. The shaping suggestion and the `shape` dispatch need
|
|
21
|
+
`product-engineering` 1.0.0 or later.
|
|
22
|
+
|
|
23
|
+
## What's new in 0.52.0
|
|
24
|
+
|
|
25
|
+
The workspace-status MCP tool now surfaces a former legacy entry (a bare
|
|
26
|
+
`spec/<slug>` string or other accepted legacy shape) as an `unsupported_legacy`
|
|
27
|
+
finding. The entry is absent from `ready` and `blocked`; ordinary
|
|
28
|
+
reconciliation no longer accepts legacy shapes as lifecycle members. A
|
|
29
|
+
canonical entry with a surviving historical alias appears in `blocked` with a
|
|
30
|
+
`duplicate_membership` finding and does not appear in `ready`. Delete the alias
|
|
31
|
+
and the canonical entry dispatches normally.
|
|
32
|
+
|
|
33
|
+
The `capture-work` alias for `work-intake` is removed as part of Core 3.0.0.
|
|
34
|
+
All intake requests should go to `work-intake`.
|
|
35
|
+
|
|
17
36
|
## What's new in 0.51.0
|
|
18
37
|
|
|
19
38
|
HTTPS catalogue acquisition now selects credentials automatically. Set
|
|
@@ -442,6 +442,10 @@ class Initiative:
|
|
|
442
442
|
work: InitiativeWork
|
|
443
443
|
shaping: InitiativeShaping
|
|
444
444
|
brief_queue: BriefQueue | None
|
|
445
|
+
# An open shaping or brief entry that no canonical parse accepted. Ordinary
|
|
446
|
+
# reconciliation drops it from the typed lists above, so closeout reads this
|
|
447
|
+
# flag to keep an unsupported entry from passing as an empty initiative.
|
|
448
|
+
has_unsupported_open_entry: bool = False
|
|
445
449
|
|
|
446
450
|
|
|
447
451
|
@dataclasses.dataclass
|
|
@@ -1350,6 +1354,7 @@ def _accepted_legacy_entry(collection: str, raw: object) -> LegacyWorkspaceEntry
|
|
|
1350
1354
|
)
|
|
1351
1355
|
if (
|
|
1352
1356
|
_is_legacy_slug(raw.get("slug"))
|
|
1357
|
+
and isinstance(entry_type, str)
|
|
1353
1358
|
and entry_type in _SHAPING_TYPES
|
|
1354
1359
|
and needs_are_supported
|
|
1355
1360
|
):
|
|
@@ -1381,6 +1386,7 @@ def _accepted_legacy_entry(collection: str, raw: object) -> LegacyWorkspaceEntry
|
|
|
1381
1386
|
summary_is_supported = "summary" not in raw or isinstance(raw["summary"], str)
|
|
1382
1387
|
if (
|
|
1383
1388
|
_is_legacy_slug(raw.get("slug"))
|
|
1389
|
+
and isinstance(raw.get("type"), str)
|
|
1384
1390
|
and raw.get("type") in _SHAPING_TYPES
|
|
1385
1391
|
and needs_are_supported
|
|
1386
1392
|
and source_is_supported
|
|
@@ -2546,13 +2552,12 @@ def _parse_membership_entry(
|
|
|
2546
2552
|
status: str,
|
|
2547
2553
|
) -> tuple[
|
|
2548
2554
|
WorkspaceMembership | None,
|
|
2549
|
-
LegacyWorkspaceMembership | None,
|
|
2550
2555
|
list[RoutingFinding],
|
|
2551
2556
|
str | None,
|
|
2552
2557
|
]:
|
|
2553
2558
|
parsed, findings = parse_workspace_entry(raw)
|
|
2554
2559
|
if parsed is not None:
|
|
2555
|
-
return WorkspaceMembership(parsed, ini_slug, collection, status),
|
|
2560
|
+
return WorkspaceMembership(parsed, ini_slug, collection, status), [], None
|
|
2556
2561
|
raw_path = raw.get("path") if isinstance(raw, dict) else None
|
|
2557
2562
|
if _is_repository_relative_path(raw_path):
|
|
2558
2563
|
findings = [
|
|
@@ -2560,23 +2565,19 @@ def _parse_membership_entry(
|
|
|
2560
2565
|
if not finding.path else finding
|
|
2561
2566
|
for finding in findings
|
|
2562
2567
|
]
|
|
2563
|
-
legacy =
|
|
2564
|
-
if legacy.finding.code == "legacy_entry":
|
|
2565
|
-
return None, LegacyWorkspaceMembership(legacy, ini_slug, collection, status), [
|
|
2566
|
-
legacy.finding
|
|
2567
|
-
], None
|
|
2568
|
+
legacy = _legacy_path_finding(collection, raw)
|
|
2568
2569
|
if legacy.finding.code == "invalid_artifact_path" and not _is_target_like_entry(raw):
|
|
2569
|
-
return None,
|
|
2570
|
+
return None, [legacy.finding], None
|
|
2570
2571
|
if legacy.finding.code == "unsupported_legacy" and not _is_target_like_entry(raw):
|
|
2571
|
-
return None,
|
|
2572
|
+
return None, [legacy.finding], None
|
|
2572
2573
|
if findings:
|
|
2573
2574
|
blocks_dependencies = any(
|
|
2574
2575
|
finding.code in {"invalid_entry", "invalid_artifact_path"}
|
|
2575
2576
|
for finding in findings
|
|
2576
2577
|
)
|
|
2577
2578
|
blocked_path = _target_like_blocked_path(raw) if blocks_dependencies else None
|
|
2578
|
-
return None,
|
|
2579
|
-
return None,
|
|
2579
|
+
return None, findings, blocked_path
|
|
2580
|
+
return None, [legacy.finding], None
|
|
2580
2581
|
|
|
2581
2582
|
|
|
2582
2583
|
def _extract_canonical_memberships(
|
|
@@ -2588,7 +2589,6 @@ def _extract_canonical_memberships(
|
|
|
2588
2589
|
list[ParseBlockedWorkspaceMembership],
|
|
2589
2590
|
]:
|
|
2590
2591
|
memberships: list[WorkspaceMembership] = []
|
|
2591
|
-
legacy_memberships: list[LegacyWorkspaceMembership] = []
|
|
2592
2592
|
findings: list[RoutingFinding] = []
|
|
2593
2593
|
parse_blocked_memberships: list[ParseBlockedWorkspaceMembership] = []
|
|
2594
2594
|
for section_name, top_level_names in _TOP_LEVEL_ENTRY_COLLECTIONS.items():
|
|
@@ -2605,7 +2605,6 @@ def _extract_canonical_memberships(
|
|
|
2605
2605
|
for entry_index, raw_entry in enumerate(entries):
|
|
2606
2606
|
(
|
|
2607
2607
|
membership,
|
|
2608
|
-
legacy_membership,
|
|
2609
2608
|
entry_findings,
|
|
2610
2609
|
blocked_path,
|
|
2611
2610
|
) = _parse_membership_entry(raw_entry, collection, "", "")
|
|
@@ -2613,10 +2612,6 @@ def _extract_canonical_memberships(
|
|
|
2613
2612
|
memberships.append(
|
|
2614
2613
|
dataclasses.replace(membership, entry_index=entry_index)
|
|
2615
2614
|
)
|
|
2616
|
-
if legacy_membership is not None:
|
|
2617
|
-
legacy_memberships.append(
|
|
2618
|
-
dataclasses.replace(legacy_membership, entry_index=entry_index)
|
|
2619
|
-
)
|
|
2620
2615
|
if blocked_path is not None:
|
|
2621
2616
|
parse_blocked_memberships.append(
|
|
2622
2617
|
ParseBlockedWorkspaceMembership(
|
|
@@ -2665,7 +2660,6 @@ def _extract_canonical_memberships(
|
|
|
2665
2660
|
for entry_index, raw_entry in enumerate(entries):
|
|
2666
2661
|
(
|
|
2667
2662
|
membership,
|
|
2668
|
-
legacy_membership,
|
|
2669
2663
|
entry_findings,
|
|
2670
2664
|
blocked_path,
|
|
2671
2665
|
) = _parse_membership_entry(raw_entry, collection, ini_slug, status)
|
|
@@ -2673,10 +2667,6 @@ def _extract_canonical_memberships(
|
|
|
2673
2667
|
memberships.append(
|
|
2674
2668
|
dataclasses.replace(membership, entry_index=entry_index)
|
|
2675
2669
|
)
|
|
2676
|
-
if legacy_membership is not None:
|
|
2677
|
-
legacy_memberships.append(
|
|
2678
|
-
dataclasses.replace(legacy_membership, entry_index=entry_index)
|
|
2679
|
-
)
|
|
2680
2670
|
if blocked_path is not None:
|
|
2681
2671
|
parse_blocked_memberships.append(
|
|
2682
2672
|
ParseBlockedWorkspaceMembership(
|
|
@@ -2687,7 +2677,73 @@ def _extract_canonical_memberships(
|
|
|
2687
2677
|
)
|
|
2688
2678
|
)
|
|
2689
2679
|
findings.extend(entry_findings)
|
|
2690
|
-
return memberships,
|
|
2680
|
+
return memberships, [], findings, parse_blocked_memberships
|
|
2681
|
+
|
|
2682
|
+
|
|
2683
|
+
def extract_legacy_migration_memberships(workspace: dict) -> list[LegacyWorkspaceMembership]:
|
|
2684
|
+
"""Return accepted legacy memberships for explicit migration operations only."""
|
|
2685
|
+
|
|
2686
|
+
memberships: list[LegacyWorkspaceMembership] = []
|
|
2687
|
+
for section_name, top_level_names in _TOP_LEVEL_ENTRY_COLLECTIONS.items():
|
|
2688
|
+
section = workspace.get(section_name, {})
|
|
2689
|
+
if not isinstance(section, dict):
|
|
2690
|
+
continue
|
|
2691
|
+
for list_name in top_level_names:
|
|
2692
|
+
entries = section.get(list_name, [])
|
|
2693
|
+
if not isinstance(entries, list):
|
|
2694
|
+
continue
|
|
2695
|
+
collection = _collection_label(section_name, list_name)
|
|
2696
|
+
for entry_index, raw_entry in enumerate(entries):
|
|
2697
|
+
legacy = parse_legacy_workspace_entry(collection, raw_entry)
|
|
2698
|
+
if legacy.finding.code == "legacy_entry":
|
|
2699
|
+
memberships.append(
|
|
2700
|
+
LegacyWorkspaceMembership(
|
|
2701
|
+
legacy,
|
|
2702
|
+
"",
|
|
2703
|
+
collection,
|
|
2704
|
+
"",
|
|
2705
|
+
entry_index=entry_index,
|
|
2706
|
+
)
|
|
2707
|
+
)
|
|
2708
|
+
for raw_ini_slug, section in workspace.items():
|
|
2709
|
+
if not isinstance(raw_ini_slug, str) or not _CANONICAL_INITIATIVE_RE.fullmatch(
|
|
2710
|
+
raw_ini_slug
|
|
2711
|
+
):
|
|
2712
|
+
continue
|
|
2713
|
+
if not isinstance(section, dict):
|
|
2714
|
+
continue
|
|
2715
|
+
status = section.get("status", "")
|
|
2716
|
+
status = status if isinstance(status, str) else ""
|
|
2717
|
+
for section_name, initiative_names in _INITIATIVE_ENTRY_COLLECTIONS.items():
|
|
2718
|
+
subsection = section.get(section_name, {})
|
|
2719
|
+
if not isinstance(subsection, dict):
|
|
2720
|
+
continue
|
|
2721
|
+
for list_name in initiative_names:
|
|
2722
|
+
entries = subsection.get(list_name, [])
|
|
2723
|
+
if entries is None:
|
|
2724
|
+
entries = []
|
|
2725
|
+
if (
|
|
2726
|
+
section_name == "brief_queue"
|
|
2727
|
+
and list_name == "executing"
|
|
2728
|
+
and isinstance(entries, str)
|
|
2729
|
+
):
|
|
2730
|
+
entries = [] if entries == "" else [entries]
|
|
2731
|
+
if not isinstance(entries, list):
|
|
2732
|
+
continue
|
|
2733
|
+
collection = _collection_label(section_name, list_name)
|
|
2734
|
+
for entry_index, raw_entry in enumerate(entries):
|
|
2735
|
+
legacy = parse_legacy_workspace_entry(collection, raw_entry)
|
|
2736
|
+
if legacy.finding.code == "legacy_entry":
|
|
2737
|
+
memberships.append(
|
|
2738
|
+
LegacyWorkspaceMembership(
|
|
2739
|
+
legacy,
|
|
2740
|
+
raw_ini_slug,
|
|
2741
|
+
collection,
|
|
2742
|
+
status,
|
|
2743
|
+
entry_index=entry_index,
|
|
2744
|
+
)
|
|
2745
|
+
)
|
|
2746
|
+
return memberships
|
|
2691
2747
|
|
|
2692
2748
|
|
|
2693
2749
|
def _membership_status(membership: WorkspaceMembership) -> str | None:
|
|
@@ -2993,12 +3049,9 @@ def resolve_selected_memberships(
|
|
|
2993
3049
|
workspace: dict, selected_artifact_paths: list[str]
|
|
2994
3050
|
) -> dict[str, list[dict]]:
|
|
2995
3051
|
"""Resolve selected occurrences from already-parsed workspace state."""
|
|
2996
|
-
(
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
findings,
|
|
3000
|
-
parse_blocked_memberships,
|
|
3001
|
-
) = _extract_canonical_memberships(workspace)
|
|
3052
|
+
memberships, _legacy_memberships, findings, parse_blocked_memberships = (
|
|
3053
|
+
_extract_canonical_memberships(workspace)
|
|
3054
|
+
)
|
|
3002
3055
|
if any(finding.code == "invalid_workspace" for finding in findings):
|
|
3003
3056
|
raise ValueError("invalid workspace")
|
|
3004
3057
|
|
|
@@ -3022,22 +3075,6 @@ def resolve_selected_memberships(
|
|
|
3022
3075
|
"form": "canonical",
|
|
3023
3076
|
}
|
|
3024
3077
|
)
|
|
3025
|
-
for legacy_membership in legacy_memberships:
|
|
3026
|
-
path = _legacy_canonical_alias(legacy_membership.entry)
|
|
3027
|
-
if (
|
|
3028
|
-
legacy_membership.collection not in _SELECTED_SPEC_COLLECTIONS
|
|
3029
|
-
or path not in occurrences_by_path
|
|
3030
|
-
):
|
|
3031
|
-
continue
|
|
3032
|
-
occurrences_by_path[path].append(
|
|
3033
|
-
{
|
|
3034
|
-
"canonical_artifact_path": path,
|
|
3035
|
-
"initiative": legacy_membership.ini_slug or None,
|
|
3036
|
-
"collection": legacy_membership.collection,
|
|
3037
|
-
"entry_index": legacy_membership.entry_index,
|
|
3038
|
-
"form": "legacy",
|
|
3039
|
-
}
|
|
3040
|
-
)
|
|
3041
3078
|
for blocked_membership in parse_blocked_memberships:
|
|
3042
3079
|
path = blocked_membership.canonical_artifact_path
|
|
3043
3080
|
if (
|
|
@@ -3086,8 +3123,6 @@ def selected_membership_status(root: Path, selectors: list[str]) -> dict[str, ob
|
|
|
3086
3123
|
except OSError:
|
|
3087
3124
|
return {"error": {"code": "invalid_workspace"}}
|
|
3088
3125
|
try:
|
|
3089
|
-
# The pure seam calls _extract_canonical_memberships(...) and
|
|
3090
|
-
# _legacy_canonical_alias(...) for selected identity resolution.
|
|
3091
3126
|
occurrences_by_path = resolve_selected_memberships(
|
|
3092
3127
|
workspace, selected_artifact_paths
|
|
3093
3128
|
)
|
|
@@ -3107,26 +3142,6 @@ def selected_membership_status(root: Path, selectors: list[str]) -> dict[str, ob
|
|
|
3107
3142
|
}
|
|
3108
3143
|
|
|
3109
3144
|
|
|
3110
|
-
def _legacy_membership_is_cooled(
|
|
3111
|
-
membership: LegacyWorkspaceMembership,
|
|
3112
|
-
root: Path | None,
|
|
3113
|
-
cooled: frozenset[Path],
|
|
3114
|
-
) -> bool:
|
|
3115
|
-
"""True when a legacy membership's canonical artifact is cooled.
|
|
3116
|
-
|
|
3117
|
-
A legacy entry stores `spec/alpha`, so the canonical alias has to be
|
|
3118
|
-
recovered before the membership key applies. Resolving the stored form
|
|
3119
|
-
directly yields `<root>/spec/alpha`, which cannot equal any cooled path
|
|
3120
|
-
whatever the lifecycle record says, so the check silently never fires.
|
|
3121
|
-
"""
|
|
3122
|
-
if root is None or not cooled:
|
|
3123
|
-
return False
|
|
3124
|
-
alias = _legacy_canonical_alias(membership.entry)
|
|
3125
|
-
if alias is None:
|
|
3126
|
-
return False
|
|
3127
|
-
return _confined_artifact_path(root, alias) in cooled
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
3145
|
def _membership_is_cooled(
|
|
3131
3146
|
membership: WorkspaceMembership,
|
|
3132
3147
|
root: Path | None,
|
|
@@ -3148,7 +3163,6 @@ def _brief_child_spec_states(
|
|
|
3148
3163
|
workspace: dict,
|
|
3149
3164
|
root: Path | None,
|
|
3150
3165
|
cooled: frozenset[Path],
|
|
3151
|
-
legacy_memberships: list[LegacyWorkspaceMembership],
|
|
3152
3166
|
) -> tuple[dict[str, set[str]], frozenset[str], frozenset[str]]:
|
|
3153
3167
|
"""Map each brief to its children's observed states; flag unevaluable scope.
|
|
3154
3168
|
|
|
@@ -3196,21 +3210,10 @@ def _brief_child_spec_states(
|
|
|
3196
3210
|
# with no repair available — declaring a resolving path was already done,
|
|
3197
3211
|
# and declaring empty would be false.
|
|
3198
3212
|
#
|
|
3199
|
-
# Legacy memberships are included because a bare-string brief queue entry
|
|
3200
|
-
# carries `kind = "brief"` and a real path, and a child declaring it has
|
|
3201
|
-
# declared the truth. Reading them here decides attribution only; it
|
|
3202
|
-
# dispatches nothing, which is the line the routing contract draws.
|
|
3203
|
-
# Two comprehensions rather than one over an unpacked pair: the canonical
|
|
3204
|
-
# and legacy membership types differ, so unpacking them together widens the
|
|
3205
|
-
# element type to `object` and the attribute access stops type-checking.
|
|
3206
3213
|
brief_membership_paths = {
|
|
3207
3214
|
membership.entry.path
|
|
3208
3215
|
for membership in memberships
|
|
3209
3216
|
if membership.entry.kind == "brief" and membership.entry.path is not None
|
|
3210
|
-
} | {
|
|
3211
|
-
legacy.entry.path
|
|
3212
|
-
for legacy in legacy_memberships
|
|
3213
|
-
if legacy.entry.kind == "brief" and legacy.entry.path is not None
|
|
3214
3217
|
}
|
|
3215
3218
|
for membership in memberships:
|
|
3216
3219
|
entry = membership.entry
|
|
@@ -3656,7 +3659,7 @@ def cooled_work_entry_paths(
|
|
|
3656
3659
|
initiative parse builds `queue` and `active` by list comprehension over those
|
|
3657
3660
|
same arrays. So index `i` names the same element on both sides.
|
|
3658
3661
|
"""
|
|
3659
|
-
memberships,
|
|
3662
|
+
memberships, _legacy_memberships, _findings, _blocked = (
|
|
3660
3663
|
_extract_canonical_memberships(workspace)
|
|
3661
3664
|
)
|
|
3662
3665
|
by_initiative: dict[str, set[tuple[str, int]]] = {}
|
|
@@ -3667,13 +3670,6 @@ def cooled_work_entry_paths(
|
|
|
3667
3670
|
by_initiative.setdefault(membership.ini_slug, set()).add(
|
|
3668
3671
|
(membership.collection, membership.entry_index)
|
|
3669
3672
|
)
|
|
3670
|
-
for legacy in legacy_memberships:
|
|
3671
|
-
if not legacy.collection.startswith("work."):
|
|
3672
|
-
continue
|
|
3673
|
-
if _legacy_membership_is_cooled(legacy, root, cooled):
|
|
3674
|
-
by_initiative.setdefault(legacy.ini_slug, set()).add(
|
|
3675
|
-
(legacy.collection, legacy.entry_index)
|
|
3676
|
-
)
|
|
3677
3673
|
return by_initiative
|
|
3678
3674
|
|
|
3679
3675
|
|
|
@@ -3694,13 +3690,12 @@ def run_canonical_reconciliation(
|
|
|
3694
3690
|
path = blocked.canonical_artifact_path
|
|
3695
3691
|
parse_blocked_path_counts[path] = parse_blocked_path_counts.get(path, 0) + 1
|
|
3696
3692
|
# Cooling is applied at evaluation and emission, never here. Every fact
|
|
3697
|
-
# derived below — by_path, duplicate_paths, cycle_paths,
|
|
3698
|
-
#
|
|
3699
|
-
#
|
|
3700
|
-
#
|
|
3701
|
-
#
|
|
3702
|
-
#
|
|
3703
|
-
# workspace entry alone.
|
|
3693
|
+
# derived below — by_path, duplicate_paths, cycle_paths, and the structural
|
|
3694
|
+
# loop — must see a cooled artifact as *cooled*, not as *absent*, or a
|
|
3695
|
+
# lifecycle record silently erases unrelated conclusions about it. What the
|
|
3696
|
+
# cooled set governs is the artifact *body*: for a cooled membership the
|
|
3697
|
+
# structural loop and _brief_child_spec_states skip the predicates that would
|
|
3698
|
+
# have to open it, keeping the ones derived from the workspace entry alone.
|
|
3704
3699
|
parse_blocked_paths = set(parse_blocked_path_counts)
|
|
3705
3700
|
local_memberships = [
|
|
3706
3701
|
membership for membership in memberships if membership.entry.path is not None
|
|
@@ -3709,44 +3704,35 @@ def run_canonical_reconciliation(
|
|
|
3709
3704
|
for membership in local_memberships:
|
|
3710
3705
|
assert membership.entry.path is not None
|
|
3711
3706
|
by_path.setdefault(membership.entry.path, []).append(membership)
|
|
3712
|
-
legacy_alias_counts: dict[str, int] = {}
|
|
3713
|
-
for legacy_membership in legacy_memberships:
|
|
3714
|
-
alias = _legacy_canonical_alias(legacy_membership.entry)
|
|
3715
|
-
if alias is not None:
|
|
3716
|
-
legacy_alias_counts[alias] = legacy_alias_counts.get(alias, 0) + 1
|
|
3717
3707
|
duplicate_paths = {
|
|
3718
3708
|
path
|
|
3719
3709
|
for path, items in by_path.items()
|
|
3720
|
-
if len(items)
|
|
3710
|
+
if len(items) > 1
|
|
3721
3711
|
}
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3712
|
+
# Alias-refused paths: canonical reconciliation may decode a historical alias
|
|
3713
|
+
# only to refuse. A canonical entry stays non-dispatchable while any historical
|
|
3714
|
+
# entry that the retained decoder maps to the same artifact path survives
|
|
3715
|
+
# anywhere in the workspace. One extraction per reconciliation run.
|
|
3716
|
+
_alias_refused_paths = {
|
|
3717
|
+
_alias_path
|
|
3718
|
+
for _m in extract_legacy_migration_memberships(workspace)
|
|
3719
|
+
if (_alias_path := _legacy_canonical_alias(_m.entry)) is not None
|
|
3720
|
+
and _alias_path in by_path
|
|
3726
3721
|
}
|
|
3722
|
+
duplicate_paths.update(_alias_refused_paths)
|
|
3727
3723
|
parse_only_duplicate_paths = {
|
|
3728
3724
|
path
|
|
3729
3725
|
for path, count in parse_blocked_path_counts.items()
|
|
3730
3726
|
if count > 1 and path not in by_path
|
|
3731
3727
|
}
|
|
3732
|
-
|
|
3733
|
-
path
|
|
3734
|
-
for path, count in legacy_alias_counts.items()
|
|
3735
|
-
if count > 1 and path not in by_path
|
|
3736
|
-
}
|
|
3737
|
-
legacy_only_duplicate_findings = [
|
|
3728
|
+
parse_only_duplicate_findings = [
|
|
3738
3729
|
_finding("duplicate_membership", path, "duplicate lifecycle entry")
|
|
3739
|
-
for path in sorted(
|
|
3740
|
-
legacy_only_duplicate_paths
|
|
3741
|
-
| mixed_parse_legacy_duplicate_paths
|
|
3742
|
-
| parse_only_duplicate_paths
|
|
3743
|
-
)
|
|
3730
|
+
for path in sorted(parse_only_duplicate_paths)
|
|
3744
3731
|
]
|
|
3745
3732
|
cycle_paths = _dependency_cycles(local_memberships)
|
|
3746
3733
|
brief_child_states, briefs_with_cooled_children, cooled_scope_unknown = (
|
|
3747
3734
|
_brief_child_spec_states(
|
|
3748
3735
|
local_memberships, workspace, root, cooled,
|
|
3749
|
-
legacy_memberships=legacy_memberships,
|
|
3750
3736
|
)
|
|
3751
3737
|
)
|
|
3752
3738
|
# Emitted here rather than in `_structural_findings`, whose findings add
|
|
@@ -3762,8 +3748,6 @@ def run_canonical_reconciliation(
|
|
|
3762
3748
|
)
|
|
3763
3749
|
duplicate_paths.update(path for path in parse_blocked_paths if path in by_path)
|
|
3764
3750
|
structurally_blocked_paths: set[str] = {
|
|
3765
|
-
*legacy_only_duplicate_paths,
|
|
3766
|
-
*mixed_parse_legacy_duplicate_paths,
|
|
3767
3751
|
*parse_only_duplicate_paths,
|
|
3768
3752
|
*parse_blocked_paths,
|
|
3769
3753
|
}
|
|
@@ -3827,7 +3811,7 @@ def run_canonical_reconciliation(
|
|
|
3827
3811
|
}
|
|
3828
3812
|
findings = [
|
|
3829
3813
|
*parse_findings,
|
|
3830
|
-
*
|
|
3814
|
+
*parse_only_duplicate_findings,
|
|
3831
3815
|
*cooled_membership_findings,
|
|
3832
3816
|
*cooled_scope_findings,
|
|
3833
3817
|
*(finding for evaluation in evaluations for finding in evaluation.findings),
|
|
@@ -3835,20 +3819,34 @@ def run_canonical_reconciliation(
|
|
|
3835
3819
|
return CanonicalWorkspaceResult(
|
|
3836
3820
|
cooled=cooled,
|
|
3837
3821
|
memberships=memberships,
|
|
3838
|
-
|
|
3839
|
-
# cooled legacy entry, so cooling one half of a duplicate pair does not
|
|
3840
|
-
# erase the duplicate finding for the half that stays visible.
|
|
3841
|
-
legacy_memberships=[
|
|
3842
|
-
membership
|
|
3843
|
-
for membership in legacy_memberships
|
|
3844
|
-
if not _legacy_membership_is_cooled(membership, root, cooled)
|
|
3845
|
-
],
|
|
3822
|
+
legacy_memberships=[],
|
|
3846
3823
|
findings=findings,
|
|
3847
3824
|
evaluations=evaluations,
|
|
3848
3825
|
dispatch_by_path=dispatch_by_path,
|
|
3849
3826
|
)
|
|
3850
3827
|
|
|
3851
3828
|
|
|
3829
|
+
def _has_unsupported_open_entry(shaping_raw: object, brief_raw: object) -> bool:
|
|
3830
|
+
"""True when an open shaping or brief collection holds a non-canonical entry."""
|
|
3831
|
+
|
|
3832
|
+
def raw_entries(section: object, name: str) -> list[object]:
|
|
3833
|
+
if not isinstance(section, dict):
|
|
3834
|
+
return []
|
|
3835
|
+
entries = section.get(name, [])
|
|
3836
|
+
if isinstance(entries, list):
|
|
3837
|
+
return entries
|
|
3838
|
+
return [] if entries in ("", None) else [entries]
|
|
3839
|
+
|
|
3840
|
+
open_entries = [
|
|
3841
|
+
*raw_entries(shaping_raw, "active"),
|
|
3842
|
+
*raw_entries(shaping_raw, "backlog"),
|
|
3843
|
+
*raw_entries(brief_raw, "executing"),
|
|
3844
|
+
*raw_entries(brief_raw, "ready"),
|
|
3845
|
+
*raw_entries(brief_raw, "draft"),
|
|
3846
|
+
]
|
|
3847
|
+
return any(parse_workspace_entry(raw)[0] is None for raw in open_entries)
|
|
3848
|
+
|
|
3849
|
+
|
|
3852
3850
|
def _supported_brief_queue_path(raw: object) -> str | None:
|
|
3853
3851
|
"""Return a canonical target or released scalar brief-queue path."""
|
|
3854
3852
|
if isinstance(raw, str):
|
|
@@ -3963,6 +3961,9 @@ def extract_initiatives(workspace: dict) -> list[Initiative]:
|
|
|
3963
3961
|
work=work,
|
|
3964
3962
|
shaping=shaping,
|
|
3965
3963
|
brief_queue=brief_queue,
|
|
3964
|
+
has_unsupported_open_entry=_has_unsupported_open_entry(
|
|
3965
|
+
shaping_raw, brief_raw
|
|
3966
|
+
),
|
|
3966
3967
|
))
|
|
3967
3968
|
return initiatives
|
|
3968
3969
|
|
|
@@ -4882,7 +4883,7 @@ def extract_top_level_backlog(workspace: dict) -> list[ShapingEntry]:
|
|
|
4882
4883
|
|
|
4883
4884
|
|
|
4884
4885
|
_SHAPING_TYPE_TO_SKILL: dict[str, str] = {
|
|
4885
|
-
"shape": "
|
|
4886
|
+
"shape": "intent",
|
|
4886
4887
|
"research": "desk-research-project-start",
|
|
4887
4888
|
"strategy": "frame-situation",
|
|
4888
4889
|
"design": "experience-status",
|
|
@@ -4909,10 +4910,10 @@ def check_shaping_guard(
|
|
|
4909
4910
|
continue
|
|
4910
4911
|
for entry in ini.shaping.active + ini.shaping.backlog:
|
|
4911
4912
|
if entry.slug == spec_slug:
|
|
4912
|
-
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "
|
|
4913
|
+
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
|
|
4913
4914
|
for entry in (top_level_backlog or []):
|
|
4914
4915
|
if entry.slug == spec_slug:
|
|
4915
|
-
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "
|
|
4916
|
+
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
|
|
4916
4917
|
return None
|
|
4917
4918
|
|
|
4918
4919
|
|
|
@@ -5084,6 +5085,14 @@ def _repair_entry_eligibility(
|
|
|
5084
5085
|
}
|
|
5085
5086
|
if blocking_codes - {"impossible_transition", "unapproved_spec"}:
|
|
5086
5087
|
return False, "type2-queue-canonical-blocked"
|
|
5088
|
+
# Defence in depth: canonical reconciliation already refuses dispatch
|
|
5089
|
+
# while a historical alias survives, but the repair seam also checks so
|
|
5090
|
+
# moving the entry does not leave the spec in two lifecycle collections.
|
|
5091
|
+
if any(
|
|
5092
|
+
_legacy_canonical_alias(membership.entry) == spec_path
|
|
5093
|
+
for membership in extract_legacy_migration_memberships(workspace)
|
|
5094
|
+
):
|
|
5095
|
+
return False, "type2-queue-canonical-blocked"
|
|
5087
5096
|
return True, None
|
|
5088
5097
|
return False, "type2-queue-canonical-blocked"
|
|
5089
5098
|
|
|
@@ -5781,9 +5790,10 @@ def compute_migration_plan(
|
|
|
5781
5790
|
)
|
|
5782
5791
|
)
|
|
5783
5792
|
canonical = run_canonical_reconciliation(workspace, root)
|
|
5793
|
+
migration_memberships = extract_legacy_migration_memberships(workspace)
|
|
5784
5794
|
matches = [
|
|
5785
5795
|
membership
|
|
5786
|
-
for membership in
|
|
5796
|
+
for membership in migration_memberships
|
|
5787
5797
|
if membership.ini_slug == selection.source_membership["ini_slug"]
|
|
5788
5798
|
and membership.collection == selection.source_membership["collection"]
|
|
5789
5799
|
and membership.entry_index == selection.source_membership["entry_index"]
|
|
@@ -46,10 +46,21 @@ _legacy_canonical_alias = _engine._legacy_canonical_alias
|
|
|
46
46
|
_migration_file_bytes = _engine._migration_file_bytes
|
|
47
47
|
_parse_membership_entry = _engine._parse_membership_entry
|
|
48
48
|
confine_migration_path = _engine.confine_migration_path
|
|
49
|
+
parse_legacy_workspace_entry = _engine.parse_legacy_workspace_entry
|
|
49
50
|
parse_workspace = _engine.parse_workspace
|
|
50
51
|
resolve_selected_memberships = _engine.resolve_selected_memberships
|
|
51
52
|
|
|
52
53
|
|
|
54
|
+
def _repair_legacy_entry(collection: str, raw: object):
|
|
55
|
+
"""Decode a historical legacy entry for prune closure, or return None.
|
|
56
|
+
|
|
57
|
+
Ordinary reconciliation rejects these shapes. Prune is a repair operation,
|
|
58
|
+
so a surviving legacy alias must still deny closure of the artifact it names.
|
|
59
|
+
"""
|
|
60
|
+
legacy = parse_legacy_workspace_entry(collection, raw)
|
|
61
|
+
return legacy if legacy.finding.code == "legacy_entry" else None
|
|
62
|
+
|
|
63
|
+
|
|
53
64
|
def _resolve_prune_closure_memberships(
|
|
54
65
|
workspace: dict, selected_artifact_paths: list[str]
|
|
55
66
|
) -> dict[str, list[dict]]:
|
|
@@ -77,12 +88,17 @@ def _resolve_prune_closure_memberships(
|
|
|
77
88
|
collection = ".".join(collection_parts)
|
|
78
89
|
status = value.get("status", "") if initiative is not None else ""
|
|
79
90
|
status = status if isinstance(status, str) else ""
|
|
80
|
-
membership,
|
|
91
|
+
membership, _, blocked_path = _parse_membership_entry(
|
|
81
92
|
value,
|
|
82
93
|
collection,
|
|
83
94
|
initiative or "",
|
|
84
95
|
status,
|
|
85
96
|
)
|
|
97
|
+
legacy = (
|
|
98
|
+
_repair_legacy_entry(collection, value) if membership is None else None
|
|
99
|
+
)
|
|
100
|
+
if legacy is not None:
|
|
101
|
+
blocked_path = None
|
|
86
102
|
path: str | None = None
|
|
87
103
|
form = ""
|
|
88
104
|
if (
|
|
@@ -92,7 +108,7 @@ def _resolve_prune_closure_memberships(
|
|
|
92
108
|
path = membership.entry.path
|
|
93
109
|
form = "canonical"
|
|
94
110
|
elif legacy is not None:
|
|
95
|
-
legacy_path = _legacy_canonical_alias(legacy
|
|
111
|
+
legacy_path = _legacy_canonical_alias(legacy)
|
|
96
112
|
if legacy_path in occurrences_by_path:
|
|
97
113
|
path = legacy_path
|
|
98
114
|
form = "legacy"
|
|
@@ -140,21 +156,9 @@ def _resolve_prune_closure_memberships(
|
|
|
140
156
|
else string_parts
|
|
141
157
|
)
|
|
142
158
|
collection = ".".join(collection_parts)
|
|
143
|
-
|
|
144
|
-
if initiative is not None:
|
|
145
|
-
section = workspace.get(initiative)
|
|
146
|
-
if isinstance(section, dict) and isinstance(
|
|
147
|
-
section.get("status"), str
|
|
148
|
-
):
|
|
149
|
-
status = section["status"]
|
|
150
|
-
_, legacy, _, _ = _parse_membership_entry(
|
|
151
|
-
child,
|
|
152
|
-
collection,
|
|
153
|
-
initiative or "",
|
|
154
|
-
status,
|
|
155
|
-
)
|
|
159
|
+
legacy = _repair_legacy_entry(collection, child)
|
|
156
160
|
if legacy is not None:
|
|
157
|
-
path = _legacy_canonical_alias(legacy
|
|
161
|
+
path = _legacy_canonical_alias(legacy)
|
|
158
162
|
if path in occurrences_by_path:
|
|
159
163
|
occurrence = {
|
|
160
164
|
"canonical_artifact_path": path,
|
|
@@ -86,7 +86,7 @@ _LIFECYCLE_MANIFEST: dict[str, dict] = {
|
|
|
86
86
|
"required_pack": "desk-research",
|
|
87
87
|
},
|
|
88
88
|
"shape": {
|
|
89
|
-
"dispatch_skill": "
|
|
89
|
+
"dispatch_skill": "intent",
|
|
90
90
|
"output_pattern": [
|
|
91
91
|
"docs/product/intents/{slug}.md",
|
|
92
92
|
"docs/product/shaping/{slug}/**",
|