@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,1203 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression tests for the impact-chain gate: owner-path coverage, required
|
|
3
|
+
# behavioral evidence, observed-failure firing paths, and upstream-owner routing.
|
|
4
|
+
# An upstream owner's references/ and scripts/ ship decision-surface / operational
|
|
5
|
+
# behavior just like its SKILL.md, so editing them must also require a complete
|
|
6
|
+
# source-register impact-chain row.
|
|
7
|
+
#
|
|
8
|
+
# Clones this repo into a throwaway worktree, then drives deterministic diffs on
|
|
9
|
+
# per-case branches so unrelated local edits do not affect the assertions while the
|
|
10
|
+
# current checker under test is still used.
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
14
|
+
CHECK_SCRIPT="${CHECK_SCRIPT_UNDER_TEST:-$SCRIPT_DIR/check-ccl-skills.sh}"
|
|
15
|
+
[ -f "$CHECK_SCRIPT" ] || { echo "FAIL: checker not found: $CHECK_SCRIPT" >&2; exit 1; }
|
|
16
|
+
CHECK_SCRIPT_DIR="$(ruby -e 'puts File.dirname(File.realpath(ARGV.fetch(0)))' "$CHECK_SCRIPT")"
|
|
17
|
+
GATE_SCRIPT="$CHECK_SCRIPT_DIR/impact-chain-gate.rb"
|
|
18
|
+
[ -f "$GATE_SCRIPT" ] || { echo "FAIL: impact-chain gate not found: $GATE_SCRIPT" >&2; exit 1; }
|
|
19
|
+
ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
|
|
20
|
+
|
|
21
|
+
TMP="$(mktemp -d "${TMPDIR:-/tmp}/icrefscripts.XXXXXX")"
|
|
22
|
+
# Preserve the script's exit status across cleanup: on macOS bash 3.2 a bare
|
|
23
|
+
# `rm -rf` EXIT trap OVERWRITES a set -u/-e abort status with 0, turning a
|
|
24
|
+
# mid-suite crash into a false green.
|
|
25
|
+
trap 'rc=$?; rm -rf "$TMP"; exit $rc' EXIT
|
|
26
|
+
|
|
27
|
+
fail() { echo "FAIL: $*" >&2; exit 1; }
|
|
28
|
+
assert_rc() { [ "$1" = "$2" ] || fail "expected rc=$2 got rc=$1${3:+ ($3)}"; }
|
|
29
|
+
assert_contains() { case "$2" in *"$1"*) : ;; *) fail "expected output to contain: $1${3:+ ($3)}";; esac; }
|
|
30
|
+
assert_not_contains() { case "$2" in *"$1"*) fail "expected output NOT to contain: $1${3:+ ($3)}";; *) : ;; esac; }
|
|
31
|
+
|
|
32
|
+
REPO="$TMP/repo"
|
|
33
|
+
git clone -q "$ROOT" "$REPO"
|
|
34
|
+
git -C "$REPO" config user.email test@example.invalid
|
|
35
|
+
git -C "$REPO" config user.name "Test User"
|
|
36
|
+
# A throwaway upstream-owner reference committed to the base, so a later case can
|
|
37
|
+
# MOVE it out of skills/ (the rename/move-out bypass). Nothing else references it,
|
|
38
|
+
# so moving it does not trip the broken-.md-reference check.
|
|
39
|
+
MOVEOUT_REL="skills/product-rd-workflow/references/zz-fixture-moveout.md"
|
|
40
|
+
printf '# fixture move-out reference\n\nNeutral placeholder content for the impact-chain move-out test.\n' > "$REPO/$MOVEOUT_REL"
|
|
41
|
+
# A committed (unchanged-in-cases) sentence for the stale-anchor case: long
|
|
42
|
+
# enough to pass the 16-char minimum, so that case tests added-line binding.
|
|
43
|
+
printf '\n- Stale anchor fixture sentence must stay unchanged for coverage.\n' >> "$REPO/skills/product-rd-workflow/references/adr-convention.md"
|
|
44
|
+
# A file whose NAME carries the owner's slug, so a later case can rename the owner
|
|
45
|
+
# and its slug-named file together the way a real rename does.
|
|
46
|
+
printf '# fixture slug-named reference\n\nNeutral placeholder for the inner-rename test.\n' > "$REPO/skills/platform-observability/references/platform-observability-playbook.md"
|
|
47
|
+
# A script mentioning the renameable slug, so a later case can retarget it PURELY
|
|
48
|
+
# and isolate the prose-only guard from the reproduction check.
|
|
49
|
+
printf '# fixture slug mention: platform-observability\n' >> "$REPO/skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh"
|
|
50
|
+
printf '\nFixture eligible sibling mention: platform-observability.\n' >> "$REPO/skills/product-rd-workflow/references/adr-convention.md"
|
|
51
|
+
git -C "$REPO" add -A
|
|
52
|
+
git -C "$REPO" commit -qm "seed throwaway upstream reference"
|
|
53
|
+
git -C "$REPO" branch fixture-base HEAD
|
|
54
|
+
fixture_base_revision="$(git -C "$REPO" rev-parse fixture-base)"
|
|
55
|
+
|
|
56
|
+
REGISTER="$REPO/skills/skill-extraction-workflow/references/source-register.md"
|
|
57
|
+
UPSTREAM_REF="skills/product-rd-workflow/references/adr-convention.md" # an upstream owner's reference
|
|
58
|
+
UPSTREAM_SCRIPT="skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh" # an upstream owner's script
|
|
59
|
+
[ -f "$REPO/$UPSTREAM_REF" ] || fail "fixture reference missing: $UPSTREAM_REF"
|
|
60
|
+
[ -f "$REPO/$UPSTREAM_SCRIPT" ] || fail "fixture script missing: $UPSTREAM_SCRIPT"
|
|
61
|
+
|
|
62
|
+
# Fresh per-case branch off fixture-base, with upstream set so the checker's
|
|
63
|
+
# base-ref detection resolves to a stable local ref (independent of a detached CI
|
|
64
|
+
# checkout head).
|
|
65
|
+
new_case() {
|
|
66
|
+
git -C "$REPO" switch -q -C "$1" fixture-base
|
|
67
|
+
git -C "$REPO" branch --set-upstream-to=fixture-base "$1" >/dev/null 2>&1
|
|
68
|
+
}
|
|
69
|
+
commit_case() { git -C "$REPO" add -A; git -C "$REPO" commit -qm "$1"; }
|
|
70
|
+
full_check_runs=0
|
|
71
|
+
gate_runs=0
|
|
72
|
+
run_full_check() {
|
|
73
|
+
full_check_runs=$((full_check_runs + 1))
|
|
74
|
+
set +e
|
|
75
|
+
out="$(env -u ALIAS_AUDIT_CMD -u CCL_SKILL_BASE_REF bash "$CHECK_SCRIPT" "$REPO" 2>&1)"
|
|
76
|
+
rc=$?
|
|
77
|
+
set -e
|
|
78
|
+
}
|
|
79
|
+
# A real rename retargets EVERY mention, including the agents/ overlay's prompt
|
|
80
|
+
# token. Leaving one behind is what a stale-reference bug looks like, and the
|
|
81
|
+
# identifier-rename class is supposed to refuse it, so the fixture must retarget
|
|
82
|
+
# as completely as the real thing does.
|
|
83
|
+
retarget_all() {
|
|
84
|
+
for target in "$@"; do
|
|
85
|
+
find "$target" -type f -exec perl -pi -e 's/platform-observability/platform-signal-evidence/g' {} +
|
|
86
|
+
done
|
|
87
|
+
}
|
|
88
|
+
run_gate() {
|
|
89
|
+
gate_runs=$((gate_runs + 1))
|
|
90
|
+
set +e
|
|
91
|
+
out="$(env -u ALIAS_AUDIT_CMD -u CCL_SKILL_BASE_REF ruby "$GATE_SCRIPT" "$REPO" 2>&1)"
|
|
92
|
+
rc=$?
|
|
93
|
+
set -e
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# Case 1: an upstream owner's REFERENCE changed with NO impact-chain row -> block.
|
|
97
|
+
new_case case-ref-no-row
|
|
98
|
+
printf '\nFixture reference edit for the impact-chain refscripts gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
99
|
+
commit_case "ref edit, no impact-chain row"
|
|
100
|
+
run_full_check
|
|
101
|
+
assert_rc "$rc" 1 "reference edit without a row must fail the gate"
|
|
102
|
+
assert_contains "impact_chain_gate_missing" "$out" "checker should name the missing-row cause"
|
|
103
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "diagnostic should name the changed upstream owner"
|
|
104
|
+
assert_contains "references/ and scripts/" "$out" "diagnostic should explain reference/scripts now count"
|
|
105
|
+
|
|
106
|
+
# Case 2: a matching impact-chain row without behavioral evidence is still
|
|
107
|
+
# incomplete. The previous gate accepted the row because it only checked the
|
|
108
|
+
# owner path, so "the rule is already covered" could close with no replay or
|
|
109
|
+
# firing-path proof.
|
|
110
|
+
new_case case-ref-row-without-behavior-evidence
|
|
111
|
+
printf '\nFixture reference edit for the impact-chain behavior-evidence gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
112
|
+
printf '| Fixture row without behavior evidence | `downstream-executor` | Executor applies the reference behavior | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
113
|
+
commit_case "ref edit with row but no behavior evidence"
|
|
114
|
+
run_gate
|
|
115
|
+
assert_rc "$rc" 1 "an impact-chain row without behavioral evidence must fail"
|
|
116
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should require the behavior-evidence record"
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# A genuinely normative rule phrased with "Never" (not in the older verb list)
|
|
120
|
+
# must be accepted as an enforcing firing-path line.
|
|
121
|
+
new_case case-ref-never-verb-firing-path
|
|
122
|
+
printf '\n- Never bypass the fixture upstream rule for this gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
123
|
+
printf '| Fixture never-verb rule | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Never bypass the fixture upstream rule | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
124
|
+
commit_case "never-verb normative firing path"
|
|
125
|
+
run_gate
|
|
126
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "a never-phrased normative rule should satisfy the firing-path gate"
|
|
127
|
+
assert_rc "$rc" 0 "a never-phrased normative list rule must be accepted"
|
|
128
|
+
|
|
129
|
+
# A purely DESCRIPTIVE list line ("always exposes" — no imperative/prohibitive
|
|
130
|
+
# verb) is not an enforcing rule; the widened verb list must not admit it.
|
|
131
|
+
new_case case-ref-descriptive-always-firing-path
|
|
132
|
+
printf '\n- The host always exposes this delegation capability surface.\n' >> "$REPO/$UPSTREAM_REF"
|
|
133
|
+
printf '| Fixture descriptive always line | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#always exposes this delegation capability | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
134
|
+
commit_case "descriptive always line as firing path"
|
|
135
|
+
run_gate
|
|
136
|
+
assert_rc "$rc" 1 "a descriptive list line must not satisfy the firing-path gate"
|
|
137
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should reject a descriptive (non-normative) anchor line"
|
|
138
|
+
|
|
139
|
+
# An HTML comment can smuggle normative vocabulary past the verb heuristic; a
|
|
140
|
+
# comment-carrying anchor line is never an enforcing rule surface.
|
|
141
|
+
new_case case-ref-html-comment-firing-path
|
|
142
|
+
printf '\n- <!-- must enforce this hidden fixture directive --> bookkeeping note.\n' >> "$REPO/$UPSTREAM_REF"
|
|
143
|
+
printf '| Fixture html-comment firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#must enforce this hidden fixture directive | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
144
|
+
commit_case "html-comment line as firing path"
|
|
145
|
+
run_gate
|
|
146
|
+
assert_rc "$rc" 1 "an HTML-comment anchor line must not satisfy the firing-path gate"
|
|
147
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should reject comment-smuggled normative vocabulary"
|
|
148
|
+
|
|
149
|
+
# A changed executable-bit file without a shebang (e.g. a chmod'ed Markdown
|
|
150
|
+
# file) is not an executable firing surface.
|
|
151
|
+
new_case case-ref-noshebang-command-firing-path
|
|
152
|
+
printf '\nFixture reference edit for the shebang command gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
153
|
+
printf '# fixture executable-bit markdown\n' > "$REPO/skills/product-rd-workflow/scripts/zz-fixture-noshebang.md"
|
|
154
|
+
chmod +x "$REPO/skills/product-rd-workflow/scripts/zz-fixture-noshebang.md"
|
|
155
|
+
printf '| Fixture no-shebang command | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: command:skills/product-rd-workflow/scripts/zz-fixture-noshebang.md | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
156
|
+
commit_case "executable-bit file without shebang as firing path"
|
|
157
|
+
run_gate
|
|
158
|
+
assert_rc "$rc" 1 "a shebang-less executable-bit file must not satisfy a command firing path"
|
|
159
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should require a shebang on command firing surfaces"
|
|
160
|
+
|
|
161
|
+
# Positive command-locator coverage: a genuinely changed 100755 shebang script
|
|
162
|
+
# under the owner must be ACCEPTED as a firing surface (rejection-only coverage
|
|
163
|
+
# would let an implementation that refuses every command: locator pass).
|
|
164
|
+
new_case case-ref-command-firing-path-accepted
|
|
165
|
+
printf '\nFixture reference edit for the accepted command firing path.\n' >> "$REPO/$UPSTREAM_REF"
|
|
166
|
+
printf '#!/usr/bin/env bash\nprintf "fixture owner enforcement script\\n"\n' > "$REPO/skills/product-rd-workflow/scripts/zz-fixture-owner-command.sh"
|
|
167
|
+
chmod +x "$REPO/skills/product-rd-workflow/scripts/zz-fixture-owner-command.sh"
|
|
168
|
+
printf '| Fixture accepted command firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: command:skills/product-rd-workflow/scripts/zz-fixture-owner-command.sh | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
169
|
+
commit_case "changed shebang owner executable as firing path"
|
|
170
|
+
run_gate
|
|
171
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "a changed shebang owner executable should satisfy the firing-path gate"
|
|
172
|
+
assert_rc "$rc" 0 "a complete RED row with a changed owner executable must pass"
|
|
173
|
+
|
|
174
|
+
# A malformed impact-chain-looking row (wrong cell count) is warned but stays
|
|
175
|
+
# advisory: hard-blocking would false-positive on the register's many other
|
|
176
|
+
# legitimate table shapes, and deliberate mangling is outside the trust model
|
|
177
|
+
# (review owns that residual). The complete sibling row satisfies the gate.
|
|
178
|
+
new_case case-ref-malformed-row-advisory
|
|
179
|
+
printf '\n- MUST enforce Fixture reference edit for the malformed-row gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
180
|
+
printf '| Fixture complete sibling row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
181
|
+
printf '| Fixture malformed row | `downstream-executor` | prose with an unescaped | pipe inside a cell | `updated` | `product-rd-workflow/SKILL.md` second disposition |\n' >> "$REGISTER"
|
|
182
|
+
commit_case "complete row plus malformed sibling row"
|
|
183
|
+
run_gate
|
|
184
|
+
assert_contains "impact_chain_row_malformed" "$out" "checker should warn about the malformed row"
|
|
185
|
+
assert_rc "$rc" 0 "a malformed row stays advisory when a complete sibling row satisfies the gate"
|
|
186
|
+
|
|
187
|
+
# A semantic-control label alone cannot close a non-wording owner diff: the
|
|
188
|
+
# owner package needs at least one RED-baseline row, else an author could
|
|
189
|
+
# label every change "stable" and self-clear the package.
|
|
190
|
+
new_case case-ref-semantic-control-alone
|
|
191
|
+
printf '\n- MUST enforce Fixture reference edit for semantic-control firing-path coverage.\n' >> "$REPO/$UPSTREAM_REF"
|
|
192
|
+
printf '| Fixture semantic control self-adjudication | `downstream-executor` | behavioral-evidence: semantic-control; observed-failure: no; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
193
|
+
commit_case "semantic control label alone"
|
|
194
|
+
run_gate
|
|
195
|
+
assert_rc "$rc" 1 "a semantic-control-only owner package must fail"
|
|
196
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should require at least one RED-baseline row per non-wording owner"
|
|
197
|
+
|
|
198
|
+
# A stable semantic-control row may supplement a RED-baseline row for the same
|
|
199
|
+
# non-wording owner; the RED row satisfies the owner-level floor.
|
|
200
|
+
new_case case-ref-semantic-control-with-owner-red
|
|
201
|
+
printf '\n- MUST enforce Fixture reference edit for semantic-control plus owner RED validation.\n' >> "$REPO/$UPSTREAM_REF"
|
|
202
|
+
printf '| Fixture stable semantic control | `downstream-executor` | behavioral-evidence: semantic-control; observed-failure: no; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` stable control |\n' >> "$REGISTER"
|
|
203
|
+
printf '| Fixture owner behavior delta | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` changed behavior |\n' >> "$REGISTER"
|
|
204
|
+
commit_case "semantic control supplemented by owner RED"
|
|
205
|
+
run_gate
|
|
206
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "valid owner RED should permit a supplementary stable semantic-control row"
|
|
207
|
+
assert_rc "$rc" 0 "semantic-control plus a valid owner RED row should pass"
|
|
208
|
+
|
|
209
|
+
# Case 2a: an observed failure with RED evidence but no named firing path is not
|
|
210
|
+
# closed. This is the exact "rule existed but did not execute" regression.
|
|
211
|
+
new_case case-ref-observed-without-firing-path
|
|
212
|
+
printf '\nFixture reference edit for the impact-chain firing-path gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
213
|
+
printf '| Fixture observed failure without firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
214
|
+
commit_case "ref edit with observed failure but no firing path"
|
|
215
|
+
run_gate
|
|
216
|
+
assert_rc "$rc" 1 "an observed failure without a firing path must fail"
|
|
217
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should name the missing firing-path proof"
|
|
218
|
+
|
|
219
|
+
# Whitespace is not a firing path either.
|
|
220
|
+
new_case case-ref-observed-with-empty-firing-path
|
|
221
|
+
printf '\nFixture reference edit for the empty firing-path gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
222
|
+
printf '| Fixture observed failure with empty firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: ; | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
223
|
+
commit_case "ref edit with empty firing path"
|
|
224
|
+
run_gate
|
|
225
|
+
assert_rc "$rc" 1 "an empty firing path must fail"
|
|
226
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should reject whitespace-only firing paths"
|
|
227
|
+
|
|
228
|
+
# Non-placeholder prose is still not a resolvable firing mechanism.
|
|
229
|
+
new_case case-ref-observed-with-unresolvable-firing-path
|
|
230
|
+
printf '\nFixture reference edit for the resolvable firing-path gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
231
|
+
printf '| Fixture observed failure with prose firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: the existing rule | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
232
|
+
commit_case "ref edit with unresolvable firing path"
|
|
233
|
+
run_gate
|
|
234
|
+
assert_rc "$rc" 1 "an arbitrary prose firing path must fail"
|
|
235
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should require a resolvable firing mechanism"
|
|
236
|
+
|
|
237
|
+
# A real executable in another owner's directory is not this owner's firing
|
|
238
|
+
# mechanism, even though it exists and is changed by the checker under test.
|
|
239
|
+
new_case case-ref-cross-owner-firing-path
|
|
240
|
+
printf '\nFixture reference edit for owner-scoped firing paths.\n' >> "$REPO/$UPSTREAM_REF"
|
|
241
|
+
mkdir -p "$REPO/skills/grill-me/scripts"
|
|
242
|
+
printf '#!/usr/bin/env bash\nprintf "fixture cross-owner executable\\n"\n' > "$REPO/skills/grill-me/scripts/zz-fixture-crossowner.sh"
|
|
243
|
+
chmod +x "$REPO/skills/grill-me/scripts/zz-fixture-crossowner.sh"
|
|
244
|
+
printf '| Fixture cross-owner firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: command:skills/grill-me/scripts/zz-fixture-crossowner.sh | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
245
|
+
commit_case "ref edit with cross-owner firing path"
|
|
246
|
+
run_gate
|
|
247
|
+
assert_rc "$rc" 1 "a cross-owner firing mechanism must fail"
|
|
248
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should bind firing paths to the changed owner"
|
|
249
|
+
|
|
250
|
+
# Merely adding a uniquely-addressable prose bullet under the owner is still the
|
|
251
|
+
# original content-without-enforcement failure. A file firing path must land on a
|
|
252
|
+
# normative numbered/list rule, not decorative bookkeeping text.
|
|
253
|
+
new_case case-ref-decorative-owner-prose-firing-path
|
|
254
|
+
printf '\nFixture reference edit for enforcing firing-path coverage.\n' >> "$REPO/$UPSTREAM_REF"
|
|
255
|
+
printf '\n- This row is recorded for ledger bookkeeping only.\n' >> "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
256
|
+
printf '| Fixture decorative firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#This row is recorded for ledger bookkeeping only | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
257
|
+
commit_case "ref edit with decorative owner prose firing path"
|
|
258
|
+
run_gate
|
|
259
|
+
assert_rc "$rc" 1 "decorative owner prose must not satisfy a firing path"
|
|
260
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should require an enforcing checklist or rule line"
|
|
261
|
+
|
|
262
|
+
# A token that exists only in old content is not a newly landed firing point.
|
|
263
|
+
new_case case-ref-stale-anchor-firing-path
|
|
264
|
+
printf '\nFixture reference edit for changed-anchor coverage.\n' >> "$REPO/$UPSTREAM_REF"
|
|
265
|
+
printf '| Fixture stale-anchor firing path | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Stale anchor fixture sentence must stay unchanged | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
266
|
+
commit_case "ref edit with stale anchor firing path"
|
|
267
|
+
run_gate
|
|
268
|
+
assert_rc "$rc" 1 "an unchanged anchor must fail"
|
|
269
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "checker should require a changed-line anchor"
|
|
270
|
+
|
|
271
|
+
# Case 2b: same reference change WITH a complete matching impact-chain row ->
|
|
272
|
+
# gate satisfied.
|
|
273
|
+
new_case case-ref-with-row
|
|
274
|
+
printf '\n- MUST enforce Fixture reference edit for the impact-chain refscripts gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
275
|
+
printf '| Fixture reference-path rule | `downstream-executor` | Executor applies the reference behavior; behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
276
|
+
commit_case "ref edit with matching impact-chain row"
|
|
277
|
+
run_gate
|
|
278
|
+
assert_not_contains "impact_chain_gate_missing" "$out" "a matching row must satisfy the gate for a reference edit"
|
|
279
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "complete behavior evidence must satisfy the gate"
|
|
280
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "a named firing path must satisfy the observed-failure gate"
|
|
281
|
+
assert_rc "$rc" 0 "reference edit with a valid row should pass"
|
|
282
|
+
|
|
283
|
+
# Every added row must be complete. One boilerplate-complete row must not mask a
|
|
284
|
+
# second bare disposition for the same owner.
|
|
285
|
+
new_case case-ref-complete-row-masks-incomplete-row
|
|
286
|
+
printf '\n- MUST enforce Fixture reference edit for per-row behavior evidence.\n' >> "$REPO/$UPSTREAM_REF"
|
|
287
|
+
printf '| Fixture complete row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
288
|
+
printf '| Fixture incomplete sibling row | `downstream-executor` | Bare owner citation only | `updated` | `product-rd-workflow/SKILL.md` second disposition |\n' >> "$REGISTER"
|
|
289
|
+
commit_case "one complete row cannot mask one incomplete row"
|
|
290
|
+
run_gate
|
|
291
|
+
assert_rc "$rc" 1 "every added row for an owner must carry complete behavior evidence"
|
|
292
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should reject the incomplete sibling row"
|
|
293
|
+
|
|
294
|
+
# Case 3: an upstream owner's SCRIPT changed with NO impact-chain row -> block.
|
|
295
|
+
new_case case-script-no-row
|
|
296
|
+
printf '\n# fixture script edit for the impact-chain refscripts gate\n' >> "$REPO/$UPSTREAM_SCRIPT"
|
|
297
|
+
commit_case "script edit, no impact-chain row"
|
|
298
|
+
run_gate
|
|
299
|
+
assert_rc "$rc" 1 "script edit without a row must fail the gate"
|
|
300
|
+
assert_contains "impact_chain_gate_missing" "$out" "checker should name the missing-row cause for a script edit"
|
|
301
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "diagnostic should name the changed upstream owner"
|
|
302
|
+
|
|
303
|
+
# Case 2c: an INDENTED impact-chain evidence row (valid Markdown, ≤3 leading
|
|
304
|
+
# spaces) must still count — it must not be falsely blocked. Guards the parser
|
|
305
|
+
# normalization that keeps item-1 and item-2 consistent.
|
|
306
|
+
new_case case-ref-indented-row
|
|
307
|
+
UPSTREAM_REF2="skills/test-artifact-management/references/gen_report.py" # a NON-.md upstream reference
|
|
308
|
+
[ -f "$REPO/$UPSTREAM_REF2" ] || fail "fixture non-md reference missing: $UPSTREAM_REF2"
|
|
309
|
+
printf '\n- MUST enforce Fixture reference edit for the impact-chain refscripts gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
310
|
+
printf ' | Fixture indented row | `downstream-executor` | Executor applies the reference behavior; behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
311
|
+
commit_case "ref edit with an indented (valid) impact-chain row"
|
|
312
|
+
run_gate
|
|
313
|
+
assert_not_contains "impact_chain_gate_missing" "$out" "an indented but valid evidence row must count"
|
|
314
|
+
assert_rc "$rc" 0 "indented valid row should pass"
|
|
315
|
+
|
|
316
|
+
# Deterministically wording-only rows are the sole no-firing-path exception.
|
|
317
|
+
new_case case-ref-wording-only-row
|
|
318
|
+
printf '\n' >> "$REPO/$UPSTREAM_REF"
|
|
319
|
+
printf '| Fixture formatting-only row | `downstream-executor` | behavioral-evidence: not-required wording-only; artifact: diff:product-rd-workflow/SKILL.md; observed-failure: no | `updated` | `product-rd-workflow/SKILL.md` formatting-only edit |\n' >> "$REGISTER"
|
|
320
|
+
commit_case "formatting-only edit with explicit evidence"
|
|
321
|
+
run_gate
|
|
322
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "wording-only row with artifact should satisfy behavior record"
|
|
323
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "wording-only row does not need a firing path"
|
|
324
|
+
assert_rc "$rc" 0 "deterministically wording-only row should pass"
|
|
325
|
+
|
|
326
|
+
# A substantive change cannot self-label as wording-only to skip the firing path.
|
|
327
|
+
new_case case-ref-substantive-mislabeled-wording-only
|
|
328
|
+
printf '\nSubstantive fixture behavior change.\n' >> "$REPO/$UPSTREAM_REF"
|
|
329
|
+
printf '| Fixture mislabeled wording-only row | `downstream-executor` | behavioral-evidence: not-required wording-only; artifact: diff:product-rd-workflow/SKILL.md; observed-failure: no | `updated` | `product-rd-workflow/SKILL.md` substantive edit |\n' >> "$REGISTER"
|
|
330
|
+
commit_case "substantive edit mislabeled wording-only"
|
|
331
|
+
run_gate
|
|
332
|
+
assert_rc "$rc" 1 "a substantive edit mislabeled wording-only must fail"
|
|
333
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should reject self-adjudicated wording-only classification"
|
|
334
|
+
|
|
335
|
+
# Adding a firing-path string does not rescue the false classification; a real
|
|
336
|
+
# non-wording change must use RED-baseline or semantic-control.
|
|
337
|
+
new_case case-ref-substantive-mislabeled-wording-only-with-path
|
|
338
|
+
printf '\nAnother substantive fixture behavior change.\n' >> "$REPO/$UPSTREAM_REF"
|
|
339
|
+
printf '| Fixture mislabeled wording-only row with path | `downstream-executor` | behavioral-evidence: not-required wording-only; artifact: diff:product-rd-workflow/SKILL.md; observed-failure: no; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` substantive edit |\n' >> "$REGISTER"
|
|
340
|
+
commit_case "substantive edit mislabeled wording-only with path"
|
|
341
|
+
run_gate
|
|
342
|
+
assert_rc "$rc" 1 "a firing path must not rescue a false wording-only label"
|
|
343
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should require a non-wording behavioral status"
|
|
344
|
+
|
|
345
|
+
# Wording-only is computed across every changed file in the owner package. A
|
|
346
|
+
# blank-only reference hunk cannot hide a substantive SKILL.md hunk.
|
|
347
|
+
new_case case-owner-multifile-substantive-mislabeled-wording-only
|
|
348
|
+
printf '\n' >> "$REPO/$UPSTREAM_REF"
|
|
349
|
+
printf '\nSubstantive multi-file owner behavior change.\n' >> "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
350
|
+
printf '| Fixture multi-file mislabeled wording-only row | `downstream-executor` | behavioral-evidence: not-required wording-only; artifact: diff:product-rd-workflow/SKILL.md; observed-failure: no | `updated` | `product-rd-workflow/SKILL.md` multi-file substantive edit |\n' >> "$REGISTER"
|
|
351
|
+
commit_case "multi-file substantive owner edit mislabeled wording-only"
|
|
352
|
+
run_gate
|
|
353
|
+
assert_rc "$rc" 1 "wording-only must be false when any owner file has letter or digit deltas"
|
|
354
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should aggregate the full owner package diff"
|
|
355
|
+
|
|
356
|
+
# The wording-only class applies only to Markdown prose: a punctuation-only
|
|
357
|
+
# edit in a runnable non-.md reference can change behavior (a deleted paren),
|
|
358
|
+
# so it must not be classifiable as wording-only.
|
|
359
|
+
new_case case-ref-nonmd-punctuation-mislabeled-wording-only
|
|
360
|
+
printf '\n#\n' >> "$REPO/$UPSTREAM_REF2"
|
|
361
|
+
printf '| Fixture non-md punctuation wording-only row | `downstream-executor` | behavioral-evidence: not-required wording-only; observed-failure: no | `updated` | `test-artifact-management/SKILL.md` runnable reference edit |\n' >> "$REGISTER"
|
|
362
|
+
commit_case "punctuation-only edit to a runnable reference mislabeled wording-only"
|
|
363
|
+
run_gate
|
|
364
|
+
assert_rc "$rc" 1 "a non-md owner file change must never classify as wording-only"
|
|
365
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should restrict wording-only to Markdown prose"
|
|
366
|
+
|
|
367
|
+
# A declaration key embedded mid-prose is not a declaration: each field must
|
|
368
|
+
# start its own semicolon-delimited fragment.
|
|
369
|
+
new_case case-ref-embedded-declaration-key
|
|
370
|
+
printf '\n- MUST enforce Fixture reference edit for the embedded-key gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
371
|
+
printf '| Fixture embedded key row | `downstream-executor` | there is no behavioral-evidence: RED-baseline here; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Fixture reference edit | `updated` | `product-rd-workflow/SKILL.md` reference edit |\n' >> "$REGISTER"
|
|
372
|
+
commit_case "declaration key embedded in prose"
|
|
373
|
+
run_gate
|
|
374
|
+
assert_rc "$rc" 1 "an embedded declaration key must not parse as a declaration"
|
|
375
|
+
assert_contains "impact_chain_behavior_evidence_missing" "$out" "checker should require fragment-anchored declarations"
|
|
376
|
+
|
|
377
|
+
# A failing git diff must FAIL CLOSED: empty output from a broken subprocess
|
|
378
|
+
# must never read as "no changed owners".
|
|
379
|
+
new_case case-git-diff-failure-fails-closed
|
|
380
|
+
printf '\nFixture reference edit for the git fail-closed gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
381
|
+
commit_case "ref edit behind a failing git diff"
|
|
382
|
+
GIT_SHIM_DIR="$TMP/git-shim"
|
|
383
|
+
mkdir -p "$GIT_SHIM_DIR"
|
|
384
|
+
REAL_GIT="$(command -v git)"
|
|
385
|
+
printf '#!/usr/bin/env bash\ncase "$*" in *"--no-renames -z"*) exit 1 ;; esac\nexec "%s" "$@"\n' "$REAL_GIT" > "$GIT_SHIM_DIR/git"
|
|
386
|
+
chmod +x "$GIT_SHIM_DIR/git"
|
|
387
|
+
set +e
|
|
388
|
+
gate_runs=$((gate_runs + 1))
|
|
389
|
+
out="$(env -u ALIAS_AUDIT_CMD -u CCL_SKILL_BASE_REF PATH="$GIT_SHIM_DIR:$PATH" ruby "$GATE_SCRIPT" "$REPO" 2>&1)"
|
|
390
|
+
rc=$?
|
|
391
|
+
set -e
|
|
392
|
+
assert_rc "$rc" 1 "a failing changed-path diff must fail the gate closed"
|
|
393
|
+
assert_contains "impact_chain_git_failed" "$out" "checker should name the failed git subprocess"
|
|
394
|
+
|
|
395
|
+
# Case 2d: multi-perspective-research is an upstream evidence/coverage owner.
|
|
396
|
+
# Editing it without an impact-chain row must not bypass the gate.
|
|
397
|
+
new_case case-research-owner-no-row
|
|
398
|
+
printf '\nFixture research-owner edit for impact-chain coverage.\n' >> "$REPO/skills/multi-perspective-research/SKILL.md"
|
|
399
|
+
commit_case "research owner edit, no impact-chain row"
|
|
400
|
+
run_gate
|
|
401
|
+
assert_rc "$rc" 1 "a research-owner edit without an impact-chain row must fail"
|
|
402
|
+
assert_contains "impact_chain_gate_missing" "$out" "research evidence owner must trigger the impact-chain gate"
|
|
403
|
+
assert_contains "multi-perspective-research/SKILL.md" "$out" "diagnostic should name the research owner"
|
|
404
|
+
|
|
405
|
+
# skill-extraction-workflow is itself an upstream owner. Its checker/rules cannot
|
|
406
|
+
# escape the same impact-chain row requirement that they impose on other owners.
|
|
407
|
+
new_case case-extraction-owner-no-row
|
|
408
|
+
printf '\n- MUST enforce fixture extraction-owner behavior.\n' >> "$REPO/skills/skill-extraction-workflow/SKILL.md"
|
|
409
|
+
commit_case "skill-extraction owner edit, no impact-chain row"
|
|
410
|
+
run_gate
|
|
411
|
+
assert_rc "$rc" 1 "the extraction owner must require its own impact-chain row"
|
|
412
|
+
assert_contains "impact_chain_gate_missing" "$out" "extraction owner must trigger the impact-chain gate"
|
|
413
|
+
assert_contains "skill-extraction-workflow/SKILL.md" "$out" "diagnostic should name the extraction owner"
|
|
414
|
+
|
|
415
|
+
# Case 3a2: a NON-.md file under an upstream owner's references/ (e.g. a runnable
|
|
416
|
+
# helper) also ships behavior and must require a row. Guards the references/.+ fix.
|
|
417
|
+
new_case case-nonmd-ref-no-row
|
|
418
|
+
printf '\n# fixture edit to a non-md upstream reference helper\n' >> "$REPO/$UPSTREAM_REF2"
|
|
419
|
+
commit_case "non-md reference edit, no impact-chain row"
|
|
420
|
+
run_gate
|
|
421
|
+
assert_rc "$rc" 1 "a non-.md reference edit without a row must fail the gate"
|
|
422
|
+
assert_contains "impact_chain_gate_missing" "$out" "non-.md reference edits must not bypass the gate"
|
|
423
|
+
assert_contains "test-artifact-management/SKILL.md" "$out" "diagnostic should name the owner of the non-md reference"
|
|
424
|
+
|
|
425
|
+
# Case 3b: MOVING an upstream owner's reference OUT of skills/ (a rename git would
|
|
426
|
+
# otherwise collapse to the destination) must still trigger the gate via the old
|
|
427
|
+
# path. Guards the --no-renames fix.
|
|
428
|
+
new_case case-ref-moveout
|
|
429
|
+
git -C "$REPO" mv "$MOVEOUT_REL" "docs/zz-fixture-moveout.md"
|
|
430
|
+
commit_case "move an upstream reference out of skills/ with no row"
|
|
431
|
+
run_gate
|
|
432
|
+
assert_rc "$rc" 1 "moving an upstream reference out of skills/ without a row must fail"
|
|
433
|
+
assert_contains "impact_chain_gate_missing" "$out" "a move-out must not evade the gate"
|
|
434
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "diagnostic should name the owner whose reference moved out"
|
|
435
|
+
|
|
436
|
+
# Deleting an owner reference can close when a changed surviving rule provides
|
|
437
|
+
# the firing path — legitimate rule replacement stays possible while the
|
|
438
|
+
# move-out itself still demands a row.
|
|
439
|
+
new_case case-ref-moveout-with-replacement-row
|
|
440
|
+
git -C "$REPO" mv "$MOVEOUT_REL" "docs/zz-fixture-moveout.md"
|
|
441
|
+
printf '\n- MUST enforce Fixture replacement rule after deleting an owner reference.\n' >> "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
442
|
+
printf '| Fixture move-out replacement row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#Fixture replacement rule after deleting an owner reference | `updated` | `product-rd-workflow/SKILL.md` replacement rule |\n' >> "$REGISTER"
|
|
443
|
+
commit_case "move an upstream reference out with replacement evidence"
|
|
444
|
+
run_gate
|
|
445
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "a deletion covered by a surviving changed firing path should validate"
|
|
446
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "replacement rule should provide the changed firing path"
|
|
447
|
+
assert_rc "$rc" 0 "move-out with complete deleted-subject evidence should pass"
|
|
448
|
+
|
|
449
|
+
# Case 4: the source-register itself is the ledger and is EXCLUDED — appending a
|
|
450
|
+
# row to it (with no other upstream change) must NOT demand a self-referential row.
|
|
451
|
+
new_case case-register-only
|
|
452
|
+
printf '\n<!-- fixture: benign ledger note, no upstream change -->\n' >> "$REGISTER"
|
|
453
|
+
commit_case "register-only edit is excluded"
|
|
454
|
+
run_gate
|
|
455
|
+
assert_not_contains "impact_chain_gate_missing" "$out" "editing only the ledger must not trigger the gate"
|
|
456
|
+
assert_rc "$rc" 0 "register-only edit should pass"
|
|
457
|
+
|
|
458
|
+
# The exact shared ledger path is excluded even when the upstream owner is
|
|
459
|
+
# skill-extraction-workflow itself; the surviving owner SKILL remains bound.
|
|
460
|
+
new_case case-extraction-owner-ledger-exclusion
|
|
461
|
+
printf '\n- MUST enforce Fixture extraction owner ledger exclusion.\n' >> "$REPO/skills/skill-extraction-workflow/SKILL.md"
|
|
462
|
+
printf '| Fixture extraction ledger exclusion | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/skill-extraction-workflow/SKILL.md#Fixture extraction owner ledger exclusion | `updated` | `skill-extraction-workflow/SKILL.md` fixture rule |\n' >> "$REGISTER"
|
|
463
|
+
git -C "$REPO" add -A
|
|
464
|
+
git -C "$REPO" commit -qm "extraction owner ledger exclusion"
|
|
465
|
+
run_gate
|
|
466
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "shared ledger should be excluded from extraction-owner subjects"
|
|
467
|
+
assert_rc "$rc" 0 "extraction owner change plus ledger row should pass"
|
|
468
|
+
|
|
469
|
+
# Case 5: RENAMING a whole upstream owner package. --no-renames surfaces the old
|
|
470
|
+
# package path as a delete, so the subject set used to demand a row for an owner
|
|
471
|
+
# whose SKILL.md no longer exists — while the evidence check rejects any row that
|
|
472
|
+
# cites a missing SKILL.md. The gate asked for exactly the row it refused, leaving
|
|
473
|
+
# a rename with no honest way to pass. The surviving name carries the row instead.
|
|
474
|
+
new_case case-owner-package-renamed
|
|
475
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
476
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
477
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
478
|
+
commit_case "rename an upstream owner package with a row on the surviving name"
|
|
479
|
+
run_gate
|
|
480
|
+
assert_not_contains "platform-observability/SKILL.md" "$out" "the renamed-away path must not be demanded as a row subject"
|
|
481
|
+
assert_not_contains "impact_chain_gate_missing" "$out" "a renamed owner covered on its surviving name must not block"
|
|
482
|
+
assert_rc "$rc" 0 "renaming an owner package with a row on the new name should pass"
|
|
483
|
+
|
|
484
|
+
# The exclusion is scoped to packages that are actually gone: a LIVE owner still
|
|
485
|
+
# owes its row, so the rename fix cannot be reused to skip a normal edit.
|
|
486
|
+
new_case case-owner-package-renamed-live-owner-still-bound
|
|
487
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
488
|
+
printf '\nFixture reference edit alongside an unrelated owner rename.\n' >> "$REPO/$UPSTREAM_REF"
|
|
489
|
+
commit_case "rename one owner while editing another owner's reference, no row"
|
|
490
|
+
run_gate
|
|
491
|
+
assert_rc "$rc" 1 "a live owner's reference edit must still demand a row"
|
|
492
|
+
assert_contains "impact_chain_gate_missing" "$out" "the live owner must still be named"
|
|
493
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "diagnostic should name the live owner"
|
|
494
|
+
assert_not_contains "platform-observability/SKILL.md" "$out" "the renamed-away path must stay out of the subject set"
|
|
495
|
+
|
|
496
|
+
# Case 6: an owner that only RETARGETS its pointers at a renamed skill. Its diff
|
|
497
|
+
# is reproduced byte-for-byte by applying the rename to the base bytes, so there
|
|
498
|
+
# is no observed delta to declare and no changed normative rule to anchor a
|
|
499
|
+
# firing path on. The RED floor used to demand one anyway, which only a fabricated
|
|
500
|
+
# row could satisfy.
|
|
501
|
+
new_case case-identifier-rename-retarget
|
|
502
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
503
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis"
|
|
504
|
+
printf '| Fixture retarget row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
505
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
506
|
+
commit_case "retarget a pointer at a renamed skill"
|
|
507
|
+
run_gate
|
|
508
|
+
assert_rc "$rc" 1 "the renamed owner itself must not take the no-behaviour class"
|
|
509
|
+
assert_contains "platform-signal-evidence/SKILL.md" "$out" "the rename destination owes real evidence"
|
|
510
|
+
assert_not_contains "defect-diagnosis/SKILL.md" "$out" "a dependent owner that only retargets pointers still qualifies"
|
|
511
|
+
|
|
512
|
+
# The killing mutation: smuggle ONE unrelated line in alongside the retarget. The
|
|
513
|
+
# base bytes no longer reproduce HEAD, so the class must be refused and the
|
|
514
|
+
# normal evidence bar must reappear. Without this, the class would be a waiver.
|
|
515
|
+
new_case case-identifier-rename-smuggled-content
|
|
516
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
517
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis"
|
|
518
|
+
printf '\n- Smuggled fixture rule that must never ride in on a rename.\n' >> "$REPO/skills/defect-diagnosis/SKILL.md"
|
|
519
|
+
printf '| Fixture smuggled row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
520
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
521
|
+
commit_case "smuggle content alongside a retarget"
|
|
522
|
+
run_gate
|
|
523
|
+
assert_rc "$rc" 1 "content smuggled alongside a retarget must lose the class"
|
|
524
|
+
assert_contains "defect-diagnosis/SKILL.md" "$out" "the smuggling owner must be named"
|
|
525
|
+
|
|
526
|
+
# Declaring the class when nothing was renamed at all must not pass either: with
|
|
527
|
+
# no rename pairs there is no transform that could reproduce the bytes.
|
|
528
|
+
new_case case-identifier-rename-declared-without-any-rename
|
|
529
|
+
printf '\n- Fixture rule added with no rename anywhere in the diff.\n' >> "$REPO/skills/defect-diagnosis/SKILL.md"
|
|
530
|
+
printf '| Fixture bogus rename row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` no rename happened |\n' >> "$REGISTER"
|
|
531
|
+
commit_case "declare identifier-rename with no rename in the diff"
|
|
532
|
+
run_gate
|
|
533
|
+
assert_rc "$rc" 1 "the class must be refused when the diff contains no rename"
|
|
534
|
+
|
|
535
|
+
# DELETING an upstream owner outright is not the rename case and must still demand
|
|
536
|
+
# a declaration. Excluding every missing path would let removal of a decision owner
|
|
537
|
+
# — the larger change of the two — pass with no ledger row at all: a hole the old
|
|
538
|
+
# self-contradicting gate did not have, because that one failed closed.
|
|
539
|
+
new_case case-owner-package-deleted-still-bound
|
|
540
|
+
git -C "$REPO" rm -rq skills/platform-observability
|
|
541
|
+
commit_case "delete an upstream owner package outright with no row"
|
|
542
|
+
run_gate
|
|
543
|
+
assert_rc "$rc" 1 "deleting an upstream owner without a row must still block"
|
|
544
|
+
assert_contains "platform-observability/SKILL.md" "$out" "the deleted owner must stay a subject"
|
|
545
|
+
|
|
546
|
+
# The bijection must bite on a DEPENDENT owner, which is the only kind that can
|
|
547
|
+
# still hold the class. Retarget its pointers cleanly but delete one of its files:
|
|
548
|
+
# the changed set names only the edited file, so without comparing the complete
|
|
549
|
+
# package the deletion is invisible and every surviving file still reproduces.
|
|
550
|
+
new_case case-identifier-rename-dependent-drops-a-file
|
|
551
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
552
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis"
|
|
553
|
+
rm -f "$REPO/skills/defect-diagnosis/agents/openai.yaml"
|
|
554
|
+
# The destination owes real evidence now, so give it a valid owner-scoped anchor;
|
|
555
|
+
# otherwise the gate stops on that row and never reaches the dependent owner.
|
|
556
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
557
|
+
printf '| Fixture dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
558
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
559
|
+
commit_case "a dependent owner drops a file while retargeting"
|
|
560
|
+
run_gate
|
|
561
|
+
assert_rc "$rc" 1 "a dependent owner that drops a package file must lose the class"
|
|
562
|
+
assert_contains "defect-diagnosis/SKILL.md" "$out" "the dependent owner must be named as incomplete"
|
|
563
|
+
|
|
564
|
+
# Dropping the renamed-away path is only sound when the SUCCESSOR is a selected
|
|
565
|
+
# subject. Renaming a curated owner to a slug absent from the curated list leaves
|
|
566
|
+
# neither name selected, so the rename of a decision owner would escape entirely.
|
|
567
|
+
new_case case-rename-to-unselected-slug-still-bound
|
|
568
|
+
git -C "$REPO" mv skills/tighten-doc skills/zz-fixture-unselected
|
|
569
|
+
find "$REPO/skills/zz-fixture-unselected" -type f -exec perl -pi -e 's/tighten-doc/zz-fixture-unselected/g' {} +
|
|
570
|
+
commit_case "rename a curated owner to a slug nobody added to the curated list"
|
|
571
|
+
run_gate
|
|
572
|
+
assert_rc "$rc" 1 "a curated owner renamed out of the curated list must not escape the gate"
|
|
573
|
+
assert_contains "tighten-doc/SKILL.md" "$out" "the curated source name must stay a subject when its successor is unselected"
|
|
574
|
+
|
|
575
|
+
# Contents and names alone are not the package's identity. Drop the executable bit
|
|
576
|
+
# from a dependent owner's script and every byte still reproduces, yet a gate or
|
|
577
|
+
# hook that silently stops being runnable is exactly the behaviour change this
|
|
578
|
+
# class must never certify.
|
|
579
|
+
new_case case-identifier-rename-dependent-drops-exec-bit
|
|
580
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
581
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/product-rd-workflow"
|
|
582
|
+
chmod -x "$REPO/$UPSTREAM_SCRIPT"
|
|
583
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
584
|
+
printf '| Fixture exec-bit row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `product-rd-workflow/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
585
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
586
|
+
commit_case "a dependent owner loses a script's executable bit while retargeting"
|
|
587
|
+
run_gate
|
|
588
|
+
assert_rc "$rc" 1 "dropping an executable bit must lose the class"
|
|
589
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "the owner whose script stopped being runnable must be named"
|
|
590
|
+
|
|
591
|
+
# A package may legitimately track a blob that is not valid UTF-8. Comparing bytes
|
|
592
|
+
# must not depend on decoding them, or one stray byte crashes the gate mid-run.
|
|
593
|
+
new_case case-identifier-rename-binary-blob-in-package
|
|
594
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
595
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis"
|
|
596
|
+
printf '\377\376 not utf-8 \377' > "$REPO/skills/defect-diagnosis/zz-fixture-binary.bin"
|
|
597
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
598
|
+
printf '| Fixture binary row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
599
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
600
|
+
commit_case "a dependent owner package tracks a non-UTF-8 blob"
|
|
601
|
+
run_gate
|
|
602
|
+
assert_not_contains "invalid byte sequence" "$out" "a non-UTF-8 blob must not crash the comparison"
|
|
603
|
+
assert_rc "$rc" 1 "an added binary file is not a pure retarget, so the class is refused cleanly"
|
|
604
|
+
|
|
605
|
+
# A rename usually carries filenames with it — a skill's own playbook reference is
|
|
606
|
+
# named after the skill. Mapping only the directory would leave those paths
|
|
607
|
+
# unmatched, so an honest rename would look like a changed file set and lose the
|
|
608
|
+
# drop the whole class depends on.
|
|
609
|
+
new_case case-identifier-rename-with-renamed-inner-file
|
|
610
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
611
|
+
git -C "$REPO" mv skills/platform-signal-evidence/references/platform-observability-playbook.md \
|
|
612
|
+
skills/platform-signal-evidence/references/platform-signal-evidence-playbook.md
|
|
613
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis"
|
|
614
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
615
|
+
printf '| Fixture inner-rename dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget |\n' >> "$REGISTER"
|
|
616
|
+
printf '| Fixture inner-rename owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
617
|
+
commit_case "rename an owner whose inner filename carries the slug"
|
|
618
|
+
run_gate
|
|
619
|
+
assert_not_contains "platform-observability/SKILL.md" "$out" "an inner filename carrying the slug must not break the move proof"
|
|
620
|
+
assert_rc "$rc" 0 "a rename that also renames a slug-named inner file should still land"
|
|
621
|
+
|
|
622
|
+
# A routing-surface-only change edits the frontmatter `description` and nothing
|
|
623
|
+
# else, so it has no changed numbered/list rule for the firing-path anchor to bind
|
|
624
|
+
# to. It is NOT exempted: a description edit decides which requests reach the skill,
|
|
625
|
+
# so it keeps the RED-baseline bar and the anchor is allowed to land on the changed
|
|
626
|
+
# description entry instead. Exempting it would drop the evidence requirement from
|
|
627
|
+
# the class carrying the most behaviour.
|
|
628
|
+
new_case case-routing-surface-description-anchor
|
|
629
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' \
|
|
630
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
631
|
+
printf '| Fixture routing-surface row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description-only |\n' >> "$REGISTER"
|
|
632
|
+
commit_case "routing-surface: anchor bound to the changed description"
|
|
633
|
+
run_gate
|
|
634
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "a changed description must be an anchorable firing path when it is the owner's whole change"
|
|
635
|
+
assert_rc "$rc" 0 "a description-only owner may anchor its firing path on the changed description"
|
|
636
|
+
|
|
637
|
+
# The widening is bounded by the same byte-exact predicate. The moment anything
|
|
638
|
+
# rides along — body content, a sibling file in the package, or a second
|
|
639
|
+
# frontmatter key — the owner keeps the ORDINARY anchor bar, which that
|
|
640
|
+
# description line cannot meet. Each case varies exactly one of the three arms;
|
|
641
|
+
# without the third, the non-description frontmatter comparison stays unmeasured.
|
|
642
|
+
new_case case-routing-surface-anchor-refused-with-body-edit
|
|
643
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' \
|
|
644
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
645
|
+
printf '\n- Never skip the smuggled fixture body rule for this gate.\n' >> "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
646
|
+
printf '| Fixture routing-surface body row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus body |\n' >> "$REGISTER"
|
|
647
|
+
commit_case "routing-surface: body content beside the description"
|
|
648
|
+
run_gate
|
|
649
|
+
assert_rc "$rc" 1 "a body edit riding along must take back the ordinary anchor bar"
|
|
650
|
+
|
|
651
|
+
new_case case-routing-surface-anchor-refused-with-reference-edit
|
|
652
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' \
|
|
653
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
654
|
+
printf '\n- Never skip the smuggled fixture reference rule for this gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
655
|
+
printf '| Fixture routing-surface reference row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus reference |\n' >> "$REGISTER"
|
|
656
|
+
commit_case "routing-surface: sibling reference beside the description"
|
|
657
|
+
run_gate
|
|
658
|
+
assert_rc "$rc" 1 "a sibling reference edit must take back the ordinary anchor bar"
|
|
659
|
+
|
|
660
|
+
new_case case-routing-surface-anchor-refused-with-frontmatter-key
|
|
661
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' \
|
|
662
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
663
|
+
perl -0pi -e 's/^(name: product-rd-workflow)$/$1\nfixture_extra_key: smuggled/m' \
|
|
664
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
665
|
+
printf '| Fixture routing-surface frontmatter row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus another frontmatter key |\n' >> "$REGISTER"
|
|
666
|
+
commit_case "routing-surface: second frontmatter key beside the description"
|
|
667
|
+
run_gate
|
|
668
|
+
assert_rc "$rc" 1 "a second frontmatter key must take back the ordinary anchor bar"
|
|
669
|
+
|
|
670
|
+
# A folded/block scalar spreads one description value over continuation lines.
|
|
671
|
+
# The predicate accepts it (one entry, same body, same other keys), so the anchor
|
|
672
|
+
# must be able to land on a continuation line too — requiring the `description:`
|
|
673
|
+
# prefix would leave exactly these owners unanchorable, which is the problem this
|
|
674
|
+
# widening exists to solve.
|
|
675
|
+
new_case case-routing-surface-anchor-on-continuation-line
|
|
676
|
+
perl -0pi -e 's/^description: (.+)$/description: >-\n $1\n Fixture routing-surface trigger clause./m' \
|
|
677
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
678
|
+
printf '| Fixture routing-surface folded row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` folded description |\n' >> "$REGISTER"
|
|
679
|
+
commit_case "routing-surface: anchor on a folded-scalar continuation line"
|
|
680
|
+
run_gate
|
|
681
|
+
assert_rc "$rc" 0 "an anchor inside a folded description entry must bind"
|
|
682
|
+
|
|
683
|
+
# A change that only DELETES a continuation line adds no line at all. The base
|
|
684
|
+
# must therefore ALREADY carry the folded description, or the diff still contains
|
|
685
|
+
# the additions and the case would not test what it claims.
|
|
686
|
+
git -C "$REPO" switch -q -C fixture-folded fixture-base
|
|
687
|
+
perl -0pi -e 's/^description: (.+)$/description: >-\n $1\n Fixture routing-surface trigger clause.\n Fixture routing-surface second clause./m' \
|
|
688
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
689
|
+
git -C "$REPO" add -A; git -C "$REPO" commit -qm "seed folded description base"
|
|
690
|
+
git -C "$REPO" switch -q -C case-routing-surface-anchor-after-deletion fixture-folded
|
|
691
|
+
git -C "$REPO" branch --set-upstream-to=fixture-folded case-routing-surface-anchor-after-deletion >/dev/null 2>&1
|
|
692
|
+
perl -0pi -e 's/\n Fixture routing-surface second clause\.//' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
693
|
+
[ -z "$(git -C "$REPO" diff fixture-folded -- skills/product-rd-workflow/SKILL.md | grep -E '^\+[^+]')" ] \
|
|
694
|
+
|| fail "deletion fixture must add no line to the owner entrypoint"
|
|
695
|
+
printf '| Fixture routing-surface deletion row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` deleted continuation line |\n' >> "$REGISTER"
|
|
696
|
+
commit_case "routing-surface: continuation line deleted, nothing added"
|
|
697
|
+
run_gate
|
|
698
|
+
assert_rc "$rc" 0 "a description change that only deletes a continuation line must still qualify"
|
|
699
|
+
|
|
700
|
+
# Turning the description into a nested MAPPING would let arbitrary frontmatter
|
|
701
|
+
# ride inside the entry — and even carry the anchor — if the entry boundary were
|
|
702
|
+
# the only check. The value must still be a string.
|
|
703
|
+
new_case case-routing-surface-nested-mapping-refused
|
|
704
|
+
perl -0pi -e 's/^description: .+$/description:\n hidden_key: Fixture routing-surface trigger clause/m' \
|
|
705
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
706
|
+
printf '| Fixture routing-surface nested row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` nested description |\n' >> "$REGISTER"
|
|
707
|
+
commit_case "routing-surface: description turned into a nested mapping"
|
|
708
|
+
run_gate
|
|
709
|
+
assert_rc "$rc" 1 "a description that is not a string must lose the anchor widening"
|
|
710
|
+
|
|
711
|
+
# A folded scalar may contain a blank line between paragraphs. Stopping the entry
|
|
712
|
+
# at the blank line would push the later paragraph into the "other keys" set and
|
|
713
|
+
# refuse an ordinary description edit.
|
|
714
|
+
new_case case-routing-surface-blank-line-in-folded-description
|
|
715
|
+
perl -0pi -e 's/^description: (.+)$/description: >-\n $1\n\n Fixture routing-surface trigger clause./m' \
|
|
716
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
717
|
+
printf '| Fixture routing-surface blank-line row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` folded description with blank line |\n' >> "$REGISTER"
|
|
718
|
+
commit_case "routing-surface: folded description containing a blank line"
|
|
719
|
+
run_gate
|
|
720
|
+
assert_rc "$rc" 0 "a blank line inside a folded description must not break the entry boundary"
|
|
721
|
+
|
|
722
|
+
# The locator for this class is the canonical field name. A free-text substring
|
|
723
|
+
# that merely SURVIVED the edit identifies nothing, so it must not be accepted.
|
|
724
|
+
new_case case-routing-surface-surviving-substring-locator-refused
|
|
725
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' \
|
|
726
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
727
|
+
printf '| Fixture routing-surface substring row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#Fixture routing-surface trigger clause | `updated` | `product-rd-workflow/SKILL.md` substring locator |\n' >> "$REGISTER"
|
|
728
|
+
commit_case "routing-surface: free-text substring locator"
|
|
729
|
+
run_gate
|
|
730
|
+
assert_rc "$rc" 1 "a free-text substring must not serve as the locator for this class"
|
|
731
|
+
|
|
732
|
+
# A quoted top-level key is valid YAML; refusing it would block a legitimate
|
|
733
|
+
# description-only change with no satisfiable anchor.
|
|
734
|
+
new_case case-routing-surface-quoted-key
|
|
735
|
+
perl -0pi -e 's/^description: (.+)$/"description": $1 Fixture routing-surface trigger clause./m' \
|
|
736
|
+
"$REPO/skills/product-rd-workflow/SKILL.md"
|
|
737
|
+
printf '| Fixture routing-surface quoted row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` quoted description key |\n' >> "$REGISTER"
|
|
738
|
+
commit_case "routing-surface: quoted description key"
|
|
739
|
+
run_gate
|
|
740
|
+
assert_rc "$rc" 0 "a quoted description key must still qualify"
|
|
741
|
+
|
|
742
|
+
# A sibling frontmatter key that deserializes to a Date (or uses an alias) must
|
|
743
|
+
# not refuse the class: this check cares only about the description value.
|
|
744
|
+
new_case case-routing-surface-date-sibling-key
|
|
745
|
+
perl -0pi -e 's/^(name: product-rd-workflow)$/$1\nreleased: 2026-08-11/m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
746
|
+
git -C "$REPO" add -A; git -C "$REPO" commit -qm "seed date sibling key"
|
|
747
|
+
git -C "$REPO" branch -f fixture-dated HEAD
|
|
748
|
+
git -C "$REPO" switch -q -C case-routing-surface-date-sibling-key fixture-dated
|
|
749
|
+
git -C "$REPO" branch --set-upstream-to=fixture-dated case-routing-surface-date-sibling-key >/dev/null 2>&1
|
|
750
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
751
|
+
printf '| Fixture routing-surface dated row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description beside a date key |\n' >> "$REGISTER"
|
|
752
|
+
commit_case "routing-surface: date-valued sibling frontmatter key"
|
|
753
|
+
run_gate
|
|
754
|
+
assert_rc "$rc" 0 "a date-valued sibling key must not refuse the class"
|
|
755
|
+
|
|
756
|
+
# A date-less host must not change any verdict. On hosts where `require "yaml"`
|
|
757
|
+
# leaves Date undefined (apt ruby 3.2 / psych <= 5.2.5: psych loads date lazily
|
|
758
|
+
# or not at all), a gate that rides on psych's transitive load raises NameError
|
|
759
|
+
# at `permitted_classes: [Date, Time]`, which `rescue StandardError` folds into
|
|
760
|
+
# "not a scalar description" — silently refusing the routing-surface class on
|
|
761
|
+
# one host while granting it on another. The gate must declare `require "date"`
|
|
762
|
+
# itself. The shim reproduces that host class on any modern ruby: it blocks
|
|
763
|
+
# psych's transitive date require while letting explicit ones through.
|
|
764
|
+
DATELESS_SHIM="$TMP/dateless-require-shim.rb"
|
|
765
|
+
cat > "$DATELESS_SHIM" <<'RUBY'
|
|
766
|
+
module DatelessRequireShim
|
|
767
|
+
def require(name)
|
|
768
|
+
if name == "date" && caller.any? { |frame| frame.include?("/psych") || frame.include?("psych.rb") }
|
|
769
|
+
return false
|
|
770
|
+
end
|
|
771
|
+
super
|
|
772
|
+
end
|
|
773
|
+
end
|
|
774
|
+
Object.prepend(DatelessRequireShim)
|
|
775
|
+
RUBY
|
|
776
|
+
run_gate_dateless() {
|
|
777
|
+
gate_runs=$((gate_runs + 1))
|
|
778
|
+
set +e
|
|
779
|
+
out="$(env -u ALIAS_AUDIT_CMD -u CCL_SKILL_BASE_REF RUBYOPT="-r$DATELESS_SHIM" ruby "$GATE_SCRIPT" "$REPO" 2>&1)"
|
|
780
|
+
rc=$?
|
|
781
|
+
set -e
|
|
782
|
+
}
|
|
783
|
+
new_case case-routing-surface-dateless-host
|
|
784
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
785
|
+
printf '| Fixture routing-surface dateless row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description judged on a date-less host |\n' >> "$REGISTER"
|
|
786
|
+
commit_case "routing-surface: description-only change judged on a date-less host"
|
|
787
|
+
run_gate_dateless
|
|
788
|
+
assert_rc "$rc" 0 "a date-less host must not refuse the routing-surface class"
|
|
789
|
+
|
|
790
|
+
# Mutation attribution for the property this case names: strip the gate's own
|
|
791
|
+
# `require "date"` and the same fixture must show the date-less refusal. The
|
|
792
|
+
# cmp guard proves the mutation actually removed a line — if the require is
|
|
793
|
+
# ever renamed or dropped, this fails loudly instead of running a no-op
|
|
794
|
+
# differential that would false-green a broken shim or a regressed gate.
|
|
795
|
+
GATE_DATELESS_MUTANT="$TMP/impact-chain-gate-dateless-mutant.rb"
|
|
796
|
+
grep -v '^require "date"$' "$GATE_SCRIPT" > "$GATE_DATELESS_MUTANT"
|
|
797
|
+
cmp -s "$GATE_SCRIPT" "$GATE_DATELESS_MUTANT" && fail "dateless mutation is a no-op: the gate no longer contains its require \"date\" line"
|
|
798
|
+
run_gate_dateless_mutant() {
|
|
799
|
+
gate_runs=$((gate_runs + 1))
|
|
800
|
+
set +e
|
|
801
|
+
out="$(env -u ALIAS_AUDIT_CMD -u CCL_SKILL_BASE_REF RUBYOPT="-r$DATELESS_SHIM" ruby "$GATE_DATELESS_MUTANT" "$REPO" 2>&1)"
|
|
802
|
+
rc=$?
|
|
803
|
+
set -e
|
|
804
|
+
}
|
|
805
|
+
run_gate_dateless_mutant
|
|
806
|
+
assert_rc "$rc" 1 "without its own require-date the gate must show the date-less refusal this case guards against"
|
|
807
|
+
assert_contains "impact_chain_firing_path_missing" "$out" "the mutant must fail for the guarded reason, not some other error"
|
|
808
|
+
assert_contains "product-rd-workflow/SKILL.md" "$out" "the mutant must name the refused owner"
|
|
809
|
+
|
|
810
|
+
# The deepest Date-dependent path on a date-less host: safe_load must actually
|
|
811
|
+
# instantiate a Date for the sibling key, so this proves the explicit require
|
|
812
|
+
# makes the constant real, not merely referenceable.
|
|
813
|
+
git -C "$REPO" switch -q -C case-routing-surface-dateless-dated-sibling fixture-dated
|
|
814
|
+
git -C "$REPO" branch --set-upstream-to=fixture-dated case-routing-surface-dateless-dated-sibling >/dev/null 2>&1
|
|
815
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
816
|
+
printf '| Fixture routing-surface dateless dated row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` dated sibling on a date-less host |\n' >> "$REGISTER"
|
|
817
|
+
commit_case "routing-surface: date-valued sibling judged on a date-less host"
|
|
818
|
+
run_gate_dateless
|
|
819
|
+
assert_rc "$rc" 0 "parsing a date-valued sibling on a date-less host must still qualify"
|
|
820
|
+
|
|
821
|
+
# A file MOVED OUT of the owner package must take back the ordinary bar: the diff
|
|
822
|
+
# is read with --no-renames, so the vacated path still counts as an owner change.
|
|
823
|
+
new_case case-routing-surface-file-moved-out
|
|
824
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
825
|
+
mkdir -p "$REPO/docs"
|
|
826
|
+
git -C "$REPO" mv "$MOVEOUT_REL" docs/zz-fixture-moveout.md
|
|
827
|
+
printf '| Fixture routing-surface moveout row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus a file moved out |\n' >> "$REGISTER"
|
|
828
|
+
commit_case "routing-surface: owner file moved out of the package"
|
|
829
|
+
run_gate
|
|
830
|
+
assert_rc "$rc" 1 "a file moved out of the package must take back the ordinary bar"
|
|
831
|
+
|
|
832
|
+
# The entrypoint's MODE is part of its identity: bytes alone would let a chmod
|
|
833
|
+
# ride along with a description edit and still read as description-only.
|
|
834
|
+
new_case case-routing-surface-mode-change-refused
|
|
835
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
836
|
+
chmod +x "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
837
|
+
printf '| Fixture routing-surface mode row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus mode change |\n' >> "$REGISTER"
|
|
838
|
+
commit_case "routing-surface: entrypoint mode changed alongside the description"
|
|
839
|
+
run_gate
|
|
840
|
+
assert_rc "$rc" 1 "a mode change riding along must take back the ordinary bar"
|
|
841
|
+
|
|
842
|
+
# An owner whose entrypoint changed only its description, while the REST of its
|
|
843
|
+
# package changed only by a rename retarget, still carries exactly one behaviour:
|
|
844
|
+
# the description. The retarget is already a machine-proven no-behaviour class, so
|
|
845
|
+
# refusing the locator here would refuse an owner with nothing else to evidence —
|
|
846
|
+
# and on an integration branch that accumulates rounds, that is the normal shape.
|
|
847
|
+
new_case case-routing-surface-with-retargeted-sibling
|
|
848
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
849
|
+
git -C "$REPO" mv skills/platform-signal-evidence/references/platform-observability-playbook.md \
|
|
850
|
+
skills/platform-signal-evidence/references/platform-signal-evidence-playbook.md
|
|
851
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis" "$REPO/skills/product-rd-workflow"
|
|
852
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
853
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
854
|
+
printf '| Fixture retargeted-sibling row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description beside retargeted references |\n' >> "$REGISTER"
|
|
855
|
+
printf '| Fixture retargeted-sibling dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget only |\n' >> "$REGISTER"
|
|
856
|
+
printf '| Fixture retargeted-sibling owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
857
|
+
# Keep this case's only script untouched so it varies exactly one thing.
|
|
858
|
+
git -C "$REPO" checkout fixture-base -- skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh
|
|
859
|
+
[ -n "$(git -C "$REPO" diff --name-only fixture-base -- 'skills/product-rd-workflow/references/*.md')" ] \
|
|
860
|
+
|| fail "positive case must actually retarget an eligible .md sibling"
|
|
861
|
+
commit_case "routing-surface: description beside a pure rename retarget in the same package"
|
|
862
|
+
run_gate
|
|
863
|
+
assert_rc "$rc" 0 "a package whose non-entrypoint changes are a proven retarget must not lose the locator"
|
|
864
|
+
|
|
865
|
+
# The composition is bounded by the SAME byte-exact reproduction: a sibling file
|
|
866
|
+
# carrying real content beside the retarget still takes the locator away.
|
|
867
|
+
new_case case-routing-surface-retarget-plus-real-edit
|
|
868
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
869
|
+
git -C "$REPO" mv skills/platform-signal-evidence/references/platform-observability-playbook.md \
|
|
870
|
+
skills/platform-signal-evidence/references/platform-signal-evidence-playbook.md
|
|
871
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis" "$REPO/skills/product-rd-workflow"
|
|
872
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
873
|
+
printf '\n- Never skip the smuggled fixture rule beside the retarget.\n' >> "$REPO/$UPSTREAM_REF"
|
|
874
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
875
|
+
printf '| Fixture retarget-plus-edit row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description plus a real sibling edit |\n' >> "$REGISTER"
|
|
876
|
+
printf '| Fixture retarget-plus-edit dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget only |\n' >> "$REGISTER"
|
|
877
|
+
printf '| Fixture retarget-plus-edit owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
878
|
+
# Keep this case's only script untouched so it varies exactly one thing.
|
|
879
|
+
git -C "$REPO" checkout fixture-base -- skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh
|
|
880
|
+
commit_case "routing-surface: real sibling edit beside the retarget"
|
|
881
|
+
run_gate
|
|
882
|
+
assert_rc "$rc" 1 "real content beside the retarget must still take the locator away"
|
|
883
|
+
|
|
884
|
+
# A script reproducing under the substitution proves nothing about whether
|
|
885
|
+
# rewriting that identifier was safe there — some occurrences of an old slug are
|
|
886
|
+
# deliberately kept. Prose only.
|
|
887
|
+
new_case case-routing-surface-retargeted-script-refused
|
|
888
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
889
|
+
git -C "$REPO" mv skills/platform-signal-evidence/references/platform-observability-playbook.md \
|
|
890
|
+
skills/platform-signal-evidence/references/platform-signal-evidence-playbook.md
|
|
891
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis" "$REPO/skills/product-rd-workflow"
|
|
892
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
893
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
894
|
+
printf '| Fixture retargeted-script row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description beside a changed script |\n' >> "$REGISTER"
|
|
895
|
+
printf '| Fixture retargeted-script dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget only |\n' >> "$REGISTER"
|
|
896
|
+
printf '| Fixture retargeted-script owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
897
|
+
commit_case "routing-surface: a changed script in the package"
|
|
898
|
+
run_gate
|
|
899
|
+
assert_rc "$rc" 1 "a changed script must take the locator away even under a retarget"
|
|
900
|
+
|
|
901
|
+
# A `.md` SYMLINK's blob is its target, so a retargeted target reproduces under
|
|
902
|
+
# the substitution while what the path resolves to changes. Regular files only.
|
|
903
|
+
git -C "$REPO" switch -q -C fixture-symlink fixture-base
|
|
904
|
+
ln -s ../../platform-observability/SKILL.md "$REPO/skills/product-rd-workflow/references/zz-fixture-link.md"
|
|
905
|
+
git -C "$REPO" add -A; git -C "$REPO" commit -qm "seed pre-rename symlink"
|
|
906
|
+
git -C "$REPO" switch -q -C case-routing-surface-retargeted-symlink-refused fixture-symlink
|
|
907
|
+
git -C "$REPO" branch --set-upstream-to=fixture-symlink case-routing-surface-retargeted-symlink-refused >/dev/null 2>&1
|
|
908
|
+
rm -f "$REPO/skills/product-rd-workflow/references/zz-fixture-link.md"
|
|
909
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
910
|
+
git -C "$REPO" mv skills/platform-signal-evidence/references/platform-observability-playbook.md \
|
|
911
|
+
skills/platform-signal-evidence/references/platform-signal-evidence-playbook.md
|
|
912
|
+
retarget_all "$REPO/skills/platform-signal-evidence" "$REPO/skills/defect-diagnosis" "$REPO/skills/product-rd-workflow"
|
|
913
|
+
git -C "$REPO" checkout fixture-base -- skills/product-rd-workflow/scripts/check-agent-contract-coverage.sh
|
|
914
|
+
ln -s ../../platform-signal-evidence/SKILL.md "$REPO/skills/product-rd-workflow/references/zz-fixture-link.md"
|
|
915
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture routing-surface trigger clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
916
|
+
printf '\n- Never skip the fixture renamed-owner rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
917
|
+
printf '| Fixture symlink row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description beside a retargeted symlink |\n' >> "$REGISTER"
|
|
918
|
+
printf '| Fixture symlink dependent row | `downstream-executor` | behavioral-evidence: not-required identifier-rename; observed-failure: no | `updated` | `defect-diagnosis/SKILL.md` pointer retarget only |\n' >> "$REGISTER"
|
|
919
|
+
printf '| Fixture symlink owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: no; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture renamed-owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
920
|
+
commit_case "routing-surface: a retargeted .md symlink in the package"
|
|
921
|
+
run_gate
|
|
922
|
+
assert_rc "$rc" 1 "a retargeted .md symlink must take the locator away"
|
|
923
|
+
|
|
924
|
+
# --- Round scoping -----------------------------------------------------------
|
|
925
|
+
# Every case above lands in ONE commit, so it exercises a single round and cannot
|
|
926
|
+
# see the defect these two cover: the classifiers used to read the whole
|
|
927
|
+
# base..HEAD range while each row is authored against one round's diff. Both
|
|
928
|
+
# cases below FAIL against the range-scoped gate and pass against the
|
|
929
|
+
# round-scoped one, which is what makes them a baseline rather than a restatement.
|
|
930
|
+
|
|
931
|
+
# Round scoping 1: a row's verdict must not move after it lands. Round 1 is a
|
|
932
|
+
# genuinely punctuation-only edit declared `not-required wording-only`; round 2
|
|
933
|
+
# then edits the SAME owner substantively. Judged against the accumulating range
|
|
934
|
+
# the round-1 row turns red retroactively, which is what forced the ledger's
|
|
935
|
+
# superseded-row notes.
|
|
936
|
+
new_case case-round-scope-verdict-stability
|
|
937
|
+
printf '\n***\n' >> "$REPO/$UPSTREAM_REF"
|
|
938
|
+
printf '| Fixture round-1 punctuation edit | `downstream-executor` | behavioral-evidence: not-required wording-only; observed-failure: no | `updated` | `product-rd-workflow/SKILL.md` punctuation-only round |\n' >> "$REGISTER"
|
|
939
|
+
commit_case "round 1: punctuation-only edit declared wording-only"
|
|
940
|
+
printf '\n- Never bypass the fixture round-scope rule for this gate.\n' >> "$REPO/$UPSTREAM_REF"
|
|
941
|
+
printf '| Fixture round-2 substantive edit | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/references/adr-convention.md#Never bypass the fixture round-scope rule | `updated` | `product-rd-workflow/SKILL.md` substantive round |\n' >> "$REGISTER"
|
|
942
|
+
commit_case "round 2: substantive edit to the same owner"
|
|
943
|
+
run_gate
|
|
944
|
+
assert_rc "$rc" 0 "a landed wording-only row must not be re-judged against a later round"
|
|
945
|
+
assert_not_contains "impact_chain_behavior_evidence_missing" "$out" "the round-1 row stays valid in its own round"
|
|
946
|
+
|
|
947
|
+
# Round scoping 2: a description-only round must keep its locator even when an
|
|
948
|
+
# EARLIER round edited the same owner's body. Against the accumulating range the
|
|
949
|
+
# routing-surface class sees a changed body and refuses the anchor, which is why
|
|
950
|
+
# a real round had to drop its product-rd-workflow row before landing.
|
|
951
|
+
new_case case-round-scope-description-after-body
|
|
952
|
+
printf '\n- Never skip the fixture body-round rule for this gate.\n' >> "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
953
|
+
printf '| Fixture body round | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#Never skip the fixture body-round rule | `updated` | `product-rd-workflow/SKILL.md` body round |\n' >> "$REGISTER"
|
|
954
|
+
commit_case "round 1: body rule added to the entrypoint"
|
|
955
|
+
perl -0pi -e 's/^(description: .+)$/$1 Fixture round-scope routing clause./m' "$REPO/skills/product-rd-workflow/SKILL.md"
|
|
956
|
+
printf '| Fixture description round | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/product-rd-workflow/SKILL.md#description | `updated` | `product-rd-workflow/SKILL.md` description-only round |\n' >> "$REGISTER"
|
|
957
|
+
commit_case "round 2: description-only edit to the same owner"
|
|
958
|
+
run_gate
|
|
959
|
+
assert_rc "$rc" 0 "a description-only round keeps its locator after an earlier body round"
|
|
960
|
+
assert_not_contains "impact_chain_firing_path_missing" "$out" "the description anchor must bind in its own round"
|
|
961
|
+
|
|
962
|
+
# Round scoping 3: the narrowing must not become a laundering route. Owner work
|
|
963
|
+
# committed AFTER the last ledger append sits in the trailing round, which holds
|
|
964
|
+
# no rows — an earlier round's row must not cover it.
|
|
965
|
+
new_case case-round-scope-trailing-work-uncovered
|
|
966
|
+
printf '\n- Never skip the fixture trailing rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
967
|
+
printf '| Fixture trailing round 1 | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture trailing rule | `updated` | `platform-observability/SKILL.md` declared round |\n' >> "$REGISTER"
|
|
968
|
+
commit_case "round 1: declared owner change"
|
|
969
|
+
printf '\nFixture undeclared trailing edit that no row covers.\n' >> "$REPO/skills/platform-observability/references/platform-observability-playbook.md"
|
|
970
|
+
commit_case "trailing round: owner edit with no ledger append"
|
|
971
|
+
run_gate
|
|
972
|
+
assert_rc "$rc" 1 "owner work in the trailing round must not ride on an earlier round's row"
|
|
973
|
+
|
|
974
|
+
# Round scoping 4: a row must SURVIVE at HEAD to count. Round scoping alone reads
|
|
975
|
+
# each round's added lines, so a row appended in round 1 and deleted in round 2
|
|
976
|
+
# still looked "added" — the cumulative read this replaced saw a net zero and
|
|
977
|
+
# failed closed. Without this the narrowing becomes an append-then-drop laundering
|
|
978
|
+
# route, which is the shape a loosening change has to be checked hardest for.
|
|
979
|
+
new_case case-round-scope-deleted-row-does-not-count
|
|
980
|
+
printf '\n- Never skip the fixture survival rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
981
|
+
printf '| Fixture survival row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture survival rule | `updated` | `platform-observability/SKILL.md` declared round |\n' >> "$REGISTER"
|
|
982
|
+
commit_case "round 1: owner change with its row"
|
|
983
|
+
perl -ni -e 'print unless /Fixture survival row/' "$REGISTER"
|
|
984
|
+
commit_case "round 2: delete the row that vouched for it"
|
|
985
|
+
run_gate
|
|
986
|
+
assert_rc "$rc" 1 "a row deleted in a later round must not still vouch for the owner"
|
|
987
|
+
assert_contains "impact_chain_gate_missing" "$out" "a deleted row leaves the owner undeclared"
|
|
988
|
+
|
|
989
|
+
# Round scoping 5: survival is a MULTISET, not a set. When the row text ALREADY
|
|
990
|
+
# exists at base, appending a duplicate in the round that needs a row and dropping
|
|
991
|
+
# one copy in a later ledger-only round leaves the ledger byte-identical — a
|
|
992
|
+
# net-zero the cumulative read rejected. A boolean "text exists at HEAD" check
|
|
993
|
+
# would read the transient duplicate as surviving, so the budget is HEAD's
|
|
994
|
+
# occurrence count minus base's.
|
|
995
|
+
new_case case-round-scope-duplicate-row-laundering
|
|
996
|
+
printf '| Fixture duplicate row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture duplicate rule | `updated` | `platform-observability/SKILL.md` pre-existing row |\n' >> "$REGISTER"
|
|
997
|
+
printf '\n- Never skip the fixture duplicate rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
998
|
+
commit_case "base: an owner change and its row, both already landed"
|
|
999
|
+
git -C "$REPO" branch -q -f dup-base HEAD
|
|
1000
|
+
git -C "$REPO" branch --set-upstream-to=dup-base case-round-scope-duplicate-row-laundering >/dev/null 2>&1
|
|
1001
|
+
printf '\nFixture second substantive edit that owes its own row.\n' >> "$REPO/skills/platform-observability/references/platform-observability-playbook.md"
|
|
1002
|
+
printf '| Fixture duplicate row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture duplicate rule | `updated` | `platform-observability/SKILL.md` pre-existing row |\n' >> "$REGISTER"
|
|
1003
|
+
commit_case "round 1: new owner bytes plus a duplicate of the existing row"
|
|
1004
|
+
perl -ni -e 'BEGIN{$n=0} if (/Fixture duplicate row/) { $n++; next if $n == 1 } print' "$REGISTER"
|
|
1005
|
+
commit_case "round 2: drop one copy so the ledger ends unchanged"
|
|
1006
|
+
run_gate
|
|
1007
|
+
assert_rc "$rc" 1 "a duplicated-then-dropped row must not vouch for new owner bytes"
|
|
1008
|
+
assert_contains "impact_chain_gate_missing" "$out" "the net-zero ledger leaves the owner undeclared"
|
|
1009
|
+
|
|
1010
|
+
# Round scoping 6: the partition's central claim is that ONE MERGED worktree round
|
|
1011
|
+
# is ONE boundary — and this repo's integration branch is nothing but merge commits,
|
|
1012
|
+
# so a linear-only fixture set proves nothing about the shape the gate actually runs
|
|
1013
|
+
# on. `git rev-list --first-parent -- <path>` applies history simplification, so the
|
|
1014
|
+
# merge is a boundary only when it is not TREESAME to its first parent. These two
|
|
1015
|
+
# cases pin that behaviour instead of asserting it in a comment.
|
|
1016
|
+
new_case case-round-scope-merged-worktree-round
|
|
1017
|
+
git -C "$REPO" switch -q -c feature-round-merged
|
|
1018
|
+
printf '\n- Never skip the fixture merged-round rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1019
|
+
commit_case "worktree round: owner work"
|
|
1020
|
+
printf '| Fixture merged round | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture merged-round rule | `updated` | `platform-observability/SKILL.md` merged round |\n' >> "$REGISTER"
|
|
1021
|
+
commit_case "worktree round: its ledger append"
|
|
1022
|
+
git -C "$REPO" switch -q case-round-scope-merged-worktree-round
|
|
1023
|
+
git -C "$REPO" merge -q --no-ff -m "Merge branch 'feature-round-merged': one worktree round" feature-round-merged
|
|
1024
|
+
run_gate
|
|
1025
|
+
assert_rc "$rc" 0 "a merged worktree round must resolve to one boundary covering its own work"
|
|
1026
|
+
|
|
1027
|
+
# The same shape, with undeclared work committed AFTER the merge: the trailing round
|
|
1028
|
+
# holds no rows, so the merged round's row must not reach forward to cover it.
|
|
1029
|
+
new_case case-round-scope-after-merged-round
|
|
1030
|
+
git -C "$REPO" switch -q -c feature-round-merged-2
|
|
1031
|
+
printf '\n- Never skip the fixture merged-round rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1032
|
+
printf '| Fixture merged round 2 | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture merged-round rule | `updated` | `platform-observability/SKILL.md` merged round |\n' >> "$REGISTER"
|
|
1033
|
+
commit_case "worktree round: owner work and its ledger append"
|
|
1034
|
+
git -C "$REPO" switch -q case-round-scope-after-merged-round
|
|
1035
|
+
git -C "$REPO" merge -q --no-ff -m "Merge branch 'feature-round-merged-2': one worktree round" feature-round-merged-2
|
|
1036
|
+
printf '\nFixture undeclared edit committed after the merged round.\n' >> "$REPO/skills/platform-observability/references/platform-observability-playbook.md"
|
|
1037
|
+
commit_case "after the merge: undeclared owner edit"
|
|
1038
|
+
run_gate
|
|
1039
|
+
assert_rc "$rc" 1 "work committed after a merged round must not ride on that round's row"
|
|
1040
|
+
|
|
1041
|
+
# Round scoping 7: a renamed-away owner must not escape the rounds BEFORE its
|
|
1042
|
+
# rename. Round 1 substantively changes an owner and a ledger append closes that
|
|
1043
|
+
# round with no row for it; round 2 renames the owner away with a row on the
|
|
1044
|
+
# surviving name. The cumulative pass rightly excuses the old name for the
|
|
1045
|
+
# RENAME round — but the pre-rename round still owes the row, and since the
|
|
1046
|
+
# evidence check reads each row against its own round head that row was never
|
|
1047
|
+
# impossible to write.
|
|
1048
|
+
new_case case-round-scope-renamed-away-pre-rename-round
|
|
1049
|
+
printf '\n- Never skip the fixture pre-rename rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1050
|
+
commit_case "round 1: owner work with no row"
|
|
1051
|
+
printf 'Fixture ledger note closing round one without the owner row.\n' >> "$REGISTER"
|
|
1052
|
+
commit_case "round 1 boundary: ledger append without the owner row"
|
|
1053
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1054
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1055
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1056
|
+
commit_case "round 2: rename the owner with a row on the surviving name"
|
|
1057
|
+
run_gate
|
|
1058
|
+
assert_rc "$rc" 1 "owner work in a pre-rename round must not escape with the later rename"
|
|
1059
|
+
assert_contains "impact_chain_gate_missing" "$out" "the pre-rename round's work is undeclared"
|
|
1060
|
+
assert_contains "platform-observability/SKILL.md" "$out" "the missing row must name the owner under its pre-rename name"
|
|
1061
|
+
|
|
1062
|
+
# The legitimate counterpart: the pre-rename round DID carry its row, citing the
|
|
1063
|
+
# owner name that existed at that round's head. The rename must not retroactively
|
|
1064
|
+
# invalidate it — rejecting it would demand a row no honest author could write.
|
|
1065
|
+
new_case case-round-scope-renamed-away-row-at-round-head
|
|
1066
|
+
printf '\n- Never skip the fixture pre-rename declared rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1067
|
+
printf '| Fixture pre-rename declared row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture pre-rename declared rule | `updated` | `platform-observability/SKILL.md` pre-rename round |\n' >> "$REGISTER"
|
|
1068
|
+
commit_case "round 1: owner work with its row"
|
|
1069
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1070
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1071
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1072
|
+
commit_case "round 2: rename the owner with a row on the surviving name"
|
|
1073
|
+
run_gate
|
|
1074
|
+
assert_rc "$rc" 0 "a pre-rename round declared against its own round head must pass"
|
|
1075
|
+
assert_not_contains "impact_chain_evidence_missing_file" "$out" "a row citing the name that existed at its round head is valid evidence"
|
|
1076
|
+
|
|
1077
|
+
# Round scoping 8: the --first-parent discriminator. On the branch the ledger
|
|
1078
|
+
# append lands BEFORE the owner work; first-parent collapses the merged branch
|
|
1079
|
+
# to one boundary (the merge), so row and work share a round. A full walk would
|
|
1080
|
+
# instead cut the round at the branch's ledger commit, stranding the work in a
|
|
1081
|
+
# rowless later round — so this fixture goes red if --first-parent is dropped,
|
|
1082
|
+
# which is what proves the flag load-bearing.
|
|
1083
|
+
new_case case-round-scope-merged-row-before-work
|
|
1084
|
+
git -C "$REPO" switch -q -c feature-round-row-first
|
|
1085
|
+
printf '| Fixture row-first merged round | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Never skip the fixture row-first rule | `updated` | `platform-observability/SKILL.md` merged round |\n' >> "$REGISTER"
|
|
1086
|
+
commit_case "worktree round: ledger append first"
|
|
1087
|
+
printf '\n- Never skip the fixture row-first rule for this gate.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1088
|
+
commit_case "worktree round: owner work after the append"
|
|
1089
|
+
git -C "$REPO" switch -q case-round-scope-merged-row-before-work
|
|
1090
|
+
git -C "$REPO" merge -q --no-ff -m "Merge branch 'feature-round-row-first': one worktree round" feature-round-row-first
|
|
1091
|
+
run_gate
|
|
1092
|
+
assert_rc "$rc" 0 "a merged worktree round collapses to one boundary even when the row precedes the work"
|
|
1093
|
+
|
|
1094
|
+
# Round scoping 9: a TRANSIENT intermediate rename hop must not launder work.
|
|
1095
|
+
# X renames to Y (declared), a later round substantively changes Y with no row,
|
|
1096
|
+
# then Y renames to Z (declared). The cumulative diff sees only X and Z, so Y is
|
|
1097
|
+
# in neither the cumulative selection nor the excused set — selection must follow
|
|
1098
|
+
# the rename lineage through each round's own pairs, or the Y round escapes.
|
|
1099
|
+
new_case case-round-scope-transient-rename-hop-undeclared
|
|
1100
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1101
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1102
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1103
|
+
commit_case "round A: rename X to Y with a row on the surviving name"
|
|
1104
|
+
printf '\n- Never skip the fixture transient-hop rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1105
|
+
printf 'Fixture ledger note closing the transient round without the owner row.\n' >> "$REGISTER"
|
|
1106
|
+
commit_case "round B: substantive Y edit closed with no Y row"
|
|
1107
|
+
git -C "$REPO" mv skills/platform-signal-evidence skills/platform-telemetry-evidence
|
|
1108
|
+
printf '\n- MUST enforce Fixture final renamed owner rule.\n' >> "$REPO/skills/platform-telemetry-evidence/SKILL.md"
|
|
1109
|
+
printf '| Fixture final renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-telemetry-evidence/SKILL.md#Fixture final renamed owner rule | `updated` | `platform-telemetry-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1110
|
+
commit_case "round C: rename Y to Z with a row on the surviving name"
|
|
1111
|
+
run_gate
|
|
1112
|
+
assert_rc "$rc" 1 "a substantive round on a transient rename hop must not escape undeclared"
|
|
1113
|
+
assert_contains "impact_chain_gate_missing" "$out" "the transient-hop round's work is undeclared"
|
|
1114
|
+
assert_contains "platform-signal-evidence/SKILL.md" "$out" "the missing row must name the transient owner"
|
|
1115
|
+
|
|
1116
|
+
# The declared counterpart: the transient-hop round carries its own row citing
|
|
1117
|
+
# the name that existed at that round's head; the whole chain must pass.
|
|
1118
|
+
new_case case-round-scope-transient-rename-hop-declared
|
|
1119
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1120
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1121
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1122
|
+
commit_case "round A: rename X to Y with a row on the surviving name"
|
|
1123
|
+
printf '\n- Never skip the fixture transient-hop rule for this gate.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1124
|
+
printf '| Fixture transient hop row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Never skip the fixture transient-hop rule | `updated` | `platform-signal-evidence/SKILL.md` transient round |\n' >> "$REGISTER"
|
|
1125
|
+
commit_case "round B: substantive Y edit with its own Y row"
|
|
1126
|
+
git -C "$REPO" mv skills/platform-signal-evidence skills/platform-telemetry-evidence
|
|
1127
|
+
printf '\n- MUST enforce Fixture final renamed owner rule.\n' >> "$REPO/skills/platform-telemetry-evidence/SKILL.md"
|
|
1128
|
+
printf '| Fixture final renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-telemetry-evidence/SKILL.md#Fixture final renamed owner rule | `updated` | `platform-telemetry-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1129
|
+
commit_case "round C: rename Y to Z with a row on the surviving name"
|
|
1130
|
+
run_gate
|
|
1131
|
+
assert_rc "$rc" 0 "a declared transient-hop chain must pass end to end"
|
|
1132
|
+
assert_not_contains "impact_chain_evidence_missing_file" "$out" "rows citing each hop's round-head name are valid evidence"
|
|
1133
|
+
|
|
1134
|
+
# Round scoping 10: deleting an owner in one round and recreating a lookalike
|
|
1135
|
+
# under a new name in a LATER round must stay a deletion, not become a rename.
|
|
1136
|
+
# The cumulative endpoints pair the delete with the later add, but no single
|
|
1137
|
+
# round's own pairs contain the source — the excuse requires an atomic in-round
|
|
1138
|
+
# rename, so the cross-round split keeps the deletion fail-closed.
|
|
1139
|
+
new_case case-round-scope-delete-then-recreate-lookalike
|
|
1140
|
+
cp -R "$REPO/skills/platform-observability" "$TMP/stash-lookalike"
|
|
1141
|
+
git -C "$REPO" rm -qr skills/platform-observability
|
|
1142
|
+
printf 'Fixture ledger note closing the deletion round without the owner row.\n' >> "$REGISTER"
|
|
1143
|
+
commit_case "round A: delete the owner with no row"
|
|
1144
|
+
cp -R "$TMP/stash-lookalike" "$REPO/skills/platform-signal-evidence"
|
|
1145
|
+
retarget_all "$REPO/skills/platform-signal-evidence"
|
|
1146
|
+
printf '\n- MUST enforce Fixture recreated owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1147
|
+
printf '| Fixture recreated owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture recreated owner rule | `updated` | `platform-signal-evidence/SKILL.md` recreated owner |\n' >> "$REGISTER"
|
|
1148
|
+
commit_case "round B: recreate a lookalike under a new name with its own row"
|
|
1149
|
+
run_gate
|
|
1150
|
+
assert_rc "$rc" 1 "a cross-round delete-then-recreate must stay an undeclared deletion"
|
|
1151
|
+
assert_contains "platform-observability/SKILL.md" "$out" "the deleted owner must stay a subject"
|
|
1152
|
+
|
|
1153
|
+
# Round scoping 11: a declared rename CYCLE (A to B, then B back to A) is an
|
|
1154
|
+
# honest, fully-declared shape — each round's row cites the name that existed at
|
|
1155
|
+
# its own round head. Demanding an A row in the round that renamed A away would
|
|
1156
|
+
# ask for a row the evidence check must then refuse.
|
|
1157
|
+
new_case case-round-scope-declared-rename-cycle
|
|
1158
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1159
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1160
|
+
printf '| Fixture renamed owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-signal-evidence/SKILL.md#Fixture renamed owner rule | `updated` | `platform-signal-evidence/SKILL.md` renamed owner |\n' >> "$REGISTER"
|
|
1161
|
+
commit_case "round 1: rename A to B with a row on the surviving name"
|
|
1162
|
+
git -C "$REPO" mv skills/platform-signal-evidence skills/platform-observability
|
|
1163
|
+
printf '\n- MUST enforce Fixture reverted owner rule.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1164
|
+
printf '| Fixture reverted owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Fixture reverted owner rule | `updated` | `platform-observability/SKILL.md` reverted owner |\n' >> "$REGISTER"
|
|
1165
|
+
commit_case "round 2: rename B back to A with a row on the surviving name"
|
|
1166
|
+
run_gate
|
|
1167
|
+
assert_rc "$rc" 0 "a fully-declared rename cycle must pass"
|
|
1168
|
+
assert_not_contains "impact_chain_evidence_missing_file" "$out" "each round's row cites the name real at its own head"
|
|
1169
|
+
|
|
1170
|
+
# The undeclared half of the cycle: no row for B in the round that created it.
|
|
1171
|
+
new_case case-round-scope-undeclared-rename-cycle
|
|
1172
|
+
git -C "$REPO" mv skills/platform-observability skills/platform-signal-evidence
|
|
1173
|
+
printf '\n- MUST enforce Fixture renamed owner rule.\n' >> "$REPO/skills/platform-signal-evidence/SKILL.md"
|
|
1174
|
+
printf 'Fixture ledger note closing the outbound rename round without a row.\n' >> "$REGISTER"
|
|
1175
|
+
commit_case "round 1: rename A to B with no row"
|
|
1176
|
+
git -C "$REPO" mv skills/platform-signal-evidence skills/platform-observability
|
|
1177
|
+
printf '\n- MUST enforce Fixture reverted owner rule.\n' >> "$REPO/skills/platform-observability/SKILL.md"
|
|
1178
|
+
printf '| Fixture reverted owner row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md#Fixture reverted owner rule | `updated` | `platform-observability/SKILL.md` reverted owner |\n' >> "$REGISTER"
|
|
1179
|
+
commit_case "round 2: rename B back to A with a row on the surviving name"
|
|
1180
|
+
run_gate
|
|
1181
|
+
assert_rc "$rc" 1 "the round that created the transient name still owes its row"
|
|
1182
|
+
assert_contains "platform-signal-evidence/SKILL.md" "$out" "the undeclared transient name must be demanded"
|
|
1183
|
+
|
|
1184
|
+
# Round scoping 12: a DIRECTORY masquerading as SKILL.md must read as absence.
|
|
1185
|
+
# `git show ref:path` succeeds for a tree, so replacing the entrypoint with a
|
|
1186
|
+
# same-named directory and vouching through a nested-file anchor would let a
|
|
1187
|
+
# row certify an owner whose entrypoint was effectively deleted — existence at
|
|
1188
|
+
# a round head must mean a regular blob, and everything else falls through to
|
|
1189
|
+
# the deletion fail-closed path.
|
|
1190
|
+
new_case case-round-scope-skillmd-directory-masquerade
|
|
1191
|
+
git -C "$REPO" rm -q skills/platform-observability/SKILL.md
|
|
1192
|
+
mkdir -p "$REPO/skills/platform-observability/SKILL.md"
|
|
1193
|
+
printf -- '- MUST enforce Fixture masquerade rule.\n' > "$REPO/skills/platform-observability/SKILL.md/rules.md"
|
|
1194
|
+
printf '| Fixture masquerade row | `downstream-executor` | behavioral-evidence: RED-baseline; observed-failure: yes; firing-path: file:skills/platform-observability/SKILL.md/rules.md#Fixture masquerade rule | `updated` | `platform-observability/SKILL.md` masquerade |\n' >> "$REGISTER"
|
|
1195
|
+
commit_case "replace the entrypoint with a same-named directory and vouch via a nested anchor"
|
|
1196
|
+
run_gate
|
|
1197
|
+
assert_rc "$rc" 1 "a directory masquerading as SKILL.md must not read as a present entrypoint"
|
|
1198
|
+
assert_contains "platform-observability/SKILL.md" "$out" "the masqueraded owner must be named"
|
|
1199
|
+
|
|
1200
|
+
assert_rc "$full_check_runs" 1 "fixture suite must retain exactly one full checker wiring case"
|
|
1201
|
+
assert_rc "$gate_runs" 80 "all remaining impact-chain fixtures must run the standalone gate"
|
|
1202
|
+
|
|
1203
|
+
echo "test_check_ccl_impact_chain_refscripts: ok"
|