@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,708 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "digest"
|
|
5
|
+
require "json"
|
|
6
|
+
require "ripper"
|
|
7
|
+
|
|
8
|
+
# `Ripper.sexp` omits positions from tokenless statement nodes such as
|
|
9
|
+
# `return0` and `zsuper`. Append an inert location child to every semantic parser
|
|
10
|
+
# node so dead-subtree line collection also covers those statements without
|
|
11
|
+
# changing the event's existing child indexes.
|
|
12
|
+
class PositionedRubySexpBuilder < Ripper::SexpBuilderPP
|
|
13
|
+
Ripper::PARSER_EVENTS.each do |event|
|
|
14
|
+
define_method("on_#{event}") do |*arguments|
|
|
15
|
+
node = super(*arguments)
|
|
16
|
+
if node.is_a?(Array) && node[0].is_a?(Symbol) && !node[0].to_s.start_with?("@")
|
|
17
|
+
node << [:@__location, "", [lineno, column]]
|
|
18
|
+
end
|
|
19
|
+
node
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Register firing-path RESOLUTION gate: every `firing-path:` locator recorded in
|
|
26
|
+
# `references/source-register.md` must still resolve, for the WHOLE ledger — not
|
|
27
|
+
# only for rows added in the current diff.
|
|
28
|
+
#
|
|
29
|
+
# Why this exists as a separate gate from impact-chain-gate.rb: that gate is
|
|
30
|
+
# diff-scoped by design (it adjudicates whether an ADDED row earns its landing),
|
|
31
|
+
# so a historical row is validated exactly once, at the commit that wrote it.
|
|
32
|
+
# Nothing re-checks it afterwards. The ledger is append-only while the prose it
|
|
33
|
+
# anchors into is living text, so any later edit that MOVES or REWORDS an
|
|
34
|
+
# anchored sentence silently voids that row's firing evidence: the row keeps
|
|
35
|
+
# asserting a mechanical firing path that no longer exists, and every gate stays
|
|
36
|
+
# green because no gate looks. Observed shape: an entrypoint-slimming change
|
|
37
|
+
# relocated an anchored rule out of a `SKILL.md` into a reference and reworded it
|
|
38
|
+
# in the same commit; the full checker passed, and the break was found only by a
|
|
39
|
+
# human reading the register by hand.
|
|
40
|
+
#
|
|
41
|
+
# Contract: exits 1 and names every unresolved locator; exits 0 when all resolve.
|
|
42
|
+
# Invoked by check-ccl-skills.sh with the target repo root as ARGV[0].
|
|
43
|
+
#
|
|
44
|
+
# Locator forms accepted (mirroring the impact-chain gate's vocabulary):
|
|
45
|
+
# command:<repo-relative path> -> must exist and be executable
|
|
46
|
+
# file:<repo-relative path>#<anchor> -> file must exist and carry the anchor
|
|
47
|
+
# file:<path>.rb#line-sha256:<hex> -> a trimmed Ruby code line must hash to hex
|
|
48
|
+
#
|
|
49
|
+
# An anchor resolves EITHER as literal text in the file (the convention the
|
|
50
|
+
# impact-chain gate enforces on added rows) OR as a GitHub-style heading slug
|
|
51
|
+
# naming a real heading. The slug form is accepted because the ledger is
|
|
52
|
+
# append-only: a historical row that spelled its anchor as `#some-heading-slug`
|
|
53
|
+
# cannot be rewritten to the literal form, and the section it names genuinely
|
|
54
|
+
# exists, so failing it would be a false red with no legal repair.
|
|
55
|
+
#
|
|
56
|
+
# One declaration may carry several comma-separated locators; each is resolved
|
|
57
|
+
# independently. The split is on a comma that INTRODUCES another locator
|
|
58
|
+
# (`,` followed by `file:`/`command:`), never on every comma: literal anchors are
|
|
59
|
+
# natural-language rule text and three in this ledger already contain a comma
|
|
60
|
+
# ("...before landing it, not after challenge rounds"). Splitting naively would
|
|
61
|
+
# validate only the fragment before the comma, so deleting the rest of the
|
|
62
|
+
# anchored sentence would still pass — a false negative in exactly the direction
|
|
63
|
+
# this gate exists to close.
|
|
64
|
+
#
|
|
65
|
+
# `line-sha256:` is intentionally exact-line rather than substring evidence. It
|
|
66
|
+
# is for Ruby guard implementation lines where replacing executable-looking text
|
|
67
|
+
# with a comment must not preserve the locator. The digest is SHA-256 over
|
|
68
|
+
# `line.strip` bytes and may group its lowercase hex in four-character chunks
|
|
69
|
+
# with hyphens; whitespace-only reindentation is allowed, while commenting,
|
|
70
|
+
# rewording, or deleting the line turns the whole-ledger gate red. The matching
|
|
71
|
+
# line must also carry at least one Ripper token outside whitespace, comments,
|
|
72
|
+
# embedded docs, and heredoc/string content, and it must not sit in a statically
|
|
73
|
+
# unreachable branch or an uncalled lambda body. Other target languages fail
|
|
74
|
+
# closed until they have an equivalent classifier.
|
|
75
|
+
|
|
76
|
+
root = ARGV.fetch(0) { abort "usage: register-firing-path-resolution.rb <repo-root>" }
|
|
77
|
+
|
|
78
|
+
REGISTER = "skills/skill-extraction-workflow/references/source-register.md"
|
|
79
|
+
|
|
80
|
+
register_path = File.join(root, REGISTER)
|
|
81
|
+
unless File.file?(register_path)
|
|
82
|
+
warn "register_firing_path_gate_failed: #{REGISTER} not found under #{root}"
|
|
83
|
+
exit 1
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Waivers are intentionally empty in the distributed repository. A repository
|
|
87
|
+
# that adopts an append-only register may add reviewed, row-bound waivers here.
|
|
88
|
+
EXEMPT = {}.freeze
|
|
89
|
+
|
|
90
|
+
# `\p{Word}` rather than `[a-z0-9]`: GitHub keeps non-ASCII characters in a slug,
|
|
91
|
+
# and most headings in this repository are Chinese. Stripping them would collapse
|
|
92
|
+
# a CJK heading to an empty slug and permanently false-red a locator that names
|
|
93
|
+
# it — unrepairable, because the ledger row cannot be edited.
|
|
94
|
+
def slugify(heading)
|
|
95
|
+
heading.downcase.gsub(/[^[[:word:]]\s-]/, "").strip.gsub(/\s+/, "-")
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Fenced blocks are examples, not operative text. Both the anchor search and the
|
|
99
|
+
# heading scan run against the stripped body: a rule that was deleted but still
|
|
100
|
+
# appears inside a code sample is NOT a living carrier, and a `## Heading` inside
|
|
101
|
+
# a fence is not a real heading. Fence matching follows CommonMark — a fence
|
|
102
|
+
# closes only on a run of the SAME character at least as long as the opener — so
|
|
103
|
+
# a shorter inner run cannot terminate a longer outer fence.
|
|
104
|
+
def strip_fences(body)
|
|
105
|
+
out = []
|
|
106
|
+
opener = nil
|
|
107
|
+
body.each_line do |line|
|
|
108
|
+
if (m = line.match(/\A\s{0,3}(`{3,}|~{3,})/))
|
|
109
|
+
run = m[1]
|
|
110
|
+
if opener.nil?
|
|
111
|
+
opener = run
|
|
112
|
+
next
|
|
113
|
+
elsif run[0] == opener[0] && run.length >= opener.length
|
|
114
|
+
opener = nil
|
|
115
|
+
next
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
out << line if opener.nil?
|
|
119
|
+
end
|
|
120
|
+
out.join
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# GitHub's own duplicate-heading disambiguation: the first `## Setup` is `setup`,
|
|
124
|
+
# the second `setup-1`, the third `setup-2`. Reproduced exactly rather than by
|
|
125
|
+
# stripping a trailing `-N`, because stripping accepts `#setup-99` when no such
|
|
126
|
+
# anchor exists — trading a false positive for a false negative in a gate whose
|
|
127
|
+
# whole job is detecting dead anchors.
|
|
128
|
+
def heading_slugs(body)
|
|
129
|
+
seen = Hash.new(0)
|
|
130
|
+
body.scan(/^\#+\s+(.+?)\s*$/).flatten.map do |h|
|
|
131
|
+
base = slugify(h)
|
|
132
|
+
n = seen[base]
|
|
133
|
+
seen[base] += 1
|
|
134
|
+
n.zero? ? base : "#{base}-#{n}"
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Repo-relative containment. A locator that escapes the repository would resolve
|
|
139
|
+
# against content this gate does not govern, so a dead in-repo anchor could be
|
|
140
|
+
# "satisfied" from outside. Rejects absolute paths, `..` traversal, and symlinked
|
|
141
|
+
# targets that land outside the root.
|
|
142
|
+
# Split deliberately in two so a MISSING target reports "not found" rather than
|
|
143
|
+
# a misleading containment error: the two failures need different fixes.
|
|
144
|
+
def syntactically_contained?(rel)
|
|
145
|
+
!rel.start_with?("/") && !rel.split("/").include?("..")
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def resolves_inside?(root, rel)
|
|
149
|
+
real_root = File.realpath(root)
|
|
150
|
+
real = File.realpath(File.join(root, rel))
|
|
151
|
+
real == real_root || real.start_with?(real_root + File::SEPARATOR)
|
|
152
|
+
rescue Errno::ENOENT, Errno::ELOOP, Errno::ENAMETOOLONG
|
|
153
|
+
false
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
RUBY_NON_CODE_LINE_TOKENS = %i[
|
|
157
|
+
on_sp on_ignored_sp on_comment on_nl on_ignored_nl
|
|
158
|
+
on_tstring_content on_words_sep on_heredoc_end
|
|
159
|
+
on_embdoc on_embdoc_beg on_embdoc_end
|
|
160
|
+
].freeze
|
|
161
|
+
|
|
162
|
+
def ruby_code_line_numbers(body)
|
|
163
|
+
Ripper.lex(body).each_with_object({}) do |((line_number, _column), token_type, _text, _state), lines|
|
|
164
|
+
lines[line_number] = true unless RUBY_NON_CODE_LINE_TOKENS.include?(token_type)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def ruby_ast_each(node, &block)
|
|
169
|
+
return unless node.is_a?(Array)
|
|
170
|
+
|
|
171
|
+
yield node if node.first.is_a?(Symbol)
|
|
172
|
+
node.each { |child| ruby_ast_each(child, &block) if child.is_a?(Array) }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def ruby_ast_each_with_ancestors(node, ancestors = [], &block)
|
|
176
|
+
return unless node.is_a?(Array)
|
|
177
|
+
|
|
178
|
+
node_type = node.first if node.first.is_a?(Symbol)
|
|
179
|
+
yield node, ancestors if node_type
|
|
180
|
+
child_ancestors = node_type ? ancestors + [node] : ancestors
|
|
181
|
+
node.each do |child|
|
|
182
|
+
ruby_ast_each_with_ancestors(child, child_ancestors, &block) if child.is_a?(Array)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def ruby_ast_line_numbers(node)
|
|
187
|
+
lines = {}
|
|
188
|
+
ruby_ast_each(node) do |child|
|
|
189
|
+
next unless child.first.to_s.start_with?("@")
|
|
190
|
+
next unless child[2].is_a?(Array) && child[2][0].is_a?(Integer)
|
|
191
|
+
|
|
192
|
+
lines[child[2][0]] = true
|
|
193
|
+
end
|
|
194
|
+
lines
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def ruby_dead_body_line_numbers(body, preceding, code_lines)
|
|
198
|
+
body_lines = ruby_ast_line_numbers(body)
|
|
199
|
+
return {} if body_lines.empty?
|
|
200
|
+
|
|
201
|
+
preceding_line = ruby_ast_line_numbers(preceding).keys.max || 0
|
|
202
|
+
last_body_line = body_lines.keys.max
|
|
203
|
+
code_lines.select do |line_number, _|
|
|
204
|
+
line_number > preceding_line && line_number <= last_body_line
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def ruby_local_name(node, wrapper)
|
|
209
|
+
return unless node.is_a?(Array) && node[0] == wrapper
|
|
210
|
+
|
|
211
|
+
token = node[1]
|
|
212
|
+
token[1] if token.is_a?(Array) && token[0] == :@ident
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def ruby_condition_truthiness(node)
|
|
216
|
+
return :unknown unless node.is_a?(Array)
|
|
217
|
+
|
|
218
|
+
if node[0] == :var_ref && node[1].is_a?(Array) && node[1][0] == :@kw
|
|
219
|
+
return :falsey if %w[false nil].include?(node[1][1])
|
|
220
|
+
return :truthy if node[1][1] == "true"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
return ruby_condition_truthiness(node[1][0]) if node[0] == :paren &&
|
|
224
|
+
node[1].is_a?(Array) &&
|
|
225
|
+
node[1].length == 1
|
|
226
|
+
|
|
227
|
+
:unknown
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def ruby_method_definition_name(node)
|
|
231
|
+
return unless node.is_a?(Array) && node[0] == :def
|
|
232
|
+
|
|
233
|
+
token = node[1]
|
|
234
|
+
token[1] if token.is_a?(Array) && token[0] == :@ident
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def ruby_direct_method_call(node)
|
|
238
|
+
token = case node[0]
|
|
239
|
+
when :vcall, :fcall, :command then node[1]
|
|
240
|
+
end
|
|
241
|
+
return unless token.is_a?(Array) && token[0] == :@ident
|
|
242
|
+
|
|
243
|
+
[token[1], token[2][0]]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def ruby_reachable_method_definition_ids(ast, unreachable)
|
|
247
|
+
definitions = Hash.new { |hash, key| hash[key] = [] }
|
|
248
|
+
top_level_calls = []
|
|
249
|
+
method_calls = Hash.new { |hash, key| hash[key] = [] }
|
|
250
|
+
|
|
251
|
+
ruby_ast_each_with_ancestors(ast) do |node, ancestors|
|
|
252
|
+
if (name = ruby_method_definition_name(node))
|
|
253
|
+
definition_line = node[1][2][0]
|
|
254
|
+
deferred = ancestors.any? do |ancestor|
|
|
255
|
+
%i[class module sclass def defs lambda].include?(ancestor[0])
|
|
256
|
+
end
|
|
257
|
+
definitions[name] << [node.object_id, definition_line] unless
|
|
258
|
+
deferred || unreachable[definition_line]
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
call = ruby_direct_method_call(node)
|
|
262
|
+
next unless call
|
|
263
|
+
|
|
264
|
+
name, call_line = call
|
|
265
|
+
next if unreachable[call_line]
|
|
266
|
+
next if ancestors.any? { |ancestor| %i[class module sclass defs lambda].include?(ancestor[0]) }
|
|
267
|
+
|
|
268
|
+
enclosing_definitions = ancestors.select { |ancestor| ancestor[0] == :def }
|
|
269
|
+
if enclosing_definitions.empty?
|
|
270
|
+
top_level_calls << [name, call_line]
|
|
271
|
+
elsif enclosing_definitions.length == 1
|
|
272
|
+
method_calls[enclosing_definitions[0].object_id] << name
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
reachable = {}
|
|
277
|
+
pending = top_level_calls.filter_map do |name, entry_line|
|
|
278
|
+
target = definitions[name].select { |_id, line| line < entry_line }.max_by(&:last)
|
|
279
|
+
[target[0], entry_line] if target
|
|
280
|
+
end
|
|
281
|
+
visited = {}
|
|
282
|
+
|
|
283
|
+
until pending.empty?
|
|
284
|
+
definition_id, entry_line = pending.shift
|
|
285
|
+
next if visited[[definition_id, entry_line]]
|
|
286
|
+
|
|
287
|
+
visited[[definition_id, entry_line]] = true
|
|
288
|
+
reachable[definition_id] = true
|
|
289
|
+
method_calls[definition_id].each do |name|
|
|
290
|
+
target = definitions[name].select { |_id, line| line < entry_line }.max_by(&:last)
|
|
291
|
+
pending << [target[0], entry_line] if target
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
reachable
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def ruby_direct_lambda_receiver(receiver)
|
|
299
|
+
candidate = receiver
|
|
300
|
+
loop do
|
|
301
|
+
return candidate if candidate.is_a?(Array) && candidate[0] == :lambda
|
|
302
|
+
return unless candidate.is_a?(Array) && candidate[0] == :paren
|
|
303
|
+
return unless candidate[1].is_a?(Array) && candidate[1].length == 1
|
|
304
|
+
|
|
305
|
+
candidate = candidate[1][0]
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def ruby_lambda_invocations(ast, unreachable)
|
|
310
|
+
bindings = {}
|
|
311
|
+
assignments = Hash.new { |hash, key| hash[key] = [] }
|
|
312
|
+
invocation_lines = Hash.new { |hash, key| hash[key] = [] }
|
|
313
|
+
invoked_lambdas = {}
|
|
314
|
+
reachable_methods = ruby_reachable_method_definition_ids(ast, unreachable)
|
|
315
|
+
|
|
316
|
+
ruby_ast_each_with_ancestors(ast) do |node, ancestors|
|
|
317
|
+
enclosing_scope = ancestors.reverse.find do |ancestor|
|
|
318
|
+
%i[lambda def defs].include?(ancestor[0])
|
|
319
|
+
end
|
|
320
|
+
scope_id = enclosing_scope&.object_id
|
|
321
|
+
|
|
322
|
+
if node[0] == :assign
|
|
323
|
+
name = ruby_local_name(node[1], :var_field)
|
|
324
|
+
if name
|
|
325
|
+
assignment_line = node[1][1][2][0]
|
|
326
|
+
next if unreachable[assignment_line]
|
|
327
|
+
|
|
328
|
+
assignments[[scope_id, name]] << assignment_line
|
|
329
|
+
bindings[node[2].object_id] = [scope_id, name, assignment_line] if
|
|
330
|
+
node[2].is_a?(Array) && node[2][0] == :lambda
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
next unless node[0] == :call
|
|
335
|
+
next unless node[3].is_a?(Array) && node[3][0] == :@ident && node[3][1] == "call"
|
|
336
|
+
next if unreachable[node[3][2][0]]
|
|
337
|
+
next if ancestors.any? { |ancestor| ancestor[0] == :lambda }
|
|
338
|
+
next if enclosing_scope&.first == :defs
|
|
339
|
+
next if enclosing_scope&.first == :def && !reachable_methods[scope_id]
|
|
340
|
+
|
|
341
|
+
receiver = node[1]
|
|
342
|
+
name = ruby_local_name(receiver, :var_ref)
|
|
343
|
+
invocation_lines[[scope_id, name]] << node[3][2][0] if name
|
|
344
|
+
direct_lambda = ruby_direct_lambda_receiver(receiver)
|
|
345
|
+
invoked_lambdas[direct_lambda.object_id] = true if direct_lambda
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
bindings.each do |lambda_id, (scope_id, name, binding_line)|
|
|
349
|
+
key = [scope_id, name]
|
|
350
|
+
next_assignment = assignments[key].select { |line| line > binding_line }.min
|
|
351
|
+
called = invocation_lines[key].any? do |line|
|
|
352
|
+
line > binding_line && (next_assignment.nil? || line < next_assignment)
|
|
353
|
+
end
|
|
354
|
+
invoked_lambdas[lambda_id] = true if called
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
invoked_lambdas
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def ruby_unreachable_line_numbers(ast, code_lines)
|
|
361
|
+
unreachable = {}
|
|
362
|
+
|
|
363
|
+
ruby_ast_each(ast) do |node|
|
|
364
|
+
case node[0]
|
|
365
|
+
when :if, :elsif, :unless
|
|
366
|
+
truthiness = ruby_condition_truthiness(node[1])
|
|
367
|
+
body = node[2]
|
|
368
|
+
alternate = node[3]
|
|
369
|
+
positive_condition = %i[if elsif].include?(node[0])
|
|
370
|
+
unreachable.merge!(ruby_dead_body_line_numbers(body, node[1], code_lines)) if
|
|
371
|
+
(positive_condition && truthiness == :falsey) ||
|
|
372
|
+
(node[0] == :unless && truthiness == :truthy)
|
|
373
|
+
unreachable.merge!(ruby_dead_body_line_numbers(alternate, [node[1], body], code_lines)) if
|
|
374
|
+
(positive_condition && truthiness == :truthy) ||
|
|
375
|
+
(node[0] == :unless && truthiness == :falsey)
|
|
376
|
+
when :if_mod, :unless_mod
|
|
377
|
+
truthiness = ruby_condition_truthiness(node[1])
|
|
378
|
+
statement = node[2]
|
|
379
|
+
unreachable.merge!(ruby_ast_line_numbers(statement)) if
|
|
380
|
+
(node[0] == :if_mod && truthiness == :falsey) ||
|
|
381
|
+
(node[0] == :unless_mod && truthiness == :truthy)
|
|
382
|
+
when :while
|
|
383
|
+
unreachable.merge!(ruby_dead_body_line_numbers(node[2], node[1], code_lines)) if
|
|
384
|
+
ruby_condition_truthiness(node[1]) == :falsey
|
|
385
|
+
when :while_mod
|
|
386
|
+
unreachable.merge!(ruby_ast_line_numbers(node[2])) if
|
|
387
|
+
node[2][0] != :begin && ruby_condition_truthiness(node[1]) == :falsey
|
|
388
|
+
when :until
|
|
389
|
+
unreachable.merge!(ruby_dead_body_line_numbers(node[2], node[1], code_lines)) if
|
|
390
|
+
ruby_condition_truthiness(node[1]) == :truthy
|
|
391
|
+
when :until_mod
|
|
392
|
+
unreachable.merge!(ruby_ast_line_numbers(node[2])) if
|
|
393
|
+
node[2][0] != :begin && ruby_condition_truthiness(node[1]) == :truthy
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
invoked_lambdas = ruby_lambda_invocations(ast, unreachable)
|
|
398
|
+
ruby_ast_each(ast) do |node|
|
|
399
|
+
next unless node[0] == :lambda
|
|
400
|
+
next if invoked_lambdas[node.object_id]
|
|
401
|
+
|
|
402
|
+
unreachable.merge!(ruby_dead_body_line_numbers(node[2], node[1], code_lines))
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
unreachable
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def ruby_line_classification(body)
|
|
409
|
+
code_lines = ruby_code_line_numbers(body)
|
|
410
|
+
builder = PositionedRubySexpBuilder.new(body)
|
|
411
|
+
ast = builder.parse
|
|
412
|
+
return [code_lines, {}, false] if ast.nil? || builder.error?
|
|
413
|
+
|
|
414
|
+
unreachable = ruby_unreachable_line_numbers(ast, code_lines)
|
|
415
|
+
reachable = code_lines.reject { |line_number, _| unreachable[line_number] }
|
|
416
|
+
[code_lines, reachable, true]
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
unresolved = []
|
|
420
|
+
malformed = []
|
|
421
|
+
locator_count = 0
|
|
422
|
+
# Where each EXEMPT locator was actually cited. A waiver is written for ONE
|
|
423
|
+
# historical row that can no longer be repaired; a second row quoting the same
|
|
424
|
+
# retired locator is a new claim, not that row, and must not inherit the waiver.
|
|
425
|
+
# Counting uses is what makes that decidable without a row identity — the ledger
|
|
426
|
+
# is append-only and its line numbers shift, so nothing else is stable.
|
|
427
|
+
exempt_uses = {}
|
|
428
|
+
EXEMPT_USE_ALLOWANCE = 1
|
|
429
|
+
EXEMPT_ROW_DIGESTS = {}.freeze
|
|
430
|
+
# TRUST BOUNDARY. The count answers "one row"; it cannot answer "WHICH row", so
|
|
431
|
+
# it is paired with the digest of the citing row in EXEMPT_ROW_DIGESTS below.
|
|
432
|
+
# An earlier version of this comment argued the opposite — that no stable
|
|
433
|
+
# identity exists because any candidate drifts or must be regenerated by the
|
|
434
|
+
# author it constrains. That was wrong for a digest specifically: the ledger is
|
|
435
|
+
# append-only, so rows added elsewhere do not change this line, and the failure
|
|
436
|
+
# this defends against is an accidental reflow or a repurposed row, which reds
|
|
437
|
+
# without anyone touching code.
|
|
438
|
+
# What it does NOT defend against is an author who edits EXEMPT and its digest
|
|
439
|
+
# together — a visible code change under normal review, the same posture the two
|
|
440
|
+
# legacy anchorless entries have carried since they landed.
|
|
441
|
+
fence = nil
|
|
442
|
+
|
|
443
|
+
File.foreach(register_path).with_index(1) do |line, lineno|
|
|
444
|
+
# Same CommonMark rule as strip_fences: a naive boolean toggle would close a
|
|
445
|
+
# ```` fence on an inner ``` run and then treat the REAL closing run as an
|
|
446
|
+
# opener, silently skipping every live row after it.
|
|
447
|
+
if (m = line.match(/\A\s{0,3}(`{3,}|~{3,})/))
|
|
448
|
+
run = m[1]
|
|
449
|
+
if fence.nil?
|
|
450
|
+
fence = run
|
|
451
|
+
next
|
|
452
|
+
elsif run[0] == fence[0] && run.length >= fence.length
|
|
453
|
+
fence = nil
|
|
454
|
+
next
|
|
455
|
+
end
|
|
456
|
+
end
|
|
457
|
+
# Only table rows carry declarations; fenced examples and narrative prose do
|
|
458
|
+
# not, and treating a documentation example as a live locator would be an
|
|
459
|
+
# unrepairable false positive.
|
|
460
|
+
next unless fence.nil?
|
|
461
|
+
next unless line.start_with?("|")
|
|
462
|
+
|
|
463
|
+
# `(?<!`)` skips an inline-code mention such as `` `firing-path:` `` — that is
|
|
464
|
+
# prose ABOUT the key (this file's own methodology rows do it), not a
|
|
465
|
+
# declaration, and must not be demanded to yield a locator.
|
|
466
|
+
line.scan(/(?<!`)firing-path:\s*([^|;]*)/) do |(value)|
|
|
467
|
+
locators = value.split(/,(?=\s*(?:file|command):)/)
|
|
468
|
+
.map(&:strip)
|
|
469
|
+
.select { |l| l.start_with?("file:", "command:") }
|
|
470
|
+
|
|
471
|
+
# A declaration that parses to nothing is not "clean" — it is a row whose
|
|
472
|
+
# firing evidence this gate silently failed to check.
|
|
473
|
+
if locators.empty?
|
|
474
|
+
malformed << [lineno, value.strip]
|
|
475
|
+
next
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
locators.each do |locator|
|
|
479
|
+
locator_count += 1
|
|
480
|
+
anchor_waived = EXEMPT.key?(locator)
|
|
481
|
+
if anchor_waived
|
|
482
|
+
exempt_uses[locator] ||= []
|
|
483
|
+
exempt_uses[locator] << lineno
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
kind, _, rest = locator.partition(":")
|
|
487
|
+
if kind == "command"
|
|
488
|
+
rel = rest.strip
|
|
489
|
+
target = File.join(root, rel)
|
|
490
|
+
if !syntactically_contained?(rel)
|
|
491
|
+
unresolved << [lineno, locator, "path escapes the repository"]
|
|
492
|
+
elsif !File.file?(target)
|
|
493
|
+
unresolved << [lineno, locator, "executable not found"]
|
|
494
|
+
elsif !resolves_inside?(root, rel)
|
|
495
|
+
unresolved << [lineno, locator, "path escapes the repository"]
|
|
496
|
+
elsif !File.executable?(target)
|
|
497
|
+
unresolved << [lineno, locator, "not executable"]
|
|
498
|
+
end
|
|
499
|
+
else
|
|
500
|
+
rel, _, anchor = rest.partition("#")
|
|
501
|
+
rel = rel.strip
|
|
502
|
+
anchor = anchor.strip
|
|
503
|
+
if anchor.empty? && !anchor_waived
|
|
504
|
+
unresolved << [lineno, locator, "file locator carries no #anchor"]
|
|
505
|
+
next
|
|
506
|
+
end
|
|
507
|
+
target = File.join(root, rel)
|
|
508
|
+
if !syntactically_contained?(rel)
|
|
509
|
+
unresolved << [lineno, locator, "path escapes the repository"]
|
|
510
|
+
next
|
|
511
|
+
end
|
|
512
|
+
if !File.file?(target)
|
|
513
|
+
unresolved << [lineno, locator, "file not found"]
|
|
514
|
+
next
|
|
515
|
+
end
|
|
516
|
+
if !resolves_inside?(root, rel)
|
|
517
|
+
unresolved << [lineno, locator, "path escapes the repository"]
|
|
518
|
+
next
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
next if anchor.empty? # exempt legacy locator: existence checked above
|
|
522
|
+
# An EXEMPT entry that names the anchor waives the anchor-CONTENT check
|
|
523
|
+
# as well: the rule was deliberately relocated, so the recorded text
|
|
524
|
+
# will never sit at this path again and the append-only row cannot be
|
|
525
|
+
# repaired. File existence (checked above) still applies, so deleting or
|
|
526
|
+
# renaming the target still reds, and the use-count check below stops a
|
|
527
|
+
# NEW row from inheriting the waiver by quoting the retired locator.
|
|
528
|
+
next if anchor_waived
|
|
529
|
+
|
|
530
|
+
raw_body = File.read(target)
|
|
531
|
+
body = strip_fences(raw_body)
|
|
532
|
+
if anchor.start_with?("line-sha256:")
|
|
533
|
+
encoded_line_sha256 = anchor.delete_prefix("line-sha256:")
|
|
534
|
+
expected_line_sha256 = encoded_line_sha256.delete("-")
|
|
535
|
+
unless expected_line_sha256.match?(/\A[0-9a-f]{64}\z/)
|
|
536
|
+
unresolved << [lineno, locator, "line-sha256 anchor is not 64 lowercase hex characters after grouping"]
|
|
537
|
+
next
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
unless File.extname(target) == ".rb"
|
|
541
|
+
unresolved << [lineno, locator, "line-sha256 target language has no code-token classifier"]
|
|
542
|
+
next
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
ruby_code_lines, ruby_reachable_lines, ruby_parsed = ruby_line_classification(raw_body)
|
|
546
|
+
digest_lines = raw_body.each_line.with_index(1).filter_map do |source_line, line_number|
|
|
547
|
+
normalized_line = source_line.strip
|
|
548
|
+
next if normalized_line.empty?
|
|
549
|
+
next unless Digest::SHA256.hexdigest(normalized_line) == expected_line_sha256
|
|
550
|
+
|
|
551
|
+
line_number
|
|
552
|
+
end
|
|
553
|
+
next if digest_lines.any? { |line_number| ruby_reachable_lines[line_number] }
|
|
554
|
+
|
|
555
|
+
if digest_lines.any? { |line_number| ruby_code_lines[line_number] }
|
|
556
|
+
reason = if ruby_parsed
|
|
557
|
+
"line-sha256 source line is not statically reachable"
|
|
558
|
+
else
|
|
559
|
+
"line-sha256 target Ruby did not parse"
|
|
560
|
+
end
|
|
561
|
+
unresolved << [lineno, locator, reason]
|
|
562
|
+
next
|
|
563
|
+
end
|
|
564
|
+
|
|
565
|
+
unresolved << [lineno, locator, "line-sha256 source line absent from target"]
|
|
566
|
+
next
|
|
567
|
+
end
|
|
568
|
+
next if body.include?(anchor)
|
|
569
|
+
next if heading_slugs(body).include?(anchor.downcase)
|
|
570
|
+
|
|
571
|
+
unresolved << [lineno, locator, "anchor text absent from target"]
|
|
572
|
+
end
|
|
573
|
+
end
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
# Over-use of a waiver is a violation, reported against the EXTRA citations only
|
|
578
|
+
# (the first use is the historical row the waiver was written for). Reporting
|
|
579
|
+
# every use would red the legitimate row and leave no repair path in an
|
|
580
|
+
# append-only ledger.
|
|
581
|
+
# Over-use of a waiver is a violation, reported against the EXTRA rows only
|
|
582
|
+
# (the first row is the historical one the waiver was written for). Reporting
|
|
583
|
+
# every use would red the legitimate row and leave no repair path in an
|
|
584
|
+
# append-only ledger. Distinct ROWS, not raw citations: one row that happens to
|
|
585
|
+
# name the same retired locator twice is still that one unrepairable row, and
|
|
586
|
+
# counting citations would false-red it.
|
|
587
|
+
register_lines = File.readlines(register_path)
|
|
588
|
+
# The digest table is INJECTED, not self-calibrated. An earlier version enabled
|
|
589
|
+
# the layer only once some recorded row still matched, so that a synthetic
|
|
590
|
+
# fixture ledger would not red — but that made "rewrite every waived row at
|
|
591
|
+
# once" disable the whole layer, which is precisely the case it should catch.
|
|
592
|
+
# Production takes the built-in table and enforces it unconditionally; a test or
|
|
593
|
+
# a repository vendoring this gate supplies its own table (an empty one means it
|
|
594
|
+
# binds no waivers). Injection is a declared seam, visible in the environment and
|
|
595
|
+
# never set in CI, rather than an inference the gate makes about which ledger it
|
|
596
|
+
# is looking at.
|
|
597
|
+
digest_table_path = ENV["REGISTER_FIRING_PATH_EXEMPT_DIGESTS"].to_s
|
|
598
|
+
exempt_row_digests =
|
|
599
|
+
if digest_table_path.empty?
|
|
600
|
+
EXEMPT_ROW_DIGESTS
|
|
601
|
+
else
|
|
602
|
+
begin
|
|
603
|
+
parsed = JSON.parse(File.read(digest_table_path))
|
|
604
|
+
raise TypeError, "not an object" unless parsed.is_a?(Hash)
|
|
605
|
+
parsed
|
|
606
|
+
rescue StandardError => e
|
|
607
|
+
warn "register_firing_path_exempt_digest_table_unreadable: #{digest_table_path}: #{e.message}"
|
|
608
|
+
exit 2
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
# The seam is usable but never silent: an injected table can only ever be weaker
|
|
612
|
+
# than the built-in one for this ledger, so a run that used it is not a clean
|
|
613
|
+
# landing — including the case where a test environment leaks into a real run.
|
|
614
|
+
# The caller keys off this line and downgrades to interim; without it the seam
|
|
615
|
+
# would be a quiet bypass of the digest and missing-row layers.
|
|
616
|
+
unless digest_table_path.empty?
|
|
617
|
+
puts "register_firing_path_exempt_digests_injected: #{digest_table_path} " \
|
|
618
|
+
"(built-in waiver-row bindings not enforced; this run is interim, not clean-landing)"
|
|
619
|
+
end
|
|
620
|
+
# Iterate the EXPECTED entries, not only the ones still cited: a waived row that
|
|
621
|
+
# was DELETED leaves its locator out of `exempt_uses` entirely, so a loop over
|
|
622
|
+
# observed uses would never look at it and the run would report success while a
|
|
623
|
+
# recorded historical row silently vanished. Only meaningful once the digest
|
|
624
|
+
# layer is calibrated to this ledger; on a foreign register every entry is
|
|
625
|
+
# legitimately uncited.
|
|
626
|
+
exempt_row_digests.each_key do |locator|
|
|
627
|
+
next unless (exempt_uses[locator] || []).empty?
|
|
628
|
+
unresolved << [1, locator,
|
|
629
|
+
"EXEMPT entry has no citing row in the ledger; the waived historical row was deleted " \
|
|
630
|
+
"or its locator was edited, so the waiver now covers nothing — restore the row, or " \
|
|
631
|
+
"retire the EXEMPT entry and its digest in the same change"]
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
exempt_uses.each do |locator, linenos|
|
|
635
|
+
rows = linenos.uniq.sort
|
|
636
|
+
if rows.length > EXEMPT_USE_ALLOWANCE
|
|
637
|
+
rows.drop(EXEMPT_USE_ALLOWANCE).each do |lineno|
|
|
638
|
+
unresolved << [lineno, locator,
|
|
639
|
+
"EXEMPT locator cited by #{rows.length} rows (allowance #{EXEMPT_USE_ALLOWANCE}); " \
|
|
640
|
+
"a waiver covers the one unrepairable historical row at line #{rows.first}, " \
|
|
641
|
+
"not a new row quoting the same retired locator"]
|
|
642
|
+
end
|
|
643
|
+
next
|
|
644
|
+
end
|
|
645
|
+
# The count says "one row"; the digest says WHICH row. Without it, deleting the
|
|
646
|
+
# historical row and writing a different claim that cites the same locator keeps
|
|
647
|
+
# the count at 1 and silently inherits the waiver.
|
|
648
|
+
expected = exempt_row_digests[locator]
|
|
649
|
+
unless expected
|
|
650
|
+
# A waiver with no recorded row identity keeps only the use-count layer,
|
|
651
|
+
# which cannot tell a rewritten or repurposed row from the one that was
|
|
652
|
+
# waived. On the BUILT-IN table that is a silent downgrade, so a new EXEMPT
|
|
653
|
+
# entry added without its digest fails here rather than quietly landing
|
|
654
|
+
# weaker than its siblings. An INJECTED table is the injector's declaration
|
|
655
|
+
# about its own ledger — the missing binding is the point, and that run is
|
|
656
|
+
# already downgraded to interim by the announcement above.
|
|
657
|
+
if digest_table_path.empty?
|
|
658
|
+
unresolved << [rows.first, locator,
|
|
659
|
+
"EXEMPT entry has no recorded citing-row digest; every waiver must bind the row it " \
|
|
660
|
+
"covers — add the row's SHA-256 to EXEMPT_ROW_DIGESTS in the same change"]
|
|
661
|
+
end
|
|
662
|
+
next
|
|
663
|
+
end
|
|
664
|
+
lineno = rows.first
|
|
665
|
+
actual = Digest::SHA256.hexdigest(register_lines[lineno - 1].to_s.rstrip)
|
|
666
|
+
next if actual == expected
|
|
667
|
+
unresolved << [lineno, locator,
|
|
668
|
+
"EXEMPT citing row does not match the waived row (digest #{actual[0, 12]} != #{expected[0, 12]}); " \
|
|
669
|
+
"a waiver covers one specific unrepairable historical row, so a rewritten or replaced row " \
|
|
670
|
+
"does not inherit it — restore the row, or land a new waiver entry with its own digest and reason"]
|
|
671
|
+
end
|
|
672
|
+
|
|
673
|
+
# Both groups print before exiting. Bailing out on `malformed` alone would hide
|
|
674
|
+
# every unresolved locator and every EXEMPT over-use in the same run, so a fixer
|
|
675
|
+
# would have to rerun the gate once per class to discover them.
|
|
676
|
+
unless malformed.empty?
|
|
677
|
+
warn "register_firing_path_malformed: a firing-path declaration parsed to zero locators"
|
|
678
|
+
warn " cause: the value is not `file:<repo-relative path>#<anchor>` or `command:<repo-relative path>`."
|
|
679
|
+
warn " An anchor containing `;` or `|` is truncated by the cell grammar — reword it."
|
|
680
|
+
malformed.each { |lineno, value| warn " #{REGISTER}:#{lineno}: #{value.inspect}" }
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
unless unresolved.empty?
|
|
684
|
+
warn "register_firing_path_unresolved: a recorded firing path no longer resolves"
|
|
685
|
+
warn " cause: the anchored rule was moved, reworded, or deleted after its row landed,"
|
|
686
|
+
warn " so that row now asserts firing evidence that does not exist."
|
|
687
|
+
warn " fix: restore the anchored text at its recorded location, or (when the move was"
|
|
688
|
+
warn " intended) append a superseding row and add the old locator to EXEMPT with a reason."
|
|
689
|
+
unresolved.each do |lineno, locator, why|
|
|
690
|
+
warn " #{REGISTER}:#{lineno}: #{why}: #{locator}"
|
|
691
|
+
end
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
exit 1 unless malformed.empty? && unresolved.empty?
|
|
695
|
+
|
|
696
|
+
# NO zero-locator self-check here, deliberately. Two rounds of it each shipped a
|
|
697
|
+
# false RED: as a caller-side non-zero floor it red a legitimately
|
|
698
|
+
# declaration-free register, and as a marker count here it red a register whose
|
|
699
|
+
# only declaration-looking row was a fenced example — because any oracle cheap
|
|
700
|
+
# enough to be independent of the row/cell parser is also too cheap to tell a
|
|
701
|
+
# live declaration from an illustration of one, and any oracle that CAN tell
|
|
702
|
+
# them apart has re-implemented the parser it was meant to check.
|
|
703
|
+
# The threat it chased is "the parser stopped recognizing the ledger", which is
|
|
704
|
+
# a code defect in this file, caught by the resolution suite's own RED cases
|
|
705
|
+
# (an anchor mutation must turn the gate red) rather than by the gate grading
|
|
706
|
+
# its own eyesight at runtime.
|
|
707
|
+
|
|
708
|
+
puts "register_firing_path_resolution_ok (#{locator_count} locators resolved)"
|