@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.
- package/LICENSE +201 -0
- package/README.md +49 -0
- package/dist/assets/marketplace/.agents/plugins/marketplace.json +12 -0
- package/dist/assets/marketplace/.claude-plugin/marketplace.json +13 -0
- package/dist/assets/marketplace/marketplace-manifest.json +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/marketplace.json +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.claude-plugin/plugin.json +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.codex-plugin/plugin.json +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/.worktree-only +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/session-start.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/agent-context/subagent-start.md +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/AGENTS.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-delegation-owner.sh +125 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-edit-isolation.sh +102 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/guard-merge-authorization.sh +1156 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/hooks.json +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/merge-authorization-prompt.sh +142 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-guard.sh +12 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/owner-dispatch-stop.sh +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/remind-post-merge-cleanup.sh +144 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-context.sh +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/session-start.sh +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/skill-extraction-gate-stop.sh +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/subagent-start.sh +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_delegation_owner.sh +329 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_edit_isolation.sh +322 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_guard_merge_authorization.sh +902 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_merge_authorization_prompt.sh +178 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_remind_post_merge_cleanup.sh +121 -0
- package/dist/assets/marketplace/plugins/ccl-skills/hooks/test_session_start.sh +170 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/AGENTS.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/ccl-skills.ts +564 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-install-skills.md +14 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-update-skills.md +44 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-verify-skills.md +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/packages/opencode-plugin/commands/ccl-worktree-check.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/AGENTS.md +28 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/README.md +276 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.example.json +10 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/owner-dispatch.sh +1307 -0
- package/dist/assets/marketplace/plugins/ccl-skills/scripts/owner-dispatch/test.sh +941 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/SKILL.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/agents-file-coverage-gate/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/SKILL.md +188 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/android-dev.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/flutter-dev.md +80 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/ios-dev.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/kotlin-multiplatform.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-platform-boundaries.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/mobile-quality-release.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/app-cross-platform-dev/references/source-evidence-map.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/SKILL.md +353 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/client-routing.md +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/manual-invocation-and-prompts.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/staged-review-contract.md +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/references/timeout-auth-and-capabilities.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/AGENTS.md +98 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_envelope.py +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/classify_timeout_exit.sh +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/claude_review.sh +1438 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/codex_review.sh +324 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/concern_excerpt.py +295 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/egress_schema.py +214 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/init_policy_matrix.py +642 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_packet_mcp.py +181 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/kimi_review.sh +1165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/opencode_review.sh +1190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_cli_review.py +946 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_opencode_review.py +474 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_probe_result.py +1899 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/parse_review_json.py +200 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.py +2845 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/review_gate.sh +6 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/run_claude_capture.py +71 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/runtime-surface-verification-design.md +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_classify_envelope.sh +68 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_claude_review_probe.sh +2311 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_cli_review_wrappers.sh +1832 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_code_review_identity.sh +73 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_concern_excerpt.sh +245 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_egress_schema.sh +177 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_init_policy_matrix.sh +272 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_kimi_packet_mcp.py +195 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_concurrency.sh +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_opencode_review_retry.sh +1005 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_opencode_review.sh +258 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_probe_result.sh +574 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_parse_review_json.sh +349 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_compat.py +434 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_client_order.sh +264 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/test_review_gate.sh +2412 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/code-review/scripts/verify_native_skill_binding.py +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/SKILL.md +153 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/diagnosis-playbook.md +54 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/defect-diagnosis/references/prevention-routing.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/SKILL.md +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/feature-risk-router/references/security-review-gate.md +41 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/SKILL.md +165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/api-security-boundaries.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/architecture-playbook.md +160 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/artifact-generation-architecture.md +37 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/audit-history-architecture.md +29 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/bulk-workflow-architecture.md +33 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/config-rule-routing-architecture.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/cross-cutting-concerns.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-modeling-and-migrations.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/data-platform-architecture.md +210 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/dependency-platform.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/developer-tooling-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/error-contract-architecture.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/event-driven-architecture.md +260 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/http-gateway-architecture.md +74 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/mq-consumer-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/multi-tenant-isolation.md +275 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/notification-architecture.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/ops-checklist.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/performance-capacity-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/protobuf-contract-architecture.md +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/redis-cache-coordination.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/release-runtime-readiness.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/replay-comparison-architecture.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/runtime-observability.md +94 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/service-scaffold.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/source-evidence-map.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/references/workflow-state-architecture.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/SKILL.md +159 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/artifact-generation-patterns.md +37 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/audit-history-patterns.md +28 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/bulk-import-export-patterns.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/config-rule-routing-patterns.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/data-access-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/db-schema-and-dal-patterns.md +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/dependency-client-patterns.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/developer-tooling-patterns.md +70 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/domain-feature-patterns.md +78 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/engineering-patterns.md +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/error-contract-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/feature-playbook.md +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/http-gateway-client-patterns.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/mq-consumer-patterns.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/notification-patterns.md +42 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/observability-implementation-patterns.md +101 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/performance-capacity-patterns.md +44 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/protobuf-contract-patterns.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/public-api-integration-patterns.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/quality-and-testing-patterns.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/redis-cache-lock-patterns.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/release-ops-patterns.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/reliability-patterns.md +83 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/replay-comparison-patterns.md +32 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/scaffold-and-codegen.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/source-evidence-map.md +54 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-dev/references/state-machine-task-patterns.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/SKILL.md +80 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/grill-me/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/SKILL.md +117 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-approval-auto-reviewer.md +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-command-sandbox.md +441 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-context-freshness.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-credentials-auth.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-extensions-skills.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-file-edit-protocol.md +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-ide-integration.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-input-ingestion.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-instruction-composition.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-lifecycle-hooks.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-messaging.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-runtime-bootstrap.md +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-session-persistence.md +448 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-task-orchestration.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-tool-dispatch.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/agent-turn-lifecycle.md +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/inference-capacity-operations.md +162 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/llm-client-gateway.md +156 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/model-prompt-evaluation.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/llm-inference-integration/references/retrieval-agent-safety.md +273 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/SKILL.md +202 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/contracts-and-state.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/cross-stack-alignment.md +94 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/framework-choice.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/online-practice-uptake.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/platform-capabilities.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/product-page-checklist.md +40 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/qa-release.md +72 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/miniapp-product-dev/references/source-evidence-map.md +82 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/SKILL.md +103 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/agents/openai.yaml +5 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-agent-delegation/references/multi-agent-delegation-playbook.md +100 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/SKILL.md +70 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-data-acquisition.md +549 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/public-disclosure-channels.md +97 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/references/research-prompts.md +66 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/AGENTS.md +32 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/multi-perspective-research/scripts/test-public-data-acquisition-recipes.sh +379 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/SKILL.md +244 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/alerting-and-on-call.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/framework-middleware-checklist.md +142 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/infra-component-deployment.md +268 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-correlation-recipe.md +124 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/log-schema-canonical.md +208 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/metrics-conventions.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/obs-stack-architecture.md +107 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/sli-slo-design.md +95 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-observability/references/source-register.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/SKILL.md +303 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/canary-and-rollout-strategy.md +163 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/config-center-via-etcd.md +245 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/custom-control-plane-boundary.md +298 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-cli-concrete-recipe.md +312 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/deploy-pipeline.md +165 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/env-and-lane-matrix.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/lane-orchestration-control-plane.md +383 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/multi-region-and-cluster.md +135 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/promotion-gate-and-review.md +149 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/python-package-registry-release.md +462 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/rollback-playbook.md +123 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/secret-and-config-management.md +231 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-release-engineering/references/version-authority-and-deprecation.md +21 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/SKILL.md +276 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/dual-sidecar-and-traffic-config-center.md +127 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/framework-middleware.md +143 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/grpc-authority-workaround.md +90 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/http-response-envelope-contract.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/mesh-architecture.md +127 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/multi-env-routing.md +192 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/protobuf-http-contract-signals.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/retry-timeout-circuit-breaker.md +124 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/rpc-framework-recipe.md +494 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-choice.md +113 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-migration-playbook.md +231 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/platform-service-connectivity/references/service-discovery-recipe.md +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/SKILL.md +235 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/adr-convention.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-checklist.md +30 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-evaluation-report-template.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-execution-spec.md +108 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-sop.md +457 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/algorithm-launch-templates.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/artifact-egress-confidentiality.md +58 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/code-review-checklist.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/cross-repo-coordination.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/delivery-lifecycle.md +192 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-review-gate-mechanics.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/design-routing-and-readiness.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/diagnostic-spec-match-gate.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dispatch-owner-skills.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/dormant-code-activation.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/existing-project-assessment-report.md +223 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/external-skill-augmentation.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/feature-deprecation-cascade.md +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/high-risk-resilience-gates.md +73 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-completeness-and-minimality.md +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/implementation-entry-reentry-gate.md +122 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/modular-monolith-heuristic.md +105 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/pre-final-continuation-gate.md +115 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/problem-resolution-and-learning.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-attributes.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/quality-remediation-program.md +88 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/rd-standards-doc-family-checklist.md +27 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/refactoring-discipline.md +52 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/review-reception.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/shared-gate-artifact-classification.md +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/source-evidence-map.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/status-tracker-sync.md +77 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/sync-spec-repo-contract.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/verify-developer-experience.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/references/worktree-mechanics.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh +213 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/SKILL.md +136 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/agents/openai.yaml +9 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/analytics-visualization-interactions.md +206 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/behavioral-aesthetic-logic.md +108 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/complex-creation-interactions.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-execution-checklist.md +214 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-impl-naming-and-versioning.md +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-intake-and-acceptance.md +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/design-system-source-of-truth.md +97 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/external-ui-ux-quality-benchmarks.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/frontend-code-evidence-map.md +63 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/interaction-design-patterns.md +146 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/layout-recipes-and-screenshot-acceptance.md +250 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-project-token-consistency.md +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/multi-stack-strategy.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/operational-processing-workflows.md +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-mobile-patterns.md +324 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/platform-web-desktop-patterns.md +456 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-lifecycle-acceptance-and-iteration.md +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/product-surface-patterns.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/resource-management-interactions.md +113 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/scenario-community-patterns.md +133 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/source-map.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/tokens-and-components.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/trust-sensitive-ai-and-data-patterns.md +96 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-audit.md +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/ui-ux-design-development.md +176 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/product-ui-ux-design/references/visual-craft.md +111 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/SKILL.md +157 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/ai-service-integration-boundaries.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-contract-and-schema.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/api-security-boundaries.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/architecture-playbook.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/async-execution-model.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/background-jobs-and-scheduling.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/batch-and-pipeline-architecture.md +11 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/config-secrets-runtime.md +22 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-modeling-and-migrations.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/data-platform-architecture.md +211 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/event-driven-architecture.md +263 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/multi-tenant-isolation.md +281 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/observability-and-ops.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/packaging-runtime-readiness.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/redis-cache-coordination.md +41 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/reliability-and-error-contract.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/source-evidence-map.md +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-architecture/references/web-framework-boundaries.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/SKILL.md +143 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/ai-service-wiring-patterns.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/async-and-worker-patterns.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/background-job-patterns.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/batch-and-artifact-patterns.md +13 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/dependency-client-patterns.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/error-handling-patterns.md +26 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/feature-playbook.md +43 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/observability-implementation-patterns.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/project-structure-and-tooling.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/public-api-security-patterns.md +52 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/redis-cache-lock-patterns.md +78 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/schema-and-validation-patterns.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/source-evidence-map.md +56 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/sqlalchemy-and-migrations-patterns.md +99 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/testing-and-quality-patterns.md +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/python-service-dev/references/web-framework-patterns.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/SKILL.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/config-runtime-readback.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/mr-merge-authorization.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/post-release-env-reset.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-closeout-evidence.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/release-scope-confirmation.md +21 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/tag-and-prod-pipeline-gate.md +20 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/test-scope-prompt.md +24 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-coordination/references/watcher-discipline.md +14 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/SKILL.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/comment-safe-release-doc.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-evidence-workflow.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/release-doc-writer/references/release-testing-scope-section.md +15 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/SKILL.md +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-baseline/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/SKILL.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/prd-composition-contract.md +35 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/requirement-closure-contract.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-doc-writer/references/security-four-questions.md +38 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/SKILL.md +91 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-intent/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/SKILL.md +88 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/requirement-scope/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/SKILL.md +337 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/analysis-parse-fix-test-challenge-replay.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/attribution-verification.md +69 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/bootstrap-slim-c3-obligation-table.md +112 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/coverage-exhaustion-traps.md +45 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/description-authoring.md +162 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/dual-track-review-gate.md +507 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/eval-routing.md +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/evidence-card-template.md +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/example-domain-preselect.md +79 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/external-practice-controls.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-lifecycle-handoff.md +65 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/extraction-quickstart.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/firing-point-placement.md +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/harness-patterns-and-eval.md +286 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/incident-postmortem-extraction.md +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/l0-l1-l2-routing.md +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/online-skill-review.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/parallel-stack-references-pattern.md +164 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/r0-leakage-audit.md +90 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/recurring-anti-patterns-checklist.md +320 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/resume-paused-delivery.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-feedback-mining.md +33 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-finding-standards.md +57 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/review-rubric.md +40 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/rule-consolidation.md +118 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/skill-listing-budget.md +19 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-register.md +254 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/source-to-skill-extraction.md +658 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/two-source-extraction-pattern.md +167 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-judgment-extraction.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/uiux-routing-map.md +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/references/validation-and-landing.md +180 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-ccl-skills.sh +1452 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-evidence-card-leak.sh +491 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-mr-target-freshness.sh +173 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-size-budget.sh +488 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/check-sync-pointers.sh +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-golden-trace.rb +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-health.rb +327 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing-bank.rb +401 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/eval-routing.rb +248 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/generic-r0-leak-scan.sh +282 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/governing-chain-diff.py +321 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/impact-chain-gate.rb +964 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/register-firing-path-resolution.rb +708 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/skill-behavior-eval.py +540 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-lifecycle.rb +51 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/source-register-pending-status.rb +55 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_ai_coding_implementation_gates.sh +829 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_impact_chain_refscripts.sh +1203 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_r0_status.sh +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_register_pending_exclusion.sh +137 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_regressions.sh +173 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_route_drift.sh +377 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_size_budget.sh +833 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_skill_catalog.sh +491 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_ccl_source_register_lifecycle.sh +114 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_mr_target_freshness.sh +261 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_check_sync_pointers.sh +538 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_controlled_escalation_pins.sh +154 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_grader_diagnostics.sh +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_bank_surface_binding.sh +178 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_eval_routing_prose_target.sh +86 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_generic_r0_leak_scan.sh +131 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_git_identity_predicate_gate.sh +243 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_governing_chain_diff.sh +419 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_impact_chain_gate_dateless_host.sh +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_resolution.sh +724 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_register_firing_path_wiring.sh +414 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_regression_runner_registration.sh +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_bank_integrity.sh +205 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_routing_pointer_integrity.sh +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_credential_cwd.sh +61 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_cross_refs.sh +111 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/test_validate_skill_root_depth.sh +53 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/skill-extraction-workflow/scripts/validate-skill.sh +257 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/SKILL.md +98 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/input-state-machines.md +36 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/streaming-rich-output.md +130 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/terminal-cli-dev/references/terminal-side-channels.md +96 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/SKILL.md +408 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/AGENTS.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/bitable-setup.md +573 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/README.md +120 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/github-actions.yml +119 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/gitlab-ci.yml +76 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/ci_templates/jenkins.Jenkinsfile +106 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/classical-test-design-techniques.md +279 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/gen_report.py +2807 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/makefile-template.md +200 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/report-config-schema.md +272 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/run_pytestless.py +475 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/source-to-case-workflows.md +258 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-marker-conventions.md +316 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc-review-and-prioritization.md +145 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/AGENTS.md +16 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.dart +129 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.go +197 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.py +135 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/tc_helpers/tc.ts +285 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/test_gen_report.py +2144 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/test-artifact-management/references/update-lifecycle.md +62 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/SKILL.md +212 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/ci-fixtures-and-flake-control.md +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/client-runtime-test-matrices.md +50 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/data-and-workflow-testing.md +34 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/design-closed-contract-oracles.md +31 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/e2e-real-flow-testing.md +71 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/fitness-functions.md +240 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/integration-contract-testing.md +235 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/non-functional-specialized-scenarios.md +296 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/rd-testing-standard-template.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/run-killing-mutation-walk.md +43 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/scenario-testing.md +136 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/source-evidence-map.md +59 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/structured-tc-input-translation.md +67 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-code-authoring-patterns.md +392 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-data-and-determinism.md +39 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/test-topology-and-commands.md +92 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/unit-testing.md +46 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/vendored-contract-drift-checklist.md +64 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/references/verify-enforcement-mechanisms.md +18 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/AGENTS.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.py +140 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/client-terminal-ansi-check.test.sh +75 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.py +170 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-ast-check.test.sh +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.go +198 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/lang-basics-go-check.test.sh +109 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/testing-strategy/scripts/test_mutation_backup_recipe.sh +237 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/SKILL.md +184 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/comment-safe-feishu.md +93 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/cross-model-co-review.md +3 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/delivery-face-closeout.md +60 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/doc-charter-first.md +17 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/tighten-doc/references/session-vantage-leakage.md +58 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/SKILL.md +126 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/complex-workspace-patterns.md +47 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/embedded-h5-in-host.md +87 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/react-architecture.md +194 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/source-evidence-map.md +60 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-quality-release.md +190 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/web-react-dev/references/web-ui-quality.md +83 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/SKILL.md +179 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/agents/openai.yaml +4 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/references/shared-branch-rebase.md +25 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/AGENTS.md +23 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_status.sh +207 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/test_worktree_sweep.sh +481 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-status.sh +325 -0
- package/dist/assets/marketplace/plugins/ccl-skills/skills/worktree-isolation/scripts/worktree-sweep.sh +245 -0
- package/dist/assets/release.json +2797 -0
- package/dist/claude-adapter.d.ts +9 -0
- package/dist/claude-adapter.js +240 -0
- package/dist/cli-worker.d.ts +1 -0
- package/dist/cli-worker.js +32 -0
- package/dist/cli.d.ts +22 -0
- package/dist/cli.js +214 -0
- package/dist/codex-host.d.ts +30 -0
- package/dist/codex-host.js +162 -0
- package/dist/fs-safe.d.ts +21 -0
- package/dist/fs-safe.js +241 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.js +135 -0
- package/dist/opencode-adapter.d.ts +10 -0
- package/dist/opencode-adapter.js +416 -0
- package/dist/operations.d.ts +3 -0
- package/dist/operations.js +956 -0
- package/dist/paths.d.ts +20 -0
- package/dist/paths.js +4 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.js +1 -0
- package/dist/unified.d.ts +4 -0
- package/dist/unified.js +64 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +5 -0
- package/package.json +35 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# 组织调研场景:披露渠道的起点清单与三个数据陷阱
|
|
2
|
+
|
|
3
|
+
配套 `SKILL.md` 的覆盖预检与硬规则。
|
|
4
|
+
|
|
5
|
+
**本文只覆盖“具体组织”这一种调研场景,不是 `multi-perspective-research` 的能力边界。** 主题、政策、技术、市场等其他场景必须按自己的载重主张枚举来源类别,不能照抄本文清单。
|
|
6
|
+
|
|
7
|
+
**本文不定义状态、不定义闭合、不裁决穷尽。** 闭合与降级全部归 `SKILL.md` 的覆盖矩阵——那里问的是"哪条载重主张 × 哪类证据"。本文只提供两样东西:一份**用来防"没想到"的组织披露渠道起点清单**,和三个**已实证的数据处理陷阱**。
|
|
8
|
+
|
|
9
|
+
这条边界是刻意的:在这里另立任何一套状态词或闭合语义,都会与覆盖矩阵冲突,并给"表填满了所以走完了"提供借口。
|
|
10
|
+
|
|
11
|
+
## 一、渠道起点清单
|
|
12
|
+
|
|
13
|
+
调研对象是一个具体组织时,四类证据(用户线索 / 一手官方 / 独立外部 / 反例)问的是"证据是什么种类",不问"渠道有没有走过"。只查官网与年报**可以正当关闭"一手/官方"那一格**,而信息量更大的几类渠道一次都没被想到。
|
|
14
|
+
|
|
15
|
+
失效形状:调研者连续多轮自行宣布"公开渠道挖完了",每次被追问后都命中一个**此前没想到的渠道类别**(不是同类里的又一个来源)。这不是勤奋问题——是类别维度从未被过一遍。
|
|
16
|
+
|
|
17
|
+
**这是起点清单,不是全集**——按常见的营利性组织与常见辖区归纳。别的类别是否存在取决于对象类型与所涉辖区:公共采购与补贴披露、游说与政治献金披露、非营利组织税务申报、行业许可与检查记录、集体协商与工会申报、信息公开申请、认证与审计报告、调查报道等。**走完这 10 类不构成任何终局判断。**
|
|
18
|
+
|
|
19
|
+
| # | 渠道类别 | 典型内容 | 判断要点 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 1 | **组织自述** | 官网、年报、董事会材料、招聘站、技术博客、官方讲座 | 最易得也最易止步于此;招聘站与官方讲座常含组织结构的一手信号 |
|
|
22
|
+
| 2 | **证券/投资者法定披露** | 年报、股东会材料、法定高管申报、结构化财务标签接口 | 标签定义与申报口径经过核验时,结构化接口比 PDF 更便于跨年跨主体对比 |
|
|
23
|
+
| 3 | **强制披露制度** | 达阈值的集中裁员通知、用工构成报送、薪酬差距报告、环境与安全报送 | **最常被漏掉的一类**;法定义务,覆盖面与可比性都强;部分由组织自愿公开在自己站点上 |
|
|
24
|
+
| 4 | **劳动力与移民监管数据** | 用工许可申报、职位分级与薪酬报送、批准量逐年统计 | 常有逐案明细;只覆盖受该制度约束的人群 |
|
|
25
|
+
| 5 | **他国/多辖区法定登记** | 各辖区工商登记的法定账目;**部分**辖区对达到规模阈值的主体要求披露平均员工数与人力成本明细 | 命中时是拿到单一法人实体人数与成本构成的少数途径;义务、门槛、可得性与费用逐辖区差异极大 |
|
|
26
|
+
| 6 | **知识产权与技术产出** | 专利、论文、标准提案 | 部分接口需密钥或注册;实体消歧质量是前提(见陷阱三) |
|
|
27
|
+
| 7 | **归档/历史快照** | 网页归档站 | 用途限于**官方已下架、已替换或需要历史版本**;某源仍在提供该文件、只是拒绝自动访问时**不得改走归档规避**——那属于绕过访问限制(见 `public-data-acquisition.md` §1.2、§1.4) |
|
|
28
|
+
| 8 | **开放数据门户** | 各级政府的数据集接口 | 常有无需密钥的查询接口;用目录检索比逐个猜网址高效 |
|
|
29
|
+
| 9 | **司法与监管处置** | 诉讼卷宗、处罚决定、监管问询 | 命中率低但单条信息量可能很大;通常需要确切案号 |
|
|
30
|
+
| 10 | **第三方聚合与社区** | 商业数据库、点评与社区平台 | 按 provenance、方法透明度、覆盖与偏差、可复算性分级——不按"第三方"身份一律封顶 |
|
|
31
|
+
|
|
32
|
+
**一份材料只算一个证据来源。** 同一份年报可以同时被"组织自述"和"证券法定披露"引用,从归档站取回也不额外增加一个来源——记录时写清底层 artifact、发布者与取得路径,别让一份材料在渠道维度上刷出四个命中,制造广度与独立性的错觉。
|
|
33
|
+
|
|
34
|
+
**先说清目标是谁。** 单一法人、合并集团、品牌或业务单元、还是某个网络?依据与截至日期是什么?依据不足时只能称"有界的工作口径",且人数与比例类结论不得进入承重结论——把品牌、母集团、单一法人与历史子组织混成"这家组织",之后每张表都可能形式正确而 estimand 从一开始就被偷换。
|
|
35
|
+
|
|
36
|
+
**写事实,不写"穷尽"。** 不要对渠道集合使用"穷尽 / 挖完了 / 已无更多",也不要写"查过了确实没有"——后者读起来像不存在证明,实际只能支持**"在所声明的检索边界内未命中"**。改成逐条写:走了哪些类别、各自的检索边界(登记机关或数据库、用了哪些别名、时间窗、有没有翻页或结果上限)、哪些没走、哪些走不动及原因。这两种写法的差别可检验:前者不可证伪,后者逐条可核。
|
|
37
|
+
|
|
38
|
+
**清单走完不等于没得找——沿五个维度把已走过的类别再实例化一遍。** 上面回答"有哪些类别",这一条回答"类别走完之后怎么继续产生候选"。实证的增量几乎都来自**在同一类别上换一个维度取值**,而不是发明第 11 类:
|
|
39
|
+
|
|
40
|
+
| 维度 | 换法 | 为什么有增量 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| **辖区** | 同一类披露义务换一个国家/州/省 | 义务、阈值、登记机关逐辖区不同;类别 5 尤其如此,命中时是拿到**单一法人口径**的少数途径 |
|
|
43
|
+
| **制度** | 同一主题往往受多个独立法定报送覆盖 | 集中裁员通知、用工构成报送、薪酬差距报告各是独立制度,口径与阈值互不相同,不能互相替代 |
|
|
44
|
+
| **载体** | 同一份材料换可机读程度 | 结构化接口 > 带文本层的 PDF > 仅图像的 PDF;**仅图像的 PDF 自行 OCR 仍是正当取回**,与绕过访问限制无关(后者见 `public-data-acquisition.md` §1.2) |
|
|
45
|
+
| **实体主键** | 同一组织在不同数据集里主键不同 | 法人登记号、雇主名、专利权人、学术机构标识、招聘主体——换主键即换数据集,但换完必须重做实体消歧(见陷阱三) |
|
|
46
|
+
| **聚合层** | 母体拿不到就分别取子实体再配平;反之亦然 | 阈值型披露常只对子实体生效;聚合方向变了,配平与边界核对要重做(见陷阱一) |
|
|
47
|
+
|
|
48
|
+
两条约束:**每换一个维度取值都是一次新的检索边界**,按上一条逐条记录,不得合并成一句"已扩展检索";沿维度轮换取回的新源**同样要过 §二 的三个陷阱**,不因为"是补充来源"而降低处理标准。
|
|
49
|
+
|
|
50
|
+
**启动时点是自己认为"没得找了"的那一刻,不是被追问之后。** 本节开头记的失效形状——连续多轮自行宣布挖完了,每次被追问后都命中一个此前没想到的类别——反过来说明方法本身有效、只是不自启动。把"我认为挖完了"当作本轮换的触发条件,而不是结论。
|
|
51
|
+
|
|
52
|
+
## 二、三个数据陷阱
|
|
53
|
+
|
|
54
|
+
三者的共同点:**即使 `grounded` 的全部条件都满足**(来源链接、实际取回的摘录、会话内可回查的调用位置),错误依然存在——它发生在**取到之后的处理**。
|
|
55
|
+
|
|
56
|
+
### 陷阱一:把配平当成验证
|
|
57
|
+
|
|
58
|
+
法定报表里,一行常同时含分项与该行合计;把整行数字全加一遍就得到 2 倍值。
|
|
59
|
+
|
|
60
|
+
**失效形状**:把某报表每行的分项与行合计一起求和,得出的"某国用工人数"比该组织**全球总人数**还大。反向也发生过:一个看不懂来源的数被判为"解析噪声"丢弃,实际它是几个子项的合计。
|
|
61
|
+
|
|
62
|
+
**配平只证明"我没读错这张表",不是独立验证**——分项与合计常出自同一口径、同一生成程序,必然相等。而且它只在存在**与派生值同 estimand、同范围、同期间、同单位,且分类互斥可加**的控制总数时才可比;不满足这些条件的"总数"拿来配平,会逼人把非互斥分类硬加总,或错误否决一个本来合法的派生值。
|
|
63
|
+
|
|
64
|
+
配平通过之后仍要单独看:单位、期间、法人与地理范围、唯一键重复、缺失分区是真零还是未填报。
|
|
65
|
+
|
|
66
|
+
配不上时先查解析、单位、舍入、版本——**有来源格式或模式证据支持的解析修正是正当的**(括号负数、千分位、脚注单位),留下改前改后的差异与依据。被禁止的是**为了得到目标数字而反复调参**。仍不能解释就如实报告冲突,不让它以确定值的形态进入结论。
|
|
67
|
+
|
|
68
|
+
### 陷阱二:跨期不可比被当成"数据坏了"
|
|
69
|
+
|
|
70
|
+
**失效形状**:跨不同性质的申报期直接相加比较,得出"该字段填报不一致、不可用"的结论;实际是干净的周期性,只需同期比同期。
|
|
71
|
+
|
|
72
|
+
**形式同口径不等于可比**:并购或重组改变了法人范围,同财季对同财季仍是假趋势。至少看一眼期间、字段定义、单位、币种与价格基准、地理与法人范围、覆盖阈值、修订版本、测量方法。
|
|
73
|
+
|
|
74
|
+
有官方 bridge/映射表时要**评估**它能不能用(覆盖是否完整、是否多对多、误差能否量化、是不是为监管过渡而非本分析设计),不能无理由忽略;评估后拒绝 harmonize 是正当结论。
|
|
75
|
+
|
|
76
|
+
一个字段塌到接近零而另一字段同期跳升,**提出编码迁移这个待验证假设**——但合并成一个语义桶要凭字段定义、申报说明、版本变更记录或正式映射。**数值上"两列之和跨期守恒"只是信号不是依据**:语义不同的两列一降一升而其和恰好稳定完全可能。缺语义依据时并列报告。
|
|
77
|
+
|
|
78
|
+
期间长度不同时按测量语义选同期值、单位暴露率、年化值或占比——"改用占比"不普遍正确(存量类分母、强季节性流量、分子分母覆盖期不同时,占比一样不可比)。
|
|
79
|
+
|
|
80
|
+
口径修复要落成**后续步骤会复用的东西**(本次分析里可复算的转换、查询或版本化映射即可,不要求改共享规则);只写进交付物脚注时,同一次调研的后半段会再犯一次。
|
|
81
|
+
|
|
82
|
+
### 陷阱三:信任数据集自带的实体消歧
|
|
83
|
+
|
|
84
|
+
聚合型数据集会把名称相近的组织或同名个人合并成同一个实体条目。用实体 ID 过滤会一次性引入整批无关记录。
|
|
85
|
+
|
|
86
|
+
**失效形状**:某学术库的组织条目挂着与该组织业务完全无关领域的文献;某作者条目挂着上千个机构、数千篇论文(同名个人被合并)。
|
|
87
|
+
|
|
88
|
+
- 用实体 ID 过滤前先抽样核对原始字段(原始署名串、原始机构名)。**抽样框、选择方法与接受条件要在看结果之前定**,否则"样本量 1"也形式合规;便利样本只能用来发现错误,不能授权总体聚合
|
|
89
|
+
- 两个方向都查:**merge**(不同对象被并成一个)与 **split**(同一对象被拆成多个),带上别名与历史沿革
|
|
90
|
+
- **只报精确率是最常见的假安全**:挑几条明显正确的记录能得到 100% 精确率,而目标实体可能被拆成多个 ID、旧名或子组织,召回只有一半,样本全对而总量系统性低估
|
|
91
|
+
- **召回率的分母不好来**:只在该 ID 已返回的记录里抽样看不到没被返回的那些;两条"互不依赖"路径取并集只能给出**观测到的唯一对象数**,它是总体规模下界而不是召回率下界——召回是比例,分母未知时可以任意接近 0,而且两条入口还可能共享同一上游索引或同样的语言、时间、地域、收录偏差。拿不出有完备性依据的候选全集或 gold set 时记"召回未知",**不存在可报告的召回下界,也不要发布总体规模与比例**
|
|
92
|
+
- 换一条实现路径重算,若两条路径读的是同一份预处理结果,那只是**一致性复算**,共同上游的错误发现不了
|
|
93
|
+
- 消歧不可靠时不得用该数据估算原总体的比率;人工逐条确认过的子集仍可支持**重新定义 estimand 并明示选择偏差后**的窄结论,但要写清它估的已不是原总体
|
|
94
|
+
|
|
95
|
+
## 三、走过而无产出的渠道要留下原因
|
|
96
|
+
|
|
97
|
+
写清是哪一种:**在声明的检索边界内未命中**、**取到但不足以关闭**(只有标题摘要、正文删节、字段范围不足、版本冲突、真实性无法核验)、**被挡住**(需要密钥或账号、接口下线、被反爬拦截)、还是**没走**。只写"无产出"会把后三种伪装成第一种。这四种都不是闭合判断——按 `SKILL.md` 的覆盖矩阵去裁决哪条主张还差什么。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# 多视角调研提示词模板
|
|
2
|
+
|
|
3
|
+
四步模板。`[TOPIC]` 为研究主题,`[ROLE]` 为用户角色/立场。既可由 agent 自己按步执行(推荐,可结合真实检索),也可作为独立 prompt 交给任意 LLM——**独立 prompt 模式下没有可回查的工具调用记录,全部发现强制 `ungrounded`,产出一律按探索性草稿交付**。执行时遵守 SKILL.md 的证据落地纪律:模拟视角输出是假设级证据,载重结论须真实核验。
|
|
4
|
+
|
|
5
|
+
## 1. 多视角枚举
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
我要研究 [TOPIC]。请用 5 个不同的专家视角分别分析:
|
|
9
|
+
|
|
10
|
+
1. 实践者——每天与 [TOPIC] 打交道的人。学院派漏掉了什么?哪些现实约束总被忽略?
|
|
11
|
+
2. 研究者——多年研究该领域。同行评审证据实际说明什么?证据在哪里与流行认知矛盾?
|
|
12
|
+
3. 怀疑者——认为主流观点有误。最强的反方论证是什么?支持者刻意回避了什么证据?
|
|
13
|
+
4. 利益追踪者——追踪资金与激励。谁从当前叙事获利?哪些激励在塑造研究/舆论方向?
|
|
14
|
+
5. 历史对照者——见过类似规律。存在哪些历史先例?那些先例的走向能告诉我们什么?
|
|
15
|
+
|
|
16
|
+
每个视角输出三项:
|
|
17
|
+
- 核心立场(2 句话)
|
|
18
|
+
- 支撑该立场的最强证据
|
|
19
|
+
- 只有这个视角会告诉我、其他视角不会说的一件事
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
视角可按主题替换(监管者、终端用户、竞争者、安全研究员等),标准是:替换后的视角必须会给出与其余视角**不同**的答案。
|
|
23
|
+
|
|
24
|
+
## 2. 矛盾图
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
基于以上 5 个视角,绘制矛盾图:
|
|
28
|
+
|
|
29
|
+
1. 哪些视角的主张直接冲突?逐条列出冲突双方的具体主张。
|
|
30
|
+
2. 哪个视角证据最强?哪个最弱?为什么?
|
|
31
|
+
3. 哪一个问题被回答后,能化解最大的矛盾?
|
|
32
|
+
4. 所有视角都同意什么?(连对手都确认的,大概率为真。)
|
|
33
|
+
5. 没有任何视角提及什么?(整个领域的盲区,常是最有价值的发现。)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 3. 合成简报
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
把 5 个视角与矛盾图合成为一份研究简报:
|
|
40
|
+
|
|
41
|
+
1. 一段话总结:向只有 60 秒、但需要 nuance 而非标题的决策者汇报 [TOPIC]。(轻量模式:不得用"向决策者汇报"框架,改为探索性概览,且开头标注"未分析:跳过矛盾图/自评")
|
|
42
|
+
2. 关键发现(≤5 条;仅四步全跑时按可靠性排序,轻量模式给不排序列表):每条标注哪些视角支持、哪些视角质疑。
|
|
43
|
+
3. 隐藏关联:一个只有合看全部视角才会显现的非显然联系。
|
|
44
|
+
4. (仅四步全跑时)可操作建议:基于全部证据,[ROLE] 应该做出什么具体的不同行动?
|
|
45
|
+
5. 前沿问题:哪一个问题被回答后,会改变我们对 [TOPIC] 的整体理解?
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
轻量模式(只跑 1+3)使用本模板时**删去第 4 项**,第 2 项改为不排序、且**不带"支持/质疑视角"标注**的发现列表(排序与视角冲突标注都依赖第 2 步矛盾图),并在产出开头带"未分析(跳过矛盾图/自评),探索性草稿"标注:可操作建议、载重结论、可靠性排序、视角冲突标注只允许出现在跑完第 2、4 步并附待核验清单的完整交付里。
|
|
49
|
+
|
|
50
|
+
## 4. 自评(同行评审)
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
以严格审稿人的标准评审上面这份简报:
|
|
54
|
+
|
|
55
|
+
1. 给每条关键发现打置信度(高/中/低),并说明依据的证据强度。
|
|
56
|
+
2. 整份简报最弱的环节在哪里?
|
|
57
|
+
3. 是否有某个视角被过度代表、拉偏了结论?
|
|
58
|
+
4. 是否漏了第 6 个应该纳入的视角?是谁?
|
|
59
|
+
5. 哪些结论目前只有推理支撑、没有可核验来源?逐条列出,作为人工核验清单。
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 使用提示
|
|
63
|
+
|
|
64
|
+
- 快速了解:只跑 1 + 3,产出只作探索性概览(附 grounded/ungrounded 标注),不得输出可操作建议、载重结论或可靠性排序。支撑重要决策:四步全跑,且第 4 步列出的"待核验清单"必须在行动前用真实检索/一手来源关闭。
|
|
65
|
+
- agent 有检索能力时,第 1 步每个视角先做真实检索再作答,把结论从 `ungrounded` 升级为 `grounded`。
|
|
66
|
+
- 方法出处与完整实现参见 `github.com/stanford-oval/storm`(MIT)——作为方法论参考;若要实际运行该第三方系统(它会发起检索与 LLM 调用),走团队常规的第三方代码审查/沙箱授权路径,不要默认直接执行。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# skills/multi-perspective-research/scripts Agent Contract
|
|
2
|
+
|
|
3
|
+
This directory contains deterministic regression checks for executable recipes
|
|
4
|
+
embedded in the multi-perspective research references. The repository-wide
|
|
5
|
+
contract remains authoritative: [root `AGENTS.md`](../../../AGENTS.md). This
|
|
6
|
+
file only narrows that contract; it does not relax its safety, authority,
|
|
7
|
+
owner-routing, worktree-isolation, or validation gates.
|
|
8
|
+
|
|
9
|
+
Rules:
|
|
10
|
+
|
|
11
|
+
- Execute snippets extracted from the owning reference instead of maintaining a
|
|
12
|
+
second implementation that can drift from the published recipe.
|
|
13
|
+
- Keep the inline `MANIFEST` in
|
|
14
|
+
`test-public-data-acquisition-recipes.sh` exhaustive: every runnable code
|
|
15
|
+
block must be marked as executed or explicitly exempt with a concrete
|
|
16
|
+
environment or integration reason, and an unregistered block must fail the
|
|
17
|
+
check.
|
|
18
|
+
- Use synthetic fixtures and local stubs. Do not require live network access,
|
|
19
|
+
production data, credentials, or private endpoints.
|
|
20
|
+
- Preserve fail-closed assertions for acquisition, parsing, completeness, and
|
|
21
|
+
cleanup behavior. A failed check must return non-zero.
|
|
22
|
+
- Keep shell checks portable across supported macOS and Linux environments.
|
|
23
|
+
Use trap-based cleanup on normal, failed, and catchable interrupted exits.
|
|
24
|
+
|
|
25
|
+
Validation, run from the repository root:
|
|
26
|
+
|
|
27
|
+
- `bash skills/multi-perspective-research/scripts/test-public-data-acquisition-recipes.sh`
|
|
28
|
+
- `shellcheck -S warning skills/multi-perspective-research/scripts/test-public-data-acquisition-recipes.sh`
|
|
29
|
+
- `bash skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh --repo . --enforce`
|
|
30
|
+
|
|
31
|
+
If `shellcheck` is unavailable, report that validation as inconclusive rather
|
|
32
|
+
than passing.
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 回归测试:把 references/public-data-acquisition.md 里的可运行片段**原样抽出来**跑。
|
|
3
|
+
#
|
|
4
|
+
# 为什么按原样抽而不是照着意思重写:这份 reference 的价值在于读者会照抄它。
|
|
5
|
+
# 如果测试跑的是另一份等价实现,文档退化了测试也不会红。
|
|
6
|
+
#
|
|
7
|
+
# 不联网:curl 被替换成本地 stub,所以可以在 CI 里跑。
|
|
8
|
+
set -uo pipefail
|
|
9
|
+
|
|
10
|
+
HERE=$(cd "$(dirname "$0")" && pwd)
|
|
11
|
+
DOC="$HERE/../references/public-data-acquisition.md"
|
|
12
|
+
[ -r "$DOC" ] || { echo "找不到 $DOC" >&2; exit 1; }
|
|
13
|
+
|
|
14
|
+
WORK=$(mktemp -d) || { echo "无法创建测试临时目录" >&2; exit 1; }
|
|
15
|
+
trap 'rm -rf -- "$WORK"' EXIT
|
|
16
|
+
trap 'exit 129' HUP
|
|
17
|
+
trap 'exit 130' INT
|
|
18
|
+
trap 'exit 143' TERM
|
|
19
|
+
pass=0; fail=0
|
|
20
|
+
ok() { pass=$((pass+1)); printf ' ok %s\n' "$1"; }
|
|
21
|
+
bad() { fail=$((fail+1)); printf ' FAIL %s — %s\n' "$1" "${2:-}"; }
|
|
22
|
+
check(){ if [ "$2" = "$3" ]; then ok "$1"; else bad "$1" "期望 $3,实得 $2"; fi; }
|
|
23
|
+
|
|
24
|
+
# ---- 块清单:每个可运行片段必须**显式**声明是被执行还是被豁免 ----
|
|
25
|
+
# 硬编码 sh[0]/py[0] 的老做法会让新加的可运行块悄悄不被覆盖(评审 P2)。
|
|
26
|
+
# 这里按内容指纹认块;出现未登记的块就红,逼作者要么覆盖它、要么写明为何不可执行。
|
|
27
|
+
cat > "$WORK/check-block-manifest.py" <<'PY'
|
|
28
|
+
import re,sys
|
|
29
|
+
doc,work=sys.argv[1],sys.argv[2]
|
|
30
|
+
t=open(doc,encoding='utf-8').read()
|
|
31
|
+
# 枚举所有 fence,而不是只枚举认识的语言;新标签/无标签块也必须进入处置。
|
|
32
|
+
blocks=[(m.group(1).strip(),m.group(2))
|
|
33
|
+
for m in re.finditer(r'^```([^\n]*)\n(.*?)^```[ \t]*$',t,re.S|re.M)]
|
|
34
|
+
|
|
35
|
+
# 每项:(标识, 判据, 处置)。exec=本测试真的执行它;exempt=写明为何不执行。
|
|
36
|
+
MANIFEST=[
|
|
37
|
+
("fetch/accept", lambda l,b: l=='bash' and 'fetch()' in b, "exec"),
|
|
38
|
+
("curl-size-log", lambda l,b: l=='' and 'Exceeded the maximum allowed file size' in b, "exempt: 实测命令输出,不是可执行片段"),
|
|
39
|
+
("curl-fail-log", lambda l,b: l=='' and '<当时返回 504 的接口>' in b, "exempt: 实测命令输出,不是可执行片段"),
|
|
40
|
+
("cdx", lambda l,b: l=='bash' and 'cdx/search/cdx' in b, "exempt: 需要真实归档站,属联网集成"),
|
|
41
|
+
("catalog", lambda l,b: l=='bash' and 'api/catalog/v1' in b and 'while' not in b, "exempt: 需要真实目录接口,属联网集成"),
|
|
42
|
+
("paging", lambda l,b: l=='bash' and 'OFF=' in b and 'while' in b, "exec"),
|
|
43
|
+
("pdf-probe", lambda l,b: l=='bash' and 'pdftotext' in b, "exempt: 依赖 poppler,非本机保证"),
|
|
44
|
+
("pdf-render", lambda l,b: l=='bash' and 'pdftoppm' in b, "exempt: 依赖 poppler,非本机保证"),
|
|
45
|
+
("alias-parse", lambda l,b: l=='python' and 'ALIAS' in b, "exec"),
|
|
46
|
+
("col-attrib", lambda l,b: l=='python' and 'totA' in b, "exempt: 三行示意式恒等式,无控制流"),
|
|
47
|
+
("ocr", lambda l,b: l=='swift' and 'VNRecognizeTextRequest' in b, "exempt: 需 macOS Vision + swiftc,另行手测"),
|
|
48
|
+
("tag-fallback", lambda l,b: l=='javascript' and 'concept(t)' in b, "exempt: 需真实结构化接口"),
|
|
49
|
+
]
|
|
50
|
+
unmatched=[]
|
|
51
|
+
for lang,body in blocks:
|
|
52
|
+
if not any(pred(lang,body) for _,pred,_ in MANIFEST):
|
|
53
|
+
unmatched.append((lang,body.strip().split('\n')[0][:70]))
|
|
54
|
+
if unmatched:
|
|
55
|
+
print("未登记的可运行块(要么覆盖它,要么在 MANIFEST 里写明豁免理由):")
|
|
56
|
+
for lang,head in unmatched: print(f" [{lang}] {head}")
|
|
57
|
+
sys.exit(1)
|
|
58
|
+
# 抽出要执行的块
|
|
59
|
+
for name,pred,how in MANIFEST:
|
|
60
|
+
if how!="exec": continue
|
|
61
|
+
hit=[b for l,b in blocks if pred(l,b)]
|
|
62
|
+
if len(hit)!=1:
|
|
63
|
+
print(f"块 {name} 命中 {len(hit)} 个,判据需更新"); sys.exit(1)
|
|
64
|
+
ext="py" if name=="alias-parse" else "sh"
|
|
65
|
+
open(f"{work}/{name.replace('/','_')}.{ext}","w").write(hit[0])
|
|
66
|
+
print(f"块清单:共 {len(blocks)} 个,执行 {sum(1 for _,_,h in MANIFEST if h=='exec')} 类,其余已登记豁免")
|
|
67
|
+
PY
|
|
68
|
+
python3 "$WORK/check-block-manifest.py" "$DOC" "$WORK"
|
|
69
|
+
[ $? -eq 0 ] || { echo "块清单校验失败" >&2; exit 1; }
|
|
70
|
+
mkdir -p "$WORK/negative-extract"
|
|
71
|
+
cat > "$WORK/unregistered-block.md" <<'BAD'
|
|
72
|
+
```bash
|
|
73
|
+
echo "unregistered"
|
|
74
|
+
```
|
|
75
|
+
BAD
|
|
76
|
+
if python3 "$WORK/check-block-manifest.py" "$WORK/unregistered-block.md" "$WORK/negative-extract" >/dev/null 2>&1; then
|
|
77
|
+
bad "块清单能报未登记代码块" "坏输入被放行"
|
|
78
|
+
else
|
|
79
|
+
ok "块清单能报未登记代码块"
|
|
80
|
+
fi
|
|
81
|
+
cat > "$WORK/unknown-fence.md" <<'BAD'
|
|
82
|
+
```sh
|
|
83
|
+
echo "unknown language tag"
|
|
84
|
+
```
|
|
85
|
+
BAD
|
|
86
|
+
if python3 "$WORK/check-block-manifest.py" "$WORK/unknown-fence.md" "$WORK/negative-extract" >/dev/null 2>&1; then
|
|
87
|
+
bad "块清单能报未知 fence 标签" "未知标签被忽略"
|
|
88
|
+
else
|
|
89
|
+
ok "块清单能报未知 fence 标签"
|
|
90
|
+
fi
|
|
91
|
+
cp "$WORK/fetch_accept.sh" "$WORK/fetch.sh" 2>/dev/null || { echo "抽取 fetch 块失败" >&2; exit 1; }
|
|
92
|
+
cp "$WORK/alias-parse.py" "$WORK/parse.py" 2>/dev/null || { echo "抽取 ALIAS 块失败" >&2; exit 1; }
|
|
93
|
+
cp "$WORK/paging.sh" "$WORK/page.sh" 2>/dev/null || { echo "抽取分页块失败" >&2; exit 1; }
|
|
94
|
+
|
|
95
|
+
echo "== 语法 =="
|
|
96
|
+
if bash -n "$WORK/fetch.sh"; then ok "bash -n"; else bad "bash -n"; fi
|
|
97
|
+
|
|
98
|
+
# 变量名紧跟全角标点会被 shell 吃进名字(set -u 下 unbound variable)。
|
|
99
|
+
# 这类错误几乎只出现在错误分支的提示语里,手测极难碰到 → 全文静态扫。
|
|
100
|
+
cat > "$WORK/check-fullwidth-var.py" <<'PY'
|
|
101
|
+
import re,sys
|
|
102
|
+
t=open(sys.argv[1],encoding='utf-8').read()
|
|
103
|
+
hits=[]
|
|
104
|
+
for blk in re.findall(r'```bash\n(.*?)```',t,re.S):
|
|
105
|
+
for line in blk.split('\n'):
|
|
106
|
+
# Bash 的 ${v#prefix} 自带 #,不能用 split('#') 粗暴截断,否则会吞掉
|
|
107
|
+
# 同一行后面的真问题。只略过整行注释;行内误报宁可要求显式 ${var}。
|
|
108
|
+
if line.lstrip().startswith('#'):
|
|
109
|
+
continue
|
|
110
|
+
if re.search(r'\$[A-Za-z_][A-Za-z0-9_]*(?![A-Za-z0-9_])[^\x00-\x7f]',line):
|
|
111
|
+
hits.append(f"bash: {line.strip()}")
|
|
112
|
+
for h in hits: print(" "+h)
|
|
113
|
+
sys.exit(1 if hits else 0)
|
|
114
|
+
PY
|
|
115
|
+
if python3 "$WORK/check-fullwidth-var.py" "$DOC"
|
|
116
|
+
then ok "代码块里没有 \$var 紧跟全角标点"; else bad "代码块里有 \$var 紧跟全角标点(改用 \${var})"; fi
|
|
117
|
+
cat > "$WORK/fullwidth-var-bad.md" <<'BAD'
|
|
118
|
+
```bash
|
|
119
|
+
echo "${name#prefix}" "$mime,"
|
|
120
|
+
```
|
|
121
|
+
BAD
|
|
122
|
+
if python3 "$WORK/check-fullwidth-var.py" "$WORK/fullwidth-var-bad.md" >/dev/null 2>&1; then
|
|
123
|
+
bad "全角标点检查器能报坏输入" "坏输入被放行"
|
|
124
|
+
else
|
|
125
|
+
ok "全角标点检查器能报坏输入"
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
# ---- curl stub:按 URL 决定行为,不出网 ----
|
|
129
|
+
mkdir -p "$WORK/bin"
|
|
130
|
+
cat > "$WORK/bin/curl" <<'STUB'
|
|
131
|
+
#!/usr/bin/env bash
|
|
132
|
+
# 只实现测试需要的部分:--version、-o <file>、URL 里的关键字决定产物
|
|
133
|
+
if [ "${1:-}" = "--version" ]; then
|
|
134
|
+
echo "curl ${CURL_STUB_VERSION:-8.7.1} (test-stub)"
|
|
135
|
+
exit 0
|
|
136
|
+
fi
|
|
137
|
+
out=""; url=""; max_bytes=""
|
|
138
|
+
while [ $# -gt 0 ]; do
|
|
139
|
+
case "$1" in
|
|
140
|
+
-o) out=$2; shift 2 ;;
|
|
141
|
+
--max-filesize) max_bytes=$2; shift 2 ;;
|
|
142
|
+
http*|https*) url=$1; shift ;;
|
|
143
|
+
*) shift ;;
|
|
144
|
+
esac
|
|
145
|
+
done
|
|
146
|
+
[ -z "${CURL_ARGS_LOG:-}" ] || printf '%s\n' "$max_bytes" > "$CURL_ARGS_LOG"
|
|
147
|
+
case "$url" in
|
|
148
|
+
*slowA*|*slowB*)
|
|
149
|
+
if [ -n "${CURL_BARRIER_DIR:-}" ]; then
|
|
150
|
+
: > "$CURL_BARRIER_DIR/ready.$$"
|
|
151
|
+
tries=0
|
|
152
|
+
while [ "$(find "$CURL_BARRIER_DIR" -name 'ready.*' -type f | wc -l | tr -d ' ')" -lt 2 ]; do
|
|
153
|
+
tries=$((tries+1))
|
|
154
|
+
[ "$tries" -lt 1000 ] || exit 70
|
|
155
|
+
sleep 0.01
|
|
156
|
+
done
|
|
157
|
+
fi
|
|
158
|
+
;;
|
|
159
|
+
esac
|
|
160
|
+
case "$url" in
|
|
161
|
+
*fail500*) echo 'curl: (22) HTTP response code said error' >&2; exit 22 ;;
|
|
162
|
+
*html*) printf '<html><body>blocked</body></html>' > "$out" ;;
|
|
163
|
+
*empty*) : > "$out" ;;
|
|
164
|
+
*oversize*) printf '%s\n' '[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]' > "$out" ;;
|
|
165
|
+
*slowA*) sleep 1; printf '{"who":"A"}' > "$out" ;;
|
|
166
|
+
*slowB*) sleep 1; printf '{"who":"B"}' > "$out" ;;
|
|
167
|
+
*) printf '{"ok":true}' > "$out" ;;
|
|
168
|
+
esac
|
|
169
|
+
exit 0
|
|
170
|
+
STUB
|
|
171
|
+
chmod +x "$WORK/bin/curl"
|
|
172
|
+
|
|
173
|
+
run_fetch() { # 在受控 PATH 下 source 文档片段并调用 fetch
|
|
174
|
+
local log=${FETCH_LOG:-/dev/null}
|
|
175
|
+
( export PATH="$WORK/bin:$PATH" UA="regression-test test@example.invalid"
|
|
176
|
+
[ -z "${CURL_BARRIER_DIR:-}" ] || export CURL_BARRIER_DIR
|
|
177
|
+
cd "$WORK/run" || exit 9
|
|
178
|
+
# shellcheck disable=SC1090
|
|
179
|
+
. "$WORK/fetch.sh"
|
|
180
|
+
OUT=$PWD; export OUT
|
|
181
|
+
fetch "$@"
|
|
182
|
+
) >"$log" 2>&1
|
|
183
|
+
rc=$?
|
|
184
|
+
echo "$rc"
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
echo "== fetch 行为 =="
|
|
188
|
+
rm -rf "$WORK/run"; mkdir -p "$WORK/run"
|
|
189
|
+
check "正常下载返回 0" "$(run_fetch "$WORK/run/a.json" 'https://x/data')" 0
|
|
190
|
+
check "已存在则 SKIP 返回 0" "$(run_fetch "$WORK/run/a.json" 'https://x/data')" 0
|
|
191
|
+
check "curl 失败返回 1" "$(FETCH_LOG="$WORK/curl-fail.log" run_fetch "$WORK/run/b.json" 'https://x/fail500')" 1
|
|
192
|
+
check "curl 失败原因匹配" "$(grep -Fq 'curl: (22)' "$WORK/curl-fail.log" && echo matched || echo missing)" matched
|
|
193
|
+
check "curl 失败不留成品" "$([ -e "$WORK/run/b.json" ] && echo present || echo absent)" absent
|
|
194
|
+
check "curl < 8.4.0 被拒绝" "$(FETCH_LOG="$WORK/oldcurl.log" CURL_STUB_VERSION=8.3.0 run_fetch "$WORK/run/oldcurl.json" 'https://x/data')" 1
|
|
195
|
+
check "旧 curl 失败原因匹配" "$(grep -Fq '< 8.4.0' "$WORK/oldcurl.log" && echo matched || echo missing)" matched
|
|
196
|
+
check "旧 curl 不留成品" "$([ -e "$WORK/run/oldcurl.json" ] && echo present || echo absent)" absent
|
|
197
|
+
check "类型不符返回 1" "$(FETCH_LOG="$WORK/type.log" run_fetch "$WORK/run/c.json" 'https://x/html')" 1
|
|
198
|
+
check "类型不符原因匹配" "$(grep -Fq '类型不符' "$WORK/type.log" && echo matched || echo missing)" matched
|
|
199
|
+
check "类型不符不留成品" "$([ -e "$WORK/run/c.json" ] && echo present || echo absent)" absent
|
|
200
|
+
check "空响应返回 1" "$(FETCH_LOG="$WORK/empty.log" run_fetch "$WORK/run/d.json" 'https://x/empty')" 1
|
|
201
|
+
check "空响应原因匹配" "$(grep -Fq '空响应' "$WORK/empty.log" && echo matched || echo missing)" matched
|
|
202
|
+
mkdir -p "$WORK/run/adir" && : > "$WORK/run/adir/keep"
|
|
203
|
+
check "目标是目录返回 2" "$(run_fetch "$WORK/run/adir" 'https://x/data')" 2
|
|
204
|
+
check "目录内容未被动" "$([ -e "$WORK/run/adir/keep" ] && echo kept || echo GONE)" kept
|
|
205
|
+
check "无 .part 残留" "$(find "$WORK/run" -name '*.part.*' | wc -l | tr -d ' ')" 0
|
|
206
|
+
|
|
207
|
+
run_fetch_smallcap() { # 把 MAX_BYTES 压到很小,用来触发体积上限分支
|
|
208
|
+
local log=${FETCH_LOG:-/dev/null}
|
|
209
|
+
( export PATH="$WORK/bin:$PATH" UA="regression-test test@example.invalid"
|
|
210
|
+
[ -z "${CURL_ARGS_LOG:-}" ] || export CURL_ARGS_LOG
|
|
211
|
+
cd "$WORK/run" || exit 9
|
|
212
|
+
# shellcheck disable=SC1090
|
|
213
|
+
. "$WORK/fetch.sh" >/dev/null 2>&1
|
|
214
|
+
# MAX_BYTES 被文档里的 accept() 读取,shellcheck 看不到跨 source 的使用
|
|
215
|
+
# shellcheck disable=SC2034
|
|
216
|
+
MAX_BYTES=${MAXOVERRIDE:-32}; OUT=$PWD; export OUT
|
|
217
|
+
fetch "$@"
|
|
218
|
+
) >"$log" 2>&1
|
|
219
|
+
rc=$?
|
|
220
|
+
echo "$rc"
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
echo "== 已存在的文件也要过验收,不能因 SKIP 绕过(评审 P1)=="
|
|
224
|
+
rm -rf "$WORK/run"; mkdir -p "$WORK/run"
|
|
225
|
+
printf '<html>上一轮/别的工具留下的非空垃圾</html>' > "$WORK/run/stale.json"
|
|
226
|
+
check "残留 HTML 被拒收(1)" "$(run_fetch "$WORK/run/stale.json" 'https://x/data')" 1
|
|
227
|
+
printf '{"ok":true}' > "$WORK/run/good.json"
|
|
228
|
+
check "残留合法 JSON 走 SKIP(0)" "$(run_fetch "$WORK/run/good.json" 'https://x/data')" 0
|
|
229
|
+
# 已存在文件从没经过 curl --max-filesize,所以体积必须由 accept 自己查(评审 P1)
|
|
230
|
+
python3 -c "open('$WORK/run/huge.json','w').write('['+'0,'*60+'0]')"
|
|
231
|
+
check "超上限的残留文件被拒收(1)" "$(FETCH_LOG="$WORK/stale-size.log" MAXOVERRIDE=32 run_fetch_smallcap "$WORK/run/huge.json" 'https://x/data')" 1
|
|
232
|
+
check "残留超限原因匹配" "$(grep -Fq '超过体积上限' "$WORK/stale-size.log" && echo matched || echo missing)" matched
|
|
233
|
+
check "超上限的新下载被拒收(1)" "$(FETCH_LOG="$WORK/new-size.log" MAXOVERRIDE=32 run_fetch_smallcap "$WORK/run/oversize.json" 'https://x/oversize')" 1
|
|
234
|
+
check "新下载超限原因匹配" "$(grep -Fq '超过体积上限' "$WORK/new-size.log" && echo matched || echo missing)" matched
|
|
235
|
+
check "小上限下载返回 0" "$(CURL_ARGS_LOG="$WORK/max-bytes.log" MAXOVERRIDE=32 run_fetch_smallcap "$WORK/run/capped.json" 'https://x/data')" 0
|
|
236
|
+
check "curl 与 accept 使用同一上限" "$(cat "$WORK/max-bytes.log")" 32
|
|
237
|
+
|
|
238
|
+
cat > "$WORK/bin/ln" <<'S'
|
|
239
|
+
#!/usr/bin/env bash
|
|
240
|
+
exit 1
|
|
241
|
+
S
|
|
242
|
+
chmod +x "$WORK/bin/ln"
|
|
243
|
+
check "硬链接不受支持时下载前失败" "$(FETCH_LOG="$WORK/no-hardlink.log" run_fetch "$WORK/run/no-hardlink.json" 'https://x/data')" 1
|
|
244
|
+
check "硬链接探针失败原因匹配" "$(grep -Fq '成品目录不支持硬链接' "$WORK/no-hardlink.log" && echo matched || echo missing)" matched
|
|
245
|
+
rm -f "$WORK/bin/ln"
|
|
246
|
+
|
|
247
|
+
echo "== accept 的外部命令失败必须 fail-closed(评审 P1)=="
|
|
248
|
+
rm -rf "$WORK/run"; mkdir -p "$WORK/run" "$WORK/nofile"
|
|
249
|
+
cat > "$WORK/nofile/file" <<'S'
|
|
250
|
+
#!/usr/bin/env bash
|
|
251
|
+
exit 127 # 冒充 file 不可用/执行失败
|
|
252
|
+
S
|
|
253
|
+
chmod +x "$WORK/nofile/file"; cp "$WORK/bin/curl" "$WORK/nofile/curl"
|
|
254
|
+
rc=$( export PATH="$WORK/nofile:/usr/bin:/bin" UA="t t@example.invalid"
|
|
255
|
+
cd "$WORK/run" || exit 9; . "$WORK/fetch.sh" >/dev/null 2>&1; OUT=$PWD; export OUT
|
|
256
|
+
fetch "$WORK/run/e.json" 'https://x/data' >/dev/null 2>&1; echo $? )
|
|
257
|
+
check "file 失败时返回非 0" "$([ "$rc" != 0 ] && echo nonzero || echo zero)" nonzero
|
|
258
|
+
check "file 失败时不发布" "$([ -e "$WORK/run/e.json" ] && echo present || echo absent)" absent
|
|
259
|
+
|
|
260
|
+
echo "== 并发写同一目标、内容不同,不得静默覆盖(评审 P1)=="
|
|
261
|
+
rm -rf "$WORK/run" "$WORK/barrier"; mkdir -p "$WORK/run" "$WORK/barrier"
|
|
262
|
+
( CURL_BARRIER_DIR="$WORK/barrier" run_fetch "$WORK/run/race.json" 'https://x/slowA' > "$WORK/rcA" ) &
|
|
263
|
+
( CURL_BARRIER_DIR="$WORK/barrier" run_fetch "$WORK/run/race.json" 'https://x/slowB' > "$WORK/rcB" ) &
|
|
264
|
+
wait
|
|
265
|
+
rcA=$(cat "$WORK/rcA"); rcB=$(cat "$WORK/rcB")
|
|
266
|
+
winners=0; [ "$rcA" = 0 ] && winners=$((winners+1)); [ "$rcB" = 0 ] && winners=$((winners+1))
|
|
267
|
+
check "恰好一个调用发布成功" "$winners" 1
|
|
268
|
+
losers=0; for r in "$rcA" "$rcB"; do [ "$r" = 3 ] && losers=$((losers+1)); done
|
|
269
|
+
check "另一个报并发冲突(3)" "$losers" 1
|
|
270
|
+
check "成品是完整的单方内容" "$(python3 -c "
|
|
271
|
+
import json,sys
|
|
272
|
+
d=json.load(open('$WORK/run/race.json'))
|
|
273
|
+
print('single' if d.get('who') in ('A','B') and len(d)==1 else 'MIXED')" 2>/dev/null || echo BROKEN)" single
|
|
274
|
+
check "并发后无 .part 残留" "$(find "$WORK/run" -name '*.part.*' | wc -l | tr -d ' ')" 0
|
|
275
|
+
|
|
276
|
+
echo "== 分页循环:解析失败必须非零终止,不得空转(评审 P1/P2)=="
|
|
277
|
+
# 只跑 sh[0] 会漏掉这一块——分页块里 N=$(...) 失败时 OFF 不前进,会反复读同一页。
|
|
278
|
+
cat > "$WORK/pagerun.sh" <<'SH'
|
|
279
|
+
set -euo pipefail
|
|
280
|
+
UA="t t@example.invalid"; OUT=$PWD; export UA OUT
|
|
281
|
+
DOMAIN=example.invalid; ID=ds; PAGE=2
|
|
282
|
+
# shellcheck disable=SC1090
|
|
283
|
+
. "$WORKDIR/fetch.sh" >/dev/null 2>&1
|
|
284
|
+
fetch() {
|
|
285
|
+
case "$1" in
|
|
286
|
+
*-p0.json) printf '%s' "$BADBODY" > "$1" ;;
|
|
287
|
+
*) printf '%s' "${NEXTBODY:-$BADBODY}" > "$1" ;;
|
|
288
|
+
esac
|
|
289
|
+
FETCHED=1
|
|
290
|
+
if [ "${CONFLICT_ONCE:-0}" = 1 ] && [ ! -e "$WORKDIR/conflict-returned" ]; then
|
|
291
|
+
: > "$WORKDIR/conflict-returned"
|
|
292
|
+
return 3
|
|
293
|
+
fi
|
|
294
|
+
return 0
|
|
295
|
+
} # 绕开网络,直接给受控分页内容
|
|
296
|
+
# shellcheck disable=SC1090
|
|
297
|
+
. "$WORKDIR/page.sh"
|
|
298
|
+
SH
|
|
299
|
+
run_pager() {
|
|
300
|
+
python3 - "$WORK/pagerun.sh" <<'PY'
|
|
301
|
+
import subprocess,sys
|
|
302
|
+
try:
|
|
303
|
+
p=subprocess.run(["bash",sys.argv[1]],stdout=subprocess.DEVNULL,
|
|
304
|
+
stderr=subprocess.STDOUT,timeout=20)
|
|
305
|
+
print(p.returncode)
|
|
306
|
+
except subprocess.TimeoutExpired:
|
|
307
|
+
print(124)
|
|
308
|
+
PY
|
|
309
|
+
}
|
|
310
|
+
rm -rf "$WORK/pg"; mkdir -p "$WORK/pg"
|
|
311
|
+
rc=$( cd "$WORK/pg" || exit 9
|
|
312
|
+
export WORKDIR="$WORK" BADBODY='{ this is not json'
|
|
313
|
+
run_pager )
|
|
314
|
+
check "JSON 损坏时非零终止" "$([ "$rc" != 0 ] && [ "$rc" != 124 ] && echo nonzero || echo "bad:$rc")" nonzero
|
|
315
|
+
rm -rf "$WORK/pg2"; mkdir -p "$WORK/pg2"
|
|
316
|
+
rc2=$( cd "$WORK/pg2" || exit 9
|
|
317
|
+
export WORKDIR="$WORK" BADBODY='[]'
|
|
318
|
+
run_pager )
|
|
319
|
+
check "空页正常收尾(0)" "$rc2" 0
|
|
320
|
+
rm -rf "$WORK/pg-full"; mkdir -p "$WORK/pg-full"
|
|
321
|
+
rc_full=$( cd "$WORK/pg-full" || exit 9
|
|
322
|
+
export WORKDIR="$WORK" BADBODY='[1,2]' NEXTBODY='[]'
|
|
323
|
+
run_pager )
|
|
324
|
+
check "set -e 下满页后继续到空页" "$rc_full" 0
|
|
325
|
+
rm -f "$WORK/conflict-returned"
|
|
326
|
+
rm -rf "$WORK/pg-conflict"; mkdir -p "$WORK/pg-conflict"
|
|
327
|
+
rc_conflict=$( cd "$WORK/pg-conflict" || exit 9
|
|
328
|
+
export WORKDIR="$WORK" BADBODY='[]' CONFLICT_ONCE=1
|
|
329
|
+
run_pager )
|
|
330
|
+
check "并发已发布返回 3 时继续处理该页" "$rc_conflict" 0
|
|
331
|
+
rm -rf "$WORK/pg3"; mkdir -p "$WORK/pg3"
|
|
332
|
+
rc3=$( cd "$WORK/pg3" || exit 9
|
|
333
|
+
export WORKDIR="$WORK" BADBODY='{"error":"not an array page"}'
|
|
334
|
+
run_pager )
|
|
335
|
+
check "JSON 对象不能冒充数组页" "$([ "$rc3" != 0 ] && [ "$rc3" != 124 ] && echo nonzero || echo "bad:$rc3")" nonzero
|
|
336
|
+
|
|
337
|
+
echo "== ALIAS 解析必须 fail-closed =="
|
|
338
|
+
# 直接判命令,不用 $?——间接读退出码正是本 reference §3.6 点名的坑
|
|
339
|
+
if python3 - "$WORK/parse.py" "$WORK" <<'PY'
|
|
340
|
+
import re,sys,openpyxl,os
|
|
341
|
+
code=open(sys.argv[1],encoding='utf-8').read()
|
|
342
|
+
def variant(alias_literal):
|
|
343
|
+
c=re.sub(r'ALIAS = \{.*?\n\}', alias_literal, code, count=1, flags=re.S)
|
|
344
|
+
assert c!=code, "ALIAS 字面量替换失败——文档结构变了,请更新本测试"
|
|
345
|
+
return c.replace('SHEET_NAME','"DATA"').replace('...','pass')
|
|
346
|
+
two = variant('ALIAS = {"A":["New Name","Old Name"],"B":["BEE","B_OLD"]}')
|
|
347
|
+
share = variant('ALIAS = {"person":["NAME"],"organization":["NAME"]}')
|
|
348
|
+
tmp=os.path.join(sys.argv[2],"alias-fixtures")
|
|
349
|
+
os.mkdir(tmp)
|
|
350
|
+
def wb(name,hdr,rows=((1,2),)):
|
|
351
|
+
w=openpyxl.Workbook(); s=w.active; s.title="DATA"
|
|
352
|
+
if hdr is not None: s.append(hdr)
|
|
353
|
+
for r in rows: s.append(list(r))
|
|
354
|
+
p=os.path.join(tmp,name+".xlsx"); w.save(p); return p
|
|
355
|
+
cases=[
|
|
356
|
+
("新名(大小写/空白不同)命中", two, wb("c1",["New name","BEE"]), "ok"),
|
|
357
|
+
("旧名走别名命中", two, wb("c2",["Old Name","B_OLD"]), "ok"),
|
|
358
|
+
("新旧候选同时命中", two, wb("c3",["New Name","Old Name","BEE"]), "closed"),
|
|
359
|
+
("候选全不在表头", two, wb("c4",["ZZZ","BEE"]), "closed"),
|
|
360
|
+
("表头重复", two, wb("c5",["New Name","New Name","BEE"]), "closed"),
|
|
361
|
+
("空表无表头行", two, wb("c6",None,rows=()), "closed"),
|
|
362
|
+
("两语义绑同一物理列", share, wb("c7",["NAME","OTHER"]), "closed"),
|
|
363
|
+
]
|
|
364
|
+
bad=0
|
|
365
|
+
for tag,src,path,want in cases:
|
|
366
|
+
ns={'openpyxl':openpyxl,'path':path}
|
|
367
|
+
try:
|
|
368
|
+
exec(compile(src,'<doc>','exec'),ns); got="ok"
|
|
369
|
+
except SystemExit: got="closed"
|
|
370
|
+
except Exception as e: got=f"UNEXPECTED {type(e).__name__}: {e}"
|
|
371
|
+
if got==want: print(f" ok {tag}")
|
|
372
|
+
else: print(f" FAIL {tag} — 期望 {want},实得 {got}"); bad+=1
|
|
373
|
+
sys.exit(1 if bad else 0)
|
|
374
|
+
PY
|
|
375
|
+
then ok "ALIAS 七种输入"; else bad "ALIAS 七种输入"; fi
|
|
376
|
+
|
|
377
|
+
printf '\n通过 %d,失败 %d\n' "$pass" "$fail"
|
|
378
|
+
[ "$fail" -eq 0 ] || exit 1
|
|
379
|
+
echo "public_data_acquisition_recipes_ok"
|