@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,724 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression tests for register-firing-path-resolution.rb.
|
|
3
|
+
#
|
|
4
|
+
# The gap this gate closes: impact-chain-gate.rb is diff-scoped, so a register
|
|
5
|
+
# row's firing path is machine-checked exactly once — at the commit that added
|
|
6
|
+
# the row. Any later edit that MOVES or REWORDS the anchored rule voids that
|
|
7
|
+
# row's firing evidence while every gate stays green. Observed in an entrypoint-
|
|
8
|
+
# slimming change that relocated an anchored rule out of a SKILL.md and reworded
|
|
9
|
+
# it in the same commit.
|
|
10
|
+
#
|
|
11
|
+
# Each assertion below is mutation-verified: the fixture is built GREEN first,
|
|
12
|
+
# then exactly one property is broken and the gate must go RED naming that
|
|
13
|
+
# locator. A test that only ever asserts "clean stays clean" would pass with the
|
|
14
|
+
# whole detection deleted, so every RED case here has a paired GREEN control.
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
18
|
+
GATE="$SCRIPT_DIR/register-firing-path-resolution.rb"
|
|
19
|
+
[ -f "$GATE" ] || { echo "FAIL: gate not found: $GATE" >&2; exit 1; }
|
|
20
|
+
|
|
21
|
+
TMP="$(mktemp -d "${TMPDIR:-/tmp}/regfiring.XXXXXX")"
|
|
22
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
23
|
+
|
|
24
|
+
passed=0
|
|
25
|
+
fail() { echo "FAIL: $*" >&2; exit 1; }
|
|
26
|
+
pass() { passed=$((passed + 1)); echo "PASS: $*"; }
|
|
27
|
+
assert_rc() { [ "$1" = "$2" ] || fail "expected rc=$2 got rc=$1 ($3)"; }
|
|
28
|
+
assert_contains() { case "$2" in *"$1"*) : ;; *) fail "expected output to contain '$1' ($3)";; esac; }
|
|
29
|
+
assert_not_contains() { case "$2" in *"$1"*) fail "expected output NOT to contain '$1' ($3)";; *) : ;; esac; }
|
|
30
|
+
|
|
31
|
+
REGDIR="skills/skill-extraction-workflow/references"
|
|
32
|
+
|
|
33
|
+
# Builds a fixture repo root whose register carries exactly the firing-path
|
|
34
|
+
# declarations passed as arguments (one per line, already formatted as a row).
|
|
35
|
+
new_fixture() {
|
|
36
|
+
FIX="$TMP/$1"; shift
|
|
37
|
+
rm -rf "$FIX"
|
|
38
|
+
mkdir -p "$FIX/$REGDIR" "$FIX/skills/demo-skill/scripts"
|
|
39
|
+
cat > "$FIX/skills/demo-skill/SKILL.md" <<'MD'
|
|
40
|
+
# Demo Skill
|
|
41
|
+
|
|
42
|
+
## Mechanical demo gate
|
|
43
|
+
|
|
44
|
+
1. Never bypass the demo isolation boundary when dispatching work.
|
|
45
|
+
MD
|
|
46
|
+
printf '#!/usr/bin/env bash\nexit 0\n' > "$FIX/skills/demo-skill/scripts/demo.sh"
|
|
47
|
+
printf 'guard_enabled = true\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
48
|
+
chmod +x "$FIX/skills/demo-skill/scripts/demo.sh"
|
|
49
|
+
{ echo "| head | head | head |"; for row in "$@"; do echo "$row"; done; } \
|
|
50
|
+
> "$FIX/$REGDIR/source-register.md"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# These fixtures build SYNTHETIC ledgers, which by construction contain none of
|
|
54
|
+
# the real repository's waived rows. The gate binds each waiver to its citing
|
|
55
|
+
# row's digest and fails closed when a recorded row is missing, so the fixtures
|
|
56
|
+
# inject their own (empty) digest table: no waiver is digest-bound here, which is
|
|
57
|
+
# the truth for a synthetic ledger. Production sets no such variable and enforces
|
|
58
|
+
# the built-in table unconditionally; the real-ledger digest and missing-row
|
|
59
|
+
# cases live in test_register_firing_path_wiring.sh, which drives a clone of the
|
|
60
|
+
# actual repository.
|
|
61
|
+
EMPTY_DIGEST_TABLE="$TMP/empty-exempt-digests.json"
|
|
62
|
+
printf '{}\n' > "$EMPTY_DIGEST_TABLE"
|
|
63
|
+
|
|
64
|
+
run_gate() {
|
|
65
|
+
set +e
|
|
66
|
+
out="$(REGISTER_FIRING_PATH_EXEMPT_DIGESTS="$EMPTY_DIGEST_TABLE" ruby "$GATE" "$1" 2>&1)"
|
|
67
|
+
rc=$?
|
|
68
|
+
set -e
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
LITERAL='| p | c | prose; behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/demo-skill/SKILL.md#Never bypass the demo isolation boundary | `updated` | demo |'
|
|
72
|
+
SLUG='| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#mechanical-demo-gate | `updated` | demo |'
|
|
73
|
+
CMD='| p | c | prose; firing-path: command:skills/demo-skill/scripts/demo.sh | `updated` | demo |'
|
|
74
|
+
MULTI='| p | c | prose; firing-path: command:skills/demo-skill/scripts/demo.sh,command:skills/demo-skill/scripts/second.sh | `updated` | demo |'
|
|
75
|
+
|
|
76
|
+
# ── 1. GREEN control: literal anchor present ─────────────────────────────────
|
|
77
|
+
new_fixture green "$LITERAL"
|
|
78
|
+
run_gate "$FIX"
|
|
79
|
+
assert_rc "$rc" 0 "literal anchor present must pass"
|
|
80
|
+
assert_contains "register_firing_path_resolution_ok" "$out" "green control"
|
|
81
|
+
pass "literal anchor that is present resolves"
|
|
82
|
+
|
|
83
|
+
# ── 2. RED: the observed failure — anchored rule reworded in place ───────────
|
|
84
|
+
new_fixture reworded "$LITERAL"
|
|
85
|
+
# The exact !483 shape: the rule survives but its wording changed.
|
|
86
|
+
sed -i.bak 's/Never bypass the demo isolation boundary/Never bypass the demo isolation perimeter/' \
|
|
87
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
88
|
+
run_gate "$FIX"
|
|
89
|
+
assert_rc "$rc" 1 "a reworded anchored rule must be caught"
|
|
90
|
+
assert_contains "anchor text absent from target" "$out" "reworded anchor"
|
|
91
|
+
assert_contains "Never bypass the demo isolation boundary" "$out" "names the dead locator"
|
|
92
|
+
pass "reworded anchored rule turns the gate RED"
|
|
93
|
+
|
|
94
|
+
# ── 3. RED: the anchored rule MOVED to another file ──────────────────────────
|
|
95
|
+
new_fixture moved "$LITERAL"
|
|
96
|
+
mkdir -p "$FIX/skills/demo-skill/references"
|
|
97
|
+
grep -v 'Never bypass' "$FIX/skills/demo-skill/SKILL.md" > "$FIX/skills/demo-skill/SKILL.md.new"
|
|
98
|
+
mv "$FIX/skills/demo-skill/SKILL.md.new" "$FIX/skills/demo-skill/SKILL.md"
|
|
99
|
+
echo "1. Never bypass the demo isolation boundary when dispatching work." \
|
|
100
|
+
> "$FIX/skills/demo-skill/references/moved.md"
|
|
101
|
+
run_gate "$FIX"
|
|
102
|
+
assert_rc "$rc" 1 "relocating the anchored rule must be caught"
|
|
103
|
+
assert_contains "anchor text absent from target" "$out" "moved anchor"
|
|
104
|
+
pass "anchored rule moved to a reference turns the gate RED"
|
|
105
|
+
|
|
106
|
+
# ── 4. GREEN control: heading-slug anchor naming a real heading ──────────────
|
|
107
|
+
new_fixture slug_ok "$SLUG"
|
|
108
|
+
run_gate "$FIX"
|
|
109
|
+
assert_rc "$rc" 0 "a slug naming a real heading must not false-red"
|
|
110
|
+
pass "heading-slug anchor resolves against a real heading"
|
|
111
|
+
|
|
112
|
+
# ── 5. RED: heading-slug anchor whose heading was renamed ────────────────────
|
|
113
|
+
new_fixture slug_gone "$SLUG"
|
|
114
|
+
sed -i.bak 's/## Mechanical demo gate/## Mechanical demo checkpoint/' \
|
|
115
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
116
|
+
run_gate "$FIX"
|
|
117
|
+
assert_rc "$rc" 1 "a slug whose heading was renamed must be caught"
|
|
118
|
+
assert_contains "mechanical-demo-gate" "$out" "names the dead slug"
|
|
119
|
+
pass "heading-slug anchor whose heading vanished turns the gate RED"
|
|
120
|
+
|
|
121
|
+
# ── 6. RED: command locator whose executable was deleted ─────────────────────
|
|
122
|
+
new_fixture cmd_gone "$CMD"
|
|
123
|
+
rm "$FIX/skills/demo-skill/scripts/demo.sh"
|
|
124
|
+
run_gate "$FIX"
|
|
125
|
+
assert_rc "$rc" 1 "a deleted owner executable must be caught"
|
|
126
|
+
assert_contains "executable not found" "$out" "deleted executable"
|
|
127
|
+
pass "deleted owner executable turns the gate RED"
|
|
128
|
+
|
|
129
|
+
# ── 7. RED: command locator that lost its executable bit ─────────────────────
|
|
130
|
+
new_fixture cmd_noexec "$CMD"
|
|
131
|
+
chmod -x "$FIX/skills/demo-skill/scripts/demo.sh"
|
|
132
|
+
run_gate "$FIX"
|
|
133
|
+
assert_rc "$rc" 1 "a non-executable owner script must be caught"
|
|
134
|
+
assert_contains "not executable" "$out" "chmod -x"
|
|
135
|
+
pass "owner script that lost +x turns the gate RED"
|
|
136
|
+
|
|
137
|
+
# ── 8. RED: file locator whose target file is gone ───────────────────────────
|
|
138
|
+
new_fixture file_gone "$LITERAL"
|
|
139
|
+
rm "$FIX/skills/demo-skill/SKILL.md"
|
|
140
|
+
run_gate "$FIX"
|
|
141
|
+
assert_rc "$rc" 1 "a deleted target file must be caught"
|
|
142
|
+
assert_contains "file not found" "$out" "deleted target file"
|
|
143
|
+
pass "deleted target file turns the gate RED"
|
|
144
|
+
|
|
145
|
+
# ── 9. Comma-list: the SECOND locator is resolved, not just the first ────────
|
|
146
|
+
# Without comma splitting the whole value parses as one bogus locator and the
|
|
147
|
+
# second path is never checked — the silent-invalid shape this repo has hit
|
|
148
|
+
# before. Paired control: make the second valid and the gate must go green.
|
|
149
|
+
new_fixture multi_bad "$MULTI"
|
|
150
|
+
run_gate "$FIX"
|
|
151
|
+
assert_rc "$rc" 1 "a broken SECOND locator in a comma list must be caught"
|
|
152
|
+
assert_contains "second.sh" "$out" "names the second locator"
|
|
153
|
+
pass "second locator in a comma list is resolved independently"
|
|
154
|
+
|
|
155
|
+
new_fixture multi_ok "$MULTI"
|
|
156
|
+
printf '#!/usr/bin/env bash\nexit 0\n' > "$FIX/skills/demo-skill/scripts/second.sh"
|
|
157
|
+
chmod +x "$FIX/skills/demo-skill/scripts/second.sh"
|
|
158
|
+
run_gate "$FIX"
|
|
159
|
+
assert_rc "$rc" 0 "a comma list whose members all resolve must pass"
|
|
160
|
+
assert_not_contains "second.sh" "$out" "comma-list green control"
|
|
161
|
+
pass "comma list with all members present resolves green"
|
|
162
|
+
|
|
163
|
+
# ── 10. Whole-ledger scope: a HISTORICAL row is checked, not just a new one ──
|
|
164
|
+
# This is the gate's entire reason to exist. A broken row sitting behind many
|
|
165
|
+
# healthy rows must still be found.
|
|
166
|
+
# The broken row is LAST so the assertion cannot be satisfied by an
|
|
167
|
+
# implementation that only resolves the first declaration and counts the rest.
|
|
168
|
+
new_fixture historical "$CMD" "$SLUG" "$LITERAL"
|
|
169
|
+
sed -i.bak 's/Never bypass the demo isolation boundary/Never bypass the demo isolation perimeter/' \
|
|
170
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
171
|
+
run_gate "$FIX"
|
|
172
|
+
assert_rc "$rc" 1 "a broken row among healthy rows must be caught"
|
|
173
|
+
assert_contains "source-register.md:4" "$out" "reports the LAST row's line, not the first"
|
|
174
|
+
pass "whole-ledger scan catches a broken historical row among healthy ones"
|
|
175
|
+
|
|
176
|
+
# ── 11. The reported locator COUNT must be accurate, not merely present ──────
|
|
177
|
+
# Asserting "(0 locators resolved)" on an empty fixture is hollow: deleting the
|
|
178
|
+
# increment leaves it green. Pin an exact non-zero count so the counter itself
|
|
179
|
+
# has a killing mutation.
|
|
180
|
+
new_fixture counted "$LITERAL" "$CMD" "$SLUG"
|
|
181
|
+
run_gate "$FIX"
|
|
182
|
+
assert_rc "$rc" 0 "three healthy locators must pass"
|
|
183
|
+
assert_contains "(3 locators resolved)" "$out" "count must be accurate, not just printed"
|
|
184
|
+
pass "reported locator count is exact (kills a dropped counter increment)"
|
|
185
|
+
|
|
186
|
+
# ── 12. A file locator with no #anchor is rejected ───────────────────────────
|
|
187
|
+
# Otherwise the row is satisfied by mere file existence, and the anchored rule
|
|
188
|
+
# could be deleted outright without the gate noticing.
|
|
189
|
+
NOANCHOR='| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md | `updated` | demo |'
|
|
190
|
+
new_fixture no_anchor "$NOANCHOR"
|
|
191
|
+
run_gate "$FIX"
|
|
192
|
+
assert_rc "$rc" 1 "an anchorless file locator must be rejected"
|
|
193
|
+
assert_contains "carries no #anchor" "$out" "anchorless locator"
|
|
194
|
+
pass "file locator with no anchor is rejected (file existence is not evidence)"
|
|
195
|
+
|
|
196
|
+
# ── 13. Containment: a locator may not escape the repository ─────────────────
|
|
197
|
+
for esc in '../outside.md#Never bypass isolation' '/etc/hosts#localhost'; do
|
|
198
|
+
new_fixture "escape" "| p | c | prose; firing-path: file:$esc | \`updated\` | demo |"
|
|
199
|
+
printf '1. Never bypass isolation.\n' > "$TMP/outside.md"
|
|
200
|
+
run_gate "$FIX"
|
|
201
|
+
assert_rc "$rc" 1 "locator '$esc' must not resolve outside the repo"
|
|
202
|
+
assert_contains "escapes the repository" "$out" "containment for $esc"
|
|
203
|
+
done
|
|
204
|
+
pass "traversal and absolute-path locators are refused"
|
|
205
|
+
|
|
206
|
+
new_fixture symlink_escape "$LITERAL"
|
|
207
|
+
printf '1. Never bypass the demo isolation boundary when dispatching work.\n' > "$TMP/outside_sl.md"
|
|
208
|
+
rm "$FIX/skills/demo-skill/SKILL.md"
|
|
209
|
+
ln -s "$TMP/outside_sl.md" "$FIX/skills/demo-skill/SKILL.md"
|
|
210
|
+
run_gate "$FIX"
|
|
211
|
+
assert_rc "$rc" 1 "a symlink pointing outside the repo must not satisfy an anchor"
|
|
212
|
+
assert_contains "escapes the repository" "$out" "symlinked target"
|
|
213
|
+
pass "symlinked target outside the repo does not satisfy an anchor"
|
|
214
|
+
|
|
215
|
+
# ── 14. A declaration that parses to zero locators is malformed, not clean ───
|
|
216
|
+
MALFORMED='| p | c | prose; firing-path: see the owning script | `updated` | demo |'
|
|
217
|
+
new_fixture malformed "$MALFORMED"
|
|
218
|
+
run_gate "$FIX"
|
|
219
|
+
assert_rc "$rc" 1 "an unparseable firing-path declaration must not pass silently"
|
|
220
|
+
assert_contains "register_firing_path_malformed" "$out" "malformed declaration"
|
|
221
|
+
pass "declaration parsing to zero locators is reported, not silently skipped"
|
|
222
|
+
|
|
223
|
+
# ── 15. GREEN controls for the two shapes that must NOT count as declarations ─
|
|
224
|
+
# (a) an inline-code mention of the key in prose — this ledger's own methodology
|
|
225
|
+
# rows discuss `firing-path:` in running text; demanding a locator would false-red.
|
|
226
|
+
INLINE='| p | c | 本行讨论 `firing-path:` 这个键本身,不是声明 | `updated` | demo |'
|
|
227
|
+
new_fixture inline_mention "$INLINE" "$CMD"
|
|
228
|
+
run_gate "$FIX"
|
|
229
|
+
assert_rc "$rc" 0 "an inline-code mention of the key is prose, not a declaration"
|
|
230
|
+
assert_contains "(1 locators resolved)" "$out" "only the real declaration counts"
|
|
231
|
+
pass "inline-code mention of firing-path: is not treated as a declaration"
|
|
232
|
+
|
|
233
|
+
# (b) a fenced documentation example naming a placeholder path
|
|
234
|
+
new_fixture fenced "$CMD"
|
|
235
|
+
{ echo '```'; echo '| x | y | firing-path: file:skills/PLACEHOLDER/SKILL.md#example anchor | z |'; echo '```'; } \
|
|
236
|
+
>> "$FIX/$REGDIR/source-register.md"
|
|
237
|
+
run_gate "$FIX"
|
|
238
|
+
assert_rc "$rc" 0 "a fenced example must not be resolved as a live locator"
|
|
239
|
+
pass "fenced documentation example is not resolved as a live locator"
|
|
240
|
+
|
|
241
|
+
# ── 16. Duplicate-heading slugs follow GitHub numbering exactly ──────────────
|
|
242
|
+
new_fixture slug_dup_absent '| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#mechanical-demo-gate-99 | `updated` | demo |'
|
|
243
|
+
run_gate "$FIX"
|
|
244
|
+
assert_rc "$rc" 1 "a -N suffix with no such duplicate heading must be rejected"
|
|
245
|
+
pass "slug suffix naming a nonexistent duplicate heading is rejected"
|
|
246
|
+
|
|
247
|
+
# ── 12. Commas INSIDE a literal anchor must not truncate it ─────────────────
|
|
248
|
+
# Anchors are natural-language rule text; three locators in the real ledger
|
|
249
|
+
# already contain a comma. A naive split-on-every-comma validates only the
|
|
250
|
+
# fragment before it, so deleting the rest of the sentence would still pass.
|
|
251
|
+
COMMA='| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#Never bypass the demo isolation boundary, especially when dispatching | `updated` | demo |'
|
|
252
|
+
new_fixture comma_anchor_ok "$COMMA"
|
|
253
|
+
sed -i.bak 's/boundary when dispatching work\./boundary, especially when dispatching work./' \
|
|
254
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
255
|
+
run_gate "$FIX"
|
|
256
|
+
assert_rc "$rc" 0 "a comma-bearing anchor that is fully present must pass"
|
|
257
|
+
pass "comma inside a literal anchor does not split the locator"
|
|
258
|
+
|
|
259
|
+
new_fixture comma_anchor_truncated "$COMMA"
|
|
260
|
+
# Keep the pre-comma fragment, drop the tail: a naive splitter reports GREEN here.
|
|
261
|
+
sed -i.bak 's/boundary when dispatching work\./boundary, but the tail is gone./' \
|
|
262
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
263
|
+
run_gate "$FIX"
|
|
264
|
+
assert_rc "$rc" 1 "deleting the post-comma tail of an anchor must be caught"
|
|
265
|
+
assert_contains "especially when dispatching" "$out" "names the full anchor, not the fragment"
|
|
266
|
+
pass "post-comma tail deletion turns the gate RED (no fragment-only validation)"
|
|
267
|
+
|
|
268
|
+
# ── 13. A directory is not an executable command locator ────────────────────
|
|
269
|
+
DIRCMD='| p | c | prose; firing-path: command:skills/demo-skill/scripts | `updated` | demo |'
|
|
270
|
+
new_fixture dir_cmd "$DIRCMD"
|
|
271
|
+
run_gate "$FIX"
|
|
272
|
+
assert_rc "$rc" 1 "a directory must not satisfy a command locator"
|
|
273
|
+
assert_contains "executable not found" "$out" "directory rejected"
|
|
274
|
+
pass "searchable directory does not pass as a command locator"
|
|
275
|
+
|
|
276
|
+
# ── 14. Duplicate-heading slug suffix must not false-red ────────────────────
|
|
277
|
+
DUP='| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#mechanical-demo-gate-1 | `updated` | demo |'
|
|
278
|
+
new_fixture slug_suffix "$DUP"
|
|
279
|
+
printf '\n## Mechanical demo gate\n\n1. A second same-named section.\n' >> "$FIX/skills/demo-skill/SKILL.md"
|
|
280
|
+
run_gate "$FIX"
|
|
281
|
+
assert_rc "$rc" 0 "a GitHub duplicate-heading suffix must resolve, not false-red"
|
|
282
|
+
pass "slug with a -N duplicate suffix resolves to the base heading"
|
|
283
|
+
|
|
284
|
+
# ── 17. An anchor surviving only inside a FENCED example is not a live carrier ─
|
|
285
|
+
# The gate's contract is that anchors point into living prose. A rule deleted
|
|
286
|
+
# from the operative text but still shown in a code sample must not satisfy it.
|
|
287
|
+
new_fixture fenced_carrier "$LITERAL"
|
|
288
|
+
cat > "$FIX/skills/demo-skill/SKILL.md" <<'MD'
|
|
289
|
+
# Demo Skill
|
|
290
|
+
|
|
291
|
+
The guard was removed; only this illustration remains:
|
|
292
|
+
|
|
293
|
+
```markdown
|
|
294
|
+
1. Never bypass the demo isolation boundary when dispatching work.
|
|
295
|
+
```
|
|
296
|
+
MD
|
|
297
|
+
run_gate "$FIX"
|
|
298
|
+
assert_rc "$rc" 1 "an anchor surviving only inside a fence is not a living carrier"
|
|
299
|
+
pass "anchor present only inside a fenced example does not resolve"
|
|
300
|
+
|
|
301
|
+
new_fixture fenced_heading "$SLUG"
|
|
302
|
+
cat > "$FIX/skills/demo-skill/SKILL.md" <<'MD'
|
|
303
|
+
# Demo Skill
|
|
304
|
+
|
|
305
|
+
```markdown
|
|
306
|
+
## Mechanical demo gate
|
|
307
|
+
```
|
|
308
|
+
MD
|
|
309
|
+
run_gate "$FIX"
|
|
310
|
+
assert_rc "$rc" 1 "a heading inside a fence is not a real heading"
|
|
311
|
+
pass "heading inside a fenced example does not satisfy a slug anchor"
|
|
312
|
+
|
|
313
|
+
# ── 18. Non-ASCII (CJK) headings slug correctly ──────────────────────────────
|
|
314
|
+
# Most headings in this repository are Chinese; collapsing them to an empty slug
|
|
315
|
+
# would false-red an unrewritable row.
|
|
316
|
+
# The heading must be MIXED script: a pure-CJK anchor is also a literal
|
|
317
|
+
# substring of the heading line, so it would resolve without ever reaching the
|
|
318
|
+
# slug path and the assertion would not discriminate. `机械门禁 gate` slugs to
|
|
319
|
+
# `机械门禁-gate`, which appears nowhere literally.
|
|
320
|
+
new_fixture cjk '| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#机械门禁-gate | `updated` | demo |'
|
|
321
|
+
printf '# Demo Skill\n\n## 机械门禁 gate\n\n1. 规则正文。\n' > "$FIX/skills/demo-skill/SKILL.md"
|
|
322
|
+
run_gate "$FIX"
|
|
323
|
+
assert_rc "$rc" 0 "a non-ASCII heading slug must resolve, not false-red"
|
|
324
|
+
pass "non-ASCII heading slug resolves (mixed-script, not literally present)"
|
|
325
|
+
|
|
326
|
+
# ── 19. Variable-length fences: a shorter inner run must not close a longer one ─
|
|
327
|
+
# A naive boolean toggle would close on the inner ``` , re-open on the real
|
|
328
|
+
# closing ```` , and then silently skip the live row that follows.
|
|
329
|
+
new_fixture longfence "$LITERAL"
|
|
330
|
+
python3 - "$FIX/$REGDIR/source-register.md" <<'PY'
|
|
331
|
+
import sys
|
|
332
|
+
p = sys.argv[1]
|
|
333
|
+
rows = open(p, encoding="utf-8").read().rstrip("\n").split("\n")
|
|
334
|
+
head, live = rows[0], rows[-1]
|
|
335
|
+
open(p, "w", encoding="utf-8").write(
|
|
336
|
+
head + "\n````\n```\n````\n" + live + "\n")
|
|
337
|
+
PY
|
|
338
|
+
sed -i.bak 's/Never bypass the demo isolation boundary/Never bypass the demo isolation perimeter/' \
|
|
339
|
+
"$FIX/skills/demo-skill/SKILL.md"
|
|
340
|
+
run_gate "$FIX"
|
|
341
|
+
assert_rc "$rc" 1 "a live row after a nested-fence block must still be checked"
|
|
342
|
+
pass "shorter inner fence run does not close a longer fence (live rows stay visible)"
|
|
343
|
+
|
|
344
|
+
# ── 20. Exact-line digests bind source shape, not a surviving comment ────────
|
|
345
|
+
LINE_SHA='0764-44d0-8750-8666-a5ba-350d-a8df-263b-08ec-4f7c-8e8e-46df-b863-8439-7728-cd1a'
|
|
346
|
+
LINE_DIGEST="| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:$LINE_SHA | \`updated\` | demo |"
|
|
347
|
+
new_fixture line_digest_green "$LINE_DIGEST"
|
|
348
|
+
run_gate "$FIX"
|
|
349
|
+
assert_rc "$rc" 0 "the digest of a present trimmed source line must resolve"
|
|
350
|
+
pass "line-sha256 resolves an exact trimmed source line"
|
|
351
|
+
|
|
352
|
+
new_fixture line_digest_comment_decoy "$LINE_DIGEST"
|
|
353
|
+
sed -i.bak 's/^guard_enabled/# guard_enabled/' "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
354
|
+
run_gate "$FIX"
|
|
355
|
+
assert_rc "$rc" 1 "commenting out the exact source line must break its digest locator"
|
|
356
|
+
assert_contains "line-sha256 source line absent from target" "$out" "comment decoy"
|
|
357
|
+
pass "comment decoy cannot satisfy an exact-line digest locator"
|
|
358
|
+
|
|
359
|
+
SHELL_LINE_DIGEST='| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.sh#line-sha256:c229-95ad-c297-57a9-9bc9-2429-26a5-d5b5-a800-7ecc-78f3-0943-161c-f072-af42-d9d2 | `updated` | demo |'
|
|
360
|
+
new_fixture line_digest_unclassified_source "$SHELL_LINE_DIGEST"
|
|
361
|
+
run_gate "$FIX"
|
|
362
|
+
assert_rc "$rc" 1 "a source language without a token classifier must fail closed"
|
|
363
|
+
assert_contains "line-sha256 target language has no code-token classifier" "$out" "unclassified source language"
|
|
364
|
+
pass "line-sha256 rejects source languages without a code-token classifier"
|
|
365
|
+
|
|
366
|
+
# A malformed digest must fail closed instead of falling back to literal-text or
|
|
367
|
+
# heading-slug matching and accidentally resolving against its own declaration.
|
|
368
|
+
BAD_LINE_DIGEST='| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:not-a-digest | `updated` | demo |'
|
|
369
|
+
new_fixture line_digest_malformed "$BAD_LINE_DIGEST"
|
|
370
|
+
run_gate "$FIX"
|
|
371
|
+
assert_rc "$rc" 1 "a malformed line digest must fail closed"
|
|
372
|
+
assert_contains "not 64 lowercase hex characters after grouping" "$out" "malformed line digest"
|
|
373
|
+
pass "malformed line-sha256 locator is rejected"
|
|
374
|
+
|
|
375
|
+
EMPTY_LINE_DIGEST='| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:e3b0-c442-98fc-1c14-9afb-f4c8-996f-b924-27ae-41e4-649b-934c-a495-991b-7852-b855 | `updated` | demo |'
|
|
376
|
+
new_fixture line_digest_empty "$EMPTY_LINE_DIGEST"
|
|
377
|
+
run_gate "$FIX"
|
|
378
|
+
assert_rc "$rc" 1 "a ubiquitous blank line must not satisfy an exact-line locator"
|
|
379
|
+
assert_contains "line-sha256 source line absent from target" "$out" "blank-line digest"
|
|
380
|
+
pass "blank-line digest cannot create a vacuous firing path"
|
|
381
|
+
|
|
382
|
+
# Ruby line locators additionally require a code token on the matching physical
|
|
383
|
+
# line. An exact byte-for-byte copy inside a heredoc must not resurrect a deleted
|
|
384
|
+
# guard implementation line.
|
|
385
|
+
RUBY_LINE_DIGEST="| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:5172-b00d-c562-745a-83e9-d49b-2881-464c-cc65-0836-8782-6c54-1ccb-5466-124d-40d0 | \`updated\` | demo |"
|
|
386
|
+
new_fixture ruby_line_digest_green "$RUBY_LINE_DIGEST"
|
|
387
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
388
|
+
%w[MAKEFLAGS MFLAGS GNUMAKEFLAGS].each { |key| ENV[key] = "-q" }
|
|
389
|
+
RB
|
|
390
|
+
run_gate "$FIX"
|
|
391
|
+
assert_rc "$rc" 0 "an exact Ruby implementation line with code tokens must resolve"
|
|
392
|
+
pass "Ruby line-sha256 resolves a live code line"
|
|
393
|
+
|
|
394
|
+
new_fixture ruby_line_digest_unparseable_ruby "$LINE_DIGEST"
|
|
395
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
396
|
+
guard_enabled = true
|
|
397
|
+
if
|
|
398
|
+
RB
|
|
399
|
+
run_gate "$FIX"
|
|
400
|
+
assert_rc "$rc" 1 "unparseable Ruby must fail closed"
|
|
401
|
+
assert_contains "line-sha256 target Ruby did not parse" "$out" "unparseable Ruby source"
|
|
402
|
+
pass "Ruby parse failure has a distinct diagnostic"
|
|
403
|
+
|
|
404
|
+
new_fixture ruby_line_digest_partial_parse_error "$LINE_DIGEST"
|
|
405
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
406
|
+
guard_enabled = true
|
|
407
|
+
1 +
|
|
408
|
+
RB
|
|
409
|
+
run_gate "$FIX"
|
|
410
|
+
assert_rc "$rc" 1 "Ruby with a partial sexp and parse error must fail closed"
|
|
411
|
+
assert_contains "line-sha256 target Ruby did not parse" "$out" "partial Ruby parse error"
|
|
412
|
+
pass "Ruby partial parse failure has the parse-error diagnostic"
|
|
413
|
+
|
|
414
|
+
new_fixture ruby_line_digest_nested_lambda_receiver "$LINE_DIGEST"
|
|
415
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
416
|
+
wrap(
|
|
417
|
+
-> do
|
|
418
|
+
guard_enabled = true
|
|
419
|
+
end
|
|
420
|
+
).call
|
|
421
|
+
RB
|
|
422
|
+
run_gate "$FIX"
|
|
423
|
+
assert_rc "$rc" 1 "a lambda passed into a called receiver expression is not itself invoked"
|
|
424
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby nested receiver lambda"
|
|
425
|
+
pass "Ruby nested receiver lambda cannot fabricate a direct call"
|
|
426
|
+
|
|
427
|
+
new_fixture ruby_line_digest_parenthesized_inline_lambda "$LINE_DIGEST"
|
|
428
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
429
|
+
(-> do
|
|
430
|
+
guard_enabled = true
|
|
431
|
+
end).call
|
|
432
|
+
RB
|
|
433
|
+
run_gate "$FIX"
|
|
434
|
+
assert_rc "$rc" 0 "a parenthesized inline lambda that is directly called must remain eligible"
|
|
435
|
+
pass "Ruby parenthesized inline lambda remains reachable"
|
|
436
|
+
|
|
437
|
+
new_fixture ruby_line_digest_unused_lambda "$LINE_DIGEST"
|
|
438
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
439
|
+
unused = -> do
|
|
440
|
+
guard_enabled = true
|
|
441
|
+
end
|
|
442
|
+
RB
|
|
443
|
+
run_gate "$FIX"
|
|
444
|
+
assert_rc "$rc" 1 "a guard inside an uncalled lambda must not satisfy a firing-path digest"
|
|
445
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby uncalled lambda guard"
|
|
446
|
+
pass "Ruby guard inside an uncalled lambda cannot satisfy an exact code-line digest"
|
|
447
|
+
|
|
448
|
+
new_fixture ruby_line_digest_self_called_lambda "$LINE_DIGEST"
|
|
449
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
450
|
+
worker = -> do
|
|
451
|
+
guard_enabled = true
|
|
452
|
+
worker.call
|
|
453
|
+
end
|
|
454
|
+
RB
|
|
455
|
+
run_gate "$FIX"
|
|
456
|
+
assert_rc "$rc" 1 "a lambda's self-call cannot make its body initially reachable"
|
|
457
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby self-called lambda guard"
|
|
458
|
+
pass "Ruby lambda self-call does not fabricate an entry call"
|
|
459
|
+
|
|
460
|
+
new_fixture ruby_line_digest_lambda_call_in_uncalled_method "$LINE_DIGEST"
|
|
461
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
462
|
+
def invoke_worker
|
|
463
|
+
worker = -> do
|
|
464
|
+
guard_enabled = true
|
|
465
|
+
end
|
|
466
|
+
worker.call
|
|
467
|
+
end
|
|
468
|
+
RB
|
|
469
|
+
run_gate "$FIX"
|
|
470
|
+
assert_rc "$rc" 1 "a call inside an uncalled method cannot make a lambda body reachable"
|
|
471
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby method-nested lambda call"
|
|
472
|
+
pass "Ruby lambda call inside an uncalled method does not fabricate an entry call"
|
|
473
|
+
|
|
474
|
+
new_fixture ruby_line_digest_reassigned_lambda "$LINE_DIGEST"
|
|
475
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
476
|
+
worker = -> do
|
|
477
|
+
guard_enabled = true
|
|
478
|
+
end
|
|
479
|
+
worker = nil
|
|
480
|
+
worker.call
|
|
481
|
+
RB
|
|
482
|
+
run_gate "$FIX"
|
|
483
|
+
assert_rc "$rc" 1 "a call after reassignment cannot make the old lambda body reachable"
|
|
484
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby reassigned lambda guard"
|
|
485
|
+
pass "Ruby call after reassignment does not revive the old lambda body"
|
|
486
|
+
|
|
487
|
+
new_fixture ruby_line_digest_dead_reassignment "$LINE_DIGEST"
|
|
488
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
489
|
+
worker = -> do
|
|
490
|
+
guard_enabled = true
|
|
491
|
+
end
|
|
492
|
+
worker = nil if false
|
|
493
|
+
worker.call
|
|
494
|
+
RB
|
|
495
|
+
run_gate "$FIX"
|
|
496
|
+
assert_rc "$rc" 0 "a literal-dead reassignment cannot hide a later live lambda call"
|
|
497
|
+
pass "Ruby dead reassignment does not suppress a live lambda call"
|
|
498
|
+
|
|
499
|
+
new_fixture ruby_line_digest_called_lambda "$LINE_DIGEST"
|
|
500
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
501
|
+
worker = -> do
|
|
502
|
+
guard_enabled = true
|
|
503
|
+
end
|
|
504
|
+
worker.call
|
|
505
|
+
RB
|
|
506
|
+
run_gate "$FIX"
|
|
507
|
+
assert_rc "$rc" 0 "a guard inside a directly called lambda must remain eligible"
|
|
508
|
+
pass "Ruby guard inside a directly called lambda remains reachable"
|
|
509
|
+
|
|
510
|
+
for postcondition_form in while_false until_true; do
|
|
511
|
+
new_fixture "ruby_line_digest_postcondition_$postcondition_form" "$LINE_DIGEST"
|
|
512
|
+
case "$postcondition_form" in
|
|
513
|
+
while_false)
|
|
514
|
+
printf 'begin\n guard_enabled = true\nend while false\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
515
|
+
;;
|
|
516
|
+
until_true)
|
|
517
|
+
printf 'begin\n guard_enabled = true\nend until true\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
518
|
+
;;
|
|
519
|
+
esac
|
|
520
|
+
run_gate "$FIX"
|
|
521
|
+
assert_rc "$rc" 0 "$postcondition_form begin body executes once and must remain eligible"
|
|
522
|
+
done
|
|
523
|
+
pass "Ruby literal postcondition-loop bodies remain reachable"
|
|
524
|
+
|
|
525
|
+
new_fixture ruby_line_digest_called_lambda_in_called_method "$LINE_DIGEST"
|
|
526
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
527
|
+
def run_worker
|
|
528
|
+
worker = -> do
|
|
529
|
+
guard_enabled = true
|
|
530
|
+
end
|
|
531
|
+
worker.call
|
|
532
|
+
end
|
|
533
|
+
run_worker
|
|
534
|
+
RB
|
|
535
|
+
run_gate "$FIX"
|
|
536
|
+
assert_rc "$rc" 0 "a guard inside a lambda called by a live top-level method must remain eligible"
|
|
537
|
+
pass "Ruby guard inside a lambda called by a live method remains reachable"
|
|
538
|
+
|
|
539
|
+
new_fixture ruby_line_digest_called_lambda_in_transitively_called_method "$LINE_DIGEST"
|
|
540
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
541
|
+
def main
|
|
542
|
+
run_worker
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
def run_worker
|
|
546
|
+
worker = -> do
|
|
547
|
+
guard_enabled = true
|
|
548
|
+
end
|
|
549
|
+
worker.call
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
main
|
|
553
|
+
RB
|
|
554
|
+
run_gate "$FIX"
|
|
555
|
+
assert_rc "$rc" 0 "a guard inside a lambda reached through live top-level methods must remain eligible"
|
|
556
|
+
pass "Ruby guard inside a transitively called method remains reachable"
|
|
557
|
+
|
|
558
|
+
new_fixture ruby_line_digest_dead_lambda_call "$LINE_DIGEST"
|
|
559
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
560
|
+
worker = -> do
|
|
561
|
+
guard_enabled = true
|
|
562
|
+
end
|
|
563
|
+
worker.call if false
|
|
564
|
+
RB
|
|
565
|
+
run_gate "$FIX"
|
|
566
|
+
assert_rc "$rc" 1 "a call under if false must not make a lambda body reachable"
|
|
567
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby dead lambda call"
|
|
568
|
+
pass "Ruby lambda call under if false does not revive its body"
|
|
569
|
+
|
|
570
|
+
new_fixture ruby_line_digest_if_false "$LINE_DIGEST"
|
|
571
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
572
|
+
if false
|
|
573
|
+
guard_enabled = true
|
|
574
|
+
end
|
|
575
|
+
RB
|
|
576
|
+
run_gate "$FIX"
|
|
577
|
+
assert_rc "$rc" 1 "a guard under if false must not satisfy a firing-path digest"
|
|
578
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby if-false guard"
|
|
579
|
+
pass "Ruby guard under if false cannot satisfy an exact code-line digest"
|
|
580
|
+
|
|
581
|
+
new_fixture ruby_line_digest_elsif_false "$LINE_DIGEST"
|
|
582
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
583
|
+
if runtime_flag
|
|
584
|
+
live_path = true
|
|
585
|
+
elsif false
|
|
586
|
+
guard_enabled = true
|
|
587
|
+
end
|
|
588
|
+
RB
|
|
589
|
+
run_gate "$FIX"
|
|
590
|
+
assert_rc "$rc" 1 "a guard under elsif false must not satisfy a firing-path digest"
|
|
591
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "Ruby elsif-false guard"
|
|
592
|
+
pass "Ruby guard under elsif false cannot satisfy an exact code-line digest"
|
|
593
|
+
|
|
594
|
+
for dead_form in if_nil unless_true while_false until_true; do
|
|
595
|
+
new_fixture "ruby_line_digest_$dead_form" "$LINE_DIGEST"
|
|
596
|
+
case "$dead_form" in
|
|
597
|
+
if_nil)
|
|
598
|
+
printf 'if nil\n guard_enabled = true\nend\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
599
|
+
;;
|
|
600
|
+
unless_true)
|
|
601
|
+
printf 'unless true\n guard_enabled = true\nend\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
602
|
+
;;
|
|
603
|
+
while_false)
|
|
604
|
+
printf 'while false\n guard_enabled = true\nend\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
605
|
+
;;
|
|
606
|
+
until_true)
|
|
607
|
+
printf 'until true\n guard_enabled = true\nend\n' > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
608
|
+
;;
|
|
609
|
+
esac
|
|
610
|
+
run_gate "$FIX"
|
|
611
|
+
assert_rc "$rc" 1 "$dead_form must not satisfy a firing-path digest"
|
|
612
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "$dead_form"
|
|
613
|
+
done
|
|
614
|
+
pass "Ruby literal-dead branch forms cannot satisfy an exact code-line digest"
|
|
615
|
+
|
|
616
|
+
for positionless_form in return super yield empty_array; do
|
|
617
|
+
case "$positionless_form" in
|
|
618
|
+
return)
|
|
619
|
+
positionless_code='return'
|
|
620
|
+
positionless_sha='7187-f067-5eb3-8279-3974-1acf-7342-ba78-836e-cec2-1a31-ecf3-f34a-5530-9d3b-ee8a'
|
|
621
|
+
;;
|
|
622
|
+
super)
|
|
623
|
+
positionless_code='super'
|
|
624
|
+
positionless_sha='73d1-b1b1-bc1d-abfb-97f2-16d8-97b7-968e-44b0-6457-920f-00f2-dc6c-1ed3-be25-ad4c'
|
|
625
|
+
;;
|
|
626
|
+
yield)
|
|
627
|
+
positionless_code='yield'
|
|
628
|
+
positionless_sha='8bbc-ba42-d48d-cffe-6ea6-efa3-f565-6ec8-b8e0-d5c9-3109-1c17-a125-16eb-5d19-3e41'
|
|
629
|
+
;;
|
|
630
|
+
empty_array)
|
|
631
|
+
positionless_code='[]'
|
|
632
|
+
positionless_sha='4f53-cda1-8c2b-aa0c-0354-bb5f-9a3e-cbe5-ed12-ab4d-8e11-ba87-3c2f-1116-1202-b945'
|
|
633
|
+
;;
|
|
634
|
+
esac
|
|
635
|
+
positionless_digest="| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:$positionless_sha | \`updated\` | demo |"
|
|
636
|
+
new_fixture "ruby_line_digest_positionless_$positionless_form" "$positionless_digest"
|
|
637
|
+
printf 'def run_worker\n if false\n %s\n end\nend\nrun_worker\n' "$positionless_code" > "$FIX/skills/demo-skill/scripts/demo.rb"
|
|
638
|
+
run_gate "$FIX"
|
|
639
|
+
assert_rc "$rc" 1 "$positionless_form under if false must not satisfy a firing-path digest"
|
|
640
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "$positionless_form"
|
|
641
|
+
done
|
|
642
|
+
pass "Ruby positionless AST statements under if false remain unreachable"
|
|
643
|
+
|
|
644
|
+
MULTILINE_RETURN_DIGEST='| p | c | prose; firing-path: file:skills/demo-skill/scripts/demo.rb#line-sha256:3bdf-6664-de6c-9b8b-b89c-af41-0c59-7f25-c570-a706-aead-63b8-7f3f-e85a-88ab-874e | `updated` | demo |'
|
|
645
|
+
new_fixture ruby_line_digest_multiline_return "$MULTILINE_RETURN_DIGEST"
|
|
646
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
647
|
+
if false
|
|
648
|
+
return(
|
|
649
|
+
1
|
|
650
|
+
)
|
|
651
|
+
end
|
|
652
|
+
RB
|
|
653
|
+
run_gate "$FIX"
|
|
654
|
+
assert_rc "$rc" 1 "the start of a multiline return under if false must remain unreachable"
|
|
655
|
+
assert_contains "line-sha256 source line is not statically reachable" "$out" "multiline return"
|
|
656
|
+
pass "Ruby multiline dead-statement start remains unreachable"
|
|
657
|
+
|
|
658
|
+
new_fixture ruby_line_digest_heredoc "$RUBY_LINE_DIGEST"
|
|
659
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
660
|
+
payload = <<~TEXT
|
|
661
|
+
%w[MAKEFLAGS MFLAGS GNUMAKEFLAGS].each { |key| ENV[key] = "-q" }
|
|
662
|
+
TEXT
|
|
663
|
+
RB
|
|
664
|
+
run_gate "$FIX"
|
|
665
|
+
assert_rc "$rc" 1 "an exact line inside Ruby heredoc content must not satisfy a code locator"
|
|
666
|
+
assert_contains "line-sha256 source line absent from target" "$out" "Ruby heredoc decoy"
|
|
667
|
+
pass "Ruby heredoc decoy cannot satisfy an exact code-line digest"
|
|
668
|
+
|
|
669
|
+
new_fixture ruby_line_digest_word_list "$RUBY_LINE_DIGEST"
|
|
670
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
671
|
+
decoy = %w[
|
|
672
|
+
%w[MAKEFLAGS MFLAGS GNUMAKEFLAGS].each { |key| ENV[key] = "-q" }
|
|
673
|
+
]
|
|
674
|
+
RB
|
|
675
|
+
run_gate "$FIX"
|
|
676
|
+
assert_rc "$rc" 1 "an exact line inside Ruby word-list content must not satisfy a code locator"
|
|
677
|
+
assert_contains "line-sha256 source line absent from target" "$out" "Ruby word-list decoy"
|
|
678
|
+
pass "Ruby word-list decoy cannot satisfy an exact code-line digest"
|
|
679
|
+
|
|
680
|
+
# Markdown fence stripping belongs to prose anchors, not source lexing. If it
|
|
681
|
+
# removes a heredoc opener from malformed Ruby before Ripper sees the bytes, the
|
|
682
|
+
# inert exact line below becomes synthetic top-level code and falsely resolves.
|
|
683
|
+
new_fixture ruby_line_digest_fence_heredoc "$RUBY_LINE_DIGEST"
|
|
684
|
+
cat > "$FIX/skills/demo-skill/scripts/demo.rb" <<'RB'
|
|
685
|
+
````
|
|
686
|
+
payload = <<~TEXT
|
|
687
|
+
````
|
|
688
|
+
%w[MAKEFLAGS MFLAGS GNUMAKEFLAGS].each { |key| ENV[key] = "-q" }
|
|
689
|
+
TEXT
|
|
690
|
+
RB
|
|
691
|
+
run_gate "$FIX"
|
|
692
|
+
assert_rc "$rc" 1 "fence stripping must not rewrite Ruby before code-token classification"
|
|
693
|
+
assert_contains "line-sha256 source line absent from target" "$out" "fence-bracketed Ruby heredoc decoy"
|
|
694
|
+
pass "fence stripping cannot turn inert Ruby bytes into a live digest line"
|
|
695
|
+
|
|
696
|
+
# ── 25. A register that declares nothing resolves clean at zero ─────────────
|
|
697
|
+
# Both shapes that carry no live declaration — no marker at all, and a fenced
|
|
698
|
+
# illustration of one — must stay clean. This is the pair that two successive
|
|
699
|
+
# zero-locator "self-checks" each got wrong in the opposite direction, so it is
|
|
700
|
+
# pinned: a run adjudicating nothing is not evidence of a broken parser, and the
|
|
701
|
+
# gate must not grade its own eyesight at runtime.
|
|
702
|
+
new_fixture zero_declarations_plain
|
|
703
|
+
{
|
|
704
|
+
echo "| head | head | head |"
|
|
705
|
+
echo '| p | c | prose with no declaration at all | `updated` | demo |'
|
|
706
|
+
} > "$FIX/$REGDIR/source-register.md"
|
|
707
|
+
run_gate "$FIX"
|
|
708
|
+
assert_rc "$rc" 0 "a register with no firing-path declarations at all must stay clean"
|
|
709
|
+
assert_contains "register_firing_path_resolution_ok (0 locators resolved)" "$out" "empty register terminal line"
|
|
710
|
+
pass "declaration-free register resolves clean at zero locators"
|
|
711
|
+
|
|
712
|
+
new_fixture zero_declarations_fenced_example
|
|
713
|
+
{
|
|
714
|
+
echo "| head | head | head |"
|
|
715
|
+
echo '```'
|
|
716
|
+
echo '| p | c | prose; firing-path: file:skills/demo-skill/SKILL.md#Never bypass the demo isolation boundary | `updated` | demo |'
|
|
717
|
+
echo '```'
|
|
718
|
+
} > "$FIX/$REGDIR/source-register.md"
|
|
719
|
+
run_gate "$FIX"
|
|
720
|
+
assert_rc "$rc" 0 "a fenced example row is an illustration, not a live declaration"
|
|
721
|
+
pass "fenced declaration-looking example does not red a register with no live declarations"
|
|
722
|
+
|
|
723
|
+
[ "$passed" -eq 57 ] || fail "expected 57 assertions, saw $passed (a case was skipped or misplaced)"
|
|
724
|
+
echo "register_firing_path_resolution_tests_ok ($passed assertions)"
|