@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,494 @@
|
|
|
1
|
+
# RPC Framework Recipe (Concrete Defaults)
|
|
2
|
+
|
|
3
|
+
Concrete defaults for the kitex/hertz-style framework default suite. Patterns distilled from production deployments; localize names but preserve structure.
|
|
4
|
+
|
|
5
|
+
**Wire protocol**: gRPC over HTTP/2 only. Kitex's `DefaultClientOptions` / `DefaultServerOptions` set `transport.GRPC` + HTTP/2 metadata handlers. Thrift / TTHeader code paths exist in the framework for historical reasons but are **deprecated** — do not write new services against them, do not propagate Thrift patterns in this recipe.
|
|
6
|
+
|
|
7
|
+
## RPC base.Request — full schema
|
|
8
|
+
|
|
9
|
+
### Protobuf-backed base field declarations
|
|
10
|
+
|
|
11
|
+
This section describes the **in-message `base` carrier**, which is one of two carriers — whether a platform uses it at all is scenario-driven, not universal (see the Carrier decision below; transport metadata + interceptors is the industry-standard default for ordinary gRPC). On a platform that has standardized the in-message `base` carrier, the shared IDL defines the base metadata fields as fixed organization contract declarations. The field number is the owner-recorded pin from the cited shared IDL/IDLGen owner artifact or generated descriptor, not this prose line. The generated declarations below are shared-IDL owner output, not service-local proto templates (the field is required *for this carrier*, not a mandate that every platform adopt it):
|
|
12
|
+
|
|
13
|
+
```proto
|
|
14
|
+
message ExampleRequest {
|
|
15
|
+
base.Request base = <owner-pinned-base-tag>;
|
|
16
|
+
// Field number comes from the resolved shared IDL/IDLGen owner artifact; do not hand-pick it in a service-authored proto.
|
|
17
|
+
// business fields must not use the owner-pinned base tag for any other field.
|
|
18
|
+
// Do not reserve that tag unless item 6 records an interim migration; the tag is occupied by the required base field.
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
message ExampleResponse {
|
|
22
|
+
base.Response base = <owner-pinned-base-tag>;
|
|
23
|
+
// Field number comes from the resolved shared IDL/IDLGen owner artifact; do not hand-pick it in a service-authored proto.
|
|
24
|
+
// business fields must not use the owner-pinned base tag for any other field.
|
|
25
|
+
// Do not reserve that tag unless item 6 records an interim migration; the tag is occupied by the required base field.
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Carrier decision — in-message `base` vs transport metadata is scenario-driven, not mandatory
|
|
30
|
+
|
|
31
|
+
Whether internal RPC metadata rides an **in-message `base` field** or the **transport metadata / context channel** (gRPC HTTP/2 metadata + client/server interceptors, CloudWeGo metainfo, or an owner-recorded header set) is a platform/scenario decision — NOT a universal mandate on every gRPC method (unary or streaming):
|
|
32
|
+
|
|
33
|
+
- The **transport metadata channel is the industry-standard carrier** and a first-class default for ordinary unary *and* streaming RPC: it is how gRPC itself propagates auth/tracing/custom context across a distributed system, and how OpenTelemetry carries `traceparent`/`baggage`. Native gRPC/HTTP2 metadata makes an in-message envelope redundant for most services. A new product may propagate via the metadata channel and does **not** owe an "exception note" for declining the in-message `base` field.
|
|
34
|
+
- The **in-message `base` field is the Thrift/kitex-legacy carrier** (Thrift lacked a clean metadata channel, so the `Base` struct rode in the message body). It applies **only when the platform has standardized it**, or when a specific shared-IDL contract declares a `base` field. This recipe documents that carrier concretely; it does not require every platform to adopt it.
|
|
35
|
+
- **Mandatory regardless of carrier** is the observability + identity propagation contract (R6/R7): every hop propagates `log-id`, `lane`, caller identity, and `{idc, cluster}` tags on *some* channel, populated by middleware, asserted end-to-end. Choosing the metadata channel relaxes the message *shape*, never the *propagation obligation*.
|
|
36
|
+
- The **field-pinning gate below applies only when the in-message `base` field is actually used** (a platform/contract that has standardized it). A service propagating via the metadata channel uses the R7 owner-recorded header-set contract (enumerated, checked) instead of the protobuf field-number gate. The R7 contract lives in `../platform-service-connectivity/SKILL.md` (section R7); this recipe references but never restates it.
|
|
37
|
+
- **Security controls follow the identity carrier, not the `base` field name.** Boundary classification, external/gateway egress zeroing, opaque external `LogId` remap, and "caller-supplied identity is not authentication" apply to *whatever channel* carries identity/metadata — the in-message `base` fields OR the metadata/header channel. Moving off in-message `base` never moves off these controls.
|
|
38
|
+
- **Migrating an already-standardized in-message `base` contract off (or onto) the message is a wire-compatibility change** and goes through the Collision-migration record (item 6): existing binary consumers that read the `base` field are drained/retired first. Scenario-driven governs the *carrier choice for a new service/contract*, not silently dropping an established field from a live contract.
|
|
39
|
+
|
|
40
|
+
The ordered gate below governs the **in-message `base`-field carrier**. Apply it in this order when that carrier is in use:
|
|
41
|
+
|
|
42
|
+
1. **Trigger**: Apply this decision list in order.
|
|
43
|
+
1. Run the gate for method-message definition edits, top-level request/response promotion or reuse, `base` edits, owner-pinned field-number edits/reservations, or a change to the directly consumed shared IDL/IDLGen pin or resolved descriptor/generated-artifact provenance hash.
|
|
44
|
+
2. Run the gate when the service newly consumes a shared-IDL method message not previously consumed by that service. If the upstream message is unchanged and the diff does not touch definition, `base`, the owner-pinned field number, promotion/reuse, or the effective shared IDL/generated-artifact pin, a committed dependency manifest reference, repo-committed pin/lock/registry id, or linked owner-suite resolution for the consumed artifact is enough to discharge the trigger.
|
|
45
|
+
3. For transitive, indirect, or floating dependency changes, run the gate only when the resolved descriptor/generated-artifact hash, committed dependency manifest reference, repo-committed pin/lock/registry id, or owner-suite resolution for a consumed shared contract changes. If resolution can float and no before/after resolver evidence is available, artifact drift is blocking for definition, `base`, owner-pinned field-number, promotion/reuse, or effective pin/provenance changes. For unrelated service-logic diffs, `coverage deferred to owner suite` is mergeable only when it cites a tracked owner-action id with owner, deadline, and a committed CI/registry/owner-suite gate that machine-checks the owner-action id and deadline before merge; without that enforced owner action, the drift remains an open gap.
|
|
46
|
+
4. A newly consumed message reached through floating or transitive resolution is discharged by a committed dependency manifest reference, repo-committed pin/lock/registry id, or owner-suite resolution when the upstream message is unchanged and the diff does not touch definition, `base`, owner-pinned field number, promotion/reuse, or effective generated-artifact version/provenance. If none is reachable in diff-only review, `coverage deferred to owner suite` requires a tracked owner-action id with owner, deadline, and a committed CI/registry/owner-suite gate that machine-checks the owner-action id and deadline before merge; do not report pass.
|
|
47
|
+
5. For generated-artifact version/provenance changes, pass only when descriptor diff, registry metadata, or owner-suite proves existing consumed method messages did not change and any newly consumed method message satisfies item 4. Changelog prose alone is not proof.
|
|
48
|
+
6. Pure new consumption of an unchanged upstream method message with no definition, promotion/reuse, `base`, owner-pinned field-number, pin, manifest, or resolver change uses the gate step 4 Field assertion light path: cite the committed dependency manifest reference, repo-committed pin/lock/registry id, or owner-suite resolution for the consumed artifact plus generated descriptor evidence for the consumed message kind. It does not require a full owner-suite sweep in the service diff.
|
|
49
|
+
7. Pure handler/service-logic changes are not applicable only when they do not manually construct generated request/response DTOs and do not write, mutate, or overwrite `base` or equivalent identity fields outside the middleware-filled path. Manual construction or identity mutation routes to the implementation population check below — that check is carrier-neutral and runs even when this gate is not applicable.
|
|
50
|
+
8. Per-diff proof covers touched, promoted, reused, or newly consumed messages. Existing untouched internal protobuf method messages are covered by citing a resolvable shared IDL owner inventory artifact or owner-suite sweep from item 3; if no owner inventory exists, create or link the tracked owner action and keep inventory coverage open instead of re-proving the full inventory in the service diff.
|
|
51
|
+
2. **Surface**: On a platform that has standardized the in-message `base` carrier (per the Carrier decision above), embedded `base` applies to every organization shared-IDL protobuf method message on that platform — this item governs intra-platform consistency once that carrier is chosen, not whether a platform must adopt it. A method exposed through JSON transcoding or a gateway still keeps the in-message `base` contract resolved from the shared IDL/IDLGen owner artifact unless a platform owner record affirmatively classifies the method as JSON-only. JSON-only suppression is reachable only through a committed platform owner gate that names the exact method messages and proves no binary consumer can silently consume a no-base message. The evidence must include: owner record locator; committed shared-IDL consumer registry path; current consumer set; exact registry/descriptor scan command recorded in that owner record; pasted run output; enforced CI/registry/import gate job or config path that blocks unregistered binary consumers; and enforced IDL/IDLGen generation-boundary gate job or config path that either preserves the owner-artifact `base` declaration when binary bindings are generated or fails generation for a JSON-only message. The cited gate must expose a stable command name, input registry id/path, expected pass output, and expected blocking output; freeform command names or undocumented local scripts are candidate evidence only. Routing, gateway, HTTP-transcoding config, import-site checks, or point-in-time consumer snapshots alone cannot satisfy the no-future-binary-consumer condition. Absent the owner gate and exact evidence above, JSON-only suppression is unavailable and, on a platform that has standardized the in-message `base` carrier, the in-message platform `base` field remains required for that platform's binary-consumed messages (intra-platform consistency, not a mandate that every gRPC platform adopt in-message `base` — see the Carrier decision above). A transcoded/gateway HTTP surface must cite `protobuf-http-contract-signals.md` evidence before deciding whether that HTTP face is JSON-wire or binary-protobuf. organization-internal protobuf RPC surfaces not generated from the platform shared IDL are open onboarding gaps until they onboard to the shared IDL or carry a platform owner record/disposition. JSON-wire HTTP surfaces follow the recorded response-envelope/API contract plus metadata/header propagation. Missing HTTP classification evidence is an open gap. Externally reachable owner exceptions still require egress zeroing and opaque external `LogId` remap.
|
|
52
|
+
3. **Inventory locator**: Base/tag/promotion/pin-affecting diffs must cite a shared IDL/IDLGen owner artifact outside the business service repo: repo/path, document URL, registry entry, or owner-suite id. The artifact must name the exact generated-artifact version and exact method message types. If the locator is not resolvable from the service repo, the bounded fallback is: link a tracked owner-unblock issue with owner; cite a committed CI, registry, or owner-suite gate that machine-checks the unblock issue id, deadline, and no-reuse constraint; attach local no-owner-pinned-tag-conflict evidence for the touched message; and treat only base/tag/promotion/pin-affecting changes as blocked. An expired, repeatedly reused, deadline-unenforced, or gate-unenforced owner-unblock issue is an open gap. Unrelated handler/service-logic changes remain not applicable.
|
|
53
|
+
4. **Field assertion**: Evidence must verify the touched or newly consumed message kind: edited or newly consumed request messages carry the shared platform `base.Request base` declaration, edited or newly consumed response messages carry the shared platform `base.Response base` declaration, and the field number matches the pinned number resolved from the cited shared IDL/IDLGen owner artifact. No business field may use the owner-pinned base field number except under a gate step 6 owner-recorded interim migration. In-diff descriptors pass only when their upstream shared IDL/IDLGen artifact provenance or hash for the pinned version actually consumed, not just a version label, is confirmed by repo-committed pin/lock/registry id, owner-suite, or registry for the exact message types. Service-local snippets, copied descriptors, uncited provenance, stale versions, wrong versions, or author-only version assertions are open gaps. Business-field-only edits may use the gate step 4 Field assertion light path only with a repo-committed pin/lock/registry id or owner-suite resolution for the consumed shared IDL artifact plus generated descriptor proving unchanged shared-platform `base` for the touched message kind and no field/reservation at the owner-pinned base field number outside a gate step 6 migration. Pure new consumption of an unchanged, already-pinned upstream method message may use the gate step 4 Field assertion light path only with repo-committed pin/lock/registry id or owner-suite resolution proving the artifact actually consumed by the service, plus generated descriptor evidence proving that consumed artifact declares the required shared-platform `base` field at the owner-pinned field number and no business field/reservation at that field number outside a gate step 6 migration; otherwise use the full path or keep stale/wrong artifact as an open gap. When the registry/locator is not resolvable from the service repo, the gate step 3 Inventory locator owner-unblock fallback satisfies this light path only for business-field-only edits or pure new consumption that attach both pinned-version artifact provenance evidence and machine-checked generated descriptor evidence proving the applicable base/tag assertion, do not touch `base`, the owner-pinned field number, promotion/reuse, or the effective generated-artifact version/provenance, and remain within the owner-unblock deadline; if upstream provenance is unverifiable or the deadline has passed, the fallback is an open gap, not pass.
|
|
54
|
+
- Concrete check: attach schema-level descriptor evidence for the exact touched message kind. Passing evidence may be an executed FileDescriptorSet/FileDescriptorProto dump, a language-native descriptor API dump, a committed generated-descriptor artifact path plus artifact provenance, or a linked passing owner-suite/registry run for the exact shared IDL/generated-artifact version and exact message types. The evidence must show all of: field name `base`; field number equals the owner-pinned number resolved from the cited shared IDL/IDLGen artifact; request field message type resolves by fully-qualified name and package to the shared platform `base.Request`; response field message type resolves by fully-qualified name and package to the shared platform `base.Response`; and no other field or reservation uses that owner-pinned field number outside a gate step 6 migration. `.proto` source grep, raw text grep, and message-block snippets are candidate triage only; they cannot close the gate because they do not prove descriptor resolution or tag uniqueness. For generated-only consumers, use a language-native schema descriptor dump, such as Go `protoreflect`/`FileDescriptor` output or Python `_pb2.DESCRIPTOR`/`FileDescriptorProto` output, that exposes field name, number, fully-qualified message type, and package. Text grep over generated compiled artifacts such as `.pb.go`, `.pb.py`, or encoded descriptors is inconclusive and cannot pass. When descriptor tooling, committed generated descriptor artifacts, and owner-suite/registry access are all unreachable in diff-only review, record `coverage deferred to owner suite` with the exact owner action/link; do not report pass and do not turn unrelated service-logic diffs into automatic blockers unless this diff changed `base`, the owner-pinned field number, promotion/reuse, or the effective generated-artifact version/provenance.
|
|
55
|
+
5. **Metadata-channel carrier (first-class, not an exception)**: Any method may carry its metadata on the transport metadata/header channel instead of an in-message `base` field — this is the industry-standard default (per the Carrier decision) and needs no waiver. It is the norm for WKT, empty, and streaming messages that cannot embed `base`, and a valid choice for ordinary unary RPC on a platform that has not standardized in-message `base`. When this carrier is used: apply the R7 owner-recorded header-set contract (enumerated header names, checked against actual propagated/exposed headers) rather than the field-number gate; the observability contract (item above) and all boundary/egress/authz security controls still apply to that channel. The no-waiver carrier freedom above is scoped to **platforms that have NOT standardized in-message `base`, and new / not-yet-binary-published contracts**. It does **not** apply inside a base-standardized platform, where intra-platform consistency (item 2, Surface) exists specifically to protect binary consumers. On a platform that HAS standardized the in-message `base` carrier:
|
|
56
|
+
|
|
57
|
+
- A specific method (new or existing) goes metadata-only ONLY through the same owner-recorded exception that item 2 requires — proving no binary consumer silently expects `base` and the generation boundary preserves-or-blocks correctly — or through a platform-level item-6 migration off the standard. A bare descriptor/carrier record is not sufficient there; without the item-2 owner gate it is an open contract gap.
|
|
58
|
+
- Switching an **already-published or binary-consumed** method OFF its in-message `base` field is a wire-compatibility change, not a free carrier choice: it requires the item-6 collision-migration record (consumer-registry scan, old/new wire-compatibility tests, producer/consumer drain of readers still expecting `base`) before the field is removed. A descriptor/carrier record alone never authorizes dropping an established `base` field.
|
|
59
|
+
6. **Collision migration**: Business use of the owner-pinned base field number, service-local reservation of that number, or interim no-base state requires a platform-owner migration record with deadline, interim state, old/new wire compatibility tests, and producer drain/retirement precondition. Missing migration record or dual tag meaning is an open contract gap.
|
|
60
|
+
7. **Message shape**: Top-level method request/response types must not be reused as nested business payloads or as both request and response. Split distinct request/response and nested business messages. Promoting an existing message to top-level request/response reruns this gate; skipping it is an open contract gap.
|
|
61
|
+
|
|
62
|
+
For non-protobuf RPC variants and metadata-only transports, use the platform-pinned base struct, field id, or metadata key for that transport instead of applying protobuf field numbers. Field name, type, and field number are not local service choices. Business service repos and language-specific generated packages must not rename, renumber, retype, or replace these fields; regenerate from the shared IDL/IDLGen boundary instead. The protobuf `base` field name, type, and owner-pinned field number are fixed contract invariants; do not change them locally or treat regenerated artifacts as a migration path for renaming or renumbering the pinned `base` fields. A new non-protobuf or metadata-only transport must have a concrete platform-owner record for its pinned base struct, field id, or metadata key before service implementation; without that record, contract coverage is open and cannot be reported as passing. `../testing-strategy/SKILL.md` owns the contract-test obligation for asserting the generated declarations from this shared boundary.
|
|
63
|
+
|
|
64
|
+
### Metadata-carried base struct
|
|
65
|
+
|
|
66
|
+
The struct below describes the metadata set that must propagate on every hop (the observability/identity contract). It is the shape of the in-message `base` field **when the in-message carrier is used**; when a service propagates via the transport metadata channel instead (per the Carrier decision), the same fields ride gRPC/HTTP2 metadata headers under the R7 owner-recorded header-set contract. The field set and its security handling are identical; only the carrier differs.
|
|
67
|
+
|
|
68
|
+
The canonical RPC base struct carries:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
base.Request {
|
|
72
|
+
UnixTime int64 # ms since epoch (caller's clock)
|
|
73
|
+
LogId string # platform correlation id
|
|
74
|
+
Tags map[string]string { # platform identity
|
|
75
|
+
"idc": <region or DC>
|
|
76
|
+
"cluster": <k8s cluster name>
|
|
77
|
+
"lane": <lane/env label>
|
|
78
|
+
}
|
|
79
|
+
From Request_InstanceInfo { # caller identity, populated by client middleware
|
|
80
|
+
ServiceName: <caller psm>
|
|
81
|
+
PodName: <caller pod name>
|
|
82
|
+
IpAddr: <caller pod IP>
|
|
83
|
+
}
|
|
84
|
+
To Request_InstanceInfo { # resolved callee identity (post-resolver)
|
|
85
|
+
ServiceName: <callee psm>
|
|
86
|
+
PodName: <callee pod name> # from registry instance tag
|
|
87
|
+
IpAddr: <callee instance addr> # from resolver
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`base.Response` mirrors the metadata fields needed for internal response-side propagation (`LogId`, `Caller`, `IDC`, `Cluster`, `Tags`, `UnixTime`) and adds result metadata (`Code`, `Message`) using the platform error enum below. Response business payload remains in the response message's business fields, not inside `base.Response`. Boundary exposure must be classified from the service deployment/exposure record plus positive network/gateway/policy evidence before release; every recorded classification must cite the dated record/version of each governing deployment, mesh, gateway, and policy source, and a missing or unresolvable baseline version forces reclassification. For greenfield services before first deploy, target deployment manifests, mesh-injection policy, IaC, gateway policy, or release topology records may serve as planned-topology evidence, but this is a deferral and must be re-verified against the actual deployment/exposure record before first release or any external exposure. Planned-only classification is not a release pass. If an external or gateway path exists, remains unknown, or internal-only classification is unverified, use the external-safe middleware path and keep unresolved classification as an open release gap. External-safe implementation evidence must cite a concrete platform middleware package, generated middleware binding, gateway policy, or platform owner record; citing this prose recipe alone is not implementation evidence. At external or gateway ingress, middleware must discard caller-supplied `base.Request` identity fields and mirrored metadata/header identity fields, reset or regenerate caller-supplied `LogId`, and drop or overwrite caller-supplied `Tags` unless positive runtime authenticated-caller evidence exists and the tag key/value is in the owner-approved allowlist. Tags/header allowlists must cite a concrete platform owner-approved allowlist record, gateway policy, or owner-suite id; an uncited or service-local allowlist is an open gap. On any surface, base/header identity is not caller authentication: using caller-supplied `From`, `Caller`, `LogId`, `Tags`, or mirrored identity headers for authz, caller attribution, or tag routing requires positive runtime authenticated-caller evidence such as mTLS identity or signed platform identity; internal-only network evidence or a static owner record alone is not enough. External/gateway ingress must reset or regenerate caller-supplied `LogId`; internal-only propagation may keep correlation-only log-id only when the deployment/exposure record and runtime mesh/platform identity prove an internal authenticated caller path, and that log-id is not used for authz, caller attribution, or tag routing. At external or gateway egress, middleware must default to zeroing all internal `base.Response` metadata fields and removing all base identity/metadata fields from mirrored metadata/header channels or request-base echo. The only allowed external values are owner-approved opaque external `LogId` values that are unique, non-reused, collision-checked independent random tokens stored in the owner remap table and resolvable external-to-internal only through that table, never the internal `LogId`, a deterministic derivation of it, or a token recomputable from service-local keys; a token previously issued for one internal `LogId` must be retained as a tombstone or exclusion entry and must not be recycled to another internal `LogId` after cleanup or expiry. Metadata-only result channels may carry mapped public `Code` and only fixed public `Message` strings keyed by that mapped `Code` when a concrete owner-approved allowlist record, gateway policy, or owner-suite locator enumerates those strings; any uncited, service-local, or non-allowlisted message string is an external leak, not a mapped message. `base.Response` is an internal-mesh contract, not an external API payload. When a service carries this identity/result metadata on the transport metadata/header channel instead of an in-message `base.Response` field (per the Carrier decision), every ingress-discard, egress-zeroing, opaque-`LogId`-remap, public-`Code`/`Message` allowlist, and caller-identity-is-not-authentication control above applies unchanged to that channel — the carrier changes, the controls do not.
|
|
93
|
+
|
|
94
|
+
`From` and `To` are richer than a typical "caller string" — both ends include service identity + pod name + IP. This makes trace analysis simpler:
|
|
95
|
+
|
|
96
|
+
- Filter logs by `From.PodName` to find every outbound call from one specific replica.
|
|
97
|
+
- Filter traces by `To.IpAddr` to find calls that landed on a specific callee pod.
|
|
98
|
+
- Build per-pod call graphs without joining external pod metadata.
|
|
99
|
+
|
|
100
|
+
Client middleware populates the struct on every outbound RPC. On a platform that uses the in-message `base` carrier, the generated request/response `base` field is the contract source; middleware may mirror log-id, lane, and related context into HTTP/2 metadata for propagation compatibility, and handlers and contract tests assert the generated message field and end-to-end propagation. When a service propagates via the transport metadata channel instead (per the Carrier decision), the metadata headers *are* the contract source: middleware populates them, and contract tests assert the R7 owner-recorded header set and end-to-end propagation rather than an in-message `base` field. Either way, service code never touches the identity fields directly.
|
|
101
|
+
|
|
102
|
+
### Boundary-exposure classification — canonical trigger set, rerun, and local-relaxation bar
|
|
103
|
+
|
|
104
|
+
Classification evidence, dispositions, and the executable probes live in the `Metadata-carried base struct` section (the `base.Response` paragraph) and the `Verification` section (2a/3a–3d) of this file; this subsection lists the canonical boundary trigger set, rerun conditions, and the local-relaxation bar so stack dev skills, testing verdicts, and review all classify on the same triggers.
|
|
105
|
+
|
|
106
|
+
Triggers — run boundary-exposure classification before release when any fires:
|
|
107
|
+
|
|
108
|
+
- ingress/egress reachability change;
|
|
109
|
+
- deployment/exposure/boundary metadata or external/gateway classification change that changes or invalidates classification;
|
|
110
|
+
- log-id response-header value path change (how the log-id value is produced or remapped, independent of exposure);
|
|
111
|
+
- CORS or log-id response-header exposure change;
|
|
112
|
+
- `base.Response` metadata-field population change on a boundary-reachable, exposure-changed, or unknown surface without current internal-only evidence;
|
|
113
|
+
- response header mirroring/exposure without current or planned internal-only evidence;
|
|
114
|
+
- egress mapping without current or planned internal-only evidence;
|
|
115
|
+
- first deployment/exposure records after planned topology;
|
|
116
|
+
- caller-supplied base/header/tag identity used for authz, caller attribution, or tag routing without positive authenticated-caller evidence.
|
|
117
|
+
|
|
118
|
+
Rerun classification on exposure-metadata changes, first release after planned topology, CORS/log-id exposure changes, egress behavior changes, or changed platform exposure records.
|
|
119
|
+
|
|
120
|
+
- Freshness bar: an unchanged internal surface with an existing classification discharges the trigger by freshness citation only, and that citation must be dated **at or after the change under review** for every governing deployment, mesh, gateway, and policy record. An older dated baseline is stale, not fresh; absent verifiable freshness, rerun classification or default to the external-safe path.
|
|
121
|
+
|
|
122
|
+
Changes that write, mutate, mirror, expose, or remap `base`, `base.Response`, `LogId`, caller, `From`, `To`, `Tags`, or equivalent identity fields are not freshness-only changes.
|
|
123
|
+
|
|
124
|
+
Do not locally relax identity-discard, metadata-zeroing, public-result mapping, authenticated-caller-evidence, or allowlist-owner-record rules.
|
|
125
|
+
|
|
126
|
+
External/vendor gRPC dependencies follow external-contract review with a recorded classification and must not be claimed as organization shared-IDL compliant.
|
|
127
|
+
|
|
128
|
+
### Implementation population check (carrier-neutral)
|
|
129
|
+
|
|
130
|
+
- Handler, route, view, adapter, or DTO diffs that manually construct generated request/response DTOs outside the middleware-filled path, or write/mutate/overwrite `base`, `LogId`, caller, `From`, `To`, `Tags`, or equivalent identity fields on generated DTOs, must provide executed-test or runtime evidence tied to the touched path proving the chosen contract source (the in-message `base` field, or — on a metadata-carrier service — the R7 owner-recorded header set) is populated from platform context and caller-supplied identity is not propagated without positive authenticated-caller evidence; static population code or a generic middleware citation is not enough. This evidence obligation is carrier-neutral: a metadata-carrier service is not exempt — it proves the header set instead of the `base` field. Missing evidence is an open implementation gap. Do not hand-create alternative metadata structs or schemas, mutate middleware-owned identity fields in app code, or skip them in manual generated DTO construction.
|
|
131
|
+
|
|
132
|
+
## Dual-channel ctx propagation
|
|
133
|
+
|
|
134
|
+
The example below shows `log-id` and `lane` only, as the minimal **compatibility mirror** — it is NOT the full metadata-carrier contract. When the transport metadata channel is the *contract source* (per the Carrier decision), the owner-recorded R7 header set must cover **the full metadata set the in-message `base` carrier would have carried** — every `base.Request` field as enumerated in the base-struct schema below (`LogId`, `lane`, caller identity, the `{idc, cluster}` tags, `UnixTime`, and the `From`/`To` peer identity) and, response-side, every `base.Response` field (the mirrored request metadata plus result `Code`/`Message`) — not just log-id/lane, with contract tests asserting each header propagates and (at a boundary) is exposed/zeroed correctly. Any intentional omission of a field the base carrier would have carried needs an owner exception, exactly as dropping a `base` sub-field would. Omitting caller identity, tags, timing, resolved-peer, or result metadata because the example only shows log-id/lane is a propagation bug.
|
|
135
|
+
|
|
136
|
+
For frameworks that support a parallel metadata transport (CloudWeGo metainfo alongside standard gRPC HTTP/2 metadata), client middleware writes log-id and lane into BOTH:
|
|
137
|
+
|
|
138
|
+
```go
|
|
139
|
+
// Channel 1: CloudWeGo metainfo (preferred)
|
|
140
|
+
ctx = metainfo.WithPersistentValue(ctx, "<log-id-key>", logId)
|
|
141
|
+
ctx = metainfo.WithPersistentValue(ctx, "<lane-key>", lane)
|
|
142
|
+
|
|
143
|
+
// Channel 2: standard gRPC outgoing metadata (compatibility)
|
|
144
|
+
ctx = metadata.AppendToOutgoingContext(ctx, "<log-id-key>", logId)
|
|
145
|
+
ctx = metadata.AppendToOutgoingContext(ctx, "<lane-key>", lane)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Server middleware tries both inbound channels, falling back as needed:
|
|
149
|
+
|
|
150
|
+
```go
|
|
151
|
+
1. Try incoming gRPC metadata (md.Get("<log-id-key>"))
|
|
152
|
+
2. If empty, try metainfo.GetPersistentValue
|
|
153
|
+
3. If still empty, generate a new log-id at server side
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Why dual-channel: services may have mixed framework versions during rollout. A new client writing to channel A and an old server reading only channel B silently drops log-id. Writing to both bridges the gap until everyone is on one version.
|
|
157
|
+
|
|
158
|
+
## Standard error code enum
|
|
159
|
+
|
|
160
|
+
Match HTTP semantics where possible; pick distinct codes for framework-internal errors:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Code_Default = 0 # unset / default
|
|
164
|
+
Code_OK = 200 # success
|
|
165
|
+
Code_InvalidParams = 400 # validation
|
|
166
|
+
Code_Unauthorized = 401 # auth missing/invalid
|
|
167
|
+
Code_Forbidden = 403 # authz denied (incl. mesh ACL)
|
|
168
|
+
Code_NotFound = 404
|
|
169
|
+
Code_ServerError = 500 # generic server failure
|
|
170
|
+
Code_ServerPanic = 503 # framework caught a panic
|
|
171
|
+
Code_Timeout = 504 # RPC timeout (transport or business)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`503` is HTTP "Service Unavailable" but here serves "ServerPanic" — close enough semantically; pick a code and stick to it across all languages.
|
|
175
|
+
|
|
176
|
+
Code enum is a Go constants (or language-equivalent enum). The same numeric value across languages enables cross-service error filtering by code in metrics and logs.
|
|
177
|
+
|
|
178
|
+
## Framework error mapping (server side)
|
|
179
|
+
|
|
180
|
+
Map the underlying framework error types to your code enum:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
kerrors.ErrBiz → Code_ServerError (500) # business error, unwrap
|
|
184
|
+
kerrors.ErrPanic → Code_ServerPanic (503) # include stack in message
|
|
185
|
+
kerrors.ErrACL → Code_Forbidden (403)
|
|
186
|
+
kerrors.ErrRPCTimeout → Code_Timeout (504)
|
|
187
|
+
kerrors.ErrTimeoutByBusiness → Code_Timeout (504)
|
|
188
|
+
<anything else> → Code_ServerError (500)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The error handler wraps the result as a `*Error{code, msg}` and serializes it into the transport error slot. **New services use the canonical carrier: `google.rpc.Status` with `details` (transported via the `grpc-status-details-bin` trailer or the framework's native details mechanism) — see `go-microservice-architecture/references/error-contract-architecture.md` "Cross-RPC Envelope".**
|
|
192
|
+
|
|
193
|
+
> **Legacy carrier — do not adopt for new work.** Older framework builds pack the wrapper as JSON into the freeform `status.Message()` string (`{"code": N, "message": "..."}`) and re-parse it on the client. That string is size-limited, not a structured channel, loses typed retry/security semantics, and risks leaking server-rendered text — the anti-pattern the canonical error-contract rule forbids. It reflects a pre-migration framework reality (the same JSON-in-status-message drift that shared-IDL error-contract alignment is migrating off); keep it here only to explain existing wire traffic, and migrate to `grpc-status-details-bin` details.
|
|
194
|
+
|
|
195
|
+
## Framework error mapping (client side)
|
|
196
|
+
|
|
197
|
+
Client-side handler converts the wire error back into a typed error. **Canonical**: parse `google.rpc.Status` `details` from the `grpc-status-details-bin` trailer (or framework details mechanism), reconstruct the typed error, and if the payload is not the canonical shape wrap it as a transport/unknown error without dropping the original cause.
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
# Legacy fallback for the JSON-in-status-message carrier above — do not build new services on this:
|
|
201
|
+
1. If wire status carries a structured error (gRPC status.Error):
|
|
202
|
+
a. Try parsing status.Message() as `{"code": N, "message": M}` JSON.
|
|
203
|
+
b. If parses, return that structured error.
|
|
204
|
+
c. Else wrap as Code_ServerError with status.Message() as msg.
|
|
205
|
+
2. If local error (transport failure, etc.):
|
|
206
|
+
wrap as Code = -1, message = err.Error()
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Result: caller sees a uniform `*Error` regardless of where the failure occurred (peer panic vs. local network blip).
|
|
210
|
+
|
|
211
|
+
## Default server middleware chain (Kitex)
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
server.WithErrorHandler(ServerErrorHandler) # error type-mapping
|
|
215
|
+
server.WithMiddleware(NewMetricsMW(isServer=true)) # qps + latency + err + panic counters
|
|
216
|
+
server.WithMiddleware(NewCtxInjectMW(isServer=true)) # extract log-id, lane from metadata
|
|
217
|
+
server.WithMiddleware(NewRequestInfoLogMW(true)) # request/response logging (env-gated)
|
|
218
|
+
# plus:
|
|
219
|
+
server.WithSuite(tracing.NewServerSuite()) # OTel server tracing (only in cloud)
|
|
220
|
+
server.WithMetaHandler(transmeta.ServerHTTP2Handler) # transport meta handling
|
|
221
|
+
server.WithRegistry(<nacos registry>) # only if in-cloud or LOCAL_HOST set
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Default client middleware chain (Kitex)
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
client.WithClientBasicInfo(...) # caller identity
|
|
228
|
+
client.WithTransportProtocol(transport.GRPC) # default gRPC
|
|
229
|
+
client.WithMetaHandler(transmeta.ClientHTTP2Handler)
|
|
230
|
+
client.WithResolver(<nacos resolver, or FQDN fallback, or proxy resolver>)
|
|
231
|
+
client.WithSuite(tracing.NewClientSuite()) # OTel client tracing
|
|
232
|
+
|
|
233
|
+
client.WithErrorHandler(ClientErrorHandler)
|
|
234
|
+
client.WithMiddleware(NewMetricsMW(isServer=false))
|
|
235
|
+
client.WithMiddleware(NewCtxInjectMW(isServer=false)) # generate/propagate log-id
|
|
236
|
+
client.WithMiddleware(NewClientBaseInjectMW()) # request-metadata inject: on an in-message-base platform populates base.Request{From,To,Tags,LogId,UnixTime}; on a metadata-carrier service the SAME middleware populates the R7 owner-recorded metadata/header set with the same full field set instead
|
|
237
|
+
client.WithMiddleware(NewRequestInfoLogMW(false))
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
The `NewClientBaseInjectMW` step above is the concrete injector for the **in-message `base` carrier**. On a metadata-carrier service (the default for ordinary gRPC — see the Carrier decision), substitute a request-metadata injector that writes the same full field set into the owner-recorded metadata/header channel, and have the server middleware extract from that channel; the chain position and obligation are identical, only the carrier target differs.
|
|
241
|
+
|
|
242
|
+
## Default server middleware chain (Hertz / HTTP)
|
|
243
|
+
|
|
244
|
+
Order differs from RPC because Hertz uses linear middleware (not endpoint wrapping):
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
1. ctx_inject # read <log-id-header>, generate if missing, write to response header, inject into ctx
|
|
248
|
+
2. recovery # panic catch (wraps subsequent middleware + handler)
|
|
249
|
+
3. metrics # timer start, c.Next, then record qps + latency + error
|
|
250
|
+
4. tenant_info / business middleware (optional)
|
|
251
|
+
5. tracing middleware (if cloud)
|
|
252
|
+
6. handler
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Difference from RPC order: HTTP places recovery BEFORE metrics, since recovery wraps `c.Next` and catches panics that would otherwise crash the metric recording. The recovery handler also emits a uniform 500 response with the standard error envelope `{"code": Code_ServerPanic, "message": "server panic: ..."}`.
|
|
256
|
+
|
|
257
|
+
## Metric label discipline (RPC pair)
|
|
258
|
+
|
|
259
|
+
For every RPC, emit metrics with the baseline labels plus pair-specific labels:
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
baseline: psm, lane, idc, cluster, pod_name, pod_ip, node_ip
|
|
263
|
+
RPC-pair: caller (name, cluster, env, method)
|
|
264
|
+
callee (name, cluster, env, method)
|
|
265
|
+
on error: err_code (one of the enum values)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The full label set gives operators per-method per-pair per-env breakdowns. Cardinality is bounded by `services × methods × envs`, typically thousands — well within metric-store capacity.
|
|
269
|
+
|
|
270
|
+
Standard metric names:
|
|
271
|
+
- `<framework>_server_method_qps` — request count by method.
|
|
272
|
+
- `<framework>_server_method_latency_seconds` — histogram with platform-default buckets (see below).
|
|
273
|
+
- `<framework>_server_method_success_rate` — success counter.
|
|
274
|
+
- `<framework>_server_method_err_qps` — error counter (with `err_code` label).
|
|
275
|
+
- `<framework>_client_invoke_qps` / `latency_seconds` / `success_rate` / `err_qps` — same shape, caller side.
|
|
276
|
+
- `service_panic` — panic counter (per api path/method).
|
|
277
|
+
- `<framework>_server_api_qps` / `latency_seconds` / `err` / `success_rate` — HTTP-side equivalents.
|
|
278
|
+
|
|
279
|
+
## Latency histogram buckets
|
|
280
|
+
|
|
281
|
+
Platform-wide default in seconds:
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
[0, 0.05, 0.1, 0.2, 0.3, 0.5, 0.7, 1, 1.5, 2, 3, 5, 10, 15, 20, 30, 60, 120]
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
18 buckets, dense in 0-1s range (where most user-facing API latencies live), sparse from 1s-2min for long-tail and batch operations. Per-method override allowed but rare.
|
|
288
|
+
|
|
289
|
+
## Resolver strategies (when registry is the source of truth)
|
|
290
|
+
|
|
291
|
+
Three resolver implementations co-exist; clients pick based on need:
|
|
292
|
+
|
|
293
|
+
### A) Direct registry resolver
|
|
294
|
+
Standard: query registry for callee instances filtered by lane tag. Default for in-cluster RPC.
|
|
295
|
+
|
|
296
|
+
### B) FQDN fallback resolver
|
|
297
|
+
Wraps the registry resolver; if the registry returns no instances, falls back to k8s DNS FQDN:
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
callee psm "<owner>.<class>.<env>"
|
|
301
|
+
→ replace dots/underscores with hyphens → "<owner>-<class>-<env>"
|
|
302
|
+
→ FQDN: "<owner>-<class>-<env>.<owner>.svc.cluster.local:<port>"
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Use when the platform is migrating from k8s-DNS to registry; gives a soft fallback during migration.
|
|
306
|
+
|
|
307
|
+
**Lane-safety constraint**: the FQDN fallback bypasses registry lane-tag filtering — `<callee>.svc.cluster.local` resolves to ALL backend pods regardless of lane. If a caller in `lane=canary` falls through to FQDN because the registry temporarily returns no canary instances, the request lands on default-lane pods, defeating canary isolation. Mitigations (pick at least one):
|
|
308
|
+
- **Fail closed for non-default lanes**: only the default lane uses FQDN fallback; lanes with non-empty headers get an explicit `no_instance` error.
|
|
309
|
+
- **FQDN fallback only through mesh**: the request still carries the lane header, and the mesh VirtualService routes based on header — so even a "raw" FQDN call lands on the right subset via Envoy. Requires the mesh + lane VS to be the unconditional layer, not opt-in.
|
|
310
|
+
- **Disable FQDN fallback after migration completes**: useful as a transitional aid; harmful as a steady-state behavior.
|
|
311
|
+
|
|
312
|
+
### C) Proxy resolver
|
|
313
|
+
Returns instances of a dedicated proxy service (e.g. `<infra>.proxy.rpc`) instead of the real callee. The proxy then forwards based on the request's original target.
|
|
314
|
+
|
|
315
|
+
Use when:
|
|
316
|
+
- Cross-cluster traffic needs central observability.
|
|
317
|
+
- Specific calls need traffic shaping outside mesh.
|
|
318
|
+
- Migration scenarios where you want to inject behavior in front of a callee without modifying its clients.
|
|
319
|
+
|
|
320
|
+
Set per-client at registration time; not switched per-call.
|
|
321
|
+
|
|
322
|
+
## CORS defaults (HTTP gateway)
|
|
323
|
+
|
|
324
|
+
For services exposed to browsers, the framework provides default CORS middleware. **Default must NOT combine `AllowAllOrigins: true` with `AllowCredentials: true`** — browsers reject `Access-Control-Allow-Origin: *` when credentials are sent, AND frameworks that reflect the request Origin grant credentialed cross-origin access to arbitrary sites. The mature default:
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
AllowOrigins: [<explicit allowlist>] # never wildcard with credentials
|
|
328
|
+
AllowOriginFunc: <validator function> # optional, per-domain logic
|
|
329
|
+
AllowCredentials: <true only when allowlist is non-wildcard>
|
|
330
|
+
ExposeHeaders: [<log-id-header>, Content-Encoding, Date, Connection]
|
|
331
|
+
MaxAge: 12 hours
|
|
332
|
+
AllowWildcard: <only when AllowCredentials=false>
|
|
333
|
+
AllowBrowserExtensions: true
|
|
334
|
+
AllowWebSockets: true
|
|
335
|
+
AllowFiles: false
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Two acceptable defaults:
|
|
339
|
+
- **Internal-only service** (no public browser exposure): `AllowOrigins: []` (CORS disabled or restricted to specific internal hostnames).
|
|
340
|
+
- **Public service**: explicit allowlist of allowed origins; `AllowCredentials` only if the API genuinely needs cookies/credentials.
|
|
341
|
+
|
|
342
|
+
**Critical**: CORS log-id exposure is part of the boundary-exposure gate. `ExposeHeaders` lists the log-id header name that browser code may read. Any browser-exposed log-id must be an owner-approved opaque remapped id, never the internal `LogId`; browser clients are not authenticated mesh peers even on internal-only browser surfaces. Browser/CORS-exposed responses must not expose any base identity fields, including allowlisted Tags; the Tags allowlist applies only to proven internal authenticated-caller propagation, not browser egress. Without an exposed support id, browser cross-origin code cannot report failures back to support; without the remap, the response leaks internal trace identity.
|
|
343
|
+
|
|
344
|
+
The framework MAY ship an "open" preset for local dev (`AllowAllOrigins: true, AllowCredentials: false`) but production deployment MUST flip to the explicit allowlist. A linter or admission gate that rejects production manifests with `AllowAllOrigins: true && AllowCredentials: true` is recommended.
|
|
345
|
+
|
|
346
|
+
**`AllowOriginFunc` is equally dangerous.** A permissive validator (e.g. one that does substring match on a domain or trusts any `*.example.com`) combined with `AllowCredentials: true` lets an attacker-controlled subdomain or look-alike host issue credentialed cross-origin requests. Production admission must:
|
|
347
|
+
- Reject `AllowOriginFunc` that doesn't exact-match against a reviewed allowlist.
|
|
348
|
+
- Reject any combination of `AllowCredentials: true` with `AllowOriginFunc` whose source isn't pinned in code review.
|
|
349
|
+
- Require security review for any change to the CORS validator function on production-public services.
|
|
350
|
+
|
|
351
|
+
Treat the effective origin policy — not just the `AllowAllOrigins` flag — as the security boundary.
|
|
352
|
+
|
|
353
|
+
## Local dev support
|
|
354
|
+
|
|
355
|
+
The framework default ON-CLOUD path:
|
|
356
|
+
- Connects to registry, registers self.
|
|
357
|
+
- Enables OTel tracing with collector endpoint.
|
|
358
|
+
- Reports metrics via collector OTLP exporter.
|
|
359
|
+
|
|
360
|
+
The framework default OFF-CLOUD path:
|
|
361
|
+
- Skips registry registration unless `LOCAL_HOST` env var is set (lets a dev choose to register from laptop for cross-machine testing).
|
|
362
|
+
- Detects "inner IP" via a configured CIDR (typically a /24 subnet on the dev network) for service-to-service addressing.
|
|
363
|
+
- Disables OTel tracing (avoid noise + no collector to reach).
|
|
364
|
+
- Logs still emit to stdout / file; reading via `tail` works.
|
|
365
|
+
|
|
366
|
+
The on-cloud / off-cloud branch is controlled by a single `env.InCloud()` predicate. Local dev "just works" by default; opting into cross-machine local testing requires one env var.
|
|
367
|
+
|
|
368
|
+
## Server boot sequence
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
1. Initialize logger (zap with platform field schema).
|
|
372
|
+
2. Initialize metrics client (OTel SDK + OTLP exporter, only if in-cloud).
|
|
373
|
+
3. Read env vars: SERVICE_NAME, SERVICE_PORT, LANE, IDC, CLUSTER, POD_NAME, POD_IP.
|
|
374
|
+
4. Construct server with DefaultServerOptions (which appends all the middleware above).
|
|
375
|
+
5. Register routes (handler functions).
|
|
376
|
+
6. Spin (start serving).
|
|
377
|
+
7. On termination signal:
|
|
378
|
+
a. Begin graceful shutdown (stop accepting new requests).
|
|
379
|
+
b. Drain in-flight requests (with grace period).
|
|
380
|
+
c. Close registered closers (TracerProvider, collector exporter, etc.).
|
|
381
|
+
d. Flush logs.
|
|
382
|
+
e. Exit.
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
The framework provides the deferred shutdown function; service code calls it via `defer deferFunc()`.
|
|
386
|
+
|
|
387
|
+
## Verification
|
|
388
|
+
|
|
389
|
+
Per-aspect checks the framework default MUST satisfy:
|
|
390
|
+
|
|
391
|
+
```
|
|
392
|
+
# 1. Static — middleware chain present
|
|
393
|
+
grep -E "WithErrorHandler|WithMiddleware\(.*(Metrics|CtxInject|RequestInfoLog|BaseInject|Recovery)" <default-options-file>
|
|
394
|
+
# expect: 5+ hits for kitex, 4+ for hertz
|
|
395
|
+
|
|
396
|
+
# 2. Live — internal-only log-id round-trip
|
|
397
|
+
curl -i -X POST <service-ping-url> -H "<log-id-header>: my-test-id"
|
|
398
|
+
# require a fresh internal-only classification citation: deployment/exposure record locator, mesh policy id, gateway policy, IaC path, release topology record, or previously approved owner-suite record whose dated baselines still match the current deployment, mesh, gateway, and policy records
|
|
399
|
+
# hard stop: if the response echoes caller-supplied "<log-id-header>: my-test-id", raw preservation remains an open gap until probe 2a or equivalent owner-suite evidence proves authenticated internal caller identity and confirms the log-id is correlation-only
|
|
400
|
+
# on unrelated unchanged-internal-surface changes, this curl is a freshness smoke only; cite the fresh internal classification and do not claim raw log-id preservation behavior changed
|
|
401
|
+
# if the change touches exposure, CORS, log-id value path, external/gateway classification, caller identity use, or the classification baseline is missing/stale, run probe 2a and the transport-appropriate egress probe (3b/3c/3d)
|
|
402
|
+
# if the surface is browser/CORS-exposed, raw log-id echo is not a pass; run the opaque-remap probe and CORS log-id rule instead
|
|
403
|
+
|
|
404
|
+
# 2a. Runtime/integration — authenticated internal caller identity for raw log-id preservation
|
|
405
|
+
<metadata-aware-probe> --auth-path mesh-or-platform --header "<log-id-header>: my-test-id" <service-target>
|
|
406
|
+
# required when the diff touches exposure, CORS, log-id value path, external/gateway classification, caller identity use, or when the internal-only classification baseline is missing/stale; if it cannot pass, reset or regenerate caller-supplied log-id
|
|
407
|
+
# require positive runtime mesh/platform authenticated-caller identity evidence for this request, such as mTLS identity, signed platform identity, or owner-suite output that records the authenticated caller principal
|
|
408
|
+
# expect: the same correlation log-id is preserved only on the authenticated internal path, and the log-id is not used for authz, caller attribution, or tag routing
|
|
409
|
+
# negative case: when an unauthenticated or auth-stripped path is reachable, run the same probe through that path; caller-supplied "<log-id-header>: my-test-id" must be reset or regenerated. Preserving the raw caller-supplied log-id on the unauthenticated path is a failure. If no unauthenticated path exists, cite dated deployment, mesh, gateway, and policy classification evidence plus a release-time owner-suite or integration artifact, dated at or after the final deployment/route topology, that machine-verifies no unauthenticated/auth-stripped route reaches the surface; static owner records or author assertions alone are not sufficient. Otherwise 2a remains open and the implementation must reset or regenerate log-id on all paths.
|
|
410
|
+
# absent this probe or equivalent owner-suite evidence on a triggered change, probes 2 and 3 remain open gaps even if the curl smoke shows echo/generation behavior
|
|
411
|
+
|
|
412
|
+
# 3. Live — server-side log-id generation
|
|
413
|
+
curl -i -X POST <service-ping-url>
|
|
414
|
+
# require the same fresh internal-only classification citation as probe 2
|
|
415
|
+
# candidate-only expect: response header includes a server-generated log-id on that proven internal-only surface
|
|
416
|
+
# if the change touches exposure, CORS, log-id value path, external/gateway classification, caller identity use, or the classification baseline is missing/stale, run probe 2a and the transport-appropriate egress probe (3b/3c/3d)
|
|
417
|
+
# if the surface is browser/CORS-exposed, a raw internal server log-id is not a pass; run the opaque-remap probe and CORS log-id rule instead
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
# 3a. Static — external/gateway/browser-exposed log-id remap provenance
|
|
422
|
+
# required before any external/gateway or browser-exposed remap probe in 3b/3c/3d can pass; a green live response is not a substitute for token provenance
|
|
423
|
+
# require source file/function locator proving the token issuance path uses cryptographic RNG output that flows into the persisted external token, such as Go crypto/rand, Python secrets, or an approved server-side platform CSPRNG; idempotent-mode egress reads may be table reads, but first issuance is still the CSPRNG draw point. Merely importing or naming a CSPRNG API is not enough, and non-CSPRNG sources are open gaps.
|
|
424
|
+
# require source file/function locator proving external-to-internal resolution uses table-only lookup and cannot recompute the token from internal LogId plus service-local keys; an unresolvable locator, recompute-capable path, deterministic/token-derived generator, or unverified issuance path is an open gap, not pass
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
# 3b. HTTP/JSON external/gateway/browser-exposed log-id remap
|
|
429
|
+
# tiering: source/static provenance is 3a; unit/component invariants below require separate committed test evidence with file path/line and command; the curl probe is only the live exposure/remap smoke and cannot satisfy the unit/component seam requirements by itself
|
|
430
|
+
curl -i -X POST <service-ping-url> \
|
|
431
|
+
-H "<log-id-header>: my-test-id" \
|
|
432
|
+
-H "<non-allowlisted-base-identity-header>: caller-supplied" \
|
|
433
|
+
-d '{"<base-json-name>":{"<log-id-json-name>":"body-test-id","<caller-json-name>":"caller-supplied","<tags-json-name>":{"<owner-approved-tag>":"allowed-value","non_allowlisted":"caller-supplied"}}}'
|
|
434
|
+
# hard precondition: JSON field names come from the generated descriptor's json_name or gateway contract, and a server log/echo/owner probe proves the injected base values were decoded; without this artifact, do not evaluate negative expectations and treat the inconclusive result as an open release gap, not pass
|
|
435
|
+
# require a paired internal/server-log lookup for this request; opaque-id format checks are additional evidence, not a substitute
|
|
436
|
+
# if the paired lookup is missing or inaccessible, remap is unverified and remains an open gap
|
|
437
|
+
# require static gate 3a to pass for the same remap implementation under test
|
|
438
|
+
# require one executed unit/component test that exercises the unmocked production token generator and asserts token length/format per owner record; uniqueness/collision safety is proven by the forced-collision test below
|
|
439
|
+
# component/live: with no existing remap row for a fresh internal LogId, first external/gateway or browser-exposed egress must issue and persist a CSPRNG-backed opaque token and expose that token, never the internal LogId or an empty/fallback id
|
|
440
|
+
# expect: every exposed support log-id is the same owner-approved opaque random token, none equal "my-test-id", "body-test-id", or the paired internal LogId, and the owner remap table resolves it back to that paired internal LogId
|
|
441
|
+
# repeat with a second request whose paired internal LogId differs; expect a different opaque support id that resolves to the second internal LogId
|
|
442
|
+
# unit/component: resolve the owner mapping mode first (idempotent vs per-request); if unknown, the assertion is inconclusive and remains an open gap. For per-request mode, inject the same fixed internal LogId directly into the remap function twice and expect different unpredictable external tokens. For idempotent mode, prove the same token is returned by table read after a prior independent random-token insert; then delete, hide, or isolate that stored row, re-invoke token issuance for the same internal LogId, and expect a different CSPRNG-issued token. Table-read consistency or delete-then-resolve failure alone is not proof of non-recomputation.
|
|
443
|
+
# unit/component: in idempotent mode, require one-external-token-per-internal-LogId via a unique constraint or atomic upsert keyed by internal LogId; run a forced concurrent same-internal-LogId first-egress test and expect only one external token is persisted and every caller receives or resolves to that same token
|
|
444
|
+
# unit/component: require no-external-token-reuse-across-distinct-internal-LogIds via a unique constraint or explicit atomic compare-and-set on the external-token column itself, so reverse-resolution cannot be ambiguous. Resolve the production conflict-handling mode first (regenerate vs reject); if unknown, the assertion is inconclusive and remains an open gap. For every mapping mode, prove a concrete duplicate external-token conflict across two different internal LogIds reaches the production uniqueness guard: use a controlled test seam where token issuance returns the pre-seeded colliding value first and then a real CSPRNG value, invoke the production remap creation/insert path with a pre-seeded duplicate external token, or inject the duplicate at the remap persistence/insert function while preserving the production uniqueness guard and 3a CSPRNG provenance evidence. In idempotent mode, this forced duplicate must reach the persistence/insert uniqueness guard; an issuance-only seam is not proof of the external-token constraint. Happy-path concurrency without a forced duplicate is not enough. Assert the branch that production actually takes. On regenerate, persist only a distinct token for the new request, never expose or persist the colliding token for the new request, and reverse-resolve the final token to the new request's paired internal LogId, not the pre-seeded row. On reject, expose no support id and zero egress identity; the internal LogId and colliding token must not appear in headers, metadata, body, logs returned to clients, or request-base echo. In idempotent mode, reject without retry is an open gap and not a pass unless a resolvable platform owner waiver records the no-support-id behavior, owner, scope, future deadline, and a CI-enforceable expiry gate. Diff-resident review evidence for that gate is the committed CI job/config line plus committed test file path/line asserting both pre-deadline pass and post-deadline fail through an injected clock or simulated date. Release pass additionally requires demonstrably blocking enforcement at waiver creation time: paired green required-pipeline run output plus required-pipeline, branch-protection, or merge-blocking status evidence. If that blocking enforcement is missing, stale, advisory-only, or non-blocking, the waiver remains an open release gap. Otherwise prove retry-to-accepted distinct token. In idempotent mode, also prove the final accepted token is stored for the new internal LogId and later returned by table read, not recomputation. For cleanup/expiry, prove expired external tokens remain in a tombstone or exclusion set and are rejected if generated again for a different internal LogId.
|
|
445
|
+
# expect on a proven internal propagation channel with positive runtime authenticated-caller evidence and a cited owner allowlist: the owner-approved Tag is preserved internally, and non-allowlisted Tags are absent; without authenticated-caller evidence, caller-supplied Tags are dropped or overwritten even when the key/value is allowlisted
|
|
446
|
+
# expect on external/gateway or browser-exposed egress: response body/base fields do not reflect caller-supplied base identity; all base.Response Tags are absent
|
|
447
|
+
# expect: response headers are allowlist-only; any non-allowlisted base identity header, caller-supplied identity value, internal base identity value, or substring of Caller/From/IDC/Cluster/Tags/LogId fails
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
# 3c. Binary-protobuf gRPC external/gateway/browser-exposed metadata remap
|
|
452
|
+
# tiering: source/static provenance is 3a; unit/component invariants below require separate committed test evidence with file path/line and command; the grpcurl probe is only the live exposure/remap smoke and cannot satisfy the unit/component seam requirements by itself
|
|
453
|
+
grpcurl \
|
|
454
|
+
-H "<log-id-header>: my-test-id" \
|
|
455
|
+
-H "<non-allowlisted-base-identity-header>: caller-supplied" \
|
|
456
|
+
-d '{"<base-json-name>":{"<log-id-json-name>":"body-test-id","<caller-json-name>":"caller-supplied","<tags-json-name>":{"<owner-approved-tag>":"allowed-value","non_allowlisted":"caller-supplied"}}}' \
|
|
457
|
+
<service-grpc-target> <service>/<method>
|
|
458
|
+
# hard precondition: proto-JSON field names come from the generated descriptor's json_name, and a server log/echo/owner probe proves the injected base values were decoded; without this artifact, do not evaluate negative expectations and treat the inconclusive result as an open release gap, not pass
|
|
459
|
+
# require a gRPC-aware probe that dumps response metadata and trailers plus a paired internal/server-log lookup for this request
|
|
460
|
+
# if the paired lookup is missing or inaccessible, remap is unverified and remains an open gap
|
|
461
|
+
# require static gate 3a to pass for the same remap implementation under test
|
|
462
|
+
# require one executed unit/component test that exercises the unmocked production token generator and asserts token length/format per owner record; uniqueness/collision safety is proven by the forced-collision test below
|
|
463
|
+
# component/live: with no existing remap row for a fresh internal LogId, first external/gateway or browser-exposed egress must issue and persist a CSPRNG-backed opaque token and expose that token, never the internal LogId or an empty/fallback id
|
|
464
|
+
# expect: response metadata/trailers are allowlist-only; every exposed support log-id across metadata/trailers and decoded body is the same owner-approved opaque random token, none equal "my-test-id", "body-test-id", or the paired internal LogId, and the owner remap table resolves it back to that paired internal LogId
|
|
465
|
+
# repeat with a second request whose paired internal LogId differs; expect a different opaque support id that resolves to the second internal LogId
|
|
466
|
+
# unit/component: resolve the owner mapping mode first (idempotent vs per-request); if unknown, the assertion is inconclusive and remains an open gap. For per-request mode, inject the same fixed internal LogId directly into the remap function twice and expect different unpredictable external tokens. For idempotent mode, prove the same token is returned by table read after a prior independent random-token insert; then delete, hide, or isolate that stored row, re-invoke token issuance for the same internal LogId, and expect a different CSPRNG-issued token. Table-read consistency or delete-then-resolve failure alone is not proof of non-recomputation.
|
|
467
|
+
# unit/component: in idempotent mode, require one-external-token-per-internal-LogId via a unique constraint or atomic upsert keyed by internal LogId; run a forced concurrent same-internal-LogId first-egress test and expect only one external token is persisted and every caller receives or resolves to that same token
|
|
468
|
+
# unit/component: require no-external-token-reuse-across-distinct-internal-LogIds via a unique constraint or explicit atomic compare-and-set on the external-token column itself, so reverse-resolution cannot be ambiguous. Resolve the production conflict-handling mode first (regenerate vs reject); if unknown, the assertion is inconclusive and remains an open gap. For every mapping mode, prove a concrete duplicate external-token conflict across two different internal LogIds reaches the production uniqueness guard: use a controlled test seam where token issuance returns the pre-seeded colliding value first and then a real CSPRNG value, invoke the production remap creation/insert path with a pre-seeded duplicate external token, or inject the duplicate at the remap persistence/insert function while preserving the production uniqueness guard and 3a CSPRNG provenance evidence. In idempotent mode, this forced duplicate must reach the persistence/insert uniqueness guard; an issuance-only seam is not proof of the external-token constraint. Happy-path concurrency without a forced duplicate is not enough. Assert the branch that production actually takes. On regenerate, persist only a distinct token for the new request, never expose or persist the colliding token for the new request, and reverse-resolve the final token to the new request's paired internal LogId, not the pre-seeded row. On reject, expose no support id and zero egress identity; the internal LogId and colliding token must not appear in headers, metadata, body, logs returned to clients, or request-base echo. In idempotent mode, reject without retry is an open gap and not a pass unless a resolvable platform owner waiver records the no-support-id behavior, owner, scope, future deadline, and a CI-enforceable expiry gate. Diff-resident review evidence for that gate is the committed CI job/config line plus committed test file path/line asserting both pre-deadline pass and post-deadline fail through an injected clock or simulated date. Release pass additionally requires demonstrably blocking enforcement at waiver creation time: paired green required-pipeline run output plus required-pipeline, branch-protection, or merge-blocking status evidence. If that blocking enforcement is missing, stale, advisory-only, or non-blocking, the waiver remains an open release gap. Otherwise prove retry-to-accepted distinct token. In idempotent mode, also prove the final accepted token is stored for the new internal LogId and later returned by table read, not recomputation. For cleanup/expiry, prove expired external tokens remain in a tombstone or exclusion set and are rejected if generated again for a different internal LogId.
|
|
469
|
+
# expect on a proven internal propagation channel with positive runtime authenticated-caller evidence and a cited owner allowlist: the owner-approved Tag is preserved internally, and non-allowlisted Tags are absent; without authenticated-caller evidence, caller-supplied Tags are dropped or overwritten even when the key/value is allowlisted
|
|
470
|
+
# expect on external/gateway or browser-exposed egress: decoded protobuf response body has external-safe base.Response fields; caller-supplied identity and all Tags are not reflected, internal identity fields are zeroed or absent, and any exposed log-id is the owner-approved opaque id, not "my-test-id", "body-test-id", or the paired internal LogId
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
```
|
|
474
|
+
# 3d. Metadata-only or non-protobuf external/gateway/browser-exposed transport
|
|
475
|
+
# tiering: source/static provenance is 3a; unit/component remap invariants require separate committed test evidence with file path/line and command; the metadata-aware probe is only the live exposure/remap smoke
|
|
476
|
+
<metadata-aware-probe> --metadata "<log-id-key>=my-test-id" --metadata "<non-allowlisted-base-identity-key>=caller-supplied" <service-target>
|
|
477
|
+
# require a probe that exercises the transport's platform-owner-recorded metadata keys and dumps response metadata/trailers/header channels
|
|
478
|
+
# hard precondition: server log/echo/owner probe proves the injected metadata/base values were decoded; without this artifact, do not evaluate negative expectations and treat the inconclusive result as an open release gap, not pass
|
|
479
|
+
# require a paired internal/server-log lookup for this request; if missing or inaccessible, remap is unverified and remains an open gap
|
|
480
|
+
# require static gate 3a to pass for the same remap implementation under test
|
|
481
|
+
# require unit/component remap tests for same-internal-LogId token independence and pre-seeded collision handling as defined in 3b/3c
|
|
482
|
+
# expect: same paired-log remap, support-id same-value across channels, allowlist-only, allowlisted-Tag-preserved only for proven internal propagation with runtime authenticated-caller evidence, non-allowlisted-Tag-dropped, and no caller-supplied identity reflection checks as 3b/3c
|
|
483
|
+
# absent such a probe, metadata-only egress coverage remains an open gap, not pass
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
# 4. Static — error code enum used consistently
|
|
488
|
+
grep -c "Code_ServerError\|Code_ServerPanic\|Code_Timeout" <service-code>
|
|
489
|
+
# expect: all error returns route through the enum, no raw integer codes
|
|
490
|
+
|
|
491
|
+
# 5. Trace correlation
|
|
492
|
+
# trigger one request → search log search by log-id → all hops visible
|
|
493
|
+
# pick a log line → click trace_id → trace view shows all spans linked
|
|
494
|
+
```
|