@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,198 @@
|
|
|
1
|
+
// lang-basics-go-check — DETERMINISTIC check for LB-2 (Go ctx propagation), via go/ast.
|
|
2
|
+
//
|
|
3
|
+
// It flags calls to context.Background() / context.TODO() inside functions other than
|
|
4
|
+
// main / init. Outside those entry/bootstrap points, fabricating a fresh root context is the
|
|
5
|
+
// common shape of "I dropped the caller's ctx instead of propagating it" — losing
|
|
6
|
+
// cancellation, deadline, and trace propagation.
|
|
7
|
+
//
|
|
8
|
+
// It resolves the local name bound to the "context" package per file, so an aliased import
|
|
9
|
+
// (`import ctx "context"`) and a dot-import (`. "context"`) are both handled, not evaded.
|
|
10
|
+
//
|
|
11
|
+
// This is a deterministic PROXY, not a full "exported IO function missing ctx param" check
|
|
12
|
+
// (that needs go/types to know which calls are I/O). A clean run does NOT prove every function
|
|
13
|
+
// propagates ctx correctly. Accepted residuals (fixing them would false-positive on legit
|
|
14
|
+
// usage): a closure/goroutine INSIDE main/init that calls context.Background() is not flagged
|
|
15
|
+
// (often a legit background worker rooted at startup); a helper that returns
|
|
16
|
+
// context.Background() and is called elsewhere is not traced; a local identifier shadowing the
|
|
17
|
+
// context alias / dot-imported Background could in principle false-positive (rare).
|
|
18
|
+
//
|
|
19
|
+
// Scope: pass service / handler / repository / client Go files or directories. *_test.go is
|
|
20
|
+
// skipped (directory scan AND explicit file args); vendor/.git/testdata/node_modules dirs are
|
|
21
|
+
// skipped.
|
|
22
|
+
//
|
|
23
|
+
// INVOCATION: scan DIRECTORIES with `go run` — `go run lang-basics-go-check.go ./internal/svc`.
|
|
24
|
+
// `go run` consumes trailing `.go` FILE args as additional package sources, so to scan
|
|
25
|
+
// individual files build a binary first:
|
|
26
|
+
//
|
|
27
|
+
// go build -o /tmp/lbgo lang-basics-go-check.go && /tmp/lbgo a.go b.go
|
|
28
|
+
//
|
|
29
|
+
// Exit: 0 no finding; 1 finding(s); 2 setup/inconclusive (missing path, non-.go file, dir with
|
|
30
|
+
// no non-test .go, no non-test file in scope, walk error, or a parse error — NEVER clean).
|
|
31
|
+
package main
|
|
32
|
+
|
|
33
|
+
import (
|
|
34
|
+
"fmt"
|
|
35
|
+
"go/ast"
|
|
36
|
+
"go/parser"
|
|
37
|
+
"go/token"
|
|
38
|
+
"os"
|
|
39
|
+
"path/filepath"
|
|
40
|
+
"strconv"
|
|
41
|
+
"strings"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
func setupErr(msg string) {
|
|
45
|
+
fmt.Fprintf(os.Stderr, "lang-basics-go: %s — inconclusive\n", msg)
|
|
46
|
+
os.Exit(2)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Exempt by NAME: main / init. (A `func main` declared in a non-main package is exempted too —
|
|
50
|
+
// a documented name-based carve-out; such code is unusual and not worth a package-name check.)
|
|
51
|
+
// Test*/Benchmark*/Example*/Fuzz* are NOT exempted: _test.go files are skipped wholesale at
|
|
52
|
+
// collection, and a production function merely NAMED TestX must still be scanned.
|
|
53
|
+
func isEntryFunc(name string) bool {
|
|
54
|
+
return name == "main" || name == "init"
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
func skipDir(name string) bool {
|
|
58
|
+
switch name {
|
|
59
|
+
case "vendor", ".git", "testdata", "node_modules":
|
|
60
|
+
return true
|
|
61
|
+
}
|
|
62
|
+
return false
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func collect(paths []string) []string {
|
|
66
|
+
var files []string
|
|
67
|
+
for _, p := range paths {
|
|
68
|
+
info, err := os.Stat(p)
|
|
69
|
+
if err != nil {
|
|
70
|
+
setupErr("path not found: " + p)
|
|
71
|
+
}
|
|
72
|
+
if info.IsDir() {
|
|
73
|
+
n := 0
|
|
74
|
+
werr := filepath.Walk(p, func(path string, fi os.FileInfo, e error) error {
|
|
75
|
+
if e != nil {
|
|
76
|
+
return e
|
|
77
|
+
}
|
|
78
|
+
if fi.IsDir() {
|
|
79
|
+
if skipDir(fi.Name()) {
|
|
80
|
+
return filepath.SkipDir
|
|
81
|
+
}
|
|
82
|
+
return nil
|
|
83
|
+
}
|
|
84
|
+
if strings.HasSuffix(path, ".go") && !strings.HasSuffix(path, "_test.go") {
|
|
85
|
+
files = append(files, path)
|
|
86
|
+
n++
|
|
87
|
+
}
|
|
88
|
+
return nil
|
|
89
|
+
})
|
|
90
|
+
if werr != nil {
|
|
91
|
+
setupErr("walk error under " + p + ": " + werr.Error())
|
|
92
|
+
}
|
|
93
|
+
if n == 0 {
|
|
94
|
+
setupErr("no non-test .go files under directory: " + p)
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
if !strings.HasSuffix(p, ".go") {
|
|
98
|
+
setupErr("not a .go file: " + p)
|
|
99
|
+
}
|
|
100
|
+
if strings.HasSuffix(p, "_test.go") {
|
|
101
|
+
continue
|
|
102
|
+
}
|
|
103
|
+
files = append(files, p)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if len(files) == 0 {
|
|
107
|
+
setupErr("no non-test .go files in scope")
|
|
108
|
+
}
|
|
109
|
+
return files
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// contextNames returns the local identifiers that refer to the "context" package in this file,
|
|
113
|
+
// plus whether it was dot-imported.
|
|
114
|
+
func contextNames(node *ast.File) (map[string]bool, bool) {
|
|
115
|
+
names := map[string]bool{}
|
|
116
|
+
dot := false
|
|
117
|
+
for _, imp := range node.Imports {
|
|
118
|
+
// Unquote handles both interpreted ("context") and raw (`context`) import-path strings.
|
|
119
|
+
path, err := strconv.Unquote(imp.Path.Value)
|
|
120
|
+
if err != nil || path != "context" {
|
|
121
|
+
continue
|
|
122
|
+
}
|
|
123
|
+
switch {
|
|
124
|
+
case imp.Name == nil:
|
|
125
|
+
names["context"] = true
|
|
126
|
+
case imp.Name.Name == ".":
|
|
127
|
+
dot = true
|
|
128
|
+
case imp.Name.Name != "_":
|
|
129
|
+
names[imp.Name.Name] = true
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return names, dot
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
func main() {
|
|
136
|
+
args := os.Args[1:]
|
|
137
|
+
if len(args) == 0 {
|
|
138
|
+
fmt.Fprintln(os.Stderr, "usage: go build -o /tmp/lbgo lang-basics-go-check.go && /tmp/lbgo <path> [...] (or: go run lang-basics-go-check.go <DIR>)")
|
|
139
|
+
os.Exit(2)
|
|
140
|
+
}
|
|
141
|
+
files := collect(args)
|
|
142
|
+
fset := token.NewFileSet()
|
|
143
|
+
hits := 0
|
|
144
|
+
for _, f := range files {
|
|
145
|
+
node, err := parser.ParseFile(fset, f, nil, 0)
|
|
146
|
+
if err != nil {
|
|
147
|
+
setupErr(fmt.Sprintf("parse error %s: %v", f, err))
|
|
148
|
+
}
|
|
149
|
+
ctxNames, dot := contextNames(node)
|
|
150
|
+
if len(ctxNames) == 0 && !dot {
|
|
151
|
+
continue // file does not import context; it cannot call context.Background/TODO
|
|
152
|
+
}
|
|
153
|
+
flag := func(call *ast.CallExpr, where string) {
|
|
154
|
+
label := ""
|
|
155
|
+
switch fe := call.Fun.(type) {
|
|
156
|
+
case *ast.SelectorExpr:
|
|
157
|
+
if pkg, ok := fe.X.(*ast.Ident); ok && ctxNames[pkg.Name] &&
|
|
158
|
+
(fe.Sel.Name == "Background" || fe.Sel.Name == "TODO") {
|
|
159
|
+
label = "context." + fe.Sel.Name
|
|
160
|
+
}
|
|
161
|
+
case *ast.Ident:
|
|
162
|
+
if dot && (fe.Name == "Background" || fe.Name == "TODO") {
|
|
163
|
+
label = "context." + fe.Name + " (dot-import)"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if label != "" {
|
|
167
|
+
pos := fset.Position(call.Pos())
|
|
168
|
+
fmt.Printf("lang-basics-go smell: %s:%d: %s() in %s — propagate the caller's ctx, do not fabricate a root ctx\n",
|
|
169
|
+
f, pos.Line, label, where)
|
|
170
|
+
hits = 1
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
scan := func(root ast.Node, where string) {
|
|
174
|
+
ast.Inspect(root, func(m ast.Node) bool {
|
|
175
|
+
if call, ok := m.(*ast.CallExpr); ok {
|
|
176
|
+
flag(call, where)
|
|
177
|
+
}
|
|
178
|
+
return true
|
|
179
|
+
})
|
|
180
|
+
}
|
|
181
|
+
// Scan non-entry function bodies AND package-level declarations (var/const
|
|
182
|
+
// initializers have no enclosing function — `var bg = context.Background()`).
|
|
183
|
+
// main/init bodies are skipped (accepted residual: a closure there is often a legit
|
|
184
|
+
// background worker).
|
|
185
|
+
for _, decl := range node.Decls {
|
|
186
|
+
switch d := decl.(type) {
|
|
187
|
+
case *ast.FuncDecl:
|
|
188
|
+
if d.Body == nil || isEntryFunc(d.Name.Name) {
|
|
189
|
+
continue
|
|
190
|
+
}
|
|
191
|
+
scan(d.Body, d.Name.Name)
|
|
192
|
+
case *ast.GenDecl:
|
|
193
|
+
scan(d, "<package-level>")
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
os.Exit(hits)
|
|
198
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Test harness for lang-basics-go-check.go — builds the checker, then proves it flags
|
|
3
|
+
# context.Background()/TODO() outside entry funcs, exempts ONLY main/init (a production func
|
|
4
|
+
# named Test* is NOT exempt), resolves alias/dot imports, skips _test.go, and is inconclusive
|
|
5
|
+
# (not clean) on bad scope.
|
|
6
|
+
# Run: bash lang-basics-go-check.test.sh (honors $TMPDIR; needs the Go toolchain)
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
10
|
+
src="$here/lang-basics-go-check.go"
|
|
11
|
+
command -v go >/dev/null 2>&1 || { echo "go toolchain required" >&2; exit 2; }
|
|
12
|
+
base="${TMPDIR:-/tmp}"
|
|
13
|
+
tmp="$(mktemp -d "${base%/}/lbgo.XXXXXX")"
|
|
14
|
+
trap 'rm -rf "$tmp"' EXIT
|
|
15
|
+
|
|
16
|
+
bin="$tmp/lbgo"
|
|
17
|
+
go build -o "$bin" "$src"
|
|
18
|
+
|
|
19
|
+
pass=0 fail=0
|
|
20
|
+
assert_hit() { # <desc> <expect-substr> <path...>
|
|
21
|
+
local desc="$1" want="$2"; shift 2
|
|
22
|
+
set +e; local out rc; out="$("$bin" "$@" 2>/dev/null)"; rc=$?; set -e
|
|
23
|
+
if [ "$rc" = 1 ] && printf '%s' "$out" | grep -qF "$want"; then
|
|
24
|
+
pass=$((pass+1)); echo "ok - $desc"
|
|
25
|
+
else
|
|
26
|
+
fail=$((fail+1)); echo "FAIL - $desc (rc=$rc, want '$want', out='$out')"
|
|
27
|
+
fi
|
|
28
|
+
}
|
|
29
|
+
assert_exit() { # <desc> <expected-exit> <path...>
|
|
30
|
+
local desc="$1" want="$2"; shift 2
|
|
31
|
+
set +e; "$bin" "$@" >/dev/null 2>&1; local rc=$?; set -e
|
|
32
|
+
if [ "$rc" = "$want" ]; then pass=$((pass+1)); echo "ok - $desc"; else fail=$((fail+1)); echo "FAIL - $desc (want exit $want, got $rc)"; fi
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
mkdir -p "$tmp/svc" "$tmp/tonly"
|
|
36
|
+
cat > "$tmp/svc/positive.go" <<'EOF'
|
|
37
|
+
package svc
|
|
38
|
+
import "context"
|
|
39
|
+
func Handle() error { ctx := context.Background(); return do(ctx) }
|
|
40
|
+
func Repo() { _ = context.TODO() }
|
|
41
|
+
EOF
|
|
42
|
+
cat > "$tmp/svc/clean.go" <<'EOF'
|
|
43
|
+
package svc
|
|
44
|
+
import "context"
|
|
45
|
+
func Handle(ctx context.Context) error { return do(ctx) }
|
|
46
|
+
func main() { _ = context.Background() }
|
|
47
|
+
func init() { _ = context.TODO() }
|
|
48
|
+
EOF
|
|
49
|
+
cat > "$tmp/tonly/x_test.go" <<'EOF'
|
|
50
|
+
package svc
|
|
51
|
+
import "context"
|
|
52
|
+
func TestX() { _ = context.Background() }
|
|
53
|
+
EOF
|
|
54
|
+
mkdir -p "$tmp/extra"
|
|
55
|
+
cat > "$tmp/extra/alias.go" <<'EOF'
|
|
56
|
+
package svc
|
|
57
|
+
import ctx "context"
|
|
58
|
+
func Fetch() { _ = ctx.Background() }
|
|
59
|
+
EOF
|
|
60
|
+
cat > "$tmp/extra/dot.go" <<'EOF'
|
|
61
|
+
package svc2
|
|
62
|
+
import . "context"
|
|
63
|
+
func Fetch2() { _ = Background() }
|
|
64
|
+
EOF
|
|
65
|
+
cat > "$tmp/extra/prodtest.go" <<'EOF'
|
|
66
|
+
package svc3
|
|
67
|
+
import "context"
|
|
68
|
+
func TestConnection() { _ = context.Background() }
|
|
69
|
+
EOF
|
|
70
|
+
cat > "$tmp/extra/pkglevel.go" <<'EOF'
|
|
71
|
+
package svc4
|
|
72
|
+
import "context"
|
|
73
|
+
var bg = context.Background()
|
|
74
|
+
EOF
|
|
75
|
+
cat > "$tmp/extra/rawimport.go" <<'EOF'
|
|
76
|
+
package svc5
|
|
77
|
+
import `context`
|
|
78
|
+
func Fetch5() { _ = context.Background() }
|
|
79
|
+
EOF
|
|
80
|
+
# vendor-skip regression: a Background() inside vendor/ must NOT be reported on a parent scan
|
|
81
|
+
mkdir -p "$tmp/vend/vendor"
|
|
82
|
+
cat > "$tmp/vend/svc.go" <<'EOF'
|
|
83
|
+
package vend
|
|
84
|
+
import "context"
|
|
85
|
+
func Clean(ctx context.Context) { _ = ctx }
|
|
86
|
+
EOF
|
|
87
|
+
cat > "$tmp/vend/vendor/bad.go" <<'EOF'
|
|
88
|
+
package vendored
|
|
89
|
+
import "context"
|
|
90
|
+
func Bad() { _ = context.Background() }
|
|
91
|
+
EOF
|
|
92
|
+
|
|
93
|
+
assert_hit "Background()/TODO() in non-entry funcs flagged" "context.Background()" "$tmp/svc/positive.go"
|
|
94
|
+
assert_hit "aliased import (import ctx \"context\") caught" "context.Background()" "$tmp/extra/alias.go"
|
|
95
|
+
assert_hit "dot-import Background() caught" "dot-import" "$tmp/extra/dot.go"
|
|
96
|
+
assert_hit "production func named Test* NOT exempted" "context.Background()" "$tmp/extra/prodtest.go"
|
|
97
|
+
assert_hit "package-level var = context.Background() caught" "package-level" "$tmp/extra/pkglevel.go"
|
|
98
|
+
assert_hit "raw-string import path (backticks) caught" "context.Background()" "$tmp/extra/rawimport.go"
|
|
99
|
+
assert_exit "vendor/ Background not reported on parent scan" 0 "$tmp/vend"
|
|
100
|
+
assert_hit "TODO() flagged too" "context.TODO()" "$tmp/svc/positive.go"
|
|
101
|
+
assert_exit "dir scan: positive present -> 1" 1 "$tmp/svc"
|
|
102
|
+
assert_exit "clean (ctx param; main/init exempt) -> 0" 0 "$tmp/svc/clean.go"
|
|
103
|
+
assert_exit "dir with only _test.go -> inconclusive 2" 2 "$tmp/tonly"
|
|
104
|
+
assert_exit "explicit _test.go file arg -> (2)" 2 "$tmp/tonly/x_test.go"
|
|
105
|
+
assert_exit "missing path -> setup (2)" 2 "$tmp/svc/nope.go"
|
|
106
|
+
|
|
107
|
+
echo "----"
|
|
108
|
+
echo "passed=$pass failed=$fail"
|
|
109
|
+
[ "$fail" -eq 0 ]
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Executable spec for the mutation backup/restore recipe in
|
|
3
|
+
# references/run-killing-mutation-walk.md (Guarded Backup Recipe).
|
|
4
|
+
#
|
|
5
|
+
# The recipe is prose an agent follows by hand, so this file carries the steps
|
|
6
|
+
# verbatim and asserts each property the prose promises. It exists because the
|
|
7
|
+
# prose accumulated nineteen review rounds of real defects — symlinks, name
|
|
8
|
+
# collisions, quoting, failed copies, cleanup ordering — and narrative scratch
|
|
9
|
+
# checks proved them once without leaving anything that fails on regression.
|
|
10
|
+
#
|
|
11
|
+
# Every assertion here has a stated killing mutation in the deep self-audit
|
|
12
|
+
# recorded alongside this change; changing the recipe's guarantees must turn a
|
|
13
|
+
# case red.
|
|
14
|
+
set -uo pipefail
|
|
15
|
+
|
|
16
|
+
# Every case runs in `( cd "$t" || exit 1; ... )`. The `|| exit` is load-bearing:
|
|
17
|
+
# without it a failed cd leaves the subshell running in the repository root, where
|
|
18
|
+
# the fixture writes land — that is how an earlier run of this very file left six
|
|
19
|
+
# stray files at the repo root and got them committed.
|
|
20
|
+
|
|
21
|
+
# Counting is done by parsing markers off stdout, not by shared state: every case
|
|
22
|
+
# runs in a subshell, and neither shell variables (invisible to the parent) nor a
|
|
23
|
+
# temp tally directory (which earlier vanished mid-run and silently zeroed the
|
|
24
|
+
# count while the suite still exited 0) survive that boundary reliably.
|
|
25
|
+
check() { if [ "$2" = "$3" ]; then echo "PASS $1"; else echo "FAIL $1 (got '$2', want '$3')"; fi; }
|
|
26
|
+
|
|
27
|
+
# Probe the stat dialect explicitly. A BSD-first `stat -f ... || stat -c ...` does
|
|
28
|
+
# NOT fall back on GNU: there `-f` means --file-system and SUCCEEDS with unrelated
|
|
29
|
+
# output, so the || branch never runs and the assertion compares garbage.
|
|
30
|
+
if stat --version >/dev/null 2>&1; then
|
|
31
|
+
stat_mode() { stat -c '%a' "$1"; }; stat_mtime() { stat -c '%Y' "$1"; }
|
|
32
|
+
else
|
|
33
|
+
stat_mode() { stat -f '%Lp' "$1"; }; stat_mtime() { stat -f '%m' "$1"; }
|
|
34
|
+
fi
|
|
35
|
+
have_git() { command -v git >/dev/null 2>&1; }
|
|
36
|
+
|
|
37
|
+
# --- the recipe, verbatim -----------------------------------------------------
|
|
38
|
+
# backup: bak=$(mktemp -d); mkdir -p "$bak/$(dirname "$f")" && cp -a -- "$f" "$bak/$f" || exit
|
|
39
|
+
# restore: cp -a -- "$bak/$f" "$f" || exit
|
|
40
|
+
# cleanup: rm -rf "$bak" ONLY after every restore succeeded
|
|
41
|
+
# The rule promises the backup root sits OUTSIDE the worktree; mktemp honours
|
|
42
|
+
# TMPDIR, so that promise has to be checked rather than assumed.
|
|
43
|
+
backup_root_outside_worktree() { # backup_root_outside_worktree <bak>
|
|
44
|
+
# Compare against the working directory, not `git rev-parse`: a minimal CI
|
|
45
|
+
# image may have no git, and the original version treated that as "allow",
|
|
46
|
+
# silently disabling the check in exactly the environment it matters in.
|
|
47
|
+
local base bak
|
|
48
|
+
base=$(pwd -P) || return 1
|
|
49
|
+
bak=$(cd -- "$1" && pwd -P) || return 1
|
|
50
|
+
case "$bak/" in "$base"/*) return 1 ;; esac
|
|
51
|
+
return 0
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
backup_one() { # backup_one <bak> <repo-relative path>
|
|
55
|
+
backup_root_outside_worktree "$1" || return 1
|
|
56
|
+
# `--` on dirname too: a first component like -fixtures/ is a valid path but
|
|
57
|
+
# parses as an option without it.
|
|
58
|
+
mkdir -p "$1/$(dirname -- "$2")" && cp -a -- "$2" "$1/$2"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# The documented sequence: restore every target, and remove the backup root ONLY
|
|
62
|
+
# when all of them succeeded — cleanup after a failed restore destroys the last
|
|
63
|
+
# copy while the mutation is still live.
|
|
64
|
+
restore_all_and_cleanup() { # restore_all_and_cleanup <bak> <path>...
|
|
65
|
+
local bak="$1"; shift
|
|
66
|
+
local rc=0 one
|
|
67
|
+
for one in "$@"; do restore_one "$bak" "$one" || rc=1; done
|
|
68
|
+
[ "$rc" -eq 0 ] && rm -rf "$bak"
|
|
69
|
+
return "$rc"
|
|
70
|
+
}
|
|
71
|
+
restore_one() { # restore_one <bak> <path>
|
|
72
|
+
cp -a -- "$1/$2" "$2"
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
new_repo() {
|
|
76
|
+
local d
|
|
77
|
+
d=$(mktemp -d)
|
|
78
|
+
git -C "$d" init -q
|
|
79
|
+
git -C "$d" config user.email t@example.invalid
|
|
80
|
+
git -C "$d" config user.name t
|
|
81
|
+
printf '%s' "$d"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
all_cases() {
|
|
85
|
+
# 1. round trip restores content byte-for-byte
|
|
86
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
87
|
+
( cd "$t" || exit 1; printf 'original\n' > a.txt
|
|
88
|
+
backup_one "$bak" a.txt
|
|
89
|
+
printf 'MUTATED\n' > a.txt
|
|
90
|
+
restore_one "$bak" a.txt
|
|
91
|
+
check "content round trip" "$(cat a.txt)" "original" )
|
|
92
|
+
rm -rf "$t" "$bak"
|
|
93
|
+
|
|
94
|
+
# 2. metadata survives. Mode alone does NOT discriminate `cp -a` from plain `cp`
|
|
95
|
+
# here (a plain copy of a 755 file lands 755 after umask), so this asserts the
|
|
96
|
+
# modification time, which a plain copy resets to now. Both are checked: the
|
|
97
|
+
# mode assertion guards against an outright chmod, the mtime one is what fails
|
|
98
|
+
# if someone drops `-a`.
|
|
99
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
100
|
+
( cd "$t" || exit 1; printf 'x\n' > m.sh; chmod 755 m.sh; touch -t 202001011200 m.sh
|
|
101
|
+
want_mtime=$(stat_mtime m.sh)
|
|
102
|
+
backup_one "$bak" m.sh
|
|
103
|
+
printf 'MUTATED\n' > m.sh; chmod 600 m.sh
|
|
104
|
+
restore_one "$bak" m.sh
|
|
105
|
+
check "mode preserved" "$(stat_mode m.sh)" "755"
|
|
106
|
+
check "mtime preserved" "$(stat_mtime m.sh)" "$want_mtime" )
|
|
107
|
+
rm -rf "$t" "$bak"
|
|
108
|
+
|
|
109
|
+
# 3. same basename in different directories must not collide
|
|
110
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
111
|
+
( cd "$t" || exit 1; mkdir -p src tests
|
|
112
|
+
printf 'SRC\n' > src/config.py; printf 'TESTS\n' > tests/config.py
|
|
113
|
+
backup_one "$bak" src/config.py; backup_one "$bak" tests/config.py
|
|
114
|
+
printf 'MUTATED\n' > src/config.py; printf 'MUTATED\n' > tests/config.py
|
|
115
|
+
restore_one "$bak" src/config.py; restore_one "$bak" tests/config.py
|
|
116
|
+
check "no collision (src)" "$(cat src/config.py)" "SRC"
|
|
117
|
+
check "no collision (tests)" "$(cat tests/config.py)" "TESTS" )
|
|
118
|
+
rm -rf "$t" "$bak"
|
|
119
|
+
|
|
120
|
+
# 4. paths with spaces and glob characters survive quoting
|
|
121
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
122
|
+
( cd "$t" || exit 1; mkdir -p "tests/cases"
|
|
123
|
+
f='tests/cases/new behavior [v2].py'
|
|
124
|
+
printf 'spaced\n' > "$f"
|
|
125
|
+
backup_one "$bak" "$f"
|
|
126
|
+
printf 'MUTATED\n' > "$f"
|
|
127
|
+
restore_one "$bak" "$f"
|
|
128
|
+
check "quoted path round trip" "$(cat "$f")" "spaced" )
|
|
129
|
+
rm -rf "$t" "$bak"
|
|
130
|
+
|
|
131
|
+
# 6. git state is untouched: HEAD, status (including another line's staged
|
|
132
|
+
# entry and an untracked file), and object count all unchanged
|
|
133
|
+
# Skipped where git is unavailable: a minimal CI image may not ship it, and a
|
|
134
|
+
# missing tool must be reported, not silently counted as a failure.
|
|
135
|
+
if have_git; then
|
|
136
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
137
|
+
( cd "$t" || exit 1; printf 'base\n' > tracked.txt; git add -A >/dev/null; git commit -qm init
|
|
138
|
+
printf 'uncommitted\n' > tracked.txt
|
|
139
|
+
printf 'staged elsewhere\n' > other.txt; git add other.txt
|
|
140
|
+
printf 'untracked\n' > loose.txt
|
|
141
|
+
before_status=$(git status --porcelain | sort); before_head=$(git rev-parse HEAD)
|
|
142
|
+
# Inventory the object database itself: rev-list --all --count only counts
|
|
143
|
+
# reachable commits, so a stray blob or a create-then-reset commit leaves
|
|
144
|
+
# objects on disk while that number is unchanged.
|
|
145
|
+
before_objects=$(find .git/objects -type f | sort)
|
|
146
|
+
backup_one "$bak" tracked.txt
|
|
147
|
+
printf 'MUTATED\n' > tracked.txt
|
|
148
|
+
restore_one "$bak" tracked.txt
|
|
149
|
+
check "git status untouched" "$(git status --porcelain | sort)" "$before_status"
|
|
150
|
+
check "git HEAD untouched" "$(git rev-parse HEAD)" "$before_head"
|
|
151
|
+
check "git objects untouched" "$(find .git/objects -type f | sort)" "$before_objects" )
|
|
152
|
+
rm -rf "$t" "$bak"
|
|
153
|
+
|
|
154
|
+
else
|
|
155
|
+
echo 'SKIP git-state case (git unavailable)'
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# 7. backup failure is detectable BEFORE mutating (fail-fast precondition)
|
|
159
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
160
|
+
( cd "$t" || exit 1
|
|
161
|
+
if backup_one "$bak" does/not/exist.txt 2>/dev/null; then
|
|
162
|
+
check "missing source backup fails" "succeeded" "failed"
|
|
163
|
+
else
|
|
164
|
+
check "missing source backup fails" "failed" "failed"
|
|
165
|
+
fi )
|
|
166
|
+
rm -rf "$t" "$bak"
|
|
167
|
+
|
|
168
|
+
# 8. restore failure is detectable, so cleanup can be gated on it
|
|
169
|
+
t=$(new_repo); bak=$(mktemp -d)
|
|
170
|
+
( cd "$t" || exit 1; printf 'x\n' > r.txt
|
|
171
|
+
backup_one "$bak" r.txt
|
|
172
|
+
rm -rf "$bak" # simulate a lost/failed backup
|
|
173
|
+
if restore_one "$bak" r.txt 2>/dev/null; then
|
|
174
|
+
check "restore failure detected" "succeeded" "failed"
|
|
175
|
+
else
|
|
176
|
+
check "restore failure detected" "failed" "failed"
|
|
177
|
+
fi )
|
|
178
|
+
rm -rf "$t" "$bak"
|
|
179
|
+
|
|
180
|
+
# 10. cleanup is gated on restore success. Failure is injected by making the
|
|
181
|
+
# target read-only, which makes cp fail (a read-only *directory* does not —
|
|
182
|
+
# overwriting an existing file needs no directory write permission).
|
|
183
|
+
t=$(new_repo)
|
|
184
|
+
( cd "$t" || exit 1; bak=$(mktemp -d)
|
|
185
|
+
mkdir sub; printf 'keep\n' > sub/k.txt; backup_one "$bak" sub/k.txt
|
|
186
|
+
# Permission-independent failure: replace the parent directory with a regular
|
|
187
|
+
# file, so the restore fails with ENOTDIR. A read-only target would not do —
|
|
188
|
+
# root can overwrite it, which would make this case fail on a root-run lane.
|
|
189
|
+
rm -rf sub; printf 'blocker\n' > sub
|
|
190
|
+
restore_all_and_cleanup "$bak" sub/k.txt 2>/dev/null \
|
|
191
|
+
&& check "failed restore reported" succeeded failed || check "failed restore reported" failed failed
|
|
192
|
+
check "backup kept after failed restore" "$([ -d "$bak" ] && echo kept || echo deleted)" kept
|
|
193
|
+
rm -rf "$bak" )
|
|
194
|
+
rm -rf "$t"
|
|
195
|
+
|
|
196
|
+
# 11. the success path does remove the backup root
|
|
197
|
+
t=$(new_repo)
|
|
198
|
+
( cd "$t" || exit 1; bak=$(mktemp -d)
|
|
199
|
+
printf 'ok\n' > g.txt; backup_one "$bak" g.txt
|
|
200
|
+
printf 'MUTATED\n' > g.txt
|
|
201
|
+
restore_all_and_cleanup "$bak" g.txt
|
|
202
|
+
check "restored content" "$(cat g.txt)" "ok"
|
|
203
|
+
check "backup removed on success" "$([ -d "$bak" ] && echo kept || echo deleted)" deleted )
|
|
204
|
+
rm -rf "$t"
|
|
205
|
+
|
|
206
|
+
# 12. a backup root inside the worktree is refused (TMPDIR pointing into the repo)
|
|
207
|
+
t=$(new_repo)
|
|
208
|
+
( cd "$t" || exit 1; printf 'x\n' > in.txt
|
|
209
|
+
inside=$(mktemp -d "$t/inside.XXXXXX")
|
|
210
|
+
backup_one "$inside" in.txt 2>/dev/null \
|
|
211
|
+
&& check "in-worktree backup root refused" accepted refused || check "in-worktree backup root refused" refused refused
|
|
212
|
+
outside=$(mktemp -d)
|
|
213
|
+
backup_one "$outside" in.txt 2>/dev/null \
|
|
214
|
+
&& check "outside backup root accepted" accepted accepted || check "outside backup root accepted" refused accepted
|
|
215
|
+
rm -rf "$outside" )
|
|
216
|
+
rm -rf "$t"
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
out=$(all_cases 2>&1)
|
|
221
|
+
printf '%s\n' "$out"
|
|
222
|
+
pass=$(printf '%s\n' "$out" | grep -c '^PASS ')
|
|
223
|
+
fail=$(printf '%s\n' "$out" | grep -c '^FAIL ')
|
|
224
|
+
echo "mutation-backup-recipe: ${pass} passed, ${fail} failed"
|
|
225
|
+
# Partial execution is a failure, not a pass. An empty-run check alone is not
|
|
226
|
+
# enough: a case that aborts before its check (a failed cd, setup, or copy) emits
|
|
227
|
+
# no marker, and the remaining PASS markers would still carry the suite green.
|
|
228
|
+
# Pin the exact count — raise it deliberately when adding a case, which is the
|
|
229
|
+
# point: the bump is where you confirm the new assertion actually ran.
|
|
230
|
+
expected=17
|
|
231
|
+
have_git || expected=$((expected - 3))
|
|
232
|
+
total=$((pass + fail))
|
|
233
|
+
if [ "$total" -ne "$expected" ]; then
|
|
234
|
+
echo "FAIL: expected $expected assertions, saw $total (a case aborted before asserting, or the count needs updating)" >&2
|
|
235
|
+
exit 1
|
|
236
|
+
fi
|
|
237
|
+
[ "$fail" -eq 0 ]
|