@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,833 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Integration test for check-size-budget.sh (the block extracted from
|
|
3
|
+
# check-ccl-skills.sh). The script has TWO layers and this suite pins both.
|
|
4
|
+
#
|
|
5
|
+
# Layer 1 — advisory counters stay MACHINE-READABLE and NON-BLOCKING (cases a-d2):
|
|
6
|
+
# - small entrypoint => exit 0, debt_count=0, severe_debt_count=0, marker
|
|
7
|
+
# - changed entrypoint body>5k => exit 0, changed_entrypoint_above_recommended, debt=1
|
|
8
|
+
# - base/head trend tokens => advisory base/head/delta counters + per-file deltas
|
|
9
|
+
# - an UNCHANGED entrypoint >50000 bytes => exit 0, severe_debt_count=1 + severe token
|
|
10
|
+
# - bootstrap over the tripwire BAND but UNCHANGED => exit 0, band advisory only
|
|
11
|
+
# (an untouched over-band file must never hard-red an unrelated MR)
|
|
12
|
+
# - bootstrap missing => exit 0, size_budget_advisory_partial
|
|
13
|
+
#
|
|
14
|
+
# Layer 2 — delta-BLOCKING verdict on CHANGED skills/*/SKILL.md (cases e1-e8):
|
|
15
|
+
# - new/crossing over 50000 bytes, or growth of an already-severe entrypoint
|
|
16
|
+
# => exit 1 + entrypoint_size_block
|
|
17
|
+
# - shrink / sub-severe growth / same-size edit / rename-without-growth => exit 0
|
|
18
|
+
# - unresolvable base with a severe changed file => exit 1 partial, and NO ok marker
|
|
19
|
+
# - unresolvable base with a CLEAN tree => nothing was evaluated, so the run
|
|
20
|
+
# reports entrypoint_size_blocking_unevaluated and never the ok marker
|
|
21
|
+
# - e8 anchors the check-ccl-skills.sh wiring (rc propagation, no `|| true`)
|
|
22
|
+
#
|
|
23
|
+
# Layer 2b — delta-BLOCKING verdict on CHANGED agent-context/session-start.md (cases d3-d8): the
|
|
24
|
+
# every-session injection is permanently severe — ANY net growth blocks;
|
|
25
|
+
# shrink / same-size edit / tracked deletion => exit 0; a agent-context/session-start.md absent
|
|
26
|
+
# from base blocks as a NEW every-session injection; unresolvable base with a
|
|
27
|
+
# changed agent-context/session-start.md => exit 1 partial, and NO ok marker. Base resolution
|
|
28
|
+
# is merge-base, so growth landing on the TARGET branch after divergence
|
|
29
|
+
# (merged in or not) never reddens the branch — only the MR's own diff counts.
|
|
30
|
+
#
|
|
31
|
+
# Builds a throwaway git repo so debt counts are DETERMINISTIC and do NOT depend on
|
|
32
|
+
# the real repository's actual file sizes/counts. Calls check-size-budget.sh directly
|
|
33
|
+
# (not the full validator) so unrelated blocking gates do not interfere.
|
|
34
|
+
set -euo pipefail
|
|
35
|
+
|
|
36
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
37
|
+
SIZE_SCRIPT="$SCRIPT_DIR/check-size-budget.sh"
|
|
38
|
+
[ -f "$SIZE_SCRIPT" ] || { echo "FAIL: size script not found: $SIZE_SCRIPT" >&2; exit 1; }
|
|
39
|
+
|
|
40
|
+
TMP="$(mktemp -d "${TMPDIR:-/tmp}/sizebudget.XXXXXX")"
|
|
41
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
42
|
+
|
|
43
|
+
fail() { echo "FAIL: $*" >&2; exit 1; }
|
|
44
|
+
assert_rc() { [ "$1" = "$2" ] || fail "expected rc=$2 got rc=$1${3:+ ($3)}"; }
|
|
45
|
+
assert_contains() { case "$2" in *"$1"*) : ;; *) fail "expected output to contain: $1${3:+ ($3)}";; esac; }
|
|
46
|
+
assert_not_contains() { case "$2" in *"$1"*) fail "expected output NOT to contain: $1${3:+ ($3)}";; *) : ;; esac; }
|
|
47
|
+
|
|
48
|
+
# repeat_char <single-byte-char> <count> — emit copies with no newline.
|
|
49
|
+
repeat_char() { head -c "$2" /dev/zero | tr '\0' "$1"; }
|
|
50
|
+
|
|
51
|
+
# repeat_word <word> <count> — emit whitespace-delimited words with one newline.
|
|
52
|
+
repeat_word() {
|
|
53
|
+
awk -v word="$1" -v count="$2" 'BEGIN {
|
|
54
|
+
for (i = 1; i <= count; i++) printf "%s%s", word, (i == count ? "\n" : " ")
|
|
55
|
+
}'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# Run the size script with a guaranteed-unset base ref env; capture stdout+stderr+rc.
|
|
59
|
+
run_size() {
|
|
60
|
+
set +e
|
|
61
|
+
out="$(env -u CCL_SKILL_BASE_REF "$@" bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
62
|
+
rc=$?
|
|
63
|
+
set -e
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
REPO="$TMP/repo"
|
|
67
|
+
mkdir -p "$REPO/skills/demo-skill" "$REPO/agent-context"
|
|
68
|
+
git init -q -b main "$REPO"
|
|
69
|
+
git -C "$REPO" config user.email test@example.invalid
|
|
70
|
+
git -C "$REPO" config user.name "Test User"
|
|
71
|
+
|
|
72
|
+
SKILL_MD="$REPO/skills/demo-skill/SKILL.md"
|
|
73
|
+
cat > "$SKILL_MD" <<'EOF'
|
|
74
|
+
---
|
|
75
|
+
name: demo-skill
|
|
76
|
+
description: baseline skill body for the size-budget integration test.
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
Small clean body well under the recommended ceiling.
|
|
80
|
+
EOF
|
|
81
|
+
git -C "$REPO" add -A
|
|
82
|
+
git -C "$REPO" commit -qm "baseline demo skill"
|
|
83
|
+
git -C "$REPO" checkout -qb feature
|
|
84
|
+
|
|
85
|
+
# Case a: small committed entrypoint, nothing changed => clean counts, marker, exit 0.
|
|
86
|
+
run_size
|
|
87
|
+
assert_rc "$rc" 0 "small entrypoint should pass non-blocking"
|
|
88
|
+
assert_contains "entrypoint_size_debt_count=0" "$out" "no body-char debt"
|
|
89
|
+
assert_contains "entrypoint_size_severe_debt_count=0" "$out" "no severe byte debt"
|
|
90
|
+
assert_contains "entrypoint_size_debt_count_base=0" "$out" "trend base count available"
|
|
91
|
+
assert_contains "entrypoint_size_debt_count_head=0" "$out" "trend head count available"
|
|
92
|
+
assert_contains "entrypoint_size_debt_count_delta=+0" "$out" "trend delta is signed"
|
|
93
|
+
assert_contains "entrypoint_size_severe_debt_count_base=0" "$out" "severe trend base count available"
|
|
94
|
+
assert_contains "entrypoint_size_severe_debt_count_head=0" "$out" "severe trend head count available"
|
|
95
|
+
assert_contains "entrypoint_size_severe_debt_count_delta=+0" "$out" "severe trend delta is signed"
|
|
96
|
+
assert_contains "entrypoint_size_budget_advisory_ok" "$out" "final advisory marker present"
|
|
97
|
+
assert_contains "entrypoint_word_budget_over_limit_count_head=0" "$out" "no body-word debt"
|
|
98
|
+
assert_contains "entrypoint_word_budget_blocking_ok" "$out" "word-budget verdict is clean"
|
|
99
|
+
assert_not_contains "changed_entrypoint_above_recommended" "$out" "no changed-entrypoint token when nothing changed"
|
|
100
|
+
|
|
101
|
+
# Case b: baseline small -> head grows above recommended (tracked, uncommitted) =>
|
|
102
|
+
# stable token + debt_count_delta=+1 + positive per-file delta, still non-blocking.
|
|
103
|
+
{ printf '\n'; repeat_char 'A' 6000; printf '\n'; } >> "$SKILL_MD"
|
|
104
|
+
run_size
|
|
105
|
+
assert_rc "$rc" 0 "changed oversize entrypoint must stay non-blocking"
|
|
106
|
+
assert_contains "changed_entrypoint_above_recommended: skills/demo-skill/SKILL.md" "$out" "stable changed-entrypoint token"
|
|
107
|
+
assert_contains "recommended_max=5000" "$out" "token cites recommended ceiling"
|
|
108
|
+
assert_contains "entrypoint_size_debt_count=1" "$out" "body-char debt counted"
|
|
109
|
+
assert_contains "entrypoint_size_debt_count_base=0" "$out" "base debt count is from main"
|
|
110
|
+
assert_contains "entrypoint_size_debt_count_head=1" "$out" "head debt count sees working tree"
|
|
111
|
+
assert_contains "entrypoint_size_debt_count_delta=+1" "$out" "growth into debt is visible"
|
|
112
|
+
assert_contains "entrypoint_size_severe_debt_count_delta=+0" "$out" "non-severe growth leaves severe count unchanged"
|
|
113
|
+
assert_contains "changed_entrypoint_size_delta: skills/demo-skill/SKILL.md" "$out" "per-file delta token emitted"
|
|
114
|
+
assert_contains "delta_body_chars=+" "$out" "per-file body delta is positive"
|
|
115
|
+
assert_contains "delta_bytes=+" "$out" "per-file byte delta is positive"
|
|
116
|
+
assert_contains "entrypoint_size_budget_advisory_ok" "$out" "advisory marker still present"
|
|
117
|
+
git -C "$REPO" checkout -- "skills/demo-skill/SKILL.md"
|
|
118
|
+
|
|
119
|
+
# Case b-minus: baseline above recommended -> head shrinks below recommended =>
|
|
120
|
+
# debt_count_delta=-1 + negative per-file delta. Create a dedicated baseline branch so
|
|
121
|
+
# the aggregate base/head delta is deterministic without depending on repo history.
|
|
122
|
+
git -C "$REPO" checkout -qb shrink-baseline main
|
|
123
|
+
{ printf '\n'; repeat_char 'C' 6000; printf '\n'; } >> "$SKILL_MD"
|
|
124
|
+
git -C "$REPO" add -A
|
|
125
|
+
git -C "$REPO" commit -qm "large baseline"
|
|
126
|
+
git -C "$REPO" checkout -qb shrink-head
|
|
127
|
+
python3 - <<'PY' > "$SKILL_MD"
|
|
128
|
+
print("---")
|
|
129
|
+
print("name: demo-skill")
|
|
130
|
+
print("description: shrink changed entrypoint fixture.")
|
|
131
|
+
print("---")
|
|
132
|
+
print()
|
|
133
|
+
print("Small body after shrink.")
|
|
134
|
+
PY
|
|
135
|
+
set +e
|
|
136
|
+
out="$(CCL_SKILL_BASE_REF=shrink-baseline bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
137
|
+
rc=$?
|
|
138
|
+
set -e
|
|
139
|
+
assert_rc "$rc" 0 "shrinking oversize entrypoint must stay non-blocking"
|
|
140
|
+
assert_contains "changed_entrypoint_below_recommended: skills/demo-skill/SKILL.md" "$out" "shrunk file can also be below recommended"
|
|
141
|
+
assert_contains "entrypoint_size_debt_count_base=1" "$out" "base was over recommended"
|
|
142
|
+
assert_contains "entrypoint_size_debt_count_head=0" "$out" "head is below recommended"
|
|
143
|
+
assert_contains "entrypoint_size_debt_count_delta=-1" "$out" "shrink out of debt is visible"
|
|
144
|
+
assert_contains "changed_entrypoint_size_delta: skills/demo-skill/SKILL.md" "$out" "per-file shrink delta token emitted"
|
|
145
|
+
assert_contains "delta_body_chars=-" "$out" "per-file body delta is negative"
|
|
146
|
+
assert_contains "delta_bytes=-" "$out" "per-file byte delta is negative"
|
|
147
|
+
git -C "$REPO" reset --hard -q HEAD
|
|
148
|
+
git -C "$REPO" checkout -B feature main
|
|
149
|
+
|
|
150
|
+
# Case b2: changed entrypoint with body < 1000 chars => stable below-recommended
|
|
151
|
+
# token, still non-blocking. This proves the distinct warning branch is covered
|
|
152
|
+
# without snapshotting incidental current repository sizes.
|
|
153
|
+
python3 - <<'PY' > "$SKILL_MD"
|
|
154
|
+
print("---")
|
|
155
|
+
print("name: demo-skill")
|
|
156
|
+
print("description: tiny changed entrypoint fixture.")
|
|
157
|
+
print("---")
|
|
158
|
+
print()
|
|
159
|
+
print("Tiny body.")
|
|
160
|
+
PY
|
|
161
|
+
run_size
|
|
162
|
+
assert_rc "$rc" 0 "changed tiny entrypoint must stay non-blocking"
|
|
163
|
+
assert_contains "changed_entrypoint_below_recommended: skills/demo-skill/SKILL.md" "$out" "stable below-recommended token"
|
|
164
|
+
assert_contains "recommended_min=1000" "$out" "token cites recommended floor"
|
|
165
|
+
assert_contains "entrypoint_size_debt_count=0" "$out" "tiny body is not over-size debt"
|
|
166
|
+
git -C "$REPO" checkout -- "skills/demo-skill/SKILL.md"
|
|
167
|
+
|
|
168
|
+
# Case c: baseline severe >50KB -> head still severe but smaller => severe count delta
|
|
169
|
+
# remains 0 while per-file delta_bytes is negative. Use a second skill so the count is
|
|
170
|
+
# exactly 1.
|
|
171
|
+
mkdir -p "$REPO/skills/big-skill"
|
|
172
|
+
BIG_MD="$REPO/skills/big-skill/SKILL.md"
|
|
173
|
+
{
|
|
174
|
+
printf '%s\n' '---'
|
|
175
|
+
printf '%s\n' 'name: big-skill'
|
|
176
|
+
printf '%s\n' 'description: oversized historical entrypoint fixture.'
|
|
177
|
+
printf '%s\n' '---'
|
|
178
|
+
printf '\n'
|
|
179
|
+
repeat_char 'B' 60000
|
|
180
|
+
printf '\n'
|
|
181
|
+
} > "$BIG_MD"
|
|
182
|
+
git -C "$REPO" add -A
|
|
183
|
+
git -C "$REPO" commit -qm "add severe baseline"
|
|
184
|
+
git -C "$REPO" branch -f severe-baseline HEAD
|
|
185
|
+
{
|
|
186
|
+
printf '%s\n' '---'
|
|
187
|
+
printf '%s\n' 'name: big-skill'
|
|
188
|
+
printf '%s\n' 'description: still oversized historical entrypoint fixture.'
|
|
189
|
+
printf '%s\n' '---'
|
|
190
|
+
printf '\n'
|
|
191
|
+
repeat_char 'D' 55000
|
|
192
|
+
printf '\n'
|
|
193
|
+
} > "$BIG_MD"
|
|
194
|
+
set +e
|
|
195
|
+
out="$(CCL_SKILL_BASE_REF=severe-baseline bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
196
|
+
rc=$?
|
|
197
|
+
set -e
|
|
198
|
+
assert_rc "$rc" 0 "severe-debt entrypoint must stay non-blocking"
|
|
199
|
+
assert_contains "entrypoint_size_severe_debt_count=1" "$out" "severe byte debt counted"
|
|
200
|
+
assert_contains "entrypoint_size_severe_debt_count_base=1" "$out" "severe base counted"
|
|
201
|
+
assert_contains "entrypoint_size_severe_debt_count_head=1" "$out" "severe head counted"
|
|
202
|
+
assert_contains "entrypoint_size_severe_debt_count_delta=+0" "$out" "still-severe shrink does not change severe count"
|
|
203
|
+
assert_contains "entrypoint_size_severe_debt: skills/big-skill/SKILL.md" "$out" "per-file severe debt token"
|
|
204
|
+
assert_contains "changed_entrypoint_size_delta: skills/big-skill/SKILL.md" "$out" "severe per-file delta token emitted"
|
|
205
|
+
assert_contains "delta_bytes=-" "$out" "severe shrink byte delta is negative"
|
|
206
|
+
assert_contains "size_budget_info:" "$out" "legacy 50KB info header preserved"
|
|
207
|
+
assert_contains "entrypoint_size_budget_advisory_ok" "$out" "advisory marker still present"
|
|
208
|
+
git -C "$REPO" reset --hard -q HEAD
|
|
209
|
+
rm -rf "$REPO/skills/big-skill"
|
|
210
|
+
git -C "$REPO" add -A
|
|
211
|
+
git -C "$REPO" commit -qm "remove severe fixture"
|
|
212
|
+
git -C "$REPO" checkout -B feature main
|
|
213
|
+
|
|
214
|
+
# Case c2: added SKILL.md => base missing/head present/delta unknown, while aggregate
|
|
215
|
+
# delta remains computable.
|
|
216
|
+
mkdir -p "$REPO/skills/added-skill"
|
|
217
|
+
ADDED_MD="$REPO/skills/added-skill/SKILL.md"
|
|
218
|
+
cat > "$ADDED_MD" <<'EOF'
|
|
219
|
+
---
|
|
220
|
+
name: added-skill
|
|
221
|
+
description: added entrypoint fixture.
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
Added body.
|
|
225
|
+
EOF
|
|
226
|
+
run_size
|
|
227
|
+
assert_rc "$rc" 0 "added entrypoint must stay non-blocking"
|
|
228
|
+
assert_contains "changed_entrypoint_size_delta: skills/added-skill/SKILL.md" "$out" "added file delta token emitted"
|
|
229
|
+
assert_contains "base_body_chars=missing" "$out" "added file base is missing"
|
|
230
|
+
assert_contains "head_body_chars=" "$out" "added file head metric present"
|
|
231
|
+
assert_contains "delta_body_chars=unknown" "$out" "added file body delta is unknown, not zero"
|
|
232
|
+
assert_contains "base_bytes=missing" "$out" "added file base bytes missing"
|
|
233
|
+
assert_contains "head_bytes=" "$out" "added file head bytes present"
|
|
234
|
+
assert_contains "delta_bytes=unknown" "$out" "added file byte delta is unknown, not zero"
|
|
235
|
+
rm -rf "$REPO/skills/added-skill"
|
|
236
|
+
|
|
237
|
+
# Case c3: deleted SKILL.md => base present/head missing; aggregate count delta is
|
|
238
|
+
# still computable from the working tree.
|
|
239
|
+
git -C "$REPO" checkout -B delete-baseline main
|
|
240
|
+
mkdir -p "$REPO/skills/delete-skill"
|
|
241
|
+
DELETE_MD="$REPO/skills/delete-skill/SKILL.md"
|
|
242
|
+
{
|
|
243
|
+
printf '%s\n' '---'
|
|
244
|
+
printf '%s\n' 'name: delete-skill'
|
|
245
|
+
printf '%s\n' 'description: deleted oversize entrypoint fixture.'
|
|
246
|
+
printf '%s\n' '---'
|
|
247
|
+
printf '\n'
|
|
248
|
+
repeat_char 'E' 6000
|
|
249
|
+
printf '\n'
|
|
250
|
+
} > "$DELETE_MD"
|
|
251
|
+
git -C "$REPO" add -A
|
|
252
|
+
git -C "$REPO" commit -qm "delete baseline"
|
|
253
|
+
git -C "$REPO" checkout -qb delete-head
|
|
254
|
+
rm -f "$DELETE_MD"
|
|
255
|
+
set +e
|
|
256
|
+
out="$(CCL_SKILL_BASE_REF=delete-baseline bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
257
|
+
rc=$?
|
|
258
|
+
set -e
|
|
259
|
+
assert_rc "$rc" 0 "deleted entrypoint must stay non-blocking"
|
|
260
|
+
assert_contains "entrypoint_size_debt_count_base=1" "$out" "deleted baseline debt counted"
|
|
261
|
+
assert_contains "entrypoint_size_debt_count_head=0" "$out" "deleted head debt removed"
|
|
262
|
+
assert_contains "entrypoint_size_debt_count_delta=-1" "$out" "deleted debt count delta computable"
|
|
263
|
+
assert_contains "changed_entrypoint_size_delta: skills/delete-skill/SKILL.md" "$out" "deleted file delta token emitted"
|
|
264
|
+
assert_contains "head_body_chars=missing" "$out" "deleted file head is missing"
|
|
265
|
+
assert_contains "delta_body_chars=unknown" "$out" "deleted file body delta is unknown, not zero"
|
|
266
|
+
assert_contains "head_bytes=missing" "$out" "deleted file head bytes missing"
|
|
267
|
+
assert_contains "delta_bytes=unknown" "$out" "deleted file byte delta is unknown, not zero"
|
|
268
|
+
git -C "$REPO" reset --hard -q HEAD
|
|
269
|
+
git -C "$REPO" checkout -B feature main
|
|
270
|
+
|
|
271
|
+
# Case c4: no git / merge-base unavailable => base/delta unknown/partial marker, rc 0.
|
|
272
|
+
NONGIT="$TMP/nongit"
|
|
273
|
+
mkdir -p "$NONGIT/skills/nogit-skill"
|
|
274
|
+
cat > "$NONGIT/skills/nogit-skill/SKILL.md" <<'EOF'
|
|
275
|
+
---
|
|
276
|
+
name: nogit-skill
|
|
277
|
+
description: non git fixture.
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
Body.
|
|
281
|
+
EOF
|
|
282
|
+
OLD_REPO="$REPO"
|
|
283
|
+
REPO="$NONGIT"
|
|
284
|
+
run_size
|
|
285
|
+
REPO="$OLD_REPO"
|
|
286
|
+
assert_rc "$rc" 0 "non-git directory must stay non-blocking"
|
|
287
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "a non-git run evaluated no delta and must not claim a blocking pass"
|
|
288
|
+
assert_contains "entrypoint_size_trend_partial: base=unknown" "$out" "non-git base is partial/unknown"
|
|
289
|
+
assert_contains "entrypoint_size_debt_count_base=unknown" "$out" "non-git base count unknown"
|
|
290
|
+
assert_contains "entrypoint_size_debt_count_delta=unknown" "$out" "non-git delta unknown"
|
|
291
|
+
|
|
292
|
+
set +e
|
|
293
|
+
out="$(CCL_SKILL_BASE_REF=refs/heads/does-not-exist bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
294
|
+
rc=$?
|
|
295
|
+
set -e
|
|
296
|
+
assert_rc "$rc" 0 "unavailable merge-base must stay non-blocking"
|
|
297
|
+
assert_contains "entrypoint_size_trend_partial: base=unknown" "$out" "missing base ref is partial/unknown"
|
|
298
|
+
assert_contains "entrypoint_size_debt_count_base=unknown" "$out" "missing base ref count unknown"
|
|
299
|
+
assert_contains "entrypoint_size_debt_count_delta=unknown" "$out" "missing base ref delta unknown"
|
|
300
|
+
|
|
301
|
+
# Case d1: agent-context/session-start.md over the tripwire band but UNCHANGED vs base => band
|
|
302
|
+
# advisory only, exit 0, marker. (Force the band low so a small fixture trips it
|
|
303
|
+
# deterministically. The file is committed on main and never touched on the
|
|
304
|
+
# branch: an over-band but UNTOUCHED agent-context/session-start.md must never hard-red an
|
|
305
|
+
# unrelated MR — only net growth blocks, see d3.)
|
|
306
|
+
git -C "$REPO" checkout -q main
|
|
307
|
+
printf 'every-session injection content that exceeds the tiny tripwire band.\n' > "$REPO/agent-context/session-start.md"
|
|
308
|
+
git -C "$REPO" add -A
|
|
309
|
+
git -C "$REPO" commit -qm "bootstrap baseline on main"
|
|
310
|
+
git -C "$REPO" checkout -qB feature
|
|
311
|
+
run_size BOOTSTRAP_BYTE_TRIPWIRE=10
|
|
312
|
+
assert_rc "$rc" 0 "over-band but unchanged bootstrap must stay non-blocking"
|
|
313
|
+
assert_contains "size_budget_advisory: agent-context/session-start.md is" "$out" "over-band advisory emitted"
|
|
314
|
+
assert_contains "tripwire" "$out" "advisory names the tripwire band"
|
|
315
|
+
assert_contains "size_budget_advisory_ok" "$out" "readable bootstrap keeps ok state"
|
|
316
|
+
assert_contains "entrypoint_size_budget_advisory_ok" "$out" "advisory marker present"
|
|
317
|
+
assert_not_contains "entrypoint_size_block: " "$out" "untouched bootstrap must not enter the blocking verdict"
|
|
318
|
+
assert_not_contains "changed_bootstrap_size_delta" "$out" "unchanged bootstrap emits no delta token"
|
|
319
|
+
|
|
320
|
+
# Case d2: tracked agent-context/session-start.md deleted (uncommitted) => nothing left to
|
|
321
|
+
# size-gate; partial marker (equivalent legacy signal), exit 0, no block.
|
|
322
|
+
rm -f "$REPO/agent-context/session-start.md"
|
|
323
|
+
run_size
|
|
324
|
+
assert_rc "$rc" 0 "missing bootstrap must stay non-blocking"
|
|
325
|
+
assert_contains "size_budget_advisory_partial" "$out" "missing bootstrap yields partial marker"
|
|
326
|
+
assert_contains "agent-context/session-start.md missing or unreadable" "$out" "partial reason reported"
|
|
327
|
+
assert_not_contains "entrypoint_size_block: " "$out" "deleted bootstrap has no size-gate object"
|
|
328
|
+
|
|
329
|
+
# Case d3: agent-context/session-start.md net GROWTH (uncommitted append) => block, rc 1. The
|
|
330
|
+
# every-session injection is permanently severe: any head_bytes > base_bytes
|
|
331
|
+
# fails the gate, regardless of the (advisory) band.
|
|
332
|
+
git -C "$REPO" checkout -- agent-context/session-start.md
|
|
333
|
+
printf 'one more line of always-on growth.\n' >> "$REPO/agent-context/session-start.md"
|
|
334
|
+
run_size
|
|
335
|
+
assert_rc "$rc" 1 "bootstrap net growth must block"
|
|
336
|
+
assert_contains "entrypoint_size_block: agent-context/session-start.md grew base_bytes=" "$out" "bootstrap-growth block token names base/head bytes"
|
|
337
|
+
assert_contains "changed_bootstrap_size_delta: agent-context/session-start.md" "$out" "bootstrap delta token emitted"
|
|
338
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "failed marker present"
|
|
339
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "no ok marker next to a block"
|
|
340
|
+
git -C "$REPO" checkout -- agent-context/session-start.md
|
|
341
|
+
|
|
342
|
+
# Case d4: agent-context/session-start.md shrink => allowed, rc 0 (shrinking the always-on layer
|
|
343
|
+
# is the encouraged direction, same family rule as severe entrypoints).
|
|
344
|
+
printf 'tiny.\n' > "$REPO/agent-context/session-start.md"
|
|
345
|
+
run_size
|
|
346
|
+
assert_rc "$rc" 0 "shrinking bootstrap must pass"
|
|
347
|
+
assert_contains "bootstrap_size_delta_ok: agent-context/session-start.md" "$out" "no-net-growth token emitted"
|
|
348
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "shrink is allowed"
|
|
349
|
+
git -C "$REPO" checkout -- agent-context/session-start.md
|
|
350
|
+
|
|
351
|
+
# Case d5: same byte size, different content (edited, not grown) => allowed.
|
|
352
|
+
boot_base_bytes=$(git -C "$REPO" show main:agent-context/session-start.md | wc -c | tr -d ' ')
|
|
353
|
+
{ repeat_char 'z' $(( boot_base_bytes - 1 )); printf '\n'; } > "$REPO/agent-context/session-start.md.tmp"
|
|
354
|
+
mv "$REPO/agent-context/session-start.md.tmp" "$REPO/agent-context/session-start.md"
|
|
355
|
+
[ "$(wc -c < "$REPO/agent-context/session-start.md" | tr -d ' ')" = "$boot_base_bytes" ] || fail "d5 fixture: byte count drifted from base"
|
|
356
|
+
run_size
|
|
357
|
+
assert_rc "$rc" 0 "same-size edit of bootstrap must pass"
|
|
358
|
+
assert_contains "bootstrap_size_delta_ok: agent-context/session-start.md" "$out" "same-size edit emits no-net-growth token"
|
|
359
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "same-size edit allowed"
|
|
360
|
+
git -C "$REPO" checkout -- agent-context/session-start.md
|
|
361
|
+
|
|
362
|
+
# Case d6: agent-context/session-start.md absent from BASE (new every-session-injection file,
|
|
363
|
+
# untracked) => block like a new severe entrypoint. Fresh repo for a clean base.
|
|
364
|
+
REPO2="$TMP/repo-bootstrap-new"
|
|
365
|
+
mkdir -p "$REPO2/skills/demo-skill" "$REPO2/agent-context"
|
|
366
|
+
git init -q -b main "$REPO2"
|
|
367
|
+
git -C "$REPO2" config user.email test@example.invalid
|
|
368
|
+
git -C "$REPO2" config user.name "Test User"
|
|
369
|
+
cp "$SKILL_MD" "$REPO2/skills/demo-skill/SKILL.md"
|
|
370
|
+
git -C "$REPO2" add -A
|
|
371
|
+
git -C "$REPO2" commit -qm "baseline without bootstrap"
|
|
372
|
+
git -C "$REPO2" checkout -qb feature
|
|
373
|
+
printf 'brand-new always-on injection surface.\n' > "$REPO2/agent-context/session-start.md"
|
|
374
|
+
set +e
|
|
375
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$REPO2" 2>&1)"
|
|
376
|
+
rc=$?
|
|
377
|
+
set -e
|
|
378
|
+
assert_rc "$rc" 1 "a agent-context/session-start.md absent from base must block as a new every-session injection"
|
|
379
|
+
assert_contains "entrypoint_size_block: agent-context/session-start.md: new every-session-injection file" "$out" "new-injection block token"
|
|
380
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "no ok marker next to a block"
|
|
381
|
+
|
|
382
|
+
# Case d7: changed agent-context/session-start.md with an UNRESOLVABLE base => fail-closed
|
|
383
|
+
# partial, rc 1, NO ok markers (same family rule as a severe changed file).
|
|
384
|
+
printf 'growth under a lost base.\n' >> "$REPO/agent-context/session-start.md"
|
|
385
|
+
set +e
|
|
386
|
+
out="$(env CCL_SKILL_BASE_REF=definitely-not-a-ref bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
387
|
+
rc=$?
|
|
388
|
+
set -e
|
|
389
|
+
assert_rc "$rc" 1 "changed bootstrap with unknown base must fail closed"
|
|
390
|
+
assert_contains "entrypoint_size_block_partial: agent-context/session-start.md: base unknown" "$out" "partial names agent-context/session-start.md"
|
|
391
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "failed marker present"
|
|
392
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "no false ok next to partial"
|
|
393
|
+
assert_not_contains "entrypoint_size_budget_advisory_ok" "$out" "no legacy ok next to failure"
|
|
394
|
+
git -C "$REPO" checkout -- agent-context/session-start.md
|
|
395
|
+
|
|
396
|
+
# Case d8: growth landing on the BASE side after divergence never reddens the
|
|
397
|
+
# branch — base resolution is merge-base, so only the MR's own diff counts.
|
|
398
|
+
# Not merged => the target-branch growth is unreachable from HEAD (invisible);
|
|
399
|
+
# merged => the merge-base absorbs it. Only growth inside the branch's own diff
|
|
400
|
+
# blocks (d3).
|
|
401
|
+
git -C "$REPO" checkout -q main
|
|
402
|
+
printf 'growth landing on main after the branch diverged.\n' >> "$REPO/agent-context/session-start.md"
|
|
403
|
+
git -C "$REPO" commit -qam "main-side growth after divergence"
|
|
404
|
+
git -C "$REPO" checkout -q feature
|
|
405
|
+
run_size
|
|
406
|
+
assert_rc "$rc" 0 "base-side growth must not red the branch"
|
|
407
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "not-merged inherited growth is invisible"
|
|
408
|
+
git -C "$REPO" merge -q -m "merge main into feature" main
|
|
409
|
+
run_size
|
|
410
|
+
assert_rc "$rc" 0 "merged base-side growth must not red the branch either"
|
|
411
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "merged inherited growth is absorbed by merge-base"
|
|
412
|
+
|
|
413
|
+
# Case d9: committed bootstrap growth with an UNRESOLVABLE base and a CLEAN
|
|
414
|
+
# tree => nothing was delta-checked: bootstrap-scoped unevaluated token, rc 0,
|
|
415
|
+
# and NEVER the ok token (the base-less state is a caller-side pipeline
|
|
416
|
+
# responsibility; CI always exports CCL_SKILL_BASE_REF).
|
|
417
|
+
[ -z "$(git -C "$REPO" status --porcelain)" ] || fail "d9 fixture: tree must be clean"
|
|
418
|
+
set +e
|
|
419
|
+
out="$(env CCL_SKILL_BASE_REF=definitely-not-a-ref bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
420
|
+
rc=$?
|
|
421
|
+
set -e
|
|
422
|
+
assert_rc "$rc" 0 "base-less clean tree keeps the advisory exit contract"
|
|
423
|
+
assert_contains "bootstrap_size_delta_unevaluated: base=unknown — agent-context/session-start.md committed changes were NOT delta-checked" "$out" "bootstrap-scoped unevaluated token present"
|
|
424
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "a base-less run must never claim a blocking pass"
|
|
425
|
+
|
|
426
|
+
# Case d10: the baseline is the SAME path at base and nothing else, so a git mv
|
|
427
|
+
# of the always-on layer BLOCKS as a new every-session injection. That is the
|
|
428
|
+
# intended verdict, not a gap: a relocation is rare, deliberate, and worth a
|
|
429
|
+
# human decision, whereas every automatic recogniser tried here became a way for
|
|
430
|
+
# a candidate to nominate its own baseline (see d11). The first half pins that a
|
|
431
|
+
# byte-identical move still blocks; the second pins that git's rename pairing is
|
|
432
|
+
# never consulted, so an unrelated source cannot be adopted as the yardstick.
|
|
433
|
+
REPO3="$TMP/repo-bootstrap-move"
|
|
434
|
+
mkdir -p "$REPO3/skills/demo-skill"
|
|
435
|
+
git init -q -b main "$REPO3"
|
|
436
|
+
git -C "$REPO3" config user.email test@example.invalid
|
|
437
|
+
git -C "$REPO3" config user.name "Test User"
|
|
438
|
+
cp "$SKILL_MD" "$REPO3/skills/demo-skill/SKILL.md"
|
|
439
|
+
printf 'always-on injection body that is about to move, unchanged.\n' > "$REPO3/bootstrap.md"
|
|
440
|
+
git -C "$REPO3" add -A
|
|
441
|
+
git -C "$REPO3" commit -qm "baseline with bootstrap at the old path"
|
|
442
|
+
git -C "$REPO3" checkout -qb feature
|
|
443
|
+
mkdir -p "$REPO3/agent-context"
|
|
444
|
+
git -C "$REPO3" mv bootstrap.md agent-context/session-start.md
|
|
445
|
+
set +e
|
|
446
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$REPO3" 2>&1)"
|
|
447
|
+
rc=$?
|
|
448
|
+
set -e
|
|
449
|
+
assert_rc "$rc" 1 "relocating the always-on layer must block — the baseline is the same path at base, nothing else"
|
|
450
|
+
assert_contains "new every-session-injection file" "$out" "a relocation reads as a new injection surface and needs a human decision"
|
|
451
|
+
assert_not_contains "renamed_from=" "$out" "the gate must not consult git rename pairing at all"
|
|
452
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "a relocation must never earn the blocking-ok token"
|
|
453
|
+
|
|
454
|
+
# Case d11: the budget must not be settable by CHOOSING a baseline. git detects
|
|
455
|
+
# renames by content similarity, not identity, so an unrelated tracked file moved
|
|
456
|
+
# onto the injection path is reported as a rename of that file. Any mechanism
|
|
457
|
+
# that believed such a pairing would let a candidate import a large blob as its
|
|
458
|
+
# own yardstick and inject far more than the real bootstrap while the delta still
|
|
459
|
+
# read non-positive. Independent review and adversarial challenge both landed on
|
|
460
|
+
# that bypass; the gate answers it by having no baseline-nomination path at all.
|
|
461
|
+
REPO4="$TMP/repo-bootstrap-baseline-swap"
|
|
462
|
+
mkdir -p "$REPO4/skills/demo-skill" "$REPO4/docs"
|
|
463
|
+
git init -q -b main "$REPO4"
|
|
464
|
+
git -C "$REPO4" config user.email test@example.invalid
|
|
465
|
+
git -C "$REPO4" config user.name "Test User"
|
|
466
|
+
cp "$SKILL_MD" "$REPO4/skills/demo-skill/SKILL.md"
|
|
467
|
+
printf 'the real always-on injection, deliberately small.\n' > "$REPO4/bootstrap.md"
|
|
468
|
+
{ printf 'unrelated reference document.\n'; repeat_char y 9000; printf '\n'; } > "$REPO4/docs/big-unrelated.md"
|
|
469
|
+
git -C "$REPO4" add -A
|
|
470
|
+
git -C "$REPO4" commit -qm "baseline: small bootstrap plus a large unrelated doc"
|
|
471
|
+
git -C "$REPO4" checkout -qb feature
|
|
472
|
+
mkdir -p "$REPO4/agent-context"
|
|
473
|
+
# Byte-identical content makes git report a 100% rename — exactly the pairing a
|
|
474
|
+
# rename-following gate would have believed.
|
|
475
|
+
git -C "$REPO4" rm -q bootstrap.md
|
|
476
|
+
git -C "$REPO4" mv docs/big-unrelated.md agent-context/session-start.md
|
|
477
|
+
set +e
|
|
478
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$REPO4" 2>&1)"
|
|
479
|
+
rc=$?
|
|
480
|
+
set -e
|
|
481
|
+
assert_rc "$rc" 1 "an unrelated file moved onto the injection path must not become its own baseline"
|
|
482
|
+
assert_contains "new every-session-injection file" "$out" "the swap is refused, not measured against the imported blob"
|
|
483
|
+
assert_not_contains "docs/big-unrelated.md" "$out" "the unrelated rename source must never appear as a baseline"
|
|
484
|
+
|
|
485
|
+
# ---------------------------------------------------------------------------
|
|
486
|
+
# Delta-blocking series (fresh repo, deterministic): new/crossing severe and
|
|
487
|
+
# severe growth block; shrink, sub-severe growth, and same-size edits pass.
|
|
488
|
+
REPO="$TMP/repo-blocking"
|
|
489
|
+
mkdir -p "$REPO/skills/demo-skill"
|
|
490
|
+
git init -q -b main "$REPO"
|
|
491
|
+
git -C "$REPO" config user.email test@example.invalid
|
|
492
|
+
git -C "$REPO" config user.name "Test User"
|
|
493
|
+
SKILL_MD="$REPO/skills/demo-skill/SKILL.md"
|
|
494
|
+
|
|
495
|
+
write_skill_with_body_bytes() { # <path> <total-bytes-approx>
|
|
496
|
+
{
|
|
497
|
+
printf -- '---\nname: demo-skill\ndescription: blocking series fixture.\n---\n\n'
|
|
498
|
+
repeat_char x "$2"
|
|
499
|
+
} > "$1"
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
# Baseline: 49KB (sub-severe).
|
|
503
|
+
write_skill_with_body_bytes "$SKILL_MD" 49000
|
|
504
|
+
git -C "$REPO" add -A
|
|
505
|
+
git -C "$REPO" commit -qm "baseline 49k"
|
|
506
|
+
git -C "$REPO" checkout -qb feature
|
|
507
|
+
|
|
508
|
+
# Case e1: 49KB -> 51KB crosses the severe threshold => block, rc 1.
|
|
509
|
+
write_skill_with_body_bytes "$SKILL_MD" 51000
|
|
510
|
+
run_size
|
|
511
|
+
assert_rc "$rc" 1 "crossing into severe must block"
|
|
512
|
+
assert_contains "entrypoint_size_block: skills/demo-skill/SKILL.md: new severe entrypoint" "$out" "new-severe block token"
|
|
513
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "failed marker present"
|
|
514
|
+
|
|
515
|
+
# Case e2: back to 49KB => clean again, rc 0, blocking_ok.
|
|
516
|
+
write_skill_with_body_bytes "$SKILL_MD" 49000
|
|
517
|
+
run_size
|
|
518
|
+
assert_rc "$rc" 0 "sub-severe entrypoint must pass"
|
|
519
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "blocking ok marker"
|
|
520
|
+
|
|
521
|
+
# Case e3: 51KB on MAIN (inside the merge-base), then grow to 52KB on a branch
|
|
522
|
+
# => growth of an already-severe entrypoint blocks. (A 51KB commit merely on the
|
|
523
|
+
# feature branch is a new-severe introduction instead — merge-base semantics.)
|
|
524
|
+
git -C "$REPO" checkout -q main
|
|
525
|
+
write_skill_with_body_bytes "$SKILL_MD" 51000
|
|
526
|
+
git -C "$REPO" add -A
|
|
527
|
+
git -C "$REPO" commit -qm "base 51k severe on main"
|
|
528
|
+
git -C "$REPO" checkout -qb feature2
|
|
529
|
+
write_skill_with_body_bytes "$SKILL_MD" 52000
|
|
530
|
+
run_size
|
|
531
|
+
assert_rc "$rc" 1 "severe growth must block"
|
|
532
|
+
assert_contains "entrypoint_size_block: skills/demo-skill/SKILL.md: severe entrypoint grew" "$out" "severe-growth block token"
|
|
533
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "failed marker present"
|
|
534
|
+
|
|
535
|
+
# Case e4: shrink 52KB -> 50KB (still severe but smaller) => allowed, rc 0.
|
|
536
|
+
write_skill_with_body_bytes "$SKILL_MD" 50050
|
|
537
|
+
run_size
|
|
538
|
+
assert_rc "$rc" 0 "shrinking a severe entrypoint must pass"
|
|
539
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "shrink is allowed"
|
|
540
|
+
|
|
541
|
+
# Case e5: a brand-new severe file (untracked) => new-severe block.
|
|
542
|
+
mkdir -p "$REPO/skills/fresh-skill"
|
|
543
|
+
write_skill_with_body_bytes "$REPO/skills/fresh-skill/SKILL.md" 60000
|
|
544
|
+
run_size
|
|
545
|
+
assert_rc "$rc" 1 "untracked severe file must block"
|
|
546
|
+
assert_contains "entrypoint_size_block: skills/fresh-skill/SKILL.md: new severe entrypoint" "$out" "untracked new-severe block"
|
|
547
|
+
rm -f "$REPO/skills/fresh-skill/SKILL.md"
|
|
548
|
+
|
|
549
|
+
# Case e6: same byte size, different content (edited, not grown) => allowed.
|
|
550
|
+
# Rebuild the file to the EXACT same byte count (header + padded body).
|
|
551
|
+
# Rebuild to EXACTLY the base byte count with different content (true
|
|
552
|
+
# same-size edit, not a shrink): merge-base holds the 51k severe state.
|
|
553
|
+
base_bytes=$(git -C "$REPO" show "$(git -C "$REPO" merge-base main HEAD):skills/demo-skill/SKILL.md" | wc -c | tr -d ' ')
|
|
554
|
+
header_bytes=$(printf -- '---\nname: demo-skill\ndescription: edited same size variant.\n---\n\n' | wc -c | tr -d ' ')
|
|
555
|
+
{ printf -- '---\nname: demo-skill\ndescription: edited same size variant.\n---\n\n'; repeat_char y $(( base_bytes - header_bytes )); } > "$SKILL_MD.tmp"
|
|
556
|
+
mv "$SKILL_MD.tmp" "$SKILL_MD"
|
|
557
|
+
[ "$(wc -c < "$SKILL_MD" | tr -d ' ')" = "$base_bytes" ] || fail "e6 fixture: byte count drifted from base"
|
|
558
|
+
run_size
|
|
559
|
+
assert_rc "$rc" 0 "same-size edit of a severe entrypoint must pass"
|
|
560
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "same-size edit allowed"
|
|
561
|
+
|
|
562
|
+
# Case e7b: rename a severe entrypoint to a new path => move_ok, not a block.
|
|
563
|
+
# The severe deletion in the same diff covers the new severe file; a net-new
|
|
564
|
+
# severe would still block (e1).
|
|
565
|
+
git -C "$REPO" checkout -q main 2>/dev/null || git -C "$REPO" checkout -q -b main
|
|
566
|
+
write_skill_with_body_bytes "$SKILL_MD" 50050
|
|
567
|
+
git -C "$REPO" add -A && git -C "$REPO" commit -qm "50k on main for rename case"
|
|
568
|
+
git -C "$REPO" checkout -qb feature3
|
|
569
|
+
mkdir -p "$REPO/skills/moved-skill"
|
|
570
|
+
git -C "$REPO" mv skills/demo-skill/SKILL.md skills/moved-skill/SKILL.md
|
|
571
|
+
run_size
|
|
572
|
+
assert_rc "$rc" 0 "rename of a severe entrypoint must pass as move"
|
|
573
|
+
assert_contains "entrypoint_size_move_ok: skills/moved-skill/SKILL.md" "$out" "move token names the new path"
|
|
574
|
+
assert_contains "entrypoint_size_blocking_ok" "$out" "move does not block"
|
|
575
|
+
|
|
576
|
+
# Case e7d: the file STAYS at the renamed path and grows => the move credit is
|
|
577
|
+
# withdrawn and it blocks as a NEW severe entrypoint (the R pair no longer covers
|
|
578
|
+
# it because head > source). This is the real rename-and-grow shape; e7c below
|
|
579
|
+
# moves the file BACK to its base path, which git reports as an ordinary same-path
|
|
580
|
+
# modification and therefore exercises the growth branch instead — keep both, they
|
|
581
|
+
# are different branches of the verdict.
|
|
582
|
+
write_skill_with_body_bytes "$REPO/skills/moved-skill/SKILL.md" 62000
|
|
583
|
+
run_size
|
|
584
|
+
assert_rc "$rc" 1 "rename that also grows must block"
|
|
585
|
+
assert_contains "entrypoint_size_block: skills/moved-skill/SKILL.md: new severe entrypoint" "$out" "rename+growth blocks as new-severe, not as growth"
|
|
586
|
+
assert_not_contains "entrypoint_size_move_ok" "$out" "move credit must not survive growth"
|
|
587
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "no ok marker next to a block"
|
|
588
|
+
write_skill_with_body_bytes "$REPO/skills/moved-skill/SKILL.md" 50050
|
|
589
|
+
|
|
590
|
+
# Case e7c: moving the file BACK to a path that is already severe in base, and
|
|
591
|
+
# growing it, blocks on the severe-growth branch (same-path modification).
|
|
592
|
+
git -C "$REPO" mv skills/moved-skill/SKILL.md skills/demo-skill/SKILL.md
|
|
593
|
+
write_skill_with_body_bytes "$REPO/skills/demo-skill/SKILL.md" 62000
|
|
594
|
+
run_size
|
|
595
|
+
assert_rc "$rc" 1 "move-back-and-grow must block"
|
|
596
|
+
assert_contains "entrypoint_size_block: skills/demo-skill/SKILL.md: severe entrypoint grew" "$out" "an already-severe base path that grows blocks as growth"
|
|
597
|
+
|
|
598
|
+
# Case e7: base unknown (bad CCL_SKILL_BASE_REF) + severe UNTRACKED file
|
|
599
|
+
# (visible in `changed` regardless of base) => fail-closed partial, rc 1, NO ok
|
|
600
|
+
# markers (the P0 false-pass shape). Note: committed-only changes without a
|
|
601
|
+
# resolvable base are invisible to the delta gate by design — CI always exports
|
|
602
|
+
# CCL_SKILL_BASE_REF.
|
|
603
|
+
mkdir -p "$REPO/skills/rogue-skill"
|
|
604
|
+
write_skill_with_body_bytes "$REPO/skills/rogue-skill/SKILL.md" 51000
|
|
605
|
+
set +e
|
|
606
|
+
out="$(env CCL_SKILL_BASE_REF=definitely-not-a-ref bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
607
|
+
rc=$?
|
|
608
|
+
set -e
|
|
609
|
+
assert_rc "$rc" 1 "unknown base must fail closed"
|
|
610
|
+
assert_contains "entrypoint_size_block_partial: skills/rogue-skill/SKILL.md: base unknown" "$out" "partial names the file"
|
|
611
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "failed marker present"
|
|
612
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "no false ok next to partial"
|
|
613
|
+
assert_not_contains "entrypoint_size_budget_advisory_ok" "$out" "no legacy ok next to failure"
|
|
614
|
+
rm -rf "$REPO/skills/rogue-skill"
|
|
615
|
+
|
|
616
|
+
# Case e9: committed-only severe growth with an UNRESOLVABLE base and a CLEAN
|
|
617
|
+
# tree. The delta gate cannot see the committed change at all, so it evaluates
|
|
618
|
+
# nothing — it must NOT print entrypoint_size_blocking_ok, because a consumer
|
|
619
|
+
# gating on that token would otherwise earn a pass simply by losing its base.
|
|
620
|
+
# The exit code stays 0 on purpose (the script also runs outside a worktree);
|
|
621
|
+
# reddening this state is the caller's pipeline decision, and CI always exports
|
|
622
|
+
# CCL_SKILL_BASE_REF.
|
|
623
|
+
git -C "$REPO" add -A
|
|
624
|
+
git -C "$REPO" commit -qm "commit the severe growth so the tree is clean"
|
|
625
|
+
[ -z "$(git -C "$REPO" status --porcelain)" ] || fail "e9 fixture: tree must be clean"
|
|
626
|
+
set +e
|
|
627
|
+
out="$(env CCL_SKILL_BASE_REF=definitely-not-a-ref bash "$SIZE_SCRIPT" "$REPO" 2>&1)"
|
|
628
|
+
rc=$?
|
|
629
|
+
set -e
|
|
630
|
+
assert_rc "$rc" 0 "base-less clean tree keeps the advisory exit contract"
|
|
631
|
+
assert_contains "entrypoint_size_blocking_unevaluated" "$out" "un-evaluated delta gate says so"
|
|
632
|
+
assert_not_contains "entrypoint_size_blocking_ok" "$out" "a base-less run must never claim a blocking pass"
|
|
633
|
+
|
|
634
|
+
# ---------------------------------------------------------------------------
|
|
635
|
+
# C3 body-word budget series (fresh repos, deterministic): frontmatter is out
|
|
636
|
+
# of scope; a new/within-limit entrypoint may not exceed 5000 body words; a
|
|
637
|
+
# historical over-limit entrypoint may stay level or shrink but may not grow.
|
|
638
|
+
WORD_REPO="$TMP/repo-word-budget"
|
|
639
|
+
mkdir -p "$WORD_REPO/skills/demo-skill" "$WORD_REPO/skills/legacy-unchanged"
|
|
640
|
+
git init -q -b main "$WORD_REPO"
|
|
641
|
+
git -C "$WORD_REPO" config user.email test@example.invalid
|
|
642
|
+
git -C "$WORD_REPO" config user.name "Test User"
|
|
643
|
+
WORD_SKILL="$WORD_REPO/skills/demo-skill/SKILL.md"
|
|
644
|
+
LEGACY_UNCHANGED_WORD_SKILL="$WORD_REPO/skills/legacy-unchanged/SKILL.md"
|
|
645
|
+
|
|
646
|
+
write_skill_with_body_words() { # <path> <body-word-count> [word]
|
|
647
|
+
local skill_name
|
|
648
|
+
skill_name="$(basename "$(dirname "$1")")"
|
|
649
|
+
{
|
|
650
|
+
printf -- '---\nname: %s\ndescription: word-budget fixture.\n---\n\n' "$skill_name"
|
|
651
|
+
repeat_word "${3:-word}" "$2"
|
|
652
|
+
} > "$1"
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
write_skill_with_body_words "$WORD_SKILL" 2
|
|
656
|
+
write_skill_with_body_words "$LEGACY_UNCHANGED_WORD_SKILL" 5001 legacy
|
|
657
|
+
git -C "$WORD_REPO" add -A
|
|
658
|
+
git -C "$WORD_REPO" commit -qm "small word-budget baseline"
|
|
659
|
+
git -C "$WORD_REPO" checkout -qb feature
|
|
660
|
+
|
|
661
|
+
# Case f1: frontmatter words do not consume the body budget. The changed-file
|
|
662
|
+
# token pins the exact metric so silently counting YAML makes this test red.
|
|
663
|
+
{
|
|
664
|
+
printf -- '---\nname: demo-skill\ndescription: '
|
|
665
|
+
repeat_word meta 6000
|
|
666
|
+
printf -- '---\n\nonly two\n'
|
|
667
|
+
} > "$WORD_SKILL"
|
|
668
|
+
set +e
|
|
669
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
670
|
+
rc=$?
|
|
671
|
+
set -e
|
|
672
|
+
assert_rc "$rc" 0 "frontmatter words must not consume the body-word budget"
|
|
673
|
+
assert_contains "changed_entrypoint_word_delta: skills/demo-skill/SKILL.md" "$out" "body-word delta token emitted"
|
|
674
|
+
assert_contains "head_body_words=2" "$out" "only body words are counted"
|
|
675
|
+
assert_contains "entrypoint_word_budget_over_limit_count_head=1" "$out" "unchanged historical over-limit entrypoint remains visible"
|
|
676
|
+
assert_contains "entrypoint_word_budget_blocking_ok" "$out" "frontmatter-only growth remains within the word budget"
|
|
677
|
+
git -C "$WORD_REPO" checkout -- skills/demo-skill/SKILL.md
|
|
678
|
+
|
|
679
|
+
# Case f2: a new entrypoint above the uniform limit blocks with path, actual,
|
|
680
|
+
# and allowed counts in a machine-readable diagnostic.
|
|
681
|
+
mkdir -p "$WORD_REPO/skills/fresh-skill"
|
|
682
|
+
FRESH_WORD_SKILL="$WORD_REPO/skills/fresh-skill/SKILL.md"
|
|
683
|
+
write_skill_with_body_words "$FRESH_WORD_SKILL" 5001
|
|
684
|
+
set +e
|
|
685
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
686
|
+
rc=$?
|
|
687
|
+
set -e
|
|
688
|
+
assert_rc "$rc" 1 "new entrypoint above the word limit must block"
|
|
689
|
+
assert_contains "entrypoint_word_budget_block: skills/fresh-skill/SKILL.md" "$out" "word-budget block names the file"
|
|
690
|
+
assert_contains "head_body_words=5001" "$out" "word-budget block reports actual words"
|
|
691
|
+
assert_contains "allowed_body_words=5000" "$out" "word-budget block reports the uniform allowance"
|
|
692
|
+
assert_contains "entrypoint_word_budget_blocking_failed" "$out" "word-budget failed marker present"
|
|
693
|
+
assert_contains "entrypoint_size_blocking_failed" "$out" "legacy aggregate marker also reports a word-only size-budget failure"
|
|
694
|
+
assert_not_contains "entrypoint_size_block: skills/fresh-skill/SKILL.md" "$out" "word-only failure does not fabricate a byte-specific block line"
|
|
695
|
+
assert_not_contains "entrypoint_word_budget_blocking_ok" "$out" "no word-budget ok marker next to a block"
|
|
696
|
+
rm -rf "$WORD_REPO/skills/fresh-skill"
|
|
697
|
+
|
|
698
|
+
# Case f3: the metric cannot be bypassed with unspaced Han text. Each Han
|
|
699
|
+
# ideograph is one deterministic word-equivalent unit; no language segmenter or
|
|
700
|
+
# optional runtime dependency is required.
|
|
701
|
+
mkdir -p "$WORD_REPO/skills/han-skill"
|
|
702
|
+
HAN_WORD_SKILL="$WORD_REPO/skills/han-skill/SKILL.md"
|
|
703
|
+
{
|
|
704
|
+
printf -- '---\nname: han-skill\ndescription: Han fixture.\n---\n\n'
|
|
705
|
+
ruby -e 'print([0x5B57].pack("U") * 5001)'
|
|
706
|
+
printf '\n'
|
|
707
|
+
} > "$HAN_WORD_SKILL"
|
|
708
|
+
ruby -e 's = File.binread(ARGV.fetch(0)).force_encoding(Encoding::UTF_8); exit(s.valid_encoding? ? 0 : 1)' "$HAN_WORD_SKILL" \
|
|
709
|
+
|| fail "f3 fixture: generated invalid UTF-8"
|
|
710
|
+
set +e
|
|
711
|
+
out="$(env -u CCL_SKILL_BASE_REF LC_ALL=C bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
712
|
+
rc=$?
|
|
713
|
+
set -e
|
|
714
|
+
assert_rc "$rc" 1 "unspaced Han body above the word-equivalent limit must block under the C locale"
|
|
715
|
+
assert_contains "entrypoint_word_budget_block: skills/han-skill/SKILL.md" "$out" "Han over-limit block names the file"
|
|
716
|
+
assert_contains "head_body_words=5001" "$out" "Han units are counted deterministically"
|
|
717
|
+
rm -rf "$WORD_REPO/skills/han-skill"
|
|
718
|
+
|
|
719
|
+
# Case f3b: invalid UTF-8 must not crash the existing raw-byte gate or disappear
|
|
720
|
+
# from the body-word metric. Each invalid byte becomes one counted replacement
|
|
721
|
+
# unit, so 5000 valid words plus one invalid byte crosses the uniform limit.
|
|
722
|
+
mkdir -p "$WORD_REPO/skills/invalid-utf8-skill"
|
|
723
|
+
INVALID_UTF8_WORD_SKILL="$WORD_REPO/skills/invalid-utf8-skill/SKILL.md"
|
|
724
|
+
write_skill_with_body_words "$INVALID_UTF8_WORD_SKILL" 5000
|
|
725
|
+
ruby -e 'File.open(ARGV.fetch(0), "ab") { |f| f.write([0xFF].pack("C")) }' "$INVALID_UTF8_WORD_SKILL"
|
|
726
|
+
set +e
|
|
727
|
+
out="$(env -u CCL_SKILL_BASE_REF LC_ALL=C bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
728
|
+
rc=$?
|
|
729
|
+
set -e
|
|
730
|
+
assert_rc "$rc" 1 "invalid UTF-8 byte must be counted without crashing the size gate"
|
|
731
|
+
assert_contains "entrypoint_word_budget_block: skills/invalid-utf8-skill/SKILL.md" "$out" "invalid UTF-8 fixture blocks as a word-budget violation"
|
|
732
|
+
assert_contains "head_body_words=5001" "$out" "each invalid byte contributes one deterministic replacement unit"
|
|
733
|
+
assert_not_contains "entrypoint_size_gate_error" "$out" "invalid UTF-8 must not disable the raw-byte gate"
|
|
734
|
+
rm -rf "$WORD_REPO/skills/invalid-utf8-skill"
|
|
735
|
+
|
|
736
|
+
# Case f4: a historical over-limit entrypoint is frozen at its merge-base
|
|
737
|
+
# count. Same-count edits and shrinkage pass; one added word blocks.
|
|
738
|
+
git -C "$WORD_REPO" checkout -q main
|
|
739
|
+
write_skill_with_body_words "$WORD_SKILL" 5001 legacy
|
|
740
|
+
git -C "$WORD_REPO" add -A
|
|
741
|
+
git -C "$WORD_REPO" commit -qm "historical over-limit word baseline"
|
|
742
|
+
git -C "$WORD_REPO" checkout -qb legacy-feature
|
|
743
|
+
write_skill_with_body_words "$WORD_SKILL" 5001 changed
|
|
744
|
+
set +e
|
|
745
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
746
|
+
rc=$?
|
|
747
|
+
set -e
|
|
748
|
+
assert_rc "$rc" 0 "same-count edit of historical over-limit entrypoint must pass"
|
|
749
|
+
assert_contains "entrypoint_word_budget_legacy_ok: skills/demo-skill/SKILL.md" "$out" "legacy allowance is explicit"
|
|
750
|
+
assert_contains "allowed_body_words=5001" "$out" "legacy allowance equals the base count"
|
|
751
|
+
|
|
752
|
+
write_skill_with_body_words "$WORD_SKILL" 5002 changed
|
|
753
|
+
set +e
|
|
754
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
755
|
+
rc=$?
|
|
756
|
+
set -e
|
|
757
|
+
assert_rc "$rc" 1 "historical over-limit entrypoint growth must block"
|
|
758
|
+
assert_contains "entrypoint_word_budget_block: skills/demo-skill/SKILL.md" "$out" "legacy growth block names the file"
|
|
759
|
+
assert_contains "base_body_words=5001" "$out" "legacy growth reports base words"
|
|
760
|
+
assert_contains "head_body_words=5002" "$out" "legacy growth reports head words"
|
|
761
|
+
assert_contains "allowed_body_words=5001" "$out" "legacy growth allowance is frozen at base"
|
|
762
|
+
|
|
763
|
+
write_skill_with_body_words "$WORD_SKILL" 4999 changed
|
|
764
|
+
set +e
|
|
765
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
766
|
+
rc=$?
|
|
767
|
+
set -e
|
|
768
|
+
assert_rc "$rc" 0 "historical over-limit entrypoint may shrink below the uniform limit"
|
|
769
|
+
assert_contains "entrypoint_word_budget_blocking_ok" "$out" "shrink below the limit passes"
|
|
770
|
+
|
|
771
|
+
# Case f4b: an actual git rename carries the historical allowance to its own new
|
|
772
|
+
# path, but adding a word during that rename still blocks.
|
|
773
|
+
git -C "$WORD_REPO" reset --hard -q HEAD
|
|
774
|
+
mkdir -p "$WORD_REPO/skills/moved-skill"
|
|
775
|
+
git -C "$WORD_REPO" mv skills/demo-skill/SKILL.md skills/moved-skill/SKILL.md
|
|
776
|
+
set +e
|
|
777
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
778
|
+
rc=$?
|
|
779
|
+
set -e
|
|
780
|
+
assert_rc "$rc" 0 "rename of historical over-limit entrypoint without growth must pass"
|
|
781
|
+
assert_contains "entrypoint_word_budget_move_ok: skills/moved-skill/SKILL.md" "$out" "rename carries only its own historical allowance"
|
|
782
|
+
write_skill_with_body_words "$WORD_REPO/skills/moved-skill/SKILL.md" 5002 legacy
|
|
783
|
+
set +e
|
|
784
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
785
|
+
rc=$?
|
|
786
|
+
set -e
|
|
787
|
+
assert_rc "$rc" 1 "rename plus word growth must block"
|
|
788
|
+
assert_contains "entrypoint_word_budget_block: skills/moved-skill/SKILL.md" "$out" "rename growth block names the new path"
|
|
789
|
+
assert_contains "base_body_words=5001" "$out" "rename growth uses the moved historical baseline"
|
|
790
|
+
assert_contains "allowed_body_words=5001" "$out" "rename growth allowance is frozen at the moved baseline"
|
|
791
|
+
assert_contains "moved_from=skills/demo-skill/SKILL.md" "$out" "rename growth diagnostic proves the rename branch ran"
|
|
792
|
+
git -C "$WORD_REPO" reset --hard -q HEAD
|
|
793
|
+
|
|
794
|
+
# Case f5: after a shrink is in the baseline, the historical allowance is gone;
|
|
795
|
+
# growing back above the uniform limit blocks even if an older revision was larger.
|
|
796
|
+
git -C "$WORD_REPO" checkout -q main
|
|
797
|
+
write_skill_with_body_words "$WORD_SKILL" 5000 landed
|
|
798
|
+
git -C "$WORD_REPO" add -A
|
|
799
|
+
git -C "$WORD_REPO" commit -qm "land shrink to uniform word limit"
|
|
800
|
+
git -C "$WORD_REPO" checkout -qb within-limit-feature
|
|
801
|
+
write_skill_with_body_words "$WORD_SKILL" 5001 regrown
|
|
802
|
+
set +e
|
|
803
|
+
out="$(env -u CCL_SKILL_BASE_REF bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
804
|
+
rc=$?
|
|
805
|
+
set -e
|
|
806
|
+
assert_rc "$rc" 1 "entrypoint whose base is within limit may not regrow above it"
|
|
807
|
+
assert_contains "allowed_body_words=5000" "$out" "uniform allowance replaces historical allowance"
|
|
808
|
+
|
|
809
|
+
# Case f6: a changed over-limit entrypoint with an unresolvable base fails
|
|
810
|
+
# closed. Losing the baseline must not turn compatibility into a waiver.
|
|
811
|
+
set +e
|
|
812
|
+
out="$(env CCL_SKILL_BASE_REF=definitely-not-a-ref bash "$SIZE_SCRIPT" "$WORD_REPO" 2>&1)"
|
|
813
|
+
rc=$?
|
|
814
|
+
set -e
|
|
815
|
+
assert_rc "$rc" 1 "over-limit word budget with unknown base must fail closed"
|
|
816
|
+
assert_contains "entrypoint_word_budget_block_partial: skills/demo-skill/SKILL.md: base unknown" "$out" "word-budget partial names the file"
|
|
817
|
+
assert_contains "entrypoint_word_budget_blocking_failed" "$out" "word-budget partial emits failed marker"
|
|
818
|
+
assert_not_contains "entrypoint_word_budget_blocking_ok" "$out" "unknown baseline never earns a word-budget pass"
|
|
819
|
+
|
|
820
|
+
# Case e8: gate wiring anchors — the validator must fail the gate on non-zero
|
|
821
|
+
# and must not demote the size gate back to advisory.
|
|
822
|
+
validator="$SCRIPT_DIR/check-ccl-skills.sh"
|
|
823
|
+
grep -q '|| size_budget_rc=\$?' "$validator" || fail "validator no longer records size-gate rc"
|
|
824
|
+
grep -q 'entrypoint_size_budget_blocking_failed (block or partial' "$validator" || fail "validator missing blocking failure message"
|
|
825
|
+
grep -q 'check-size-budget.sh missing' "$validator" || fail "validator missing missing-script fail-closed branch"
|
|
826
|
+
grep -q 'entrypoint_size_budget_infra_failed' "$validator" || fail "validator missing infra-failure distinction (ruby crash/missing must not read as size block)"
|
|
827
|
+
size_wiring_line="$(grep -F 'bash "$size_budget_script" "$root" ||' "$validator")"
|
|
828
|
+
[ -n "$size_wiring_line" ] || fail "validator size-gate invocation line not found (wiring anchor moved?)"
|
|
829
|
+
case "$size_wiring_line" in
|
|
830
|
+
*"|| true"*) fail "validator demoted size gate back to || true advisory" ;;
|
|
831
|
+
esac
|
|
832
|
+
|
|
833
|
+
echo "test_check_ccl_size_budget: ok"
|