@ccoalm/ccl-skills 0.1.0

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 (561) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +49 -0
  3. package/dist/assets/marketplace/.agents/plugins/marketplace.json +12 -0
  4. package/dist/assets/marketplace/.claude-plugin/marketplace.json +13 -0
  5. package/dist/assets/marketplace/marketplace-manifest.json +12 -0
  6. package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/marketplace.json +16 -0
  7. package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/plugin.json +5 -0
  8. package/dist/assets/marketplace/plugins/ccl-skills/.codex-plugin/plugin.json +5 -0
  9. package/dist/assets/marketplace/plugins/ccl-skills/.worktree-only +3 -0
  10. package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +45 -0
  11. package/dist/assets/marketplace/plugins/ccl-skills/agent-context/subagent-start.md +12 -0
  12. package/dist/assets/marketplace/plugins/ccl-skills/hooks/AGENTS.md +19 -0
  13. package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-delegation-owner.sh +125 -0
  14. package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-edit-isolation.sh +102 -0
  15. package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-merge-authorization.sh +1156 -0
  16. package/dist/assets/marketplace/plugins/ccl-skills/hooks/hooks.json +131 -0
  17. package/dist/assets/marketplace/plugins/ccl-skills/hooks/merge-authorization-prompt.sh +142 -0
  18. package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-guard.sh +12 -0
  19. package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-stop.sh +13 -0
  20. package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-post-merge-cleanup.sh +144 -0
  21. package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-context.sh +87 -0
  22. package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-start.sh +86 -0
  23. package/dist/assets/marketplace/plugins/ccl-skills/hooks/skill-extraction-gate-stop.sh +69 -0
  24. package/dist/assets/marketplace/plugins/ccl-skills/hooks/subagent-start.sh +26 -0
  25. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_delegation_owner.sh +329 -0
  26. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_edit_isolation.sh +322 -0
  27. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_merge_authorization.sh +902 -0
  28. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_merge_authorization_prompt.sh +178 -0
  29. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_post_merge_cleanup.sh +121 -0
  30. package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_session_start.sh +170 -0
  31. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/AGENTS.md +17 -0
  32. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +564 -0
  33. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-install-skills.md +14 -0
  34. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-update-skills.md +44 -0
  35. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-verify-skills.md +109 -0
  36. package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-worktree-check.md +36 -0
  37. package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/AGENTS.md +28 -0
  38. package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/README.md +276 -0
  39. package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.example.json +10 -0
  40. package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.sh +1307 -0
  41. package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/test.sh +941 -0
  42. package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/SKILL.md +45 -0
  43. package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/agents/openai.yaml +4 -0
  44. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/SKILL.md +188 -0
  45. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/agents/openai.yaml +4 -0
  46. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/android-dev.md +92 -0
  47. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/flutter-dev.md +80 -0
  48. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/ios-dev.md +72 -0
  49. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/kotlin-multiplatform.md +93 -0
  50. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-platform-boundaries.md +77 -0
  51. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-quality-release.md +77 -0
  52. package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/source-evidence-map.md +64 -0
  53. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +353 -0
  54. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/agents/openai.yaml +4 -0
  55. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md +419 -0
  56. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/manual-invocation-and-prompts.md +126 -0
  57. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +197 -0
  58. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/timeout-auth-and-capabilities.md +179 -0
  59. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/AGENTS.md +98 -0
  60. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_envelope.py +93 -0
  61. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_timeout_exit.sh +15 -0
  62. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/claude_review.sh +1438 -0
  63. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/codex_review.sh +324 -0
  64. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/concern_excerpt.py +295 -0
  65. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/egress_schema.py +214 -0
  66. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/init_policy_matrix.py +642 -0
  67. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_packet_mcp.py +181 -0
  68. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_review.sh +1165 -0
  69. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/opencode_review.sh +1190 -0
  70. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_cli_review.py +946 -0
  71. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_opencode_review.py +474 -0
  72. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_probe_result.py +1899 -0
  73. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_review_json.py +200 -0
  74. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +2845 -0
  75. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.sh +6 -0
  76. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/run_claude_capture.py +71 -0
  77. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/runtime-surface-verification-design.md +53 -0
  78. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_classify_envelope.sh +68 -0
  79. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_claude_review_probe.sh +2311 -0
  80. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_cli_review_wrappers.sh +1832 -0
  81. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_code_review_identity.sh +73 -0
  82. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_concern_excerpt.sh +245 -0
  83. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_egress_schema.sh +177 -0
  84. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_init_policy_matrix.sh +272 -0
  85. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_kimi_packet_mcp.py +195 -0
  86. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_concurrency.sh +120 -0
  87. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_retry.sh +1005 -0
  88. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_opencode_review.sh +258 -0
  89. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_probe_result.sh +574 -0
  90. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_review_json.sh +349 -0
  91. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +434 -0
  92. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_order.sh +264 -0
  93. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +2412 -0
  94. package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/verify_native_skill_binding.py +123 -0
  95. package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/SKILL.md +153 -0
  96. package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/agents/openai.yaml +4 -0
  97. package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/diagnosis-playbook.md +54 -0
  98. package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/prevention-routing.md +36 -0
  99. package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/SKILL.md +69 -0
  100. package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/agents/openai.yaml +4 -0
  101. package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/references/security-review-gate.md +41 -0
  102. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/SKILL.md +165 -0
  103. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/agents/openai.yaml +4 -0
  104. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/api-security-boundaries.md +47 -0
  105. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/architecture-playbook.md +160 -0
  106. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/artifact-generation-architecture.md +37 -0
  107. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/audit-history-architecture.md +29 -0
  108. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/bulk-workflow-architecture.md +33 -0
  109. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/config-rule-routing-architecture.md +34 -0
  110. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/cross-cutting-concerns.md +72 -0
  111. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-modeling-and-migrations.md +79 -0
  112. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-platform-architecture.md +210 -0
  113. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/dependency-platform.md +105 -0
  114. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/developer-tooling-architecture.md +38 -0
  115. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/error-contract-architecture.md +36 -0
  116. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/event-driven-architecture.md +260 -0
  117. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/http-gateway-architecture.md +74 -0
  118. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/mq-consumer-architecture.md +38 -0
  119. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/multi-tenant-isolation.md +275 -0
  120. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/notification-architecture.md +25 -0
  121. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/ops-checklist.md +57 -0
  122. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/performance-capacity-architecture.md +38 -0
  123. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/protobuf-contract-architecture.md +119 -0
  124. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/redis-cache-coordination.md +93 -0
  125. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/release-runtime-readiness.md +65 -0
  126. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/replay-comparison-architecture.md +26 -0
  127. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/runtime-observability.md +94 -0
  128. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/service-scaffold.md +76 -0
  129. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/source-evidence-map.md +55 -0
  130. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/workflow-state-architecture.md +38 -0
  131. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +159 -0
  132. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/agents/openai.yaml +4 -0
  133. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/artifact-generation-patterns.md +37 -0
  134. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/audit-history-patterns.md +28 -0
  135. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/bulk-import-export-patterns.md +56 -0
  136. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/config-rule-routing-patterns.md +38 -0
  137. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/data-access-patterns.md +55 -0
  138. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/db-schema-and-dal-patterns.md +109 -0
  139. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/dependency-client-patterns.md +130 -0
  140. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/developer-tooling-patterns.md +70 -0
  141. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/domain-feature-patterns.md +78 -0
  142. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/engineering-patterns.md +119 -0
  143. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/error-contract-patterns.md +55 -0
  144. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/feature-playbook.md +61 -0
  145. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/http-gateway-client-patterns.md +76 -0
  146. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/mq-consumer-patterns.md +55 -0
  147. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/notification-patterns.md +42 -0
  148. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/observability-implementation-patterns.md +101 -0
  149. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/performance-capacity-patterns.md +44 -0
  150. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/protobuf-contract-patterns.md +72 -0
  151. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/public-api-integration-patterns.md +56 -0
  152. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/quality-and-testing-patterns.md +91 -0
  153. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/redis-cache-lock-patterns.md +123 -0
  154. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/release-ops-patterns.md +112 -0
  155. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/reliability-patterns.md +83 -0
  156. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/replay-comparison-patterns.md +32 -0
  157. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/scaffold-and-codegen.md +86 -0
  158. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/source-evidence-map.md +54 -0
  159. package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/state-machine-task-patterns.md +45 -0
  160. package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/SKILL.md +80 -0
  161. package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/agents/openai.yaml +4 -0
  162. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +117 -0
  163. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/agents/openai.yaml +4 -0
  164. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-approval-auto-reviewer.md +106 -0
  165. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-command-sandbox.md +441 -0
  166. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-context-freshness.md +47 -0
  167. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-credentials-auth.md +13 -0
  168. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-extensions-skills.md +13 -0
  169. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-file-edit-protocol.md +129 -0
  170. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-ide-integration.md +5 -0
  171. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-input-ingestion.md +13 -0
  172. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-instruction-composition.md +13 -0
  173. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-lifecycle-hooks.md +92 -0
  174. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-messaging.md +5 -0
  175. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-runtime-bootstrap.md +5 -0
  176. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-session-persistence.md +448 -0
  177. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-task-orchestration.md +13 -0
  178. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-tool-dispatch.md +123 -0
  179. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-turn-lifecycle.md +131 -0
  180. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/inference-capacity-operations.md +162 -0
  181. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/llm-client-gateway.md +156 -0
  182. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/model-prompt-evaluation.md +146 -0
  183. package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/retrieval-agent-safety.md +273 -0
  184. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +202 -0
  185. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/agents/openai.yaml +4 -0
  186. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/contracts-and-state.md +62 -0
  187. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/cross-stack-alignment.md +94 -0
  188. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/framework-choice.md +76 -0
  189. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/online-practice-uptake.md +56 -0
  190. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/platform-capabilities.md +91 -0
  191. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/product-page-checklist.md +40 -0
  192. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/qa-release.md +72 -0
  193. package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/source-evidence-map.md +82 -0
  194. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/SKILL.md +103 -0
  195. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/agents/openai.yaml +5 -0
  196. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/references/multi-agent-delegation-playbook.md +100 -0
  197. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/SKILL.md +70 -0
  198. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/agents/openai.yaml +4 -0
  199. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-data-acquisition.md +549 -0
  200. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-disclosure-channels.md +97 -0
  201. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/research-prompts.md +66 -0
  202. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/AGENTS.md +32 -0
  203. package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/test-public-data-acquisition-recipes.sh +379 -0
  204. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/SKILL.md +244 -0
  205. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/agents/openai.yaml +4 -0
  206. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/alerting-and-on-call.md +76 -0
  207. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/framework-middleware-checklist.md +142 -0
  208. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/infra-component-deployment.md +268 -0
  209. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-correlation-recipe.md +124 -0
  210. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-schema-canonical.md +208 -0
  211. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/metrics-conventions.md +105 -0
  212. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/obs-stack-architecture.md +107 -0
  213. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/sli-slo-design.md +95 -0
  214. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/source-register.md +11 -0
  215. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/SKILL.md +303 -0
  216. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/agents/openai.yaml +4 -0
  217. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/canary-and-rollout-strategy.md +163 -0
  218. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/config-center-via-etcd.md +245 -0
  219. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/custom-control-plane-boundary.md +298 -0
  220. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-cli-concrete-recipe.md +312 -0
  221. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-pipeline.md +165 -0
  222. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/env-and-lane-matrix.md +126 -0
  223. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/lane-orchestration-control-plane.md +383 -0
  224. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/multi-region-and-cluster.md +135 -0
  225. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/promotion-gate-and-review.md +149 -0
  226. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/python-package-registry-release.md +462 -0
  227. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/rollback-playbook.md +123 -0
  228. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/secret-and-config-management.md +231 -0
  229. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/version-authority-and-deprecation.md +21 -0
  230. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/SKILL.md +276 -0
  231. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/agents/openai.yaml +4 -0
  232. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/dual-sidecar-and-traffic-config-center.md +127 -0
  233. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/framework-middleware.md +143 -0
  234. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/grpc-authority-workaround.md +90 -0
  235. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/http-response-envelope-contract.md +24 -0
  236. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/mesh-architecture.md +127 -0
  237. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/multi-env-routing.md +192 -0
  238. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/protobuf-http-contract-signals.md +64 -0
  239. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/retry-timeout-circuit-breaker.md +124 -0
  240. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/rpc-framework-recipe.md +494 -0
  241. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-choice.md +113 -0
  242. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-migration-playbook.md +231 -0
  243. package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-recipe.md +131 -0
  244. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +235 -0
  245. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/agents/openai.yaml +4 -0
  246. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/adr-convention.md +146 -0
  247. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-checklist.md +30 -0
  248. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-evaluation-report-template.md +25 -0
  249. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-execution-spec.md +108 -0
  250. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-sop.md +457 -0
  251. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-templates.md +24 -0
  252. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/artifact-egress-confidentiality.md +58 -0
  253. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/code-review-checklist.md +86 -0
  254. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/cross-repo-coordination.md +46 -0
  255. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/delivery-lifecycle.md +192 -0
  256. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md +62 -0
  257. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-routing-and-readiness.md +45 -0
  258. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/diagnostic-spec-match-gate.md +36 -0
  259. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dispatch-owner-skills.md +35 -0
  260. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dormant-code-activation.md +47 -0
  261. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/existing-project-assessment-report.md +223 -0
  262. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/external-skill-augmentation.md +46 -0
  263. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/feature-deprecation-cascade.md +15 -0
  264. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/high-risk-resilience-gates.md +73 -0
  265. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-completeness-and-minimality.md +120 -0
  266. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-entry-reentry-gate.md +122 -0
  267. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/modular-monolith-heuristic.md +105 -0
  268. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md +115 -0
  269. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/problem-resolution-and-learning.md +62 -0
  270. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-attributes.md +112 -0
  271. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-remediation-program.md +88 -0
  272. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/rd-standards-doc-family-checklist.md +27 -0
  273. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/refactoring-discipline.md +52 -0
  274. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/review-reception.md +34 -0
  275. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/shared-gate-artifact-classification.md +76 -0
  276. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/source-evidence-map.md +31 -0
  277. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/status-tracker-sync.md +77 -0
  278. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/sync-spec-repo-contract.md +25 -0
  279. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/verify-developer-experience.md +34 -0
  280. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/worktree-mechanics.md +55 -0
  281. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/AGENTS.md +18 -0
  282. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh +213 -0
  283. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/SKILL.md +136 -0
  284. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/agents/openai.yaml +9 -0
  285. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/analytics-visualization-interactions.md +206 -0
  286. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/behavioral-aesthetic-logic.md +108 -0
  287. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/complex-creation-interactions.md +194 -0
  288. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-execution-checklist.md +214 -0
  289. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-impl-naming-and-versioning.md +53 -0
  290. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-intake-and-acceptance.md +129 -0
  291. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-system-source-of-truth.md +97 -0
  292. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/external-ui-ux-quality-benchmarks.md +79 -0
  293. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/frontend-code-evidence-map.md +63 -0
  294. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/interaction-design-patterns.md +146 -0
  295. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/layout-recipes-and-screenshot-acceptance.md +250 -0
  296. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-project-token-consistency.md +237 -0
  297. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-stack-strategy.md +65 -0
  298. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/operational-processing-workflows.md +237 -0
  299. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-mobile-patterns.md +324 -0
  300. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-web-desktop-patterns.md +456 -0
  301. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-lifecycle-acceptance-and-iteration.md +114 -0
  302. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-surface-patterns.md +79 -0
  303. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/resource-management-interactions.md +113 -0
  304. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/scenario-community-patterns.md +133 -0
  305. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/source-map.md +130 -0
  306. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/tokens-and-components.md +47 -0
  307. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/trust-sensitive-ai-and-data-patterns.md +96 -0
  308. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-audit.md +106 -0
  309. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-design-development.md +176 -0
  310. package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/visual-craft.md +111 -0
  311. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/SKILL.md +157 -0
  312. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/agents/openai.yaml +4 -0
  313. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/ai-service-integration-boundaries.md +57 -0
  314. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-contract-and-schema.md +62 -0
  315. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-security-boundaries.md +39 -0
  316. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/architecture-playbook.md +46 -0
  317. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/async-execution-model.md +24 -0
  318. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/background-jobs-and-scheduling.md +18 -0
  319. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/batch-and-pipeline-architecture.md +11 -0
  320. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/config-secrets-runtime.md +22 -0
  321. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-modeling-and-migrations.md +64 -0
  322. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-platform-architecture.md +211 -0
  323. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/event-driven-architecture.md +263 -0
  324. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/multi-tenant-isolation.md +281 -0
  325. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/observability-and-ops.md +26 -0
  326. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/packaging-runtime-readiness.md +20 -0
  327. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/redis-cache-coordination.md +41 -0
  328. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/reliability-and-error-contract.md +17 -0
  329. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/source-evidence-map.md +55 -0
  330. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/web-framework-boundaries.md +26 -0
  331. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +143 -0
  332. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/agents/openai.yaml +4 -0
  333. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/ai-service-wiring-patterns.md +16 -0
  334. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/async-and-worker-patterns.md +24 -0
  335. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/background-job-patterns.md +18 -0
  336. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/batch-and-artifact-patterns.md +13 -0
  337. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/dependency-client-patterns.md +39 -0
  338. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/error-handling-patterns.md +26 -0
  339. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/feature-playbook.md +43 -0
  340. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/observability-implementation-patterns.md +31 -0
  341. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/project-structure-and-tooling.md +24 -0
  342. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/public-api-security-patterns.md +52 -0
  343. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/redis-cache-lock-patterns.md +78 -0
  344. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/schema-and-validation-patterns.md +23 -0
  345. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/source-evidence-map.md +56 -0
  346. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/sqlalchemy-and-migrations-patterns.md +99 -0
  347. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/testing-and-quality-patterns.md +61 -0
  348. package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/web-framework-patterns.md +35 -0
  349. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/SKILL.md +91 -0
  350. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/agents/openai.yaml +4 -0
  351. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/config-runtime-readback.md +20 -0
  352. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/mr-merge-authorization.md +31 -0
  353. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/post-release-env-reset.md +31 -0
  354. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-closeout-evidence.md +20 -0
  355. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-scope-confirmation.md +21 -0
  356. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/tag-and-prod-pipeline-gate.md +20 -0
  357. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/test-scope-prompt.md +24 -0
  358. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/watcher-discipline.md +14 -0
  359. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/SKILL.md +64 -0
  360. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/agents/openai.yaml +4 -0
  361. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/comment-safe-release-doc.md +19 -0
  362. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-evidence-workflow.md +23 -0
  363. package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-testing-scope-section.md +15 -0
  364. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/SKILL.md +87 -0
  365. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/agents/openai.yaml +4 -0
  366. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/SKILL.md +130 -0
  367. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/agents/openai.yaml +4 -0
  368. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/prd-composition-contract.md +35 -0
  369. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/requirement-closure-contract.md +86 -0
  370. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/security-four-questions.md +38 -0
  371. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/SKILL.md +91 -0
  372. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/agents/openai.yaml +4 -0
  373. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/SKILL.md +88 -0
  374. package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/agents/openai.yaml +4 -0
  375. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +337 -0
  376. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/agents/openai.yaml +4 -0
  377. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/analysis-parse-fix-test-challenge-replay.md +47 -0
  378. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attribution-verification.md +69 -0
  379. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/bootstrap-slim-c3-obligation-table.md +112 -0
  380. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/coverage-exhaustion-traps.md +45 -0
  381. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/description-authoring.md +162 -0
  382. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +507 -0
  383. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md +86 -0
  384. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/evidence-card-template.md +51 -0
  385. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/example-domain-preselect.md +79 -0
  386. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/external-practice-controls.md +57 -0
  387. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-lifecycle-handoff.md +65 -0
  388. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +194 -0
  389. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/firing-point-placement.md +75 -0
  390. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/harness-patterns-and-eval.md +286 -0
  391. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/incident-postmortem-extraction.md +190 -0
  392. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/l0-l1-l2-routing.md +114 -0
  393. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/online-skill-review.md +47 -0
  394. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/parallel-stack-references-pattern.md +164 -0
  395. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/r0-leakage-audit.md +90 -0
  396. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/recurring-anti-patterns-checklist.md +320 -0
  397. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/resume-paused-delivery.md +16 -0
  398. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-feedback-mining.md +33 -0
  399. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-finding-standards.md +57 -0
  400. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-rubric.md +40 -0
  401. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/rule-consolidation.md +118 -0
  402. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/skill-listing-budget.md +19 -0
  403. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +254 -0
  404. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-to-skill-extraction.md +658 -0
  405. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/two-source-extraction-pattern.md +167 -0
  406. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-judgment-extraction.md +179 -0
  407. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-routing-map.md +51 -0
  408. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +180 -0
  409. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/AGENTS.md +18 -0
  410. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh +1452 -0
  411. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-evidence-card-leak.sh +491 -0
  412. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-mr-target-freshness.sh +173 -0
  413. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-size-budget.sh +488 -0
  414. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-sync-pointers.sh +419 -0
  415. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-golden-trace.rb +197 -0
  416. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-health.rb +327 -0
  417. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb +401 -0
  418. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing.rb +248 -0
  419. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/generic-r0-leak-scan.sh +282 -0
  420. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/governing-chain-diff.py +321 -0
  421. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +964 -0
  422. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +708 -0
  423. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/skill-behavior-eval.py +540 -0
  424. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-lifecycle.rb +51 -0
  425. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-pending-status.rb +55 -0
  426. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +829 -0
  427. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +1203 -0
  428. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_r0_status.sh +75 -0
  429. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_register_pending_exclusion.sh +137 -0
  430. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +173 -0
  431. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_route_drift.sh +377 -0
  432. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_size_budget.sh +833 -0
  433. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_skill_catalog.sh +491 -0
  434. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_source_register_lifecycle.sh +114 -0
  435. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_mr_target_freshness.sh +261 -0
  436. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_sync_pointers.sh +538 -0
  437. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_controlled_escalation_pins.sh +154 -0
  438. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_grader_diagnostics.sh +190 -0
  439. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_surface_binding.sh +178 -0
  440. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_prose_target.sh +86 -0
  441. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_generic_r0_leak_scan.sh +131 -0
  442. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_git_identity_predicate_gate.sh +243 -0
  443. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_governing_chain_diff.sh +419 -0
  444. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_dateless_host.sh +120 -0
  445. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +724 -0
  446. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +414 -0
  447. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_regression_runner_registration.sh +34 -0
  448. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_bank_integrity.sh +205 -0
  449. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_pointer_integrity.sh +194 -0
  450. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_credential_cwd.sh +61 -0
  451. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_cross_refs.sh +111 -0
  452. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_root_depth.sh +53 -0
  453. package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh +257 -0
  454. package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/SKILL.md +98 -0
  455. package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/agents/openai.yaml +4 -0
  456. package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/input-state-machines.md +36 -0
  457. package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/streaming-rich-output.md +130 -0
  458. package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/terminal-side-channels.md +96 -0
  459. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/SKILL.md +408 -0
  460. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/agents/openai.yaml +4 -0
  461. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/AGENTS.md +18 -0
  462. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/bitable-setup.md +573 -0
  463. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/README.md +120 -0
  464. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/github-actions.yml +119 -0
  465. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/gitlab-ci.yml +76 -0
  466. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/jenkins.Jenkinsfile +106 -0
  467. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/classical-test-design-techniques.md +279 -0
  468. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/gen_report.py +2807 -0
  469. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/makefile-template.md +200 -0
  470. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/report-config-schema.md +272 -0
  471. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/run_pytestless.py +475 -0
  472. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/source-to-case-workflows.md +258 -0
  473. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-marker-conventions.md +316 -0
  474. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-review-and-prioritization.md +145 -0
  475. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/AGENTS.md +16 -0
  476. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.dart +129 -0
  477. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.go +197 -0
  478. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.py +135 -0
  479. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.ts +285 -0
  480. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/test_gen_report.py +2144 -0
  481. package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/update-lifecycle.md +62 -0
  482. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +212 -0
  483. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/agents/openai.yaml +4 -0
  484. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/ci-fixtures-and-flake-control.md +75 -0
  485. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/client-runtime-test-matrices.md +50 -0
  486. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/data-and-workflow-testing.md +34 -0
  487. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/design-closed-contract-oracles.md +31 -0
  488. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/e2e-real-flow-testing.md +71 -0
  489. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/fitness-functions.md +240 -0
  490. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/integration-contract-testing.md +235 -0
  491. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/non-functional-specialized-scenarios.md +296 -0
  492. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/rd-testing-standard-template.md +126 -0
  493. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/run-killing-mutation-walk.md +43 -0
  494. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/scenario-testing.md +136 -0
  495. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/source-evidence-map.md +59 -0
  496. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/structured-tc-input-translation.md +67 -0
  497. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-code-authoring-patterns.md +392 -0
  498. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-data-and-determinism.md +39 -0
  499. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-topology-and-commands.md +92 -0
  500. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/unit-testing.md +46 -0
  501. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/vendored-contract-drift-checklist.md +64 -0
  502. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/verify-enforcement-mechanisms.md +18 -0
  503. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/AGENTS.md +17 -0
  504. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.py +140 -0
  505. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.test.sh +75 -0
  506. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.py +170 -0
  507. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.test.sh +87 -0
  508. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.go +198 -0
  509. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.test.sh +109 -0
  510. package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/test_mutation_backup_recipe.sh +237 -0
  511. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +184 -0
  512. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/agents/openai.yaml +4 -0
  513. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/comment-safe-feishu.md +93 -0
  514. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/cross-model-co-review.md +3 -0
  515. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/delivery-face-closeout.md +60 -0
  516. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/doc-charter-first.md +17 -0
  517. package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/session-vantage-leakage.md +58 -0
  518. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +126 -0
  519. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/agents/openai.yaml +4 -0
  520. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/complex-workspace-patterns.md +47 -0
  521. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/embedded-h5-in-host.md +87 -0
  522. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/react-architecture.md +194 -0
  523. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/source-evidence-map.md +60 -0
  524. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-quality-release.md +190 -0
  525. package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-ui-quality.md +83 -0
  526. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/SKILL.md +179 -0
  527. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/agents/openai.yaml +4 -0
  528. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/references/shared-branch-rebase.md +25 -0
  529. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/AGENTS.md +23 -0
  530. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_status.sh +207 -0
  531. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_sweep.sh +481 -0
  532. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-status.sh +325 -0
  533. package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-sweep.sh +245 -0
  534. package/dist/assets/release.json +2797 -0
  535. package/dist/claude-adapter.d.ts +9 -0
  536. package/dist/claude-adapter.js +240 -0
  537. package/dist/cli-worker.d.ts +1 -0
  538. package/dist/cli-worker.js +32 -0
  539. package/dist/cli.d.ts +22 -0
  540. package/dist/cli.js +214 -0
  541. package/dist/codex-host.d.ts +30 -0
  542. package/dist/codex-host.js +162 -0
  543. package/dist/fs-safe.d.ts +21 -0
  544. package/dist/fs-safe.js +241 -0
  545. package/dist/index.d.ts +2 -0
  546. package/dist/index.js +1 -0
  547. package/dist/manifest.d.ts +8 -0
  548. package/dist/manifest.js +135 -0
  549. package/dist/opencode-adapter.d.ts +10 -0
  550. package/dist/opencode-adapter.js +416 -0
  551. package/dist/operations.d.ts +3 -0
  552. package/dist/operations.js +956 -0
  553. package/dist/paths.d.ts +20 -0
  554. package/dist/paths.js +4 -0
  555. package/dist/types.d.ts +58 -0
  556. package/dist/types.js +1 -0
  557. package/dist/unified.d.ts +4 -0
  558. package/dist/unified.js +64 -0
  559. package/dist/version.d.ts +2 -0
  560. package/dist/version.js +5 -0
  561. package/package.json +35 -0
