xrefkit 0.7.8__tar.gz → 0.7.10__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.
- {xrefkit-0.7.8/xrefkit.egg-info → xrefkit-0.7.10}/PKG-INFO +1 -1
- {xrefkit-0.7.8 → xrefkit-0.7.10}/pyproject.toml +1 -1
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_ci_workflow_invariants.py +11 -27
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_package_knowledge_resolution.py +40 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xrefkit_v2_pipeline.py +16 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/__init__.py +1 -1
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/catalog.py +19 -3
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/workspace.py +4 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10/xrefkit.egg-info}/PKG-INFO +1 -1
- {xrefkit-0.7.8 → xrefkit-0.7.10}/LICENSE +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/README.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/setup.cfg +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_artifact_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_attention_pet.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_attention_pet_client_protocol.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_attention_pet_codex_session.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_attention_pet_fit.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_azure_connection.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_azure_import.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_azure_recovery.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_azure_update_candidate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_azure_writer.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_boundary_analysis.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_brownfield_csharp_structure_definitions.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_brownfield_file_editing_protocol.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_business_intake_conversation_definitions.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_business_intake_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_calibration_lint.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_catalog_preparation_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_check_skill_knowledge_xids.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_code_constraint_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_collect_analyzer_sarif.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_compact_skill_logs.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_constraint_derivation_family_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_constraint_derivation_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_contribution_adoption_bytes.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_contribution_returns.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_convert_to_xrefkit_skill.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_cs_scope_probe.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_csharp_commonality.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_csharp_naming_profile.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_ctx.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_cutover_readiness.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_dashboard.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_database_batch_definition_migration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_decision_trace.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_design_business_intake_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_design_planning_definition_migration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_dotnet_definition_candidate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_editorial_family_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_editorial_intake_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_editorial_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_embedded_startup_pack.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_error_policy_audit.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_error_policy_locator.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_execution_binding.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_existing_skill_definition_batch.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_final_skilldefinition_batch.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_flow_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_fm_multiroot.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_gate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_gateway.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_gateway_mcp.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_gateway_skill_adapter.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_gateway_work_items.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_goal_desired_state.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_governance_entry.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_governance_host.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_host_precheck.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_human_evaluation.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_implementation_flow_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_implementation_review_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_inbound_uploads.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_instruction_workflow.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_knowledge_relations_validator.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_language_review_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_legacy_guidance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_legacy_migration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_legacy_resources.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_mcp_package_routing.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_mcp_setup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_mcp_subagent_startup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_mcp_subagent_startup_integration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_ontology_assessment_validator.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_os_family_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_os_knowledge_family_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_os_selected_family.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_ownership.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_package_skill_run.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_packaged_native_governance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_packmeta.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_plan_markdown.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_plan_observation.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_project_management_materialization.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_project_quality_baseline.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_qa_report_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_reporting_profiles.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_reporting_quality.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_repository_skill_adoption.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_repository_startup_pack.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_resource_provider.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_runtime_contracts.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_sarif_to_locator.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_security_definition_migration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_site_release_metadata.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_definition_governance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_definition_mcp.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_definition_runtime.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_edits.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_maturity_return.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_release_compatibility.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skill_runtime_audit.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skillmeta.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_skills_sync.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_source_analysis_fragments.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_structure_catalog.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_subagent_startup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_subagent_startup_boundaries.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_wbs.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_work_management.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_work_packages.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_workflow_family_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xref.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xrefkit_instance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xrefkit_tools.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xrefkit_v2_discovery.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/tests/test_xrefkit_v2_models.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/__main__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/__init__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/__main__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/client.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/client_protocol.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/codex_session.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/evaluator.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/model.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/presentation.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/profiles.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/scenarios.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/server.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/attention_pet/store.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/azure_connection.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/azure_import.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/azure_recovery.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/azure_update_candidate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/azure_writer.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/boundary_analysis.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/catalog_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/contracts.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/ctx.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/dashboard.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/decision_trace.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/discovery.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/execution_binding.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/execution_binding_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/gate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/gateway.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/goalstate.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/governance_entry.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/governance_entry_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/governance_host.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/hashing.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/host_precheck.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/import_skill.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/instance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/loaders.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/__init__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/audit.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/bootstrap.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/client_cache.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/client_flow.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/context_registry.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/context_token.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/contracts.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/contribution_adoption.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/contribution_returns.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/dist.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/gateway.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/governed_overlays.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/inbound_uploads.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/knowledge_edits.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/legacy_guidance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/legacy_migration.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/legacy_resources.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/ownership.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/repository.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/schemas.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/server.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/setup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/skill_edits.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/skill_maturity.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/startup_contract_pack.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/subagent_startup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp/update_gate_intake.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/mcp_tools.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/__init__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/common.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/effective_bundle.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/human_evaluation.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/local_manifest.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/package_manifest.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/run_log.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/server_config.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/models/skill_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/operations_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/ownership.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/packmeta.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/plan_markdown.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/plan_observation.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/registry.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/reporting.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/reporting_profiles.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/repository_skills.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resolver.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resource_provider.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/attention_pet/client-state.schema.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/attention_pet/pet.css +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/attention_pet/pet.html +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/attention_pet/pet.js +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/contracts.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/current.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/generations/7a682a5272907354/contracts.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/generations/7a682a5272907354/model_body.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/generations/9929294385ccb7b0/contracts.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/generations/9929294385ccb7b0/model_body.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/model_body.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/000_agent_entry.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/011_startup_xref_routing.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/015_shared_memory_operations.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/016_uncertainty_protocol.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/017_base_and_xref_layering.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/053_context_direction_security_guard.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/base/startup_sources/yomiyasu_LICENSE.txt +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/docs/guides/062_legacy_flow_skill_migration_guide.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/knowledge/operations/130_legacy_flow_skill_migration_rules.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/knowledge/organization/160_context_direction_guard_rules.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/SKILL.v1.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/references/legacy_flow_skill_migration_template.md +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/skills/repository_adoption.json +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/resources/migration/tools/migrate_legacy_flow_skill.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/runlog.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skill_definition.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skill_definition_catalog.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skill_definition_governance.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skillmeta.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skillrun.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/skills_sync.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/structure_catalog.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/subagent_startup.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/tools/__init__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/tools/__main__.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/v2_cli.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/wbs.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/work_management.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/work_management_view.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit/xref.py +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit.egg-info/SOURCES.txt +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit.egg-info/dependency_links.txt +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit.egg-info/entry_points.txt +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit.egg-info/requires.txt +0 -0
- {xrefkit-0.7.8 → xrefkit-0.7.10}/xrefkit.egg-info/top_level.txt +0 -0
|
@@ -18,34 +18,18 @@ PACKAGES = {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
@pytest.mark.parametrize("
|
|
22
|
-
|
|
21
|
+
@pytest.mark.parametrize("filename", [
|
|
22
|
+
"python-package.yml",
|
|
23
|
+
"python-skill-project-management-package.yml",
|
|
23
24
|
])
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
block = update.split("# Package installation", 1)[1].split("# A failed definition update", 1)[0]
|
|
33
|
-
block = "# Package installation" + block
|
|
34
|
-
mocks = f"""
|
|
35
|
-
set -euo pipefail
|
|
36
|
-
calls=0
|
|
37
|
-
pgrep() {{
|
|
38
|
-
calls=$((calls + 1))
|
|
39
|
-
if [ "$calls" -eq 1 ]; then return 0; fi
|
|
40
|
-
return {0 if remains else 1}
|
|
41
|
-
}}
|
|
42
|
-
sudo() {{ return {stop_status}; }}
|
|
43
|
-
sleep() {{ :; }}
|
|
44
|
-
"""
|
|
45
|
-
result = subprocess.run([bash, "-c", mocks + block + "\necho stop-complete\n"],
|
|
46
|
-
capture_output=True, text=True)
|
|
47
|
-
assert result.returncode == expected, result.stdout + result.stderr
|
|
48
|
-
assert ("stop-complete" in result.stdout) == (expected == 0)
|
|
25
|
+
def test_release_artifact_inspection_uses_verified_fresh_clamav(filename):
|
|
26
|
+
steps = workflow(filename)["jobs"]["artifact-inspection"]["steps"]
|
|
27
|
+
assert any(step.get("run") == "bash tools/scan_python_artifacts.sh dist/" for step in steps)
|
|
28
|
+
script = (WORKFLOWS.parents[1] / "tools/scan_python_artifacts.sh").read_text(encoding="utf-8")
|
|
29
|
+
assert "sha256sum --check" in script
|
|
30
|
+
assert "--fail-if-cvd-older-than=1" in script
|
|
31
|
+
assert script.index("sha256sum --check") < script.index('"${clamav_bin}/freshclam"')
|
|
32
|
+
assert script.index('"${clamav_bin}/freshclam"') < script.index('"${clamav_bin}/clamscan"')
|
|
49
33
|
|
|
50
34
|
|
|
51
35
|
def workflow(filename):
|
|
@@ -164,3 +164,43 @@ def test_inline_identity_mismatch_refused(tmp_path):
|
|
|
164
164
|
path.write_text("<!-- xid: ABCDEF123456 -->\n# Wrong identity")
|
|
165
165
|
with pytest.raises(ValueError, match="identity does not match"):
|
|
166
166
|
catalog.expand_knowledge("xid-knowledge-rules")
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@pytest.mark.parametrize(("declared", "inline", "accepted"), [
|
|
170
|
+
("xid-7A2F4C8D1401", "7A2F4C8D1401", True),
|
|
171
|
+
("7A2F4C8D1401", "xid-7A2F4C8D1401", True),
|
|
172
|
+
("xid-7A2F4C8D1401", "7A2F4C8D1402", False),
|
|
173
|
+
("xid-knowledge-rules", "knowledge-rules", False),
|
|
174
|
+
("xid-7A2F4C8D1401-extra", "7A2F4C8D1401", False),
|
|
175
|
+
])
|
|
176
|
+
def test_native_hex_inline_identity_compatibility(tmp_path, declared, inline, accepted):
|
|
177
|
+
catalog = package_catalog(tmp_path)
|
|
178
|
+
package = catalog.discovered_packages[0]
|
|
179
|
+
package.manifest.provides.knowledge[0].xid = declared
|
|
180
|
+
(package.package_root / "knowledge/rules.md").write_text(f"<!-- xid: {inline} -->\n# Rules")
|
|
181
|
+
if accepted:
|
|
182
|
+
assert catalog.get_document_by_xid(declared)["xid"] == declared
|
|
183
|
+
assert catalog.expand_knowledge(declared)["content"]
|
|
184
|
+
else:
|
|
185
|
+
with pytest.raises(ValueError, match="identity does not match"):
|
|
186
|
+
catalog.get_document_by_xid(declared)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def test_prefixed_native_startup_identity_cannot_shadow_core(tmp_path):
|
|
190
|
+
catalog = package_catalog(tmp_path)
|
|
191
|
+
catalog.discovered_packages[0].manifest.provides.knowledge[0].xid = "xid-0B5C58B5E5B2"
|
|
192
|
+
with pytest.raises(ValueError, match="core startup XID"):
|
|
193
|
+
catalog.get_document_by_xid("xid-0B5C58B5E5B2")
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def test_native_seed_resolves_prefixed_package_asset(tmp_path):
|
|
197
|
+
catalog = package_catalog(tmp_path)
|
|
198
|
+
package = catalog.discovered_packages[0]
|
|
199
|
+
package.manifest.provides.knowledge[0].xid = "xid-7A2F4C8D1701"
|
|
200
|
+
bare = catalog.get_document_by_xid("7A2F4C8D1701")
|
|
201
|
+
prefixed = catalog.get_document_by_xid("xid-7A2F4C8D1701")
|
|
202
|
+
assert bare["content_hash"] == prefixed["content_hash"]
|
|
203
|
+
assert bare["content"] == prefixed["content"]
|
|
204
|
+
|
|
205
|
+
duplicate = replace(catalog, discovered_packages=(package, package))
|
|
206
|
+
assert duplicate.get_document_by_xid("7A2F4C8D1701")["error"] == "xid_conflict"
|
|
@@ -533,3 +533,19 @@ def test_repository_csharp_package_resolves_local_csharp_review(tmp_path: Path)
|
|
|
533
533
|
assert "applied_skills" in bundle.required_outputs
|
|
534
534
|
assert "xid-branch-csharp-review-async-synchronization" in bundle.references.branches
|
|
535
535
|
assert "xid-project-csharp-current-code-scope" in bundle.references.knowledge
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
def test_registry_loads_split_contract_from_mixed_package(tmp_path):
|
|
539
|
+
package_manifest, local_manifest = _sample_workspace(tmp_path)
|
|
540
|
+
manifest = yaml.safe_load(package_manifest.read_text(encoding="utf-8"))
|
|
541
|
+
native_path = "skills/investigation_flow/SKILL.v1.md"
|
|
542
|
+
_write(package_manifest.parent / native_path, (REPO_ROOT / native_path).read_text(encoding="utf-8"))
|
|
543
|
+
manifest["provides"]["skills"].append({
|
|
544
|
+
"id": "investigation_flow",
|
|
545
|
+
"xid": "E8B2D6A4C190",
|
|
546
|
+
"path": native_path,
|
|
547
|
+
})
|
|
548
|
+
_write_yaml(package_manifest, manifest)
|
|
549
|
+
|
|
550
|
+
registry = build_registry(package_manifests=[package_manifest], local_manifest_path=local_manifest)
|
|
551
|
+
assert registry.skills.require("xddp.design.change_design").definition.entry.path == "skills/change_design/entry.md"
|
|
@@ -709,7 +709,7 @@ class XRefCatalog:
|
|
|
709
709
|
for kind, assets in groups.items():
|
|
710
710
|
for asset in assets:
|
|
711
711
|
path = _package_asset_path(root, asset.path)
|
|
712
|
-
if _embedded_startup_document(asset.xid) is not None:
|
|
712
|
+
if _embedded_startup_document(_native_xid_identity(asset.xid)) is not None:
|
|
713
713
|
raise ValueError(f"package asset conflicts with core startup XID: {asset.xid}")
|
|
714
714
|
key = (asset.xid, path)
|
|
715
715
|
if key not in seen:
|
|
@@ -721,7 +721,7 @@ class XRefCatalog:
|
|
|
721
721
|
raise ValueError("package Skill identity does not match manifest")
|
|
722
722
|
for fragment in [skill.entry, *skill.required_fragments, *skill.branches]:
|
|
723
723
|
target = _package_asset_path(root, fragment.path)
|
|
724
|
-
if _embedded_startup_document(fragment.xid) is not None:
|
|
724
|
+
if _embedded_startup_document(_native_xid_identity(fragment.xid)) is not None:
|
|
725
725
|
raise ValueError(f"package fragment conflicts with core startup XID: {fragment.xid}")
|
|
726
726
|
key = (fragment.xid, target)
|
|
727
727
|
if key not in seen:
|
|
@@ -729,7 +729,8 @@ class XRefCatalog:
|
|
|
729
729
|
yield package, fragment.xid, target, "fragment"
|
|
730
730
|
|
|
731
731
|
def _package_document(self, package: DiscoveredSkillPackage, xid: str, path: Path, text: str) -> XRefDocument:
|
|
732
|
-
if path.suffix.lower() == ".md"
|
|
732
|
+
document_xid = first_xid(text) if path.suffix.lower() == ".md" else None
|
|
733
|
+
if document_xid and _native_xid_identity(document_xid) != _native_xid_identity(xid):
|
|
733
734
|
raise ValueError(f"package document identity does not match manifest: {xid}")
|
|
734
735
|
return XRefDocument(
|
|
735
736
|
xid=xid,
|
|
@@ -1298,11 +1299,20 @@ class XRefCatalog:
|
|
|
1298
1299
|
if local_xid == xid
|
|
1299
1300
|
)
|
|
1300
1301
|
package_documents = {}
|
|
1302
|
+
package_aliases = []
|
|
1303
|
+
native_identity = _native_xid_identity(xid)
|
|
1301
1304
|
for package, asset_xid, path, _kind in self._package_assets():
|
|
1302
1305
|
if asset_xid == xid:
|
|
1303
1306
|
text = read_text(path)
|
|
1304
1307
|
matches.append((path, text))
|
|
1305
1308
|
package_documents[path] = self._package_document(package, xid, path, text)
|
|
1309
|
+
elif _native_xid_identity(asset_xid) == native_identity:
|
|
1310
|
+
package_aliases.append((package, path))
|
|
1311
|
+
if not matches:
|
|
1312
|
+
for package, path in package_aliases:
|
|
1313
|
+
text = read_text(path)
|
|
1314
|
+
matches.append((path, text))
|
|
1315
|
+
package_documents[path] = self._package_document(package, xid, path, text)
|
|
1306
1316
|
if package_documents:
|
|
1307
1317
|
# Installed packages cannot shadow a core migration document merely
|
|
1308
1318
|
# because the consumer repository does not contain that document.
|
|
@@ -1720,6 +1730,12 @@ def _knowledge_entry(
|
|
|
1720
1730
|
)
|
|
1721
1731
|
|
|
1722
1732
|
|
|
1733
|
+
def _native_xid_identity(xid: str) -> str:
|
|
1734
|
+
"""Accept the legacy anchor prefix only for native 12-digit hex XIDs."""
|
|
1735
|
+
match = re.fullmatch(r"(?:xid-)?([0-9A-F]{12})", xid)
|
|
1736
|
+
return match.group(1) if match else xid
|
|
1737
|
+
|
|
1738
|
+
|
|
1723
1739
|
def _package_asset_path(root: Path, relative: str) -> Path:
|
|
1724
1740
|
"""Manifest paths are portable relative allowlist entries, never glob roots."""
|
|
1725
1741
|
portable = PurePosixPath(relative)
|
|
@@ -67,6 +67,10 @@ def build_registry(
|
|
|
67
67
|
registry.add_package(manifest, package_root)
|
|
68
68
|
for provided in manifest.provides.skills:
|
|
69
69
|
skill_path = _contained_path(package_root, provided.path, label=f"package skill {provided.id}")
|
|
70
|
+
# The effective Skill resolver composes split YAML contracts.
|
|
71
|
+
# Native Markdown Skills are registered by the MCP catalog.
|
|
72
|
+
if skill_path.suffix.lower() == ".md":
|
|
73
|
+
continue
|
|
70
74
|
skill = load_skill_definition(skill_path)
|
|
71
75
|
_validate_skill_paths(package_root, skill)
|
|
72
76
|
registry.add_package_skill(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|