Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 7 additions & 1 deletion .github/ci/suites.v1.json
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,13 @@
"tests/test_skills/test_hub_*.py",
"tests/test_skills/test_loader_*.py",
"tests/test_skills_bundled_baseline.py",
"tests/test_skills_default_prompt_contract.py",
"tests/test_skill_catalog_projection.py",
"tests/test_gateway/test_meta_catalog_compatibility.py",
"tests/test_gateway/test_rpc_commands.py",
"tests/test_migration/test_legacy_config_fixtures.py",
"tests/test_skills/test_catalog_upgrade_retirement.py",
"tests/test_skills/test_sop_compiler.py",
"tests/unit/cli/tui/test_opentui_completion_catalog.py",
"tests/test_skills_hash_consumers.py",
"tests/test_skills_hot_reload.py",
"tests/test_skills_hub_*.py",
Expand Down
17 changes: 14 additions & 3 deletions .github/scripts/plan_ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,13 @@
"tests/test_skills_manifest.py",
"tests/test_skills_bundled_baseline.py",
"tests/test_skills_hot_reload.py",
"tests/test_skills_default_prompt_contract.py",
"tests/test_skill_catalog_projection.py",
"tests/test_gateway/test_meta_catalog_compatibility.py",
"tests/test_gateway/test_rpc_commands.py",
"tests/test_migration/test_legacy_config_fixtures.py",
"tests/test_skills/test_catalog_upgrade_retirement.py",
"tests/test_skills/test_sop_compiler.py",
"tests/unit/cli/tui/test_opentui_completion_catalog.py",
"tests/test_skills_loader_namespaces.py",
"tests/test_skills_tree.py",
"tests/test_skills_hub_archive.py",
Expand Down Expand Up @@ -1325,11 +1331,16 @@ def _repository_files_for_validation(repo: Path) -> list[str]:
if (path.is_file() or path.is_symlink())
and ".git" not in path.relative_to(repo).parts
)
return sorted(
paths = [
item.decode("utf-8", errors="strict")
for item in completed.stdout.split(b"\0")
if item
)
]
# ``git ls-files --cached`` retains paths deleted in an uncommitted
# worktree. They are useful to change classification but cannot be parsed
# as current test-module sources, so exclude only physically absent paths
# from repository-content validation.
return sorted(path for path in paths if (repo / path).exists())


