@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,282 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# generic-r0-leak-scan.sh — deterministic PUBLIC fallback for the R0 leakage gate.
|
|
3
|
+
#
|
|
4
|
+
# When the maintainer's private ALIAS_AUDIT_CMD is unavailable (a normal local
|
|
5
|
+
# machine), check-ccl-skills.sh runs this scan instead of leaving only an
|
|
6
|
+
# "audit skipped" notice. It is a HIGH-SIGNAL, LOW-FALSE-POSITIVE public check —
|
|
7
|
+
# NOT a replacement for the private alias audit.
|
|
8
|
+
#
|
|
9
|
+
# Scope: ONLY the ADDED lines of the current git diff (committed base..HEAD,
|
|
10
|
+
# staged, unstaged, and untracked) restricted to shared-skill MARKDOWN surfaces
|
|
11
|
+
# (skills/**/*.md, README.md, docs/**/*.md,
|
|
12
|
+
# packages/opencode-plugin/commands/**/*.md,
|
|
13
|
+
# .opencode/commands/**/*.md). Diff-scoping is deliberate: it never re-polices
|
|
14
|
+
# pre-existing known debt, only what THIS change introduces. Markdown-only is
|
|
15
|
+
# deliberate too: scripts and YAML overlays legitimately contain example tokens
|
|
16
|
+
# and path-handling code, and the private alias audit (not this fallback) is the
|
|
17
|
+
# comprehensive gate of record over every file type.
|
|
18
|
+
#
|
|
19
|
+
# Detected leak classes (each requires a CONCRETE shape, so prose and angle
|
|
20
|
+
# placeholders like </Users> or <repo> do not trip it):
|
|
21
|
+
# - absolute local paths: /Users/<seg>, /home/<seg>, /private/var/<seg>, C:\<seg>
|
|
22
|
+
# - RFC1918 private IPv4 literals (10/8, 172.16-31/12, 192.168/16) — NOT loopback
|
|
23
|
+
# - internal-only hostnames: <label>.internal / .intranet / .corp
|
|
24
|
+
# - secret/token literals: key=<12+char quoted value>, or known vendor token prefixes
|
|
25
|
+
#
|
|
26
|
+
# Exit codes: clean=0 (prints generic_r0_leak_scan_ok), leak found=1 (prints the
|
|
27
|
+
# offending lines), degraded=0 (prints generic_r0_leak_scan_degraded — a DISTINCT
|
|
28
|
+
# status, NOT a reassuring _ok). Degraded fires when coverage is incomplete: not a
|
|
29
|
+
# git work tree, OR no diff base resolves (no CCL_SKILL_BASE_REF / @{upstream} /
|
|
30
|
+
# origin/main merge-base) while HEAD exists, so committed branch commits were NOT
|
|
31
|
+
# scanned — the exact shallow / detached-HEAD CI case where a leak already committed
|
|
32
|
+
# on the branch would otherwise pass as a silent _ok. Degraded is WARNING-PASS
|
|
33
|
+
# (exit 0) by default because this is a best-effort preflight and the private
|
|
34
|
+
# ALIAS_AUDIT_CMD is the gate of record; opt IN to a hard failure with
|
|
35
|
+
# CCL_SKILL_R0_STRICT_BASE=1. A leak found in whatever WAS scanned still blocks
|
|
36
|
+
# (exit 1) regardless of degraded. `--self-test` validates the matcher and the
|
|
37
|
+
# clean/degraded status decision against in-memory fixtures (no git) and exits 0/1.
|
|
38
|
+
set -euo pipefail
|
|
39
|
+
|
|
40
|
+
# High-signal leak patterns (rg / Rust-regex syntax). A match anywhere on an
|
|
41
|
+
# added line flags it. Kept narrow to hold false positives down.
|
|
42
|
+
leak_patterns=(
|
|
43
|
+
'/Users/[A-Za-z0-9._-]'
|
|
44
|
+
'/home/[A-Za-z0-9._-]'
|
|
45
|
+
'/private/var/[A-Za-z0-9._-]'
|
|
46
|
+
'[A-Za-z]:\\[A-Za-z0-9._-]'
|
|
47
|
+
'(?:^|[^0-9.])10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?:[^0-9]|$)'
|
|
48
|
+
'(?:^|[^0-9.])192\.168\.[0-9]{1,3}\.[0-9]{1,3}(?:[^0-9]|$)'
|
|
49
|
+
'(?:^|[^0-9.])172\.(?:1[6-9]|2[0-9]|3[01])\.[0-9]{1,3}\.[0-9]{1,3}(?:[^0-9]|$)'
|
|
50
|
+
'[A-Za-z0-9][A-Za-z0-9-]*\.(?:internal|intranet|corp)(?:[^A-Za-z0-9]|$)'
|
|
51
|
+
'(?:^|[^A-Za-z0-9])AKIA[0-9A-Z]{16}(?:[^0-9A-Z]|$)'
|
|
52
|
+
'(?:^|[^A-Za-z0-9])gh[opsu]_[A-Za-z0-9]{36}'
|
|
53
|
+
'(?:^|[^A-Za-z0-9])glpat-[A-Za-z0-9_-]{20}'
|
|
54
|
+
'(?:^|[^A-Za-z0-9])xox[baprs]-[A-Za-z0-9-]{10,}'
|
|
55
|
+
'(?:^|[^A-Za-z0-9])sk-[A-Za-z0-9]{20,}'
|
|
56
|
+
'-----BEGIN [A-Z ]*PRIVATE KEY-----'
|
|
57
|
+
)
|
|
58
|
+
# Secret-assignment pattern carries both quote chars, so build it with double
|
|
59
|
+
# quotes (\" -> "), keeping rg escapes (\\s -> \s) intact.
|
|
60
|
+
leak_patterns+=( "(?i:api[_-]?key|secret(?:[_-]?key)?|access[_-]?key|client[_-]?secret|password|passwd|token|bearer)[\"']?\\s*[:=]\\s*[\"'][A-Za-z0-9_+/.=-]{12,}[\"']" )
|
|
61
|
+
|
|
62
|
+
# scan_stream: reads "path:lineno:content" lines on stdin, prints offenders on
|
|
63
|
+
# stdout. Returns 0 normally (offenders may be empty), 2 on rg error.
|
|
64
|
+
scan_stream() {
|
|
65
|
+
local args=() p out rc=0
|
|
66
|
+
for p in "${leak_patterns[@]}"; do args+=( -e "$p" ); done
|
|
67
|
+
# Capture rg's real status in the else branch (a false `if` with no else would
|
|
68
|
+
# otherwise reset $? to 0). rg: 0=match, 1=no match, 2=error.
|
|
69
|
+
if out="$(rg --no-line-number --no-filename --color never "${args[@]}" 2>/dev/null)"; then
|
|
70
|
+
rc=0
|
|
71
|
+
else
|
|
72
|
+
rc=$?
|
|
73
|
+
fi
|
|
74
|
+
if [ "$rc" -eq 0 ]; then
|
|
75
|
+
printf '%s\n' "$out"
|
|
76
|
+
return 0
|
|
77
|
+
fi
|
|
78
|
+
[ "$rc" -eq 1 ] && return 0 # no matches
|
|
79
|
+
echo "generic_r0_leak_scan_error: rg exited $rc" >&2
|
|
80
|
+
return 2
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# emit_clean_result <degraded> <line_count> <file_count>
|
|
84
|
+
# Prints the clean-outcome status line and returns its exit code. Isolated from
|
|
85
|
+
# git so --self-test can exercise it. degraded=1 -> a DISTINCT scan_degraded
|
|
86
|
+
# status (base unavailable; committed branch commits NOT covered), WARNING-PASS
|
|
87
|
+
# (exit 0) by default, or BLOCK (exit 1) under CCL_SKILL_R0_STRICT_BASE=1.
|
|
88
|
+
emit_clean_result() {
|
|
89
|
+
local degraded="$1" line_count="$2" file_count="$3"
|
|
90
|
+
if [ "$degraded" = 1 ]; then
|
|
91
|
+
echo "generic_r0_leak_scan_degraded: base unavailable (no CCL_SKILL_BASE_REF / @{upstream} / origin/main merge-base); committed branch commits NOT scanned — only worktree/staged/untracked. Best-effort preflight; degraded-clean is NOT proof, the private ALIAS_AUDIT_CMD is the gate of record. Set CCL_SKILL_BASE_REF for full coverage." >&2
|
|
92
|
+
if [ "${CCL_SKILL_R0_STRICT_BASE:-0}" = 1 ]; then
|
|
93
|
+
echo "generic_r0_leak_scan_degraded_blocking: CCL_SKILL_R0_STRICT_BASE=1 -> treating degraded coverage as a failure" >&2
|
|
94
|
+
return 1
|
|
95
|
+
fi
|
|
96
|
+
return 0
|
|
97
|
+
fi
|
|
98
|
+
echo "generic_r0_leak_scan_ok: scanned ${line_count} added markdown line(s) across ${file_count} file(s); no high-signal public leak patterns"
|
|
99
|
+
return 0
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
run_self_test() {
|
|
103
|
+
# Fixtures: "<expect>\t<content>" where expect is flag|clean.
|
|
104
|
+
local fixture_label='api_key'
|
|
105
|
+
local fixture_value='abcdef0123456789xyz'
|
|
106
|
+
local fixtures=(
|
|
107
|
+
$'flag\t/Users/alice/secret/path here'
|
|
108
|
+
$'flag\tconfig at /home/bob/.config/app'
|
|
109
|
+
$'flag\t/private/var/folders/ab/private-thing'
|
|
110
|
+
$'flag\twindows path C:\\Users\\admin\\file.txt'
|
|
111
|
+
$'flag\tconnect to 10.'$'1.2.3 today'
|
|
112
|
+
$'flag\tinternal host 192.'$'168.0.5 only'
|
|
113
|
+
$'flag\treach 172.'$'20.1.1 over vpn'
|
|
114
|
+
$'flag\tservice db.'$'internal is up'
|
|
115
|
+
$'flag\tAWS key AKIA'$'ABCDEFGHIJKLMNOP rotated'
|
|
116
|
+
$'flag\tgithub ghp_'$'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 leaked'
|
|
117
|
+
"flag"$'\t'"$fixture_label = \"$fixture_value\" set"
|
|
118
|
+
$'flag\tpassword: "hunter2hunter2hunter2"'
|
|
119
|
+
$'flag\tbegin block -----BEGIN RSA PRIVATE KEY-----'
|
|
120
|
+
$'clean\tsee <repo>/skills/foo for details'
|
|
121
|
+
$'clean\tpath under /home/<user>/config'
|
|
122
|
+
$'clean\tlocalhost 127.0.0.1 loopback only'
|
|
123
|
+
$'clean\trelease version 1.2.3.4beta notes'
|
|
124
|
+
$'clean\tset your api token in the settings page'
|
|
125
|
+
$'clean\tthe secret sauce of good design'
|
|
126
|
+
$'clean\tRFC1918 ranges like 10.x and 192.168.x'
|
|
127
|
+
$'clean\tuse base64 to encode the payload'
|
|
128
|
+
$'clean\ttask-runner sk module loaded'
|
|
129
|
+
$'clean\texample.invalid is a reserved test host'
|
|
130
|
+
$'clean\tSHA-256 digest of the file'
|
|
131
|
+
)
|
|
132
|
+
local failed=0 expect content line flagged
|
|
133
|
+
local i=1
|
|
134
|
+
for fx in "${fixtures[@]}"; do
|
|
135
|
+
expect="${fx%%$'\t'*}"
|
|
136
|
+
content="${fx#*$'\t'}"
|
|
137
|
+
line="selftest:${i}:${content}"
|
|
138
|
+
if [ -n "$(printf '%s\n' "$line" | scan_stream)" ]; then
|
|
139
|
+
flagged=flag
|
|
140
|
+
else
|
|
141
|
+
flagged=clean
|
|
142
|
+
fi
|
|
143
|
+
if [ "$flagged" != "$expect" ]; then
|
|
144
|
+
echo "generic_r0_leak_scan_self_test: MISMATCH expected=$expect got=$flagged :: $content" >&2
|
|
145
|
+
failed=1
|
|
146
|
+
fi
|
|
147
|
+
i=$((i + 1))
|
|
148
|
+
done
|
|
149
|
+
# Status-decision unit: base-unavailable clean outcome must be a DISTINCT
|
|
150
|
+
# scan_degraded (not a reassuring _ok), warning-pass by default, blocking under
|
|
151
|
+
# strict; a covered clean outcome must be scan_ok.
|
|
152
|
+
local dtext drc
|
|
153
|
+
dtext="$(emit_clean_result 1 0 0 2>&1)" && drc=0 || drc=$?
|
|
154
|
+
if ! printf '%s' "$dtext" | grep -q 'generic_r0_leak_scan_degraded'; then
|
|
155
|
+
echo "generic_r0_leak_scan_self_test: emit_clean_result(degraded) must print scan_degraded" >&2; failed=1
|
|
156
|
+
fi
|
|
157
|
+
if [ "$drc" -ne 0 ]; then
|
|
158
|
+
echo "generic_r0_leak_scan_self_test: degraded must be WARNING-PASS (exit 0) by default" >&2; failed=1
|
|
159
|
+
fi
|
|
160
|
+
dtext="$(CCL_SKILL_R0_STRICT_BASE=1 emit_clean_result 1 0 0 2>&1)" && drc=0 || drc=$?
|
|
161
|
+
if [ "$drc" -eq 0 ]; then
|
|
162
|
+
echo "generic_r0_leak_scan_self_test: CCL_SKILL_R0_STRICT_BASE=1 must make degraded BLOCK" >&2; failed=1
|
|
163
|
+
fi
|
|
164
|
+
if ! printf '%s' "$(emit_clean_result 0 5 2 2>&1)" | grep -q 'generic_r0_leak_scan_ok'; then
|
|
165
|
+
echo "generic_r0_leak_scan_self_test: emit_clean_result(covered) must print scan_ok" >&2; failed=1
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
if [ "$failed" -ne 0 ]; then
|
|
169
|
+
echo "generic_r0_leak_scan_self_test_failed" >&2
|
|
170
|
+
return 1
|
|
171
|
+
fi
|
|
172
|
+
echo "generic_r0_leak_scan_self_test_ok"
|
|
173
|
+
return 0
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
# parse_diff: stdin = `git diff --unified=0` output; stdout = added markdown
|
|
177
|
+
# lines as "relpath:newlineno:content". Tracks the +++ target file and the new
|
|
178
|
+
# line counter from each @@ hunk header.
|
|
179
|
+
parse_diff() {
|
|
180
|
+
awk '
|
|
181
|
+
/^diff --git / { file=""; next }
|
|
182
|
+
/^\+\+\+ / {
|
|
183
|
+
f=$0; sub(/^\+\+\+ /,"",f)
|
|
184
|
+
if (f=="/dev/null") { file=""; next }
|
|
185
|
+
sub(/^b\//,"",f)
|
|
186
|
+
file=f
|
|
187
|
+
next
|
|
188
|
+
}
|
|
189
|
+
/^@@ / {
|
|
190
|
+
if (match($0, /\+[0-9]+/)) { curline=substr($0, RSTART+1, RLENGTH-1)+0 }
|
|
191
|
+
next
|
|
192
|
+
}
|
|
193
|
+
/^\+/ {
|
|
194
|
+
if (file=="") next
|
|
195
|
+
if (file !~ /\.md$/) next
|
|
196
|
+
print file ":" curline ":" substr($0,2)
|
|
197
|
+
curline++
|
|
198
|
+
next
|
|
199
|
+
}
|
|
200
|
+
'
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
main_scan() {
|
|
204
|
+
local root="${1:-.}"
|
|
205
|
+
cd "$root"
|
|
206
|
+
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
207
|
+
echo "generic_r0_leak_scan_degraded: not a git work tree at '$root'; cannot diff added lines (non-blocking)"
|
|
208
|
+
return 0
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
local surfaces=( skills README.md docs packages/opencode-plugin/commands .opencode/commands )
|
|
212
|
+
|
|
213
|
+
# Resolve diff base (mirrors check-ccl-skills.sh): explicit override, then
|
|
214
|
+
# @{upstream}, then origin/main. merge_base may be empty when no base resolves
|
|
215
|
+
# (shallow / detached-HEAD CI, no origin). The staged/unstaged/untracked scans
|
|
216
|
+
# still run, but committed branch commits are then NOT covered — so when a HEAD
|
|
217
|
+
# exists yet no base resolved, mark the clean outcome degraded rather than let a
|
|
218
|
+
# branch-committed leak pass as a silent _ok.
|
|
219
|
+
local base merge_base degraded=0
|
|
220
|
+
base="${CCL_SKILL_BASE_REF:-}"
|
|
221
|
+
if [ -z "$base" ]; then
|
|
222
|
+
base="$(git rev-parse --abbrev-ref --symbolic-full-name '@{upstream}' 2>/dev/null || true)"
|
|
223
|
+
[ -z "$base" ] && base="origin/main"
|
|
224
|
+
fi
|
|
225
|
+
merge_base="$(git merge-base "$base" HEAD 2>/dev/null || true)"
|
|
226
|
+
if [ -z "$merge_base" ] && git rev-parse --verify -q HEAD >/dev/null 2>&1; then
|
|
227
|
+
degraded=1
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
local stream=""
|
|
231
|
+
if [ -n "$merge_base" ]; then
|
|
232
|
+
stream+="$(git diff --unified=0 "$merge_base" HEAD -- "${surfaces[@]}" 2>/dev/null | parse_diff)"$'\n'
|
|
233
|
+
fi
|
|
234
|
+
stream+="$(git diff --unified=0 --cached -- "${surfaces[@]}" 2>/dev/null | parse_diff)"$'\n'
|
|
235
|
+
stream+="$(git diff --unified=0 -- "${surfaces[@]}" 2>/dev/null | parse_diff)"$'\n'
|
|
236
|
+
|
|
237
|
+
# Untracked markdown files: every line counts as added.
|
|
238
|
+
local f rel
|
|
239
|
+
while IFS= read -r f; do
|
|
240
|
+
[ -n "$f" ] || continue
|
|
241
|
+
case "$f" in *.md) ;; *) continue ;; esac
|
|
242
|
+
rel="$f"
|
|
243
|
+
stream+="$(awk -v p="$rel" '{print p":"FNR":"$0}' "$f" 2>/dev/null)"$'\n'
|
|
244
|
+
done < <(git ls-files --others --exclude-standard -- "${surfaces[@]}" 2>/dev/null || true)
|
|
245
|
+
|
|
246
|
+
# Drop empty lines produced by the joins.
|
|
247
|
+
stream="$(printf '%s\n' "$stream" | sed '/^$/d')"
|
|
248
|
+
|
|
249
|
+
local file_count line_count offenders
|
|
250
|
+
line_count="$(printf '%s' "$stream" | grep -c . || true)"
|
|
251
|
+
file_count="$(printf '%s\n' "$stream" | sed -n 's/^\([^:]*\):.*/\1/p' | sort -u | grep -c . || true)"
|
|
252
|
+
|
|
253
|
+
if [ -z "$stream" ]; then
|
|
254
|
+
# No added lines in the worktree/staged/untracked scan. If the committed base
|
|
255
|
+
# was not covered this is under-scanned, not proven clean -> degraded.
|
|
256
|
+
if [ "$degraded" = 1 ]; then
|
|
257
|
+
if emit_clean_result 1 0 0; then return 0; else return $?; fi
|
|
258
|
+
fi
|
|
259
|
+
echo "generic_r0_leak_scan_ok: 0 added markdown line(s) in scope; nothing to scan"
|
|
260
|
+
return 0
|
|
261
|
+
fi
|
|
262
|
+
|
|
263
|
+
offenders="$(printf '%s\n' "$stream" | scan_stream)" || return 2
|
|
264
|
+
if [ -n "$offenders" ]; then
|
|
265
|
+
# A leak in whatever WAS scanned always blocks, degraded or not.
|
|
266
|
+
echo "generic_r0_leak_scan: high-signal public leak pattern(s) in added markdown lines:" >&2
|
|
267
|
+
printf '%s\n' "$offenders" | sed 's/^/ /' >&2
|
|
268
|
+
echo "generic_r0_leak_scan_failed: sanitize the line(s) above (use angle placeholders / generic terms), or run the private ALIAS_AUDIT_CMD audit if this is a false positive" >&2
|
|
269
|
+
return 1
|
|
270
|
+
fi
|
|
271
|
+
if emit_clean_result "$degraded" "$line_count" "$file_count"; then return 0; else return $?; fi
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if ! command -v rg >/dev/null 2>&1; then
|
|
275
|
+
echo "generic_r0_leak_scan_error: missing required command: rg" >&2
|
|
276
|
+
exit 2
|
|
277
|
+
fi
|
|
278
|
+
|
|
279
|
+
case "${1:-}" in
|
|
280
|
+
--self-test) run_self_test ;;
|
|
281
|
+
*) main_scan "${1:-.}" ;;
|
|
282
|
+
esac
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Executable spec for the row-set predicate in references/rule-consolidation.md.
|
|
3
|
+
|
|
4
|
+
The obligation-preservation table's row set is defined there as: every obligation
|
|
5
|
+
whose GOVERNING CHAIN differs before vs after, plus every obligation whose own
|
|
6
|
+
text left a rewritten line. That predicate is prose an agent applies by hand, so
|
|
7
|
+
this file computes it mechanically over two revisions of a markdown file and
|
|
8
|
+
prints the derived row set — making the rule reproducible instead of asserted,
|
|
9
|
+
and giving the challenge's "independently recompute the row set" obligation a
|
|
10
|
+
tool it can actually run.
|
|
11
|
+
|
|
12
|
+
The governing chain of an obligation is the ordered stack of normative ancestors
|
|
13
|
+
it hangs under: the enclosing headings (outermost first) then any enclosing list
|
|
14
|
+
items, each taken by NORMATIVE CONTENT rather than by label or position — so a
|
|
15
|
+
parent that keeps its wording but moves does not count as changed, while one that
|
|
16
|
+
keeps its position and rewrites its condition does.
|
|
17
|
+
|
|
18
|
+
Usage:
|
|
19
|
+
governing-chain-diff.py BEFORE_FILE AFTER_FILE
|
|
20
|
+
governing-chain-diff.py --rev BEFORE_REV AFTER_REV PATH [--repo DIR]
|
|
21
|
+
|
|
22
|
+
Exit status:
|
|
23
|
+
0 the derived row set is empty (no obligation changed chain or left a line)
|
|
24
|
+
1 the derived row set is non-empty (those obligations owe table rows)
|
|
25
|
+
2 usage or input error
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
import argparse
|
|
31
|
+
import re
|
|
32
|
+
import subprocess
|
|
33
|
+
import sys
|
|
34
|
+
from dataclasses import dataclass
|
|
35
|
+
|
|
36
|
+
# A heading line: capture level and text.
|
|
37
|
+
_HEADING = re.compile(r"^(#{1,6})\s+(.*\S)\s*$")
|
|
38
|
+
# A list item: capture indent width, and the text after the bullet/number marker.
|
|
39
|
+
_LIST_ITEM = re.compile(r"^(\s*)(?:[-*+]|\d+[.)])\s+(.*\S)\s*$")
|
|
40
|
+
# A markdown table row (leading pipe); these are data rows, not prose obligations.
|
|
41
|
+
_TABLE_ROW = re.compile(r"^\s*\|")
|
|
42
|
+
# A fenced code block delimiter.
|
|
43
|
+
_FENCE = re.compile(r"^\s*(?:```|~~~)")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def normalize(text: str) -> str:
|
|
47
|
+
"""Collapse whitespace so cosmetic rewrapping is not read as a change."""
|
|
48
|
+
return " ".join(text.split())
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def content_key(text: str, *, chars: int = 120) -> str:
|
|
52
|
+
"""Identity of an ancestor BY NORMATIVE CONTENT, not by label or position.
|
|
53
|
+
|
|
54
|
+
A bounded prefix is used so that appending a clause to a parent counts as the
|
|
55
|
+
same host while rewriting its opening condition does not. The bound is part
|
|
56
|
+
of the spec: `test_governing_chain_diff.sh` pins both directions.
|
|
57
|
+
"""
|
|
58
|
+
return normalize(text)[:chars]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass(frozen=True)
|
|
62
|
+
class Obligation:
|
|
63
|
+
text: str
|
|
64
|
+
chain: tuple[str, ...]
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def key(self) -> str:
|
|
68
|
+
return normalize(self.text)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# Sentence boundary: an ASCII terminator followed by whitespace, OR a CJK
|
|
72
|
+
# terminator (。;:!?) with no whitespace requirement — CJK sentences abut
|
|
73
|
+
# directly. Deliberately simple — it only has to split dense prose into
|
|
74
|
+
# clause-sized units, and both revisions are split the same way, so a boundary
|
|
75
|
+
# this misplaces still compares equal. Without the CJK arm, a dense CJK bullet
|
|
76
|
+
# is one unsplittable block and a qualifier migrating between its sentences is
|
|
77
|
+
# invisible — the exact failure this tool exists to catch. Known limitation:
|
|
78
|
+
# ,、 are NOT split points (they are the dominant CJK clause separator and
|
|
79
|
+
# splitting there would multiply micro-obligations into noise); a qualifier
|
|
80
|
+
# moving between comma-joined clauses still surfaces, but as coarser
|
|
81
|
+
# left-a-rewritten-line / governing-chain-changed rows on the enclosing block.
|
|
82
|
+
_SENTENCE = re.compile(r"(?<=[.;:!?])\s+|(?<=[。;:!?])")
|
|
83
|
+
|
|
84
|
+
# CJK ideograph/kana chars count double toward the obligation-length floor:
|
|
85
|
+
# normalize() counts characters, and 25 ASCII chars is a short clause while 25
|
|
86
|
+
# CJK chars is a full multi-clause rule, so an unweighted floor silently drops
|
|
87
|
+
# short CJK gates (e.g. an 18-char blast-radius question) from the derived row
|
|
88
|
+
# set. The floor itself scales down for ideograph-bearing text (min_chars*2//3,
|
|
89
|
+
# default 25 → 16 effective chars ≈ 8 CJK chars) because CJK packs a complete
|
|
90
|
+
# gate into far fewer characters; English text is unaffected (zero ideographs →
|
|
91
|
+
# effective length == len, floor min_chars unchanged). Punctuation ranges
|
|
92
|
+
# (U+3000-303F, U+FF00-FFEF) are deliberately EXCLUDED: one fullwidth mark in
|
|
93
|
+
# an otherwise-English block must not flip the floor or inflate the length.
|
|
94
|
+
# The sentence splitter above still treats 。;:!? as terminators — that is
|
|
95
|
+
# about boundary placement, not about length weighting.
|
|
96
|
+
_CJK = re.compile(r"[-ヿ㐀-䶿一-鿿豈-𠀀-𪛟]")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def effective_len(text: str) -> int:
|
|
100
|
+
return len(text) + len(_CJK.findall(text))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def length_floor(text: str, min_chars: int) -> int:
|
|
104
|
+
# Scaled, not hardcoded: a flat 16 would make the min_chars knob inert on
|
|
105
|
+
# CJK text (raising it filters nothing) and would RAISE the floor when a
|
|
106
|
+
# caller lowers it below 16 to catch shorter gates — a silent row-set loss
|
|
107
|
+
# on the merge-blocking deriver. 2//3 tracks the CJK density ratio.
|
|
108
|
+
return (min_chars * 2 // 3) if _CJK.search(text) else min_chars
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def split_obligations(block: str, chain: tuple[str, ...], min_chars: int) -> list[Obligation]:
|
|
112
|
+
"""Decompose one item/paragraph into sentence-level obligations.
|
|
113
|
+
|
|
114
|
+
Granularity matters: in a dense entrypoint a single bullet can be thousands of
|
|
115
|
+
bytes and carry several distinct gates, and the failure this whole rule exists
|
|
116
|
+
for — a qualifier drifting from the rule it modified onto the neighbouring one
|
|
117
|
+
— happens BETWEEN sentences of two such bullets. A line-granular walk sees only
|
|
118
|
+
"both bullets changed" and never surfaces the clause that moved.
|
|
119
|
+
|
|
120
|
+
The block's FIRST sentence is what gives the block its normative identity, so
|
|
121
|
+
it carries the enclosing chain unchanged and becomes the immediate host of
|
|
122
|
+
every later sentence in the same block.
|
|
123
|
+
"""
|
|
124
|
+
parts = [p.strip() for p in _SENTENCE.split(block) if effective_len(normalize(p)) >= length_floor(normalize(p), min_chars)]
|
|
125
|
+
if not parts:
|
|
126
|
+
return []
|
|
127
|
+
out = [Obligation(text=parts[0], chain=chain)]
|
|
128
|
+
host = chain + (content_key(parts[0]),)
|
|
129
|
+
out.extend(Obligation(text=p, chain=host) for p in parts[1:])
|
|
130
|
+
return out
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def parse(source: str, *, min_chars: int = 25) -> list[Obligation]:
|
|
134
|
+
"""Extract obligations with their governing chains.
|
|
135
|
+
|
|
136
|
+
An obligation is a list item or a standalone prose paragraph long enough to
|
|
137
|
+
carry a gate (`min_chars` after normalization). Table rows and fenced code are
|
|
138
|
+
skipped: they are data, not obligations that can be re-parented.
|
|
139
|
+
"""
|
|
140
|
+
obligations: list[Obligation] = []
|
|
141
|
+
headings: list[tuple[int, str]] = [] # (level, content_key)
|
|
142
|
+
list_stack: list[tuple[int, str]] = [] # (indent, content_key)
|
|
143
|
+
paragraph: list[str] = []
|
|
144
|
+
in_fence = False
|
|
145
|
+
# A list item may wrap across several lines. Its continuation lines belong to
|
|
146
|
+
# the item, not to a following paragraph — folding them in is what makes a
|
|
147
|
+
# cosmetic rewrap compare equal instead of reading as a rewritten line.
|
|
148
|
+
pending_item: list[str] | None = None
|
|
149
|
+
pending_indent = 0
|
|
150
|
+
|
|
151
|
+
def chain_now() -> tuple[str, ...]:
|
|
152
|
+
return tuple([key for _, key in headings] + [key for _, key in list_stack])
|
|
153
|
+
|
|
154
|
+
def flush_item() -> None:
|
|
155
|
+
nonlocal pending_item
|
|
156
|
+
if pending_item is None:
|
|
157
|
+
return
|
|
158
|
+
text = " ".join(pending_item)
|
|
159
|
+
obligations.extend(split_obligations(text, chain_now(), min_chars))
|
|
160
|
+
list_stack.append((pending_indent, content_key(text)))
|
|
161
|
+
pending_item = None
|
|
162
|
+
|
|
163
|
+
def flush_paragraph() -> None:
|
|
164
|
+
if not paragraph:
|
|
165
|
+
return
|
|
166
|
+
text = " ".join(paragraph)
|
|
167
|
+
obligations.extend(split_obligations(text, chain_now(), min_chars))
|
|
168
|
+
paragraph.clear()
|
|
169
|
+
|
|
170
|
+
for raw in source.split("\n"):
|
|
171
|
+
if _FENCE.match(raw):
|
|
172
|
+
flush_item()
|
|
173
|
+
flush_paragraph()
|
|
174
|
+
in_fence = not in_fence
|
|
175
|
+
continue
|
|
176
|
+
if in_fence:
|
|
177
|
+
continue
|
|
178
|
+
|
|
179
|
+
if not raw.strip():
|
|
180
|
+
flush_item()
|
|
181
|
+
flush_paragraph()
|
|
182
|
+
# A blank line ends a paragraph but not the enclosing list context;
|
|
183
|
+
# markdown allows loose lists, so the stack is popped by indentation.
|
|
184
|
+
continue
|
|
185
|
+
|
|
186
|
+
if _TABLE_ROW.match(raw):
|
|
187
|
+
flush_item()
|
|
188
|
+
flush_paragraph()
|
|
189
|
+
continue
|
|
190
|
+
|
|
191
|
+
heading = _HEADING.match(raw)
|
|
192
|
+
if heading:
|
|
193
|
+
flush_item()
|
|
194
|
+
flush_paragraph()
|
|
195
|
+
level = len(heading.group(1))
|
|
196
|
+
while headings and headings[-1][0] >= level:
|
|
197
|
+
headings.pop()
|
|
198
|
+
headings.append((level, content_key(heading.group(2))))
|
|
199
|
+
list_stack.clear()
|
|
200
|
+
continue
|
|
201
|
+
|
|
202
|
+
item = _LIST_ITEM.match(raw)
|
|
203
|
+
if item:
|
|
204
|
+
flush_item()
|
|
205
|
+
flush_paragraph()
|
|
206
|
+
indent = len(item.group(1).expandtabs(4))
|
|
207
|
+
while list_stack and list_stack[-1][0] >= indent:
|
|
208
|
+
list_stack.pop()
|
|
209
|
+
pending_item = [item.group(2)]
|
|
210
|
+
pending_indent = indent
|
|
211
|
+
continue
|
|
212
|
+
|
|
213
|
+
# An indented non-item line directly under an open item continues it.
|
|
214
|
+
if pending_item is not None and (
|
|
215
|
+
len(raw) - len(raw.lstrip())
|
|
216
|
+
) > pending_indent:
|
|
217
|
+
pending_item.append(raw.strip())
|
|
218
|
+
continue
|
|
219
|
+
|
|
220
|
+
flush_item()
|
|
221
|
+
# An UNINDENTED paragraph closes the list: in markdown it is a sibling of
|
|
222
|
+
# the list, not a child of its last item. Without this the paragraph would
|
|
223
|
+
# inherit whichever item happened to come last, so editing that item would
|
|
224
|
+
# report every following paragraph as re-parented — a false positive that
|
|
225
|
+
# is worse than a miss here, because it buries the real rows in noise.
|
|
226
|
+
if not raw[: len(raw) - len(raw.lstrip())]:
|
|
227
|
+
list_stack.clear()
|
|
228
|
+
paragraph.append(raw.strip())
|
|
229
|
+
|
|
230
|
+
flush_item()
|
|
231
|
+
flush_paragraph()
|
|
232
|
+
return obligations
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@dataclass(frozen=True)
|
|
236
|
+
class Row:
|
|
237
|
+
reason: str # "left-a-rewritten-line" | "governing-chain-changed"
|
|
238
|
+
text: str
|
|
239
|
+
before_chain: tuple[str, ...] = ()
|
|
240
|
+
after_chain: tuple[str, ...] = ()
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def derive_row_set(before: str, after: str) -> list[Row]:
|
|
244
|
+
"""Apply the row-set predicate: chain changed, or own text left a line."""
|
|
245
|
+
before_obligations = parse(before)
|
|
246
|
+
after_obligations = parse(after)
|
|
247
|
+
after_by_key: dict[str, list[Obligation]] = {}
|
|
248
|
+
for obligation in after_obligations:
|
|
249
|
+
after_by_key.setdefault(obligation.key, []).append(obligation)
|
|
250
|
+
|
|
251
|
+
rows: list[Row] = []
|
|
252
|
+
for obligation in before_obligations:
|
|
253
|
+
survivors = after_by_key.get(obligation.key)
|
|
254
|
+
if not survivors:
|
|
255
|
+
rows.append(Row(reason="left-a-rewritten-line", text=obligation.text))
|
|
256
|
+
continue
|
|
257
|
+
# Survives verbatim: it owes a row only if its governing chain moved.
|
|
258
|
+
# Compare against the closest surviving chain so a duplicated obligation
|
|
259
|
+
# is not reported as re-parented merely because a copy sits elsewhere.
|
|
260
|
+
if any(s.chain == obligation.chain for s in survivors):
|
|
261
|
+
continue
|
|
262
|
+
rows.append(
|
|
263
|
+
Row(
|
|
264
|
+
reason="governing-chain-changed",
|
|
265
|
+
text=obligation.text,
|
|
266
|
+
before_chain=obligation.chain,
|
|
267
|
+
after_chain=survivors[0].chain,
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
return rows
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def read_rev(repo: str, rev: str, path: str) -> str:
|
|
274
|
+
result = subprocess.run(
|
|
275
|
+
["git", "-C", repo, "show", f"{rev}:{path}"],
|
|
276
|
+
capture_output=True,
|
|
277
|
+
text=True,
|
|
278
|
+
)
|
|
279
|
+
if result.returncode != 0:
|
|
280
|
+
print(f"error: cannot read {rev}:{path}", file=sys.stderr)
|
|
281
|
+
raise SystemExit(2)
|
|
282
|
+
return result.stdout
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def main(argv: list[str]) -> int:
|
|
286
|
+
parser = argparse.ArgumentParser(add_help=True, description=__doc__)
|
|
287
|
+
parser.add_argument("--rev", nargs=3, metavar=("BEFORE_REV", "AFTER_REV", "PATH"))
|
|
288
|
+
parser.add_argument("--repo", default=".")
|
|
289
|
+
parser.add_argument("files", nargs="*", metavar="BEFORE_FILE AFTER_FILE")
|
|
290
|
+
args = parser.parse_args(argv)
|
|
291
|
+
|
|
292
|
+
if args.rev:
|
|
293
|
+
before_rev, after_rev, path = args.rev
|
|
294
|
+
before = read_rev(args.repo, before_rev, path)
|
|
295
|
+
after = read_rev(args.repo, after_rev, path)
|
|
296
|
+
label = path
|
|
297
|
+
elif len(args.files) == 2:
|
|
298
|
+
try:
|
|
299
|
+
before = open(args.files[0], encoding="utf-8").read()
|
|
300
|
+
after = open(args.files[1], encoding="utf-8").read()
|
|
301
|
+
except OSError as exc:
|
|
302
|
+
print(f"error: {exc}", file=sys.stderr)
|
|
303
|
+
return 2
|
|
304
|
+
label = args.files[1]
|
|
305
|
+
else:
|
|
306
|
+
parser.print_usage(sys.stderr)
|
|
307
|
+
return 2
|
|
308
|
+
|
|
309
|
+
rows = derive_row_set(before, after)
|
|
310
|
+
print(f"governing-chain-diff: {label}")
|
|
311
|
+
print(f"derived row set: {len(rows)}")
|
|
312
|
+
for row in rows:
|
|
313
|
+
print(f" [{row.reason}] {normalize(row.text)[:110]}")
|
|
314
|
+
if row.reason == "governing-chain-changed":
|
|
315
|
+
print(f" before chain: {' > '.join(c[:44] for c in row.before_chain)}")
|
|
316
|
+
print(f" after chain: {' > '.join(c[:44] for c in row.after_chain)}")
|
|
317
|
+
return 1 if rows else 0
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
if __name__ == "__main__":
|
|
321
|
+
raise SystemExit(main(sys.argv[1:]))
|