xrefkit 0.7.3__tar.gz → 0.7.5__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.3/xrefkit.egg-info → xrefkit-0.7.5}/PKG-INFO +1 -1
- {xrefkit-0.7.3 → xrefkit-0.7.5}/pyproject.toml +1 -1
- xrefkit-0.7.5/tests/test_packaged_native_governance.py +54 -0
- xrefkit-0.7.5/tests/test_project_management_materialization.py +39 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_release_compatibility.py +25 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/__init__.py +1 -1
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/catalog.py +21 -3
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/startup_contract_pack.py +16 -1
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/package_manifest.py +9 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/000_agent_entry.md +15 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5/xrefkit.egg-info}/PKG-INFO +1 -1
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit.egg-info/SOURCES.txt +2 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/LICENSE +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/README.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/setup.cfg +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_artifact_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_attention_pet.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_attention_pet_client_protocol.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_attention_pet_codex_session.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_attention_pet_fit.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_azure_connection.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_azure_import.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_azure_recovery.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_azure_update_candidate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_azure_writer.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_boundary_analysis.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_brownfield_csharp_structure_definitions.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_brownfield_file_editing_protocol.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_business_intake_conversation_definitions.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_business_intake_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_calibration_lint.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_catalog_preparation_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_check_skill_knowledge_xids.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_ci_workflow_invariants.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_code_constraint_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_collect_analyzer_sarif.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_compact_skill_logs.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_constraint_derivation_family_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_constraint_derivation_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_contribution_adoption_bytes.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_contribution_returns.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_convert_to_xrefkit_skill.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_cs_scope_probe.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_csharp_commonality.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_csharp_naming_profile.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_ctx.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_cutover_readiness.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_dashboard.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_database_batch_definition_migration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_decision_trace.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_design_business_intake_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_design_planning_definition_migration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_dotnet_definition_candidate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_editorial_family_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_editorial_intake_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_editorial_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_embedded_startup_pack.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_error_policy_audit.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_error_policy_locator.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_execution_binding.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_existing_skill_definition_batch.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_final_skilldefinition_batch.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_flow_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_fm_multiroot.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_gate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_gateway.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_gateway_mcp.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_gateway_skill_adapter.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_gateway_work_items.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_goal_desired_state.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_governance_entry.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_host_precheck.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_human_evaluation.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_implementation_flow_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_implementation_review_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_inbound_uploads.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_instruction_workflow.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_knowledge_relations_validator.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_language_review_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_legacy_guidance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_legacy_migration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_legacy_resources.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_mcp_package_routing.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_mcp_setup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_mcp_subagent_startup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_mcp_subagent_startup_integration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_ontology_assessment_validator.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_os_family_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_os_knowledge_family_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_os_selected_family.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_ownership.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_packmeta.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_plan_markdown.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_plan_observation.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_project_quality_baseline.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_qa_report_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_reporting_profiles.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_reporting_quality.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_repository_skill_adoption.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_repository_startup_pack.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_resource_provider.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_runtime_contracts.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_sarif_to_locator.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_security_definition_migration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_site_release_metadata.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_definition_governance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_definition_mcp.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_definition_runtime.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_edits.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_maturity_return.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skill_runtime_audit.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skillmeta.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_skills_sync.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_source_analysis_fragments.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_structure_catalog.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_subagent_startup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_subagent_startup_boundaries.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_wbs.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_work_management.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_work_packages.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_workflow_family_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xref.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xrefkit_instance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xrefkit_tools.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xrefkit_v2_discovery.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xrefkit_v2_models.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/tests/test_xrefkit_v2_pipeline.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/__main__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/__init__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/__main__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/client.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/client_protocol.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/codex_session.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/evaluator.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/model.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/presentation.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/profiles.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/scenarios.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/server.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/attention_pet/store.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/azure_connection.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/azure_import.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/azure_recovery.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/azure_update_candidate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/azure_writer.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/boundary_analysis.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/catalog_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/contracts.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/ctx.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/dashboard.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/decision_trace.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/discovery.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/execution_binding.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/execution_binding_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/gate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/gateway.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/goalstate.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/governance_entry.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/governance_entry_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/hashing.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/host_precheck.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/import_skill.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/instance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/loaders.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/__init__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/audit.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/bootstrap.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/client_cache.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/client_flow.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/context_registry.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/context_token.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/contracts.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/contribution_adoption.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/contribution_returns.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/dist.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/gateway.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/governed_overlays.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/inbound_uploads.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/knowledge_edits.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/legacy_guidance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/legacy_migration.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/legacy_resources.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/ownership.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/repository.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/schemas.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/server.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/setup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/skill_edits.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/skill_maturity.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/subagent_startup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp/update_gate_intake.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/mcp_tools.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/__init__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/common.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/effective_bundle.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/human_evaluation.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/local_manifest.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/run_log.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/server_config.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/models/skill_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/operations_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/ownership.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/packmeta.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/plan_markdown.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/plan_observation.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/registry.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/reporting.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/reporting_profiles.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/repository_skills.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resolver.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resource_provider.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/attention_pet/client-state.schema.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/attention_pet/pet.css +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/attention_pet/pet.html +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/attention_pet/pet.js +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/contracts.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/current.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/generations/7a682a5272907354/contracts.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/generations/7a682a5272907354/model_body.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/generations/9929294385ccb7b0/contracts.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/generations/9929294385ccb7b0/model_body.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/model_body.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/011_startup_xref_routing.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/015_shared_memory_operations.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/016_uncertainty_protocol.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/017_base_and_xref_layering.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/053_context_direction_security_guard.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/base/startup_sources/yomiyasu_LICENSE.txt +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/docs/guides/062_legacy_flow_skill_migration_guide.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/knowledge/operations/130_legacy_flow_skill_migration_rules.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/knowledge/organization/160_context_direction_guard_rules.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/SKILL.v1.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/skills/os/legacy_flow_skill_migration/references/legacy_flow_skill_migration_template.md +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/skills/repository_adoption.json +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/resources/migration/tools/migrate_legacy_flow_skill.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/runlog.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skill_definition.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skill_definition_catalog.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skill_definition_governance.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skillmeta.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skillrun.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/skills_sync.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/structure_catalog.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/subagent_startup.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/tools/__init__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/tools/__main__.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/v2_cli.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/wbs.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/work_management.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/work_management_view.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/workspace.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit/xref.py +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit.egg-info/dependency_links.txt +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit.egg-info/entry_points.txt +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit.egg-info/requires.txt +0 -0
- {xrefkit-0.7.3 → xrefkit-0.7.5}/xrefkit.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import hashlib
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
import yaml
|
|
7
|
+
|
|
8
|
+
from xrefkit.discovery import DiscoveredSkillPackage
|
|
9
|
+
from xrefkit.loaders import load_package_manifest
|
|
10
|
+
from xrefkit.mcp.catalog import _build_package_skills
|
|
11
|
+
from xrefkit.models.package_manifest import ProvidedSkill
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def fixture(tmp_path):
|
|
15
|
+
root=Path(__file__).resolve().parents[1]
|
|
16
|
+
source=root/'skills/packs/project-management/progress_rules_setup/SKILL.v1.md'
|
|
17
|
+
(tmp_path/'skill.md').write_bytes(source.read_bytes())
|
|
18
|
+
gov=json.loads((root/'governance/skills/progress_rules_setup.json').read_text())
|
|
19
|
+
gov['definition_content_hash']=hashlib.sha256(source.read_bytes()).hexdigest()
|
|
20
|
+
(tmp_path/'governance.json').write_text(json.dumps(gov))
|
|
21
|
+
manifest={'package_id':'test.native','package_type':'skill_package','version':'0.1.0',
|
|
22
|
+
'requires':{'xrefkit_core':'>=2.0.0 <3.0.0'},'contract':{},
|
|
23
|
+
'provides':{'skills':[{'id':'progress_rules_setup','xid':'91F7D3B6A204','path':'skill.md','governance_path':'governance.json'}]}}
|
|
24
|
+
(tmp_path/'package_manifest.yaml').write_text(yaml.safe_dump(manifest))
|
|
25
|
+
return DiscoveredSkillPackage('test',tmp_path,tmp_path/'package_manifest.yaml',load_package_manifest(tmp_path/'package_manifest.yaml'))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_bound_native_draft_and_live_hash_check(tmp_path):
|
|
29
|
+
package=fixture(tmp_path)
|
|
30
|
+
assert _build_package_skills(package)[0].maturity=='draft'
|
|
31
|
+
(tmp_path/'skill.md').write_bytes((tmp_path/'skill.md').read_bytes()+b'\nchanged\n')
|
|
32
|
+
with pytest.raises(ValueError,match='content_hash'):
|
|
33
|
+
_build_package_skills(package)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_omitted_governance_preserves_existing_unassessed_behavior(tmp_path):
|
|
37
|
+
package=fixture(tmp_path)
|
|
38
|
+
package.manifest.provides.skills[0].governance_path=None
|
|
39
|
+
assert _build_package_skills(package)[0].maturity=='unassessed'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_legacy_governance_field_is_rejected():
|
|
43
|
+
with pytest.raises(ValueError,match='native Markdown'):
|
|
44
|
+
ProvidedSkill(id='legacy',xid='legacy.xid',path='legacy.yaml',governance_path='gov.json')
|
|
45
|
+
|
|
46
|
+
def test_packaged_draft_ranking_is_not_runnable(tmp_path):
|
|
47
|
+
from xrefkit.mcp.catalog import XRefCatalog
|
|
48
|
+
package=fixture(tmp_path)
|
|
49
|
+
catalog=XRefCatalog(tmp_path,'test','test',[],discovered_packages=(package,))
|
|
50
|
+
ranked=catalog.rank_skills_for_purpose('confirm progress rules and destinations')
|
|
51
|
+
row=next(r for r in ranked if r['skill_id']=='progress_rules_setup')
|
|
52
|
+
assert row['maturity']=='draft'
|
|
53
|
+
assert row['execution_readiness']['runnable'] is False
|
|
54
|
+
assert 'draft' in row['execution_readiness']['governance_block_reason']
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import shutil
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from tools.materialize_project_management_package import generate, main, PACKAGE
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_approved_bytes_cannot_be_rebound_after_link_transform(tmp_path):
|
|
11
|
+
root=Path(__file__).resolve().parents[1]
|
|
12
|
+
for rel in ['skills','governance','docs']:
|
|
13
|
+
# Source links resolve against the actual tree; copy only governed inputs,
|
|
14
|
+
# then use the real remaining targets through a full temporary fixture.
|
|
15
|
+
shutil.copytree(root/rel,tmp_path/rel)
|
|
16
|
+
gp=tmp_path/'governance/skills/requirements_discovery_coordination.json'
|
|
17
|
+
record=json.loads(gp.read_text())
|
|
18
|
+
record['maturity']='trial'
|
|
19
|
+
record['promotion']['decision']='approved'
|
|
20
|
+
gp.write_text(json.dumps(record))
|
|
21
|
+
with pytest.raises(ValueError,match='separate package governance'):
|
|
22
|
+
generate(tmp_path)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_stale_extra_managed_asset_is_rejected(tmp_path,monkeypatch):
|
|
26
|
+
target=tmp_path/PACKAGE/'skills'
|
|
27
|
+
target.mkdir(parents=True)
|
|
28
|
+
(target/'retired.md').write_text('stale')
|
|
29
|
+
monkeypatch.setattr('tools.materialize_project_management_package.generate',lambda root:{})
|
|
30
|
+
monkeypatch.setattr('sys.argv',['materialize','--root',str(tmp_path),'--check'])
|
|
31
|
+
with pytest.raises(SystemExit,match='unexpected managed asset'):
|
|
32
|
+
main()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_embedded_migration_adoption_matches_raw_bytes():
|
|
36
|
+
from xrefkit.repository_skills import load_repository_adoption
|
|
37
|
+
import xrefkit
|
|
38
|
+
root=Path(xrefkit.__file__).parent/'resources/migration'
|
|
39
|
+
assert load_repository_adoption(root)['entries']
|
|
@@ -91,6 +91,31 @@ def test_real_resolver_probe_passes_representative_fixture(tmp_path, monkeypatch
|
|
|
91
91
|
assert installed.verify_installed("demo", "official.demo", "0.6.1")["skills"] == ["demo.skill"]
|
|
92
92
|
|
|
93
93
|
|
|
94
|
+
def test_native_probe_uses_bound_catalog_and_rejects_changed_governance(tmp_path, monkeypatch):
|
|
95
|
+
from test_packaged_native_governance import fixture
|
|
96
|
+
from xrefkit import discovery
|
|
97
|
+
candidate = fixture(tmp_path)
|
|
98
|
+
monkeypatch.setattr(discovery, "discover_skill_packages", lambda: [candidate])
|
|
99
|
+
monkeypatch.setattr(installed.metadata, "version", lambda name: "0.7.5")
|
|
100
|
+
monkeypatch.setattr(installed.metadata, "distribution", lambda name: SimpleNamespace(
|
|
101
|
+
version="0.1.0", entry_points=[SimpleNamespace(group="xrefkit.skill_packages", name="test")]))
|
|
102
|
+
# This minimal fixture method uses repository links, so first replace it with
|
|
103
|
+
# an equivalent native method with no external file dependency and rebind draft.
|
|
104
|
+
path = tmp_path / "skill.md"
|
|
105
|
+
text = path.read_text().split("## Method", 1)[0] + "## Method\nInspect requested target.\n"
|
|
106
|
+
path.write_text(text)
|
|
107
|
+
import hashlib
|
|
108
|
+
gp = tmp_path / "governance.json"
|
|
109
|
+
record = json.loads(gp.read_text())
|
|
110
|
+
record["definition_content_hash"] = hashlib.sha256(path.read_bytes()).hexdigest()
|
|
111
|
+
gp.write_text(json.dumps(record))
|
|
112
|
+
assert installed.verify_installed("demo", "test.native", "0.7.5")["skills"] == ["progress_rules_setup"]
|
|
113
|
+
record["definition_content_hash"] = "0" * 64
|
|
114
|
+
gp.write_text(json.dumps(record))
|
|
115
|
+
with pytest.raises(ValueError, match="content_hash"):
|
|
116
|
+
installed.verify_installed("demo", "test.native", "0.7.5")
|
|
117
|
+
|
|
118
|
+
|
|
94
119
|
def test_real_protocol_rejection_stops_installed_probe(tmp_path, monkeypatch):
|
|
95
120
|
root, manifest, _ = contract_fixture(tmp_path, monkeypatch)
|
|
96
121
|
manifest["requires"]["xrefkit_core"] = ">=3.0.0"
|
|
@@ -1055,8 +1055,8 @@ class XRefCatalog:
|
|
|
1055
1055
|
]
|
|
1056
1056
|
# Declared preconditions travel with the ranking so the client can
|
|
1057
1057
|
# filter to Skills runnable in the current state (084 M4). Empty
|
|
1058
|
-
# until metas adopt preconditions;
|
|
1059
|
-
#
|
|
1058
|
+
# until metas adopt preconditions; known adoption and packaged
|
|
1059
|
+
# governance restrictions also constrain readiness below.
|
|
1060
1060
|
readiness = {
|
|
1061
1061
|
"runnable": not missing_tools,
|
|
1062
1062
|
"missing_tool_contracts": missing_tools,
|
|
@@ -1071,6 +1071,11 @@ class XRefCatalog:
|
|
|
1071
1071
|
"repository_adopted": skill.repository_adoption["effective_adopted"],
|
|
1072
1072
|
"historical_repository_adopted": skill.repository_adoption["adopted"],
|
|
1073
1073
|
})
|
|
1074
|
+
if skill.package_id and skill.maturity_governance and skill.maturity in {"draft", "deprecated"}:
|
|
1075
|
+
readiness.update({
|
|
1076
|
+
"runnable": False,
|
|
1077
|
+
"governance_block_reason": f"Packaged Skill maturity {skill.maturity} prohibits execution",
|
|
1078
|
+
})
|
|
1074
1079
|
if score <= 0:
|
|
1075
1080
|
continue
|
|
1076
1081
|
results.append(
|
|
@@ -2343,12 +2348,24 @@ def _build_package_skills(package: DiscoveredSkillPackage) -> list[SkillCatalogE
|
|
|
2343
2348
|
worklist_policy="required",
|
|
2344
2349
|
)
|
|
2345
2350
|
knowledge_needs = [dict(item) for item in meta["knowledge_needs"]]
|
|
2351
|
+
maturity_governance = None
|
|
2352
|
+
if provided.governance_path is not None:
|
|
2353
|
+
from ..skill_definition_governance import (
|
|
2354
|
+
governance_projection, load_governance_record, match_definition,
|
|
2355
|
+
)
|
|
2356
|
+
governance_path = (package_root / provided.governance_path).resolve()
|
|
2357
|
+
if not governance_path.is_relative_to(package_root):
|
|
2358
|
+
raise ValueError("package Skill governance path escapes package root")
|
|
2359
|
+
record = load_governance_record(governance_path)
|
|
2360
|
+
match_definition(record, definition)
|
|
2361
|
+
maturity_governance = governance_projection(record)
|
|
2362
|
+
maturity_governance["record_ref"]["path"] = governance_path.relative_to(package_root).as_posix()
|
|
2346
2363
|
entries.append(
|
|
2347
2364
|
SkillCatalogEntry(
|
|
2348
2365
|
skill_id=meta["skill_id"],
|
|
2349
2366
|
title=first_heading(method, meta["skill_id"]),
|
|
2350
2367
|
summary=meta["summary"],
|
|
2351
|
-
maturity="unassessed",
|
|
2368
|
+
maturity=maturity_governance["maturity"] if maturity_governance else "unassessed",
|
|
2352
2369
|
intent=list(meta["applies_when"]),
|
|
2353
2370
|
target_artifacts=list(meta["outputs"]),
|
|
2354
2371
|
applies_when=list(meta["applies_when"]),
|
|
@@ -2378,6 +2395,7 @@ def _build_package_skills(package: DiscoveredSkillPackage) -> list[SkillCatalogE
|
|
|
2378
2395
|
definition_format="skill_definition_v1",
|
|
2379
2396
|
definition_xid=meta["xid"],
|
|
2380
2397
|
definition_content_hash=definition["content_hash"],
|
|
2398
|
+
maturity_governance=maturity_governance,
|
|
2381
2399
|
)
|
|
2382
2400
|
)
|
|
2383
2401
|
continue
|
|
@@ -29,7 +29,7 @@ EMBEDDED_STARTUP_SOURCE_PATHS = {
|
|
|
29
29
|
# reports the pack as stale when they diverge, so a hand-maintained copy can
|
|
30
30
|
# no longer drift silently.
|
|
31
31
|
EMBEDDED_BASED_ON_HASHES = {
|
|
32
|
-
"0B5C58B5E5B2": "
|
|
32
|
+
"0B5C58B5E5B2": "67cfd78c24b8a7d0ff4a5e86a055b06bd020cc8920ebe25bf54a2087a83686be",
|
|
33
33
|
"5A1C8E4D2F90": "b4cc94e25ff8373d13bbe23beb9ad418fa9745d3e99506bcc8015c98a1c14b0a",
|
|
34
34
|
"6C0B62D6366A": "c4de2227516494e4112045a7b5dbf2a4c14285c1520c1f82a5013e22df1ecc5e",
|
|
35
35
|
"8A666C1FD121": "d03931f9892b6af13cd2b0fa7bc2112e06ed5a7f04bea6b9bd530594b516c4d0",
|
|
@@ -93,6 +93,16 @@ artifact. Review the draft before sending; no named invocation is required.
|
|
|
93
93
|
changes concretely; do not describe existing behavior as a newly completed change.
|
|
94
94
|
Preserve the source's polite or plain style unless a change is requested.
|
|
95
95
|
Do not vary endings merely for variety or strengthen advice into obligation.
|
|
96
|
+
- Before shortening an explanation, identify its main point and develop a
|
|
97
|
+
concrete explanation for the reader. Then remove repetition while retaining
|
|
98
|
+
actors, actions, reasons, and applicable conditions. Keep conditions beside
|
|
99
|
+
the statements they qualify. If the length limit would obscure meaning,
|
|
100
|
+
narrow the topic or revise the structure.
|
|
101
|
+
- Prefer actionable affirmative instructions. Retain negation when it carries
|
|
102
|
+
a prohibition, exception, limitation, or necessary comparison.
|
|
103
|
+
- Read the shortened explanation on its own. Restore missing context or
|
|
104
|
+
rebuild the explanation when it remains unclear; show the finished text
|
|
105
|
+
without the intermediate draft unless requested.
|
|
96
106
|
- Make subjects, predicates, objects, modifiers, pronouns, conditions, and
|
|
97
107
|
parallel clauses correspond clearly. Supply omitted words only when supported
|
|
98
108
|
by the source or conversation; do not resolve material ambiguity by guessing.
|
|
@@ -131,6 +141,11 @@ Source: nanaism/yomiyasu v2.1.3, commit
|
|
|
131
141
|
Copyright (c) 2026 nanaism. Repository source snapshot and license:
|
|
132
142
|
`sources/web/yomiyasu/SKILL.md` and `sources/web/yomiyasu/LICENSE`.
|
|
133
143
|
|
|
144
|
+
Additional explanation-first guidance: Kazuki Ota,
|
|
145
|
+
[Explain Before Shorten](https://zenn.dev/microsoft/articles/explain-before-shorten),
|
|
146
|
+
consulted 2026-10-31. The guidance above is a concise adaptation of its writing
|
|
147
|
+
approach, not an installation of the article's Skill or invocation rules.
|
|
148
|
+
|
|
134
149
|
## Protocol boundary and runtime routing
|
|
135
150
|
|
|
136
151
|
The live get_startup_context response returns prompt_flow_protocol,
|
|
@@ -35,12 +35,21 @@ class ProvidedAsset(StrictModel):
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class ProvidedSkill(ProvidedAsset):
|
|
38
|
+
governance_path: str | None = None
|
|
38
39
|
contract_role: str | None = None
|
|
39
40
|
required_outputs: list[str] = Field(default_factory=list)
|
|
40
41
|
required_knowledge: list[str] = Field(default_factory=list)
|
|
41
42
|
required_review_axes: list[str] = Field(default_factory=list)
|
|
42
43
|
must_not: list[str] = Field(default_factory=list)
|
|
43
44
|
|
|
45
|
+
@model_validator(mode="after")
|
|
46
|
+
def _validate_governance_path(self) -> "ProvidedSkill":
|
|
47
|
+
if self.governance_path is not None:
|
|
48
|
+
validate_non_empty(self.governance_path, "governance_path")
|
|
49
|
+
if not self.path.lower().endswith(".md"):
|
|
50
|
+
raise ValueError("governance_path requires a native Markdown SkillDefinition")
|
|
51
|
+
return self
|
|
52
|
+
|
|
44
53
|
@field_validator("required_outputs", "required_knowledge", "required_review_axes", "must_not")
|
|
45
54
|
@classmethod
|
|
46
55
|
def _validate_string_list(cls, values: list[str]) -> list[str]:
|
|
@@ -62,6 +62,16 @@ artifact. Review the draft before sending; no named invocation is required.
|
|
|
62
62
|
changes concretely; do not describe existing behavior as a newly completed change.
|
|
63
63
|
Preserve the source's polite or plain style unless a change is requested.
|
|
64
64
|
Do not vary endings merely for variety or strengthen advice into obligation.
|
|
65
|
+
- Before shortening an explanation, identify its main point and develop a
|
|
66
|
+
concrete explanation for the reader. Then remove repetition while retaining
|
|
67
|
+
actors, actions, reasons, and applicable conditions. Keep conditions beside
|
|
68
|
+
the statements they qualify. If the length limit would obscure meaning,
|
|
69
|
+
narrow the topic or revise the structure.
|
|
70
|
+
- Prefer actionable affirmative instructions. Retain negation when it carries
|
|
71
|
+
a prohibition, exception, limitation, or necessary comparison.
|
|
72
|
+
- Read the shortened explanation on its own. Restore missing context or
|
|
73
|
+
rebuild the explanation when it remains unclear; show the finished text
|
|
74
|
+
without the intermediate draft unless requested.
|
|
65
75
|
- Make subjects, predicates, objects, modifiers, pronouns, conditions, and
|
|
66
76
|
parallel clauses correspond clearly. Supply omitted words only when supported
|
|
67
77
|
by the source or conversation; do not resolve material ambiguity by guessing.
|
|
@@ -100,6 +110,11 @@ Source: nanaism/yomiyasu v2.1.3, commit
|
|
|
100
110
|
Copyright (c) 2026 nanaism. Repository source snapshot and license:
|
|
101
111
|
`sources/web/yomiyasu/SKILL.md` and `sources/web/yomiyasu/LICENSE`.
|
|
102
112
|
|
|
113
|
+
Additional explanation-first guidance: Kazuki Ota,
|
|
114
|
+
[Explain Before Shorten](https://zenn.dev/microsoft/articles/explain-before-shorten),
|
|
115
|
+
consulted 2026-10-31. The guidance above is a concise adaptation of its writing
|
|
116
|
+
approach, not an installation of the article's Skill or invocation rules.
|
|
117
|
+
|
|
103
118
|
## How to reference (fixed procedure)
|
|
104
119
|
|
|
105
120
|
1. Read skill routing entry: `skills/_index.md`
|
|
@@ -78,9 +78,11 @@ tests/test_os_family_definition.py
|
|
|
78
78
|
tests/test_os_knowledge_family_definition.py
|
|
79
79
|
tests/test_os_selected_family.py
|
|
80
80
|
tests/test_ownership.py
|
|
81
|
+
tests/test_packaged_native_governance.py
|
|
81
82
|
tests/test_packmeta.py
|
|
82
83
|
tests/test_plan_markdown.py
|
|
83
84
|
tests/test_plan_observation.py
|
|
85
|
+
tests/test_project_management_materialization.py
|
|
84
86
|
tests/test_project_quality_baseline.py
|
|
85
87
|
tests/test_qa_report_definition.py
|
|
86
88
|
tests/test_reporting_profiles.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|