@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
package/dist/assets/marketplace/plugins/ccl-skills/skills/go-microservice-architecture/SKILL.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: go-microservice-architecture
|
|
3
|
+
description: Use when designing, reviewing, or explaining a new product's Go backend or microservice architecture using Kitex or similar RPC, Hertz or similar HTTP gateway, protobuf IDL, MySQL/GORM-style relational storage, Redis cache/locks/rate limiting, service discovery, dynamic config, message queues, observability, DI, and code generation. Product-agnostic; do not depend on existing codebase paths, service names, or legacy repositories. Prefer this for architecture, service boundaries, contracts, data ownership, reliability, security, and platform decisions when no code changes are requested; use go-microservice-dev for implementation work. Triggers also include "Go 后端架构怎么设计", "Go 微服务怎么拆", "RPC 接口怎么定义", "Go 服务边界", "Go 服务重构 / 架构分层重构", "拆分 Go 服务的上帝类/模块边界", "decompose a god class in a Go service".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Go Microservice Architecture
|
|
7
|
+
|
|
8
|
+
Use this for new product/server architecture work. It distills proven backend patterns but must not assume any existing repository, service identifier, package path, database, or legacy service layout.
|
|
9
|
+
|
|
10
|
+
## Skill Routing
|
|
11
|
+
|
|
12
|
+
- Use this skill for architecture decisions, service decomposition, API/RPC contract shape, storage ownership, async workflow design, observability, reliability, and launch readiness.
|
|
13
|
+
- Use `product-rd-workflow` first when the request spans product shaping, architecture, implementation, review, release, and learning loops rather than architecture alone.
|
|
14
|
+
- Use `go-microservice-dev` when the user asks to implement, modify, debug, test, scaffold, or generate code. A localized refactor (某文件/某类) also belongs to `go-microservice-dev`; only service-wide layering/boundary redesign stays here, and a multi-stage / cross-module refactor delivery must re-enter `product-rd-workflow`. An unqualified whole-service "Go 服务重构" enters here by default, mirroring the Python pair — do not let the unqualified form fall to the implementation skill.
|
|
15
|
+
- Use `python-service-architecture` for Python services. Do not load Python rules for Go work unless the task is explicitly cross-language contract design.
|
|
16
|
+
- Use `platform-observability` for logs/metrics/traces/log-id propagation/dashboards/alerts/SLI-SLO design. This skill owns only the service-side observability surface (Kitex/Hertz middleware that emits structured logs, OTel SDK use, baseline labels attached by metrics client, health endpoints); the cross-cutting evidence stack belongs there.
|
|
17
|
+
- Use `platform-service-connectivity` for service mesh, service discovery (Nacos/Consul/equivalent), mTLS, multi-environment lane routing, retry/timeout/circuit-breaker policy, and the canonical RPC base struct shape. This skill defines what the service exposes (framework default options usage, request-metadata propagation conformance via the platform's chosen carrier — in-message `base` or transport metadata, scenario-driven per the connectivity Carrier decision — graceful shutdown); mesh policy and routing rules live there.
|
|
18
|
+
- Use `platform-release-engineering` for environment/lane matrix, canary/blue-green, promotion gates, rollback playbook, secret distribution, dynamic-config (config-center) vs static-config split, image build pipeline. This skill owns the service-side contracts (config schema, secret consumption interface, registration metadata); release flow lives there.
|
|
19
|
+
- Use codebase-specific skills only when the task is explicitly about an existing legacy/workspace repository.
|
|
20
|
+
- Architecture references should define decision criteria, invariants, ownership boundaries, and acceptance checks. Put concrete code patterns, helper APIs, and test mechanics in `go-microservice-dev`.
|
|
21
|
+
- When changing an architecture rule that implementation must obey, name the downstream execution owner before landing: `go-microservice-dev` for code mechanics, `testing-strategy` for proof layer, platform skills for runtime contracts, and `product-rd-workflow` for cross-stage gates. If the rule also applies outside Go, route through `skill-extraction-workflow` and mirror or explicitly skip sibling architecture/dev skills.
|
|
22
|
+
- For money, billing, quota, permission, tenant/user data isolation, privacy, high-impact AI, repeated writes, async finality, or incident-explanation risk, start from `product-rd-workflow` and its high-risk resilience gate before choosing service boundaries or fallback behavior.
|
|
23
|
+
|
|
24
|
+
## Platform Boundary
|
|
25
|
+
|
|
26
|
+
This skill owns the **service-internal** view: layer separation (transport/application/domain/infra), protobuf IDL design, DAL boundaries, MQ consumer shape, error-code contract, DI/Wire generation. It exposes a fixed contract to the platform layer:
|
|
27
|
+
|
|
28
|
+
| Service exposes (this skill owns) | Platform owns (route to platform-* skill) |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `/healthz`, `/readyz`, `/ping` endpoints (via framework default) | Orchestrator probes; registry healthcheck contract |
|
|
31
|
+
| Use of framework default server suite + client suite (e.g. Kitex/Hertz `Default*Options`, or equivalent) | What that middleware chain must include — see `platform-observability` and `platform-service-connectivity` |
|
|
32
|
+
| Conformance to the platform's request-metadata envelope (request id / correlation id / lane / caller identity), populated by client middleware | Cross-language contract on the envelope shape |
|
|
33
|
+
| `context.Context` carrying correlation id, trace context, lane/env, deadline through every hop; helper to clone-without-cancel for spawned goroutines | How those fields propagate across mesh / queue / async boundaries |
|
|
34
|
+
| Structured logger interface that emits JSON with the platform field schema (trace context extracted from ctx automatically) | Log shipping pipeline, search index |
|
|
35
|
+
| Stable error-code enum + framework error mapping (timeouts, panics, permission errors → typed codes) | Cross-service error contract evolution |
|
|
36
|
+
| Graceful shutdown: deregister from SD → drain → close clients → exit | Orchestrator pre-stop hook and termination grace |
|
|
37
|
+
| Secret consumption via platform secret-store SDK; never read from committed files | Secret rotation pipeline, secret-store deployment |
|
|
38
|
+
| Static config in per-environment files bundled in the image; dynamic config via config-center SDK | Config-center deployment, audit, rollout |
|
|
39
|
+
| Service registration metadata: platform service identifier, lane tag, region/cluster tags, version, weight | Registry deployment, federation, healthcheck propagation |
|
|
40
|
+
| Metric emission via framework metrics client with baseline labels auto-attached | Metric storage, cardinality budget, SLI definition |
|
|
41
|
+
|
|
42
|
+
A Go service author works against this contract. Platform-level questions ("which mesh policy?", "which collector?", "which canary weight?") route to the platform skills. Cross-language uniformity is what makes the platform layer reusable.
|
|
43
|
+
|
|
44
|
+
## Generalization Discipline
|
|
45
|
+
|
|
46
|
+
- Keep only reusable server-side mechanics: contracts, layers, storage ownership, config, reliability, observability, security boundaries, code generation, and delivery workflow.
|
|
47
|
+
- Do not copy product nouns, service names, package paths, provider names, environment names, IDs, dashboards, callback types, or organization-specific operating habits into the architecture.
|
|
48
|
+
- When source code shows a domain-specific concept, generalize it to `domain object`, `resource`, `authorization scope`, `integration scope`, or `workflow` only if the mechanic is reusable; otherwise discard it.
|
|
49
|
+
- When patterns conflict, choose deliberately:
|
|
50
|
+
- Prefer current contracts and requirements over historical code habits.
|
|
51
|
+
- Prefer relational durable truth over Redis-only truth for auditable state.
|
|
52
|
+
- Prefer explicit protobuf/config/schema contracts over reflection, hidden globals, or stringly conventions.
|
|
53
|
+
- Prefer idempotency and durable acceptance over retry-only designs.
|
|
54
|
+
- Prefer fail-closed for auth, permission, critical state transitions, and data-integrity paths; fail-open only for non-critical cache/telemetry paths when availability requires it.
|
|
55
|
+
- Fuse patterns only when both are generic and complementary; otherwise keep the simpler product-agnostic rule.
|
|
56
|
+
- Example: if one codebase stores workflow state only in Redis and another persists it in a relational table, keep the relational source-of-truth rule and optionally use Redis as cache, lock, rate limit, or scheduling aid.
|
|
57
|
+
|
|
58
|
+
## Core Workflow
|
|
59
|
+
|
|
60
|
+
Before changing architecture guidance, contracts, service boundaries, diagrams, plans, or implementation-driving recommendations, complete enough analysis and planning for the decision to be reviewable. Scale the plan to risk: a simple low-risk explanation can use a short inline plan; multi-service, contract-visible, data-ownership, release, high-risk, branch/MR, or unclear-risk architecture work needs explicit assumptions, alternatives, tradeoffs, acceptance checks, verification evidence, rollback or migration path, and named handoffs to implementation, testing, platform, or product workflow skills before edits or approval.
|
|
61
|
+
|
|
62
|
+
1. Define the product boundary.
|
|
63
|
+
- Identify user workflows, domain objects, external integrations, and lifecycle events.
|
|
64
|
+
- Decide which capabilities must be synchronous APIs, internal RPCs, async jobs, or scheduled tasks.
|
|
65
|
+
- Internal microservice calls use RPC/gRPC by default and may use HTTP when the service contract chooses it. Internal HTTP must meet the same service discovery, auth, timeout, retry, observability, and contract-test standards as RPC.
|
|
66
|
+
- Avoid splitting into microservices until ownership, scaling, data boundary, or deployment cadence justifies it.
|
|
67
|
+
|
|
68
|
+
2. Define service contracts before implementation.
|
|
69
|
+
- Use protobuf IDL as the default contract format.
|
|
70
|
+
- Service identity is decided before IDL and implementation. For new services, define the globally unique service name first, then IDL, then generated contract artifacts, then business implementation.
|
|
71
|
+
- Treat IDL and idlgen outputs as a stable boundary between service contracts and business repositories. Prefer centralized IDL ownership plus versioned generated artifacts that business services import. When the platform uses shared IDL and IDLGen repositories, Go, Python, web, mobile, and mini-program consumers must derive from the same contract source; do not fork IDL or generated artifacts per service repository or per language unless it is a deliberate compatibility branch with owner, version, and deprecation plan. Service repository layout (single service, multi-service, API/RPC split) does not change contract ownership.
|
|
72
|
+
- Protobuf may be the contract source for HTTP as well as RPC. For protobuf-backed or cross-language HTTP gateways, decide separately: contract source (protobuf/OpenAPI), generated route/client artifacts, and wire format (JSON vs binary protobuf). Classify protobuf-backed HTTP using the canonical wire-format gate in `../platform-service-connectivity/references/protobuf-http-contract-signals.md`; do not restate or widen that predicate locally.
|
|
73
|
+
- API contracts must define request messages, the response envelope, and shared public fields in the shared contract source before implementation, per the canonical `code`/`message`/`data` envelope contract in `../platform-service-connectivity/references/http-response-envelope-contract.md` (adoption, migration, non-JSON surfaces, and anti-patterns live there — do not restate them here).
|
|
74
|
+
- Internal RPC contracts carry the platform's shared request/response metadata field when the platform defines one; `platform-service-connectivity` owns the canonical base-struct shape and named-framework examples. Do not inherit a framework's reserved envelope/base field number as a cross-product convention (per `references/protobuf-contract-architecture.md`); if a shared metadata field must be part of the protobuf contract (rather than carried via middleware metadata), a new product picks an explicit field and documents it. Within a platform that has already standardized such a field, its field number, name, and message type are compatibility surfaces — do not renumber, rename, or replace them locally.
|
|
75
|
+
- Internal service data models need the same contract discipline: shared cross-service DTOs, enums, status values, metadata fields, and request/response models live in the contract or generated artifact boundary; service-private domain and persistence models stay inside the owning service and convert at transport/application boundaries.
|
|
76
|
+
- Separate public HTTP API models from internal RPC models when external clients have different stability needs.
|
|
77
|
+
- Prefer additive contract evolution: new fields, new methods, new enum values; avoid breaking field numbers or response semantics.
|
|
78
|
+
- **Inventory the service's exposed surfaces and review new ones at the boundary.** Keep a machine-checkable inventory of every externally reachable surface appropriate to the stack — HTTP routes, RPC services and methods, and async subscriptions (MQ / event / webhook consumers); a surface absent from it should not reach production unreviewed. Drive it from a deterministic discovery profile (routes/subscriptions-as-code, or a generated manifest plus a checked-in snapshot, are two common patterns) with explicit allowlisted carve-outs for framework / health / debug, generated, plugin, and env-conditional surfaces, so the gate flags genuinely new exposure instead of churning on false positives; also flag inventory entries no longer present in code so the snapshot stays trustworthy. Scale enforcement to risk: hard-fail CI for production, externally reachable services; a lighter manifest + review checklist suffices for prototypes, internal scripts, or repos without CI. The inventory proves *every surface was seen and reviewed*, **not** that it is authorized — it is not an authn/authz gate; auth, tenant isolation, and safe exposure remain separate evidence the boundary review must still demand. An unregistered new route or consumer is a *shadow surface* (unreviewed; async consumers are a commonly missed class). Distinct from breaking-change detection (`buf breaking` / `kitex check`, which guards *changes to existing* surfaces) and from agent-contract directory coverage (whether a directory carries an `AGENTS.md`); it guards *new runtime exposure*. `product-rd-workflow`'s spec/repo-contract sync gate owns the human discipline; this is its mechanical enforcement. Mirror any change to this rule in `../python-service-architecture/SKILL.md`.
|
|
79
|
+
- For finite values that cross service, storage, client, analytics, or generated-code boundaries, architecture must name the canonical owner, shared package or contract location, conversion boundaries, unknown/default behavior, and migration/debt exit path before implementation. If no shared location exists, approve the local-slice fallback and require every `finite-value-debt` marker to carry task reference, owner, deadline, and reason.
|
|
80
|
+
|
|
81
|
+
3. Design data ownership.
|
|
82
|
+
- Each service owns its write model and schema.
|
|
83
|
+
- Cross-service reads should go through RPC/API or explicit read models, not shared table writes.
|
|
84
|
+
- Use relational DB as source of truth for transactional domain state.
|
|
85
|
+
- Use GORM as the default MySQL DAL choice for new Go services unless the repo already standardizes or conventionally uses another query layer, or the architecture records a deliberate alternative.
|
|
86
|
+
- Decide schema, indexes, unique constraints, migration path, and sharding keys before writing DAL code.
|
|
87
|
+
- Keep GORM, sqlx, and raw SQL behind DAL or repository boundaries; transport and application layers must not build database queries directly.
|
|
88
|
+
- Use Redis for cache, locks, counters, idempotency windows, rate limits, and ephemeral coordination, not durable truth.
|
|
89
|
+
- Define Redis key scope, TTL policy, lock lease, rate-limit window, and idempotency lifetime as part of the architecture.
|
|
90
|
+
|
|
91
|
+
4. Design runtime platform contracts.
|
|
92
|
+
- Config: local file + dynamic config, with environment/lane separation.
|
|
93
|
+
- High-risk feature flags and runtime config default fail-closed in production. Local stubs, test defaults, and developer-safe switches must be visibly scoped and cannot become implicit production enablement.
|
|
94
|
+
- Secrets: never stored in code or config files; resolve through a secret provider.
|
|
95
|
+
- Service discovery: all internal RPC clients use discovery/resolver abstraction.
|
|
96
|
+
- Service identity: internal RPC/HTTP trust should be based on workload identity, mTLS, signed service tokens, or an equivalent zero-trust control, not only network location.
|
|
97
|
+
- Runtime wrappers should provide service identity, registration/discovery, context propagation, trace/log id, metrics, timeout/circuit behavior, and safe debug exposure consistently across HTTP, RPC, and workers.
|
|
98
|
+
- A capability requirement is not a framework-adoption decision. When a requirement names a capability (service discovery, mTLS, graceful drain), first define its minimal closure — the smallest layer that satisfies it — before adopting a platform framework or runtime component for it, AND name which layer actually closes it: service discovery and mTLS can close at the deployment layer (orchestrator DNS, mesh sidecar), but graceful drain inherently needs runtime behavior (stop accepting, SIGTERM/readiness handling, in-flight completion) — manifests alone leave it explicitly `not closed`, never silently satisfied. Framework adoption is not all-or-nothing: when a framework default conflicts with a service characteristic (e.g. a fixed 30s drain window versus minute-scale streaming requests), split at the boundary — land the part that delivers value on its own (deployment manifests), decide or defer the conflicting part (runtime lifecycle adoption) separately with each deferred capability's closure status recorded, and keep a quotable record of why it was not adopted. Mirror any change to this rule in `../python-service-architecture/SKILL.md`.
|
|
99
|
+
- Dependency clients: DB, Redis, MQ, object storage, service discovery, secret provider, and external HTTP clients must have explicit timeout, credential, observability, and test-substitution contracts.
|
|
100
|
+
- Dependency platform layers own SDK lifecycle, credential resolution, readiness, shared timeout policy, close hooks, and test substitution. Feature infrastructure adapters own feature-specific schemas, indexes, query/ranking contracts, object names, event payload meaning, and repair semantics. Do not place feature contracts in the platform layer just because they use a platform client.
|
|
101
|
+
- Admission control: inbound rate limits, concurrency limits, load shedding, backpressure, and circuit-breaker behavior are part of reliability design.
|
|
102
|
+
- Release runtime: service metadata, deployment resources, mesh/gateway routing, canary traffic, approval, and rollback are first-class architecture surfaces.
|
|
103
|
+
- Error contract: define canonical code/message semantics once, then map HTTP, RPC, worker, and dependency errors into it.
|
|
104
|
+
- Context contract: trace/log id, lane/environment, authorization/resource scope, request deadline, and auth subject must propagate through all sync and async paths.
|
|
105
|
+
- Observability: logs, metrics, traces, health checks, pprof/debug where safe, and structured request context.
|
|
106
|
+
- When comparing a new product backend against a mature internal reference, convert the comparison into a platform-capability gap list, not a source-code shopping list.
|
|
107
|
+
- The recurring maturity checks are: identity/RBAC subject model, external API signature/replay/allowlist boundary, dynamic config with version/cache/watch/rollback, MQ producer/consumer lifecycle with retry/drop/replay visibility, DB transaction and query-safety guardrails, context/error propagation across HTTP/RPC/MQ, and resource/search visibility scope.
|
|
108
|
+
- A placeholder or README-only package family is not implementation evidence.
|
|
109
|
+
- Before marking an internal reference package family as placeholder-only, inspect nested git repositories or submodules, non-default local/remote branches, tags, and tree contents with read-only commands. Default-branch scaffolds do not prove the architecture capability is absent.
|
|
110
|
+
- If the comparison uses internal checkouts, private repositories, local paths, or organization projects, route preservation through `skill-extraction-workflow` or apply the same sanitization gate before landing any artifact: keep only mechanisms, boundaries, and acceptance gates; remove source-identifying domains, paths, repository/module names, people, tickets, and business nouns.
|
|
111
|
+
|
|
112
|
+
5. Define code generation and ownership boundaries.
|
|
113
|
+
- Generated code is an output surface, not hand-maintained source.
|
|
114
|
+
- Keep IDL, generated contracts, HTTP route generation, DB model generation, and Wire/DI generation explicit.
|
|
115
|
+
- Introducing or migrating any HTTP gateway/framework requires a quotable record in the architecture doc, repo contract, or MR description, with a separately locatable entry for gateway-capability justification, contract source, middleware order, generated artifacts, observability, and tests. Protobuf motivation alone is insufficient evidence unless the same record states a concrete missing capability in the existing framework, why the current extension points cannot satisfy it, and which requirement the new framework satisfies. Adding protobuf-backed HTTP on an unchanged gateway/framework requires the contract-source and wire-format records; expand to generated-artifact, observability, and test records when those surfaces change.
|
|
116
|
+
- Health checks should be able to prove the boundary: IDL source location, generation command, generated package version, service implementation importing generated contracts, and CI/breaking-change checks. Agent review then judges whether the service layer bypasses the contract or hides domain semantics in transport code.
|
|
117
|
+
- Document the generation commands in the repo.
|
|
118
|
+
- Generation commands must be portable and must not contain developer-local absolute paths.
|
|
119
|
+
|
|
120
|
+
## Architecture Defaults
|
|
121
|
+
|
|
122
|
+
- One product can start as a modular monolith if service boundaries are unclear; split by data ownership and team/runtime needs, not by noun count.
|
|
123
|
+
- Public API layer should be thin: auth, validation, request/response mapping, orchestration handoff.
|
|
124
|
+
- RPC services should own domain operations and internal contracts.
|
|
125
|
+
- Background workers should own event processing, retries, idempotency, and backfill/repair workflows.
|
|
126
|
+
- A mature Go service usually separates transport/handler, application logic, domain/service orchestration, and infrastructure adapters; dependency injection or provider sets should make those seams visible instead of letting handlers construct DB/MQ/RPC clients directly.
|
|
127
|
+
- Shared libraries are allowed for infrastructure concerns; do not put domain rules in shared packages.
|
|
128
|
+
- Cross-boundary semantic values are an architecture responsibility even when their local representation is small. Architecture decides where finite values such as status, market, region, channel, source, provider, or permission are canonical, who may expose generated transport enums to domain code, and how duplicate constants are retired.
|
|
129
|
+
- Mature reference code is useful only when it exposes a reusable boundary. Prefer extracting framework wrappers, typed clients, context/error contracts, config schemas, transaction helpers, MQ lifecycle helpers, and query-safety checks; discard business nouns, private module layout, and one-off legacy habits.
|
|
130
|
+
- A service should have clear layers: transport, application/service logic, domain logic, infrastructure adapters, generated contracts.
|
|
131
|
+
- Long-running jobs require a first-class runtime model: distributed lock scope, lease time, max execution time, retry policy, idempotency key, and failure visibility.
|
|
132
|
+
- External dependencies require explicit timeout budgets, status-code validation, retry/fallback rules, and clear ownership of degraded behavior.
|
|
133
|
+
- High-risk operations require a resilience contract: fail-closed policy, idempotency strategy, durable status, reconciliation or repair path, trace/request id propagation, user/support explanation surface, and proof that fallback/degradation cannot bypass authorization, tenant/user isolation, quota, audit, or data-retention controls.
|
|
134
|
+
- High-risk context resolution must reject missing tenant, actor, subject, or resource scope instead of falling back to default identities. Durable side effects need atomic audit/outbox evidence or an explicit reconciliation/repair workflow.
|
|
135
|
+
- External dependency bootstrap requires a first-class operability contract: which resources may be created automatically, which existing resources must be validated, which partial failures can be repaired, which operations fail startup, and which timeouts apply to administrative work versus serving requests.
|
|
136
|
+
|
|
137
|
+
## Reference Loading
|
|
138
|
+
|
|
139
|
+
- For source provenance, current extraction boundary, and keep/merge/discard decisions, read `references/source-evidence-map.md` when auditing or re-extracting this skill.
|
|
140
|
+
- For architecture decisions and boundaries, read `references/architecture-playbook.md`.
|
|
141
|
+
- For reliability and operability requirements, read `references/ops-checklist.md`.
|
|
142
|
+
- For cross-cutting server contracts, read `references/cross-cutting-concerns.md`.
|
|
143
|
+
- For service scaffolding, generation, DI, config, and test architecture, read `references/service-scaffold.md`.
|
|
144
|
+
- For protobuf/IDL contract design, package boundaries, message/enum/service evolution, and HTTP/RPC mapping, read `references/protobuf-contract-architecture.md`.
|
|
145
|
+
- For secret providers, service discovery, dependency clients, object storage, and controlled concurrency, read `references/dependency-platform.md`.
|
|
146
|
+
- For public API, third-party callbacks, authorization scope isolation, and external integration boundaries, read `references/api-security-boundaries.md`.
|
|
147
|
+
- For HTTP gateway boundaries, generated routes, handler responsibilities, middleware order, and generated HTTP clients, read `references/http-gateway-architecture.md`.
|
|
148
|
+
- For deployment, environment/lane runtime, mesh/gateway traffic, canary, approval, rollback, and launch operations, read `references/release-runtime-readiness.md`.
|
|
149
|
+
- For runtime identity, environment/lane metadata, service discovery, logs, metrics, tracing, and debug exposure, read `references/runtime-observability.md`.
|
|
150
|
+
- For relational data modeling, schema ownership, indexes, sharding, migrations, and generated DAL boundaries, read `references/data-modeling-and-migrations.md`.
|
|
151
|
+
- For Redis cache, locks, counters, rate limiting, task coordination, local cache, and idempotency architecture, read `references/redis-cache-coordination.md`.
|
|
152
|
+
- For import/export, backfill, migration, partitioning, artifact policy, and batch limits, read `references/bulk-workflow-architecture.md`.
|
|
153
|
+
- For durable workflow state, allowed transitions, retry, cancellation, idempotency, and terminal-state policy, read `references/workflow-state-architecture.md`.
|
|
154
|
+
- For MQ topics, consumer groups, event contracts, activation gates, retry/drop policy, and async consumer operations, read `references/mq-consumer-architecture.md`.
|
|
155
|
+
- For event-driven architecture concerns — delivery semantics taxonomy, producer-side patterns, transactional outbox/inbox, idempotency design, partition-key ordering, schema evolution, retry/DLQ/replay strategy, fanout patterns, saga vs choreography, end-to-end "exactly-once" illusion, and Go-specific implementation glue (consumer goroutine + worker pool, outbox poller with `SKIP LOCKED`, error classification, graceful-shutdown order) — read `references/event-driven-architecture.md`. Stack-agnostic core sections mirror the sibling `python-service-architecture/references/event-driven-architecture.md`; maintainers updating those sections must update both files in the same change.
|
|
156
|
+
- For multi-tenant SaaS isolation concerns — isolation-tier decision tree (RLS / schema-per-tenant / DB-per-tenant / region-per-tenant), tenant context as a first-class value, tenant-aware data access with DB-engine enforcement, per-tenant quota and rate limit at every layer, tenant-aware observability with cardinality management, per-tenant lifecycle (provision / suspend / export / delete / retention / archive), per-tenant rollout and feature flags, cross-tenant capability gating, compliance / residency / sovereignty, migration between tiers, and Go-specific implementation glue (tenant on `context.Context`, GORM RLS session variables, connection pool reset, cache key construction, HTTP middleware, message consumer pattern, outbox tenant propagation) — read `references/multi-tenant-isolation.md`. Stack-agnostic core sections mirror the sibling `python-service-architecture/references/multi-tenant-isolation.md`; maintainers updating those sections must update both files in the same change.
|
|
157
|
+
- For data-platform architecture concerns — DB engine choice axis (single-instance OLTP / sharding middleware like Vitess / distributed SQL like TiDB / managed cloud DB), HA topology and failover model, read scaling and replica routing with staleness budget, sharding and resharding strategy, cross-region replication and data residency, backup with tested recovery (RPO/RTO + restore drill), cluster lifecycle (provision / scale / decommission), capacity planning (storage / IOPS / connections / latency / replica lag), fleet-wide schema-migration coordination, connection-pool and proxy topology (PgBouncer / ProxySQL / Vitess gateway), cost and efficiency, and Go-specific implementation glue (`database/sql` driver+pool, replica routing via DSN, migration tooling choice, PgBouncer mode decision, health-check shape) — read `references/data-platform-architecture.md`. Stack-agnostic core sections mirror the sibling `python-service-architecture/references/data-platform-architecture.md`; maintainers updating those sections must update both files in the same change.
|
|
158
|
+
- For audit logs, history records, retention, redaction, and query authorization, read `references/audit-history-architecture.md`.
|
|
159
|
+
- For dynamic config, rules, filters, routing, rollout ratios, and validation policy, read `references/config-rule-routing-architecture.md`.
|
|
160
|
+
- For replay, shadow execution, response comparison, diff retention, and rollout confidence checks, read `references/replay-comparison-architecture.md`.
|
|
161
|
+
- For performance budgets, capacity controls, DB query safety, batch limits, replay load, and launch readiness, read `references/performance-capacity-architecture.md`.
|
|
162
|
+
- For notifications, webhooks, alert delivery, retries, and recipient policy, read `references/notification-architecture.md`.
|
|
163
|
+
- For generated files, reports, PDFs, spreadsheets, object storage, and download artifacts, read `references/artifact-generation-architecture.md`.
|
|
164
|
+
- For error codes, response envelopes, transport mapping, and cross-service error propagation, read `references/error-contract-architecture.md`.
|
|
165
|
+
- For developer CLIs, code generation, generated-file ownership, and reproducible tooling workflows, read `references/developer-tooling-architecture.md`.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# API Security Boundaries
|
|
2
|
+
|
|
3
|
+
## Public API Boundary
|
|
4
|
+
|
|
5
|
+
- Treat public APIs as a separate trust boundary from internal RPC.
|
|
6
|
+
- Authenticate the calling application or user before resolving authorization scope.
|
|
7
|
+
- Keep authentication, authorization, scope resolution, and domain validation as separate steps.
|
|
8
|
+
- Define which paths bypass auth, and keep bypass lists explicit, reviewed, and minimal.
|
|
9
|
+
- Public error responses should be stable; logs should keep the detailed auth failure reason.
|
|
10
|
+
|
|
11
|
+
## Partner Application Auth
|
|
12
|
+
|
|
13
|
+
- A partner application model should include:
|
|
14
|
+
- application id.
|
|
15
|
+
- secret or public key reference.
|
|
16
|
+
- allowed source IPs or network policy when applicable.
|
|
17
|
+
- allowed authorization/resource scope.
|
|
18
|
+
- integration/source identity.
|
|
19
|
+
- enable/disable status and rotation metadata.
|
|
20
|
+
- Store secrets in a secret provider or encrypted config, not in code.
|
|
21
|
+
- Support secret rotation with overlapping validity windows when external partners need rollout time.
|
|
22
|
+
- Signatures should include timestamp, nonce or request id, app id, and canonical request data.
|
|
23
|
+
- Choose HMAC or asymmetric signatures for new integrations; avoid weak hash-only signing unless compatibility requires it and compensating controls exist.
|
|
24
|
+
- Reject expired signatures and replayed nonces/request ids.
|
|
25
|
+
|
|
26
|
+
## Authorization Scope Isolation
|
|
27
|
+
|
|
28
|
+
- Scope id from the request is an input, not proof of permission.
|
|
29
|
+
- Resolve allowed resource scope from the authenticated app/user.
|
|
30
|
+
- Enforce scope permission before domain logic and again at repository boundaries for sensitive writes when feasible.
|
|
31
|
+
- Include resolved scope id in idempotency keys, cache keys, rate limits, and audit records.
|
|
32
|
+
- Never allow a scope-check bypass flag without a narrow integration reason, explicit config, and audit trail.
|
|
33
|
+
|
|
34
|
+
## Third-Party Callback Boundary
|
|
35
|
+
|
|
36
|
+
- Callback endpoints must validate signature/token, timestamp window, event type, payload shape, and required resource identifiers.
|
|
37
|
+
- Callback processing should assume duplicate, delayed, and out-of-order delivery.
|
|
38
|
+
- Use provider event id or a derived idempotency key to deduplicate.
|
|
39
|
+
- Return success only after durable acceptance, or document why the provider should not retry.
|
|
40
|
+
- Put provider verification keys in secret/config providers; do not hardcode callback verification keys in source.
|
|
41
|
+
|
|
42
|
+
## Audit And Operations
|
|
43
|
+
|
|
44
|
+
- Log app id, resolved scope id, provider, event id, endpoint, auth result, and canonical error code.
|
|
45
|
+
- Do not log secrets, raw signatures, full tokens, or sensitive payloads.
|
|
46
|
+
- Metrics should separate auth failure, permission failure, validation failure, callback duplicate, callback processing failure, and dependency failure.
|
|
47
|
+
- Admin changes to integration auth data should be auditable and optionally notify an operations sink.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Architecture Playbook
|
|
2
|
+
|
|
3
|
+
## Service Boundary Rules
|
|
4
|
+
|
|
5
|
+
Create a separate service when at least one is true:
|
|
6
|
+
|
|
7
|
+
- It owns a distinct transactional data model.
|
|
8
|
+
- It has independent scaling or latency requirements.
|
|
9
|
+
- It needs independent deployment or failure isolation.
|
|
10
|
+
- It is consumed by multiple products or integration surfaces.
|
|
11
|
+
- It has a different compliance, security, or operational boundary.
|
|
12
|
+
|
|
13
|
+
Do not create a service only because:
|
|
14
|
+
|
|
15
|
+
- A domain noun exists.
|
|
16
|
+
- A table exists.
|
|
17
|
+
- A team wants a cleaner folder.
|
|
18
|
+
- A future scale concern is speculative.
|
|
19
|
+
|
|
20
|
+
## Recommended Service Types
|
|
21
|
+
|
|
22
|
+
### API Gateway / HTTP Service
|
|
23
|
+
|
|
24
|
+
Responsibilities:
|
|
25
|
+
|
|
26
|
+
- External HTTP contract.
|
|
27
|
+
- Authentication, authorization, subject/resource context, request validation.
|
|
28
|
+
- DTO mapping between external model and internal commands/queries.
|
|
29
|
+
- Swagger/OpenAPI docs if the API is consumed outside the service team.
|
|
30
|
+
|
|
31
|
+
Avoid:
|
|
32
|
+
|
|
33
|
+
- Direct complex SQL.
|
|
34
|
+
- Long-running jobs.
|
|
35
|
+
- Hidden cross-service transactions.
|
|
36
|
+
|
|
37
|
+
### Internal RPC Service
|
|
38
|
+
|
|
39
|
+
Responsibilities:
|
|
40
|
+
|
|
41
|
+
- Core domain operations.
|
|
42
|
+
- Internal protobuf contract.
|
|
43
|
+
- Data ownership and transaction boundary.
|
|
44
|
+
- Calls to other internal services through typed clients.
|
|
45
|
+
|
|
46
|
+
Avoid:
|
|
47
|
+
|
|
48
|
+
- Returning raw DB models when the contract should be stable.
|
|
49
|
+
- Sharing write access to owned tables.
|
|
50
|
+
|
|
51
|
+
### Worker / Consumer Service
|
|
52
|
+
|
|
53
|
+
Responsibilities:
|
|
54
|
+
|
|
55
|
+
- Async events, scheduled jobs, retryable side effects.
|
|
56
|
+
- Idempotency and deduplication.
|
|
57
|
+
- Backfill, compensation, repair workflows.
|
|
58
|
+
- Outbox/inbox handling when domain consistency matters.
|
|
59
|
+
|
|
60
|
+
Avoid:
|
|
61
|
+
|
|
62
|
+
- Assuming exactly-once delivery from MQ.
|
|
63
|
+
- Treating retries as safe without idempotency keys.
|
|
64
|
+
|
|
65
|
+
### Shared Package
|
|
66
|
+
|
|
67
|
+
Appropriate for:
|
|
68
|
+
|
|
69
|
+
- Logging, tracing, metrics.
|
|
70
|
+
- Config and secret clients.
|
|
71
|
+
- DB/Redis/MQ wrappers.
|
|
72
|
+
- Codegen helpers.
|
|
73
|
+
- Generic data structures and concurrency utilities.
|
|
74
|
+
|
|
75
|
+
Not appropriate for:
|
|
76
|
+
|
|
77
|
+
- Product-specific domain rules.
|
|
78
|
+
- Cross-service data model coupling.
|
|
79
|
+
- Hidden network calls behind generic helpers.
|
|
80
|
+
|
|
81
|
+
## Contract Design
|
|
82
|
+
|
|
83
|
+
- Use protobuf for current API/RPC contracts.
|
|
84
|
+
- For detailed protobuf package, service, message, enum, annotation, and evolution rules, apply `protobuf-contract-architecture.md`.
|
|
85
|
+
- Design pagination, filtering, sorting, and idempotency from v1 for list and write APIs.
|
|
86
|
+
- Include request context fields only when they are part of the domain contract; transport context should travel via middleware/metadata.
|
|
87
|
+
- Keep transport DTOs, application parameters/results, domain objects, and storage models as separate boundaries when behavior or compatibility is non-trivial.
|
|
88
|
+
- Patch/update contracts need presence semantics, not only zero values.
|
|
89
|
+
- For finite values used across contracts, domain logic, persistence, clients, analytics, or events, architecture owns the semantic source of truth. Decide the canonical owner, shared contract/package location, allowed representations per boundary, parser/canonicalization owner, unknown/default behavior, and rollout order. If a shared location does not yet exist, the architecture decision must approve a local fallback and a consolidation task with owner and deadline; unowned `finite-value-debt` markers are architecture findings.
|
|
90
|
+
- **RPC framework choice: Kitex remains the default; ConnectRPC is the credible 2025-2026 alternative for specific contexts**. Per `connectrpc.com` docs, Connect ships as a single small Go package (single-digit-thousand LOC), built on `net/http` with handlers implementing `http.Handler` and clients wrapping `http.Client` — works with any third-party router, middleware, or server. Supports three protocols (gRPC, gRPC-Web, Connect's own protocol) over both HTTP/1.1 and HTTP/2; any gRPC client in any language can call a Connect server, and Connect clients can call any gRPC server (validated by Google's interop tests). CNCF-incubated as of 2025; production-adopted at CrowdStrike, PlanetScale, Bluesky, Dropbox per `buf.build/blog`. Architecture choice: **choose Connect** when (a) the service hosts a browser-facing API and gRPC-Web is the main use case (Connect collapses gRPC + gRPC-Web + Connect into one server), (b) the service is small and Kitex's framework surface is over-spec'd, (c) the service must interop bidirectionally with multi-language gRPC clients but the team wants to avoid grpc-go's 130k-LOC dependency footprint. **Stay on Kitex** when (a) the team already operates Kitex across many services and the platform observability/middleware/registry contracts are Kitex-native, (b) Thrift IDL (TTHeader / TTHeader Streaming) is in active use alongside protobuf — Connect is protobuf-only, (c) Kitex-specific features (StreamX, FastCodec, generic call) are load-bearing. The two are NOT mutually exclusive: a Connect-based public-edge gateway can fan out to internal Kitex services, but **wire compatibility alone is not interop** — Connect speaks gRPC on the wire when configured for gRPC, and Kitex servers configured with the gRPC meta handler can accept those calls; however, Kitex services in production typically depend on Kitex-specific framework metadata (lane / tenant / caller-identity ctx values propagated via TTHeader or Kitex middleware), and Connect clients do not emit those by default. The fan-out works ONLY when (a) the target Kitex services are configured for the gRPC meta handler (not TTHeader), (b) the Connect-side Go client explicitly attaches the gRPC metadata (`metadata.MD`) that the Kitex service's middleware reads as caller-identity / lane / tenant — typically through a small adapter layer at the Connect-side that pulls fields from the Connect call context and writes them as gRPC headers, (c) any Kitex-specific TTHeader Streaming / generic call / Thrift-only paths stay routed through a Kitex-native edge instead. Plan the adapter layer as a first-class architecture component, not a one-line bridge; otherwise tenant / lane context drops silently at the protocol boundary and downstream services run without isolation.
|
|
91
|
+
|
|
92
|
+
## Data Design
|
|
93
|
+
|
|
94
|
+
- MySQL or compatible relational DB is the default domain truth store.
|
|
95
|
+
- Redis is for ephemeral state: cache, lock, counter, limiter, idempotency, job state.
|
|
96
|
+
- MQ is for eventual consistency and async workflows; model delivery as at-least-once.
|
|
97
|
+
- Dynamic config controls rollout, feature gates, thresholds, and routing, not core domain truth.
|
|
98
|
+
- Search stores, document stores, and analytics stores are projections unless explicitly designed as source of truth.
|
|
99
|
+
|
|
100
|
+
## Dependency Direction
|
|
101
|
+
|
|
102
|
+
Recommended:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
transport -> application/service -> domain -> infrastructure adapters
|
|
106
|
+
|
|
|
107
|
+
-> generated clients/contracts
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Rules:
|
|
111
|
+
|
|
112
|
+
- Domain logic should not import HTTP or RPC framework packages.
|
|
113
|
+
- Infrastructure adapters should be behind interfaces when they are complex or externally visible.
|
|
114
|
+
- Generated code may be imported by transport and adapter layers; avoid letting generated DTOs dominate core domain modeling when behavior is complex.
|
|
115
|
+
- How a layer boundary is enforced is itself an architecture decision, with a strength ladder: physical module/package boundary (a violation is a compile or import error), import-architecture lint (the tiering CI gate below), then review convention — in decreasing strength; prefer mechanisms where a violation is a CI error, not a review comment. For a core where a frozen contract must coexist with continuous evolution (a gateway data plane, a billing domain), prefer the physical boundary, and add a deterministic digest/conformance anchor as machine proof that evolution has not touched the frozen surface. Record why the chosen strength is enough (cost versus strength); a weaker tier is a documented tradeoff, not a default. Sibling: `python-service-architecture/references/architecture-playbook.md` ("Layering Depth") carries the same rule for Python; keep the two in sync.
|
|
116
|
+
|
|
117
|
+
### Functional Core, Imperative Shell (Recommended, Not Mandatory)
|
|
118
|
+
|
|
119
|
+
- Keep calculation, rule, and state-transition logic in pure functions with no I/O or hidden state; let handlers, repositories, clients, and workers be the thin imperative shell that calls them. The payoff is testability — the pure core unit-tests without mocks, and the shell stays small enough for focused integration tests. Conflating them (domain rules inside a repository method or a worker callback) is the recurring cause of "we cannot test this without a real DB / queue / network."
|
|
120
|
+
- This pure-core *style* is a recommended outcome for I/O-heavy services, **not a mandatory gate**, and not a license to cargo-cult functional-programming idioms into Go — plain functions and structs, not an abstraction tower. Distinct and **not** optional, though: domain invariants must not be hidden inside handlers, repository methods, IO adapters, framework hooks/middleware, or worker/task callbacks — anywhere outside the domain/service layer. That is the dependency-direction rule above, independent of whether you adopt the pure-core style.
|
|
121
|
+
- Sibling: `python-service-architecture/references/architecture-playbook.md` ("Layering Depth — Apply In Moderation") carries the same principle for Python; keep the two in sync.
|
|
122
|
+
|
|
123
|
+
### Shared Foundation Module Package Tiering
|
|
124
|
+
|
|
125
|
+
A shared cross-service module (a `common` / foundation / utility library imported by many services) needs stricter internal discipline than a single service: one import cycle or one heavyweight coupling inside it is inherited by every consumer, and a leaf utility cannot be reused once it transitively drags in unrelated packages. Scale the strictness to blast radius — a widely-imported foundation module earns this; a tiny single-consumer helper does not.
|
|
126
|
+
|
|
127
|
+
- Define and **document** an explicit linear package-tier order in the module's own README/doc. The order `generated value-types -> constants/globals -> generic pure utils -> logging/metrics -> framework/business adapters` is illustrative — each team picks its own — but the written order is the artifact reviewers enforce, and an unwritten "everyone knows the order" rots into cycles. Keep pure helpers in a tier below logging/config so they do not drag observability or runtime config into every consumer.
|
|
128
|
+
- **Earlier tiers must never import later tiers** — the tier list is one-directional and acyclic.
|
|
129
|
+
- **Default to sibling independence within a tier** so each leaf stays independently importable. When one same-tier package genuinely needs another (a real case: a `retry` helper used by an http client, `backoff` used by a queue), that is the signal to extract the shared piece **down into an earlier tier** so it is no longer a sibling — not to copy-paste it and not to add an artificial micro-tier. Reserve strict "no sibling import" for declared leaf packages.
|
|
130
|
+
- **Split generated packages by what they pull in.** Generated pure contract/value types may be imported by any tier; generated clients/server bindings carry transport and runtime deps (gRPC, HTTP) and belong in the adapter tier only — importing them broadly pressures domain code to model around transport shapes, which the Dependency Direction rule above warns against. All generated code is regenerate-only (rebuild via the codegen target, never hand-edit).
|
|
131
|
+
- Gate the invariant in CI rather than relying on review memory. Outright cycles already fail `go build` / `go list ./...` (the compiler forbids import cycles), but that does not catch a legal-but-wrong cross-tier or sibling import — for those use a dedicated import-architecture linter: `depguard` (via golangci-lint) to allow/deny imports per package, or a layer/component checker such as `go-arch-lint` or k8s-style `import-boss`. (`internal/` only blocks imports from outside a parent tree; it does not enforce tier order or sibling independence inside the module.) Treat a new cross-tier or sibling import as an architecture-review item, not a silent merge.
|
|
132
|
+
|
|
133
|
+
### Adapter / Plugin Family — Shared Core + Thin Bridges Across Repos
|
|
134
|
+
|
|
135
|
+
When one cross-cutting platform concern (observability, auth/governance, a client-SDK wrapper) must bridge into *many* frameworks or drivers — one governance layer wired into gin / hertz / gRPC / Kitex plus a set of DB, cache, and MQ drivers — design **one shared core that owns the invariants + a thin per-framework bridge adapter each**, not a full re-implementation per adapter. Each adapter owns only framework-specific wiring (how *this* framework exposes middleware/hooks/interceptors); the invariants (a **risk-appropriate failure policy** — fail-open for genuinely optional telemetry, fail-closed for auth / governance / data-integrity / audit-and-compliance; classify each concern explicitly, an audit / compliance / security signal is a control, not "observability"; but "fail-closed" for audit/compliance means **durable local capture (outbox) + bounded degraded mode**, hard-blocking only the specific regulated operation (a mutation, sensitive read, export, or privileged access — whatever the compliance scope covers) — not turning the audit exporter into a synchronous production kill switch for unrelated traffic — context binding, lifecycle/cleanup, propagation, canonical schema and error model) live once in the core and are delegated to. This is Ports-and-Adapters applied to a *fleet of transports*, distinct from the intra-module tiering above — here the adapters are typically separate repos.
|
|
136
|
+
|
|
137
|
+
- **The core exposes only the seam + invariants; concrete adapters live outside it — dependency-neutral, but NOT semantics-neutral.** The shared core defines the extension interface/seam and owns the invariants — a *concrete* framework/driver adapter (a specific ORM, HTTP framework, or MQ-client binding) must NOT live inside the core package: co-locating it pulls that framework's heavyweight deps into every core consumer and inverts the dependency direction (adapters import the core, never the reverse; the core stays adapter-agnostic). Keep the seam neutral to the concrete *dependency* but **explicit about semantics** — it names the required transaction / commit / ack / retry / cancel / failure guarantees the invariants rely on (an outbox/audit control needs real commit-and-ack semantics, not a seam that hides them) plus an adapter conformance suite; a driver that cannot implement a required guarantee is rejected, not silently flattened to a lowest common denominator. A library swap is a **thin shim only if the replacement preserves that declared capability matrix** (session scoping, driver connection reset, broker nack/backpressure, official middleware ordering); dropping a real semantic is an architecture change, not a shim. And "outside the core" ≠ "ship nothing" — provide at least one official/reference adapter + bootstrap for **every mandatory fail-closed control** (auth / governance / data-integrity / audit / compliance) and for baseline instrumentation, so services don't each hand-roll and diverge from — or bypass — the invariants. Catching a concrete adapter that slipped into the core late means ripping it back out — a costly reversal, not a tidy refactor.
|
|
138
|
+
- **Repeated-fix-across-siblings is the extract-the-abstraction trigger — but fix the live bug first.** The same bug fixed in a third sibling adapter, or sustained "harden X" churn across the family, is a missing seam, not N unlucky bugs. Backport/mitigate the incident across the existing adapters **first**; the core extraction is the durable follow-up, not a reason to leave the Nth adapter broken. (An adapter that duplicated the concern and later delegates to a shared helper typically collapses to a fraction of its size — that deleted duplication was the tax on the missing abstraction.)
|
|
139
|
+
- **Design a seam early, but keep it minimal — and split the stable API from the core impl.** "Extract down a tier" cannot reach across import-pinned repos, so a *minimal, explicitly-versioned* SPI/compat seam (provider/runtime injection, no core internals or process-global set-once state) should exist before out-of-repo adapters ship — but do NOT freeze a broad abstraction from one adapter; stabilize the wider shared-core shape only after real sibling evidence (rule of three), or you build a version-lock chokepoint. Ship the stable **API/contract as a tiny package separate from the core implementation**, so a core-impl or canonical-schema change does not force-lock every independently-pinned adapter; govern it with semver compatibility windows, an adapter↔core version matrix, and cross-adapter contract tests. Minimal-early, not big-early — a *wrong* shared abstraction couples the whole family to a bad decision and is harder to undo than duplication.
|
|
140
|
+
- **Reuse the framework's official instrumentation for wire/transport mechanics — through explicit injection, not its globals.** Official instrumentation often uses process-global providers / auto-registration; wrap it behind an explicitly injected provider/runtime and contract-test that no global set-once state leaks, or you get cross-service exporter/context leakage and double instrumentation. If a framework's official instrumentation *only* exposes a global / set-once API, a documented global-only exception is fine — confined to a single-owner idempotent bootstrap with teardown/test isolation and no custom wire semantics; don't fork or hand-roll transport instrumentation just to avoid the global. Keep platform governance semantics in the shared core so they do not fork per framework.
|
|
141
|
+
|
|
142
|
+
Sibling: `python-service-architecture/references/architecture-playbook.md` carries the same adapter-family principle; keep the two in sync.
|
|
143
|
+
|
|
144
|
+
## Cross-Layer Contract Integrity
|
|
145
|
+
|
|
146
|
+
- For any value that must travel across transport, application, domain, infrastructure, async event, or generated-code boundaries, name its source, destination, allowed transformations, and validation owner.
|
|
147
|
+
- Required parameters should be validated at the boundary and re-checked before irreversible side effects when they cross async, retry, or persistence boundaries.
|
|
148
|
+
- Do not rely on hidden globals, mutable maps, or stringly payloads for critical parameters; use typed request/result structs or generated contracts.
|
|
149
|
+
- Branches behind one public endpoint or command should return the same envelope shape and preserve required workflow steps unless a documented product decision says otherwise.
|
|
150
|
+
- Special-case branches need the same acceptance checks as the main path: auth, validation, idempotency, persistence, observability, error mapping, and regression coverage.
|
|
151
|
+
- When modifying a cross-layer parameter, update contract docs, generated code, adapters, tests, and observability together.
|
|
152
|
+
- When modifying a cross-boundary finite value, update enum/string conversion, storage compatibility, client mappings, analytics dimensions, event payloads, boundary conversion tests, and every tracked `finite-value-debt` marker together or record the remaining owner/deadline explicitly.
|
|
153
|
+
|
|
154
|
+
## Architecture Change Checklist
|
|
155
|
+
|
|
156
|
+
- Identify affected contracts, data shapes, state transitions, dependency calls, and generated artifacts before implementation.
|
|
157
|
+
- Check backward compatibility for existing clients, stored data, queued messages, cached values, and replay/backfill inputs.
|
|
158
|
+
- Define rollout and rollback behavior before migrating data or changing public behavior.
|
|
159
|
+
- Add verification for both the new path and historical/compatibility path when old data or old messages may still exist.
|
|
160
|
+
- Confirm no branch skips a required step such as validation, authorization, idempotency, persistence, event publication, or audit logging.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Artifact Generation Architecture
|
|
2
|
+
|
|
3
|
+
Use this when designing generated spreadsheets, PDFs, CSVs, reports, exports, or downloadable files.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
- Treat generated files as artifacts with owner, type, source query, version, generation time, retention, access control, and size limit.
|
|
8
|
+
- Large or slow artifacts should be generated by jobs rather than request handlers.
|
|
9
|
+
- Define output formats, templates, fonts/assets, localization, and schema/version compatibility before implementation.
|
|
10
|
+
- Generated artifacts must apply the same authorization and resource-scope filters as the underlying read path.
|
|
11
|
+
- Decide whether artifacts are regenerated, cached, or immutable after creation.
|
|
12
|
+
|
|
13
|
+
## Storage
|
|
14
|
+
|
|
15
|
+
- Prefer object storage for generated files and store only object keys or short-lived signed references in relational records.
|
|
16
|
+
- Artifact keys should be deterministic enough for traceability but should not expose private data.
|
|
17
|
+
- Define cleanup policy for source files, temporary files, and generated outputs.
|
|
18
|
+
- Local filesystem output is acceptable for tests and CLI tools, not server runtime durability.
|
|
19
|
+
|
|
20
|
+
## Quality Checks
|
|
21
|
+
|
|
22
|
+
- Validate that generated files open in common clients and preserve expected rows/pages.
|
|
23
|
+
- Define behavior for empty datasets, partial data, oversized output, unsupported characters, missing fonts/assets, and upload failure.
|
|
24
|
+
|
|
25
|
+
## Server-Side Document Rendering
|
|
26
|
+
|
|
27
|
+
When the artifact is a print-quality document (PDF, image batches, report packets, certificates, structured forms) rendered server-side from rich content (HTML + math + embedded media):
|
|
28
|
+
|
|
29
|
+
- **Print-vs-design DPI separation is explicit constants AND coordinate-domain-named**: declare `CSS_LAYOUT_PX_PER_INCH` (typical 96, the browser CSS px coordinate space the renderer lays out in), `PDF_POINTS_PER_INCH` (constant 72, the PDF coordinate space points map into), `OUTPUT_RASTER_DPI` (typical 300, the target raster density on final output), and the page dimension constants in mm. Name the coordinate domain on each constant explicitly — `LAYOUT_DPI` vs `PRINT_DPI` alone is the classic footgun: a renderer that computes browser-layout pixels with 72 thinking it's "print dpi" produces a half-size layout before rasterizing at 300 DPI, and the bug only appears on paper. Compute pixel dimensions from these named constants, not hand-tuned literals; document one conversion table for the three coordinate spaces in the renderer.
|
|
30
|
+
- **Font embedding is part of the deployment artifact, not "system font"**: for non-ASCII typesetting (CJK, Cyrillic, Devanagari, IPA) the renderer ships the chosen font files (typically variable fonts to avoid weight/width explosion) alongside the binary. Relying on the host OS's font set means tests pass on dev-machines that happen to have the font installed and renders fall back to a glyph-substitution box in production. Architecture names the font set, the license, and the cache-busting strategy for font upgrades.
|
|
31
|
+
- **Math / formula typesetting is configured once at the service**, not per-request: server-side MathJax / KaTeX is loaded once at module init with the explicit package set (mhchem, extpfeil, siunitx, unicode, boldsymbol — list only those needed), the explicit macro set (degree, parallel, unit aliases, project-specific shorthand), and inline-vs-display delimiter pairs. Per-request math config is a P1 latency surface: the engine warmup is slow and serializing it across requests serializes the renderer.
|
|
32
|
+
- **Batch rendering chunks with per-chunk concurrency**: when the request asks for N items rendered (e.g. 200 question images, a paper sheet with M questions), the handler splits into chunks (typical: low double-digits) and `Promise.all` within the chunk; chunks run sequentially. Naive `Promise.all(allItems.map(render))` peaks heap to N parallel rendering contexts and OOMs the renderer. Naive sequential single-item loops waste cores. The chunk size is a function of the per-render memory cost, not a guessed magic number.
|
|
33
|
+
- **Output goes direct to object storage from the renderer**, not via local FS: write the rendered buffer to the configured bucket key in the same handler; emit `{key, format, dimensions, density, quality}` as the response. Local FS as a staging layer fails on container restart and complicates horizontal scale-out. Local FS is acceptable only for unit tests and CLI tools.
|
|
34
|
+
- **Credentials for the upload come from the platform credential surface, scoped to the upload operation**: object-storage access uses the platform's STS / role-broker per the full contract in `platform-release-engineering/references/secret-and-config-management.md` Pattern C-adjacent — Cloud Session Token Brokering (caller authn/authz before mint, full credential-scope cache key, refresh-ahead-of-expiry, single-flight refresh, fail-closed on STS failure, per-issuance audit). The renderer's credential is scoped narrowly: `(tenant, bucket, key-prefix, put-only)` — not a broad "renderer can write any bucket" role; a renderer role with broad write surface is a privilege-escalation pivot through any RCE in the renderer. A raw `accessKeyId / accessKeySecret` pair in config is the anti-pattern this replaces. Single static bucket name passed via env is acceptable when the bucket is the same for the whole tenancy; multi-tenant artifacts need a per-tenant bucket / prefix scheme.
|
|
35
|
+
- **Missing-config fails closed, not config-or-empty**: `bucket = config.get('TOS_BUCKET') ?? ''` silently uploads to bucket "" (which most SDKs accept as "default" or "first bucket the credential can see") instead of failing fast. Required config is asserted at startup; the renderer refuses to serve traffic when any required value is missing.
|
|
36
|
+
- **Snake-case vs camel-case at the consumer boundary** applies ONLY to non-IDL JSON endpoints: when the renderer is exposed via a hand-written controller that returns plain JSON to a FE caller and the contract is snake_case while the service uses camelCase internally, the conversion lives at the controller response. For endpoints that ARE defined by an authoritative IDL (proto / OpenAPI) and consumed via generated clients, the casing comes from the IDL — applying a blanket `snakeDumpResultCase` at the controller desyncs server output from the generated client and is a contract violation (see `http-gateway-architecture.md` Generated HTTP Client Policy and `protobuf-contract-architecture.md` Front-End Consumer Contract). The rule: one casing convention per endpoint surface, decided by whichever side owns the authoritative contract; never apply blanket case-conversion to a generated-client endpoint.
|
|
37
|
+
- **Anti-pattern observed**: a hardcoded vendor / bucket URL in the renderer's source (for example, `<project-dev-vendor-bucket-url>/...`) bakes the project's identity into the deployable artifact, leaks the bucket address into anyone who decompiles the binary or reads the source, and breaks every cross-region / cross-tenant deployment. Asset URLs are config inputs, never literals.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Audit And History Architecture
|
|
2
|
+
|
|
3
|
+
Use this when designing audit logs, resource history, activity records, or change tracking.
|
|
4
|
+
|
|
5
|
+
## Audit Boundary
|
|
6
|
+
|
|
7
|
+
- Decide which operations require durable audit and which can use best-effort activity logs.
|
|
8
|
+
- Define actor identity, service identity, resource scope, resource id, operation name, result, timestamp, trace id, and canonical error fields.
|
|
9
|
+
- Keep end user, client application, service caller, and operator identity separate.
|
|
10
|
+
- Use stable operation names rather than function names that change during refactors.
|
|
11
|
+
- Define retention, privacy, redaction, query authorization, export, and deletion policy.
|
|
12
|
+
|
|
13
|
+
## Data Shape
|
|
14
|
+
|
|
15
|
+
- Store selective before/after summaries or field-level diffs when needed; do not store raw secrets, tokens, passwords, signatures, or unrelated payloads.
|
|
16
|
+
- Serialize request parameters and result data through redaction helpers.
|
|
17
|
+
- Prefer append-only audit records. Corrections should be new records unless a legal deletion policy requires removal.
|
|
18
|
+
- For event-derived history, define lag, rebuild, reconciliation, and source event retention.
|
|
19
|
+
|
|
20
|
+
## Write Path
|
|
21
|
+
|
|
22
|
+
- Critical audit should be in the same transaction or outbox as the state change when correctness depends on it.
|
|
23
|
+
- Best-effort audit is acceptable only when explicitly non-critical and observable through logs or metrics on write failure.
|
|
24
|
+
- Async audit pipelines need bounded queues, retry policy, backpressure or drop policy, and shutdown flush.
|
|
25
|
+
|
|
26
|
+
## Query Path
|
|
27
|
+
|
|
28
|
+
- Query APIs need resource-scope authorization, pagination, time range filters, and redaction on read.
|
|
29
|
+
- High-volume audit stores need partitioning or retention windows before launch.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Bulk Workflow Architecture
|
|
2
|
+
|
|
3
|
+
Use this when designing import, export, backfill, migration, reconciliation, or other large batch workflows.
|
|
4
|
+
|
|
5
|
+
For durable status, allowed transitions, retry, cancellation, and idempotency rules, use `workflow-state-architecture.md` as the canonical contract. This file covers only the bulk-workflow concerns layered on top of that contract.
|
|
6
|
+
|
|
7
|
+
## Workflow Model
|
|
8
|
+
|
|
9
|
+
- Model long-running work as a durable job with actor, resource scope, source artifact, status, progress, total count, success count, failed count, error artifact, idempotency key, and timestamps.
|
|
10
|
+
- Separate validation, enrichment, commit, report generation, cleanup, and notification phases.
|
|
11
|
+
- Decide whether row-level errors produce partial success or fail the whole job before implementation starts.
|
|
12
|
+
- Use async processing when work can exceed request deadlines; synchronous APIs should create, inspect, cancel, or download jobs.
|
|
13
|
+
- Define maximum file size, row count, slice count, worker concurrency, and artifact retention before implementation.
|
|
14
|
+
|
|
15
|
+
## Partitioning And Coordination
|
|
16
|
+
|
|
17
|
+
- Large jobs should be partitioned by stable slice index, id window, cursor, or object part.
|
|
18
|
+
- Each slice needs a stable identity, ownership scope, retry limit, and per-slice progress.
|
|
19
|
+
- Finalization should run once after all slices reach terminal state.
|
|
20
|
+
- Cross-slice aggregation should use durable counters or transactional finalization, not in-memory state.
|
|
21
|
+
|
|
22
|
+
## Artifact Policy
|
|
23
|
+
|
|
24
|
+
- Source files, generated exports, and error reports need ownership, retention, size limit, access control, and cleanup policy.
|
|
25
|
+
- Error artifacts should preserve enough context for repair without exposing secrets or unrelated records.
|
|
26
|
+
- Store object keys or short-lived signed references; avoid storing large binary artifacts in relational rows.
|
|
27
|
+
- Exports must apply the same authorization and resource-scope filters as read APIs.
|
|
28
|
+
|
|
29
|
+
## Acceptance Checks
|
|
30
|
+
|
|
31
|
+
- The design states maximum file size, maximum row count, concurrency limit, timeout budget, retry limit, and retention.
|
|
32
|
+
- Error report generation failure has a defined terminal outcome.
|
|
33
|
+
- Job status is inspectable without reading object storage or worker logs.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Config Rule Routing Architecture
|
|
2
|
+
|
|
3
|
+
Use this when designing dynamic config, rule evaluation, request routing, rollout ratios, filters, or controlled execution.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
- Define a typed config schema with version, enabled flag, include/exclude scopes, rules, priority, ratio, target, and metadata.
|
|
8
|
+
- Validate config before activation: required fields, enum values, regex syntax, ratio bounds, total ratio limits, timeout limits, and unknown target behavior.
|
|
9
|
+
- Keep rule input fields explicit. Avoid reading arbitrary context keys without a documented field registry.
|
|
10
|
+
- Support nested condition groups only when the product needs them; otherwise prefer a flat rule list.
|
|
11
|
+
- Define operator semantics once: equality, inequality, numeric comparison, containment, regex, set membership, and missing-field behavior.
|
|
12
|
+
|
|
13
|
+
## Activation
|
|
14
|
+
|
|
15
|
+
- Config refresh should be atomic: load, parse, validate, then swap the active snapshot.
|
|
16
|
+
- On config load or parse failure, use the last valid snapshot or a documented safe default.
|
|
17
|
+
- Version changes should be observable through logs and metrics.
|
|
18
|
+
- Concurrency must be safe for high-read, low-write access patterns.
|
|
19
|
+
|
|
20
|
+
## Routing Policy
|
|
21
|
+
|
|
22
|
+
- Priority ordering must be deterministic, including tie-break behavior.
|
|
23
|
+
- Ratio rollout should be stable when users or resources need sticky assignment; random sampling is acceptable only for stateless sampling.
|
|
24
|
+
- Disabled rules should be skipped without side effects.
|
|
25
|
+
- Unknown targets should fail closed or route to an explicitly approved default.
|
|
26
|
+
- Every route decision should expose rule id, config version, selected target, and skip reason where useful.
|
|
27
|
+
|
|
28
|
+
## Dynamic Config Key Namespace
|
|
29
|
+
|
|
30
|
+
- For etcd-backed or config-center dynamic config, architecture declares the key namespace shape: `/{service}/{namespace}/{key}` is the common pattern, with `service` identifying the owning platform service identifier, `namespace` separating logical config domains (e.g. `db_shard`, `rate_limit`, `feature_flag`), and the leaf naming the entity. Raw etcd keys never leak into application code.
|
|
31
|
+
- Endpoint discovery for the config backend itself: when etcd endpoints come from another service-discovery system, architecture sets the refresh cadence (10-30 s is typical) so endpoint churn does not amplify into config hot-path latency. Refresh happens lazily on the next operation, not on a tight loop.
|
|
32
|
+
- Failure-mode allocation per responsibility: key-not-found, decode error, and remote/transient error each route to a different product behavior. Architecture documents which keys fall back to last-known-good cache (feature flags, rate budget), which fail closed (auth policy, billing rules), and which fail open (telemetry knobs).
|
|
33
|
+
- Watch callbacks run in their own goroutines and must recover from panic, update local cache atomically, and shut down cleanly on parent-ctx cancellation. A silently-dead watcher is harder to detect than a missing one; surface watcher health as a metric.
|
|
34
|
+
- Watch reconnect must preserve monotonicity: persist the last-observed revision/version, resume from `last_revision + 1` after disconnect, and trigger a full resync (re-read all subscribed keys) on `ErrCompacted` or other history-loss errors. Use jittered exponential backoff on reconnect to avoid stampede. Track watcher staleness as a metric and fail readiness probes when a critical-config watcher has been stale beyond a documented threshold.
|