oh-my-agent-commandcode 0.0.0-stage → 20.38.4
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/README.md +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# Policy and Testing Examples
|
|
2
|
+
|
|
3
|
+
OPA policies, Sentinel rules, and infrastructure testing patterns.
|
|
4
|
+
|
|
5
|
+
## OPA (Open Policy Agent)
|
|
6
|
+
|
|
7
|
+
### Required Tags Policy
|
|
8
|
+
```rego
|
|
9
|
+
# policies/required_tags.rego — OPA >= 1.0
|
|
10
|
+
package terraform.tags
|
|
11
|
+
|
|
12
|
+
# Map-shaped tags only; ASG uses repeated tag blocks and needs a separate rule.
|
|
13
|
+
# Extend this allowlist only after validating the exact provider plan schema.
|
|
14
|
+
taggable := {"aws_instance", "aws_s3_bucket"}
|
|
15
|
+
|
|
16
|
+
deny contains msg if {
|
|
17
|
+
resource := input.resource_changes[_]
|
|
18
|
+
resource.mode == "managed"
|
|
19
|
+
resource.type in taggable
|
|
20
|
+
resource.change.after != null # ignore pure deletions
|
|
21
|
+
tags := object.get(resource.change.after, "tags", {})
|
|
22
|
+
required := {"Environment", "Project", "Owner", "CostCenter"}
|
|
23
|
+
missing := required - object.keys(tags)
|
|
24
|
+
count(missing) > 0
|
|
25
|
+
msg := sprintf("Resource %s missing tags: %v", [resource.address, missing])
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Encryption Policy
|
|
30
|
+
```rego
|
|
31
|
+
# policies/encryption_required.rego
|
|
32
|
+
package terraform.encryption
|
|
33
|
+
|
|
34
|
+
# Require the project's configured SSE-KMS algorithm on explicit encryption
|
|
35
|
+
# resources. Bucket creation and existing remote configuration need separate
|
|
36
|
+
# coverage; a change-only plan cannot prove the full estate is encrypted.
|
|
37
|
+
deny contains msg if {
|
|
38
|
+
resource := input.resource_changes[_]
|
|
39
|
+
resource.type == "aws_s3_bucket_server_side_encryption_configuration"
|
|
40
|
+
resource.change.after != null
|
|
41
|
+
rule := resource.change.after.rule[_]
|
|
42
|
+
encryption := rule.apply_server_side_encryption_by_default[_]
|
|
43
|
+
encryption.sse_algorithm != "aws:kms"
|
|
44
|
+
msg := sprintf("%s must use aws:kms", [resource.address])
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Also verify every bucket created by the module has a corresponding encryption
|
|
49
|
+
resource (use module tests or the complete planned values/configuration). Unknown
|
|
50
|
+
planned values need explicit handling; field presence in the deprecated inline
|
|
51
|
+
bucket attribute is not proof of the required algorithm/key.
|
|
52
|
+
|
|
53
|
+
### Cost Control Policy
|
|
54
|
+
```rego
|
|
55
|
+
# policies/cost_control.rego
|
|
56
|
+
package terraform.cost
|
|
57
|
+
|
|
58
|
+
deny contains msg if {
|
|
59
|
+
resource := input.resource_changes[_]
|
|
60
|
+
resource.type == "aws_instance"
|
|
61
|
+
resource.change.after != null
|
|
62
|
+
resource.change.after.tags.Environment == "dev"
|
|
63
|
+
instance_type := resource.change.after.instance_type
|
|
64
|
+
not startswith(instance_type, "t3.")
|
|
65
|
+
msg := sprintf("Dev EC2 %s uses disallowed type %s", [resource.address, instance_type])
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Combined Plan Decision
|
|
70
|
+
```rego
|
|
71
|
+
# policies/guardrails.rego
|
|
72
|
+
package terraform.guardrails
|
|
73
|
+
|
|
74
|
+
deny contains msg if { msg := data.terraform.tags.deny[_] }
|
|
75
|
+
deny contains msg if { msg := data.terraform.encryption.deny[_] }
|
|
76
|
+
deny contains msg if { msg := data.terraform.cost.deny[_] }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Run policy unit tests, then evaluate the actual plan. Evaluating a deny set without
|
|
80
|
+
an exit-code flag does not gate CI. Query individual members with `--fail-defined`
|
|
81
|
+
so an empty set passes and any violation fails.
|
|
82
|
+
|
|
83
|
+
## Sentinel (Terraform Cloud)
|
|
84
|
+
|
|
85
|
+
### Require Encryption
|
|
86
|
+
|
|
87
|
+
Use the current `tfplan/v2` or `tfconfig/v2` import and match
|
|
88
|
+
`aws_s3_bucket_server_side_encryption_configuration` to the project's bucket
|
|
89
|
+
resources. Check the required algorithm/key and deletion/unknown-value cases.
|
|
90
|
+
Do not copy an inline `aws_s3_bucket.server_side_encryption_configuration`
|
|
91
|
+
existence check as an encryption guarantee; validate this rule against fixtures
|
|
92
|
+
from the exact provider/plan version before enabling a Sentinel gate.
|
|
93
|
+
|
|
94
|
+
### Restrict Instance Types
|
|
95
|
+
```hcl
|
|
96
|
+
# restrict_instance_types.sentinel
|
|
97
|
+
import "tfplan"
|
|
98
|
+
|
|
99
|
+
allowed_types = ["t3.micro", "t3.small", "t3.medium"]
|
|
100
|
+
|
|
101
|
+
main = rule {
|
|
102
|
+
all tfplan.resources.aws_instance as _, instances {
|
|
103
|
+
all instances as _, instance {
|
|
104
|
+
instance.applied.instance_type in allowed_types
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Native `terraform test` (Terraform >= 1.6)
|
|
111
|
+
|
|
112
|
+
Prefer the built-in HCL test framework for module tests before reaching for Terratest.
|
|
113
|
+
|
|
114
|
+
```hcl
|
|
115
|
+
# tests/vpc.tftest.hcl
|
|
116
|
+
variables {
|
|
117
|
+
name = "test-vpc"
|
|
118
|
+
cidr_block = "10.0.0.0/16"
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
run "creates_vpc_with_expected_cidr" {
|
|
122
|
+
command = plan
|
|
123
|
+
|
|
124
|
+
assert {
|
|
125
|
+
condition = google_compute_network.main.name == "test-vpc"
|
|
126
|
+
error_message = "VPC name does not match input"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
run "apply_and_verify_outputs" {
|
|
131
|
+
command = apply
|
|
132
|
+
|
|
133
|
+
assert {
|
|
134
|
+
condition = length(output.private_subnet_ids) == 2
|
|
135
|
+
error_message = "Expected 2 private subnets"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Run with `terraform test`. `command = plan` runs assertion-only checks without creating resources; `command = apply` provisions real (or mocked, via `mock_provider`) resources and destroys them afterward.
|
|
141
|
+
|
|
142
|
+
## Terratest (Go)
|
|
143
|
+
|
|
144
|
+
### VPC Module Test
|
|
145
|
+
```go
|
|
146
|
+
// vpc_test.go
|
|
147
|
+
package test
|
|
148
|
+
|
|
149
|
+
import (
|
|
150
|
+
"testing"
|
|
151
|
+
"github.com/gruntwork-io/terratest/modules/terraform"
|
|
152
|
+
"github.com/stretchr/testify/assert"
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
func TestVpcModule(t *testing.T) {
|
|
156
|
+
terraformOptions := &terraform.Options{
|
|
157
|
+
TerraformDir: "../modules/vpc",
|
|
158
|
+
Vars: map[string]interface{}{
|
|
159
|
+
"name": "test-vpc",
|
|
160
|
+
"cidr_block": "10.0.0.0/16",
|
|
161
|
+
"availability_zones": []string{"us-east-1a", "us-east-1b"},
|
|
162
|
+
},
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
defer terraform.Destroy(t, terraformOptions)
|
|
166
|
+
terraform.InitAndApply(t, terraformOptions)
|
|
167
|
+
|
|
168
|
+
vpcId := terraform.Output(t, terraformOptions, "vpc_id")
|
|
169
|
+
assert.NotEmpty(t, vpcId)
|
|
170
|
+
|
|
171
|
+
privateSubnets := terraform.OutputList(t, terraformOptions, "private_subnet_ids")
|
|
172
|
+
assert.Equal(t, 2, len(privateSubnets))
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Database Module Test
|
|
177
|
+
```go
|
|
178
|
+
// database_test.go
|
|
179
|
+
package test
|
|
180
|
+
|
|
181
|
+
import (
|
|
182
|
+
"testing"
|
|
183
|
+
"github.com/gruntwork-io/terratest/modules/terraform"
|
|
184
|
+
"github.com/stretchr/testify/assert"
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
func TestDatabaseModule(t *testing.T) {
|
|
188
|
+
terraformOptions := &terraform.Options{
|
|
189
|
+
TerraformDir: "../modules/database",
|
|
190
|
+
Vars: map[string]interface{}{
|
|
191
|
+
"identifier": "test-db",
|
|
192
|
+
"engine": "postgres",
|
|
193
|
+
"instance_class": "db.t3.micro",
|
|
194
|
+
},
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
defer terraform.Destroy(t, terraformOptions)
|
|
198
|
+
terraform.InitAndApply(t, terraformOptions)
|
|
199
|
+
|
|
200
|
+
endpoint := terraform.Output(t, terraformOptions, "endpoint")
|
|
201
|
+
assert.Contains(t, endpoint, "rds.amazonaws.com")
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Kitchen-Terraform (Ruby)
|
|
206
|
+
|
|
207
|
+
### VPC Controls
|
|
208
|
+
```ruby
|
|
209
|
+
# controls/vpc.rb
|
|
210
|
+
control 'vpc-exists' do
|
|
211
|
+
describe aws_vpc('vpc-12345678') do
|
|
212
|
+
it { should exist }
|
|
213
|
+
its('cidr_block') { should eq '10.0.0.0/16' }
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
control 'subnets-exist' do
|
|
218
|
+
describe aws_subnets do
|
|
219
|
+
its('subnet_ids.count') { should be >= 2 }
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Security Group Controls
|
|
225
|
+
```ruby
|
|
226
|
+
# controls/security_group.rb
|
|
227
|
+
control 'no-ssh-from-internet' do
|
|
228
|
+
aws_security_groups.group_ids.each do |sg_id|
|
|
229
|
+
describe aws_security_group(sg_id) do
|
|
230
|
+
it { should_not allow_in(port: 22, ipv4_range: '0.0.0.0/0') }
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## CI/CD Integration
|
|
237
|
+
|
|
238
|
+
### GitHub Actions Workflow
|
|
239
|
+
```yaml
|
|
240
|
+
# .github/workflows/terraform.yml
|
|
241
|
+
name: Terraform
|
|
242
|
+
|
|
243
|
+
on: [push, pull_request]
|
|
244
|
+
|
|
245
|
+
jobs:
|
|
246
|
+
validate:
|
|
247
|
+
runs-on: ubuntu-latest
|
|
248
|
+
steps:
|
|
249
|
+
- uses: actions/checkout@v4
|
|
250
|
+
|
|
251
|
+
- name: Setup Terraform
|
|
252
|
+
uses: hashicorp/setup-terraform@v3
|
|
253
|
+
|
|
254
|
+
- name: Terraform Format
|
|
255
|
+
run: terraform fmt -check -recursive
|
|
256
|
+
|
|
257
|
+
- name: Terraform Validate
|
|
258
|
+
run: |
|
|
259
|
+
terraform init -backend=false
|
|
260
|
+
terraform validate
|
|
261
|
+
|
|
262
|
+
- name: Run TFLint
|
|
263
|
+
uses: terraform-linters/setup-tflint@v4
|
|
264
|
+
with:
|
|
265
|
+
tflint_version: latest
|
|
266
|
+
- run: tflint --init && tflint
|
|
267
|
+
|
|
268
|
+
- name: Run Checkov
|
|
269
|
+
uses: bridgecrewio/checkov-action@master
|
|
270
|
+
with:
|
|
271
|
+
directory: .
|
|
272
|
+
framework: terraform
|
|
273
|
+
|
|
274
|
+
- name: Setup OPA
|
|
275
|
+
uses: open-policy-agent/setup-opa@v2
|
|
276
|
+
with:
|
|
277
|
+
version: v1.0.1
|
|
278
|
+
|
|
279
|
+
# Configure project-specific workload identity and backend credentials
|
|
280
|
+
# before this planning step. Never put secrets in the plan artifact.
|
|
281
|
+
- name: Run OPA Tests
|
|
282
|
+
run: |
|
|
283
|
+
terraform init -reconfigure
|
|
284
|
+
terraform plan -out=tfplan
|
|
285
|
+
terraform show -json tfplan > tfplan.json
|
|
286
|
+
opa test policies/ --verbose
|
|
287
|
+
opa eval --fail-defined --data policies/ --input tfplan.json "data.terraform.guardrails.deny[_]"
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Validation Script
|
|
291
|
+
```bash
|
|
292
|
+
#!/bin/bash
|
|
293
|
+
# validate.sh
|
|
294
|
+
|
|
295
|
+
set -e
|
|
296
|
+
|
|
297
|
+
echo "Running Terraform validation..."
|
|
298
|
+
|
|
299
|
+
# Format check
|
|
300
|
+
echo " → Checking format..."
|
|
301
|
+
terraform fmt -check -recursive
|
|
302
|
+
|
|
303
|
+
# Initialize
|
|
304
|
+
echo " → Initializing..."
|
|
305
|
+
terraform init -backend=false
|
|
306
|
+
|
|
307
|
+
# Validate
|
|
308
|
+
echo " → Validating..."
|
|
309
|
+
terraform validate
|
|
310
|
+
|
|
311
|
+
# Security scan with Checkov
|
|
312
|
+
echo " → Running Checkov..."
|
|
313
|
+
checkov -d . --framework terraform --quiet
|
|
314
|
+
|
|
315
|
+
# Lint with TFLint
|
|
316
|
+
echo " → Running TFLint..."
|
|
317
|
+
tflint --init
|
|
318
|
+
tflint
|
|
319
|
+
|
|
320
|
+
# Plan and OPA check (if policies exist)
|
|
321
|
+
if [ -d "policies" ]; then
|
|
322
|
+
echo " → Running OPA policy checks..."
|
|
323
|
+
# Requires explicitly configured backend/auth for this project.
|
|
324
|
+
terraform init -reconfigure
|
|
325
|
+
terraform plan -out=tfplan
|
|
326
|
+
terraform show -json tfplan > tfplan.json
|
|
327
|
+
opa test policies/
|
|
328
|
+
opa eval --fail-defined --data policies/ --input tfplan.json "data.terraform.guardrails.deny[_]"
|
|
329
|
+
fi
|
|
330
|
+
|
|
331
|
+
echo "All validation passed!"
|
|
332
|
+
```
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oma-translation
|
|
3
|
+
description: Translate or revise localized UI strings and prose while preserving
|
|
4
|
+
meaning, terminology, placeholders, and structure.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Translation - Context-Aware Localization
|
|
8
|
+
|
|
9
|
+
## Scheduling
|
|
10
|
+
|
|
11
|
+
### Goal
|
|
12
|
+
Translate, review, or adapt multilingual content faithfully and naturally while preserving the
|
|
13
|
+
parts that must remain exact: placeholders, code, links, formatting, terminology, and file
|
|
14
|
+
structure.
|
|
15
|
+
|
|
16
|
+
### Intent signature
|
|
17
|
+
- Translate, localize, review a translation, adapt copy, or create a glossary/style guide.
|
|
18
|
+
- Update target-language files after the source changed.
|
|
19
|
+
|
|
20
|
+
### When to use
|
|
21
|
+
- UI strings, error messages, locale files, documentation, reports, marketing copy, and prose.
|
|
22
|
+
- Review of existing translations for accuracy, register, terminology, or naturalness.
|
|
23
|
+
|
|
24
|
+
### When NOT to use
|
|
25
|
+
- i18n infrastructure, locale registration, or key extraction -> use the relevant development skill.
|
|
26
|
+
- Date/pluralization APIs or other code-level localization -> use the owning code-domain skill.
|
|
27
|
+
|
|
28
|
+
### Expected inputs
|
|
29
|
+
- Source text, target language or locale, content type, and requested output mode.
|
|
30
|
+
- Existing locale files, glossary, surrounding context, and optional author sample.
|
|
31
|
+
- Placeholder and formatting constraints when the source is structured.
|
|
32
|
+
|
|
33
|
+
### Expected outputs
|
|
34
|
+
- Natural target-language text or evidence-backed review findings.
|
|
35
|
+
- Exact preservation of placeholders, code spans, links, headings, list structure, and locale keys.
|
|
36
|
+
- Translator notes only for meaningful ambiguity or necessary cultural explanation.
|
|
37
|
+
|
|
38
|
+
### Dependencies
|
|
39
|
+
- Target profile: `resources/lang/{code}.md`, if one exists.
|
|
40
|
+
- `resources/translation-rubric.md` for substantive content or review.
|
|
41
|
+
- Selected external prose-style skills for English and Korean; loading and execution
|
|
42
|
+
are defined in `resources/style-skills.md`.
|
|
43
|
+
- Shared prose diagnostics and translation exceptions for other target languages.
|
|
44
|
+
- Existing siblings and glossary when translating into a project.
|
|
45
|
+
|
|
46
|
+
### Control-flow features
|
|
47
|
+
- Branches by UI batch versus prose, profile availability, locale variant, ambiguity, and review mode.
|
|
48
|
+
- Loads only the target profile and references required for the content type.
|
|
49
|
+
- Edits files only when the user asked for file changes.
|
|
50
|
+
|
|
51
|
+
## Structural Flow
|
|
52
|
+
|
|
53
|
+
### Entry
|
|
54
|
+
1. Identify source, target locale, content type, and whether this is translate, review, or diff-sync.
|
|
55
|
+
2. Preserve exact tokens first: placeholders, code, URLs, keys, and structural markers.
|
|
56
|
+
3. Load the target profile if available; read sibling translations when the target is in a project.
|
|
57
|
+
|
|
58
|
+
### Scenes
|
|
59
|
+
1. **PREPARE**: Resolve locale, output mode, target audience, and protected syntax.
|
|
60
|
+
2. **ACQUIRE**: Read the target profile, relevant siblings, glossary, and source context. Select the substantive prose-style route in the canonical workflow; keep short independent UI strings on the lightweight path.
|
|
61
|
+
3. **REASON**: Determine meaning, register, terminology, cultural references, and any ambiguity. Decide whether an idiom should be interpreted, substituted, or retained.
|
|
62
|
+
4. **ACT**: Write natural target-language text. Match established project patterns without adding meaning, opinion, or personality.
|
|
63
|
+
5. **VERIFY**: Check protected syntax and structure. For substantive text, check meaning, terminology, register, and target-language naturalness against the rubric.
|
|
64
|
+
6. **FINALIZE**: Return the requested text, patch, or review with only supported findings.
|
|
65
|
+
|
|
66
|
+
### Transitions
|
|
67
|
+
- A profile exists -> load it; its target-language rules take precedence over shared guidance.
|
|
68
|
+
- A locale variant is required -> resolve it before drafting.
|
|
69
|
+
- No profile exists -> use shared guidance and note that limit once; do not borrow another language's rules.
|
|
70
|
+
- A short independent UI string with established siblings -> use protected-syntax and sibling checks; the full prose review is optional.
|
|
71
|
+
- Long prose, documentation, marketing copy, mixed tables/code, or review mode -> use the rubric.
|
|
72
|
+
- Ambiguous meaning that changes the result -> ask one targeted question or flag the choice.
|
|
73
|
+
- Diff-sync -> modify only source-touched equivalents, located by headings and surrounding context, not line number.
|
|
74
|
+
|
|
75
|
+
### Failure and recovery
|
|
76
|
+
| Failure | Recovery |
|
|
77
|
+
|---|---|
|
|
78
|
+
| Missing target context | Use the source register and state the assumption, unless the ambiguity changes meaning |
|
|
79
|
+
| Conflicting literal wording and project convention | Follow the established target convention and explain a material difference |
|
|
80
|
+
| Placeholder or structure mismatch | Revise before emitting or applying a patch |
|
|
81
|
+
| Missing profile | Use shared guidance and identify the coverage limit once |
|
|
82
|
+
| Unclear cultural reference | Add a concise note only when the target audience needs it |
|
|
83
|
+
| Selected external style skill unavailable | Complete supported translation checks and report the unavailable style pass; do not substitute another language's style skill or claim it ran |
|
|
84
|
+
|
|
85
|
+
### Exit
|
|
86
|
+
- Success: the text is faithful, natural, structurally safe, and checked in proportion to content risk.
|
|
87
|
+
- Partial: unresolved ambiguity, missing context, or an unavailable selected style pass
|
|
88
|
+
is stated without inventing an answer or claiming that pass ran.
|
|
89
|
+
|
|
90
|
+
### Language profile loading
|
|
91
|
+
|
|
92
|
+
Resolve the BCP 47 primary subtag and load one matching profile when present:
|
|
93
|
+
|
|
94
|
+
| Target | Profile |
|
|
95
|
+
|---|---|
|
|
96
|
+
| Korean | `resources/lang/ko.md` |
|
|
97
|
+
| Japanese | `resources/lang/ja.md` |
|
|
98
|
+
| Chinese | `resources/lang/zh.md`; resolve the declared variant |
|
|
99
|
+
| English | `resources/lang/en.md` |
|
|
100
|
+
| Other | no profile; use shared guidance |
|
|
101
|
+
|
|
102
|
+
Profiles define typography, register, and target-language checks. Shared guidance explains common
|
|
103
|
+
risks. A profile wins if they conflict. Add a new profile from `resources/lang/_template.md` only
|
|
104
|
+
when the task is to extend this skill.
|
|
105
|
+
|
|
106
|
+
### Translation method
|
|
107
|
+
|
|
108
|
+
1. Read for meaning, intended effect, domain terms, and protected syntax. Identify figurative
|
|
109
|
+
wording as **interpret**, **substitute**, or **retain**. Do not add a new metaphor or remove an
|
|
110
|
+
intentional one without a reason.
|
|
111
|
+
2. Choose register from the source, target audience, and sibling translations. Apply
|
|
112
|
+
`translation_voice` from `.agents/oma-config.yaml` only as a rhythm/formality preference:
|
|
113
|
+
`formal`, `balanced` (default), or `interpreter`. It never overrides meaning or target norms.
|
|
114
|
+
3. Reconstruct in the target language. Change word order, split or merge sentences, and omit
|
|
115
|
+
implied subjects only when the target language calls for it.
|
|
116
|
+
4. Preserve author style only where it belongs: prose, dialogue, adaptation, or explicitly
|
|
117
|
+
user-authored documentation. Match observable rhythm and diction, never add facts, stance,
|
|
118
|
+
jokes, first person, or stronger emotion.
|
|
119
|
+
|
|
120
|
+
### Verification
|
|
121
|
+
|
|
122
|
+
Always check:
|
|
123
|
+
|
|
124
|
+
- Every placeholder, code span, identifier, URL, and locale key is unchanged.
|
|
125
|
+
- Headings, links, table rows, list nesting, and code blocks retain their structure.
|
|
126
|
+
- The target follows its profile's typography and register rules.
|
|
127
|
+
- Existing siblings are matched when they establish terminology or UI style.
|
|
128
|
+
|
|
129
|
+
For substantive content and review mode, also check the rubric: meaning, naturalness,
|
|
130
|
+
terminology, register, cultural fit, and emotional force. Apply the selected target-language
|
|
131
|
+
style route while preserving intentional source style and content.
|
|
132
|
+
|
|
133
|
+
### Review mode
|
|
134
|
+
|
|
135
|
+
Review from evidence, not from an expectation that every draft is machine-translated. Record zero
|
|
136
|
+
findings when no material defect is confirmed. Separate:
|
|
137
|
+
|
|
138
|
+
- **Accuracy or safety defects**: changed meaning, broken placeholder, incorrect term, or wrong register.
|
|
139
|
+
- **Supported style findings**: a concrete target-language issue with a reason and proposed fix.
|
|
140
|
+
- **Preferences**: optional alternatives that do not make the existing translation wrong.
|
|
141
|
+
|
|
142
|
+
Do not rewrite a sound translation merely to produce findings.
|
|
143
|
+
|
|
144
|
+
### Batch and diff-sync work
|
|
145
|
+
|
|
146
|
+
For batches, read the complete set first, translate values only, and maintain one terminology and
|
|
147
|
+
register decision. Verify placeholders and key structure across the set.
|
|
148
|
+
|
|
149
|
+
For diff-sync, map each source hunk by heading and surrounding context. Touch only the affected
|
|
150
|
+
target section; leave unrelated text byte-identical. State updated sections, skipped cosmetic
|
|
151
|
+
hunks, and material terminology decisions.
|
|
152
|
+
|
|
153
|
+
### Output formats
|
|
154
|
+
|
|
155
|
+
For a single text, present the translation and brief notes for ambiguities or adaptations. For
|
|
156
|
+
files, preserve the input format and modify only requested values. For review, show the original,
|
|
157
|
+
the suggested revision only when warranted, and the evidence for each finding.
|
|
158
|
+
|
|
159
|
+
## Logical Operations
|
|
160
|
+
|
|
161
|
+
### Actions
|
|
162
|
+
| Action | SSL primitive | Evidence |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| Resolve locale and mode | `SELECT` | User request and file context |
|
|
165
|
+
| Read profile and siblings conditionally | `READ` | Target profile, glossary, nearby translations |
|
|
166
|
+
| Protect syntax and structure | `VALIDATE` | Source tokens and structural markers |
|
|
167
|
+
| Infer meaning and register | `INFER` | Source, audience, project convention |
|
|
168
|
+
| Translate or revise | `WRITE` | Target text or requested file patch |
|
|
169
|
+
| Review substantive content | `VALIDATE` | Rubric and concrete findings |
|
|
170
|
+
| Report result and limits | `NOTIFY` | Translation, patch, or review |
|
|
171
|
+
|
|
172
|
+
### Tools and instruments
|
|
173
|
+
- Native search/read for local source and sibling translations.
|
|
174
|
+
- Configured `code_intelligence` capability when available for code-context navigation; native
|
|
175
|
+
search/read when it is unavailable or times out.
|
|
176
|
+
- Target profile, rubric, selected prose-style implementation, and language-template
|
|
177
|
+
resources as selected by the canonical workflow.
|
|
178
|
+
|
|
179
|
+
### Canonical workflow path
|
|
180
|
+
1. Resolve target locale and protect exact syntax.
|
|
181
|
+
2. Load the one applicable language profile and relevant siblings; load the rubric for substantive
|
|
182
|
+
content or review. For substantive prose, select by the **target** BCP 47 primary subtag:
|
|
183
|
+
- `en` (including regional variants): load `resources/style-skills.md` and resolve `humanizer`.
|
|
184
|
+
- `ko` (including regional variants): load that resource and resolve `humanize-korean`.
|
|
185
|
+
- Other languages: load `../_shared/core/anti-ai-prose.md` with
|
|
186
|
+
`resources/anti-ai-patterns.md` and the target profile.
|
|
187
|
+
Short independent UI strings with established siblings need protected-syntax and
|
|
188
|
+
sibling checks; they do not require an external prose-style pass.
|
|
189
|
+
3. Infer meaning, register, terminology, and figurative-language handling.
|
|
190
|
+
4. Draft in natural target order and project style.
|
|
191
|
+
5. Apply the selected style implementation to the draft, preserving review-only mode
|
|
192
|
+
and translation fidelity. Then verify exact syntax, terminology, source claims,
|
|
193
|
+
structure and diff-sync scope, and check substantive content against the rubric.
|
|
194
|
+
6. Emit the requested translation, patch, or evidence-backed review. State a missing-profile or
|
|
195
|
+
context limitation when material.
|
|
196
|
+
|
|
197
|
+
### Resource scope
|
|
198
|
+
| Scope | Resource target |
|
|
199
|
+
|---|---|
|
|
200
|
+
| `LOCAL_FS` | Source/target files, glossaries, language profiles |
|
|
201
|
+
| `CODEBASE` | Sibling translations and code context |
|
|
202
|
+
| `PROCESS` | Syntax checks and selected external-skill acquisition or local gates |
|
|
203
|
+
| `NETWORK` | Upstream style-skill retrieval when not already available |
|
|
204
|
+
| `MEMORY` | Locale, terminology, register, protected syntax, unresolved ambiguity |
|
|
205
|
+
|
|
206
|
+
### Effects and side effects
|
|
207
|
+
- Produces translated text or review findings.
|
|
208
|
+
- Changes locale/docs files only when explicitly requested.
|
|
209
|
+
- Retains source structure, identifiers, and placeholders.
|
|
210
|
+
- May retrieve a missing selected style-skill bundle; reuses installed or cached
|
|
211
|
+
instructions. Upstream intermediate files stay in a writable scratch workspace.
|
|
212
|
+
|
|
213
|
+
### Guardrails
|
|
214
|
+
1. Preserve meaning, protected syntax, and file structure before stylistic preference.
|
|
215
|
+
2. Do not invent facts, opinions, emotional emphasis, examples, citations, or personality.
|
|
216
|
+
3. Do not use a different language's profile as a substitute.
|
|
217
|
+
4. Do not change untouched sections during diff-sync.
|
|
218
|
+
5. Do not claim completion of a check that the available source cannot support.
|
|
219
|
+
|
|
220
|
+
## References
|
|
221
|
+
|
|
222
|
+
- Translation rubric: `resources/translation-rubric.md` (load for substantive content or review)
|
|
223
|
+
- Selected style skills: `resources/style-skills.md` (English or Korean substantive prose)
|
|
224
|
+
- Common prose diagnostics: `../_shared/core/anti-ai-prose.md` (other target languages, with translation exceptions when prose style needs review)
|
|
225
|
+
- Translation exceptions and grammar diagnostics: `resources/anti-ai-patterns.md` (other target languages, with common diagnostics when prose style needs review)
|
|
226
|
+
- Target profiles: `resources/lang/{ko,ja,zh,en}.md` (load one matching profile)
|
|
227
|
+
- Profile template: `resources/lang/_template.md` (only when adding a profile)
|
|
228
|
+
- Shared context loading: `../_shared/core/context-loading.md`
|
|
229
|
+
- Shared quality principles: `../_shared/core/quality-principles.md`
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Translation prose diagnostics
|
|
2
|
+
|
|
3
|
+
Load this file with `../../_shared/core/anti-ai-prose.md` and the target
|
|
4
|
+
`lang/{code}.md` when reviewing prose in a language without a selected external
|
|
5
|
+
style skill. English and Korean use `style-skills.md` instead. Common pattern
|
|
6
|
+
definitions live in the shared resource; this file owns fidelity exceptions and
|
|
7
|
+
translation-specific rules for the remaining language routes.
|
|
8
|
+
|
|
9
|
+
A target profile takes precedence for target-language usage; do not borrow a
|
|
10
|
+
different language's rules.
|
|
11
|
+
|
|
12
|
+
## Fidelity exceptions
|
|
13
|
+
|
|
14
|
+
- Preserve meaning, claims, named sources, qualifiers, emotional force, terminology,
|
|
15
|
+
placeholders, code, links, locale keys, and required document structure.
|
|
16
|
+
- Do not add praise, authority, certainty, opinions, jokes, first person, examples,
|
|
17
|
+
numbers, or citations. A portability finding is not permission to invent specifics.
|
|
18
|
+
- Do not remove source content merely because a shared diagnostic flags it. In strict
|
|
19
|
+
translation, preserve the claim and intended emphasis in natural target wording;
|
|
20
|
+
flag a source problem separately when material. Deletion or reorganization belongs
|
|
21
|
+
to authorized adaptation or revision, not automatic translation cleanup.
|
|
22
|
+
- Classify source figurative language as interpret, substitute,
|
|
23
|
+
or retain. Do not add mannered metaphors, and do not flatten intentional source voice.
|
|
24
|
+
- Retain an intentional ending, uncertainty, research
|
|
25
|
+
question, or rhetorical effect when fidelity requires it. Do not intensify it.
|
|
26
|
+
- Preserve headings, lists, tables, formatting, and quoted chatbot
|
|
27
|
+
language when they are source content. Do not introduce decorative structure.
|
|
28
|
+
- Use the target profile's vocabulary examples. Five or more flagged
|
|
29
|
+
terms in one paragraph prompt contextual review, not automatic substitutions.
|
|
30
|
+
- Follow the target profile's dash conventions with at most one per
|
|
31
|
+
paragraph. Reconstruct the clause instead of swapping punctuation;
|
|
32
|
+
compare sibling wording before deciding the target syntax.
|
|
33
|
+
- Preserve source cadence where natural. Do not import academic
|
|
34
|
+
sentence-length targets, first-person bans, or paragraph templates.
|
|
35
|
+
|
|
36
|
+
## Europeanized / Translation-ese Patterns
|
|
37
|
+
|
|
38
|
+
Patterns where the target text mimics source-language (typically English) grammar
|
|
39
|
+
instead of following native structure.
|
|
40
|
+
|
|
41
|
+
The categories below are shared. **Every example and every fix is
|
|
42
|
+
language-specific**, so the working version of each rule lives in
|
|
43
|
+
`lang/{code}.md` under "Localizations of shared rules". A profile may also
|
|
44
|
+
declare that a category does not apply to its language.
|
|
45
|
+
|
|
46
|
+
### Unnecessary Connectives
|
|
47
|
+
|
|
48
|
+
AI over-inserts logical connectives (*therefore, however, additionally,
|
|
49
|
+
furthermore, moreover*) where context already implies the relationship. If the
|
|
50
|
+
previous sentence already carries the logic, drop the connective and let the
|
|
51
|
+
clause boundary do the work.
|
|
52
|
+
|
|
53
|
+
### Passive Voice Abuse
|
|
54
|
+
|
|
55
|
+
English uses the passive far more than most target languages. Restructure to
|
|
56
|
+
active with an explicit agent unless the target genuinely prefers the passive in
|
|
57
|
+
that position, or the agent is unknown or deliberately suppressed.
|
|
58
|
+
|
|
59
|
+
### Noun Pile-up (Long Modifier Chains)
|
|
60
|
+
|
|
61
|
+
English stacks modifiers before nouns. Most languages read better when the chain
|
|
62
|
+
is broken into shorter clauses.
|
|
63
|
+
|
|
64
|
+
Rule: 3 or more stacked modifiers before a noun → break into clauses. Some
|
|
65
|
+
languages need a tighter threshold; see the profile.
|
|
66
|
+
|
|
67
|
+
### Over-nominalization
|
|
68
|
+
|
|
69
|
+
English uses abstract nouns plus a light verb ("conduct an analysis") where most
|
|
70
|
+
languages prefer a single verb ("analyze"). Watch for light-verb constructions in
|
|
71
|
+
the target and collapse them.
|
|
72
|
+
|
|
73
|
+
### Awkward Pronoun Insertion
|
|
74
|
+
|
|
75
|
+
English requires explicit subjects. Pro-drop languages prefer omission when the
|
|
76
|
+
subject is clear from context, so calqued pronouns read as stammering.
|
|
77
|
+
|
|
78
|
+
Rule: if the subject has not changed and is clear from context, omit it. For
|
|
79
|
+
targets that are **not** pro-drop, the inverse applies: supply the subject the
|
|
80
|
+
source omitted rather than leaving a dangling clause.
|
|
81
|
+
|
|
82
|
+
### Cleft Sentence Calques
|
|
83
|
+
|
|
84
|
+
English "It is X that ..." and "What matters is X" structures should not be
|
|
85
|
+
calqued. Most languages express the same emphasis with word order or a focus
|
|
86
|
+
particle.
|
|
87
|
+
|
|
88
|
+
### Target-Language Typography and Fragments
|
|
89
|
+
|
|
90
|
+
Sentence-completion requirements, fragment tolerance by position, quotation
|
|
91
|
+
marks, dash glyphs, spacing between scripts, counters, and date and number
|
|
92
|
+
formats are entirely language-specific.
|
|
93
|
+
|
|
94
|
+
There is no shared rule here. See the typography and sentence-completion sections
|
|
95
|
+
of `lang/{code}.md`.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Translation checks
|
|
100
|
+
|
|
101
|
+
Check protected syntax and document structure first. Then use the shared diagnostics
|
|
102
|
+
with the fidelity exceptions above, the translation rubric for substantive text,
|
|
103
|
+
and the target profile's grammar and typography checks. Report only supported accuracy or
|
|
104
|
+
style defects, separate optional preferences, and accept zero findings.
|