@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,64 @@
|
|
|
1
|
+
# Vendored Contract Drift Checklist
|
|
2
|
+
|
|
3
|
+
Use this table before reporting a vendored external contract or conformance drift gate result.
|
|
4
|
+
|
|
5
|
+
**Scope (what counts as an external contract/conformance artifact):** API/schema/protobuf/wire-format definitions, envelope/rule catalogs, validators, or conformance fixtures vendored from an upstream source. Exclude routine dependency lockfile or digest-pin checks only when they do not vendor that content; ambiguous vendored upstream artifacts default to in-scope.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
|
|
9
|
+
1. Enumerate scope from authoritative committed catalog, local hash/digest manifest, CI config, build/provisioning scripts, and pinned tracked-file lists; lockfiles are enumeration input only after an external contract/conformance artifact is already in scope, never a standalone trigger. A local hash/digest manifest is enough to enumerate enrolled files for a self-contained local-drift layout, but it cannot prove omitted artifacts do not exist unless paired with an exhaustive root scan whose extra/missing set is empty. If authoritative non-manifest sources prove no contract/conformance artifact and no upstream marker, mark the gate `inapplicable` with evidence pointers. Heuristic or bounded artifact-like searches may find extra candidates but never prove absence. If a catalog/pin/source marker exists but cannot be resolved, mark it `inconclusive/non-pass`.
|
|
10
|
+
2. Fill an applicability ledger in the format `row | status | evidence pointer`; every row below must be `pass`, `inconclusive`, `fail`, or `inapplicable` with evidence (`fail` records a defective gate, e.g. a RED mutation that does not trigger the expected failure). An omitted applicable row is non-pass.
|
|
11
|
+
3. Aggregate only from the ledger: emit an explicit `pass`, `non-pass`, or `inapplicable` verdict first; scope labels are qualifiers, never standalone results. A row may be green only when its clean pass and required RED failure evidence are both recorded. When a vendored copy exists, `local verify` and `root enumeration` must be green, while `local verify scope` must be green or inapplicable with evidence that no sibling/source path is referenced; every other applicable row must also be green. `Inconclusive` is not green; one passing row is never the overall result. An aggregate with no applicable rows is non-pass unless Step 1 proved top-level inapplicability from authoritative absence evidence. If upstream rows are inapplicable, the aggregate must include both `local-drift only` and `upstream freshness unverified`. If upstream rows are applicable but inconclusive, the aggregate must say `upstream authenticity inconclusive` and the gate is non-pass. An unlabeled or comprehensive green is non-pass.
|
|
12
|
+
4. For a self-contained local-drift verify with no upstream pin, no wrapper, and no semantic layer, use a short ledger: scope, local `verify`, local `verify` scope, root enumeration, semantic layer, recipe integrity, wrapper identity, sync/setup boundary, and RED cleanup. Mark upstream compare and pin authority inapplicable by construction with evidence. The sync/setup boundary is NOT inapplicable by construction — it still applies to every verify/review run (assert the run did not fetch/install/exec-beyond-the-canonical-script/delete); only its *separate sync gate* sub-part is inapplicable when no sync gate ran.
|
|
13
|
+
|
|
14
|
+
## Row guidance
|
|
15
|
+
|
|
16
|
+
- local `verify`: clean pass plus RED mutation failure;
|
|
17
|
+
- local `verify` scope: if the recipe references a sibling/source path, run `verify` with that path deliberately absent and record that it still passes on the vendored copy; if it fails because the source path is missing, mark this row non-pass and route as a fail-closed gate defect, not drift. If no sibling/source path is referenced, mark this sub-check inapplicable with evidence. A pass proves local copy-vs-manifest drift only, not upstream authenticity;
|
|
18
|
+
- root enumeration: derive candidate roots from an authoritative committed catalog, local hash/digest manifest, or pinned upstream tracked-file list; record included, excluded, missing, extra, and outside artifact-like path dispositions. A local manifest proves enrolled-file consistency only; if it is the only source, corroborate completeness from an independent committed catalog or pinned tracked-file list, OR from an exhaustive root scan whose extra/missing set is empty; otherwise mark completeness inconclusive/non-pass;
|
|
19
|
+
- semantic layer: inspect artifacts under confirmed contract roots or catalog membership; record valid+invalid evidence for semantic artifacts, or per-artifact no-semantic notes that cite the artifact format/parser checked and why no schema/semantics apply;
|
|
20
|
+
- upstream compare, when an actionable committed upstream pin exists: provision the pinned upstream ref/tag, never a copied local tree; prove clean pass, RED vendored-copy mutation failure, RED changed-upstream-ref failure, and RED compare-set membership failure;
|
|
21
|
+
- pin authority, when an actionable committed upstream pin exists: use a signed upstream tag, upstream-hosted protected ref that the consumer cannot write, or a distinct-owner second source; otherwise mark upstream authenticity inconclusive;
|
|
22
|
+
- recipe integrity: first determine from authoritative committed metadata whether a distinct canonical producer exists; if producer existence is unresolved, mark this row inconclusive/non-pass. When a distinct canonical producer exists, cite already-committed or out-of-band producer provenance proving `LC_ALL=C` byte-stable ordering, self-containment, and exit semantics; do not fetch during verify/review to establish it. `Local recipe only` may pass only when authoritative metadata explicitly states no external canonical producer exists, plus local `LC_ALL=C` byte-stable ordering, self-containment, exit semantics, digest clean pass, and RED script mutation failure; label the row `pass (local-recipe-only)` and do not claim cross-consumer recipe provenance. If provenance needs a fetch, route it through the separate sync gate;
|
|
23
|
+
- wrapper integrity: prove the resolved verify entrypoint from traced invocation, resolved-command evidence, or static review evidence showing a single committed entrypoint with no CI/build wrapper indirection, then compare that entrypoint digest to the vendored canonical script digest. If entrypoint identity is unproven, mark this row inconclusive/non-pass. If the invoked entrypoint differs, treat a wrapper as present; prove wrapper digest clean+RED, prove it is network-free, exec-free (beyond invoking the canonical script), delete-free, and install-free, and prove it does not override canonical locale, `PATH`, `IFS`, shell options, or exit handling. Any fetch/toolchain bootstrap must route through the separate sync gate, never the verify-invoked wrapper;
|
|
24
|
+
- sync/setup boundary (always applies to a verify/review run; only the separate-sync-gate sub-part is inapplicable when no sync gate ran): this verify/review procedure never authorizes fetch, install, toolchain exec, or deletes — assert that the run did none of these even on the local-only path. `verify`, recipe, and wrapper rows stay network-free, exec-free except for invoking the canonical script, and delete-free. A separate sync gate requires explicit human authorization for that run and must carry its own allowlist, out-of-band digest/signature, distinct-owner/protected provenance, no-unexpected-files check, and clean+RED evidence outside this verify checklist.
|
|
25
|
+
- Cross-language conformance/parity fixtures: every language's suite loads the ONE shared external single-source fixture set (the vendored/pinned artifact), never per-language inline literals — a language's own literal can silently encode the very drift the suite exists to catch (a stale test using the wrong value as its own example passes against itself). The runner fails closed on fixture-schema mismatch in BOTH directions: unknown/extra key = untested upstream addition, missing key = silent coverage loss; neither is skipped or defaulted.
|
|
26
|
+
- RED cleanup: confirm the audited working tree is clean before any RED step, perform RED mutations only in a disposable copy or scratch checkout, then confirm both scratch cleanup and audited working tree cleanliness before recording the aggregate result.
|
|
27
|
+
|
|
28
|
+
## Ledger
|
|
29
|
+
|
|
30
|
+
Aggregate rule: every result starts with `pass`, `non-pass`, or `inapplicable`; scope labels are qualifiers only. Green requires the local-drift row to be applicable+green and every other applicable row to be green. Any applicable `inconclusive`, `fail`, or non-pass row makes the overall gate non-pass. Zero applicable rows is non-pass unless Step 1 proved top-level inapplicability from authoritative absence evidence; then report the gate as `inapplicable`. If upstream compare and pin authority are inapplicable, the result must include `local-drift only; upstream freshness unverified`. If upstream rows are applicable but inconclusive, the result must include `upstream authenticity inconclusive` and is non-pass. An unlabeled or comprehensive green is non-pass.
|
|
31
|
+
|
|
32
|
+
| row | status | evidence pointer |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| scope | pass / inconclusive / inapplicable | committed catalog or pinned tracked-file list; local digest manifest needs exhaustive root scan with empty extra/missing set |
|
|
35
|
+
| local verify | pass / inconclusive / fail | clean verify output; RED vendored-copy mutation failure |
|
|
36
|
+
| local verify scope | pass / inconclusive / fail / inapplicable | source path absent run, or evidence recipe has no source path |
|
|
37
|
+
| root enumeration | pass / inconclusive / fail | catalog or pinned list plus included/excluded/missing/extra disposition; manifest-only layout needs exhaustive root scan with empty extra/missing set |
|
|
38
|
+
| semantic layer | pass / inconclusive / fail / inapplicable | valid+invalid semantic evidence, or no-semantic note naming the artifact's actual declared format/parser and why no parser/schema exists |
|
|
39
|
+
| upstream compare | pass / inconclusive / fail / inapplicable | clean upstream check; RED vendored mutation; RED upstream-ref change; RED compare-set membership failure |
|
|
40
|
+
| pin authority | pass / inconclusive / fail / inapplicable | signed tag, protected ref, or distinct-owner source |
|
|
41
|
+
| recipe integrity | pass / inconclusive / fail | local digest clean+RED; producer proof or local-recipe-only label |
|
|
42
|
+
| wrapper integrity | pass / inconclusive / fail / inapplicable | CI/command entrypoint; digest comparison; wrapper clean+RED if present |
|
|
43
|
+
| sync boundary | pass / inconclusive / fail | verify/review did not fetch/install/exec-beyond-canonical-script/delete; separate sync authorization if a sync gate ran |
|
|
44
|
+
| RED cleanup | pass / inconclusive / fail | scratch checkout used; audited working tree clean before and after |
|
|
45
|
+
|
|
46
|
+
Minimal local-only example:
|
|
47
|
+
|
|
48
|
+
| row | status | evidence pointer |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| scope | pass | local digest manifest plus independent catalog covers vendored artifact |
|
|
51
|
+
| local verify | pass | clean verify; RED artifact mutation fails verify |
|
|
52
|
+
| local verify scope | inapplicable | recipe has no sibling/source path |
|
|
53
|
+
| root enumeration | pass | local digest manifest plus independent catalog covers artifact file list |
|
|
54
|
+
| semantic layer | inapplicable | no-semantic note: the vendored artifact is opaque digest content with no declared schema/parser (a semantic-bearing artifact would instead record valid+invalid fixture evidence) |
|
|
55
|
+
| upstream compare | inapplicable | no upstream marker in committed metadata/build/CI |
|
|
56
|
+
| pin authority | inapplicable | no upstream marker in committed metadata/build/CI |
|
|
57
|
+
| recipe integrity | pass | authoritative metadata states no external canonical producer; local-recipe-only; local digest clean+RED; LC_ALL=C ordering, self-containment, and exit semantics proved |
|
|
58
|
+
| wrapper integrity | pass | traced/resolved invocation proves committed local verify script entrypoint directly; digest matches local script; no wrapper |
|
|
59
|
+
| sync boundary | pass | verify/review did not fetch/install/exec-beyond-canonical-script/delete; no separate sync gate used |
|
|
60
|
+
| RED cleanup | pass | RED ran in scratch checkout; audited tree clean |
|
|
61
|
+
|
|
62
|
+
Result: `pass` (local-drift only; upstream freshness unverified; local-recipe-only). Note the verdict starts with `pass` per the aggregate rule, and — because upstream compare and pin authority are inapplicable — includes `local-drift only` and `upstream freshness unverified`.
|
|
63
|
+
|
|
64
|
+
If any applicable row lacks its clean evidence, or lacks required RED/negative evidence where a meaningful/safe RED applies (rows with no meaningful/safe RED instead record an explicit N/A rationale), mark that row `inconclusive` or non-pass; do not aggregate it as green. If a RED mutation does not trigger the expected failure, mark the row `fail` because the gate is defective.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Verify Enforcement Mechanisms
|
|
2
|
+
|
|
3
|
+
Mechanics for the entry rule's enforcement-mechanism verification obligation in `SKILL.md` (Core Rules): the behavioral matrix's cells, the fail-open bypass set, and the port/mirror parity procedure. The obligations themselves — a matrix is required before a completion claim, scratch/synthetic targets only, parity-from-reading is hypothesis-grade — live in the entry; this file owns what goes in the matrix.
|
|
4
|
+
|
|
5
|
+
## Behavioral Matrix Cells
|
|
6
|
+
|
|
7
|
+
- **Blocked set**: one blocked case per externally observable deny condition (not only the easiest violation).
|
|
8
|
+
- **Allowed set**: allowed cases proving legitimate operations are not collateral damage.
|
|
9
|
+
- **Bypass set**: the paths environment variance opens — every swallowed-exception path (a catch that falls through to "allow" is fail-open; make it deny, degrade visibly, or prove the swallowed case is genuinely outside enforcement scope).
|
|
10
|
+
- **Canonicalization/read edge cases**, derived from what the guard canonicalizes or reads: target path and cwd (not-yet-existing directories; at least one case where the raw path and the canonicalized path differ, e.g. under a symlinked root), and VCS metadata/state when the guard reads it (linked worktrees, detached/edge ref states).
|
|
11
|
+
|
|
12
|
+
A case that cannot be exercised safely is recorded as a safe-unavailable gap with its residual risk, not silently skipped.
|
|
13
|
+
|
|
14
|
+
## Port/Mirror Parity
|
|
15
|
+
|
|
16
|
+
When the mechanism ports or mirrors an existing guard, the documented enforcement contract is the spec and the original's behavior is parity input: diff condition-by-condition, record each divergence as intentional-divergence or legacy-bug-closed — never silently inherit a bypass — and run the same matrix on both.
|
|
17
|
+
|
|
18
|
+
For the sibling obligation when the *test* (not the guard) is ported to a sibling stack — input-fixture fidelity of the adversarial inputs themselves — see `test-code-authoring-patterns.md` §9.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# skills/testing-strategy/scripts Agent Contract
|
|
2
|
+
|
|
3
|
+
Scripts here support test strategy validation and harness checks.
|
|
4
|
+
|
|
5
|
+
Rules:
|
|
6
|
+
|
|
7
|
+
- Keep checks deterministic and explicit about what layer they prove.
|
|
8
|
+
- Do not let log-only or smoke-only checks masquerade as assertion-based test
|
|
9
|
+
evidence.
|
|
10
|
+
- Changes to status mapping, gate semantics, or report output require regression
|
|
11
|
+
tests.
|
|
12
|
+
- Avoid live service dependencies in default script paths.
|
|
13
|
+
|
|
14
|
+
Validation:
|
|
15
|
+
|
|
16
|
+
- Run the touched script's `.test.sh` or focused pytest equivalent.
|
|
17
|
+
- `bash skills/skill-extraction-workflow/scripts/check-ccl-skills.sh .`
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""client-terminal-ansi-check.py — CB-1: terminal NO-HARDCODED-ANSI conformance.
|
|
3
|
+
|
|
4
|
+
Flags literal ANSI/VT100 escape sequences written directly in SOURCE code, outside an
|
|
5
|
+
allowlisted rendering/terminal-capability module. clig.dev (Output) and the terminfo model say
|
|
6
|
+
escapes must go through a capability-aware layer that can degrade for `TERM=dumb`/non-TTY/NO_COLOR;
|
|
7
|
+
a raw `\\x1b[31m` sprinkled through business code is the anti-pattern this catches.
|
|
8
|
+
|
|
9
|
+
Language-agnostic: this is a BYTE/TEXT scan (no AST, no parser), so it is genuinely
|
|
10
|
+
zero-dependency and works across Go/Rust/Python/JS/TS/Swift/Kotlin/etc. It scans only
|
|
11
|
+
source-code extensions, so it does not flag golden/fixture files that legitimately embed ANSI.
|
|
12
|
+
|
|
13
|
+
Matched escape-intro forms (a CSI `[` or OSC `]` introducer must follow the ESC):
|
|
14
|
+
\\x1b[ \\x1B[ \\033[ \\e[ \\u001b[ \\u{1b}[ and raw-ESC(0x1b)+[ (CSI) — plus the same six with
|
|
15
|
+
a `]` introducer (OSC, e.g. OSC-8 hyperlink / OSC-52 clipboard write).
|
|
16
|
+
|
|
17
|
+
Determinism boundary (honest): deterministic for "a hardcoded CSI/OSC escape literal is PRESENT".
|
|
18
|
+
It does NOT decide whether the escape is correctly gated behind a capability lib / NO_COLOR / isatty
|
|
19
|
+
(semantic, agent-review), and it covers the CSI/OSC introducers only — other Fe sequences (charset
|
|
20
|
+
`\\x1b(`, DCS `\\x1bP`, etc.) and ESC introducers reached through a variable are not matched. It also
|
|
21
|
+
does NOT follow symlinked directories (os.walk default), so a violation behind a symlink is not
|
|
22
|
+
scanned. A clean run therefore means "no matched hardcoded escape literals found in the walked,
|
|
23
|
+
non-symlinked source tree outside the allowlist", NOT full conformance. Put your rendering/ANSI/
|
|
24
|
+
terminal lib on the allowlist so its legitimate escape definitions are exempt.
|
|
25
|
+
|
|
26
|
+
Allowlist: `--allow=<path-segment>` exempts files under a matching path COMPONENT (segment-anchored,
|
|
27
|
+
not a raw substring — `--allow=render` exempts `render/…` but not `surrender.ts`); a multi-segment
|
|
28
|
+
value (`src/render`) matches a contiguous run of segments. Use it for the one module that owns escape
|
|
29
|
+
emission, e.g. `--allow=ansi --allow=render`.
|
|
30
|
+
|
|
31
|
+
Comments are NOT excluded (comment syntax varies across the many languages this scans — `//`, `#`,
|
|
32
|
+
`--`, `/* */`), so a hardcoded escape inside a comment is still flagged; move illustrative escapes
|
|
33
|
+
into an allowlisted module or restructure them. Likewise a double-escaped TEXT literal such as
|
|
34
|
+
`"\\e]"` (an escaped backslash, not a real ESC) is flagged — source-text scanning cannot tell it
|
|
35
|
+
from `"\e]"`. Both are accepted residuals (advisory: a hit is "to verify"), not parser bugs.
|
|
36
|
+
|
|
37
|
+
Exit: 0 no finding; 1 finding(s); 2 setup/inconclusive (missing path, unsupported file, scope with
|
|
38
|
+
no source files, or an unreadable subtree — NEVER reported as clean).
|
|
39
|
+
"""
|
|
40
|
+
import os
|
|
41
|
+
import re
|
|
42
|
+
import sys
|
|
43
|
+
|
|
44
|
+
SOURCE_EXT = {
|
|
45
|
+
".go", ".rs", ".py", ".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs", ".mts", ".cts",
|
|
46
|
+
".c", ".cc", ".cpp", ".h", ".hpp", ".swift", ".kt", ".kts", ".java",
|
|
47
|
+
".rb", ".sh", ".bash", ".zsh", ".lua", ".dart",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# An introducer must follow the ESC, to avoid matching unrelated `\e`/`\033` text. Accept both
|
|
51
|
+
# `[` (CSI: cursor/clear/color) AND `]` (OSC: hyperlink / OSC-52 clipboard write) — §6 of the
|
|
52
|
+
# terminal skill treats OSC-8/OSC-52 as a security boundary, so a hardcoded OSC escape is in scope.
|
|
53
|
+
ESCAPE_RE = re.compile(
|
|
54
|
+
r"\\x1[bB][\[\]]" # \x1b[
|
|
55
|
+
r"|\\033[\[\]]" # \033[
|
|
56
|
+
r"|\\e[\[\]]" # \e[
|
|
57
|
+
r"|\\u001[bB][\[\]]" # [
|
|
58
|
+
r"|\\u\{0*1[bB]\}[\[\]]" # \u{1b}[
|
|
59
|
+
r"|\x1b[\[\]]" # raw ESC byte (0x1b) + [
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _iter_src(paths, onerror=None):
|
|
64
|
+
for p in paths:
|
|
65
|
+
if os.path.isdir(p):
|
|
66
|
+
for root, _dirs, files in os.walk(p, onerror=onerror):
|
|
67
|
+
for f in files:
|
|
68
|
+
if os.path.splitext(f)[1] in SOURCE_EXT:
|
|
69
|
+
yield os.path.join(root, f)
|
|
70
|
+
elif os.path.splitext(p)[1] in SOURCE_EXT:
|
|
71
|
+
yield p
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _allowed(path, allow):
|
|
75
|
+
# Segment-anchored: `--allow=render` matches a `render/` path component, NOT the substring inside
|
|
76
|
+
# `surrender.ts`. A multi-segment entry (`src/render`) matches as a contiguous run of segments.
|
|
77
|
+
segs = [s for s in re.split(r"[\\/]+", path) if s]
|
|
78
|
+
for a in allow:
|
|
79
|
+
parts = [p for p in re.split(r"[\\/]+", a) if p]
|
|
80
|
+
if not parts:
|
|
81
|
+
continue
|
|
82
|
+
for i in range(len(segs) - len(parts) + 1):
|
|
83
|
+
if segs[i:i + len(parts)] == parts:
|
|
84
|
+
return True
|
|
85
|
+
return False
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _check_file(path):
|
|
89
|
+
try:
|
|
90
|
+
with open(path, encoding="utf-8") as fh:
|
|
91
|
+
lines = fh.readlines()
|
|
92
|
+
except (UnicodeDecodeError, OSError) as exc:
|
|
93
|
+
return None, f"{path}: {exc}"
|
|
94
|
+
findings = []
|
|
95
|
+
for i, line in enumerate(lines, 1):
|
|
96
|
+
if ESCAPE_RE.search(line):
|
|
97
|
+
findings.append(f"{path}:{i}: hardcoded ANSI/OSC escape literal")
|
|
98
|
+
return findings, None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def main(argv):
|
|
102
|
+
allow = [a[len("--allow="):] for a in argv if a.startswith("--allow=")]
|
|
103
|
+
paths = [a for a in argv if not a.startswith("--allow=")]
|
|
104
|
+
if not paths:
|
|
105
|
+
print("usage: client-terminal-ansi-check.py <src-path> [...] [--allow=<substr>]...", file=sys.stderr)
|
|
106
|
+
return 2
|
|
107
|
+
walk_errs = []
|
|
108
|
+
for p in paths:
|
|
109
|
+
if not os.path.exists(p):
|
|
110
|
+
print(f"client-ansi: path not found: {p} — inconclusive", file=sys.stderr)
|
|
111
|
+
return 2
|
|
112
|
+
if os.path.isfile(p) and os.path.splitext(p)[1] not in SOURCE_EXT:
|
|
113
|
+
print(f"client-ansi: unsupported file type: {p} — inconclusive", file=sys.stderr)
|
|
114
|
+
return 2
|
|
115
|
+
if os.path.isdir(p) and not any(_iter_src([p], onerror=walk_errs.append)):
|
|
116
|
+
print(f"client-ansi: no source files under directory: {p} — inconclusive", file=sys.stderr)
|
|
117
|
+
return 2
|
|
118
|
+
files = list(_iter_src(paths, onerror=walk_errs.append))
|
|
119
|
+
if walk_errs:
|
|
120
|
+
print(f"client-ansi: cannot read part of scope ({walk_errs[0]}) — inconclusive", file=sys.stderr)
|
|
121
|
+
return 2
|
|
122
|
+
if not files:
|
|
123
|
+
print("client-ansi: no source files in scope — inconclusive", file=sys.stderr)
|
|
124
|
+
return 2
|
|
125
|
+
hits = 0
|
|
126
|
+
for f in files:
|
|
127
|
+
if _allowed(f, allow):
|
|
128
|
+
continue
|
|
129
|
+
res, err = _check_file(f)
|
|
130
|
+
if err is not None:
|
|
131
|
+
print(f"client-ansi: read error: {err} — inconclusive", file=sys.stderr)
|
|
132
|
+
return 2
|
|
133
|
+
for line in res:
|
|
134
|
+
print(f"client-ansi smell: {line}")
|
|
135
|
+
hits = 1
|
|
136
|
+
return hits
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if __name__ == "__main__":
|
|
140
|
+
sys.exit(main(sys.argv[1:]))
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Test harness for client-terminal-ansi-check.py (CB-1) — proves it catches hardcoded ANSI
|
|
3
|
+
# escape literals across forms/languages, exempts the allowlisted rendering module, does not
|
|
4
|
+
# false-positive on clean source, and is inconclusive (not clean) on bad scope.
|
|
5
|
+
# Run: bash client-terminal-ansi-check.test.sh (honors $TMPDIR; needs python3)
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
script="$here/client-terminal-ansi-check.py"
|
|
10
|
+
command -v python3 >/dev/null 2>&1 || { echo "python3 required" >&2; exit 2; }
|
|
11
|
+
base="${TMPDIR:-/tmp}"
|
|
12
|
+
tmp="$(mktemp -d "${base%/}/cbansi.XXXXXX")"
|
|
13
|
+
trap 'rm -rf "$tmp"' EXIT
|
|
14
|
+
|
|
15
|
+
pass=0 fail=0
|
|
16
|
+
assert_hit() { local desc="$1" want="$2"; shift 2
|
|
17
|
+
set +e; local out rc; out="$(python3 "$script" "$@" 2>/dev/null)"; rc=$?; set -e
|
|
18
|
+
if [ "$rc" = 1 ] && printf '%s' "$out" | grep -qF "$want"; then pass=$((pass+1)); echo "ok - $desc"
|
|
19
|
+
else fail=$((fail+1)); echo "FAIL - $desc (rc=$rc, want '$want', out='$out')"; fi; }
|
|
20
|
+
assert_exit() { local desc="$1" want="$2"; shift 2
|
|
21
|
+
set +e; python3 "$script" "$@" >/dev/null 2>&1; local rc=$?; set -e
|
|
22
|
+
if [ "$rc" = "$want" ]; then pass=$((pass+1)); echo "ok - $desc"; else fail=$((fail+1)); echo "FAIL - $desc (want exit $want, got $rc)"; fi; }
|
|
23
|
+
|
|
24
|
+
mkdir -p "$tmp/src" "$tmp/render" "$tmp/empty"
|
|
25
|
+
# positive: each form on its own line, across languages
|
|
26
|
+
cat > "$tmp/src/colors.go" <<'EOF'
|
|
27
|
+
package x
|
|
28
|
+
const a = "\x1b[31m"
|
|
29
|
+
const b = "\033[0m"
|
|
30
|
+
const c = "\e[1m"
|
|
31
|
+
EOF
|
|
32
|
+
cat > "$tmp/src/colors.ts" <<'EOF'
|
|
33
|
+
const a = "[31m";
|
|
34
|
+
const b = "\u{1b}[0m";
|
|
35
|
+
EOF
|
|
36
|
+
# clean: routes through a lib, no literal escapes
|
|
37
|
+
cat > "$tmp/src/clean.go" <<'EOF'
|
|
38
|
+
package x
|
|
39
|
+
import "term"
|
|
40
|
+
func f() { term.Red("hi") } // no hardcoded escapes; [ alone is fine: a[0]
|
|
41
|
+
EOF
|
|
42
|
+
# allowlisted rendering module owns the escapes
|
|
43
|
+
cat > "$tmp/render/ansi.go" <<'EOF'
|
|
44
|
+
package render
|
|
45
|
+
const Reset = "\x1b[0m"
|
|
46
|
+
EOF
|
|
47
|
+
echo "not source" > "$tmp/empty/readme.md"
|
|
48
|
+
|
|
49
|
+
assert_hit "Go \\x1b[ literal" "colors.go" "$tmp/src/colors.go"
|
|
50
|
+
assert_hit "Go \\033[ and \\e[ literals" "hardcoded ANSI/OSC escape literal" "$tmp/src/colors.go"
|
|
51
|
+
assert_hit "TS \\u001b[ and \\u{1b}[ literals" "colors.ts" "$tmp/src/colors.ts"
|
|
52
|
+
# exact count: colors.go has 3 escape lines, colors.ts has 2 → 5 over the dir
|
|
53
|
+
got=$(python3 "$script" "$tmp/src" 2>/dev/null | grep -c "client-ansi smell:" || true)
|
|
54
|
+
if [ "$got" = 5 ]; then pass=$((pass+1)); echo "ok - src finding count == 5"; else fail=$((fail+1)); echo "FAIL - src count: want 5 got $got"; fi
|
|
55
|
+
# regression (challenge R1): OSC escapes (\x1b] — hyperlink / OSC-52 clipboard) must be caught, not just CSI
|
|
56
|
+
cat > "$tmp/osc.ts" <<'EOF'
|
|
57
|
+
const link = "\x1b]8;;https://x.test\x07label\x1b]8;;\x07"
|
|
58
|
+
const clip = "\033]52;c;BASE64\007"
|
|
59
|
+
EOF
|
|
60
|
+
assert_hit "OSC \\x1b] hyperlink/clipboard escape caught" "hardcoded ANSI/OSC escape literal" "$tmp/osc.ts"
|
|
61
|
+
assert_exit "clean source -> no finding (0)" 0 "$tmp/src/clean.go"
|
|
62
|
+
assert_exit "allowlisted render module exempt (0)" 0 "$tmp/render/ansi.go" "--allow=/render/"
|
|
63
|
+
# regression (challenge R2): --allow segment-anchored, must NOT exempt substring match
|
|
64
|
+
cat > "$tmp/src/surrender.ts" <<'EOF'
|
|
65
|
+
const c = "\x1b[31m"
|
|
66
|
+
EOF
|
|
67
|
+
assert_hit "--allow=render does NOT exempt surrender.ts" "hardcoded ANSI/OSC escape literal" "$tmp/src/surrender.ts" --allow=render
|
|
68
|
+
# regression (challenge R2): .mts scanned + padded-zero \u{001b} caught (printf %s keeps literal text)
|
|
69
|
+
printf '%s\n' 'const a = "\u{001b}[31m"' > "$tmp/mod.mts"
|
|
70
|
+
assert_hit ".mts + padded \\u{001b} caught" "hardcoded ANSI/OSC escape literal" "$tmp/mod.mts"
|
|
71
|
+
assert_exit "missing path -> inconclusive (2)" 2 "$tmp/src/nope.go"
|
|
72
|
+
assert_exit "unsupported file -> inconclusive (2)" 2 "$tmp/empty/readme.md"
|
|
73
|
+
assert_exit "dir without source -> inconclusive (2)" 2 "$tmp/empty"
|
|
74
|
+
|
|
75
|
+
echo "----"; echo "passed=$pass failed=$fail"; [ "$fail" -eq 0 ]
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""lang-basics-ast-check.py — DETERMINISTIC (for the matched shapes) check for LB-1:
|
|
3
|
+
Python boundary error-faking.
|
|
4
|
+
|
|
5
|
+
Unlike the ripgrep smell-finder, this parses the AST, so it does NOT match text inside
|
|
6
|
+
comments or strings, and it catches the grep-bypass forms the smell-grep missed:
|
|
7
|
+
`dict(success=False)`, single-quoted dicts, a `{SUCCESS: False}` constant-key, and 2-tuple
|
|
8
|
+
error returns.
|
|
9
|
+
|
|
10
|
+
Scope: pass TRANSPORT / handler / view / router files or directories. The pure/domain core is
|
|
11
|
+
exempt (Result/Either is allowed there) — do not point this at the whole tree.
|
|
12
|
+
|
|
13
|
+
Determinism boundary: it is deterministic ONLY for the enumerated shapes below. "Is this a real
|
|
14
|
+
fake error" is undecidable in general, so a clean run means "none of the matched fake-error
|
|
15
|
+
shapes are present", NOT full conformance. Shapes it still does not catch (documented residual):
|
|
16
|
+
an ad-hoc `{"code": ..., "message": ...}` dict (indistinguishable from a legit envelope without
|
|
17
|
+
type/flow analysis), or a value aliased through another variable.
|
|
18
|
+
|
|
19
|
+
Exit: 0 no finding; 1 finding(s); 2 setup/inconclusive (missing path, non-.py file, directory
|
|
20
|
+
with no .py, or a parse error — NEVER reported as clean).
|
|
21
|
+
"""
|
|
22
|
+
import ast
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
SUCCESS_KEYS = {"success", "ok"}
|
|
27
|
+
ERR_NAMES = {"err", "error", "errs", "exc", "e", "ex"}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _iter_py(paths, onerror=None):
|
|
31
|
+
for p in paths:
|
|
32
|
+
if os.path.isdir(p):
|
|
33
|
+
# onerror: os.walk silently skips unreadable subtrees by default — that could turn
|
|
34
|
+
# a partly-unreadable scope into a false "clean". Surface it so main() exits 2.
|
|
35
|
+
for root, _dirs, files in os.walk(p, onerror=onerror):
|
|
36
|
+
for f in files:
|
|
37
|
+
if f.endswith(".py"):
|
|
38
|
+
yield os.path.join(root, f)
|
|
39
|
+
elif p.endswith(".py"):
|
|
40
|
+
yield p
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _is_false(node):
|
|
44
|
+
return isinstance(node, ast.Constant) and node.value is False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _dict_is_fake(d):
|
|
48
|
+
# {"success": False} / {'ok': False} (any quote) / {SUCCESS: False} (constant-name key).
|
|
49
|
+
# ONLY a literal boolean False — NOT 0/None: {"ok": 0} is a legit count, not an error fake.
|
|
50
|
+
for k, v in zip(d.keys, d.values):
|
|
51
|
+
key = None
|
|
52
|
+
if isinstance(k, ast.Constant) and isinstance(k.value, str):
|
|
53
|
+
key = k.value.lower()
|
|
54
|
+
elif isinstance(k, ast.Name) and k.id.isupper():
|
|
55
|
+
# only an ALL-CAPS constant name (e.g. SUCCESS); a lowercase `ok` is a runtime
|
|
56
|
+
# variable key, too ambiguous to flag.
|
|
57
|
+
key = k.id.lower()
|
|
58
|
+
if key in SUCCESS_KEYS and _is_false(v):
|
|
59
|
+
return True
|
|
60
|
+
return False
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _call_is_fake_dict(c):
|
|
64
|
+
# dict(success=False)
|
|
65
|
+
if isinstance(c.func, ast.Name) and c.func.id == "dict":
|
|
66
|
+
for kw in c.keywords:
|
|
67
|
+
if kw.arg and kw.arg.lower() in SUCCESS_KEYS and _is_false(kw.value):
|
|
68
|
+
return True
|
|
69
|
+
return False
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _tuple_is_fake(t):
|
|
73
|
+
if len(t.elts) != 2:
|
|
74
|
+
return False
|
|
75
|
+
a, b = t.elts
|
|
76
|
+
# (data, err) / (x, error) / (payload, exc)
|
|
77
|
+
if isinstance(b, ast.Name) and b.id.lower() in ERR_NAMES:
|
|
78
|
+
return True
|
|
79
|
+
# (None, "msg"): None paired with a string-literal message, or an error/message-ish name.
|
|
80
|
+
# NOT (None, default) — a generic name is a legit optional-pair, not an error fake.
|
|
81
|
+
if isinstance(a, ast.Constant) and a.value is None:
|
|
82
|
+
if isinstance(b, ast.Constant) and isinstance(b.value, str):
|
|
83
|
+
return True
|
|
84
|
+
if isinstance(b, ast.Name) and (b.id.lower() in ERR_NAMES or any(t in b.id.lower() for t in ("msg", "message", "err", "error"))):
|
|
85
|
+
return True
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _check_file(path):
|
|
90
|
+
try:
|
|
91
|
+
with open(path, encoding="utf-8") as fh:
|
|
92
|
+
tree = ast.parse(fh.read(), filename=path)
|
|
93
|
+
except (SyntaxError, UnicodeDecodeError, OSError) as exc:
|
|
94
|
+
return None, f"{path}: {exc}"
|
|
95
|
+
findings = []
|
|
96
|
+
for node in ast.walk(tree):
|
|
97
|
+
if not (isinstance(node, ast.Return) and node.value is not None):
|
|
98
|
+
continue
|
|
99
|
+
hit = _return_hit(node.value)
|
|
100
|
+
if hit:
|
|
101
|
+
findings.append(f"{path}:{node.lineno}: boundary error-fake [{hit}]")
|
|
102
|
+
return findings, None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _is_fake_dict_node(n):
|
|
106
|
+
# a fake dict literal ({"success": False}) OR a dict(success=False) call
|
|
107
|
+
return (isinstance(n, ast.Dict) and _dict_is_fake(n)) or (isinstance(n, ast.Call) and _call_is_fake_dict(n))
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _return_hit(v):
|
|
111
|
+
# Inspect the return ROOT plus ONE level into a response constructor — NOT the whole
|
|
112
|
+
# subtree, so a fake dict nested inside legitimate data
|
|
113
|
+
# (`return {"items": [{"success": False}]}`) is not flagged.
|
|
114
|
+
if isinstance(v, ast.Tuple):
|
|
115
|
+
if _tuple_is_fake(v):
|
|
116
|
+
return "error-tuple (data,err)/(None,msg)"
|
|
117
|
+
# (body, status) form: return ({"success": False}, 400)
|
|
118
|
+
for el in v.elts:
|
|
119
|
+
if _is_fake_dict_node(el):
|
|
120
|
+
return "fake dict in (body, status) tuple"
|
|
121
|
+
return None
|
|
122
|
+
if isinstance(v, ast.Dict) and _dict_is_fake(v):
|
|
123
|
+
return "dict success/ok=False"
|
|
124
|
+
if isinstance(v, ast.Call):
|
|
125
|
+
if _call_is_fake_dict(v):
|
|
126
|
+
return "dict(success=False)"
|
|
127
|
+
# constructor-wrapped one level: JSONResponse({...}) / JSONResponse(dict(success=False))
|
|
128
|
+
# / Response(content={...})
|
|
129
|
+
for arg in list(v.args) + [kw.value for kw in v.keywords]:
|
|
130
|
+
if _is_fake_dict_node(arg):
|
|
131
|
+
return "fake dict (constructor-wrapped)"
|
|
132
|
+
return None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def main(argv):
|
|
136
|
+
if not argv:
|
|
137
|
+
print("usage: lang-basics-ast-check.py <transport-path> [...]", file=sys.stderr)
|
|
138
|
+
return 2
|
|
139
|
+
walk_errs = []
|
|
140
|
+
for p in argv:
|
|
141
|
+
if not os.path.exists(p):
|
|
142
|
+
print(f"lang-basics-ast: path not found: {p} — inconclusive", file=sys.stderr)
|
|
143
|
+
return 2
|
|
144
|
+
if os.path.isfile(p) and not p.endswith(".py"):
|
|
145
|
+
print(f"lang-basics-ast: not a Python file: {p} — inconclusive", file=sys.stderr)
|
|
146
|
+
return 2
|
|
147
|
+
if os.path.isdir(p) and not any(_iter_py([p], onerror=walk_errs.append)):
|
|
148
|
+
print(f"lang-basics-ast: no Python files under directory: {p} — inconclusive", file=sys.stderr)
|
|
149
|
+
return 2
|
|
150
|
+
files = list(_iter_py(argv, onerror=walk_errs.append))
|
|
151
|
+
if walk_errs:
|
|
152
|
+
print(f"lang-basics-ast: cannot read part of scope ({walk_errs[0]}) — inconclusive", file=sys.stderr)
|
|
153
|
+
return 2
|
|
154
|
+
if not files:
|
|
155
|
+
print("lang-basics-ast: no Python files in scope — inconclusive", file=sys.stderr)
|
|
156
|
+
return 2
|
|
157
|
+
hits = 0
|
|
158
|
+
for f in files:
|
|
159
|
+
res, err = _check_file(f)
|
|
160
|
+
if err is not None:
|
|
161
|
+
print(f"lang-basics-ast: parse error: {err} — inconclusive", file=sys.stderr)
|
|
162
|
+
return 2
|
|
163
|
+
for line in res:
|
|
164
|
+
print(f"lang-basics-ast smell: {line}")
|
|
165
|
+
hits = 1
|
|
166
|
+
return hits
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
if __name__ == "__main__":
|
|
170
|
+
sys.exit(main(sys.argv[1:]))
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Test harness for lang-basics-ast-check.py — proves it catches the grep-bypass forms,
|
|
3
|
+
# does not false-positive on legit returns, and is inconclusive (not clean) on bad scope.
|
|
4
|
+
# Run: bash lang-basics-ast-check.test.sh (honors $TMPDIR; needs python3)
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
script="$here/lang-basics-ast-check.py"
|
|
9
|
+
command -v python3 >/dev/null 2>&1 || { echo "python3 required" >&2; exit 2; }
|
|
10
|
+
base="${TMPDIR:-/tmp}"
|
|
11
|
+
tmp="$(mktemp -d "${base%/}/lbast.XXXXXX")"
|
|
12
|
+
trap 'rm -rf "$tmp"' EXIT
|
|
13
|
+
|
|
14
|
+
pass=0 fail=0
|
|
15
|
+
assert_hit() { # <desc> <expect-substr> <path...>
|
|
16
|
+
local desc="$1" want="$2"; shift 2
|
|
17
|
+
set +e; local out rc; out="$(python3 "$script" "$@" 2>/dev/null)"; rc=$?; set -e
|
|
18
|
+
if [ "$rc" = 1 ] && printf '%s' "$out" | grep -qF "$want"; then
|
|
19
|
+
pass=$((pass+1)); echo "ok - $desc"
|
|
20
|
+
else
|
|
21
|
+
fail=$((fail+1)); echo "FAIL - $desc (rc=$rc, want '$want', out='$out')"
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
24
|
+
assert_exit() { # <desc> <expected-exit> <path...>
|
|
25
|
+
local desc="$1" want="$2"; shift 2
|
|
26
|
+
set +e; python3 "$script" "$@" >/dev/null 2>&1; local rc=$?; set -e
|
|
27
|
+
if [ "$rc" = "$want" ]; then pass=$((pass+1)); echo "ok - $desc"; else fail=$((fail+1)); echo "FAIL - $desc (want exit $want, got $rc)"; fi
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
mkdir -p "$tmp/t" "$tmp/empty"
|
|
31
|
+
cat > "$tmp/t/bypasses.py" <<'EOF'
|
|
32
|
+
def a(): return {"success": False}
|
|
33
|
+
def b(): return {'success': False}
|
|
34
|
+
def c(): return dict(success=False)
|
|
35
|
+
def d(): return {SUCCESS: False}
|
|
36
|
+
def e(): return {"ok": False, "error": msg}
|
|
37
|
+
def f(): return (None, msg)
|
|
38
|
+
def g(): return data, err
|
|
39
|
+
def i(): return {"success": False, "note": "# lb-allow: ignored-by-ast"}
|
|
40
|
+
def j(): return JSONResponse({"success": False, "error": "x"})
|
|
41
|
+
def o(): return JSONResponse(dict(success=False))
|
|
42
|
+
def p(): return {"success": False}, 400
|
|
43
|
+
EOF
|
|
44
|
+
cat > "$tmp/t/wrapped.py" <<'EOF'
|
|
45
|
+
def w(): return JSONResponse({"success": False})
|
|
46
|
+
EOF
|
|
47
|
+
cat > "$tmp/t/clean.py" <<'EOF'
|
|
48
|
+
def a(): raise DomainError(code=400, message="bad")
|
|
49
|
+
def b(): return {"data": items, "total": n}
|
|
50
|
+
def c(): return Result.err("x")
|
|
51
|
+
def d(): return lat, lng
|
|
52
|
+
def e(): return {"code": 200, "message": "ok", "data": d}
|
|
53
|
+
def f(): return None
|
|
54
|
+
def g(): return None, None
|
|
55
|
+
def h(): return {"ok": 0, "data": []}
|
|
56
|
+
def i(): return {"success": None}
|
|
57
|
+
def j(): return None, default
|
|
58
|
+
def k(): return None, fallback_value
|
|
59
|
+
def l(): return {"items": [{"success": False}]}
|
|
60
|
+
def r(): return {"items": [{"success": False}]}, 200
|
|
61
|
+
def m(): return {ok: False}
|
|
62
|
+
def n():
|
|
63
|
+
# return {"success": False} <- a comment, must be ignored
|
|
64
|
+
s = "{'success': False}"
|
|
65
|
+
return {"data": s}
|
|
66
|
+
EOF
|
|
67
|
+
printf 'def broken(:\n' > "$tmp/t/syntax.py"
|
|
68
|
+
echo "not python" > "$tmp/empty/readme.md"
|
|
69
|
+
|
|
70
|
+
assert_hit "dict success/ok=False (any quote, constant key)" "dict success/ok=False" "$tmp/t/bypasses.py"
|
|
71
|
+
assert_hit "dict(success=False) call form" "dict(success=False)" "$tmp/t/bypasses.py"
|
|
72
|
+
assert_hit "error tuple (data,err)/(None,msg)" "error-tuple" "$tmp/t/bypasses.py"
|
|
73
|
+
assert_hit "constructor-wrapped fake dict (direct, by label)" "fake dict (constructor-wrapped)" "$tmp/t/wrapped.py"
|
|
74
|
+
assert_hit "(body, status) tuple boundary response" "(body, status) tuple" "$tmp/t/bypasses.py"
|
|
75
|
+
# exact-count guard: bypasses.py has 11 fake-return lines (a,b,c,d,e,f,g,i,j,o,p); each → 1 finding.
|
|
76
|
+
got=$(python3 "$script" "$tmp/t/bypasses.py" 2>/dev/null | grep -c "lang-basics-ast smell:" || true)
|
|
77
|
+
if [ "$got" = 11 ]; then pass=$((pass+1)); echo "ok - bypasses.py finding count == 11"; else fail=$((fail+1)); echo "FAIL - bypasses.py count: want 11 got $got"; fi
|
|
78
|
+
assert_exit "clean returns -> no finding (0)" 0 "$tmp/t/clean.py"
|
|
79
|
+
assert_exit "syntax error -> inconclusive (2)" 2 "$tmp/t/syntax.py"
|
|
80
|
+
assert_exit "missing path -> setup (2)" 2 "$tmp/t/nope.py"
|
|
81
|
+
assert_exit "non-.py file -> setup (2)" 2 "$tmp/empty/readme.md"
|
|
82
|
+
assert_exit "dir without py -> setup (2)" 2 "$tmp/empty"
|
|
83
|
+
assert_exit "multi-scope w/ one empty dir -> (2)" 2 "$tmp/t" "$tmp/empty"
|
|
84
|
+
|
|
85
|
+
echo "----"
|
|
86
|
+
echo "passed=$pass failed=$fail"
|
|
87
|
+
[ "$fail" -eq 0 ]
|