def _validate_execution_input_patterns(
Expand Down
16 changes: 4 additions & 12 deletions .github/scripts/windows_test_assignments.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@
"tests/test_engine/test_final_diff_contract.py",
"tests/test_engine/test_final_diff_salvage_and_endgame_freeze_levers.py",
"tests/test_engine/test_goal_context_prompt.py",
"tests/test_engine/test_goal_routing_hint.py",
"tests/test_engine/test_historical_image_followup.py",
"tests/test_engine/test_history_silent_reply.py",
"tests/test_engine/test_long_task_backend_boundaries.py",
Expand Down Expand Up @@ -228,6 +227,7 @@
"tests/test_scripts/test_live_meta_skill_creator_e2e.py",
"tests/test_skill_pdf_toolkit.py",
"tests/test_skills/test_awesome_webpage_meta_skill.py",
"tests/test_skills/test_catalog_upgrade_retirement.py",
"tests/test_skills/test_clarify_schema_protocol.py",
"tests/test_skills/test_clarify_summary.py",
"tests/test_skills/test_clarify_text_parser.py",
Expand All @@ -243,7 +243,6 @@
"tests/test_skills/test_meta_invoke_recursion_guard.py",
"tests/test_skills/test_meta_invoke_tool.py",
"tests/test_skills/test_meta_mvp.py",
"tests/test_skills/test_meta_pre_commit_quality_gate.py",
"tests/test_skills/test_meta_readiness.py",
"tests/test_skills/test_meta_short_drama_delivery_audit.py",
"tests/test_skills/test_meta_skill_authoring_docs.py",
Expand Down Expand Up @@ -353,7 +352,6 @@
"tests/test_application/test_session_reset.py",
"tests/test_application/test_session_transcript.py",
"tests/test_attachment_workspace.py",
"tests/test_bundled_voice_skills.py",
"tests/test_channels/test_approval_i18n.py",
"tests/test_channels/test_channel_command_registry.py",
"tests/test_channels/test_channel_dedupe.py",
Expand Down Expand Up @@ -552,6 +550,7 @@
"tests/test_gateway/test_local_provider_keyless_e2e.py",
"tests/test_gateway/test_memory_health_boundary.py",
"tests/test_gateway/test_memory_repair_storage_gate.py",
"tests/test_gateway/test_meta_catalog_compatibility.py",
"tests/test_gateway/test_meta_setup_launch_e2e.py",
"tests/test_gateway/test_meta_skill_config_auto_trigger.py",
"tests/test_gateway/test_metrics_counters.py",
Expand Down Expand Up @@ -900,7 +899,6 @@
"tests/test_session/test_turn_acceptance_storage.py",
"tests/test_session/test_turn_usage_storage.py",
"tests/test_session_streams_meta_events.py",
"tests/test_skill_html_to_pdf.py",
"tests/test_skill_multi_search_engine.py",
"tests/test_skill_xlsx.py",
"tests/test_skills/test_clarify_nl_extract.py",
Expand All @@ -910,20 +908,17 @@
"tests/test_skills/test_high_value_meta_trigger_coverage.py",
"tests/test_skills/test_hub_deps_subprocess.py",
"tests/test_skills/test_meta_executor_gate.py",
"tests/test_skills/test_meta_paper_skills.py",
"tests/test_skills/test_meta_parallel.py",
"tests/test_skills/test_meta_paused_scheduler.py",
"tests/test_skills/test_meta_resume.py",
"tests/test_skills/test_meta_router_accuracy.py",
"tests/test_skills/test_meta_skill_creator_lint.py",
"tests/test_skills/test_meta_user_input_executor.py",
"tests/test_skills/test_nano_banana_openrouter_image.py",
"tests/test_skills/test_retrieval_fingerprint.py",
"tests/test_skills/test_skill_exec_python_resolution.py",
"tests/test_skills/test_skill_exec_subprocess_encoding.py",
"tests/test_skills/test_sop_compiler.py",
"tests/test_skills_hot_reload.py",
"tests/test_skills_memory_contract.py",
"tests/test_tools/test_admin_audio_config.py",
"tests/test_tools/test_admin_cron_strict.py",
"tests/test_tools/test_admin_gateway_contract.py",
Expand Down Expand Up @@ -1169,15 +1164,14 @@
"tests/test_skills/test_meta_cancellation.py",
"tests/test_skills/test_meta_diagram_triangulation.py",
"tests/test_skills/test_meta_inputs_collected.py",
"tests/test_skills/test_meta_paper_skills.py",
"tests/test_skills/test_meta_paper_write_e2e.py",
"tests/test_skills/test_meta_plan_serde.py",
"tests/test_skills/test_meta_security_review_bundle.py",
"tests/test_skills/test_meta_skill_accept.py",
"tests/test_skills/test_meta_skill_smoke_test.py",
"tests/test_skills/test_meta_stack_trace_investigator.py",
"tests/test_skills/test_meta_user_input_types.py",
"tests/test_skills/test_multi_search_engine_concurrency.py",
"tests/test_skills/test_weather_skill_entrypoint.py",
"tests/test_skills_hash_consumers.py",
"tests/test_skills_hub_github.py",
"tests/test_skills_loader_namespaces.py",
Expand Down Expand Up @@ -1400,12 +1394,11 @@
"tests/test_scripts/test_stage_webui_artifact.py",
"tests/test_scripts/test_verify_desktop_slim_size.py",
"tests/test_scripts/test_verify_webui_artifact.py",
"tests/test_skill_catalog_projection.py",
"tests/test_skills/test_clarify_skip_summary.py",
"tests/test_skills/test_creator_trigger_no_collision.py",
"tests/test_skills/test_history_explorer.py",
"tests/test_skills/test_meta_arxiv_daily_digest_deck.py",
"tests/test_skills/test_meta_auto_trigger_enabled.py",
"tests/test_skills/test_meta_codereview_current_diff.py",
"tests/test_skills/test_meta_on_failure_substitute.py",
"tests/test_skills/test_meta_orchestrator_offload.py",
"tests/test_skills/test_meta_run_persistence_e2e.py",
Expand All @@ -1417,7 +1410,6 @@
"tests/test_skills/test_runtime_e2e_gate.py",
"tests/test_skills/test_skill_exec_non_blocking.py",
"tests/test_skills_community_copy_contract.py",
"tests/test_skills_default_prompt_contract.py",
"tests/test_skills_dependency_summary.py",
"tests/test_skills_hub_installer_security.py",
"tests/test_skills_paths.py",
Expand Down
14 changes: 3 additions & 11 deletions .github/scripts/windows_test_durations.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@
"tests/test_artifacts.py": 2.895,
"tests/test_asyncio_utils.py": 0.01,
"tests/test_attachment_workspace.py": 0.148,
"tests/test_bundled_voice_skills.py": 0.673,
"tests/test_channels/test_admission_reason_persistence.py": 0.856,
"tests/test_channels/test_approval_dispatch_intercept.py": 1.046,
"tests/test_channels/test_approval_i18n.py": 0.041,
Expand Down Expand Up @@ -358,7 +357,6 @@
"tests/test_engine/test_final_diff_salvage_and_endgame_freeze_levers.py": 8.245,
"tests/test_engine/test_finalize_evidence_gate.py": 0.28,
"tests/test_engine/test_goal_context_prompt.py": 0.11,
"tests/test_engine/test_goal_routing_hint.py": 0.026,
"tests/test_engine/test_heuristic_router_strategy.py": 0.818,
"tests/test_engine/test_historical_image_followup.py": 4.251,
"tests/test_engine/test_history_silent_reply.py": 0.014,
Expand Down Expand Up @@ -612,6 +610,7 @@
"tests/test_gateway/test_local_provider_keyless_e2e.py": 0.048,
"tests/test_gateway/test_memory_health_boundary.py": 0.01,
"tests/test_gateway/test_memory_repair_storage_gate.py": 0.898,
"tests/test_gateway/test_meta_catalog_compatibility.py": 0.01,
"tests/test_gateway/test_meta_setup_launch_e2e.py": 0.927,
"tests/test_gateway/test_meta_skill_config_auto_trigger.py": 0.01,
"tests/test_gateway/test_metrics_counters.py": 0.129,
Expand Down Expand Up @@ -1248,13 +1247,14 @@
"tests/test_session/test_turn_acceptance_storage.py": 15.113,
"tests/test_session/test_turn_usage_storage.py": 0.112,
"tests/test_session_streams_meta_events.py": 0.01,
"tests/test_skill_catalog_projection.py": 2.1,
"tests/test_skill_docx.py": 3.082,
"tests/test_skill_html_to_pdf.py": 0.937,
"tests/test_skill_multi_search_engine.py": 0.283,
"tests/test_skill_pdf_toolkit.py": 1.198,
"tests/test_skill_pptx_delivery.py": 0.75,
"tests/test_skill_xlsx.py": 1.185,
"tests/test_skills/test_awesome_webpage_meta_skill.py": 22.667,
"tests/test_skills/test_catalog_upgrade_retirement.py": 0.01,
"tests/test_skills/test_clarify_autofill.py": 0.013,
"tests/test_skills/test_clarify_nl_extract.py": 0.078,
"tests/test_skills/test_clarify_schema_protocol.py": 0.031,
Expand All @@ -1279,11 +1279,9 @@
"tests/test_skills/test_loader_list_meta_specs.py": 3.264,
"tests/test_skills/test_loader_turn_snapshot.py": 0.01,
"tests/test_skills/test_managed_toolchains.py": 4.983,
"tests/test_skills/test_meta_arxiv_daily_digest_deck.py": 3.156,
"tests/test_skills/test_meta_auto_trigger_enabled.py": 0.01,
"tests/test_skills/test_meta_cancellation.py": 5.727,
"tests/test_skills/test_meta_clarify_defaults.py": 0.013,
"tests/test_skills/test_meta_codereview_current_diff.py": 5.94,
"tests/test_skills/test_meta_diagram_triangulation.py": 3.295,
"tests/test_skills/test_meta_dsl_extensions.py": 0.921,
"tests/test_skills/test_meta_executor_gate.py": 0.01,
Expand All @@ -1298,7 +1296,6 @@
"tests/test_skills/test_meta_parallel.py": 0.344,
"tests/test_skills/test_meta_paused_scheduler.py": 0.071,
"tests/test_skills/test_meta_plan_serde.py": 0.166,
"tests/test_skills/test_meta_pre_commit_quality_gate.py": 5.252,
"tests/test_skills/test_meta_readiness.py": 1.657,
"tests/test_skills/test_meta_resume.py": 20.007,
"tests/test_skills/test_meta_router_accuracy.py": 1.08,
Expand All @@ -1313,7 +1310,6 @@
"tests/test_skills/test_meta_skill_linter.py": 25.593,
"tests/test_skills/test_meta_skill_proposals.py": 3.153,
"tests/test_skills/test_meta_skill_smoke_test.py": 0.281,
"tests/test_skills/test_meta_stack_trace_investigator.py": 7.126,
"tests/test_skills/test_meta_travel_planner_direct_e2e.py": 1.215,
"tests/test_skills/test_meta_trigger_accuracy_harness.py": 0.024,
"tests/test_skills/test_meta_user_input_executor.py": 0.087,
Expand All @@ -1330,7 +1326,6 @@
"tests/test_skills/test_paper_refbib_metadata.py": 0.342,
"tests/test_skills/test_paper_source_readiness_gate.py": 1.824,
"tests/test_skills/test_proposals_lib.py": 0.295,
"tests/test_skills/test_retrieval_fingerprint.py": 0.01,
"tests/test_skills/test_runtime_e2e_gate.py": 0.016,
"tests/test_skills/test_short_drama_review_normalizer.py": 0.276,
"tests/test_skills/test_skill_disable_toggle.py": 0.04,
Expand All @@ -1342,10 +1337,8 @@
"tests/test_skills/test_title_card_image.py": 0.107,
"tests/test_skills/test_toolchain_runtime_integration.py": 0.128,
"tests/test_skills/test_toolchain_state_scope.py": 0.02,
"tests/test_skills/test_weather_skill_entrypoint.py": 0.01,
"tests/test_skills_bundled_baseline.py": 0.793,
"tests/test_skills_community_copy_contract.py": 0.01,
"tests/test_skills_default_prompt_contract.py": 10.372,
"tests/test_skills_dependency_summary.py": 0.2,
"tests/test_skills_eligibility.py": 0.01,
"tests/test_skills_hash_consumers.py": 0.459,
Expand All @@ -1360,7 +1353,6 @@
"tests/test_skills_hub_source.py": 0.017,
"tests/test_skills_loader_namespaces.py": 1.024,
"tests/test_skills_manifest.py": 1.315,
"tests/test_skills_memory_contract.py": 0.693,
"tests/test_skills_paths.py": 0.016,
"tests/test_skills_provenance_contract.py": 4.11,
"tests/test_skills_third_party_notices.py": 2.373,
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1886,7 +1886,13 @@ jobs:
tests/test_skills_manifest.py \
tests/test_skills_bundled_baseline.py \
tests/test_skills_hot_reload.py \
tests/test_skills_default_prompt_contract.py \
tests/test_skill_catalog_projection.py \
tests/test_gateway/test_meta_catalog_compatibility.py \
tests/test_gateway/test_rpc_commands.py \
tests/test_migration/test_legacy_config_fixtures.py \
tests/test_skills/test_catalog_upgrade_retirement.py \
tests/test_skills/test_sop_compiler.py \
tests/unit/cli/tui/test_opentui_completion_catalog.py \
tests/test_skills_loader_namespaces.py \
tests/test_skills_tree.py \
tests/test_skills_hub_archive.py \
Expand Down
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,40 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
Non-loopback request authorities remain rejected by those guards, `"*"` is
never accepted, and existing CORS response-header behavior is unchanged.

### Changed

- The bundled Skill catalog now exposes eight ordinary entry points and three
stable Meta workflows, with coding instructions available in coding mode.
Internal helpers remain available to their owning workflows. The optional
relevance filter is retired; old filter settings are ignored during upgrade.
- Redundant bundled wrappers, including `cron`, `memory`, `git-diff`, and
`http-fetch`, are retired while their native tools remain available. The
weather and tmux wrappers and the dedicated HTML-to-PDF/LaTeX wrappers are
also retired; generic tools remain available, but their former scripts and
output contracts are not preserved. PDF extraction, composition and
generation remain supported; arbitrary in-place PDF rewriting is no longer
a dedicated Skill capability.
- In total, 31 bundled Skills are retired: four native-tool wrappers, five
audio wrappers, `summarize`, five weather/tmux/HTML-to-PDF/LaTeX/PDF-rewrite
wrappers, eight obsolete paper helpers, three creator helpers whose work
now runs in the creator runtime, and five stack-trace probes.
- Catalog retirement takes effect when the upgraded Gateway restarts and
rebuilds its Skill snapshot. Personal, project and other user-installed
copies are not removed, and memory files and scheduled jobs stay in place.
Old Meta workflow definitions that reference retired Skills must be updated
by their authors; they are not automatically migrated.

### Fixed

- Skill and Meta catalog reads remain compatible when the Web UI and Gateway
are upgraded separately. Meta details fall back on older gateways; new
gateways preserve public Meta list and detail responses for older clients.
Managed instances keep their source and lifecycle identity, and dependency
status refreshes after setup without retaining old missing-dependency counts.
- Retired nested Skill-filter environment variables no longer prevent Gateway
startup. Newly authored personal and project Meta SOPs receive the correct
invocation defaults, and command completion follows the public catalog.

- Aborting a turn no longer leaves an orphan task that crashes while the turn
generator is finalized. The gateway now closes the runner stream when the
consuming task exits, and the turn scope stack (process ownership, sandbox
Expand Down
Loading
Loading