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.
Files changed (260) hide show
  1. xrefkit-0.7.1/PKG-INFO +253 -0
  2. xrefkit-0.7.1/README.md +214 -0
  3. {xrefkit-0.6.3 → xrefkit-0.7.1}/pyproject.toml +1 -1
  4. xrefkit-0.7.1/tests/test_ci_workflow_invariants.py +190 -0
  5. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_contribution_returns.py +4 -2
  6. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_embedded_startup_pack.py +3 -0
  7. xrefkit-0.7.1/tests/test_legacy_guidance.py +370 -0
  8. xrefkit-0.7.1/tests/test_legacy_resources.py +221 -0
  9. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_repository_skill_adoption.py +9 -2
  10. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/__init__.py +1 -1
  11. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/catalog.py +73 -1
  12. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contribution_returns.py +4 -6
  13. xrefkit-0.7.1/xrefkit/mcp/legacy_guidance.py +295 -0
  14. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/legacy_migration.py +178 -11
  15. xrefkit-0.7.1/xrefkit/mcp/legacy_resources.py +156 -0
  16. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/server.py +37 -0
  17. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/startup_contract_pack.py +54 -1
  18. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/000_agent_entry.md +53 -0
  19. xrefkit-0.7.1/xrefkit/resources/base/startup_sources/yomiyasu_LICENSE.txt +21 -0
  20. xrefkit-0.7.1/xrefkit/resources/migration/docs/guides/062_legacy_flow_skill_migration_guide.md +129 -0
  21. xrefkit-0.7.1/xrefkit/resources/migration/knowledge/operations/130_legacy_flow_skill_migration_rules.md +81 -0
  22. xrefkit-0.7.1/xrefkit/resources/migration/knowledge/organization/160_context_direction_guard_rules.md +84 -0
  23. xrefkit-0.7.1/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/SKILL.v1.md +290 -0
  24. xrefkit-0.7.1/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/references/legacy_flow_skill_migration_template.md +28 -0
  25. xrefkit-0.7.1/xrefkit/resources/migration/skills/repository_adoption.json +78 -0
  26. xrefkit-0.7.1/xrefkit/resources/migration/tools/migrate_legacy_flow_skill.py +245 -0
  27. xrefkit-0.7.1/xrefkit.egg-info/PKG-INFO +253 -0
  28. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/SOURCES.txt +12 -0
  29. xrefkit-0.6.3/PKG-INFO +0 -224
  30. xrefkit-0.6.3/README.md +0 -185
  31. xrefkit-0.6.3/tests/test_ci_workflow_invariants.py +0 -75
  32. xrefkit-0.6.3/xrefkit.egg-info/PKG-INFO +0 -224
  33. {xrefkit-0.6.3 → xrefkit-0.7.1}/LICENSE +0 -0
  34. {xrefkit-0.6.3 → xrefkit-0.7.1}/setup.cfg +0 -0
  35. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_artifact_selected_family.py +0 -0
  36. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet.py +0 -0
  37. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_client_protocol.py +0 -0
  38. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_codex_session.py +0 -0
  39. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_attention_pet_fit.py +0 -0
  40. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_connection.py +0 -0
  41. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_import.py +0 -0
  42. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_recovery.py +0 -0
  43. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_update_candidate.py +0 -0
  44. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_azure_writer.py +0 -0
  45. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_boundary_analysis.py +0 -0
  46. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_brownfield_csharp_structure_definitions.py +0 -0
  47. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_brownfield_file_editing_protocol.py +0 -0
  48. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_business_intake_conversation_definitions.py +0 -0
  49. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_business_intake_definition.py +0 -0
  50. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_calibration_lint.py +0 -0
  51. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_catalog_preparation_definition.py +0 -0
  52. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_check_skill_knowledge_xids.py +0 -0
  53. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cli.py +0 -0
  54. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_code_constraint_definition.py +0 -0
  55. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_collect_analyzer_sarif.py +0 -0
  56. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_constraint_derivation_family_definition.py +0 -0
  57. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_constraint_derivation_selected_family.py +0 -0
  58. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_convert_to_xrefkit_skill.py +0 -0
  59. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cs_scope_probe.py +0 -0
  60. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_csharp_commonality.py +0 -0
  61. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_csharp_naming_profile.py +0 -0
  62. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ctx.py +0 -0
  63. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_cutover_readiness.py +0 -0
  64. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_dashboard.py +0 -0
  65. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_database_batch_definition_migration.py +0 -0
  66. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_decision_trace.py +0 -0
  67. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_design_business_intake_selected_family.py +0 -0
  68. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_design_planning_definition_migration.py +0 -0
  69. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_dotnet_definition_candidate.py +0 -0
  70. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_family_definition.py +0 -0
  71. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_intake_definition.py +0 -0
  72. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_editorial_selected_family.py +0 -0
  73. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_error_policy_audit.py +0 -0
  74. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_error_policy_locator.py +0 -0
  75. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_execution_binding.py +0 -0
  76. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_existing_skill_definition_batch.py +0 -0
  77. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_final_skilldefinition_batch.py +0 -0
  78. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_flow_selected_family.py +0 -0
  79. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_fm_multiroot.py +0 -0
  80. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gate.py +0 -0
  81. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway.py +0 -0
  82. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_mcp.py +0 -0
  83. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_skill_adapter.py +0 -0
  84. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_gateway_work_items.py +0 -0
  85. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_goal_desired_state.py +0 -0
  86. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_governance_entry.py +0 -0
  87. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_host_precheck.py +0 -0
  88. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_human_evaluation.py +0 -0
  89. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_implementation_flow_definition.py +0 -0
  90. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_implementation_review_selected_family.py +0 -0
  91. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_inbound_uploads.py +0 -0
  92. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_instruction_workflow.py +0 -0
  93. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_knowledge_relations_validator.py +0 -0
  94. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_language_review_definition.py +0 -0
  95. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_legacy_migration.py +0 -0
  96. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_package_routing.py +0 -0
  97. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_setup.py +0 -0
  98. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_subagent_startup.py +0 -0
  99. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_mcp_subagent_startup_integration.py +0 -0
  100. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ontology_assessment_validator.py +0 -0
  101. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_family_definition.py +0 -0
  102. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_knowledge_family_definition.py +0 -0
  103. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_os_selected_family.py +0 -0
  104. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_ownership.py +0 -0
  105. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_packmeta.py +0 -0
  106. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_plan_markdown.py +0 -0
  107. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_plan_observation.py +0 -0
  108. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_project_quality_baseline.py +0 -0
  109. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_qa_report_definition.py +0 -0
  110. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_reporting_profiles.py +0 -0
  111. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_reporting_quality.py +0 -0
  112. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_repository_startup_pack.py +0 -0
  113. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_resource_provider.py +0 -0
  114. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_runtime_contracts.py +0 -0
  115. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_sarif_to_locator.py +0 -0
  116. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_security_definition_migration.py +0 -0
  117. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_site_release_metadata.py +0 -0
  118. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition.py +0 -0
  119. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_governance.py +0 -0
  120. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_mcp.py +0 -0
  121. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_definition_runtime.py +0 -0
  122. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_edits.py +0 -0
  123. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_maturity_return.py +0 -0
  124. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_release_compatibility.py +0 -0
  125. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skill_runtime_audit.py +0 -0
  126. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skillmeta.py +0 -0
  127. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_skills_sync.py +0 -0
  128. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_source_analysis_fragments.py +0 -0
  129. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_structure_catalog.py +0 -0
  130. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_subagent_startup.py +0 -0
  131. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_subagent_startup_boundaries.py +0 -0
  132. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_wbs.py +0 -0
  133. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_work_management.py +0 -0
  134. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_work_packages.py +0 -0
  135. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_workflow_family_definition.py +0 -0
  136. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xref.py +0 -0
  137. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_instance.py +0 -0
  138. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_tools.py +0 -0
  139. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_discovery.py +0 -0
  140. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_models.py +0 -0
  141. {xrefkit-0.6.3 → xrefkit-0.7.1}/tests/test_xrefkit_v2_pipeline.py +0 -0
  142. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/__main__.py +0 -0
  143. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/__init__.py +0 -0
  144. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/__main__.py +0 -0
  145. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/client.py +0 -0
  146. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/client_protocol.py +0 -0
  147. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/codex_session.py +0 -0
  148. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/evaluator.py +0 -0
  149. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/model.py +0 -0
  150. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/presentation.py +0 -0
  151. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/profiles.py +0 -0
  152. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/scenarios.py +0 -0
  153. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/server.py +0 -0
  154. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/attention_pet/store.py +0 -0
  155. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_connection.py +0 -0
  156. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_import.py +0 -0
  157. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_recovery.py +0 -0
  158. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_update_candidate.py +0 -0
  159. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/azure_writer.py +0 -0
  160. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/boundary_analysis.py +0 -0
  161. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/catalog_cli.py +0 -0
  162. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/cli.py +0 -0
  163. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/contracts.py +0 -0
  164. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/ctx.py +0 -0
  165. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/dashboard.py +0 -0
  166. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/decision_trace.py +0 -0
  167. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/discovery.py +0 -0
  168. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/execution_binding.py +0 -0
  169. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/execution_binding_cli.py +0 -0
  170. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/gate.py +0 -0
  171. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/gateway.py +0 -0
  172. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/goalstate.py +0 -0
  173. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/governance_entry.py +0 -0
  174. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/governance_entry_cli.py +0 -0
  175. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/hashing.py +0 -0
  176. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/host_precheck.py +0 -0
  177. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/import_skill.py +0 -0
  178. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/instance.py +0 -0
  179. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/loaders.py +0 -0
  180. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/__init__.py +0 -0
  181. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/audit.py +0 -0
  182. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/bootstrap.py +0 -0
  183. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/cli.py +0 -0
  184. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/client_cache.py +0 -0
  185. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/client_flow.py +0 -0
  186. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/context_registry.py +0 -0
  187. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/context_token.py +0 -0
  188. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contracts.py +0 -0
  189. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/contribution_adoption.py +0 -0
  190. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/dist.py +0 -0
  191. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/gateway.py +0 -0
  192. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/governed_overlays.py +0 -0
  193. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/inbound_uploads.py +0 -0
  194. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/knowledge_edits.py +0 -0
  195. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/ownership.py +0 -0
  196. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/repository.py +0 -0
  197. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/schemas.py +0 -0
  198. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/setup.py +0 -0
  199. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/skill_edits.py +0 -0
  200. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/skill_maturity.py +0 -0
  201. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/subagent_startup.py +0 -0
  202. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp/update_gate_intake.py +0 -0
  203. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/mcp_tools.py +0 -0
  204. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/__init__.py +0 -0
  205. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/common.py +0 -0
  206. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/effective_bundle.py +0 -0
  207. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/human_evaluation.py +0 -0
  208. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/local_manifest.py +0 -0
  209. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/package_manifest.py +0 -0
  210. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/run_log.py +0 -0
  211. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/server_config.py +0 -0
  212. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/models/skill_definition.py +0 -0
  213. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/operations_cli.py +0 -0
  214. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/ownership.py +0 -0
  215. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/packmeta.py +0 -0
  216. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/plan_markdown.py +0 -0
  217. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/plan_observation.py +0 -0
  218. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/registry.py +0 -0
  219. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/reporting.py +0 -0
  220. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/reporting_profiles.py +0 -0
  221. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/repository_skills.py +0 -0
  222. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resolver.py +0 -0
  223. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resource_provider.py +0 -0
  224. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/client-state.schema.json +0 -0
  225. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.css +0 -0
  226. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.html +0 -0
  227. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/attention_pet/pet.js +0 -0
  228. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/contracts.json +0 -0
  229. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/current.json +0 -0
  230. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/7a682a5272907354/contracts.json +0 -0
  231. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/7a682a5272907354/model_body.md +0 -0
  232. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/9929294385ccb7b0/contracts.json +0 -0
  233. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/generations/9929294385ccb7b0/model_body.md +0 -0
  234. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/model_body.md +0 -0
  235. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/011_startup_xref_routing.md +0 -0
  236. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/015_shared_memory_operations.md +0 -0
  237. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/016_uncertainty_protocol.md +0 -0
  238. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/017_base_and_xref_layering.md +0 -0
  239. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/resources/base/startup_sources/053_context_direction_security_guard.md +0 -0
  240. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/runlog.py +0 -0
  241. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition.py +0 -0
  242. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition_catalog.py +0 -0
  243. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skill_definition_governance.py +0 -0
  244. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skillmeta.py +0 -0
  245. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skillrun.py +0 -0
  246. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/skills_sync.py +0 -0
  247. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/structure_catalog.py +0 -0
  248. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/subagent_startup.py +0 -0
  249. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/tools/__init__.py +0 -0
  250. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/tools/__main__.py +0 -0
  251. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/v2_cli.py +0 -0
  252. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/wbs.py +0 -0
  253. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/work_management.py +0 -0
  254. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/work_management_view.py +0 -0
  255. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/workspace.py +0 -0
  256. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit/xref.py +0 -0
  257. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/dependency_links.txt +0 -0
  258. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/entry_points.txt +0 -0
  259. {xrefkit-0.6.3 → xrefkit-0.7.1}/xrefkit.egg-info/requires.txt +0 -0
  260. {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
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/xrefkit?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](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
+ ![Five sources of cognitive load and XRefKit's supporting mechanisms, with reports connecting conclusion, evidence, limits, and next action.](human-docs/en/assets/why_xrefkit_needed/whatis_xrefkit.png)
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.
@@ -0,0 +1,214 @@
1
+ # XRefKit
2
+
3
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/xrefkit?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](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
+ ![Five sources of cognitive load and XRefKit's supporting mechanisms, with reports connecting conclusion, evidence, limits, and next action.](human-docs/en/assets/why_xrefkit_needed/whatis_xrefkit.png)
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.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "xrefkit"
7
- version = "0.6.3"
7
+ version = "0.7.1"
8
8
  description = "Portable XID, Skill, Knowledge, workflow, and MCP runtime for XRefKit"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -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"])