@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,145 @@
|
|
|
1
|
+
# 用例评审与优先级评定
|
|
2
|
+
|
|
3
|
+
写完一批 TC 之后 / release 之前的两道质量门:
|
|
4
|
+
- §1 **评审**:写完 TC 怎么知道写好了(review checklist)
|
|
5
|
+
- §2 **定优先级**:P0 / P1 / P2 怎么从经验判断改成可执行方法
|
|
6
|
+
|
|
7
|
+
不替代 `classical-test-design-techniques.md` / `source-to-case-workflows.md` — 那两份是"怎么写",这份是"写完之后"。
|
|
8
|
+
|
|
9
|
+
## 外部来源(按名引用)
|
|
10
|
+
|
|
11
|
+
- **IEEE 829** / **ISO/IEC/IEEE 29119-3:2021** test documentation lineage — TC 应含字段
|
|
12
|
+
- **ISTQB CTFL** v4 syllabus — test documentation + 评审术语
|
|
13
|
+
- **George Dinwiddie**(2009)— Three Amigos meeting origin
|
|
14
|
+
- **Lisa Crispin & Janet Gregory** — *Agile Testing* / *More Agile Testing*(Power of Three / 全团队协作)
|
|
15
|
+
- **Hans Schaefer** — *Risk Based Testing*(实务派 risk-based testing)
|
|
16
|
+
- **Erik van Veenendaal** / **TMAP** — Product Risk Analysis(PRISMA 实际归属)
|
|
17
|
+
- **ISTQB Advanced Test Manager** syllabus — Risk-Based Testing 章节
|
|
18
|
+
- **James Bach & Michael Bolton** — Heuristic Test Strategy Model(HTSM quality criteria 作打分补充维度)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## §1 TC Review Checklist
|
|
23
|
+
|
|
24
|
+
### 1.1 谁 review
|
|
25
|
+
|
|
26
|
+
**第二人原则**:自己写自己看不算 review。每批 TC 必须有 1+ 第二人过:
|
|
27
|
+
- **同伴 review**(任一:dev / tester / PM):必须
|
|
28
|
+
- **PO review**:当 TC 来自需求文档(Source A),PO 必须扫一遍确认"这就是我要的"
|
|
29
|
+
- **架构 review**:当 TC 涉及钱 / 权限 / 数据一致性 / 跨服务关键流程
|
|
30
|
+
|
|
31
|
+
### 1.2 七要素 review checklist
|
|
32
|
+
|
|
33
|
+
(条目源自 IEEE 829 / ISO 29119-3 test documentation 字段 + ISTQB CTFL 静态评审术语 + 业内通用经验。review 时按 7 项打勾,任一不过 → 改完再 review。)
|
|
34
|
+
|
|
35
|
+
1. **意图明确**:1 句话能说出"这条测的是什么"。说不出 → fail
|
|
36
|
+
2. **操作可复现**:另一个人按步骤跑得同样结果,不依赖测者经验
|
|
37
|
+
3. **预期可观察**:预期结果是外部可见输出(return value / DB 行 / 视觉变化 / 日志 / metric),不是"程序应正常运行"
|
|
38
|
+
4. **数据明确**:前置条件枚举具体数据("用户 A 已登录,角色 = admin" 而非"用户登录")
|
|
39
|
+
5. **隔离性**:TC 不依赖其他 TC 的执行顺序 / 残留状态
|
|
40
|
+
6. **覆盖必要边界**:相邻有 boundary / negative / error 同伴 TC,不能 happy-only
|
|
41
|
+
7. **可维护**:模块拆得清楚,重命名 / 重构后只改一处
|
|
42
|
+
|
|
43
|
+
### 1.3 Three Amigos 轻量评审(Dinwiddie 2009 + Crispin/Gregory "Power of Three")
|
|
44
|
+
|
|
45
|
+
**理想**:PM(business)+ dev + tester 围一张桌子 / 视频会,每条 TC 念出来,三人都点头 → 入库。注意这是**轻量评审**用途,不是 `source-to-case-workflows.md` 故意不借鉴段所指的"全套 Spec Workshop"(那是产品过程,归 `product-rd-workflow`)。
|
|
46
|
+
|
|
47
|
+
**退化**(凑不齐三人时):tester 写完 → dev review("按这条 TC 我开发吗?")+ PM 异步 review("这就是我要的?")。两个独立角色至少各过一次。
|
|
48
|
+
|
|
49
|
+
### 1.4 Review 流转
|
|
50
|
+
|
|
51
|
+
- 不通过 → 评论留 Bitable 信息流转:`[reviewer 日期] review 不通过:操作步骤第 3 步歧义,请明确 X 值`
|
|
52
|
+
- 改完作者主动 ping reviewer,不要让 reviewer 反复追
|
|
53
|
+
- 通过 → reviewer 在 信息流转 留 `[reviewer 日期] review 通过`
|
|
54
|
+
- **review 状态与执行状态分开追踪**:信息流转里用 `[作者 日期] review pending @reviewer 期待 X 月 Y 日前回复` 让 release 计划能区分"未 review"和"未执行",避免 review 卡周级别时也混进"已就绪"统计
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## §2 Risk-Based Prioritization
|
|
59
|
+
|
|
60
|
+
SKILL.md 现状 P0 / P1 / P2 是经验判断("blocking / important / nice")。本节给可执行方法。
|
|
61
|
+
|
|
62
|
+
### 2.1 风险公式(最通用)
|
|
63
|
+
|
|
64
|
+
**Risk = Probability × Impact**(业内 30 年共识,ISTQB / ISO 29119 同源)
|
|
65
|
+
|
|
66
|
+
**Probability**(发生概率,1-5 分):
|
|
67
|
+
- 1 = 罕见(新代码 + 简单逻辑 + 测试覆盖好)
|
|
68
|
+
- 3 = 中等(已上线但近期改过 / 跨服务调用 / 复杂条件)
|
|
69
|
+
- 5 = 高频(用户每天碰 / 历史多次 incident / 复杂分支 / 时间敏感)
|
|
70
|
+
|
|
71
|
+
**Impact**(影响,1-5 分):
|
|
72
|
+
- 1 = 用户体感差但不丢数据 / 可解释
|
|
73
|
+
- 3 = 部分用户阻塞 / 单点数据错(可改 / 可补)
|
|
74
|
+
- 5 = 全量阻塞 / 钱算错 / 数据丢失 / 安全 / 合规事故
|
|
75
|
+
|
|
76
|
+
**得分 → 优先级**:
|
|
77
|
+
|
|
78
|
+
| Score | 优先级 |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| 15-25 | **P0**(必须 release 前过)|
|
|
81
|
+
| 6-14 | **P1**(应当 release 前过;可豁免须 owner + 理由)|
|
|
82
|
+
| 1-5 | **P2**(可 post-release)|
|
|
83
|
+
|
|
84
|
+
> 分段是本团队 release-gate 校准(非公认标准);跑 1-2 个 release 后按 incident 复盘调阈值。
|
|
85
|
+
|
|
86
|
+
### 2.2 内部三因子产品风险 shortcut(启发自 PRISMA / TMAP)
|
|
87
|
+
|
|
88
|
+
PRISMA / TMAP 的产品风险分析(van Veenendaal)比较深;这里取一个轻量三因子作业内日常评分用:
|
|
89
|
+
|
|
90
|
+
- **业务关键性**:用户多频 / 钱 / 监管 → 高
|
|
91
|
+
- **技术复杂度**:新框架 / 多线程 / 重写 / cross-cutting → 高
|
|
92
|
+
- **变更程度**:本次改了多少 / 是否影响 hot path → 高
|
|
93
|
+
|
|
94
|
+
三维都高 → P0;任一极高 → P1;都低 → P2。和 2.1 公式互校(不一致时讨论再定)。
|
|
95
|
+
|
|
96
|
+
**当 Prob × Impact 评分太窄**(典型:架构稳定性 / 可观察性 / 可维护性 / 可恢复性 这种 horizontal 风险):用 HTSM (Bach/Bolton) 的 quality criteria 作 prompt 补维度(**完整列表见 Bach HTSM PDF;以下是常用子集**)— capability / reliability / usability / charisma / security / scalability / performance / installability / compatibility / development(含 supportability / testability / maintainability / portability / localizability)。
|
|
97
|
+
|
|
98
|
+
### 2.3 触发升级的规则
|
|
99
|
+
|
|
100
|
+
默认按公式打分;以下情况无论得分都升级:
|
|
101
|
+
|
|
102
|
+
| 触发 | 处理 |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| 历史上同模块出过 P0 incident | 该模块全部 TC 在公式得分基础上 + 1 级 |
|
|
105
|
+
| 监管 / 合规要求强制覆盖 | 强制 P0 |
|
|
106
|
+
| `[回归]` TC(Source E) | 自动 P0(SKILL.md 已规则) |
|
|
107
|
+
| `[soap-opera]` / `[charter]` | 按真实业务风险评,**不强制 P0**(classical-techniques.md 已规则) |
|
|
108
|
+
|
|
109
|
+
### 2.4 例
|
|
110
|
+
|
|
111
|
+
某报告导出模块 TC list:
|
|
112
|
+
```
|
|
113
|
+
TC-EXPORT-001 报告导出请求成功
|
|
114
|
+
Prob 5(每天用) × Impact 5(导出失败 = 主流程断) = 25 → P0
|
|
115
|
+
|
|
116
|
+
TC-AUTH-007 token 过期自动续期幂等
|
|
117
|
+
Prob 3(每天少量碰) × Impact 5(重复发起验证 / session 错位) = 15 → P0
|
|
118
|
+
|
|
119
|
+
TC-DOC-020 文档预览页 footer 排版
|
|
120
|
+
Prob 5(每天看) × Impact 1(不丢数据) = 5 → P2
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## §3 整体落地
|
|
126
|
+
|
|
127
|
+
| 阶段 | 谁 | 做 |
|
|
128
|
+
| --- | --- | --- |
|
|
129
|
+
| 写 TC 时 | 作者 | 按 §2 给每条打分评 P0 / P1 / P2;分数写 Bitable 信息流转 `[作者 日期] risk=4×4=16 → P0` |
|
|
130
|
+
| 提 review 时 | 作者 | 按 §1.2 七要素自查;自查不过别提 review |
|
|
131
|
+
| Review 时 | reviewer | 按 §1.2 七要素扫;不过留 信息流转 |
|
|
132
|
+
| Review 通过 | reviewer | 信息流转留 `[reviewer 日期] review 通过`,状态可改"未测试" |
|
|
133
|
+
| Release 决策 | 发布人 | P0 全过 才能 release;P1 可豁免须有 owner + 理由;P2 post-release |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 故意不借鉴
|
|
138
|
+
|
|
139
|
+
| 方法 | 原因 |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| ISO 29119 完整 risk catalog(含资源 / 进度 / 合规等 ~20 维) | 太重;产品风险三维够用 |
|
|
142
|
+
| FMEA RPN(Severity × Occurrence × Detection) | 制造业用法,detection 在软件里难量化;用 Prob × Impact 二维 |
|
|
143
|
+
| Test prioritization regression algorithms(如 history-based ML 排序) | 是 CI 自动化层面的题,归 `testing-strategy` / CI 工具 |
|
|
144
|
+
| TestRail-style approval state machine | 我们 Bitable `信息流转` append-only + 状态 字段已等价 |
|
|
145
|
+
| Heuristic-only review(凭感觉过) | 不可执行;用 §1.2 七要素作清单 |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# skills/test-artifact-management/references/tc_helpers Agent Contract
|
|
2
|
+
|
|
3
|
+
Helpers here map automated test results to testcase IDs and report artifacts.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
|
|
7
|
+
- Preserve collection-time testcase mapping so skipped/blocked/fixture-failed
|
|
8
|
+
tests still report to the right case.
|
|
9
|
+
- Do not collapse failed, skipped, blocked, unlinked, and deprecated cases into
|
|
10
|
+
one status.
|
|
11
|
+
- Keep helpers dependency-light and portable across target repos.
|
|
12
|
+
- Add focused tests for marker parsing or report-shape changes.
|
|
13
|
+
|
|
14
|
+
Validation:
|
|
15
|
+
|
|
16
|
+
- `python3 -m pytest -q skills/test-artifact-management/references/test_gen_report.py`
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/// TC ID helper for Dart `test` and Flutter `flutter_test`.
|
|
2
|
+
///
|
|
3
|
+
/// Dart's `test()` runs the body inside a callback and does not expose the
|
|
4
|
+
/// currently-running test name to the body. We solve this by wrapping
|
|
5
|
+
/// `test()` and `testWidgets()` so the TC IDs are recorded at registration
|
|
6
|
+
/// time (keyed by the test description).
|
|
7
|
+
///
|
|
8
|
+
/// Usage (pure Dart / dart test):
|
|
9
|
+
/// ```dart
|
|
10
|
+
/// import 'tc.dart';
|
|
11
|
+
///
|
|
12
|
+
/// void main() {
|
|
13
|
+
/// tcTest(['TC-SY-001'], 'login success', () {
|
|
14
|
+
/// // ... assertions
|
|
15
|
+
/// });
|
|
16
|
+
/// }
|
|
17
|
+
/// ```
|
|
18
|
+
///
|
|
19
|
+
/// Usage (Flutter widget tests):
|
|
20
|
+
/// ```dart
|
|
21
|
+
/// import 'package:flutter_test/flutter_test.dart';
|
|
22
|
+
/// import 'tc.dart';
|
|
23
|
+
///
|
|
24
|
+
/// void main() {
|
|
25
|
+
/// tcTestWidgets(['TC-SY-001'], 'login form renders', (tester) async {
|
|
26
|
+
/// // ... pump + expect
|
|
27
|
+
/// });
|
|
28
|
+
/// }
|
|
29
|
+
/// ```
|
|
30
|
+
///
|
|
31
|
+
/// Sidecar path: `test/results/tc-map.jsonl` (override via TC_SIDECAR env).
|
|
32
|
+
/// The Makefile `test` target truncates the sidecar before each run.
|
|
33
|
+
|
|
34
|
+
import 'dart:convert';
|
|
35
|
+
import 'dart:io';
|
|
36
|
+
|
|
37
|
+
import 'package:test/test.dart';
|
|
38
|
+
|
|
39
|
+
String _sidecarPath() =>
|
|
40
|
+
Platform.environment['TC_SIDECAR'] ?? 'test/results/tc-map.jsonl';
|
|
41
|
+
|
|
42
|
+
/// Parse StackTrace.current to find the caller test file path.
|
|
43
|
+
/// Returns empty string when not derivable.
|
|
44
|
+
String _callerTestFile() {
|
|
45
|
+
final lines = StackTrace.current.toString().split('\n');
|
|
46
|
+
final cwd = Directory.current.path + Platform.pathSeparator;
|
|
47
|
+
for (final raw in lines) {
|
|
48
|
+
final line = raw.trim();
|
|
49
|
+
// Skip own frames + dart sdk + package frames
|
|
50
|
+
if (line.contains('tc.dart:') ||
|
|
51
|
+
line.contains('tcTest ') ||
|
|
52
|
+
line.contains('_record ') ||
|
|
53
|
+
line.contains('_callerTestFile') ||
|
|
54
|
+
line.contains('(dart:') || // SDK frames: "(dart:async/..."
|
|
55
|
+
line.contains('(package:')) continue; // package frames
|
|
56
|
+
// Match "<...> (FILE:line:col)" or "<...> FILE:line:col"
|
|
57
|
+
final m = RegExp(r'(?:[(\s]|^)(?:file:\/\/)?([^():\s]+_test\.dart):\d+:\d+\)?').firstMatch(line);
|
|
58
|
+
if (m != null) {
|
|
59
|
+
var f = m.group(1)!;
|
|
60
|
+
if (f.startsWith(cwd)) f = f.substring(cwd.length);
|
|
61
|
+
return f;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return '';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void _record(String description, List<String> ids) {
|
|
68
|
+
if (ids.isEmpty) return;
|
|
69
|
+
final strict = const ['1', 'true', 'yes']
|
|
70
|
+
.contains((Platform.environment['TC_SIDECAR_STRICT'] ?? '').toLowerCase());
|
|
71
|
+
try {
|
|
72
|
+
final file = File(_sidecarPath());
|
|
73
|
+
file.parent.createSync(recursive: true);
|
|
74
|
+
final f = _callerTestFile();
|
|
75
|
+
final testKey = f.isNotEmpty ? '$f::$description' : description;
|
|
76
|
+
final line = jsonEncode({'test': testKey, 'tc_ids': ids});
|
|
77
|
+
file.writeAsStringSync('$line\n',
|
|
78
|
+
mode: FileMode.append, flush: true);
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (strict) rethrow;
|
|
81
|
+
// best-effort fallback (default)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// Wrapper around `test()` that links the test to one or more TC IDs.
|
|
86
|
+
void tcTest(
|
|
87
|
+
List<String> tcIds,
|
|
88
|
+
String description,
|
|
89
|
+
dynamic Function() body, {
|
|
90
|
+
Timeout? timeout,
|
|
91
|
+
dynamic skip,
|
|
92
|
+
dynamic tags,
|
|
93
|
+
Map<String, dynamic>? onPlatform,
|
|
94
|
+
int? retry,
|
|
95
|
+
}) {
|
|
96
|
+
_record(description, tcIds);
|
|
97
|
+
test(description, body,
|
|
98
|
+
timeout: timeout,
|
|
99
|
+
skip: skip,
|
|
100
|
+
tags: tags,
|
|
101
|
+
onPlatform: onPlatform,
|
|
102
|
+
retry: retry);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/// Flutter-only wrapper around `testWidgets`. Importable lazily; if the host
|
|
106
|
+
/// project does not depend on flutter_test, comment this out or move to a
|
|
107
|
+
/// separate file `tc_widgets.dart`.
|
|
108
|
+
//
|
|
109
|
+
// import 'package:flutter_test/flutter_test.dart';
|
|
110
|
+
//
|
|
111
|
+
// void tcTestWidgets(
|
|
112
|
+
// List<String> tcIds,
|
|
113
|
+
// String description,
|
|
114
|
+
// WidgetTesterCallback body, {
|
|
115
|
+
// bool? skip,
|
|
116
|
+
// Timeout? timeout,
|
|
117
|
+
// Duration? initialTimeout,
|
|
118
|
+
// bool semanticsEnabled = true,
|
|
119
|
+
// TestVariant<Object?> variant = const DefaultTestVariant(),
|
|
120
|
+
// dynamic tags,
|
|
121
|
+
// }) {
|
|
122
|
+
// _record(description, tcIds);
|
|
123
|
+
// testWidgets(description, body,
|
|
124
|
+
// skip: skip,
|
|
125
|
+
// timeout: timeout,
|
|
126
|
+
// semanticsEnabled: semanticsEnabled,
|
|
127
|
+
// variant: variant,
|
|
128
|
+
// tags: tags);
|
|
129
|
+
// }
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// Package tc records TC IDs from Go tests to a JSONL sidecar.
|
|
2
|
+
//
|
|
3
|
+
// Usage:
|
|
4
|
+
//
|
|
5
|
+
// import "yourrepo/testkit/tc"
|
|
6
|
+
//
|
|
7
|
+
// func TestLoginSuccess(t *testing.T) {
|
|
8
|
+
// tc.Mark(t, "TC-SY-001")
|
|
9
|
+
// // ... test body
|
|
10
|
+
// }
|
|
11
|
+
//
|
|
12
|
+
// func TestBulkImportPartialFailure(t *testing.T) {
|
|
13
|
+
// tc.Mark(t, "TC-SY-001", "TC-SY-002")
|
|
14
|
+
// // ... test body
|
|
15
|
+
// }
|
|
16
|
+
//
|
|
17
|
+
// Each Mark call appends one JSONL line to test/results/tc-map.jsonl
|
|
18
|
+
// (configurable via TC_SIDECAR env). gen_report.py reads the sidecar and
|
|
19
|
+
// joins by t.Name(). The Makefile test target should truncate the sidecar
|
|
20
|
+
// before running tests so deleted tests don't leave stale entries.
|
|
21
|
+
package tc
|
|
22
|
+
|
|
23
|
+
import (
|
|
24
|
+
"encoding/json"
|
|
25
|
+
"os"
|
|
26
|
+
"path/filepath"
|
|
27
|
+
"runtime"
|
|
28
|
+
"strings"
|
|
29
|
+
"sync"
|
|
30
|
+
"testing"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
var mu sync.Mutex
|
|
34
|
+
|
|
35
|
+
// testKeyFromPC returns "<package-path>::<t.Name()>" so two TestLogin functions
|
|
36
|
+
// in different packages don't collide. The PC argument MUST be captured at the
|
|
37
|
+
// Mark callsite (runtime.Caller(1) inside Mark) — passing it explicitly avoids
|
|
38
|
+
// brittleness around helper-function inlining: if testKey/Mark were inlined,
|
|
39
|
+
// a fixed runtime.Caller(2) inside testKey would skip past the user's frame.
|
|
40
|
+
//
|
|
41
|
+
// Subtest closures register as "<pkg>.<TestName>.func1[.<n>...]" via
|
|
42
|
+
// runtime.FuncForPC. We strip every trailing segment until we land on a test
|
|
43
|
+
// entry function (prefix Test/Benchmark/Example/Fuzz), then strip ONCE more
|
|
44
|
+
// to drop the test name and reveal the package path.
|
|
45
|
+
//
|
|
46
|
+
// If no Test* entry is ever found in the chain, the PC almost certainly
|
|
47
|
+
// pointed at a wrapper helper (wrong extraSkip in MarkAt). In that case we
|
|
48
|
+
// log loudly and — under TC_SIDECAR_STRICT — fail the test, because a
|
|
49
|
+
// silently-wrong key turns a passing test into untracked and the bug only
|
|
50
|
+
// surfaces during report review.
|
|
51
|
+
func testKeyFromPC(t *testing.T, pc uintptr) string {
|
|
52
|
+
t.Helper()
|
|
53
|
+
name := t.Name()
|
|
54
|
+
fn := runtime.FuncForPC(pc)
|
|
55
|
+
if fn == nil {
|
|
56
|
+
warnBadFrame(t, "runtime.FuncForPC returned nil — wrong extraSkip in MarkAt?")
|
|
57
|
+
return name
|
|
58
|
+
}
|
|
59
|
+
full := fn.Name()
|
|
60
|
+
original := full
|
|
61
|
+
foundEntry := false
|
|
62
|
+
// Strip trailing segments until the last segment is a test entry.
|
|
63
|
+
for {
|
|
64
|
+
i := strings.LastIndex(full, ".")
|
|
65
|
+
if i < 0 {
|
|
66
|
+
break
|
|
67
|
+
}
|
|
68
|
+
last := full[i+1:]
|
|
69
|
+
if isTestEntry(last) {
|
|
70
|
+
full = full[:i] // drop the test name → leave package path
|
|
71
|
+
foundEntry = true
|
|
72
|
+
break
|
|
73
|
+
}
|
|
74
|
+
full = full[:i] // drop closure / numeric / func suffix and keep going
|
|
75
|
+
}
|
|
76
|
+
if !foundEntry {
|
|
77
|
+
warnBadFrame(t, "no Test*/Benchmark*/Example*/Fuzz* entry found in PC chain "+
|
|
78
|
+
"(captured "+original+"). Wrong extraSkip in MarkAt? "+
|
|
79
|
+
"If using a project wrapper, count how many helpers sit between the "+
|
|
80
|
+
"test and MarkAt; that's the extraSkip value.")
|
|
81
|
+
return name
|
|
82
|
+
}
|
|
83
|
+
if full == "" {
|
|
84
|
+
return name
|
|
85
|
+
}
|
|
86
|
+
return full + "::" + name
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// warnBadFrame surfaces a wrong-frame attribution. Under TC_SIDECAR_STRICT
|
|
90
|
+
// this becomes a test failure so CI catches the bug instead of silently
|
|
91
|
+
// recording a sidecar key that won't join JUnit.
|
|
92
|
+
func warnBadFrame(t *testing.T, msg string) {
|
|
93
|
+
t.Helper()
|
|
94
|
+
if strictMode() {
|
|
95
|
+
t.Fatalf("tc.MarkAt frame attribution failed: %s (TC_SIDECAR_STRICT=1)", msg)
|
|
96
|
+
} else {
|
|
97
|
+
t.Logf("⚠ tc.MarkAt frame attribution failed: %s", msg)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
func isTestEntry(s string) bool {
|
|
102
|
+
return strings.HasPrefix(s, "Test") ||
|
|
103
|
+
strings.HasPrefix(s, "Benchmark") ||
|
|
104
|
+
strings.HasPrefix(s, "Example") ||
|
|
105
|
+
strings.HasPrefix(s, "Fuzz")
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Mark links the currently-running test to one or more TC IDs.
|
|
109
|
+
// Safe under t.Parallel(); does not fail the test on I/O error (logged via t.Logf).
|
|
110
|
+
//
|
|
111
|
+
// MUST be called before any t.Skip / t.Skipf / setup that may call t.Fatal —
|
|
112
|
+
// otherwise the sidecar entry is not written for that test.
|
|
113
|
+
//
|
|
114
|
+
// DO NOT wrap Mark in a project-local helper without using MarkAt: the
|
|
115
|
+
// package-path detection reads the caller's PC, which would point to your
|
|
116
|
+
// wrapper's package instead of the test's package, producing wrong sidecar
|
|
117
|
+
// keys that don't join JUnit's classname.
|
|
118
|
+
func Mark(t *testing.T, ids ...string) {
|
|
119
|
+
t.Helper()
|
|
120
|
+
if len(ids) == 0 {
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
pc, _, _, _ := runtime.Caller(1) // caller of Mark = user test
|
|
124
|
+
markPC(t, pc, ids...)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// MarkAt lets a project-local wrapper register TC IDs while still attributing
|
|
128
|
+
// them to the USER's test (not the wrapper's package). `extraSkip` is the
|
|
129
|
+
// number of caller frames between the user's test code and the call to MarkAt.
|
|
130
|
+
//
|
|
131
|
+
// Examples:
|
|
132
|
+
//
|
|
133
|
+
// // Single wrapper: TestX → Smoke → MarkAt; extraSkip = 1 (skip Smoke).
|
|
134
|
+
// func Smoke(t *testing.T, ids ...string) {
|
|
135
|
+
// t.Helper()
|
|
136
|
+
// tc.MarkAt(t, 1, ids...)
|
|
137
|
+
// }
|
|
138
|
+
//
|
|
139
|
+
// // Two-level wrapper: TestX → Smoke → InnerMark → MarkAt; extraSkip = 2.
|
|
140
|
+
func MarkAt(t *testing.T, extraSkip int, ids ...string) {
|
|
141
|
+
t.Helper()
|
|
142
|
+
if len(ids) == 0 {
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
// depth 0 = MarkAt; depth 1 = caller of MarkAt (the wrapper);
|
|
146
|
+
// depth 1+extraSkip = the user's test (one extra hop per wrapper frame).
|
|
147
|
+
pc, _, _, _ := runtime.Caller(1 + extraSkip)
|
|
148
|
+
markPC(t, pc, ids...)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// markPC is the shared implementation. PC must already point at the user's
|
|
152
|
+
// test frame (so the package-path strip resolves to the test's package).
|
|
153
|
+
func markPC(t *testing.T, pc uintptr, ids ...string) {
|
|
154
|
+
t.Helper()
|
|
155
|
+
path := os.Getenv("TC_SIDECAR")
|
|
156
|
+
if path == "" {
|
|
157
|
+
path = "test/results/tc-map.jsonl"
|
|
158
|
+
}
|
|
159
|
+
mu.Lock()
|
|
160
|
+
defer mu.Unlock()
|
|
161
|
+
strict := strictMode()
|
|
162
|
+
fail := func(err error, what string) {
|
|
163
|
+
// Mark the closure as a helper too, so t.Fatalf credits the test
|
|
164
|
+
// callsite (the line that invoked tc.Mark), not tc.go.
|
|
165
|
+
t.Helper()
|
|
166
|
+
if strict {
|
|
167
|
+
t.Fatalf("tc.Mark: %s: %v (TC_SIDECAR_STRICT=1)", what, err)
|
|
168
|
+
}
|
|
169
|
+
t.Logf("tc.Mark: %s: %v", what, err)
|
|
170
|
+
}
|
|
171
|
+
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
|
172
|
+
fail(err, "mkdir "+filepath.Dir(path))
|
|
173
|
+
return
|
|
174
|
+
}
|
|
175
|
+
f, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
|
|
176
|
+
if err != nil {
|
|
177
|
+
fail(err, "open "+path)
|
|
178
|
+
return
|
|
179
|
+
}
|
|
180
|
+
defer f.Close()
|
|
181
|
+
entry := map[string]any{"test": testKeyFromPC(t, pc), "tc_ids": ids}
|
|
182
|
+
line, err := json.Marshal(entry)
|
|
183
|
+
if err != nil {
|
|
184
|
+
fail(err, "marshal")
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
if _, err := f.Write(append(line, '\n')); err != nil {
|
|
188
|
+
fail(err, "write "+path)
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// strictMode returns true when TC_SIDECAR_STRICT=1|true|yes — sidecar write
|
|
193
|
+
// failures become test failures instead of best-effort log lines.
|
|
194
|
+
func strictMode() bool {
|
|
195
|
+
v := strings.ToLower(os.Getenv("TC_SIDECAR_STRICT"))
|
|
196
|
+
return v == "1" || v == "true" || v == "yes"
|
|
197
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TC ID helper for pytest.
|
|
3
|
+
|
|
4
|
+
Link a test to one or more TC IDs using the `@pytest.mark.tc(...)` marker.
|
|
5
|
+
Recorded at collection time, so `@skip`, `@skipif`, `xfail`, and fixture
|
|
6
|
+
failures all map to Bitable status correctly:
|
|
7
|
+
|
|
8
|
+
@pytest.mark.tc("TC-SY-001")
|
|
9
|
+
@pytest.mark.skipif(sys.platform != "linux", reason="requires linux")
|
|
10
|
+
def test_login_success():
|
|
11
|
+
assert ...
|
|
12
|
+
|
|
13
|
+
@pytest.mark.tc("TC-SY-001", "TC-SY-002")
|
|
14
|
+
def test_bulk_import_partial_failure():
|
|
15
|
+
...
|
|
16
|
+
|
|
17
|
+
For TC IDs computed at runtime (property-based tests, ID derived from input),
|
|
18
|
+
the in-body `tc("TC-...")` form is available — it records only when the body
|
|
19
|
+
actually runs, so skipped tests are not covered:
|
|
20
|
+
|
|
21
|
+
def test_dynamic():
|
|
22
|
+
tc(decide_tc_id())
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
Each registration appends one JSONL line to `test/results/tc-map.jsonl`
|
|
26
|
+
(configurable via `TC_SIDECAR` env). gen_report.py joins JUnit XML against
|
|
27
|
+
the sidecar by pytest nodeid (e.g. `tests/test_auth.py::test_login_success`).
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
1. Drop this file at `<project>/test/tc.py` (or anywhere on pythonpath).
|
|
32
|
+
2. In pytest config (`pyproject.toml` or `pytest.ini`), make it importable and
|
|
33
|
+
register it as a plugin:
|
|
34
|
+
|
|
35
|
+
[tool.pytest.ini_options]
|
|
36
|
+
pythonpath = ["test"]
|
|
37
|
+
addopts = ["-p", "tc"]
|
|
38
|
+
|
|
39
|
+
Or in `pytest.ini`:
|
|
40
|
+
|
|
41
|
+
[pytest]
|
|
42
|
+
pythonpath = test
|
|
43
|
+
addopts = -p tc
|
|
44
|
+
|
|
45
|
+
3. In test files: `import pytest` and use `@pytest.mark.tc(...)`. For the
|
|
46
|
+
rare dynamic-ID case, `from tc import tc` and call `tc(...)` in the body.
|
|
47
|
+
Markers and in-body calls compose — gen_report.py merges duplicates.
|
|
48
|
+
|
|
49
|
+
4. The Makefile `test` target truncates the sidecar before each run (so
|
|
50
|
+
deleted tests do not leave stale entries).
|
|
51
|
+
|
|
52
|
+
5. Set `TC_SIDECAR_STRICT=1` in CI so sidecar write failures fail the test
|
|
53
|
+
(otherwise a permission/disk error silently leaves Bitable stale while
|
|
54
|
+
CI passes).
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
from __future__ import annotations
|
|
58
|
+
|
|
59
|
+
import json
|
|
60
|
+
import os
|
|
61
|
+
import threading
|
|
62
|
+
from pathlib import Path
|
|
63
|
+
|
|
64
|
+
import pytest
|
|
65
|
+
|
|
66
|
+
_lock = threading.Lock()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _sidecar_path() -> Path:
|
|
70
|
+
return Path(os.environ.get("TC_SIDECAR", "test/results/tc-map.jsonl"))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _append_entry(test_name: str, ids: list[str]) -> None:
|
|
74
|
+
"""Append one JSONL line for (test_name, ids). Safe under thread parallelism.
|
|
75
|
+
|
|
76
|
+
Best-effort by default (CI sidecar write failures don't fail the test).
|
|
77
|
+
Set TC_SIDECAR_STRICT=1 (recommended in CI) to raise on write failure —
|
|
78
|
+
otherwise a permissions/disk error silently turns linked tests into
|
|
79
|
+
untracked tests and Bitable goes stale while CI passes.
|
|
80
|
+
"""
|
|
81
|
+
if not ids or not test_name:
|
|
82
|
+
return
|
|
83
|
+
path = _sidecar_path()
|
|
84
|
+
line = json.dumps({"test": test_name, "tc_ids": list(ids)}, ensure_ascii=False)
|
|
85
|
+
strict = os.environ.get("TC_SIDECAR_STRICT", "").lower() in ("1", "true", "yes")
|
|
86
|
+
try:
|
|
87
|
+
with _lock:
|
|
88
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
89
|
+
with path.open("a", encoding="utf-8") as f:
|
|
90
|
+
f.write(line + "\n")
|
|
91
|
+
except OSError:
|
|
92
|
+
if strict:
|
|
93
|
+
raise
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _current_test_nodeid() -> str:
|
|
97
|
+
raw = os.environ.get("PYTEST_CURRENT_TEST", "")
|
|
98
|
+
return raw.split(" ")[0] if raw else ""
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def tc(*ids: str) -> None:
|
|
102
|
+
"""Record TC IDs at runtime from inside a test body. Use only when the IDs
|
|
103
|
+
are computed (property-based tests, parameterised inputs that produce
|
|
104
|
+
different TCs per run). For static TC mapping use @pytest.mark.tc(...).
|
|
105
|
+
|
|
106
|
+
Skipped tests / fixture failures don't reach the body, so this form
|
|
107
|
+
cannot register them — the marker form is the answer for those cases.
|
|
108
|
+
"""
|
|
109
|
+
if not ids:
|
|
110
|
+
return
|
|
111
|
+
_append_entry(_current_test_nodeid(), list(ids))
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# ── pytest plugin: marker registration + collection-time sidecar write ──────
|
|
115
|
+
|
|
116
|
+
def pytest_configure(config):
|
|
117
|
+
config.addinivalue_line(
|
|
118
|
+
"markers",
|
|
119
|
+
"tc(*ids): link this test to one or more TC IDs (e.g. @pytest.mark.tc(\"TC-SY-001\")). "
|
|
120
|
+
"Recorded at collection time so @skip / fixture failures still register correctly.",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def pytest_collection_modifyitems(config, items):
|
|
125
|
+
"""Record TC IDs from @pytest.mark.tc markers at collection time.
|
|
126
|
+
This catches @skip / @skipif / setup-failure cases (the test body never
|
|
127
|
+
runs in those, so the in-body tc() call wouldn't be reached)."""
|
|
128
|
+
for item in items:
|
|
129
|
+
ids: list[str] = []
|
|
130
|
+
for marker in item.iter_markers(name="tc"):
|
|
131
|
+
for arg in marker.args:
|
|
132
|
+
if isinstance(arg, str) and arg:
|
|
133
|
+
ids.append(arg)
|
|
134
|
+
if ids:
|
|
135
|
+
_append_entry(item.nodeid, ids)
|