@@ -0,0 +1,462 @@
1
+ # Python Package Registry Release
2
+
3
+ Use this when publishing Python wheel/sdist artifacts to a private PyPI-compatible registry, or when proving that a consumer can resolve the published package without local source mappings.
4
+
5
+ The Python stack skill owns package internals: version bump, `pyproject.toml`, lock/source mapping, package `__version__`, import behavior, and tests. This release skill owns the registry publication path and the consumer-view proof after the tag/build is ready.
6
+
7
+ ## Required Release Path
8
+
9
+ 1. Build from the committed release commit or tag.
10
+ - Verify the tag points to the intended commit before building.
11
+ - Build wheel and sdist using the repo's declared tool, for example `uv build`.
12
+ - Before upload, record hashes for the exact artifact bytes produced by this build and keep the manifest with the release evidence. Tie the manifest to the release commit/tag build (commit it, capture it as a CI build artifact, or otherwise pin it to the release SHA) so verification cannot later be satisfied by a manifest regenerated from a different upload. Do not regenerate this manifest during verification from rebuilt artifacts; Python wheels/sdists are not guaranteed byte-reproducible unless the project has explicitly proven reproducible builds.
13
+ ```bash
14
+ python3 - <<'PY' > dist/SHA256SUMS
15
+ import hashlib
16
+ import pathlib
17
+
18
+ for path in sorted(pathlib.Path("dist").glob("*")):
19
+ if path.is_file():
20
+ print(hashlib.sha256(path.read_bytes()).hexdigest(), path.name)
21
+ PY
22
+ ```
23
+ - Inspect artifact metadata before upload:
24
+ ```bash
25
+ unzip -p dist/<distribution>-<version>-py3-none-any.whl '<distribution>-<version>.dist-info/METADATA' \
26
+ | rg '^(Name|Version|Requires-Python|Requires-Dist):'
27
+ ```
28
+
29
+ 2. Publish with a Python package publisher, not a low-level package-file API.
30
+ - Prefer `uv publish` or `twine upload` against the registry upload endpoint.
31
+ - For GitLab-compatible registries, the upload endpoint shape is:
32
+ ```text
33
+ https://<gitlab-host>/api/v4/projects/<project-id>/packages/pypi
34
+ ```
35
+ - Use environment variables or keyring/netrc for credentials. For install/download verification, prefer keyring, netrc, or pip config so command logs do not contain token-bearing URLs. Do not echo tokens, commit index URLs containing tokens, or leave token-bearing commands in durable docs.
36
+ - `uv publish` example:
37
+ ```bash
38
+ export UV_PUBLISH_USERNAME=<user>
39
+ read -rs UV_PUBLISH_PASSWORD
40
+ export UV_PUBLISH_PASSWORD
41
+ uv publish \
42
+ --publish-url "https://<gitlab-host>/api/v4/projects/<project-id>/packages/pypi" \
43
+ dist/<distribution>-<version>-py3-none-any.whl \
44
+ dist/<distribution>-<version>.tar.gz
45
+ unset UV_PUBLISH_PASSWORD
46
+ ```
47
+ - If the installed `uv publish --help` does not list `--dry-run`, do not use `uv publish` as a no-write duplicate probe. Query the registry package listing or simple index manually; run `uv publish --check-url ...` only when you are ready for missing files to upload.
48
+ - Do not use `--check-url` for metadata repair after a bad raw upload. `uv publish --check-url` skips an already-present *identical* file when the index exposes a supported hash (exact behavior varies by index); it does not overwrite or repair broken simple-index metadata for a file that already exists. Publish a new patch or post-release version; do not reuse the same version after any upload has reached a consumer-visible registry surface.
49
+
50
+ 3. Use `--check-url` before republishing or after an interrupted publish.
51
+ - Check URL shape:
52
+ ```text
53
+ https://<gitlab-host>/api/v4/projects/<project-id>/packages/pypi/simple/
54
+ ```
55
+ - Dry-run duplicate check, only when `uv publish --help` lists `--dry-run`:
56
+ ```bash
57
+ export UV_PUBLISH_USERNAME=<user>
58
+ read -rs UV_PUBLISH_PASSWORD
59
+ export UV_PUBLISH_PASSWORD
60
+ uv publish --dry-run \
61
+ --publish-url "https://<gitlab-host>/api/v4/projects/<project-id>/packages/pypi" \
62
+ --check-url "https://<gitlab-host>/api/v4/projects/<project-id>/packages/pypi/simple/" \
63
+ dist/<distribution>-<version>-py3-none-any.whl \
64
+ dist/<distribution>-<version>.tar.gz
65
+ unset UV_PUBLISH_PASSWORD
66
+ ```
67
+
68
+ ## Recovery Rules
69
+
70
+ - Do not use a raw / low-level package-file upload API as the normal publish path. Non-PyPI upload paths may bypass the registry's PyPI metadata generation and create files while omitting simple-index metadata such as `data-requires-python`, which later changes resolver behavior (observed risk — verify the simple-index metadata after any non-standard upload rather than assuming it is present). If this already happened, publish a new patch or post-release version through `uv publish` or `twine upload`; do not delete and republish different bytes under the same version after any consumer-visible upload.
71
+ - A duplicate-file response is not a successful metadata repair. If the bad package already exists, a publisher will normally skip or reject it rather than overwrite registry metadata.
72
+ - If `pip install` returns `401` while the platform CLI can query the registry, verify credential form before blaming the package:
73
+ - the token belongs to the same registry host being installed from;
74
+ - the Basic auth username matches the token type expected by that registry;
75
+ - tokens embedded in an index URL are URL-encoded;
76
+ - shell variables are assigned before the command that expands them, for example `TOKEN_ENC=$(...); pip install ... "${TOKEN_ENC}"`, not `TOKEN_ENC=$(...) pip install ... "${TOKEN_ENC}"`.
77
+
78
+ ## Published-Package Verification
79
+
80
+ **Precondition — defeat registry forwarding.** A GitLab-compatible registry forwards a not-found request to public PyPI **by default, even when `--index-url` points at the private simple index** (GitLab: "package request forwarding"). So a bare `--index-url <private-simple>` resolve is NOT proof of private-registry origin: a package that never landed in the private registry but exists on public PyPI (same name+version) resolves anyway. The byte-hash check below still fails on *different* bytes, but identical forwarded bytes would pass. Before trusting the registry-only proof: turn off package forwarding for the target group/instance (the authoritative control), and additionally assert that every simple-index anchor and the downloaded artifact resolve to the private registry host, not `pypi.org` (the script below enforces the host assertion on the simple index).
81
+
82
+ Before closing the release, collect all four evidence rows:
83
+
84
+ 1. Artifact metadata: wheel `METADATA` shows expected `Name`, `Version`, `Requires-Python`, and dependency requirements.
85
+ 2. Registry listing: the registry API or UI shows the package name and version in the expected project/namespace.
86
+ 3. Simple index: the simple-index page contains the wheel/sdist filenames for the exact distribution/version. When artifact metadata declares `Requires-Python`, a present `data-requires-python` anchor value must be parseable and semantically equivalent; missing `data-requires-python` on registry classes that do not reliably emit it is informational evidence, not a hard pass/fail signal.
87
+ 4. Fresh install: a new environment proves the target artifact came from the intended private registry, then installs that downloaded artifact with the dependency indexes required by the package. Do not use an editable install, local path source, or workspace override. If the package exposes a module `__version__`, import that module and compare it to the distribution version; otherwise record an explicit no-module-version declaration.
88
+
89
+ A fresh install check should verify both artifact origin and runtime version when the package exposes a module version:
90
+
91
+ ```bash
92
+ set -euo pipefail
93
+ DIST_NAME=<distribution>
94
+ MODULE_VERSION_MODULE=<module-with-__version__>
95
+ PACKAGE_HAS_NO_MODULE_VERSION=0 # set to 1 only when the package intentionally exposes no module __version__
96
+ NO_MODULE_VERSION_IMPORT_MODULE=<module-to-import-when-no-__version__>
97
+ PACKAGE_HAS_NO_REQUIRES_PYTHON=0 # set to 1 only when the release intentionally has no Requires-Python metadata
98
+ ALLOW_MISSING_DATA_REQUIRES_PYTHON=0 # set to 1 only with recorded registry-class override
99
+ ALLOW_DIVERGENT_DATA_REQUIRES_PYTHON=0 # set to 1 only with recorded registry-class override
100
+ EXPECTED_VERSION=<version>
101
+ PYTHON_BIN="${PYTHON_BIN:-$(command -v python3 || command -v python)}"
102
+ UPLOADED_ARTIFACT=dist/<distribution>-<version>-py3-none-any.whl # exact file uploaded in the publish step; do not replace with a rebuild
103
+ ARTIFACT_SHA256_MANIFEST=dist/SHA256SUMS # generated immediately after the release commit/tag build, before upload
104
+ FILENAME_VERSION="${FILENAME_VERSION:-$(
105
+ "${PYTHON_BIN}" - "${DIST_NAME}" "${UPLOADED_ARTIFACT}" <<'PY'
106
+ import pathlib
107
+ import re
108
+ import sys
109
+
110
+ dist = re.sub(r"[-_.]+", "-", sys.argv[1]).lower()
111
+ name = pathlib.Path(sys.argv[2]).name
112
+ lowered = name.lower().replace("_", "-")
113
+ if name.endswith(".whl"):
114
+ parts = name[:-4].split("-")
115
+ if len(parts) < 2:
116
+ raise SystemExit(f"cannot parse wheel filename version: {name}")
117
+ print(parts[1])
118
+ elif lowered.endswith(".tar.gz") or lowered.endswith(".zip"):
119
+ stem = lowered.removesuffix(".tar.gz").removesuffix(".zip")
120
+ prefix = dist + "-"
121
+ if not stem.startswith(prefix):
122
+ raise SystemExit(f"artifact filename does not start with expected distribution prefix {prefix!r}: {name}")
123
+ print(stem[len(prefix):])
124
+ else:
125
+ raise SystemExit(f"unsupported artifact filename for version parsing: {name}")
126
+ PY
127
+ )}"
128
+ EXPECTED_ARTIFACT_BASENAME=$(basename "${UPLOADED_ARTIFACT}")
129
+ PRIVATE_REGISTRY_HOST=<gitlab-host>
130
+ PRIVATE_SIMPLE_INDEX="https://${PRIVATE_REGISTRY_HOST}/api/v4/projects/<project-id>/packages/pypi/simple"
131
+ # INSTALL_INDEX_URL=https://<internal-index-or-proxy-serving-private-and-approved-public-deps>/simple
132
+ : "${INSTALL_INDEX_URL:?set INSTALL_INDEX_URL; PRIVATE_SIMPLE_INDEX is valid only when it also serves every dependency}"
133
+ # Fail closed on credentials embedded in an index URL: they leak into pip argv, shell history, and logs.
134
+ # GitLab documents inline-auth install URLs, but this proof forbids them — keep auth in netrc/keyring only.
135
+ for _url_var in PRIVATE_SIMPLE_INDEX INSTALL_INDEX_URL; do
136
+ "${PYTHON_BIN}" -c 'import sys,urllib.parse as u; p=u.urlparse(sys.argv[1]); sys.exit(1 if (p.username or p.password) else 0)' "${!_url_var}" || {
137
+ echo "${_url_var} must not embed credentials (user:token@host); use netrc/keyring instead" >&2; exit 1
138
+ }
139
+ done
140
+ PIP_KEYRING_PROVIDER="${PIP_KEYRING_PROVIDER:-disabled}" # set to import only when keyring auth is installed in the tooling venv
141
+ export PIP_NO_CACHE_DIR=1
142
+ VENV_DIR=$(mktemp -d) # clean consumer venv: nothing installed except the released artifact + its declared deps
143
+ TOOL_VENV=$(mktemp -d) # separate verifier-tooling venv (packaging) so it cannot mask a missing runtime dep of the release
144
+ ARTIFACT_DIR=$(mktemp -d)
145
+ SIMPLE_PAGE=$(mktemp)
146
+ # Downloaded private artifacts + simple-index HTML can contain private package names/versions/URLs; clean up on exit.
147
+ trap 'rm -rf "${VENV_DIR}" "${TOOL_VENV}" "${ARTIFACT_DIR}" "${SIMPLE_PAGE}"' EXIT
148
+ EXPECTED_ARTIFACT_SHA256=$(
149
+ "${PYTHON_BIN}" -c 'import pathlib, sys; target=pathlib.Path(sys.argv[1]).name; manifest=pathlib.Path(sys.argv[2]); rows=[line.split() for line in manifest.read_text().splitlines() if line.split()]; matches=[row[0] for row in rows if len(row) >= 2 and row[1] == target]; assert len(matches) == 1, f"manifest must contain exactly one hash for {target}"; print(matches[0])' \
150
+ "${UPLOADED_ARTIFACT}" "${ARTIFACT_SHA256_MANIFEST}"
151
+ )
152
+ ACTUAL_UPLOADED_ARTIFACT_SHA256=$("${PYTHON_BIN}" -c 'import hashlib, pathlib, sys; print(hashlib.sha256(pathlib.Path(sys.argv[1]).read_bytes()).hexdigest())' "${UPLOADED_ARTIFACT}")
153
+ test "${ACTUAL_UPLOADED_ARTIFACT_SHA256}" = "${EXPECTED_ARTIFACT_SHA256}"
154
+ export DIST_NAME MODULE_VERSION_MODULE PACKAGE_HAS_NO_MODULE_VERSION NO_MODULE_VERSION_IMPORT_MODULE PACKAGE_HAS_NO_REQUIRES_PYTHON ALLOW_MISSING_DATA_REQUIRES_PYTHON ALLOW_DIVERGENT_DATA_REQUIRES_PYTHON EXPECTED_VERSION EXPECTED_ARTIFACT_SHA256 UPLOADED_ARTIFACT EXPECTED_ARTIFACT_BASENAME FILENAME_VERSION PRIVATE_REGISTRY_HOST PRIVATE_SIMPLE_INDEX INSTALL_INDEX_URL SIMPLE_PAGE
155
+ python -m venv "${VENV_DIR}"
156
+ python -m venv "${TOOL_VENV}"
157
+ "${TOOL_VENV}/bin/python" -m pip install --index-url "${INSTALL_INDEX_URL}" packaging
158
+ # The isolated target-artifact download runs from TOOL_VENV, so keyring — when requested — is installed
159
+ # HERE, never in the pristine consumer venv (VENV_DIR), which must receive only the released artifact.
160
+ if [[ "${PIP_KEYRING_PROVIDER}" != "disabled" ]]; then
161
+ "${TOOL_VENV}/bin/python" -m pip install --index-url "${INSTALL_INDEX_URL}" keyring
162
+ fi
163
+ EXPECT_REQUIRES_PYTHON_SPEC=$("${TOOL_VENV}/bin/python" - <<'PY'
164
+ import os
165
+ import pathlib
166
+ import re
167
+ import tarfile
168
+ import zipfile
169
+
170
+ dist = re.sub(r"[-_.]+", "-", os.environ["DIST_NAME"]).lower()
171
+ filename_version = os.environ["FILENAME_VERSION"].lower()
172
+
173
+ def matches_distribution_version(filename):
174
+ filename = filename.lower().replace("_", "-")
175
+ marker = f"-{filename_version}"
176
+ idx = filename.find(marker)
177
+ if idx < 0:
178
+ return False
179
+ name_part = filename[:idx]
180
+ rest = filename[idx + len(marker):]
181
+ normalized_name = re.sub(r"[-_.]+", "-", name_part).lower()
182
+ return normalized_name == dist and (rest.startswith("-") or rest in (".tar.gz", ".zip"))
183
+
184
+ def metadata_from_artifact(path):
185
+ artifact = str(path)
186
+ if artifact.endswith(".whl") or artifact.endswith(".zip"):
187
+ with zipfile.ZipFile(artifact) as zf:
188
+ metadata_name = next(
189
+ name for name in zf.namelist()
190
+ if name.endswith(".dist-info/METADATA") or name.endswith("PKG-INFO")
191
+ )
192
+ return zf.read(metadata_name).decode()
193
+ if artifact.endswith((".tar.gz", ".tgz")):
194
+ with tarfile.open(artifact) as tf:
195
+ metadata_member = next(
196
+ member for member in tf.getmembers()
197
+ if member.isfile() and member.name.endswith("PKG-INFO")
198
+ )
199
+ extracted = tf.extractfile(metadata_member)
200
+ assert extracted is not None
201
+ return extracted.read().decode()
202
+ raise SystemExit(f"unsupported artifact type for metadata extraction: {artifact}")
203
+
204
+ dist_dir = pathlib.Path(os.environ["UPLOADED_ARTIFACT"]).parent
205
+ matching_artifacts = [
206
+ path for path in sorted(dist_dir.iterdir())
207
+ if path.is_file() and matches_distribution_version(path.name)
208
+ ]
209
+ matching_wheels = [path for path in matching_artifacts if path.name.endswith(".whl")]
210
+ metadata_sources = matching_wheels or matching_artifacts
211
+ if not metadata_sources:
212
+ raise SystemExit(f"no local built artifacts found for {dist} {filename_version}")
213
+ requires_python_specs = set()
214
+ for path in metadata_sources:
215
+ metadata = metadata_from_artifact(path)
216
+ for line in metadata.splitlines():
217
+ if line.startswith("Requires-Python:"):
218
+ requires_python_specs.add(line.split(":", 1)[1].strip())
219
+ if len(requires_python_specs) > 1:
220
+ raise SystemExit(f"inconsistent Requires-Python metadata across artifacts: {sorted(requires_python_specs)}")
221
+ print(next(iter(requires_python_specs), ""))
222
+ PY
223
+ )
224
+ if [[ -z "${EXPECT_REQUIRES_PYTHON_SPEC}" && "${PACKAGE_HAS_NO_REQUIRES_PYTHON}" != "1" ]]; then
225
+ echo "Requires-Python metadata is missing; set PACKAGE_HAS_NO_REQUIRES_PYTHON=1 only when this is intentional" >&2
226
+ exit 1
227
+ fi
228
+ if [[ "${PACKAGE_HAS_NO_REQUIRES_PYTHON}" == "1" ]] && [[ -f pyproject.toml ]] && grep -Eq 'requires-python[[:space:]]*=' pyproject.toml; then
229
+ echo "PACKAGE_HAS_NO_REQUIRES_PYTHON=1 contradicts pyproject.toml requires-python" >&2
230
+ exit 1
231
+ fi
232
+ export EXPECT_REQUIRES_PYTHON_SPEC
233
+ if [[ -n "${SIMPLE_INDEX_FETCH_CMD:-}" ]]; then
234
+ # SIMPLE_INDEX_FETCH_CMD must read credentials from netrc/keyring/env/fd — never embed a token in
235
+ # the command string (e.g. `curl -H "PRIVATE-TOKEN: <tok>"` or `-u user:<tok>`): that leaks the
236
+ # secret into process args, shell history, CI logs, and any durable copy of this evidence.
237
+ "${SHELL:-/bin/sh}" -c "${SIMPLE_INDEX_FETCH_CMD}" > "${SIMPLE_PAGE}"
238
+ else
239
+ "${TOOL_VENV}/bin/python" - <<'PY' > "${SIMPLE_PAGE}"
240
+ import base64
241
+ import netrc
242
+ import os
243
+ import re
244
+ import sys
245
+ import urllib.request
246
+
247
+ dist = re.sub(r"[-_.]+", "-", os.environ["DIST_NAME"]).lower()
248
+ url = os.environ["PRIVATE_SIMPLE_INDEX"].rstrip("/") + "/" + dist + "/"
249
+
250
+ def fetch_with_netrc():
251
+ req = urllib.request.Request(url)
252
+ try:
253
+ auth = netrc.netrc().authenticators(os.environ["PRIVATE_REGISTRY_HOST"])
254
+ except (FileNotFoundError, netrc.NetrcParseError):
255
+ auth = None
256
+ if not auth:
257
+ return None
258
+ login, _, password = auth
259
+ token = base64.b64encode(f"{login}:{password}".encode()).decode()
260
+ req.add_header("Authorization", f"Basic {token}")
261
+ with urllib.request.urlopen(req) as resp:
262
+ return resp.read()
263
+
264
+ content = fetch_with_netrc()
265
+ if content is None:
266
+ raise SystemExit("netrc credentials required, or set SIMPLE_INDEX_FETCH_CMD to a supported authenticated fetch command")
267
+ sys.stdout.buffer.write(content)
268
+ PY
269
+ fi
270
+ test -s "${SIMPLE_PAGE}"
271
+ "${TOOL_VENV}/bin/python" - <<'PY'
272
+ from html.parser import HTMLParser
273
+ import os
274
+ import pathlib
275
+ import re
276
+ from urllib.parse import urljoin, urlparse
277
+
278
+ dist = re.sub(r"[-_.]+", "-", os.environ["DIST_NAME"]).lower()
279
+ expected = os.environ["EXPECTED_VERSION"]
280
+ expected_artifact_basename = os.environ["EXPECTED_ARTIFACT_BASENAME"]
281
+ filename_version = os.environ["FILENAME_VERSION"].lower()
282
+ expected_requires_python = os.environ["EXPECT_REQUIRES_PYTHON_SPEC"]
283
+ allow_missing_requires_python = os.environ["ALLOW_MISSING_DATA_REQUIRES_PYTHON"] == "1"
284
+ allow_divergent_requires_python = os.environ["ALLOW_DIVERGENT_DATA_REQUIRES_PYTHON"] == "1"
285
+ simple_base = os.environ["PRIVATE_SIMPLE_INDEX"].rstrip("/") + "/" + dist + "/"
286
+ page = pathlib.Path(os.environ["SIMPLE_PAGE"]).read_text()
287
+
288
+ def normalize_specifier(value):
289
+ from packaging.specifiers import SpecifierSet
290
+
291
+ return str(SpecifierSet(value))
292
+
293
+ class LinkParser(HTMLParser):
294
+ def __init__(self):
295
+ super().__init__()
296
+ self.links = []
297
+ self._attrs = None
298
+ self._text = []
299
+
300
+ def handle_starttag(self, tag, attrs):
301
+ if tag == "a":
302
+ self._attrs = dict(attrs)
303
+ self._text = []
304
+
305
+ def handle_data(self, data):
306
+ if self._attrs is not None:
307
+ self._text.append(data)
308
+
309
+ def handle_endtag(self, tag):
310
+ if tag == "a" and self._attrs is not None:
311
+ self.links.append((self._attrs, "".join(self._text)))
312
+ self._attrs = None
313
+
314
+ parser = LinkParser()
315
+ parser.feed(page)
316
+
317
+ def matches_distribution_version(filename):
318
+ filename = filename.lower().replace("_", "-")
319
+ marker = f"-{filename_version}"
320
+ idx = filename.find(marker)
321
+ if idx < 0:
322
+ return False
323
+ name_part = filename[:idx]
324
+ rest = filename[idx + len(marker):]
325
+ normalized_name = re.sub(r"[-_.]+", "-", name_part).lower()
326
+ return normalized_name == dist and (rest.startswith("-") or rest in (".tar.gz", ".zip"))
327
+
328
+ anchors = [
329
+ (attrs, text)
330
+ for attrs, text in parser.links
331
+ if matches_distribution_version(text)
332
+ ]
333
+ assert anchors, f"no simple-index files found for exact version {expected}"
334
+ def normalize_filename(filename):
335
+ return filename.lower().replace("_", "-")
336
+
337
+ expected_artifact_anchors = [
338
+ (attrs, text) for attrs, text in anchors
339
+ if normalize_filename(text) == normalize_filename(expected_artifact_basename)
340
+ ]
341
+ assert expected_artifact_anchors, f"expected artifact {expected_artifact_basename} not present in private simple index"
342
+ # Defeat registry forwarding AND wrong-registry resolution: EVERY release-version file's download href
343
+ # (wheel and sdist, not just the one expected basename) must resolve to the configured private
344
+ # registry endpoint — same host+port, a GitLab package-registry file path, and (for a project index)
345
+ # the same project prefix. Relative hrefs resolve same-origin. A forwarded pypi.org origin, a
346
+ # different host/port, or a different project on the same host all fail here.
347
+ iu = urlparse(os.environ["PRIVATE_SIMPLE_INDEX"])
348
+ expected_hostport = (iu.hostname, iu.port)
349
+ pkg_marker = "/packages/pypi/"
350
+ index_path = (iu.path or "").rstrip("/")
351
+ # Project index -> pin the project prefix (kills wrong-project-same-host). Group index aggregates
352
+ # project-scoped file URLs, so only host+registry-marker is enforced there.
353
+ project_prefix = None
354
+ if "/projects/" in index_path and pkg_marker in index_path + "/":
355
+ project_prefix = index_path[: index_path.index(pkg_marker) + len(pkg_marker)]
356
+ bad = []
357
+ for attrs, text in anchors:
358
+ href = attrs.get("href", "")
359
+ u = urlparse(urljoin(simple_base, href))
360
+ path = u.path or ""
361
+ if (u.hostname, u.port) != expected_hostport:
362
+ bad.append((text, href, f"host/port {(u.hostname, u.port)} != {expected_hostport}"))
363
+ elif pkg_marker not in path:
364
+ bad.append((text, href, f"path {path!r} is not a package-registry file URL"))
365
+ elif project_prefix is not None and not path.startswith(project_prefix):
366
+ bad.append((text, href, f"path {path!r} outside configured project prefix {project_prefix!r}"))
367
+ assert not bad, (
368
+ f"simple-index anchors do not all resolve to the configured private registry: {bad}. "
369
+ "Disable package forwarding for the target group/instance and set PRIVATE_SIMPLE_INDEX to the exact "
370
+ "intended project/group endpoint (a forwarded pypi.org origin, a different host/port, or a different "
371
+ "project on the same host would trigger this), then re-run."
372
+ )
373
+ if expected_requires_python:
374
+ expected_requires_python = normalize_specifier(expected_requires_python)
375
+ missing = [
376
+ text for attrs, text in anchors
377
+ if text.endswith((".whl", ".tar.gz", ".zip")) and not attrs.get("data-requires-python")
378
+ ]
379
+ if missing and allow_missing_requires_python:
380
+ print(f"simple_index_requires_python_missing_info: registry did not emit data-requires-python for {missing}")
381
+ elif missing:
382
+ raise AssertionError(f"missing data-requires-python for {missing}; set ALLOW_MISSING_DATA_REQUIRES_PYTHON=1 only with recorded registry-class override")
383
+ wrong = [
384
+ (text, attrs.get("data-requires-python"))
385
+ for attrs, text in anchors
386
+ if text.endswith((".whl", ".tar.gz", ".zip"))
387
+ and attrs.get("data-requires-python")
388
+ and normalize_specifier(attrs.get("data-requires-python", "")) != expected_requires_python
389
+ ]
390
+ if wrong and allow_divergent_requires_python:
391
+ print(f"simple_index_requires_python_divergent_info: registry emitted divergent data-requires-python {wrong}; expected {expected_requires_python!r}")
392
+ else:
393
+ assert not wrong, f"wrong data-requires-python for {wrong}; expected {expected_requires_python!r}"
394
+ PY
395
+ # Clear every resolution-affecting pip/uv input so artifact AND dependency provenance come only from
396
+ # the URLs passed explicitly below; auth still flows through netrc/keyring, which these do not touch.
397
+ PIP_ISOLATION_ENV=(env
398
+ -u PIP_INDEX_URL -u PIP_EXTRA_INDEX_URL -u PIP_NO_INDEX
399
+ -u PIP_FIND_LINKS -u PIP_CONSTRAINT -u PIP_REQUIREMENT
400
+ -u UV_INDEX_URL -u UV_EXTRA_INDEX_URL
401
+ PIP_CONFIG_FILE=/dev/null)
402
+ # Detect --keyring-provider support; fail closed if the help command itself fails, rather than
403
+ # collapsing "pip help failed" and "flag absent" into the same empty-args branch.
404
+ # The download runs from TOOL_VENV (which holds keyring when requested) so the consumer venv stays pristine.
405
+ if ! DOWNLOAD_HELP=$("${PIP_ISOLATION_ENV[@]}" "${TOOL_VENV}/bin/pip" download --help); then
406
+ echo "pip download --help failed in ${TOOL_VENV}; cannot verify keyring support" >&2
407
+ exit 1
408
+ fi
409
+ if grep -q -- '--keyring-provider' <<<"${DOWNLOAD_HELP}"; then
410
+ PIP_DOWNLOAD_KEYRING_ARGS=(--keyring-provider "${PIP_KEYRING_PROVIDER}")
411
+ else
412
+ PIP_DOWNLOAD_KEYRING_ARGS=()
413
+ fi
414
+ if [[ "${PIP_KEYRING_PROVIDER}" != "disabled" && "${#PIP_DOWNLOAD_KEYRING_ARGS[@]}" -eq 0 ]]; then
415
+ echo "pip in ${TOOL_VENV} does not support --keyring-provider; upgrade pip or use netrc for this isolated target-artifact download" >&2
416
+ exit 1
417
+ fi
418
+ "${PIP_ISOLATION_ENV[@]}" \
419
+ "${TOOL_VENV}/bin/pip" download "${PIP_DOWNLOAD_KEYRING_ARGS[@]}" --no-cache-dir --no-deps --dest "${ARTIFACT_DIR}" --index-url "${PRIVATE_SIMPLE_INDEX}" "${DIST_NAME}==${EXPECTED_VERSION}"
420
+ test "$(find "${ARTIFACT_DIR}" -maxdepth 1 -type f | wc -l)" -eq 1
421
+ TARGET_ARTIFACT=$(find "${ARTIFACT_DIR}" -maxdepth 1 -type f | sed -n '1p')
422
+ export TARGET_ARTIFACT
423
+ NORMALIZED_TARGET_BASENAME=$(basename "${TARGET_ARTIFACT}" | tr '[:upper:]_' '[:lower:]-')
424
+ NORMALIZED_EXPECTED_BASENAME=$(printf '%s' "${EXPECTED_ARTIFACT_BASENAME}" | tr '[:upper:]_' '[:lower:]-')
425
+ test "${NORMALIZED_TARGET_BASENAME}" = "${NORMALIZED_EXPECTED_BASENAME}" || {
426
+ echo "downloaded $(basename "${TARGET_ARTIFACT}") but expected ${EXPECTED_ARTIFACT_BASENAME}; expected artifact is missing from the private registry" >&2
427
+ exit 1
428
+ }
429
+ "${VENV_DIR}/bin/python" -I -c 'import hashlib, os, pathlib; actual=hashlib.sha256(pathlib.Path(os.environ["TARGET_ARTIFACT"]).read_bytes()).hexdigest(); assert actual == os.environ["EXPECTED_ARTIFACT_SHA256"]'
430
+ # Consumer install: dependency auth for INSTALL_INDEX_URL must come from netrc, NOT keyring — installing
431
+ # keyring into the consumer venv would defeat the pristine-venv guarantee and could mask an undeclared dep.
432
+ "${PIP_ISOLATION_ENV[@]}" \
433
+ "${VENV_DIR}/bin/pip" install --no-cache-dir --index-url "${INSTALL_INDEX_URL}" "${TARGET_ARTIFACT}"
434
+ # -I (isolated): ignore PYTHONPATH/PYTHONHOME and user site so the import/version proof resolves ONLY from
435
+ # the installed downloaded artifact, never from a local checkout on PYTHONPATH (which would be a false green).
436
+ "${VENV_DIR}/bin/python" -I - <<'PY'
437
+ import os
438
+ from importlib import import_module
439
+ from importlib.metadata import version
440
+
441
+ dist = os.environ["DIST_NAME"]
442
+ expected = os.environ["EXPECTED_VERSION"]
443
+ module_name = os.environ.get("MODULE_VERSION_MODULE", "")
444
+ no_module_version_import = os.environ.get("NO_MODULE_VERSION_IMPORT_MODULE", "")
445
+ no_module_version = os.environ.get("PACKAGE_HAS_NO_MODULE_VERSION") == "1"
446
+
447
+ assert version(dist) == expected
448
+ if module_name:
449
+ module = import_module(module_name)
450
+ assert getattr(module, "__version__", None) == expected
451
+ elif no_module_version:
452
+ if not no_module_version_import:
453
+ raise SystemExit("NO_MODULE_VERSION_IMPORT_MODULE required when PACKAGE_HAS_NO_MODULE_VERSION=1")
454
+ module = import_module(no_module_version_import)
455
+ assert not hasattr(module, "__version__")
456
+ print(f"module_version_check_skipped: {no_module_version_import} declares no module __version__")
457
+ else:
458
+ raise SystemExit("MODULE_VERSION_MODULE required unless PACKAGE_HAS_NO_MODULE_VERSION=1")
459
+ PY
460
+ ```
461
+
462
+ For dependency stacks that span multiple private registries or public PyPI, keep the target-artifact proof separate: the simple-index metadata check and isolated `pip download --no-cache-dir --no-deps --index-url "${PRIVATE_SIMPLE_INDEX}"` must use only the registry that should contain the released distribution. The target-artifact download deliberately clears pip index environment variables and sets `PIP_CONFIG_FILE=/dev/null`, so credentials for that one fetch must come from a non-index-confusing path: netrc by default, or keyring only when `PIP_KEYRING_PROVIDER=import` is set — in which case keyring is installed into the separate tooling venv, never the consumer venv, and the download itself runs from the tooling venv. The final consumer install authenticates to `INSTALL_INDEX_URL` via netrc only, so the consumer venv keeps only the released artifact plus its declared dependencies. Set `UPLOADED_ARTIFACT` to the exact file that was uploaded from the release commit/tag build, and read `EXPECTED_ARTIFACT_SHA256` only from the manifest generated before upload. This snippet proves one `UPLOADED_ARTIFACT`; when both wheel and sdist are release artifacts, repeat the target-artifact block for each artifact or use an equivalent per-artifact direct-download loop before closing the release. A rebuilt artifact is not a valid hash source unless the project has separately proven reproducible builds. Set `INSTALL_INDEX_URL` explicitly to the private index or, for packages with external dependencies, to an internal proxy/mirror that serves both private and approved public packages; the raw private simple index is valid only when it also serves every dependency needed by the fresh install. Do not rely on pip's implicit public index or copy in direct public `--extra-index-url` unless every private dependency in scope is also provenance-checked. Set `MODULE_VERSION_MODULE` when the imported module exposes `__version__`; when it is set, a missing or stale module `__version__` is a release failure. If the package intentionally has no module version, set `PACKAGE_HAS_NO_MODULE_VERSION=1` plus `NO_MODULE_VERSION_IMPORT_MODULE` and record that declaration with the evidence; if it intentionally has no Python-version bound, set `PACKAGE_HAS_NO_REQUIRES_PYTHON=1` and keep it consistent with `pyproject.toml`. Missing or divergent simple-index `data-requires-python` is a failure by default; set `ALLOW_MISSING_DATA_REQUIRES_PYTHON=1` or `ALLOW_DIVERGENT_DATA_REQUIRES_PYTHON=1` only with a recorded registry-class override. The concrete snippet installs `packaging` as verification tooling into a **separate** tooling venv (never the consumer venv, so a verifier dependency cannot mask a runtime dependency the released package failed to declare) from `INSTALL_INDEX_URL` before comparing specifiers, fetches the simple-index page with netrc by default, and supports keyring or platform-CLI auth through `SIMPLE_INDEX_FETCH_CMD` — which must read secrets from netrc/keyring/env/fd and never carry a token in its command string. Never repair a venv auth failure by embedding a token in `--index-url`; the script fails closed before any pip call if `PRIVATE_SIMPLE_INDEX` or `INSTALL_INDEX_URL` carries `user:token@` userinfo. The final import/version check runs the consumer interpreter with `-I` (isolated), so it resolves only from the installed downloaded artifact and a stray `PYTHONPATH` pointing at a local checkout cannot produce a false green. The isolated download and the final consumer install both clear resolution-affecting pip/uv inputs (`PIP_INDEX_URL`/`PIP_EXTRA_INDEX_URL`/`PIP_NO_INDEX`/`PIP_FIND_LINKS`/`PIP_CONSTRAINT`/`PIP_REQUIREMENT`/`UV_INDEX_URL`/`UV_EXTRA_INDEX_URL`) and set `PIP_CONFIG_FILE=/dev/null`, so both artifact and dependency provenance come only from the URLs passed explicitly. Because a GitLab-compatible registry forwards not-found requests to public PyPI by default even under `--index-url`, disable package forwarding for the target group/instance; the simple-index check additionally asserts that **every** release-version anchor (wheel and sdist) resolves to the configured registry's host+port, a `/packages/pypi/` file path, and — for a project index — the same project prefix, so a forwarded pypi.org origin, a different host/port, or a different project on the same host all fail. Residual: the check binds the artifacts to the endpoint you configured in `PRIVATE_SIMPLE_INDEX`, so set it to the exact intended project/group endpoint and confirm the project/group id. The proof must still avoid local `[tool.uv.sources]`, editable path installs, and local wheel directories other than the just-downloaded target artifact unless the release explicitly ships through those mechanisms.
@@ -0,0 +1,123 @@
1
+ # Rollback Playbook
2
+
3
+ ## Rollback by strategy
4
+
5
+ | Rollout strategy | Rollback mechanism | Time to steady |
6
+ |---|---|---|
7
+ | Canary (traffic-shift) | Set canary weight to 0; drain | 30s - 2 min (mesh propagation) |
8
+ | Blue-green | Switch Service selector / VirtualService destination back | seconds |
9
+ | Rolling update | Re-deploy previous image digest | minutes (per-pod replacement) |
10
+ | In-place mesh policy | Re-apply previous policy YAML | seconds |
11
+ | Config-center flip | Set value back | < 1s (push update) |
12
+ | Static config in image | Re-deploy with previous image | minutes |
13
+
14
+ Choose strategy with rollback in mind. A 2-hour rolling update means a 2-hour rollback.
15
+
16
+ ## The rollback command
17
+
18
+ ```
19
+ plat rollback --service=<svc> [--to-version=<v>]
20
+ ```
21
+
22
+ Without `--to-version`, rolls to the most recently promoted known-good version (the one that ran before the current).
23
+
24
+ Behavior:
25
+ 1. Fetch previous known-good image digest from audit log.
26
+ 2. Initiate the same workflow as a forward deploy, but with the previous digest.
27
+ 3. Skip review for rollback (it's restoring known state) — unless the rollback target is itself in a known-bad list (e.g. an old version with a CVE).
28
+ 4. Wait for steady state; verify with smoke probes.
29
+ 5. Log the rollback event.
30
+
31
+ ## What "previous known-good" means
32
+
33
+ A version is "known-good" if:
34
+ - It was promoted to 100% traffic for at least N hours without abort.
35
+ - No P0/P1 incidents attributed to it during that window.
36
+
37
+ The audit log filters versions by this. Don't naively pick "the version before this one"; that version might be the one that caused yesterday's incident.
38
+
39
+ ## Data migration rollback
40
+
41
+ Data migrations are the hard case. Three patterns:
42
+
43
+ ### Pattern 1: Forward-compatible (preferred)
44
+
45
+ Schema changes are designed so old code can read new schema and new code can read old schema. Then:
46
+ - Step 1: deploy schema migration.
47
+ - Step 2: deploy code that uses new schema.
48
+ - Rollback: revert code only; schema stays. Data is intact.
49
+
50
+ This is the default for non-emergency migrations. Examples:
51
+ - Adding a column with a default → forward-compatible.
52
+ - Adding a new table → forward-compatible.
53
+ - Renaming a column → NOT forward-compatible directly; do "add new + dual-write + cut over + drop old" over multiple releases.
54
+
55
+ ### Pattern 2: Backward-replayable
56
+
57
+ Schema changes ship with a forward migration AND a back migration. If you must roll back:
58
+ - Run the back migration.
59
+ - Revert code.
60
+
61
+ This is dangerous for migrations that drop columns or merge tables (data loss). Use only when forward-compatibility is impossible.
62
+
63
+ ### Pattern 3: Soft-launched migration
64
+
65
+ The migration is gated by a config flag. Rollback flips the flag without touching schema.
66
+ - Slow to clean up old paths.
67
+ - Safe rollback.
68
+ - Best for migrations of frequently-changing or risky tables.
69
+
70
+ ## Rollback for mesh policy
71
+
72
+ VirtualService changes propagate via mesh control plane. Rollback:
73
+ - Revert the YAML.
74
+ - Mesh reloads (seconds).
75
+ - In-flight requests handled by old policy until next conn refresh.
76
+
77
+ For breaking mesh changes (mTLS trust domain), rollback may require coordinated steps across multiple namespaces. Document the order.
78
+
79
+ ## Rollback for secrets
80
+
81
+ Secrets that have been rotated cannot be un-rotated (old secret is invalidated at source). If a rotation causes outage:
82
+ - Old secret is dead.
83
+ - Either: roll forward (deploy code that uses new secret).
84
+ - Or: rotate again to a third value, deploy code accepting both.
85
+
86
+ Plan rotation with rollback in mind: keep N-1 valid for a grace period.
87
+
88
+ ## Drill schedule
89
+
90
+ A rollback path is not real until you've used it. Schedule:
91
+
92
+ - **Per-quarter**: pick one non-critical service, deploy a no-op change, rollback through the production path. Time the rollback. Note any manual steps that should be automated.
93
+ - **Per-major-platform-change**: any change to the rollback mechanism itself (control plane, mesh, registry) triggers a drill on a sample service.
94
+ - **Per-incident-postmortem**: if rollback failed or was slow during an incident, mandate a drill on a similar service within 30 days.
95
+
96
+ If you cannot drill rollback, you cannot rely on rollback.
97
+
98
+ ## Incident-time rollback decision tree
99
+
100
+ ```
101
+ P0 incident, suspected cause: recent deploy
102
+ │
103
+ ▼
104
+ Was the change pure code / config? ───── yes ──► rollback first, investigate after
105
+ │ no
106
+ ▼
107
+ Was the change a data migration? ────── yes ──► consult forward-compatibility pattern;
108
+ │ rollback may be unsafe; consider roll-forward fix
109
+ │
110
+ ▼
111
+ Was the change mesh / IAM / secret? ─── yes ──► follow per-domain rollback playbook;
112
+ may require coordinated steps
113
+ ```
114
+
115
+ Rule of thumb: if rollback is safe and the issue is severe, roll back. Investigation can happen with traffic restored.
116
+
117
+ ## What goes wrong
118
+
119
+ - Audit log doesn't record digest, only tag → rolling back to "tag" pulls the new image again. Always record digest.
120
+ - Previous version's image evicted from registry → rollback target unavailable. Retain at least last 10 deployed digests for every prod service.
121
+ - Rollback runs but skips the canary-check task → if the previous version had a latent bug, you deploy it blind. Still run smoke probes after rollback.
122
+ - Mesh propagation slower than expected → rollback "succeeded" but some pods still see old policy. Verify via mesh access logs, not just control plane.
123
+ - Database migration not forward-compatible → code rolled back but DB now ahead. Service may crash on read. Plan migrations with this in mind.