xrefkit 0.6.3__tar.gz → 0.7.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.
- xrefkit-0.7.1/PKG-INFO +253 -0
- xrefkit-0.7.1/README.md +214 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/pyproject.toml +1 -1
- xrefkit-0.7.1/tests/test_ci_workflow_invariants.py +190 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_contribution_returns.py +4 -2
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_embedded_startup_pack.py +3 -0
- xrefkit-0.7.1/tests/test_legacy_guidance.py +370 -0
- xrefkit-0.7.1/tests/test_legacy_resources.py +221 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_repository_skill_adoption.py +9 -2
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/__init__.py +1 -1
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/catalog.py +73 -1
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contribution_returns.py +4 -6
- xrefkit-0.7.1/xrefkit/mcp/legacy_guidance.py +295 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/legacy_migration.py +178 -11
- xrefkit-0.7.1/xrefkit/mcp/legacy_resources.py +156 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/server.py +37 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/startup_contract_pack.py +54 -1
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/000_agent_entry.md +53 -0
- xrefkit-0.7.1/xrefkit/resources/base/startup_sources/yomiyasu_LICENSE.txt +21 -0
- xrefkit-0.7.1/xrefkit/resources/migration/docs/guides/062_legacy_flow_skill_migration_guide.md +129 -0
- xrefkit-0.7.1/xrefkit/resources/migration/knowledge/operations/130_legacy_flow_skill_migration_rules.md +81 -0
- xrefkit-0.7.1/xrefkit/resources/migration/knowledge/organization/160_context_direction_guard_rules.md +84 -0
- xrefkit-0.7.1/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/SKILL.v1.md +290 -0
- xrefkit-0.7.1/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/references/legacy_flow_skill_migration_template.md +28 -0
- xrefkit-0.7.1/xrefkit/resources/migration/skills/repository_adoption.json +78 -0
- xrefkit-0.7.1/xrefkit/resources/migration/tools/migrate_legacy_flow_skill.py +245 -0
- xrefkit-0.7.1/xrefkit.egg-info/PKG-INFO +253 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/SOURCES.txt +12 -0
- xrefkit-0.6.3/PKG-INFO +0 -224
- xrefkit-0.6.3/README.md +0 -185
- xrefkit-0.6.3/tests/test_ci_workflow_invariants.py +0 -75
- xrefkit-0.6.3/xrefkit.egg-info/PKG-INFO +0 -224
- {xrefkit-0.6.3 → xrefkit-0.7.1}/LICENSE +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/setup.cfg +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_artifact_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_client_protocol.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_codex_session.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_fit.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_connection.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_import.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_recovery.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_update_candidate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_writer.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_boundary_analysis.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_brownfield_csharp_structure_definitions.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_brownfield_file_editing_protocol.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_business_intake_conversation_definitions.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_business_intake_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_calibration_lint.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_catalog_preparation_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_check_skill_knowledge_xids.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_code_constraint_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_collect_analyzer_sarif.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_constraint_derivation_family_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_constraint_derivation_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_convert_to_xrefkit_skill.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cs_scope_probe.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_csharp_commonality.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_csharp_naming_profile.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ctx.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cutover_readiness.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_dashboard.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_database_batch_definition_migration.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_decision_trace.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_design_business_intake_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_design_planning_definition_migration.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_dotnet_definition_candidate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_family_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_intake_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_error_policy_audit.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_error_policy_locator.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_execution_binding.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_existing_skill_definition_batch.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_final_skilldefinition_batch.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_flow_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_fm_multiroot.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_mcp.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_skill_adapter.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_work_items.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_goal_desired_state.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_governance_entry.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_host_precheck.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_human_evaluation.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_implementation_flow_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_implementation_review_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_inbound_uploads.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_instruction_workflow.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_knowledge_relations_validator.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_language_review_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_legacy_migration.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_package_routing.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_setup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_subagent_startup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_subagent_startup_integration.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ontology_assessment_validator.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_family_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_knowledge_family_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_selected_family.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ownership.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_packmeta.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_plan_markdown.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_plan_observation.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_project_quality_baseline.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_qa_report_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_reporting_profiles.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_reporting_quality.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_repository_startup_pack.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_resource_provider.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_runtime_contracts.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_sarif_to_locator.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_security_definition_migration.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_site_release_metadata.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_governance.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_mcp.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_runtime.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_edits.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_maturity_return.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_release_compatibility.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_runtime_audit.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skillmeta.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skills_sync.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_source_analysis_fragments.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_structure_catalog.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_subagent_startup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_subagent_startup_boundaries.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_wbs.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_work_management.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_work_packages.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_workflow_family_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xref.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_instance.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_tools.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_discovery.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_models.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_pipeline.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/__main__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/__init__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/__main__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/client.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/client_protocol.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/codex_session.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/evaluator.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/model.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/presentation.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/profiles.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/scenarios.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/server.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/store.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_connection.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_import.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_recovery.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_update_candidate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_writer.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/boundary_analysis.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/catalog_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/contracts.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/ctx.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/dashboard.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/decision_trace.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/discovery.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/execution_binding.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/execution_binding_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/gate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/gateway.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/goalstate.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/governance_entry.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/governance_entry_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/hashing.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/host_precheck.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/import_skill.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/instance.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/loaders.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/__init__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/audit.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/bootstrap.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/client_cache.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/client_flow.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/context_registry.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/context_token.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contracts.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contribution_adoption.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/dist.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/gateway.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/governed_overlays.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/inbound_uploads.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/knowledge_edits.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/ownership.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/repository.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/schemas.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/setup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/skill_edits.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/skill_maturity.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/subagent_startup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/update_gate_intake.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp_tools.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/__init__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/common.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/effective_bundle.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/human_evaluation.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/local_manifest.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/package_manifest.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/run_log.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/server_config.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/skill_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/operations_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/ownership.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/packmeta.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/plan_markdown.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/plan_observation.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/registry.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/reporting.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/reporting_profiles.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/repository_skills.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resolver.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resource_provider.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/client-state.schema.json +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.css +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.html +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.js +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/contracts.json +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/current.json +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/7a682a5272907354/contracts.json +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/7a682a5272907354/model_body.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/9929294385ccb7b0/contracts.json +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/9929294385ccb7b0/model_body.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/model_body.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/011_startup_xref_routing.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/015_shared_memory_operations.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/016_uncertainty_protocol.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/017_base_and_xref_layering.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/053_context_direction_security_guard.md +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/runlog.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition_catalog.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition_governance.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skillmeta.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skillrun.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skills_sync.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/structure_catalog.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/subagent_startup.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/tools/__init__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/tools/__main__.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/v2_cli.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/wbs.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/work_management.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/work_management_view.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/workspace.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/xref.py +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/dependency_links.txt +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/entry_points.txt +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/requires.txt +0 -0
- {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/top_level.txt +0 -0
xrefkit-0.7.1/PKG-INFO
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: xrefkit
|
|
3
|
+
Version: 0.7.1
|
|
4
|
+
Summary: Portable XID, Skill, Knowledge, workflow, and MCP runtime for XRefKit
|
|
5
|
+
Author: synthaicode
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Ritu
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Requires-Python: >=3.11
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: PyYAML<7,>=6.0.2
|
|
32
|
+
Requires-Dist: pydantic<3,>=2.0
|
|
33
|
+
Provides-Extra: mcp
|
|
34
|
+
Requires-Dist: mcp<2,>=1.0.0; extra == "mcp"
|
|
35
|
+
Requires-Dist: uvicorn>=0.30; extra == "mcp"
|
|
36
|
+
Provides-Extra: test
|
|
37
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
38
|
+
Dynamic: license-file
|
|
39
|
+
|
|
40
|
+
# XRefKit
|
|
41
|
+
|
|
42
|
+
[](https://pepy.tech/projects/xrefkit)
|
|
43
|
+
|
|
44
|
+
**Less effort reconstructing AI work. More attention for the decisions that matter.**
|
|
45
|
+
|
|
46
|
+
XRefKit is designed to reduce the cognitive load of directing and reviewing
|
|
47
|
+
AI-assisted work. It keeps reusable procedures, relevant knowledge, progress,
|
|
48
|
+
and evidence in explicit records, then helps present results in a form people
|
|
49
|
+
can understand and check.
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
## Why faster AI output can still mean more work for you
|
|
54
|
+
|
|
55
|
+
Generating a result leaves another task: understanding enough of it to decide
|
|
56
|
+
whether to use it. You may have to reconstruct the context, identify claims,
|
|
57
|
+
find supporting sources, and check the revised output again. Faster generation
|
|
58
|
+
can leave you with more material to review and more connections to reconstruct.
|
|
59
|
+
|
|
60
|
+
XRefKit addresses five recurring sources of that effort:
|
|
61
|
+
|
|
62
|
+
- **You have to remember what to tell the AI.** Rebuilding instructions from
|
|
63
|
+
memory makes you responsible for recalling every step and criterion.
|
|
64
|
+
**Reusable Skills** keep the procedure, required inputs, expected outputs,
|
|
65
|
+
and criteria available for the next task.
|
|
66
|
+
- **You have to search for the rules behind a result.** Scattered reference
|
|
67
|
+
material makes you switch between documents and reconnect them yourself.
|
|
68
|
+
Separate **Knowledge** records and stable identifiers (**XIDs**) let a Skill
|
|
69
|
+
resolve relevant material and record references for review.
|
|
70
|
+
- **You have to rebuild context after an interruption.** A conversation history
|
|
71
|
+
leaves you to discover where the work stopped.
|
|
72
|
+
**Work items and handoff records** preserve progress, open concerns, and next
|
|
73
|
+
steps that another session or colleague can pick up.
|
|
74
|
+
- **You have to learn how to read each new report.** Changing headings, order,
|
|
75
|
+
or detail makes you search again for the same information.
|
|
76
|
+
**Optional approved report profiles** preserve familiar structure and
|
|
77
|
+
granularity, giving subsequent reviews an explicit baseline.
|
|
78
|
+
- **You have to infer what “done” actually covers.** A completion statement can
|
|
79
|
+
leave the checks, evidence, and unresolved decisions unclear.
|
|
80
|
+
**Workflow-record checks and reporting guidance** make those boundaries
|
|
81
|
+
explicit, while tests and reviewers assess the result itself.
|
|
82
|
+
|
|
83
|
+
The aim is to keep what you need visible and available, so you can check it
|
|
84
|
+
without remembering or reconstructing it each time. How much these mechanisms
|
|
85
|
+
reduce the effort in practice still needs evaluation with users.
|
|
86
|
+
|
|
87
|
+
## Make the report easier to understand—and easier to check
|
|
88
|
+
|
|
89
|
+
A shorter report only helps if it preserves what the reader needs to decide.
|
|
90
|
+
XRefKit's reporting guidance connects the conclusion, its basis, its limits,
|
|
91
|
+
and the next action within the task's own format:
|
|
92
|
+
|
|
93
|
+
- **Reduce searching:** put the conclusion and requested decision first.
|
|
94
|
+
Keep material uncertainty beside the claim it qualifies.
|
|
95
|
+
- **Reduce mental reconstruction:** connect a finding to its evidence and
|
|
96
|
+
explain why that evidence matters. A file list alone leaves that connection
|
|
97
|
+
for the reader to make.
|
|
98
|
+
- **Reduce initial overload:** present the decision-relevant summary, with
|
|
99
|
+
clear links to detailed findings, so you can inspect the supporting detail
|
|
100
|
+
when needed. Keep essential caveats in the summary.
|
|
101
|
+
- **Reduce relearning:** for recurring outputs, use an approved Knowledge
|
|
102
|
+
quality profile containing examples, headings, table structure, information
|
|
103
|
+
placement, detail, and criteria. Structural checks detect format differences;
|
|
104
|
+
independent review still judges meaning and evidential support.
|
|
105
|
+
|
|
106
|
+
For illustration, a change-review summary could read:
|
|
107
|
+
|
|
108
|
+
> **Decision needed:** Hold acceptance until the retry case is checked.
|
|
109
|
+
>
|
|
110
|
+
> **Verified:** The normal path passed against the agreed criteria; the findings
|
|
111
|
+
> link to the test evidence.
|
|
112
|
+
>
|
|
113
|
+
> **Still unknown:** Whether retrying after a timeout creates a duplicate.
|
|
114
|
+
>
|
|
115
|
+
> **Next step:** Test the retry case and return the result for review.
|
|
116
|
+
|
|
117
|
+
This example shows where the reader's attention belongs; it is not a universal
|
|
118
|
+
template or a real test result. Plain words, short sections, and clear connections
|
|
119
|
+
between a finding and its evidence help you follow the reasoning.
|
|
120
|
+
|
|
121
|
+
Reader feedback can identify a missing explanation, confusing placement, or
|
|
122
|
+
insufficient evidence. The correction can then target the output, inputs,
|
|
123
|
+
criteria, or procedure. Approved baselines stay intact; procedure changes require
|
|
124
|
+
explicit authorization.
|
|
125
|
+
|
|
126
|
+
The purpose is to make informed review less demanding. A familiar layout or a
|
|
127
|
+
passing record check does not establish correctness. See the
|
|
128
|
+
[reporting contract](docs/core/contracts/081_skill_reporting_contract.md#xid-6B2D9F4A1C73)
|
|
129
|
+
and [fixed-output quality protocol](docs/core/contracts/112_fixed_output_quality_protocol.md#xid-F9C2A8D471B0).
|
|
130
|
+
|
|
131
|
+
## How does XRefKit fit with modern agent harnesses?
|
|
132
|
+
|
|
133
|
+
Modern harnesses already support more than execution. They can preserve sessions,
|
|
134
|
+
organize repository knowledge and plans, and support evaluation criteria,
|
|
135
|
+
automated constraints, and structured handoffs. The capabilities available to
|
|
136
|
+
you depend on the harness and its configuration.
|
|
137
|
+
|
|
138
|
+
XRefKit's focus is the human effort of directing, understanding, and reviewing
|
|
139
|
+
that work. It packages reusable procedures, separately maintained knowledge,
|
|
140
|
+
work records, and reporting criteria as assets the team can inspect and maintain.
|
|
141
|
+
Repository files and Skill Packages preserve those assets; CLI/MCP interfaces
|
|
142
|
+
make them available to compatible clients.
|
|
143
|
+
|
|
144
|
+
Your coding harness can implement and test a change while XRefKit records the
|
|
145
|
+
applicable review method, references, findings, and open concerns. The report
|
|
146
|
+
then helps a person decide what the result supports and what to do next.
|
|
147
|
+
The client runs the model and tools; XRefKit's `verify` and `close` check
|
|
148
|
+
workflow records, while substantive quality needs appropriate tests and review.
|
|
149
|
+
|
|
150
|
+
If your harness already provides this structure, there may be little to add.
|
|
151
|
+
Use XRefKit when you want these work assets and review conventions made explicit
|
|
152
|
+
and reusable. This is a difference in packaged mechanisms and emphasis, not a
|
|
153
|
+
demonstrated advantage in cognitive load, quality, cost, or performance.
|
|
154
|
+
|
|
155
|
+
See the [Skill and Knowledge operating model](docs/core/models/052_flow_capability_skill_knowledge_model.md#xid-91C4B7E2D5A8)
|
|
156
|
+
and [Skill operating contract](docs/core/contracts/058_skill_operating_contract.md#xid-B7A2C94F0E61).
|
|
157
|
+
|
|
158
|
+
## Start with one recurring task
|
|
159
|
+
|
|
160
|
+
Choose a task you already know how to review: a document check, an investigation,
|
|
161
|
+
or a development handoff. Start with one procedure and the reference material it
|
|
162
|
+
needs, then use the resulting work record to decide what to improve.
|
|
163
|
+
|
|
164
|
+
### 1. Prepare your workspace
|
|
165
|
+
|
|
166
|
+
You need Python 3.11 or later. Run these commands in the folder where you want to work:
|
|
167
|
+
|
|
168
|
+
```powershell
|
|
169
|
+
python -m pip install xrefkit
|
|
170
|
+
xrefkit init
|
|
171
|
+
xrefkit --help
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Initialization creates the local XRefKit configuration and missing AI startup
|
|
175
|
+
files while preserving existing startup files. See the
|
|
176
|
+
[installation and Skill Package guide](docs/guides/089_xrefkit_package_first_registration.md#xid-4F8C2A7D1E90)
|
|
177
|
+
to add reusable Skills or bring existing material into your workspace.
|
|
178
|
+
|
|
179
|
+
For older custom Skills that call Python under a shared `tools/` directory,
|
|
180
|
+
connect your AI client and ask it to migrate the old environment. See
|
|
181
|
+
[guided legacy migration](docs/guides/117_guided_legacy_python_migration.md#xid-6D73C9A12E40)
|
|
182
|
+
for preparation, safe baseline tests, governed registration and client verification.
|
|
183
|
+
|
|
184
|
+
### 2. Connect your AI tool
|
|
185
|
+
|
|
186
|
+
For VS Code/Copilot, install the optional MCP integration and generate a setup proposal:
|
|
187
|
+
|
|
188
|
+
```powershell
|
|
189
|
+
python -m pip install "xrefkit[mcp]"
|
|
190
|
+
python -m xrefkit mcp setup --repo . --output .xrefkit/setup-review
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Review the generated files, then apply the setup:
|
|
194
|
+
|
|
195
|
+
```powershell
|
|
196
|
+
python -m xrefkit mcp setup apply --repo . --source .xrefkit/setup-review
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Open the workspace in VS Code, start the `xrefkit` MCP server, and ask in Copilot chat:
|
|
200
|
+
|
|
201
|
+
> Call XRefKit's get_startup_context and help me get started.
|
|
202
|
+
|
|
203
|
+
Then describe the task you want to accomplish. You do not need to know a Skill
|
|
204
|
+
name to ask for guidance. Opening VS Code alone does not start the conversation.
|
|
205
|
+
|
|
206
|
+
For an MCP client that accepts a local server command, the server entry point is:
|
|
207
|
+
|
|
208
|
+
```powershell
|
|
209
|
+
xrefkit mcp serve --repo . --transport stdio
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 3. Review the work and decide what comes next
|
|
213
|
+
|
|
214
|
+
Use the [Skill Run Dashboard](docs/guides/086_skill_run_observation_dashboard_usage.md#xid-4A4763A2DE63)
|
|
215
|
+
to inspect recorded progress, referenced knowledge, outputs, concerns, and
|
|
216
|
+
handoffs. It shows what was recorded and where observations are missing; you
|
|
217
|
+
decide whether the result is ready to use.
|
|
218
|
+
|
|
219
|
+
The [workflow walkthrough](docs/guides/087_workflow_protocol_sequence_for_humans.md#xid-E8B4D2F19A63)
|
|
220
|
+
explains how work moves from a request to verification and handoff.
|
|
221
|
+
|
|
222
|
+
## Choose your next step
|
|
223
|
+
|
|
224
|
+
- **Use existing procedures:** [Install and register Skill Packages](docs/guides/089_xrefkit_package_first_registration.md#xid-4F8C2A7D1E90).
|
|
225
|
+
- **Organize a task from your own instructions:** [Use an instruction-backed workflow](docs/guides/088_instruction_workflow_protocol.md#xid-9F4C2A7D1B60).
|
|
226
|
+
- **Capture your team's way of working:** [Understand Skills and Knowledge](docs/core/models/052_flow_capability_skill_knowledge_model.md#xid-91C4B7E2D5A8), then [author a Skill](docs/guides/013_skill_authoring_with_xref.md#xid-3DB05A0F5F5B).
|
|
227
|
+
- **Explore the details:** [Browse the documentation](docs/000_index.md#xid-56DD6EB68343).
|
|
228
|
+
|
|
229
|
+
## Optional: explore model fit with Attention Pet
|
|
230
|
+
|
|
231
|
+
The experimental [Attention Pet](projects/attention-pet/README.en.md) companion
|
|
232
|
+
helps Codex users inspect estimates of model suitability and compare lower-cost
|
|
233
|
+
candidates using the visible work context. Run it from a Codex terminal in this repository:
|
|
234
|
+
|
|
235
|
+
```powershell
|
|
236
|
+
python -m xrefkit.attention_pet serve --port 8769
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Open the printed address in the Codex browser panel. The preview follows the chat
|
|
240
|
+
that launched it. Its estimates are uncalibrated; it does not measure internal
|
|
241
|
+
attention or token usage, and it does not change your model settings.
|
|
242
|
+
|
|
243
|
+
## Contribute or maintain a deployment
|
|
244
|
+
|
|
245
|
+
For local development, install this checkout with `python -m pip install -e .`.
|
|
246
|
+
The [pipeline dependency reference](docs/reference/125_pipeline_dependency_matrix.md#xid-7E4B19C2A860)
|
|
247
|
+
describes CI and publication triggers. Internal authoring and runtime details are
|
|
248
|
+
in the [SkillDefinition contract](docs/core/contracts/096_skill_definition_contract.md#xid-E6A19D4B72C3)
|
|
249
|
+
and [Workflow Runtime Binding contract](docs/core/contracts/111_workflow_runtime_binding.md#xid-8D50A972BA9F).
|
|
250
|
+
|
|
251
|
+
XRefKit does not require provider API keys to install or explore the package.
|
|
252
|
+
Authenticate your AI tool through its provider's supported methods, and keep
|
|
253
|
+
secrets and access tokens out of the repository.
|
xrefkit-0.7.1/README.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# XRefKit
|
|
2
|
+
|
|
3
|
+
[](https://pepy.tech/projects/xrefkit)
|
|
4
|
+
|
|
5
|
+
**Less effort reconstructing AI work. More attention for the decisions that matter.**
|
|
6
|
+
|
|
7
|
+
XRefKit is designed to reduce the cognitive load of directing and reviewing
|
|
8
|
+
AI-assisted work. It keeps reusable procedures, relevant knowledge, progress,
|
|
9
|
+
and evidence in explicit records, then helps present results in a form people
|
|
10
|
+
can understand and check.
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
## Why faster AI output can still mean more work for you
|
|
15
|
+
|
|
16
|
+
Generating a result leaves another task: understanding enough of it to decide
|
|
17
|
+
whether to use it. You may have to reconstruct the context, identify claims,
|
|
18
|
+
find supporting sources, and check the revised output again. Faster generation
|
|
19
|
+
can leave you with more material to review and more connections to reconstruct.
|
|
20
|
+
|
|
21
|
+
XRefKit addresses five recurring sources of that effort:
|
|
22
|
+
|
|
23
|
+
- **You have to remember what to tell the AI.** Rebuilding instructions from
|
|
24
|
+
memory makes you responsible for recalling every step and criterion.
|
|
25
|
+
**Reusable Skills** keep the procedure, required inputs, expected outputs,
|
|
26
|
+
and criteria available for the next task.
|
|
27
|
+
- **You have to search for the rules behind a result.** Scattered reference
|
|
28
|
+
material makes you switch between documents and reconnect them yourself.
|
|
29
|
+
Separate **Knowledge** records and stable identifiers (**XIDs**) let a Skill
|
|
30
|
+
resolve relevant material and record references for review.
|
|
31
|
+
- **You have to rebuild context after an interruption.** A conversation history
|
|
32
|
+
leaves you to discover where the work stopped.
|
|
33
|
+
**Work items and handoff records** preserve progress, open concerns, and next
|
|
34
|
+
steps that another session or colleague can pick up.
|
|
35
|
+
- **You have to learn how to read each new report.** Changing headings, order,
|
|
36
|
+
or detail makes you search again for the same information.
|
|
37
|
+
**Optional approved report profiles** preserve familiar structure and
|
|
38
|
+
granularity, giving subsequent reviews an explicit baseline.
|
|
39
|
+
- **You have to infer what “done” actually covers.** A completion statement can
|
|
40
|
+
leave the checks, evidence, and unresolved decisions unclear.
|
|
41
|
+
**Workflow-record checks and reporting guidance** make those boundaries
|
|
42
|
+
explicit, while tests and reviewers assess the result itself.
|
|
43
|
+
|
|
44
|
+
The aim is to keep what you need visible and available, so you can check it
|
|
45
|
+
without remembering or reconstructing it each time. How much these mechanisms
|
|
46
|
+
reduce the effort in practice still needs evaluation with users.
|
|
47
|
+
|
|
48
|
+
## Make the report easier to understand—and easier to check
|
|
49
|
+
|
|
50
|
+
A shorter report only helps if it preserves what the reader needs to decide.
|
|
51
|
+
XRefKit's reporting guidance connects the conclusion, its basis, its limits,
|
|
52
|
+
and the next action within the task's own format:
|
|
53
|
+
|
|
54
|
+
- **Reduce searching:** put the conclusion and requested decision first.
|
|
55
|
+
Keep material uncertainty beside the claim it qualifies.
|
|
56
|
+
- **Reduce mental reconstruction:** connect a finding to its evidence and
|
|
57
|
+
explain why that evidence matters. A file list alone leaves that connection
|
|
58
|
+
for the reader to make.
|
|
59
|
+
- **Reduce initial overload:** present the decision-relevant summary, with
|
|
60
|
+
clear links to detailed findings, so you can inspect the supporting detail
|
|
61
|
+
when needed. Keep essential caveats in the summary.
|
|
62
|
+
- **Reduce relearning:** for recurring outputs, use an approved Knowledge
|
|
63
|
+
quality profile containing examples, headings, table structure, information
|
|
64
|
+
placement, detail, and criteria. Structural checks detect format differences;
|
|
65
|
+
independent review still judges meaning and evidential support.
|
|
66
|
+
|
|
67
|
+
For illustration, a change-review summary could read:
|
|
68
|
+
|
|
69
|
+
> **Decision needed:** Hold acceptance until the retry case is checked.
|
|
70
|
+
>
|
|
71
|
+
> **Verified:** The normal path passed against the agreed criteria; the findings
|
|
72
|
+
> link to the test evidence.
|
|
73
|
+
>
|
|
74
|
+
> **Still unknown:** Whether retrying after a timeout creates a duplicate.
|
|
75
|
+
>
|
|
76
|
+
> **Next step:** Test the retry case and return the result for review.
|
|
77
|
+
|
|
78
|
+
This example shows where the reader's attention belongs; it is not a universal
|
|
79
|
+
template or a real test result. Plain words, short sections, and clear connections
|
|
80
|
+
between a finding and its evidence help you follow the reasoning.
|
|
81
|
+
|
|
82
|
+
Reader feedback can identify a missing explanation, confusing placement, or
|
|
83
|
+
insufficient evidence. The correction can then target the output, inputs,
|
|
84
|
+
criteria, or procedure. Approved baselines stay intact; procedure changes require
|
|
85
|
+
explicit authorization.
|
|
86
|
+
|
|
87
|
+
The purpose is to make informed review less demanding. A familiar layout or a
|
|
88
|
+
passing record check does not establish correctness. See the
|
|
89
|
+
[reporting contract](docs/core/contracts/081_skill_reporting_contract.md#xid-6B2D9F4A1C73)
|
|
90
|
+
and [fixed-output quality protocol](docs/core/contracts/112_fixed_output_quality_protocol.md#xid-F9C2A8D471B0).
|
|
91
|
+
|
|
92
|
+
## How does XRefKit fit with modern agent harnesses?
|
|
93
|
+
|
|
94
|
+
Modern harnesses already support more than execution. They can preserve sessions,
|
|
95
|
+
organize repository knowledge and plans, and support evaluation criteria,
|
|
96
|
+
automated constraints, and structured handoffs. The capabilities available to
|
|
97
|
+
you depend on the harness and its configuration.
|
|
98
|
+
|
|
99
|
+
XRefKit's focus is the human effort of directing, understanding, and reviewing
|
|
100
|
+
that work. It packages reusable procedures, separately maintained knowledge,
|
|
101
|
+
work records, and reporting criteria as assets the team can inspect and maintain.
|
|
102
|
+
Repository files and Skill Packages preserve those assets; CLI/MCP interfaces
|
|
103
|
+
make them available to compatible clients.
|
|
104
|
+
|
|
105
|
+
Your coding harness can implement and test a change while XRefKit records the
|
|
106
|
+
applicable review method, references, findings, and open concerns. The report
|
|
107
|
+
then helps a person decide what the result supports and what to do next.
|
|
108
|
+
The client runs the model and tools; XRefKit's `verify` and `close` check
|
|
109
|
+
workflow records, while substantive quality needs appropriate tests and review.
|
|
110
|
+
|
|
111
|
+
If your harness already provides this structure, there may be little to add.
|
|
112
|
+
Use XRefKit when you want these work assets and review conventions made explicit
|
|
113
|
+
and reusable. This is a difference in packaged mechanisms and emphasis, not a
|
|
114
|
+
demonstrated advantage in cognitive load, quality, cost, or performance.
|
|
115
|
+
|
|
116
|
+
See the [Skill and Knowledge operating model](docs/core/models/052_flow_capability_skill_knowledge_model.md#xid-91C4B7E2D5A8)
|
|
117
|
+
and [Skill operating contract](docs/core/contracts/058_skill_operating_contract.md#xid-B7A2C94F0E61).
|
|
118
|
+
|
|
119
|
+
## Start with one recurring task
|
|
120
|
+
|
|
121
|
+
Choose a task you already know how to review: a document check, an investigation,
|
|
122
|
+
or a development handoff. Start with one procedure and the reference material it
|
|
123
|
+
needs, then use the resulting work record to decide what to improve.
|
|
124
|
+
|
|
125
|
+
### 1. Prepare your workspace
|
|
126
|
+
|
|
127
|
+
You need Python 3.11 or later. Run these commands in the folder where you want to work:
|
|
128
|
+
|
|
129
|
+
```powershell
|
|
130
|
+
python -m pip install xrefkit
|
|
131
|
+
xrefkit init
|
|
132
|
+
xrefkit --help
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Initialization creates the local XRefKit configuration and missing AI startup
|
|
136
|
+
files while preserving existing startup files. See the
|
|
137
|
+
[installation and Skill Package guide](docs/guides/089_xrefkit_package_first_registration.md#xid-4F8C2A7D1E90)
|
|
138
|
+
to add reusable Skills or bring existing material into your workspace.
|
|
139
|
+
|
|
140
|
+
For older custom Skills that call Python under a shared `tools/` directory,
|
|
141
|
+
connect your AI client and ask it to migrate the old environment. See
|
|
142
|
+
[guided legacy migration](docs/guides/117_guided_legacy_python_migration.md#xid-6D73C9A12E40)
|
|
143
|
+
for preparation, safe baseline tests, governed registration and client verification.
|
|
144
|
+
|
|
145
|
+
### 2. Connect your AI tool
|
|
146
|
+
|
|
147
|
+
For VS Code/Copilot, install the optional MCP integration and generate a setup proposal:
|
|
148
|
+
|
|
149
|
+
```powershell
|
|
150
|
+
python -m pip install "xrefkit[mcp]"
|
|
151
|
+
python -m xrefkit mcp setup --repo . --output .xrefkit/setup-review
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Review the generated files, then apply the setup:
|
|
155
|
+
|
|
156
|
+
```powershell
|
|
157
|
+
python -m xrefkit mcp setup apply --repo . --source .xrefkit/setup-review
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Open the workspace in VS Code, start the `xrefkit` MCP server, and ask in Copilot chat:
|
|
161
|
+
|
|
162
|
+
> Call XRefKit's get_startup_context and help me get started.
|
|
163
|
+
|
|
164
|
+
Then describe the task you want to accomplish. You do not need to know a Skill
|
|
165
|
+
name to ask for guidance. Opening VS Code alone does not start the conversation.
|
|
166
|
+
|
|
167
|
+
For an MCP client that accepts a local server command, the server entry point is:
|
|
168
|
+
|
|
169
|
+
```powershell
|
|
170
|
+
xrefkit mcp serve --repo . --transport stdio
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 3. Review the work and decide what comes next
|
|
174
|
+
|
|
175
|
+
Use the [Skill Run Dashboard](docs/guides/086_skill_run_observation_dashboard_usage.md#xid-4A4763A2DE63)
|
|
176
|
+
to inspect recorded progress, referenced knowledge, outputs, concerns, and
|
|
177
|
+
handoffs. It shows what was recorded and where observations are missing; you
|
|
178
|
+
decide whether the result is ready to use.
|
|
179
|
+
|
|
180
|
+
The [workflow walkthrough](docs/guides/087_workflow_protocol_sequence_for_humans.md#xid-E8B4D2F19A63)
|
|
181
|
+
explains how work moves from a request to verification and handoff.
|
|
182
|
+
|
|
183
|
+
## Choose your next step
|
|
184
|
+
|
|
185
|
+
- **Use existing procedures:** [Install and register Skill Packages](docs/guides/089_xrefkit_package_first_registration.md#xid-4F8C2A7D1E90).
|
|
186
|
+
- **Organize a task from your own instructions:** [Use an instruction-backed workflow](docs/guides/088_instruction_workflow_protocol.md#xid-9F4C2A7D1B60).
|
|
187
|
+
- **Capture your team's way of working:** [Understand Skills and Knowledge](docs/core/models/052_flow_capability_skill_knowledge_model.md#xid-91C4B7E2D5A8), then [author a Skill](docs/guides/013_skill_authoring_with_xref.md#xid-3DB05A0F5F5B).
|
|
188
|
+
- **Explore the details:** [Browse the documentation](docs/000_index.md#xid-56DD6EB68343).
|
|
189
|
+
|
|
190
|
+
## Optional: explore model fit with Attention Pet
|
|
191
|
+
|
|
192
|
+
The experimental [Attention Pet](projects/attention-pet/README.en.md) companion
|
|
193
|
+
helps Codex users inspect estimates of model suitability and compare lower-cost
|
|
194
|
+
candidates using the visible work context. Run it from a Codex terminal in this repository:
|
|
195
|
+
|
|
196
|
+
```powershell
|
|
197
|
+
python -m xrefkit.attention_pet serve --port 8769
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Open the printed address in the Codex browser panel. The preview follows the chat
|
|
201
|
+
that launched it. Its estimates are uncalibrated; it does not measure internal
|
|
202
|
+
attention or token usage, and it does not change your model settings.
|
|
203
|
+
|
|
204
|
+
## Contribute or maintain a deployment
|
|
205
|
+
|
|
206
|
+
For local development, install this checkout with `python -m pip install -e .`.
|
|
207
|
+
The [pipeline dependency reference](docs/reference/125_pipeline_dependency_matrix.md#xid-7E4B19C2A860)
|
|
208
|
+
describes CI and publication triggers. Internal authoring and runtime details are
|
|
209
|
+
in the [SkillDefinition contract](docs/core/contracts/096_skill_definition_contract.md#xid-E6A19D4B72C3)
|
|
210
|
+
and [Workflow Runtime Binding contract](docs/core/contracts/111_workflow_runtime_binding.md#xid-8D50A972BA9F).
|
|
211
|
+
|
|
212
|
+
XRefKit does not require provider API keys to install or explore the package.
|
|
213
|
+
Authenticate your AI tool through its provider's supported methods, and keep
|
|
214
|
+
secrets and access tokens out of the repository.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"""CI cleanup must retain release coverage and only cancel obsolete PR runs."""
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
import yaml
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
WORKFLOWS = Path(__file__).resolve().parents[1] / ".github/workflows"
|
|
9
|
+
PACKAGES = {
|
|
10
|
+
"python-package.yml": ("Core", "v*.*.*", {"sdist-install-smoke", "skill-compatibility"}),
|
|
11
|
+
"python-skill-brownfield-package.yml": (
|
|
12
|
+
"Brownfield", "xrefkit-skills-brownfield-v*.*.*", {"sdist-install-smoke"}),
|
|
13
|
+
"python-skill-csharp-package.yml": ("CSharp", "xrefkit-skills-csharp-v*.*.*", set()),
|
|
14
|
+
"python-skill-batch-regression-package.yml": (
|
|
15
|
+
"Batch regression", "xrefkit-skills-batch-regression-v*.*.*", {"sdist-install-smoke"}),
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def workflow(filename):
|
|
20
|
+
# BaseLoader preserves GitHub's `on` key instead of YAML 1.1's boolean True.
|
|
21
|
+
return yaml.load((WORKFLOWS / filename).read_text(encoding="utf-8"), Loader=yaml.BaseLoader)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_core_full_quality_gate_runs_once_and_retains_security():
|
|
25
|
+
matches = []
|
|
26
|
+
for path in WORKFLOWS.glob("*.yml"):
|
|
27
|
+
for job_id, job in workflow(path.name).get("jobs", {}).items():
|
|
28
|
+
for step in job.get("steps", []):
|
|
29
|
+
if "python tools/run_quality_gate.py xrefkit" in step.get("run", ""):
|
|
30
|
+
matches.append((path.name, job_id))
|
|
31
|
+
assert matches == [("python-package.yml", "quality")]
|
|
32
|
+
runs = "\n".join(step.get("run", "") for step in workflow("python-package.yml")["jobs"]["quality"]["steps"])
|
|
33
|
+
assert '".[test,mcp]"' in runs
|
|
34
|
+
assert 'bandit -r "${PYTHON_SOURCE_ROOT}" -ll' in runs
|
|
35
|
+
assert "-r requirements.txt" in runs and "--local" in runs and "--skip-editable" in runs
|
|
36
|
+
slides = workflow("xref-check.yml")
|
|
37
|
+
assert set(slides["jobs"]) == {"slides-app-quality"}
|
|
38
|
+
assert any("run_quality_gate.py slides-app --install-node-deps" in step.get("run", "")
|
|
39
|
+
for step in slides["jobs"]["slides-app-quality"]["steps"])
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@pytest.mark.parametrize("filename", [*PACKAGES, "xref-check.yml"])
|
|
43
|
+
def test_only_superseded_pull_request_runs_are_canceled(filename):
|
|
44
|
+
data = workflow(filename)
|
|
45
|
+
assert data["concurrency"] == {
|
|
46
|
+
"group": "${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}",
|
|
47
|
+
"cancel-in-progress": "${{ github.event_name == 'pull_request' }}",
|
|
48
|
+
}
|
|
49
|
+
assert "pull_request" in data["on"]
|
|
50
|
+
if filename in {"python-package.yml", "xref-check.yml"}:
|
|
51
|
+
assert data["on"]["push"]["branches"] == ["main"]
|
|
52
|
+
else:
|
|
53
|
+
assert "branches" not in data["on"]["push"]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@pytest.mark.parametrize("filename", PACKAGES)
|
|
57
|
+
def test_release_gates_and_unique_target_names_are_retained(filename):
|
|
58
|
+
prefix, tag, extra_gates = PACKAGES[filename]
|
|
59
|
+
data = workflow(filename)
|
|
60
|
+
jobs = data["jobs"]
|
|
61
|
+
gates = {"quality", "build-distribution", "artifact-inspection", "install-smoke-test"} | extra_gates
|
|
62
|
+
assert set(jobs) == gates | {"publish-to-pypi"}
|
|
63
|
+
assert set(jobs["publish-to-pypi"]["needs"]) == gates
|
|
64
|
+
for job_id in gates - {"quality", "build-distribution"}:
|
|
65
|
+
assert jobs[job_id]["needs"] == "build-distribution"
|
|
66
|
+
assert data["on"]["push"]["tags"] == [tag]
|
|
67
|
+
assert jobs["publish-to-pypi"]["if"] == (
|
|
68
|
+
"github.event_name == 'push' && startsWith(github.ref, 'refs/tags/" + tag.split("*")[0] + "')")
|
|
69
|
+
assert jobs["publish-to-pypi"]["permissions"]["id-token"] == "write"
|
|
70
|
+
assert data["permissions"] == {"contents": "read"}
|
|
71
|
+
names = [job["name"] for job in jobs.values()]
|
|
72
|
+
assert len(set(names)) == len(names)
|
|
73
|
+
assert all(name.startswith(prefix + " / ") for name in names)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def accepts_changes(filename, event, files):
|
|
77
|
+
from fnmatch import fnmatchcase
|
|
78
|
+
|
|
79
|
+
config = workflow(filename)["on"].get(event)
|
|
80
|
+
if config is None:
|
|
81
|
+
return False
|
|
82
|
+
if not isinstance(config, dict):
|
|
83
|
+
return True
|
|
84
|
+
if "paths" in config:
|
|
85
|
+
return any(fnmatchcase(path, pattern) for path in files for pattern in config["paths"])
|
|
86
|
+
return any(not any(fnmatchcase(path, pattern) for pattern in config.get("paths-ignore", []))
|
|
87
|
+
for path in files)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@pytest.mark.parametrize("filename", [*PACKAGES, "xref-check.yml", "pages.yml",
|
|
91
|
+
"xrefkit-skills-xddp-design.yml"])
|
|
92
|
+
def test_readme_only_changes_skip_unrelated_workflows(filename):
|
|
93
|
+
for event in ("pull_request", "push"):
|
|
94
|
+
# Tag pushes deliberately do not evaluate GitHub path filters.
|
|
95
|
+
if event == "push" and "branches" not in workflow(filename)["on"].get(event, {}):
|
|
96
|
+
continue
|
|
97
|
+
assert not accepts_changes(filename, event, ["README.md"])
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@pytest.mark.parametrize("path", ["xrefkit/cli.py", "docs/core/contracts/example.md",
|
|
101
|
+
"skills/example/SKILL.v1.md", "knowledge/example.md",
|
|
102
|
+
"agent/000_agent_entry.md", "tests/test_example.py"])
|
|
103
|
+
def test_readme_exclusion_retains_core_and_governance_checks(path):
|
|
104
|
+
for event in ("pull_request", "push"):
|
|
105
|
+
assert accepts_changes("python-package.yml", event, [path])
|
|
106
|
+
assert accepts_changes("python-package.yml", event, ["README.md", path])
|
|
107
|
+
assert workflow("python-package.yml")["on"]["pull_request"]["paths"] == workflow("python-package.yml")["on"]["push"]["paths"]
|
|
108
|
+
assert "README.md" not in workflow("python-package.yml")["on"]["push"]["paths"]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@pytest.mark.parametrize("package", ["batch-regression", "brownfield", "csharp"])
|
|
112
|
+
def test_skill_packages_cover_own_sources_and_shared_dependencies(package):
|
|
113
|
+
filename = f"python-skill-{package}-package.yml"
|
|
114
|
+
for path in [f"packages/xrefkit-skills-{package}/tests/test_package.py",
|
|
115
|
+
f".github/workflows/{filename}", "tools/inspect_python_artifacts.py"]:
|
|
116
|
+
assert accepts_changes(filename, "pull_request", [path])
|
|
117
|
+
if package in {"brownfield", "batch-regression"}:
|
|
118
|
+
assert accepts_changes(filename, "pull_request", ["tools/run_import_smoke.py"])
|
|
119
|
+
for path in ["projects/slides-app/src/App.tsx", "xrefkit/workspace.py",
|
|
120
|
+
"pyproject.toml", "requirements.txt", "docs/core/contracts/example.md"]:
|
|
121
|
+
assert not accepts_changes(filename, "pull_request", [path])
|
|
122
|
+
assert accepts_changes(filename, "pull_request", [path, f"packages/xrefkit-skills-{package}/pyproject.toml"])
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def test_slides_inputs_and_pages_manifest_inputs_are_covered():
|
|
126
|
+
import json
|
|
127
|
+
|
|
128
|
+
for event in ("pull_request", "push"):
|
|
129
|
+
for path in ["projects/slides-app/package.json", "tools/run_quality_gate.py",
|
|
130
|
+
"requirements.txt", ".github/workflows/xref-check.yml"]:
|
|
131
|
+
assert accepts_changes("xref-check.yml", event, [path])
|
|
132
|
+
assert not accepts_changes("xref-check.yml", event, ["xrefkit/cli.py"])
|
|
133
|
+
manifest = json.loads((WORKFLOWS.parents[1] / "site/source_manifest.json").read_text())
|
|
134
|
+
for tree in manifest["trees"]:
|
|
135
|
+
assert accepts_changes("pages.yml", "push", [tree["source"] + "/index.html"])
|
|
136
|
+
for path in ["site/source_manifest.json", "site/index.html", "tools/site_build.py",
|
|
137
|
+
"tools/site_release_metadata.py", ".github/workflows/pages.yml"]:
|
|
138
|
+
assert accepts_changes("pages.yml", "push", [path])
|
|
139
|
+
assert not accepts_changes("pages.yml", "push", ["human-docs/ja/unrelated.md"])
|
|
140
|
+
data = workflow("pages.yml")
|
|
141
|
+
assert {"release", "workflow_run", "workflow_dispatch"} <= set(data["on"])
|
|
142
|
+
condition = data["jobs"]["deploy"]["if"]
|
|
143
|
+
assert "github.event.workflow_run.conclusion == 'success'" in condition
|
|
144
|
+
assert "github.event.workflow_run.event == 'push'" in condition
|
|
145
|
+
assert "startsWith(github.event.workflow_run.head_branch, 'v')" in condition
|
|
146
|
+
assert "github.event.workflow_run.head_repository.full_name == github.repository" in condition
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def test_all_workflows_parse_and_sync_still_includes_readme_updates():
|
|
150
|
+
for path in WORKFLOWS.glob("*.yml"):
|
|
151
|
+
data = workflow(path.name)
|
|
152
|
+
assert isinstance(data["on"], dict)
|
|
153
|
+
assert isinstance(data["jobs"], dict)
|
|
154
|
+
assert accepts_changes("sync-main-without-mp4.yml", "push", ["README.md"])
|
|
155
|
+
assert workflow("sync-main-without-mp4.yml")["on"]["push"] == {"branches": ["main"]}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
@pytest.mark.parametrize("path", [
|
|
159
|
+
"xrefkit/resources/base/current.json", "tools/check_skill_compatibility.py",
|
|
160
|
+
"tools/check_installed_skill_contract.py", "tools/official_skill_packages.json",
|
|
161
|
+
"packages/xrefkit-skills-xddp-design/pyproject.toml", "packages/new-skill/pyproject.toml",
|
|
162
|
+
"governance/skills/planning_flow.json", "observations/trial_basis.md",
|
|
163
|
+
"packs/example/skills/example/SKILL.v1.md", "flows/example.yaml",
|
|
164
|
+
"work/sessions/tracked_run.md", "work/retrospectives/example.md",
|
|
165
|
+
"site/sources/index.html", "projects/attention-pet/schema/fit.schema.json",
|
|
166
|
+
"projects/new-app/package.json", "projects/new-app/package-lock.json",
|
|
167
|
+
"projects/new-app/README.md", "ownership.yaml", "xrefkit.toml", "LICENSE",
|
|
168
|
+
".gitattributes", ".gitignore", ".github/workflows/pages.yml",
|
|
169
|
+
])
|
|
170
|
+
def test_core_dependency_inputs_trigger_branch_and_pr_checks(path):
|
|
171
|
+
for event in ("pull_request", "push"):
|
|
172
|
+
assert accepts_changes("python-package.yml", event, [path])
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@pytest.mark.parametrize("path", ["README.md", "CHANGELOG.md", "human-docs/ja/article.md",
|
|
176
|
+
"projects/slides-app/src/App.tsx", "work/plans/example.md",
|
|
177
|
+
"sources/unconsumed.pdf"])
|
|
178
|
+
def test_unconsumed_inputs_do_not_trigger_core_but_mixed_changes_do(path):
|
|
179
|
+
for event in ("pull_request", "push"):
|
|
180
|
+
assert not accepts_changes("python-package.yml", event, [path])
|
|
181
|
+
assert accepts_changes("python-package.yml", event, [path, "xrefkit/cli.py"])
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def test_shared_tools_trigger_only_consumers():
|
|
185
|
+
assert accepts_changes("python-package.yml", "pull_request", ["tools/inspect_python_artifacts.py"])
|
|
186
|
+
for filename in list(PACKAGES)[1:] + ["xrefkit-skills-xddp-design.yml"]:
|
|
187
|
+
assert accepts_changes(filename, "pull_request", ["tools/inspect_python_artifacts.py"])
|
|
188
|
+
assert not accepts_changes(filename, "pull_request", ["tools/run_quality_gate.py"])
|
|
189
|
+
assert not accepts_changes("python-skill-csharp-package.yml", "pull_request", ["tools/run_import_smoke.py"])
|
|
190
|
+
assert not accepts_changes("xrefkit-skills-xddp-design.yml", "pull_request", ["xrefkit/cli.py"])
|