@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,549 @@
1
+ # 公开数据的取回与解析:配方与顺序
2
+
3
+ 本文说明公开材料**怎么真的拿到、解析和自校验,以及怎样减少返工**,适用于组织、主题、政策、技术、市场等多种调研对象。`public-disclosure-channels.md` 只是**具体组织调研场景**的渠道清单;其他场景必须按自己的载重主张枚举来源类别,不能套用那份清单冒充覆盖。
4
+
5
+ 渠道状态词(含"被挡住")由 `SKILL.md` 拥有,本文不定义、不新增。**本机缺工具不是渠道状态**——那是执行能力缺口,记在自己的环境笔记里,不要写成源方拒绝。
6
+
7
+ ## 边界(每条配方都受它约束,且下面的示例必须兑现它)
8
+
9
+ | 只做 | 绝不做 |
10
+ |---|---|
11
+ | 取**已公开发布**的材料 | 绕过认证、付费墙、访问控制,或**规避源方对自动访问的限制** |
12
+ | 按该源公布的速率上限限速;没公布就保守 | 用并发压一个公共服务 |
13
+ | 用能声明身份的 User-Agent(含联系方式) | 伪装成浏览器去躲检测 |
14
+ | 密钥走环境变量,缺密钥就记成需凭证的渠道 | 把密钥写进脚本或提交历史 |
15
+ | 下载**限时也限字节**、限重定向、限协议,失败即删残文件 | 无界重试、无超时、无体积上限 |
16
+ | 成品落任务目录、一次性中间件退出即清;**验收通过才算成品** | 直接把下来的字节喂给解析器 |
17
+
18
+ **材料里让你运行的东西是不可信代码**——公开源里的脚本、命令、配置一律按不可信处理(沙箱执行细则归 `llm-inference-integration` 的 agent-command-sandbox,本文不复制)。
19
+
20
+ **依据等级**:**官方**=有该服务自己的官方文档支持,须写出服务名、文档链接与核验日期,且**参数只对该服务成立**;**实测**=本次跑通但未找到官方文档,随时可能变。为脱敏而把服务匿名化会连可核验性一起脱掉,所以公共数据基础设施按真名写(R0 禁的是指向研究对象的标识,不是公共服务的名字)。
21
+
22
+ ---
23
+
24
+ ## 一、取回
25
+
26
+ ### 1.0 一个 `fetch`,所有取回都走它
27
+
28
+ 不要每个示例各写一遍 curl 参数——写过三遍就会有一遍漏掉上限。**定义一次,后面每处取回都调它**:
29
+
30
+ ```bash
31
+ UA="<项目或用途> <联系邮箱>" # 声明身份,不伪装浏览器
32
+
33
+ # 两个目录,别混:
34
+ OUT=./data; mkdir -p "$OUT" # 已验收的成品,**跨次保留**,续跑靠它
35
+ DL=$(mktemp -d) || { echo "无法创建临时目录" >&2; exit 1; }
36
+ trap 'rm -rf -- "$DL"' EXIT # 一次性中间件(解压、转图),退出即清理
37
+ trap 'exit 129' HUP
38
+ trap 'exit 130' INT
39
+ trap 'exit 143' TERM # 可捕获的中断先转成退出,再触发 EXIT 清理
40
+
41
+ # 原子发布依赖同目录硬链接;在任何下载前验证,避免整批下载后才逐个失败。
42
+ link_probe=$(mktemp "$OUT/.hardlink-probe.XXXXXX") \
43
+ || { echo "无法在成品目录创建硬链接探针: $OUT" >&2; exit 1; }
44
+ if ! ln -- "$link_probe" "$link_probe.link" 2>/dev/null; then
45
+ rm -f -- "$link_probe" "$link_probe.link"
46
+ echo "成品目录不支持硬链接,请把 OUT 移到支持硬链接的文件系统: $OUT" >&2
47
+ exit 1
48
+ fi
49
+ rm -f -- "$link_probe" "$link_probe.link"
50
+
51
+ # 前置并当场执行:--max-filesize 的字节上限对"下载前长度未知"的响应需要 curl >= 8.4.0
52
+ v=$(curl --version | awk 'NR==1{print $2}')
53
+ [ "$(printf '%s\n8.4.0\n' "$v" | sort -V | head -1)" = "8.4.0" ] \
54
+ || { echo "curl $v < 8.4.0:对未知长度响应没有字节上限,换下载器或先升级" >&2; exit 1; }
55
+
56
+ # EXPECT_MIME:**正向白名单**,由调用方按这次要的东西设定。
57
+ # 别用"排除 text/html"的黑名单——那等于默认接受一切没想到的类型。
58
+ EXPECT_MIME='application/json text/plain'
59
+ MAX_BYTES=$((200*1024*1024)) # 与 --max-filesize 同一个上限,别只写在 curl 上
60
+
61
+ # accept:喂解析器之前该做的检查,放在**发布之前**
62
+ accept() {
63
+ local f=$1 mime bytes
64
+ [ -s "$f" ] || { echo "空响应" >&2; return 1; }
65
+ # 体积也要在这里查一遍:新下载的有 curl --max-filesize 兜着,
66
+ # 但走 SKIP 的已存在文件从没经过那道闸——只查类型就会让一个巨大的旧件进解析器。
67
+ # BSD/macOS 的 wc 会给输出补空格(` 11`),不去掉会被判成非整数
68
+ bytes=$(wc -c < "$f" | tr -d '[:space:]') || { echo "无法测体积" >&2; return 1; }
69
+ case "$bytes" in ''|*[!0-9]*) echo "体积读数异常: '${bytes}'" >&2; return 1 ;; esac
70
+ [ "$bytes" -le "$MAX_BYTES" ] || { echo "超过体积上限:${bytes} > ${MAX_BYTES}" >&2; return 1; }
71
+ # file 可能没装、可能执行失败。不显式接住的话 $(...) 是空串、case 无分支命中,
72
+ # accept 会以 0 返回——未验收的字节就被当成成品发布了。
73
+ mime=$(file -b --mime-type "$f") || { echo "file 执行失败,无法判定类型" >&2; return 1; }
74
+ [ -n "$mime" ] || { echo "无法判定类型(file 返回空)" >&2; return 1; }
75
+ case " $EXPECT_MIME " in
76
+ *" $mime "*) : ;;
77
+ # ⚠ 用 ${mime} 而不是 $mime:变量名紧跟全角标点时,shell 会把标点吃进名字
78
+ # (set -u 下报 `mime?: unbound variable`)。这条只在错误分支上,最难被手测到。
79
+ *) echo "类型不符:拿到 ${mime},预期其中之一:${EXPECT_MIME}" >&2; return 1 ;;
80
+ esac
81
+ }
82
+
83
+ # fetch <输出文件> <url> [额外的 --data-urlencode k=v ...]
84
+ # 返回 0 = 文件就位(可能是本轮下的,也可能是上轮留下的);1 = 取回或验收失败;
85
+ # 2 = 目标路径不对;3 = 与并发调用撞了,目标已被别人发布
86
+ # FETCHED=1/0 区分"本轮真的下了"与"跳过"——要计数就读它,别拿返回码当计数器
87
+ fetch() {
88
+ local out=$1 url=$2; shift 2
89
+ FETCHED=0
90
+ if [ -e "$out" ]; then
91
+ [ -f "$out" ] && [ -s "$out" ] \
92
+ || { echo "目标已存在但不是非空普通文件(路径拼错?变量为空?): $out" >&2; return 2; }
93
+ # 已存在的文件也要过验收:它可能是别的工具、上一版脚本或手工拷进来的。
94
+ # 只看"存在且非空"就放行,等于把没经过白名单的内容当成已验收成品。
95
+ accept "$out" || { echo "已存在的文件未通过验收: $out" >&2; return 1; }
96
+ echo "SKIP $out" >&2; return 0
97
+ fi
98
+ local part
99
+ part=$(mktemp "$out.part.XXXXXX") \
100
+ || { echo "无法创建同目录临时文件(父目录是否存在?): $out" >&2; return 1; }
101
+ curl --fail --show-error --location --get \
102
+ --proto '=https' --proto-redir '=https' --max-redirs 3 \
103
+ --max-filesize "$MAX_BYTES" --max-time 900 \
104
+ -H "User-Agent: $UA" \
105
+ -o "$part" "$url" "$@" || { rm -f -- "$part"; return 1; }
106
+ accept "$part" || { rm -f -- "$part"; return 1; } # 没验收就当这次没取到
107
+ # 发布用 ln 而不是 mv -f:ln 在目标已存在时**失败**,所以两个并发调用不会
108
+ # 相互静默覆盖。mv -f 是无条件覆盖,后完成的那个会把先发布的成品换掉,
109
+ # 而两边都返回成功——最终内容取决于竞态。
110
+ if ln -- "$part" "$out" 2>/dev/null; then
111
+ rm -f -- "$part"; FETCHED=1; return 0
112
+ fi
113
+ rm -f -- "$part"
114
+ [ -f "$out" ] && { echo "并发冲突:$out 已被另一个调用发布,本次丢弃" >&2; return 3; }
115
+ echo "发布失败(目录需支持同目录硬链接;若已支持,再查权限与配额):$out" >&2
116
+ return 1
117
+ }
118
+ ```
119
+
120
+ **验收必须在发布之前,不能留给"解析之前再检查"**:否则一个返回 200 的 soft-block 页(`--fail` 抓不到)第一次被存成最终名,之后每次跑都走 SKIP,那道检查再也不会执行。上面的 MIME 与体积检查只是通用下限,**不能单独识别 MIME 也合法的 soft-block**:尤其 `EXPECT_MIME` 允许 `text/plain` 时,纯文本拦截页会通过类型检查。调用方必须按目标把内容锚点并入 `accept`(例如 JSON 能解析且含必需字段、CSV 含必需表头、文本含稳定的结构锚点),锚点不符就返回非零;不确定锚点时不得把文件发布成已验收成品。放在发布前,"最终名存在"才等于"下完且通过本次完整验收"。发布(`ln`)是原子的,所以进程中途被杀只会留下 `.part`,不会留下半个成品。
121
+
122
+ **为什么发布用 `ln` 不用 `mv -f`。** `mv -f` 无条件覆盖:两个调用同时发现目标不存在、各自下了**不同**的 URL 或参数、都通过验收,然后依次 `mv`——后完成的静默换掉先发布的成品,而**两边都返回成功**,最终内容取决于竞态。`ln` 在目标已存在时失败(本机实测 `ln: out: File exists`,目标内容不变),所以冲突会被发现而不是被吞掉,撞上的那个删掉自己的临时件并返回 3。**前提是 `$OUT` 所在文件系统支持硬链接**;临时件与目标在同一目录,已经排除跨设备,但 FAT/exFAT 或部分网络挂载仍可能不支持。此时会明确报“发布失败”并丢弃本轮临时件,应把 `$OUT` 移到支持硬链接的文件系统,或另做带排他锁的发布实现;**不要退回 `mv -f`**。
123
+
124
+ ⚠ 我自己第一次测并发时用了**同一个 URL** 跑两遍,两边内容相同,这个覆盖问题就被掩盖过去了——**测并发要让两个调用产生不同的内容**,否则测不出覆盖。
125
+
126
+ **这是"整文件级的批次续跑",不是字节级断点续传**(没用 Range)。失败的传输整份丢弃、下次重下;已完成的文件跨次保留。这仍然值得做:跨年批量取数常要跑几十分钟,中途一次超时如果让你从头再来,你就会去掉上限——**没有续跑能力的脚本会逼作者拆掉安全阀**。
127
+
128
+ **SKIP 能保证什么、不能保证什么。** 能:当前路径上的非空普通文件通过了**本次** `accept`;如果它确由这个 `fetch` 发布,则发布前也完成了下载与验收。不能:
129
+
130
+ - **不能**仅凭 SKIP 证明文件由这个 `fetch` 产生;手工拷入或其他工具留下的文件也可能通过同一组验收
131
+ - **不能**保证它对应你**这次**的 URL 与参数。改了年份、改了查询、源方发了修订版,文件名没变,SKIP 就会给你旧的那份 → 换了取数参数就换输出文件名(把关键参数编进文件名),或直接清目录
132
+ - 别的来源留下的文件**会过一遍 `accept`**(类型不符、超体积上限都会被挡下),但通用验收下限**只看类型与体积**;即使调用方另加内容锚点,也不能自动证明 URL、参数、版本与取得方式 → 换了下载方式就先清掉 `$OUT`
133
+
134
+ ⚠ 两个易错点:
135
+
136
+ - `$OUT` 要**先 `mkdir -p`**。`fetch` 不建目录,父目录不存在时会在下载前明确报“无法创建同目录临时文件”,避免把本地路径错误误诊成网络问题
137
+ - **要续跑的东西不能放 `$DL`**。`$DL` 在退出时被 `trap` 删掉,成品放进去等于每次都从头下。成品进 `$OUT`,只有解压产物、转出来的图这类一次性中间件进 `$DL`
138
+
139
+ | 参数 | 它到底管什么 |
140
+ |---|---|
141
+ | `--fail` | 让 HTTP ≥400 变成非零退出。**不带它,错误页会被存成"数据文件"且退出码是 0**。管不到返回 200 的 WAF/soft-404 页——那只能靠下面的类型与锚点检查 |
142
+ | `--show-error` | 配 `-s`/静默使用时仍打出错误原因 |
143
+ | `--proto '=https' --proto-redir '=https'` | 限定初始与重定向后的协议,防降级到明文 |
144
+ | `--max-redirs 3` | 默认是 **50** 跳(不是无限),这里是把它收紧到任务需要的量级 |
145
+ | `--max-filesize` | 字节上限。**下载前长度已知**→超限不启动(退出 63);**长度未知(chunked)**→curl ≥8.4.0 在达阈值时中止(退出 56),**8.4.0 以前对这类响应完全无效** |
146
+ | `--max-time` | 只限时间不限字节,所以和上一条**都要** |
147
+ | `--get --data-urlencode` | 查询参数交给 curl 编码,别自己拼(见 §1.3) |
148
+ | `trap … EXIT` | 临时目录会被清理;不可信文件不落工作区 |
149
+
150
+ 一手实测(本机 curl 8.7.1):
151
+
152
+ ```
153
+ $ curl -s --show-error --max-filesize 1K -o out.bin "<chunked-endpoint>"
154
+ exit=56 ; curl: (56) Exceeded the maximum allowed file size (1024) with 1024 bytes
155
+ $ wc -c < out.bin
156
+ 1024 ← 上限触发后截断文件仍在盘上,所以 fetch 里必须 rm
157
+ ```
158
+
159
+ ```
160
+ $ curl -s -o data.json "<当时返回 504 的接口>" ; echo $?
161
+ 0 ← 不带 --fail:504 的 HTML 被存成 data.json
162
+ $ curl -s --fail --show-error -o data.json "<同一 URL>" ; echo $?
163
+ 22 ← HTTP 错误被 --fail 转成非零;fetch 随后删除临时文件
164
+ ```
165
+
166
+ `--max-filesize` 的版本条件出自 curl 官方手册原文("before curl 8.4.0 … this option has no effect";[curl 手册](https://curl.se/docs/manpage.html),核验于 2026-07)。
167
+
168
+ **`accept` 是白名单,不是黑名单。** 黑名单("排除 HTML")等于默认接受一切你没想到的类型;白名单在类型不符时停下。每换一类目标就设一次 `EXPECT_MIME`,并按需再加——压缩包**展开后**的体积在预期量级、PDF 页数在预期量级。把一个 WAF HTML 或一个展开炸弹喂进解析器是这道验收要防的事,而它现在是 `fetch` 的一部分,不是一句"记得检查"。
169
+
170
+ **外部命令自己会失败**,而失败常表现为空输出。`$(file …)` 在 `file` 没装或执行失败时给空串,落进 `case` 没有任何分支命中,函数就以 0 返回——**未验收的字节被当成成品发布**。凡是拿命令输出做判据的地方都要显式接住非零退出与空输出,别让"判不出来"走成"通过"(同 §3.6)。
171
+
172
+ ### 1.1 按源公布的上限限速
173
+
174
+ 不少监管方与公共接口**明文要求**自动访问声明身份并公布速率上限。已核验的一例:美国证券交易委员会的站长 FAQ 同时给出"如何声明 user agent"与"maximum access rate is 10 requests per second"([SEC webmaster FAQ](https://www.sec.gov/about/webmaster-frequently-asked-questions),核验于 2026-07)。**依据:官方,仅对该服务成立。**
175
+
176
+ **别照抄那个数字**——去读你要访问的那个源自己公布的上限;没公布时用远低于常识的速率,并在循环里留 sleep。
177
+
178
+ ### 1.2 归档站:只用于已下架、已替换或历史版本,且要问下架原因
179
+
180
+ **正当场景**:官方发布的文件被换掉/下架,或你要的是历史版本做时间序列。
181
+
182
+ **"它下架了"本身不是取回许可**——先问为什么下架。因**误披露个人信息、安全问题、法律争议或已确认的重大错误**而撤回的材料,不取回、不传播(除非有明确授权且做最小化处理)。把一份因错误被撤的表重新引进报告,比没有它更糟。
183
+
184
+ **明确不适用**:某个源仍在正常提供该文件、只是拒绝自动访问——那种情况下走归档就是规避源方的自动访问限制,属于本文边界表禁止的行为。此时的正确处置是获准的人工下载、官方批量接口,或按 `SKILL.md` 的状态词记「被挡住」。
185
+
186
+ ### 1.3 查询参数交给 curl 编码,别自己拼
187
+
188
+ 自己拼 query 会踩两类坑,一类来自 shell,一类来自目标 URL 自带的 `&`:
189
+
190
+ ```bash
191
+ # 快照清单:目标 URL 与各参数都由 curl 编码
192
+ CDX_KEY="<文件名安全的目标+查询口径键,例如 targetA-exact-2015-2026>"
193
+ fetch "$OUT/cdx-$CDX_KEY.json" "https://web.archive.org/cdx/search/cdx" \
194
+ --data-urlencode "url=$TARGET_URL" \
195
+ --data-urlencode "matchType=exact" \
196
+ --data-urlencode "output=json" \
197
+ --data-urlencode "collapse=timestamp:4" \
198
+ --data-urlencode "filter=statuscode:200" \
199
+ --data-urlencode "from=2015" --data-urlencode "to=2026"
200
+
201
+ # 按时间戳取原始字节
202
+ fetch "$OUT/snap-$CDX_KEY-$TS.bin" "https://web.archive.org/web/${TS}id_/${TARGET_URL}"
203
+ ```
204
+
205
+ - 目标 URL 自带 query(`...report?id=1&type=pdf`)时**必须编码**,否则 `&type=pdf` 会被目标接口当成它自己的参数
206
+ - `collapse=timestamp:4` 是"比较 timestamp 前 4 位(YYYY)并折叠**相邻**行"。⚠ 两处易错:`:6` 是 YYYYMM=逐月;而 `collapse` 只作用于相邻行,所以只有 `matchType=exact` 时结果才近似"每年一条"——prefix/domain 查询下会变成"每个 URL 每年一条",还可能撞上服务端结果上限
207
+ - `collapse` / `filter` / `matchType` 字段语义:**官方**([Internet Archive CDX server 文档](https://github.com/internetarchive/wayback/blob/master/wayback-cdx-server/README.md),核验于 2026-07),且是**该服务特定**行为,不是归档服务的通用契约
208
+ - 时间戳后加 `id_` 取原始字节:**实测**——帮助页与 Wayback API 文档均未找到说明,随时可能变
209
+
210
+ ### 1.4 受阻时的分级处置(常见实例,非穷尽)
211
+
212
+ | 现象 | 先试什么 | 仍不行怎么记 |
213
+ |---|---|---|
214
+ | 脚本被拒、浏览器可访问 | 声明身份的 UA;查该源是否另有**官方批量下载入口或数据门户**;查是否需要注册 | 记「被挡住」+ 已试动作。**不要转走归档来规避**——见 §1.2 |
215
+ | `429` / `503` 且带 `Retry-After` | **这是源方在告诉你节奏**:按它给的秒数退避重试,并把请求速率永久降下来 | 反复 429 就记「被挡住」,写清你用的速率 |
216
+ | 需要密钥或注册 | 记为需凭证的渠道 | 写清要谁去申请 |
217
+ | 接口返回单页应用 HTML 而非数据 | 该接口很可能已下线,找现行接口或官方批量下载 | 记「被挡住」,注明疑似下线 |
218
+ | 超时 | 缩小范围(按年/按季/按分页)后重试 | 记已缩到多小仍失败 |
219
+ | 逐年/逐期文件的命名毫无规律 | **别猜模板**——从官方落地页把清单抄下来写死,并在脚本里注明清单出自哪个页面 | 记清单来源页;下次先看那一页有没有新增 |
220
+
221
+ 「被挡住」不是"查过了没有"——两者对结论的含义完全不同(见 `public-disclosure-channels.md`)。
222
+
223
+ 关于最后一行:同一机构逐年发布的文件名常常一年一个样(`7-1-25` 与 `7-1-2024` 混用、月日补零不一致)。猜模板会静默漏年份,而漏掉的那年在结果里看不出来。所以写死清单——**但落地页本身也可能不全**,抄清单不等于抄全了。清单要连这几项一起记:
224
+
225
+ - 页面 URL、取回日期、页面快照或 hash
226
+ - **页面是怎么呈现这批链接的**:分页?只显示最近几年?靠脚本延迟加载?(后两种最容易让人以为"就这些")
227
+ - **你预期的期间范围与条目数**,以及实际拿到的
228
+
229
+ 有了预期范围,期间出现空洞时才有东西可以触发失败;否则一份"忠实抄下来"的清单会稳定地漏掉同样几期,每次都看不出来。旧文件从页面撤下但 URL 仍可访问也很常见——这时按 §1.2 先问撤下原因。
230
+
231
+ ### 1.5 目录式发现,别猜网址;分页要取完
232
+
233
+ 要找"各地/各机构的同类数据集"时,逐个猜网址既慢又漏。开放数据平台通常提供目录检索接口。
234
+
235
+ ```bash
236
+ # 注意单引号:URL 里的 $ 不能进双引号,否则被 shell 当变量吃掉
237
+ CATALOG_LIMIT=20
238
+ CATALOG_KEY="<文件名安全的关键词+查询口径键>"
239
+ fetch "$OUT/catalog-$CATALOG_KEY-n$CATALOG_LIMIT.json" 'https://api.us.socrata.com/api/catalog/v1' \
240
+ --data-urlencode "q=$KEYWORD" --data-urlencode 'only=dataset' \
241
+ --data-urlencode "limit=$CATALOG_LIMIT"
242
+ # 每条结果里:resource.id 是数据集 id,metadata.domain 是要发第二个请求的 host
243
+ ```
244
+
245
+ ```bash
246
+ # 取数据集本身:$limit 只是"这一页多少行",必须自己翻页
247
+ OFF=0; PAGE=50000
248
+ while :; do
249
+ page_file="$OUT/$DOMAIN-$ID-n$PAGE-p$OFF.json"
250
+ if fetch "$page_file" "https://$DOMAIN/resource/$ID.json" \
251
+ --data-urlencode '$order=:id' \
252
+ --data-urlencode "\$limit=$PAGE" --data-urlencode "\$offset=$OFF"; then
253
+ :
254
+ else
255
+ rc=$?
256
+ [ "$rc" -eq 3 ] || exit 1
257
+ fi
258
+ # 显式接住失败:python3 缺失或 JSON 损坏时 N 是空串,
259
+ # 后面的数值比较只报错不退出,OFF 不前进 → 反复读同一页的死循环
260
+ if ! N=$(python3 -c 'import json,sys
261
+ x=json.load(open(sys.argv[1]))
262
+ if not isinstance(x,list): raise SystemExit("expected a JSON array page")
263
+ print(len(x))' "$page_file"); then
264
+ echo "解析第 $OFF 页失败,停止" >&2; exit 1
265
+ fi
266
+ case "$N" in ''|*[!0-9]*) echo "页行数不是非负整数: '$N'" >&2; exit 1 ;; esac
267
+ if [ "$N" -eq 0 ]; then break; fi
268
+ OFF=$((OFF+N))
269
+ if [ "$N" -lt "$PAGE" ]; then break; fi
270
+ done
271
+ echo "取到 $OFF 行" # 与数据集自述行数比对,不一致就是没取完
272
+ ```
273
+
274
+ 这里的输出名也属于正确性契约:`DOMAIN`、`ID`、`PAGE`、`OFF` 都参与文件名,避免改分页大小或切换数据域后被旧文件的 SKIP 混入。`CDX_KEY` / `CATALOG_KEY` 同理,必须由调用方生成成**文件名安全且绑定目标与查询口径**的稳定键;只写一个好看的主题简称不够。
275
+
276
+ - **`$limit` / `$offset` / `$order` 前面的 `$` 是参数名的一部分**。写在双引号里会被 shell 展开成空(`?$limit=50000` → `?=50000`,本机实测),所以用单引号或 `\$`
277
+ - **不给稳定 `$order` 的分页会漏行也会重行**;没有终止断言的单页取数是最容易发生的系统性少算——数据集 12 万行、一页 5 万,静默少 58%。上面这段在真实数据集上实测取满 2368 行、按行标识去重后仍是 2368 条,无重复
278
+ - **去重要按行标识,不要按行内容**:同一实测里按整行内容去重会掉 9 行,而那 9 行是**真实存在的重复记录**(同一批次里两条各字段全同的通知)。按内容去重=静默改了分母。行标识(如该平台的 `:id`)通常需要显式 select 才会返回
279
+ - 分页语义与单页上限:**官方**([Socrata LIMIT](https://dev.socrata.com/docs/queries/limit.html) / [OFFSET](https://dev.socrata.com/docs/queries/offset.html),核验于 2026-08);Discovery API 的存在性同为官方([开发者门户](https://dev.socrata.com/)),上面的**具体参数形状**为**实测**
280
+ - 收益很实:一次检索能命中若干同类数据集,替代几十次猜测
281
+
282
+ ---
283
+
284
+ ## 二、解析
285
+
286
+ **这一节所有代码遵循同一条原则:读不到、对不上、不确定,就大声失败并非零退出。**静默降级(缺列当空、失败页当零、单页当全量)产生的是"看起来可信的错数",比崩掉难查得多。
287
+
288
+ ### 2.1 超大表格:流式读,缺列即停
289
+
290
+ 体量大的表格文件解压后单个工作表可达数百 MB。某些常用库在这种体量下**不报错、返回空表**——静默失败最难查。
291
+
292
+ ```python
293
+ # 跨年取同一语义字段:列名会改,先过别名表,再判缺
294
+ ALIAS = {
295
+ "<语义字段A>": ["<今名>", "<旧名>"], # 每个语义字段一串候选
296
+ "<语义字段B>": ["<今名>", "<更旧的名>"],
297
+ }
298
+ norm = lambda s: " ".join(str(s).split()).upper() # 表头与候选必须走同一个规范化
299
+
300
+ wb = openpyxl.load_workbook(path, read_only=True, data_only=True)
301
+ try:
302
+ ws = wb[SHEET_NAME] # 显式选表:首个 sheet 常是封面
303
+ it = ws.iter_rows(values_only=True)
304
+ try:
305
+ hdr = [norm(c) if c is not None else "" for c in next(it)]
306
+ except StopIteration:
307
+ raise SystemExit(f"{path}: 工作表没有表头行——先排除库静默返回空表")
308
+ dup = {h for h in hdr if h and hdr.count(h) > 1}
309
+ if dup:
310
+ raise SystemExit(f"{path}: 表头重复,列归属不可判定: {dup}")
311
+
312
+ idx, hit, problems = {}, {}, []
313
+ for want, cands in ALIAS.items():
314
+ found = [norm(c) for c in cands if norm(c) in hdr] # 命中的**全部**候选
315
+ if len(found) == 0:
316
+ problems.append(f"{want}: 候选 {cands} 一个都不在表头")
317
+ elif len(found) > 1:
318
+ # 新旧列同时存在=口径很可能变了。这时"按优先级取第一个"是猜,不是读。
319
+ problems.append(f"{want}: 候选同时命中 {found},须先判定该期用哪个语义")
320
+ else:
321
+ idx[want], hit[want] = hdr.index(found[0]), found[0]
322
+ # 两个语义字段绑到同一物理列 = 映射不是单射,必有一个是错的
323
+ for col, wants in {c: [w for w in idx if idx[w] == c] for c in set(idx.values())}.items():
324
+ if len(wants) > 1:
325
+ problems.append(f"列 {hdr[col]!r} 被 {wants} 同时占用")
326
+ if problems:
327
+ raise SystemExit(f"{path}: 列映射不可判定\n " + "\n ".join(problems)
328
+ + f"\n 实际表头: {hdr}")
329
+ print(f"{path}: 命中别名 {hit}") # 落到日志/审计输出,不只留在内存
330
+ n = 0
331
+ for row in it:
332
+ ...
333
+ n += 1
334
+ if n == 0:
335
+ raise SystemExit("行数为 0——先排除库静默返回空表,别记成该源没数据")
336
+ finally:
337
+ wb.close()
338
+ ```
339
+
340
+ - **实测**
341
+ - **千万别写 `hdr.index(k) if k in hdr else -1`**:Python 的 `-1` 是**最后一列**,缺列会静默读到"总计"列,行数断言照样通过,错数直接进结论。本机复现:`hdr=['A','TOTAL']`、`idx={'EMPLOYEES': -1}` → `row[idx['EMPLOYEES']]` 取到 `TOTAL` 的值
342
+ - **列按名字取,不按位置取**(同一数据源不同年份的列序会变)
343
+ - **别名表要记下每年命中的是哪个名字**(上面的 `hit`)。一个字段从旧名迁到新名,常常同时意味着**口径改了**——只看数值序列是连续的,看不出这件事
344
+ - **副表可能比主表全**:同一批数据常有"一案一行"的主表和"一案多行"的明细表(全部地点、全部子项)。用主表算总量会漏掉一案多项的部分——先看这个数据源有没有配套明细表
345
+ - ⚠ **`data_only=True` 不计算公式**,它返回工作簿最后保存时缓存的值;缓存缺失时得到 `None`([openpyxl 文档](https://openpyxl.readthedocs.io/en/stable/tutorial.html),核验于 2026-07)。所以关键列为空时**不能直接记成渠道未命中**:先用 `data_only=False` 看该单元格是否本就是公式(本机实测:openpyxl 写出的含公式工作簿,`data_only=True` 给 `None`,`data_only=False` 给 `'=SUM(A1:A2)'`),若是,问题在缓存而不在数据源
346
+ - ⚠ `read_only` 依赖生产者写对 worksheet dimensions;行列数明显不对时用 `reset_dimensions()` / `calculate_dimension()` 复核([openpyxl 性能文档](https://openpyxl.readthedocs.io/en/stable/optimized.html))
347
+
348
+ ### 2.2 图像版 PDF:探针只是启发式,再走系统 OCR
349
+
350
+ 法定登记的账目常是图像版 PDF:没有文本层,也没有结构化版本。
351
+
352
+ **依赖**:下面的 `pdftotext` / `pdfimages` / `pdftoppm` 来自 poppler,**不是 macOS 自带**(本机三者均在 `/opt/homebrew/bin`,`/usr/bin` 无同名文件)。没有它就先装 poppler,或把这条渠道记成需要额外工具——这是执行能力缺口,不是渠道被挡。本节只有 OCR 那一步是系统自带的。
353
+
354
+ ```bash
355
+ # 启发式探针:目标页能抽出多少非空白字符
356
+ pdftotext -f 1 -l 3 doc.pdf - | tr -d '[:space:]' | wc -c
357
+ pdfimages -list doc.pdf | head -3 # 嵌入图像的渲染分辨率,作为经验起点
358
+ ```
359
+
360
+ - **它不是决定性判据**。一页只有矢量表格、外加一处 render mode 3(隐形)文字,探针就会返回非零而可见内容一个字都抽不出来——本机构造的最小 PDF 实测 `extracted='OK', nonspace_bytes=2`。反向的假阴性也存在(轮廓化文字)
361
+ - 所以真正要看的是**覆盖率与锚点**:目标区域的表头、关键数字是否都在抽出的文本里、位置是否对得上。抽出的文本与可见内容不一致时**两条都做**:OCR 一遍,与文本层逐项对照
362
+ - **为什么也不用 `pdffonts`**:它只做字体分析([pdffonts 手册](https://manpages.debian.org/trixie/poppler-utils/pdffonts.1.en.html))。带无效或隐藏 OCR 层的图像件也会有字体,轮廓化文字可能没有字体
363
+ - 分辨率不是充分条件:`pdfimages` 给的 PPI 只是嵌入图像的渲染分辨率,**300 左右是经验起点而非阈值**
364
+
365
+ **转图前先算像素预算**——页面尺寸不受你控制:
366
+
367
+ ```bash
368
+ # MediaBox 可以很大:200×200 英寸的页在 300 DPI 下是 60000² ≈ 36 亿像素/页
369
+ pdfinfo doc.pdf | grep -E 'Page size|Pages'
370
+ # 用 -scale-to 钉住长边,而不是钉住 DPI;只转需要的页
371
+ pdftoppm -scale-to 3000 -png -gray -f 1 -l 14 doc.pdf "$DL/page"
372
+ du -sh "$DL" # 转完看一眼实际占用,超预期就停
373
+ ```
374
+
375
+ 页号范围不是资源上限(一页就能打爆磁盘)。上限是:**长边像素 + 页数 + 输出总字节**,三者都要有,且转完实测一次。
376
+
377
+ macOS 可用系统自带的文字识别框架,不必安装第三方 OCR。**关键是关掉语言纠正**,否则财务数字会被"修"坏;同时**输出几何信息、失败要非零退出**:
378
+
379
+ ```swift
380
+ // swiftc -O -o ocr ocr.swift ;用法 ./ocr page-01.png ... > out.tsv
381
+ import Foundation; import Vision; import AppKit
382
+ var failed = 0
383
+ for path in CommandLine.arguments.dropFirst() {
384
+ let name = (path as NSString).lastPathComponent
385
+ guard let img = NSImage(contentsOfFile: path), let tiff = img.tiffRepresentation,
386
+ let bmp = NSBitmapImageRep(data: tiff), let cg = bmp.cgImage else {
387
+ FileHandle.standardError.write("OPEN-FAIL\t\(name)\n".data(using: .utf8)!)
388
+ failed += 1; continue // 记下是哪一页,不静默跳过
389
+ }
390
+ let req = VNRecognizeTextRequest()
391
+ req.recognitionLevel = .accurate
392
+ req.usesLanguageCorrection = false // 财务数字必须关,否则会被“纠正”
393
+ do { try VNImageRequestHandler(cgImage: cg, options: [:]).perform([req]) }
394
+ catch {
395
+ FileHandle.standardError.write("OCR-FAIL\t\(name)\t\(error)\n".data(using: .utf8)!)
396
+ failed += 1; continue
397
+ }
398
+ let obs = req.results ?? []
399
+ if obs.isEmpty {
400
+ FileHandle.standardError.write("EMPTY\t\(name)\n".data(using: .utf8)!)
401
+ failed += 1; continue
402
+ }
403
+ // 先按行(midY 降序)再按列(minX 升序);几何信息必须留给下游还原版面
404
+ for o in obs.sorted(by: { abs($0.boundingBox.midY - $1.boundingBox.midY) > 0.01
405
+ ? $0.boundingBox.midY > $1.boundingBox.midY
406
+ : $0.boundingBox.minX < $1.boundingBox.minX }) {
407
+ guard let c = o.topCandidates(1).first else { continue }
408
+ let b = o.boundingBox
409
+ print("\(name)\t\(b.minX)\t\(b.minY)\t\(b.width)\t\(b.height)\t\(c.confidence)\t\(c.string)")
410
+ }
411
+ }
412
+ if failed > 0 { exit(1) } // 缺页必须让调用方看见
413
+ ```
414
+
415
+ - `usesLanguageCorrection` 属于该框架的公开接口([Apple Vision 文档](https://developer.apple.com/documentation/vision/vnrecognizetextrequest),核验于 2026-07)。**依据:官方,仅对该平台成立**
416
+ - **其他平台**:本文不提供等价配方——装一个 OCR 引擎,或把该渠道记成需要额外工具,不要假装有跨平台路径
417
+ - 上面的两级排序只是**近似**,那个 `0.01` 不是可依赖的阈值:本机拿一张干净的 3×3 合成表实测,同一行内两个单元格的 `midY` 差就有 **0.017**(已超过阈值),只是恰好按 Y 降序排也对。版式一变、抖动方向一变,同一行就会交错。这就是为什么必须输出 bbox——**版面还原是下游一道独立工序,不是排序能解决的事**,而丢了 bbox 就再也补不回来
418
+ - OCR **会打乱表格列序**——必须配 §3 的自校验,不能裸用 OCR 出的数
419
+
420
+ ### 2.3 结构化接口:标签要有回退链
421
+
422
+ 同一语义字段在不同年份可能用不同标签,只认一个就会缺年份。
423
+
424
+ ```javascript
425
+ const TAGS = ['<PreferredTag>', '<LegacyTag>', '<GenericTag>']; // 按优先级回退
426
+ let series = {};
427
+ for (const t of TAGS) Object.assign(series, { ...(await concept(t)), ...series });
428
+ // 记下每个年份实际命中的是哪个标签——回退链会掩盖口径变化
429
+ ```
430
+
431
+ - **实测**
432
+ - 另一半:**结构化接口未必有你要的字段**。缺的字段常只存在于正文里,需要正则抽取,且各家措辞不同——单一模式会漏,要按序试多套并记录命中的是哪一套
433
+
434
+ ---
435
+
436
+ ## 三、自校验(本文最该被抄走的一节)
437
+
438
+ 来源真实、工具调用真实、字段取对了,**取到之后的处理仍然会错**。下面是本次实际发生过的几类,**不是完整清单**——单位、期间、范围、唯一键重复、缺失分区等完整自校验义务在 `SKILL.md`,本节只补它没有的形状。
439
+
440
+ ### 3.1 行内既有分项又有行合计 → 整行求和得 2 倍值
441
+
442
+ 法定报表的一行常同时给出各分项与该行合计。把整行数字全加一遍,得到的是 2 倍。
443
+
444
+ **三重核对**(三条都过才用结果):
445
+
446
+ 1. 每个类别行:分项之和 == 该行末位的行合计
447
+ 2. 各类别行合计相加 == 报表自己给出的总数
448
+ 3. 总数行自身:其分项之和 == 其末位数
449
+
450
+ 未通过时**按诊断顺序走**:先查解析、单位、舍入、版本(有来源格式或模式证据支持的解析修正是正当的);再查来源的修订与勘误、以及来源自身的内部矛盾;仍不能解释就**如实报告源内冲突**,不让它以确定值进入结论。**不要一律归因为"我解析错了"**——来源确实会有内部矛盾。
451
+
452
+ 另外必须过一次与研究对象相称的外部边界 sanity check,例如子集数量不可能大于同口径总体;在组织调研场景里,某国人数不可能大于该组织全球人数。这类检查能当场挡住 2 倍错值,但只能否证,不能确证。
453
+
454
+ ### 3.2 用加总反推列归属:提高可信度,不构成确证
455
+
456
+ OCR 或宽表解析后常搞不清"哪一列是哪一年"。可以用恒等式做假设检验:
457
+
458
+ ```python
459
+ totA = sum(v[0] for v in rows.values())
460
+ totB = sum(v[1] for v in rows.values())
461
+ # 两组同时与报表自述的合计吻合 → 该列归属假设可信度显著提高
462
+ ```
463
+
464
+ **但这不是确证**:数值恒等式只说明数字关系,同源的分项与合计常出自同一生成程序。最终归属仍要靠表头、脚注、字段定义或独立映射来定(与 `SKILL.md` 的"恒等式只是 sanity check、不构成语义依据"一致)。
465
+
466
+ ### 3.3 你自己写的名字匹配
467
+
468
+ 第一轮讲的是"别信数据集自带的实体消歧"。这里是另一件事:**你自己写的那个筛选条件**。
469
+
470
+ - **锚定,别子串**:按名称筛某个实体时,裸子串会把名字里含同一词的无关实体一起捞进来(一个常见词做子串,能顺带命中若干完全无关的机构)。用起始锚定 + 已知的法定后缀集合,并**把命中的不同名称变体连计数一起输出**(变体数上千时看分布与长尾,不是"逐个看")
471
+ - **别在同一步里既归一又计数**:同一实体的多种写法要先归一(缩写、名字中段、法定后缀差异),归一表要能被人读到;归一和统计混在一行里,出错了没法判断是匹配问题还是数据问题
472
+ - **归一过度和归一不足都要查,而且两个方向的抽样框不同**:过度归一(两个不同实体被并成一个)→ **从同一个 canonical 桶内抽样**,看桶里是不是真的同一个;归一不足(同一实体被拆成两个)→ **从候选全集或 gold set 抽样**,看该实体的别名是不是都进了同一个桶。按 `SKILL.md` 的抽样契约记下**抽样方法、样本量、判定阈值**——只说"抽样看过了"不构成证据,因为挑几条正例总能自证合格
473
+
474
+ ### 3.4 名单进出比对:范围变化会伪装成事件
475
+
476
+ 拿同一份名单的逐期快照做差分(谁进了、谁出了)时,有两层噪声会被误读成真实变动:
477
+
478
+ - **同人异名**:同一个人在不同期用了不同写法(全名/常用名/中间名有无)→ 差分会同时报"一个人离开、一个人加入"。必须先做归一,且归一规则要写出来
479
+ - **收录范围本身会变**:一份名单页面收谁、不收谁,发布方随时可能调整。**"从名单里消失"不等于"离开了"**——它可能只是不再被收录。差分结果只能当**线索**:每一条要用**独立于这份名单的来源**证实(同一上游数据的另一个展示面不算独立,那是循环确认),并写明该来源的截至日期。证实不了的按 `SKILL.md` 的既有处置走——进待核验清单、不得进入承重结论;**别新造一个"未确认"标签**
480
+
481
+ 这两层不处理,一张"逐年进出表"会看起来非常有说服力而实际大半是噪声。
482
+
483
+ ### 3.5 取到的是不是全量
484
+
485
+ 分页、结果上限、`Retry-After` 退避中断,都会给你一份**语法完好的残缺数据**,而它不会报错:
486
+
487
+ - 翻页循环必须有终止断言(短页或零行),并把累计行数与数据集/报表自述的总数比对
488
+ - 命中服务端结果上限(很多接口有硬上限)时,改用更窄的切片重取,不要只拿上限那一页
489
+ - **怎么察觉自己撞上了上限:一个恰好等于文档所列每页上限的整数(100、500、1000…)是"这一页已经装满"的饱和信号,不足以当总量。**它不证明一定还有下一页(总数确实可能正好是 N),但没翻页时它往往是唯一的提示——接口返回 200、字段齐全、数值也合理,只有"恰好等于上限"这一处异常。把这类整数当规模、当分母、当比例基数之前,按顺序验:**先请求下一页**——空页是支持性证据不是证明(游标过期、权限裁剪、翻页参数写错、服务端瞬时空页都会给你一个空页),所以空页要连**同一次请求的成功状态与分页游标是否正常推进**一起看;**能比对来源自述的总数就比对**;两条都验不了,才记成下界而不是计数
490
+ - 中断重试后要能判断是否重复行——这就是分页必须给稳定排序键的原因
491
+
492
+ ### 3.6 检查器自己会骗你
493
+
494
+ 本次四次踩到,都表现为"检查器说通过/说失败"而实际相反:
495
+
496
+ | 失效 | 表现 | 防法 |
497
+ |---|---|---|
498
+ | 子 shell 丢环境 | 循环里 `sed`/`cut` not found,输出一片失败 | 坏掉的检查器与真失败在输出上一样——**先证明检查器能正确报成功也能正确报失败** |
499
+ | 重新实现闸而不用闸 | 自写脚本判"全通过",真闸判失败 | **闸本身才是判据**,别重写它的解析逻辑 |
500
+ | 只捕 stdout | 关键失败行走 stderr,据此做的"无新增失败"对比全是残缺的 | 采集两个流:`> file 2>&1` |
501
+ | 读错了退出码 | `cmd \| head` 之后 `$?` 是 `head` 的状态,不是 `cmd` 的 | 要判命令成败就别接管道;或读 `PIPESTATUS`/`pipestatus` |
502
+ | **检查器没坏,但只查了一部分组合** | 一个真实存在的冲突落在没被比较的那一对上,检查安静通过 | **枚举检查器覆盖了哪些组合、没覆盖哪些**;**先算规模再决定**:全配对是 N(N-1)/2 对,几十个成员时通常便宜到没理由不跑,但它是平方增长——N 上千、或每对还要解析/远程请求/模型调用时,改为按已知风险维度分层抽样,并把"只查了哪些组合"写进交付物 |
503
+
504
+ **接受任何"通过"之前,先把检查器指向一个你确知是坏的输入,看它是否报错。** 报不出来就说明它只会说通过。
505
+
506
+ **能报失败 ≠ 查得够全。** 上表前四行是检查器**坏了**,第五行是检查器**好的但覆盖不全**——后者更难发现,因为它给出的是一个真实通过的结果。区别在于问的问题不同:前者问"它能不能报错",后者问"它把哪些组合拿去比了"。只按预期的那种关系去查(相邻的、连续的、同类的),就查不到跨过那层预期的冲突;而**保守的实现有时会替你兜住**——按唯一键去重、而不是按文件求和,即使检验漏了也不会出错——这时候要记清楚:救回结果的是实现,不是你的检验——**而且归因到此为止还不够,仍要把检验补齐**:那层实现保护没有被谁承诺过,下一次重构把它去掉时,残缺的检验依然会亮绿灯。
507
+
508
+ 同理适用于**参数**:核过"这个参数存在、能用"不等于核过"它在什么条件下不生效"。`--max-filesize` 就是这样——后缀能用是真的,对未知长度响应在旧版本上完全无效也是真的。
509
+
510
+ ---
511
+
512
+ ## 四、基线顺序:把成本花在对的地方
513
+
514
+ 一次涉及公开数据采集的深度调研,时间大头常不在取数,在**返工**。下面是**默认顺序**;初始证据来自一次组织调研里"实际怎么做"与"本该怎么做"的差,组织只是来源场景而不是本文或本技能的能力边界——**这也不是普适强制序**。
515
+
516
+ | 步 | 做什么 | 跳过它的代价(该次实测) |
517
+ |---|---|---|
518
+ | 1 | **定研究对象与 estimand**:对象/总体/范围是什么,依据与截至日期是什么;具体组织场景再细分单一法人、合并集团、品牌、业务单元或网络 | 后面每张表都在给错的对象取证,形式正确而总体被偷换 |
519
+ | 2 | **按载重主张走一遍适用的来源/渠道类别**,先不深挖任何一条;具体组织场景可借 `public-disclosure-channels.md`,其他场景另列 | 最高价值的源最后才出现;错套场景清单还会制造虚假覆盖 |
520
+ | 3 | **按单位投入产出排序**,不按熟悉度 | 按熟悉度先啃了逐季大文件(两小时),产出小于一份十分钟的报表 |
521
+ | 4 | **立口径**:期间、范围、单位、修订版本 | 取数后才发现不可比,同一份数据算三遍 |
522
+ | 5 | 取数 + 当场自校验(§3) | 错值进了结论才被发现 |
523
+ | 6 | 再深挖剩下的渠道 | — |
524
+ | 7 | 最后写作 | 先搭写作骨架会让骨架反过来绑架取数范围 |
525
+
526
+ **可以重排的情形**(换序时记下为什么,以及哪些前置口径仍必须先固定):
527
+
528
+ - **增量更新**:estimand 与口径上轮已定且未变 → 可从第 5 步起。但上轮管线是假设级输入:复用取数脚本/解析方法前先抽验——跑一遍自校验、对一个已知值核一次只是 smoke,不等于复验完成,按风险重跑 §三 的适用不变量(schema/字段、分页/完整性、配平),抽验记录写明覆盖了哪些分支(分页、地区、异常分支——已知值可能只走了主路径),并**绑定管线与输入身份**(脚本内容哈希、响应内容指纹——修改时间与逻辑版本号只作提示,不维持复验有效性:`touch`/缓存恢复不改 mtime 语义,同一版本号下内容也可被替换)——任一身份变化即该覆盖记录失效、回到未复验;**承重结论所依赖路径上的适用分支未复验时,管线复用状态是 `pending`,其产出不得进承重结论**——「诚实记录了未覆盖」不等于可以照常复用,只有不触承重结论的分支才允许带残余风险放行——源改版或文件改名会让旧脚本失效,最危险的形态是静默假绿(脚本仍读到陈旧文件,或按名匹配不到就跳过)
529
+ - **用户已给定材料**:先读给定材料,再回到第 2 步补渠道
530
+ - **限时/限窗访问源**(接口即将下线、快照窗口有限)→ 先取数保底,但**口径必须在出结论前补齐**
531
+ - **可得性未知**:先做一轮低成本可得性探针(每类只试一个入口),再回到第 3 步排序
532
+
533
+ 无论怎么换序,**第 1 步与第 4 步的产物必须在出承重结论之前存在**——它们不是顺序偏好,是结论成立的前提。
534
+
535
+ **第 3 步排序时看两件事**,它们最容易被低估:
536
+
537
+ - **一份材料能覆盖几期**:很多定期报表**自带上一期的对照数**,所以 N 份材料最多给出 `2N` 个期次单元。但**实际覆盖的唯一期数是这些期次的集合基数**:连着取的 N 份(`2022,2021`、`2023,2022`、`2024,2023`…)互相重叠,唯一期数是 `N+1` 而不是 `2N`;只有各份的两期互不重叠时才接近 `2N`。**排序要按唯一期数算,不是按份数×2**。同时是个坑:把每份的两期都当独立数据累加,会把重叠期算两次
538
+ - **同一总体有几个正交入口**:同一批对象常能从多个维度分别枚举(按类别、按地域、按时间…)。**分别枚举再取并集**,比只走一个维度更全——单一维度总会漏掉未被该维度收录的部分。两条纪律:并集要按稳定标识去重(不是按内容,见 §3.3);**`|A∪B|` 是"观测到的唯一对象数"**:它是**真实总体规模的下界**、也是检索产出的量度,但**它不是 recall 的下界**——recall 是个比例,分母未知时比例可以任意接近 0(总体越大,同一个并集数量对应的 recall 越小)。所以没有独立的候选全集或 gold set 时,按 `SKILL.md` 记"召回未知",**不存在可报告的 recall 下界**,也不得发布总体规模与比例。交集 `|A∩B|` 更不是覆盖率,它只在用 capture–recapture 之类方法估计时才有意义,而那要求写明独立性假设与误差——两个入口可能共享同一上游索引,这个假设通常不成立
539
+
540
+ 两条配套:
541
+
542
+ - **解析脚手架搭一次**(`fetch` + 流式读 + 按名取列 + 自校验),别每个源重写一遍——重写就会漏
543
+ - **交付物的骨架从登记表派生**(数据源表、证据表、导航),不要每轮手改——手改的那份最后一定过时
544
+
545
+ ## 五、把无产出也记下来
546
+
547
+ 每个走过的渠道留一行:查了哪个机构/库、用了哪些别名、时间窗、有没有翻页或结果上限、结果按 `SKILL.md` 的状态词记。
548
+
549
+ 这不是流程负担——它是下一次的起点。没有它,下一次会把这次走过的路重走一遍,而「被挡住」会被误读成"查过了没有"。