@pzy560117/codex-harness 0.1.3 → 0.1.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 +164 -27
- package/bin/harness.js +7 -7
- package/lib/commands/doctor.js +12 -12
- package/lib/commands/init.js +105 -105
- package/lib/commands/run.js +22 -22
- package/lib/commands/verify.js +12 -12
- package/lib/main.js +62 -62
- package/lib/powershell/find-powershell.js +20 -20
- package/lib/powershell/invoke-script.js +34 -34
- package/lib/project/assert-initialized.js +20 -20
- package/lib/project/detect-project-root.js +5 -5
- package/lib/release/cache-layout.js +34 -34
- package/lib/release/download-release.js +25 -25
- package/lib/release/package-source-layout.js +13 -13
- package/lib/release/release-config.js +6 -6
- package/lib/release/release-manifest.js +76 -76
- package/lib/release/resolve-package-source.js +21 -21
- package/lib/release/resolve-version.js +26 -26
- package/lib/release/unpack-zip.js +25 -25
- package/lib/release/verify-sha256.js +16 -16
- package/package-source/docs/codex-harness-engineering/templates/README.md +21 -20
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/init-autopilot/SKILL.md +17 -15
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/log-analysis-optimization/SKILL.md +5 -5
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/prd-writer-skill/SKILL.md +28 -28
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-e2e-planner/SKILL.md +11 -11
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-e2e-runner/SKILL.md +6 -6
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-mock-cleaner/SKILL.md +4 -4
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/SKILL.md +67 -67
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/agents/openai.yaml +7 -7
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/scripts/configure-qoder-codex-api.ps1 +278 -278
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/requirements-design-template/SKILL.md +87 -87
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/skills-index.md +12 -12
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-analyze/SKILL.md +34 -34
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-checklist/SKILL.md +8 -8
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-clarify/SKILL.md +28 -28
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-e2e-tasks/SKILL.md +12 -12
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-implement/SKILL.md +37 -37
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-plan/SKILL.md +140 -138
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-specify/SKILL.md +100 -100
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-tasks/SKILL.md +86 -86
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-verify/SKILL.md +144 -142
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/SKILL.md +145 -143
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/references/current-repo-notes.md +42 -41
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/references/github-samples.md +33 -33
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/scripts/collect-root-doc-facts.ps1 +174 -145
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/ai-integrity-and-originality.md +191 -191
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/citation-templates.md +99 -99
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/final-checklist.md +60 -60
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/photographer-booking-paper.md +85 -85
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/test-result-templates.md +22 -22
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/thesis-analysis-template.md +63 -63
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/update-codemaps/SKILL.md +31 -31
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/README.md +15 -15
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.analyze.md +60 -60
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.checklist.md +8 -8
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.clarify.md +28 -28
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.e2e-testing.md +10 -10
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.implement.md +56 -56
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.plan.md +137 -134
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.specify.md +100 -100
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.tasks.md +86 -86
- package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.verify.md +130 -130
- package/package-source/docs/codex-harness-engineering/templates/product/AGENTS.md +19 -0
- package/package-source/docs/codex-harness-engineering/templates/product/acceptance-criteria.md +47 -47
- package/package-source/docs/codex-harness-engineering/templates/product/difficulty-research.md +47 -47
- package/package-source/docs/codex-harness-engineering/templates/product/page-inventory.md +21 -21
- package/package-source/docs/codex-harness-engineering/templates/product/prd-lite.md +166 -158
- package/package-source/docs/codex-harness-engineering/templates/product/requirement-interface-matrix.md +37 -37
- package/package-source/docs/codex-harness-engineering/templates/product/state-matrix.yaml +116 -105
- package/package-source/docs/codex-harness-engineering/templates/prompts/AGENTS.md +15 -0
- package/package-source/docs/codex-harness-engineering/templates/prompts/controller-loop.md +88 -88
- package/package-source/docs/codex-harness-engineering/templates/prompts/failure-triage.md +71 -69
- package/package-source/docs/codex-harness-engineering/templates/prompts/harness-audit.md +54 -52
- package/package-source/docs/codex-harness-engineering/templates/prompts/implement-one-task.md +150 -148
- package/package-source/docs/codex-harness-engineering/templates/prompts/repair-one-finding.md +70 -67
- package/package-source/docs/codex-harness-engineering/templates/prompts/review-one-task.md +45 -43
- package/package-source/docs/codex-harness-engineering/templates/prompts/review-stage1-spec.md +111 -109
- package/package-source/docs/codex-harness-engineering/templates/prompts/review-stage2-quality.md +82 -80
- package/package-source/docs/codex-harness-engineering/templates/prompts/visual-evaluator.md +80 -78
- package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/backend-worker.md +41 -41
- package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/docs-worker.md +28 -28
- package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/frontend-worker.md +46 -46
- package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/harness-writer.md +40 -40
- package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/test-runner.md +27 -27
- package/package-source/docs/codex-harness-engineering/templates/runtime/AGENTS.md +66 -50
- package/package-source/docs/codex-harness-engineering/templates/runtime/codex-loop.ps1 +2129 -231
- package/package-source/docs/codex-harness-engineering/templates/runtime/doctor.ps1 +224 -224
- package/package-source/docs/codex-harness-engineering/templates/runtime/project-task-template.json +42 -39
- package/package-source/docs/codex-harness-engineering/templates/runtime/scripts/test-install-modes.ps1 +2 -2
- package/package-source/docs/codex-harness-engineering/templates/runtime/smoke-task.json +52 -52
- package/package-source/docs/codex-harness-engineering/templates/runtime/task-run-profile.json +86 -86
- package/package-source/docs/codex-harness-engineering/templates/runtime/task.json +11 -8
- package/package-source/docs/codex-harness-engineering/templates/runtime/verify.ps1 +21 -21
- package/package-source/docs/codex-harness-engineering/templates/scripts/AGENTS.md +15 -0
- package/package-source/docs/codex-harness-engineering/templates/scripts/ai-workflow/check-ai-sync-drift.ps1 +205 -205
- package/package-source/docs/codex-harness-engineering/templates/scripts/harness/harness-governance-check.ps1 +864 -366
- package/package-source/docs/codex-harness-engineering/templates/spec/10-data-model.md +23 -7
- package/package-source/docs/codex-harness-engineering/templates/spec/11-security-design.md +30 -13
- package/package-source/docs/codex-harness-engineering/templates/spec/AGENTS.md +15 -0
- package/package-source/docs/codex-harness-engineering/templates/testing/ACCEPTANCE_CRITERIA.md +39 -39
- package/package-source/docs/codex-harness-engineering/templates/testing/ACCEPTANCE_EXAMPLES.md +37 -37
- package/package-source/docs/codex-harness-engineering/templates/testing/AGENTS.md +19 -0
- package/package-source/docs/codex-harness-engineering/templates/testing/EVIDENCE_PROTOCOL.md +54 -48
- package/package-source/docs/codex-harness-engineering/templates/testing/NATURAL_LANGUAGE_TEST_CASES.md +5 -4
- package/package-source/docs/codex-harness-engineering/templates/testing/REGRESSION_PLAN.md +28 -20
- package/package-source/docs/codex-harness-engineering/templates/testing/RISK_BASED_TEST_PLAN.md +16 -16
- package/package-source/docs/codex-harness-engineering/templates/testing/TEST_STRATEGY.md +98 -97
- package/package-source/docs/codex-harness-engineering/templates/testing/TRACEABILITY_MATRIX.md +6 -5
- package/package-source/docs/codex-harness-engineering/templates/testing/coverage-policy.md +25 -25
- package/package-source/docs/codex-harness-engineering/templates/testing/e2e-plan.md +139 -139
- package/package-source/docs/codex-harness-engineering/templates/testing/failure-findings.example.json +3 -3
- package/package-source/docs/codex-harness-engineering/templates/testing/failure-triage.md +62 -62
- package/package-source/docs/codex-harness-engineering/templates/testing/test-data-plan.md +36 -36
- package/package-source/docs/codex-harness-engineering/templates/testing/test-report.md +85 -41
- package/package-source/docs/codex-harness-engineering/templates/testing/verify-matrix.md +15 -5
- package/package-source/docs/codex-harness-engineering/templates/tools/AGENTS.md +14 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/acceptance-lint.ps1 +37 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/architecture-lint.ps1 +150 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/backend-lint.ps1 +137 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/business-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/component-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/config-lint.ps1 +159 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/context-lint.ps1 +187 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/contract-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/data-lint.ps1 +37 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/directory-lint.ps1 +152 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/docs-lint.ps1 +40 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/impact-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/integration-lint.ps1 +37 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/mobile-lint.ps1 +37 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/observability-lint.ps1 +137 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/performance-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/refactor-lint.ps1 +137 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/security-lint.ps1 +159 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/session-lint.ps1 +126 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/spec-lint.ps1 +285 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/state-lint.ps1 +137 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/style-lint.ps1 +155 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/testing-lint.ps1 +192 -0
- package/package-source/docs/codex-harness-engineering/templates/tools/harness/ui-lint.ps1 +148 -0
- package/package-source/docs/codex-harness-engineering/templates/trace/AGENTS.md +16 -0
- package/package-source/docs/codex-harness-engineering/templates/trace/eval-case.yaml +24 -24
- package/package-source/docs/codex-harness-engineering/templates/trace/trace.schema.json +101 -101
- package/package.json +23 -23
- package/package-source/AGENTS.md +0 -57
- package/package-source/PACKAGE.md +0 -49
- package/package-source/README.md +0 -81
- package/package-source/docs/codex-harness-engineering/templates/bootstrap-codex-harness.ps1 +0 -746
- package/package-source/docs/codex-harness-engineering/templates/ci/github-action-codex-review.yml +0 -110
- package/package-source/docs/codex-harness-engineering/templates/ci/github-action-codex-task.yml +0 -46
- package/package-source/docs/codex-harness-engineering/templates/config/agents/architect.toml +0 -17
- package/package-source/docs/codex-harness-engineering/templates/config/agents/backend-worker.toml +0 -14
- package/package-source/docs/codex-harness-engineering/templates/config/agents/docs-researcher.toml +0 -13
- package/package-source/docs/codex-harness-engineering/templates/config/agents/docs-worker.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/agents/explorer.toml +0 -14
- package/package-source/docs/codex-harness-engineering/templates/config/agents/failure-triage.toml +0 -18
- package/package-source/docs/codex-harness-engineering/templates/config/agents/frontend-worker.toml +0 -14
- package/package-source/docs/codex-harness-engineering/templates/config/agents/harness-writer.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/agents/planner.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/agents/readonly-research.toml +0 -13
- package/package-source/docs/codex-harness-engineering/templates/config/agents/reviewer.toml +0 -13
- package/package-source/docs/codex-harness-engineering/templates/config/agents/security-reviewer.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/agents/stage1-reviewer.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/agents/stage2-reviewer.toml +0 -16
- package/package-source/docs/codex-harness-engineering/templates/config/agents/test-planner.toml +0 -17
- package/package-source/docs/codex-harness-engineering/templates/config/agents/test-runner.toml +0 -14
- package/package-source/docs/codex-harness-engineering/templates/config/agents/visual-reviewer.toml +0 -15
- package/package-source/docs/codex-harness-engineering/templates/config/codex-agent-roles.md +0 -24
- package/package-source/docs/codex-harness-engineering/templates/config/codex-config.toml +0 -38
- package/package-source/docs/codex-harness-engineering/templates/config/codex-readme.md +0 -67
- package/package-source/docs/codex-harness-engineering/templates/config/env-check.ps1 +0 -40
- package/package-source/docs/codex-harness-engineering/templates/config/env.example +0 -12
- package/package-source/docs/codex-harness-engineering/templates/config/global-AGENTS.md +0 -40
- package/package-source/docs/codex-harness-engineering/templates/config/global-config.toml +0 -19
- package/package-source/docs/codex-harness-engineering/templates/config/mcp-config.toml +0 -38
- package/package-source/docs/codex-harness-engineering/templates/config/rules/agents.md +0 -115
- package/package-source/docs/codex-harness-engineering/templates/config/rules/coding-style.md +0 -74
- package/package-source/docs/codex-harness-engineering/templates/config/rules/constitution.md +0 -290
- package/package-source/docs/codex-harness-engineering/templates/config/rules/git.rules +0 -41
- package/package-source/docs/codex-harness-engineering/templates/config/rules/harness.rules +0 -29
- package/package-source/docs/codex-harness-engineering/templates/config/rules/patterns.md +0 -59
- package/package-source/docs/codex-harness-engineering/templates/config/rules/safety.rules +0 -35
- package/package-source/docs/codex-harness-engineering/templates/config/rules/testing.md +0 -34
- package/package-source/docs/codex-harness-engineering/templates/context/architecture-brief.md +0 -58
- package/package-source/docs/codex-harness-engineering/templates/context/dev-plan.md +0 -160
- package/package-source/docs/codex-harness-engineering/templates/context/feature-pack.md +0 -101
- package/package-source/docs/codex-harness-engineering/templates/context/repo-map.md +0 -78
- package/package-source/docs/codex-harness-engineering/templates/context/service-dependency-matrix.yaml +0 -25
- package/package-source/docs/codex-harness-engineering/templates/contracts/README.md +0 -16
- package/package-source/docs/codex-harness-engineering/templates/contracts/openapi.yaml +0 -182
- package/package-source/docs/codex-harness-engineering/templates/contracts/orval.config.ts +0 -20
- package/package-source/docs/codex-harness-engineering/templates/contracts/prism-usage.md +0 -34
- package/package-source/docs/codex-harness-engineering/templates/design/ai-image-brief.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/design/assets/README.md +0 -24
- package/package-source/docs/codex-harness-engineering/templates/design/component-map.md +0 -31
- package/package-source/docs/codex-harness-engineering/templates/design/design-brief.md +0 -178
- package/package-source/docs/codex-harness-engineering/templates/design/design-tokens.json +0 -88
- package/package-source/docs/codex-harness-engineering/templates/design/frontend-architecture.md +0 -147
- package/package-source/docs/codex-harness-engineering/templates/design/image-to-frontend-spec.md +0 -108
- package/package-source/docs/codex-harness-engineering/templates/design/screen-states.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/design/ui-image-review.md +0 -60
- package/package-source/docs/codex-harness-engineering/templates/design/visual-parity-review.md +0 -124
- package/package-source/docs/codex-harness-engineering/templates/docs/architecture-constraints.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/docs/demo-readme.md +0 -73
- package/package-source/docs/codex-harness-engineering/templates/docs/frontend-quality-rules.md +0 -138
- package/package-source/docs/codex-harness-engineering/templates/docs/governance-auto-repair.md +0 -80
- package/package-source/docs/codex-harness-engineering/templates/docs/harness-architecture.md +0 -78
- package/package-source/docs/codex-harness-engineering/templates/docs/install-manifest-governance.md +0 -307
- package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-architecture.md +0 -219
- package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-import.md +0 -108
- package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-lint.md +0 -98
- package/package-source/docs/codex-harness-engineering/templates/docs/new-project-checklist.md +0 -7
- package/package-source/docs/codex-harness-engineering/templates/docs/new-project-usage.md +0 -152
- package/package-source/docs/codex-harness-engineering/templates/docs/project-agents-template.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/docs/prompt-knowledge-integration.md +0 -89
- package/package-source/docs/codex-harness-engineering/templates/docs/regression-rules.md +0 -45
- package/package-source/docs/codex-harness-engineering/templates/docs/requirement-prep-kit/README.md +0 -3
- package/package-source/docs/codex-harness-engineering/templates/docs/rule-governance.md +0 -98
- package/package-source/docs/codex-harness-engineering/templates/docs/service-dependency-matrix.md +0 -55
- package/package-source/docs/codex-harness-engineering/templates/docs/spec-to-ui-to-code-workflow.md +0 -196
- package/package-source/docs/codex-harness-engineering/templates/docs/task-session-strategy.md +0 -116
- package/package-source/docs/codex-harness-engineering/templates/docs/team-knowledge-sync.md +0 -187
- package/package-source/docs/codex-harness-engineering/templates/docs/trace-format.md +0 -74
- package/package-source/docs/codex-harness-engineering/templates/governance/branch-protection-checklist.md +0 -50
- package/package-source/docs/codex-harness-engineering/templates/governance/feedback-evolution-loop.md +0 -55
- package/package-source/docs/codex-harness-engineering/templates/governance/retry-budget.yaml +0 -30
- package/package-source/docs/codex-harness-engineering/templates/governance/risk-levels.yaml +0 -53
- package/package-source/docs/codex-harness-engineering/templates/governance/sandbox-policy.md +0 -13
- package/package-source/docs/codex-harness-engineering/templates/hooks/hook-stop-verify.ps1 +0 -818
- package/package-source/docs/codex-harness-engineering/templates/hooks/hooks.json +0 -40
- package/package-source/docs/codex-harness-engineering/templates/knowledge/catalog.md +0 -6
- package/package-source/docs/codex-harness-engineering/templates/knowledge/decisions/DECISION-HARNESS-001.md +0 -39
- package/package-source/docs/codex-harness-engineering/templates/knowledge/guidelines/GUIDELINE-RULES-001.md +0 -30
- package/package-source/docs/codex-harness-engineering/templates/knowledge/knowledge-catalog.md +0 -41
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/memory/constitution.md +0 -72
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/scripts/powershell/check-prerequisites.ps1 +0 -148
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/scripts/powershell/common.ps1 +0 -137
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/scripts/powershell/create-new-feature.ps1 +0 -279
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/scripts/powershell/setup-plan.ps1 +0 -61
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/scripts/powershell/update-agent-context.ps1 +0 -448
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/agent-file-template.md +0 -28
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/checklist-template.md +0 -40
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/e2e-plan-template.md +0 -38
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/plan-template.md +0 -393
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/spec-template.md +0 -307
- package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/tasks-template.md +0 -244
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/architecture/constraints.md +0 -98
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/README.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/START-HERE.md +0 -53
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/agent-ecosystem-practices.md +0 -140
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/best-practices.md +0 -267
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/codex-global-rules-example.md +0 -292
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/goal-templates.md +0 -380
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/README.md +0 -64
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/contracts/openapi.yaml +0 -25
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/contracts/orval.config.ts +0 -20
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/ai-image-brief.md +0 -44
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/component-map.md +0 -17
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/design-brief.md +0 -58
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/frontend-architecture.md +0 -107
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/image-to-frontend-spec.md +0 -72
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/screen-states.md +0 -25
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/ui-image-review.md +0 -38
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/difficulty-research.md +0 -39
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/page-inventory.md +0 -5
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/prd-lite.md +0 -41
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/requirement-interface-matrix.md +0 -32
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/state-matrix.yaml +0 -14
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/generated/model/Ticket.ts +0 -6
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/generated/ticket-api.ts +0 -35
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/http-client.ts +0 -8
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/ui/TicketFilterBar.tsx +0 -72
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/plans/features/ticket-filter.dev-plan.md +0 -48
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/progress.txt +0 -1
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/stories/TicketFilterBar.stories.tsx +0 -33
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/task.json +0 -54
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/traces/DEMO-TICKET-FILTER-001-20260422-120000.json +0 -74
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/verify.ps1 +0 -42
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/global-rules-and-bootstrap.md +0 -415
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/goal-harness-integration-guide.md +0 -364
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/implementation-flow.md +0 -288
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/implementation-guide.md +0 -25
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/mode-matrix.md +0 -57
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/project-agents-template.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/spec-to-ui-to-code-workflow.md +0 -196
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/superpowers-codex-solo-builder-playbook.md +0 -676
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/component-map.md +0 -31
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/design-brief.md +0 -178
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/design-tokens.json +0 -88
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/frontend-architecture.md +0 -147
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/image-to-frontend-spec.md +0 -108
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/screen-states.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/visual-parity-review.md +0 -124
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/frontend-quality-rules.md +0 -138
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/AGENTS.md +0 -165
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/CHANGELOG.md +0 -149
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/CLAUDE.md +0 -61
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/CODE_OF_CONDUCT.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/CONTRIBUTING.md +0 -465
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/README.md +0 -1390
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/SECURITY.md +0 -53
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/SPONSORING.md +0 -43
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/SPONSORS.md +0 -59
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/TROUBLESHOOTING.md +0 -446
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/architect.md +0 -232
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/build-error-resolver.md +0 -119
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/chief-of-staff.md +0 -155
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/code-reviewer.md +0 -238
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/cpp-build-resolver.md +0 -91
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/cpp-reviewer.md +0 -79
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/database-reviewer.md +0 -94
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/doc-updater.md +0 -110
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/docs-lookup.md +0 -68
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/e2e-runner.md +0 -110
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/go-build-resolver.md +0 -95
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/go-reviewer.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/harness-optimizer.md +0 -35
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/java-build-resolver.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/java-reviewer.md +0 -105
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/kotlin-build-resolver.md +0 -119
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/loop-operator.md +0 -37
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/planner.md +0 -215
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/python-reviewer.md +0 -106
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/pytorch-build-resolver.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/refactor-cleaner.md +0 -92
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/rust-build-resolver.md +0 -149
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/rust-reviewer.md +0 -95
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/security-reviewer.md +0 -112
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/tdd-guide.md +0 -96
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/agents/typescript-reviewer.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/aside.md +0 -173
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/build-fix.md +0 -64
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/checkpoint.md +0 -78
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/claw.md +0 -51
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/code-review.md +0 -43
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/context-budget.md +0 -29
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/cpp-build.md +0 -173
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/cpp-review.md +0 -140
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/cpp-test.md +0 -257
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/docs.md +0 -32
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/e2e.md +0 -389
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/eval.md +0 -122
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/evolve.md +0 -194
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/go-build.md +0 -183
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/go-review.md +0 -156
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/go-test.md +0 -274
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/gradle-build.md +0 -72
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/harness-audit.md +0 -72
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/instinct-export.md +0 -67
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/instinct-import.md +0 -117
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/instinct-status.md +0 -59
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/kotlin-build.md +0 -176
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/kotlin-review.md +0 -144
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/kotlin-test.md +0 -315
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/learn-eval.md +0 -117
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/learn.md +0 -70
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/loop-start.md +0 -33
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/loop-status.md +0 -25
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/model-route.md +0 -27
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/multi-backend.md +0 -162
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/multi-execute.md +0 -321
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/multi-frontend.md +0 -162
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/multi-plan.md +0 -278
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/plan.md +0 -118
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/pm2.md +0 -283
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/projects.md +0 -39
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/promote.md +0 -41
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/prompt-optimize.md +0 -37
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/prune.md +0 -31
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/python-review.md +0 -319
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/quality-gate.md +0 -30
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/refactor-clean.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/resume-session.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/rules-distill.md +0 -11
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/rust-build.md +0 -189
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/rust-review.md +0 -146
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/rust-test.md +0 -311
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/setup-pm.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/skill-create.md +0 -176
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/skill-health.md +0 -54
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/tdd.md +0 -330
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/test-coverage.md +0 -69
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/update-codemaps.md +0 -73
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/update-docs.md +0 -86
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/verify.md +0 -60
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/contexts/dev.md +0 -23
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/contexts/research.md +0 -30
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/contexts/review.md +0 -25
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/CLAUDE.md +0 -100
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/django-api-CLAUDE.md +0 -308
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/go-microservice-CLAUDE.md +0 -267
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/rust-api-CLAUDE.md +0 -285
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/saas-nextjs-CLAUDE.md +0 -166
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/examples/user-CLAUDE.md +0 -118
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/hooks/README.md +0 -220
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/plugins/README.md +0 -89
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/the-openclaw-guide.md +0 -471
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/the-security-guide.md +0 -206
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/README.md +0 -60
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/app/Mobile_App_Production_Readiness_Framework_/347/247/273/345/212/250/347/253/257/345/205/250/345/271/263/345/217/260/347/224/237/344/272/247/345/217/257/344/270/212/347/272/277/350/247/204/350/214/203.md +0 -2457
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/app/catalog.md +0 -33
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/architecture.md +0 -358
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/common/AI_Coding_Production_Control_Framework_AI/345/206/231/345/256/214/347/232/204/344/273/243/347/240/201/345/246/202/344/275/225/344/270/215/345/244/261/346/216/247.md +0 -2055
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/common/catalog.md +0 -34
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/initial-content.md +0 -296
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/integration-roadmap.md +0 -221
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/architecture-constraints.md +0 -83
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/frontend-quality-rules.md +0 -138
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/governance-auto-repair.md +0 -80
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/service-dependency-matrix.md +0 -55
- package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/speckit-requirements-gate.md +0 -260
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/PACKAGE.md +0 -49
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/README.md +0 -52
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/init-project.ps1 +0 -51
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/install-agent-here.ps1 +0 -57
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/install-agent.ps1 +0 -2506
- package/package-source/docs/codex-harness-engineering/templates/package-assets/root/install-user.ps1 +0 -29
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/agents.md +0 -115
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/coding-style.md +0 -74
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/constitution.md +0 -290
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/git.rules +0 -41
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/harness.rules +0 -29
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/patterns.md +0 -59
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/safety.rules +0 -35
- package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/testing.md +0 -34
- package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/check-ai-sync-drift.ps1 +0 -205
- package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/sync-ai-config-to-targets.ps1 +0 -826
- package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/sync-targets.example.json +0 -35
- package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/harness/harness-governance-check.ps1 +0 -366
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/HOW_TO_USE_SKILLS.md +0 -91
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/academic-mermaid-diagrams/SKILL.md +0 -172
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/ai-config-git-sync/SKILL.md +0 -152
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/ai-config-git-sync/references/command-recipes.md +0 -92
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/ai-ui-prompts/SKILL.md +0 -350
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/allure-report/SKILL.md +0 -230
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/allure-report/examples/usage.md +0 -99
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/allure-report/scripts/view-allure.ps1 +0 -28
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/api-auto-testing/SKILL.md +0 -329
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/api-contract-template/SKILL.md +0 -88
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/api-design/SKILL.md +0 -139
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/api-integration/SKILL.md +0 -302
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/architect/SKILL.md +0 -211
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/auto-commit/SKILL.md +0 -322
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/backend-patterns/SKILL.md +0 -582
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/baseline-ui/SKILL.md +0 -85
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/better-icons/SKILL.md +0 -129
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/brand-design-md/README.md +0 -215
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/brand-design-md/SKILL.md +0 -191
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/browser-e2e-testing/SKILL.md +0 -305
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/build-error-resolver/SKILL.md +0 -532
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/build-fix/SKILL.md +0 -34
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/business-rule-spec/SKILL.md +0 -99
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/celery-tasks/SKILL.md +0 -95
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/checkpoint/SKILL.md +0 -79
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/cicd/SKILL.md +0 -167
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/SKILL.md +0 -100
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/references/windows-openrouter-clash-playbook.md +0 -94
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/scripts/diagnose-openrouter-route.ps1 +0 -282
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/scripts/ensure-openrouter-rule.ps1 +0 -101
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/clickhouse-io/SKILL.md +0 -429
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/code-review/SKILL.md +0 -171
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/code-reviewer/SKILL.md +0 -104
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/coding-standards/SKILL.md +0 -520
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/consistency-checklist/SKILL.md +0 -57
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/continuous-learning/SKILL.md +0 -80
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/continuous-learning/config.json +0 -18
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/continuous-learning/evaluate-session.sh +0 -60
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/core-rules/SKILL.md +0 -78
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/data-flow-spec/SKILL.md +0 -63
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/database/SKILL.md +0 -147
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/deep-interview/SKILL.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/django-drf/SKILL.md +0 -97
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/doc-updater/SKILL.md +0 -452
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/docker/SKILL.md +0 -216
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/docx/SKILL.md +0 -105
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/e2e/SKILL.md +0 -364
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/e2e-runner/SKILL.md +0 -708
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/error-handling/SKILL.md +0 -245
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/eval/SKILL.md +0 -125
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/eval-harness/SKILL.md +0 -226
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/example-skill/README.md +0 -37
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/example-skill/SKILL.md +0 -141
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/example-skill/examples/usage.md +0 -76
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/example-skill/resources/config.json +0 -21
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/example-skill/scripts/helper.py +0 -24
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/exception-handling-spec/SKILL.md +0 -88
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/find-skill/SKILL.md +0 -95
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/fixing-accessibility/SKILL.md +0 -136
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/fixing-metadata/SKILL.md +0 -111
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/fixing-motion-performance/SKILL.md +0 -151
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/frontend-design/SKILL.md +0 -58
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/frontend-first-workflow/SKILL.md +0 -187
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/frontend-patterns/SKILL.md +0 -631
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/fullstack-workflow/SKILL.md +0 -85
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/git-workflow/SKILL.md +0 -108
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/git-xianyu-analyzer/SKILL.md +0 -346
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/git-xianyu-analyzer/scripts/download_images.py +0 -112
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/github-research/SKILL.md +0 -213
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/glue-coding/SKILL.md +0 -389
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/glue-coding-workflow/SKILL.md +0 -230
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/SKILL.md +0 -188
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/references/current-repo-sync-matrix.md +0 -110
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/references/stale-patterns.md +0 -65
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/agents/openai.yaml +0 -4
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/adapt.md +0 -190
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/animate.md +0 -173
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/audit.md +0 -134
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/bolder.md +0 -113
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/brand.md +0 -104
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/clarify.md +0 -174
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/cognitive-load.md +0 -106
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/color-and-contrast.md +0 -105
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/colorize.md +0 -154
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/craft.md +0 -138
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/critique.md +0 -213
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/delight.md +0 -302
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/distill.md +0 -111
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/document.md +0 -427
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/extract.md +0 -70
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/harden.md +0 -347
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/heuristics-scoring.md +0 -234
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/interaction-design.md +0 -195
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/layout.md +0 -141
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/live.md +0 -513
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/motion-design.md +0 -99
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/onboard.md +0 -234
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/optimize.md +0 -258
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/overdrive.md +0 -130
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/personas.md +0 -178
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/polish.md +0 -232
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/product.md +0 -62
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/quieter.md +0 -99
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/responsive-design.md +0 -114
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/shape.md +0 -136
- package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/impeccable/reference/spatial-design.md +0 -100
- package/package-source/install-manifest.json +0 -453
- package/package-source/install-manifest.schema.json +0 -80
- package/package-source/tools/install/ai-workflow/check-ai-sync-drift.ps1 +0 -205
- package/package-source/tools/install/ai-workflow/sync-ai-config-to-targets.ps1 +0 -826
- package/package-source/tools/install/ai-workflow/sync-targets.example.json +0 -35
- package/package-source/tools/install/bootstrap-codex-harness.ps1 +0 -760
- package/package-source/tools/install/env-check.ps1 +0 -40
- package/package-source/tools/install/init-project.ps1 +0 -51
- package/package-source/tools/install/install-agent-here.ps1 +0 -57
- package/package-source/tools/install/install-agent.ps1 +0 -2511
- package/package-source/tools/install/install-user.ps1 +0 -29
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
# Go 微服务 — 项目 CLAUDE.md
|
|
2
|
-
|
|
3
|
-
> 一个使用 PostgreSQL、gRPC 和 Docker 的 Go 微服务真实示例。
|
|
4
|
-
> 将此文件复制到您的项目根目录,并根据您的服务进行自定义。
|
|
5
|
-
|
|
6
|
-
## 项目概述
|
|
7
|
-
|
|
8
|
-
**技术栈:** Go 1.22+, PostgreSQL, gRPC + REST (grpc-gateway), Docker, sqlc (类型安全的 SQL), Wire (依赖注入)
|
|
9
|
-
|
|
10
|
-
**架构:** 采用领域、仓库、服务和处理器层的清晰架构。gRPC 作为主要传输方式,REST 网关用于外部客户端。
|
|
11
|
-
|
|
12
|
-
## 关键规则
|
|
13
|
-
|
|
14
|
-
### Go 规范
|
|
15
|
-
|
|
16
|
-
* 遵循 Effective Go 和 Go Code Review Comments 指南
|
|
17
|
-
* 使用 `errors.New` / `fmt.Errorf` 配合 `%w` 进行包装 — 绝不对错误进行字符串匹配
|
|
18
|
-
* 不使用 `init()` 函数 — 在 `main()` 或构造函数中进行显式初始化
|
|
19
|
-
* 没有全局可变状态 — 通过构造函数传递依赖项
|
|
20
|
-
* Context 必须是第一个参数,并在所有层中传播
|
|
21
|
-
|
|
22
|
-
### 数据库
|
|
23
|
-
|
|
24
|
-
* `queries/` 中的所有查询都使用纯 SQL — sqlc 生成类型安全的 Go 代码
|
|
25
|
-
* 在 `migrations/` 中使用 golang-migrate 进行迁移 — 绝不直接更改数据库
|
|
26
|
-
* 通过 `pgx.Tx` 为多步骤操作使用事务
|
|
27
|
-
* 所有查询必须使用参数化占位符 (`$1`, `$2`) — 绝不使用字符串格式化
|
|
28
|
-
|
|
29
|
-
### 错误处理
|
|
30
|
-
|
|
31
|
-
* 返回错误,不要 panic — panic 仅用于真正无法恢复的情况
|
|
32
|
-
* 使用上下文包装错误:`fmt.Errorf("creating user: %w", err)`
|
|
33
|
-
* 在 `domain/errors.go` 中定义业务逻辑的哨兵错误
|
|
34
|
-
* 在处理器层将领域错误映射到 gRPC 状态码
|
|
35
|
-
|
|
36
|
-
```go
|
|
37
|
-
// Domain layer — sentinel errors
|
|
38
|
-
var (
|
|
39
|
-
ErrUserNotFound = errors.New("user not found")
|
|
40
|
-
ErrEmailTaken = errors.New("email already registered")
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
// Handler layer — map to gRPC status
|
|
44
|
-
func toGRPCError(err error) error {
|
|
45
|
-
switch {
|
|
46
|
-
case errors.Is(err, domain.ErrUserNotFound):
|
|
47
|
-
return status.Error(codes.NotFound, err.Error())
|
|
48
|
-
case errors.Is(err, domain.ErrEmailTaken):
|
|
49
|
-
return status.Error(codes.AlreadyExists, err.Error())
|
|
50
|
-
default:
|
|
51
|
-
return status.Error(codes.Internal, "internal error")
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 代码风格
|
|
57
|
-
|
|
58
|
-
* 代码或注释中不使用表情符号
|
|
59
|
-
* 导出的类型和函数必须有文档注释
|
|
60
|
-
* 函数保持在 50 行以内 — 提取辅助函数
|
|
61
|
-
* 对所有具有多个用例的逻辑使用表格驱动测试
|
|
62
|
-
* 对于信号通道,优先使用 `struct{}`,而不是 `bool`
|
|
63
|
-
|
|
64
|
-
## 文件结构
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
cmd/
|
|
68
|
-
server/
|
|
69
|
-
main.go # 入口点,Wire注入,优雅关闭
|
|
70
|
-
internal/
|
|
71
|
-
domain/ # 业务类型和接口
|
|
72
|
-
user.go # 用户实体和仓库接口
|
|
73
|
-
errors.go # 哨兵错误
|
|
74
|
-
service/ # 业务逻辑
|
|
75
|
-
user_service.go
|
|
76
|
-
user_service_test.go
|
|
77
|
-
repository/ # 数据访问(sqlc生成 + 自定义)
|
|
78
|
-
postgres/
|
|
79
|
-
user_repo.go
|
|
80
|
-
user_repo_test.go # 使用testcontainers的集成测试
|
|
81
|
-
handler/ # gRPC + REST处理程序
|
|
82
|
-
grpc/
|
|
83
|
-
user_handler.go
|
|
84
|
-
rest/
|
|
85
|
-
user_handler.go
|
|
86
|
-
config/ # 配置加载
|
|
87
|
-
config.go
|
|
88
|
-
proto/ # Protobuf定义
|
|
89
|
-
user/v1/
|
|
90
|
-
user.proto
|
|
91
|
-
queries/ # sqlc的SQL查询
|
|
92
|
-
user.sql
|
|
93
|
-
migrations/ # 数据库迁移
|
|
94
|
-
001_create_users.up.sql
|
|
95
|
-
001_create_users.down.sql
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## 关键模式
|
|
99
|
-
|
|
100
|
-
### 仓库接口
|
|
101
|
-
|
|
102
|
-
```go
|
|
103
|
-
type UserRepository interface {
|
|
104
|
-
Create(ctx context.Context, user *User) error
|
|
105
|
-
FindByID(ctx context.Context, id uuid.UUID) (*User, error)
|
|
106
|
-
FindByEmail(ctx context.Context, email string) (*User, error)
|
|
107
|
-
Update(ctx context.Context, user *User) error
|
|
108
|
-
Delete(ctx context.Context, id uuid.UUID) error
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### 使用依赖注入的服务
|
|
113
|
-
|
|
114
|
-
```go
|
|
115
|
-
type UserService struct {
|
|
116
|
-
repo domain.UserRepository
|
|
117
|
-
hasher PasswordHasher
|
|
118
|
-
logger *slog.Logger
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
func NewUserService(repo domain.UserRepository, hasher PasswordHasher, logger *slog.Logger) *UserService {
|
|
122
|
-
return &UserService{repo: repo, hasher: hasher, logger: logger}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
func (s *UserService) Create(ctx context.Context, req CreateUserRequest) (*domain.User, error) {
|
|
126
|
-
existing, err := s.repo.FindByEmail(ctx, req.Email)
|
|
127
|
-
if err != nil && !errors.Is(err, domain.ErrUserNotFound) {
|
|
128
|
-
return nil, fmt.Errorf("checking email: %w", err)
|
|
129
|
-
}
|
|
130
|
-
if existing != nil {
|
|
131
|
-
return nil, domain.ErrEmailTaken
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
hashed, err := s.hasher.Hash(req.Password)
|
|
135
|
-
if err != nil {
|
|
136
|
-
return nil, fmt.Errorf("hashing password: %w", err)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
user := &domain.User{
|
|
140
|
-
ID: uuid.New(),
|
|
141
|
-
Name: req.Name,
|
|
142
|
-
Email: req.Email,
|
|
143
|
-
Password: hashed,
|
|
144
|
-
}
|
|
145
|
-
if err := s.repo.Create(ctx, user); err != nil {
|
|
146
|
-
return nil, fmt.Errorf("creating user: %w", err)
|
|
147
|
-
}
|
|
148
|
-
return user, nil
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### 表格驱动测试
|
|
153
|
-
|
|
154
|
-
```go
|
|
155
|
-
func TestUserService_Create(t *testing.T) {
|
|
156
|
-
tests := []struct {
|
|
157
|
-
name string
|
|
158
|
-
req CreateUserRequest
|
|
159
|
-
setup func(*MockUserRepo)
|
|
160
|
-
wantErr error
|
|
161
|
-
}{
|
|
162
|
-
{
|
|
163
|
-
name: "valid user",
|
|
164
|
-
req: CreateUserRequest{Name: "Alice", Email: "alice@example.com", Password: "secure123"},
|
|
165
|
-
setup: func(m *MockUserRepo) {
|
|
166
|
-
m.On("FindByEmail", mock.Anything, "alice@example.com").Return(nil, domain.ErrUserNotFound)
|
|
167
|
-
m.On("Create", mock.Anything, mock.Anything).Return(nil)
|
|
168
|
-
},
|
|
169
|
-
wantErr: nil,
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
name: "duplicate email",
|
|
173
|
-
req: CreateUserRequest{Name: "Alice", Email: "taken@example.com", Password: "secure123"},
|
|
174
|
-
setup: func(m *MockUserRepo) {
|
|
175
|
-
m.On("FindByEmail", mock.Anything, "taken@example.com").Return(&domain.User{}, nil)
|
|
176
|
-
},
|
|
177
|
-
wantErr: domain.ErrEmailTaken,
|
|
178
|
-
},
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
for _, tt := range tests {
|
|
182
|
-
t.Run(tt.name, func(t *testing.T) {
|
|
183
|
-
repo := new(MockUserRepo)
|
|
184
|
-
tt.setup(repo)
|
|
185
|
-
svc := NewUserService(repo, &bcryptHasher{}, slog.Default())
|
|
186
|
-
|
|
187
|
-
_, err := svc.Create(context.Background(), tt.req)
|
|
188
|
-
|
|
189
|
-
if tt.wantErr != nil {
|
|
190
|
-
assert.ErrorIs(t, err, tt.wantErr)
|
|
191
|
-
} else {
|
|
192
|
-
assert.NoError(t, err)
|
|
193
|
-
}
|
|
194
|
-
})
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
## 环境变量
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
# Database
|
|
203
|
-
DATABASE_URL=postgres://user:pass@localhost:5432/myservice?sslmode=disable
|
|
204
|
-
|
|
205
|
-
# gRPC
|
|
206
|
-
GRPC_PORT=50051
|
|
207
|
-
REST_PORT=8080
|
|
208
|
-
|
|
209
|
-
# Auth
|
|
210
|
-
JWT_SECRET= # Load from vault in production
|
|
211
|
-
TOKEN_EXPIRY=24h
|
|
212
|
-
|
|
213
|
-
# Observability
|
|
214
|
-
LOG_LEVEL=info # debug, info, warn, error
|
|
215
|
-
OTEL_ENDPOINT= # OpenTelemetry collector
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## 测试策略
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
/go-test # TDD workflow for Go
|
|
222
|
-
/go-review # Go-specific code review
|
|
223
|
-
/go-build # Fix build errors
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### 测试命令
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
# Unit tests (fast, no external deps)
|
|
230
|
-
go test ./internal/... -short -count=1
|
|
231
|
-
|
|
232
|
-
# Integration tests (requires Docker for testcontainers)
|
|
233
|
-
go test ./internal/repository/... -count=1 -timeout 120s
|
|
234
|
-
|
|
235
|
-
# All tests with coverage
|
|
236
|
-
go test ./... -coverprofile=coverage.out -count=1
|
|
237
|
-
go tool cover -func=coverage.out # summary
|
|
238
|
-
go tool cover -html=coverage.out # browser
|
|
239
|
-
|
|
240
|
-
# Race detector
|
|
241
|
-
go test ./... -race -count=1
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
## ECC 工作流
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
# Planning
|
|
248
|
-
/plan "Add rate limiting to user endpoints"
|
|
249
|
-
|
|
250
|
-
# Development
|
|
251
|
-
/go-test # TDD with Go-specific patterns
|
|
252
|
-
|
|
253
|
-
# Review
|
|
254
|
-
/go-review # Go idioms, error handling, concurrency
|
|
255
|
-
/security-scan # Secrets and vulnerabilities
|
|
256
|
-
|
|
257
|
-
# Before merge
|
|
258
|
-
go vet ./...
|
|
259
|
-
staticcheck ./...
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
## Git 工作流
|
|
263
|
-
|
|
264
|
-
* `feat:` 新功能,`fix:` 错误修复,`refactor:` 代码更改
|
|
265
|
-
* 从 `main` 创建功能分支,需要 PR
|
|
266
|
-
* CI: `go vet`, `staticcheck`, `go test -race`, `golangci-lint`
|
|
267
|
-
* 部署: 在 CI 中构建 Docker 镜像,部署到 Kubernetes
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
# Rust API 服务 — 项目 CLAUDE.md
|
|
2
|
-
|
|
3
|
-
> 使用 Axum、PostgreSQL 和 Docker 构建 Rust API 服务的真实示例。
|
|
4
|
-
> 将此文件复制到您的项目根目录,并根据您的服务进行自定义。
|
|
5
|
-
|
|
6
|
-
## 项目概述
|
|
7
|
-
|
|
8
|
-
**技术栈:** Rust 1.78+, Axum (Web 框架), SQLx (异步数据库), PostgreSQL, Tokio (异步运行时), Docker
|
|
9
|
-
|
|
10
|
-
**架构:** 采用分层架构,包含 handler → service → repository 分离。Axum 用于 HTTP,SQLx 用于编译时类型检查的 SQL,Tower 中间件用于横切关注点。
|
|
11
|
-
|
|
12
|
-
## 关键规则
|
|
13
|
-
|
|
14
|
-
### Rust 约定
|
|
15
|
-
|
|
16
|
-
* 库错误使用 `thiserror`,仅在二进制 crate 或测试中使用 `anyhow`
|
|
17
|
-
* 生产代码中不使用 `.unwrap()` 或 `.expect()` — 使用 `?` 传播错误
|
|
18
|
-
* 函数参数中优先使用 `&str` 而非 `String`;所有权转移时返回 `String`
|
|
19
|
-
* 使用 `clippy` 和 `#![deny(clippy::all, clippy::pedantic)]` — 修复所有警告
|
|
20
|
-
* 在所有公共类型上派生 `Debug`;仅在需要时派生 `Clone`、`PartialEq`
|
|
21
|
-
* 除非有 `// SAFETY:` 注释说明理由,否则不使用 `unsafe` 块
|
|
22
|
-
|
|
23
|
-
### 数据库
|
|
24
|
-
|
|
25
|
-
* 所有查询使用 SQLx 的 `query!` 或 `query_as!` 宏 — 针对模式进行编译时验证
|
|
26
|
-
* 在 `migrations/` 中使用 `sqlx migrate` 进行迁移 — 切勿直接修改数据库
|
|
27
|
-
* 使用 `sqlx::Pool<Postgres>` 作为共享状态 — 切勿为每个请求创建连接
|
|
28
|
-
* 所有查询使用参数化占位符 (`$1`, `$2`) — 切勿使用字符串格式化
|
|
29
|
-
|
|
30
|
-
```rust
|
|
31
|
-
// BAD: String interpolation (SQL injection risk)
|
|
32
|
-
let q = format!("SELECT * FROM users WHERE id = '{}'", id);
|
|
33
|
-
|
|
34
|
-
// GOOD: Parameterized query, compile-time checked
|
|
35
|
-
let user = sqlx::query_as!(User, "SELECT * FROM users WHERE id = $1", id)
|
|
36
|
-
.fetch_optional(&pool)
|
|
37
|
-
.await?;
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### 错误处理
|
|
41
|
-
|
|
42
|
-
* 为每个模块使用 `thiserror` 定义一个领域错误枚举
|
|
43
|
-
* 通过 `IntoResponse` 将错误映射到 HTTP 响应 — 切勿暴露内部细节
|
|
44
|
-
* 使用 `tracing` 进行结构化日志记录 — 切勿使用 `println!` 或 `eprintln!`
|
|
45
|
-
|
|
46
|
-
```rust
|
|
47
|
-
use thiserror::Error;
|
|
48
|
-
|
|
49
|
-
#[derive(Debug, Error)]
|
|
50
|
-
pub enum AppError {
|
|
51
|
-
#[error("Resource not found")]
|
|
52
|
-
NotFound,
|
|
53
|
-
#[error("Validation failed: {0}")]
|
|
54
|
-
Validation(String),
|
|
55
|
-
#[error("Unauthorized")]
|
|
56
|
-
Unauthorized,
|
|
57
|
-
#[error(transparent)]
|
|
58
|
-
Internal(#[from] anyhow::Error),
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
impl IntoResponse for AppError {
|
|
62
|
-
fn into_response(self) -> Response {
|
|
63
|
-
let (status, message) = match &self {
|
|
64
|
-
Self::NotFound => (StatusCode::NOT_FOUND, self.to_string()),
|
|
65
|
-
Self::Validation(msg) => (StatusCode::BAD_REQUEST, msg.clone()),
|
|
66
|
-
Self::Unauthorized => (StatusCode::UNAUTHORIZED, self.to_string()),
|
|
67
|
-
Self::Internal(err) => {
|
|
68
|
-
tracing::error!(?err, "internal error");
|
|
69
|
-
(StatusCode::INTERNAL_SERVER_ERROR, "Internal error".into())
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
(status, Json(json!({ "error": message }))).into_response()
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### 测试
|
|
78
|
-
|
|
79
|
-
* 单元测试放在每个源文件内的 `#[cfg(test)]` 模块中
|
|
80
|
-
* 集成测试放在 `tests/` 目录中,使用真实的 PostgreSQL (Testcontainers 或 Docker)
|
|
81
|
-
* 使用 `#[sqlx::test]` 进行数据库测试,包含自动迁移和回滚
|
|
82
|
-
* 使用 `mockall` 或 `wiremock` 模拟外部服务
|
|
83
|
-
|
|
84
|
-
### 代码风格
|
|
85
|
-
|
|
86
|
-
* 最大行长度:100 个字符(由 rustfmt 强制执行)
|
|
87
|
-
* 导入分组:`std`、外部 crate、`crate`/`super` — 用空行分隔
|
|
88
|
-
* 模块:每个模块一个文件,`mod.rs` 仅用于重新导出
|
|
89
|
-
* 类型:PascalCase,函数/变量:snake\_case,常量:UPPER\_SNAKE\_CASE
|
|
90
|
-
|
|
91
|
-
## 文件结构
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
src/
|
|
95
|
-
main.rs # 入口点、服务器设置、优雅关闭
|
|
96
|
-
lib.rs # 用于集成测试的重新导出
|
|
97
|
-
config.rs # 使用 envy 或 figment 的环境配置
|
|
98
|
-
router.rs # 包含所有路由的 Axum 路由器
|
|
99
|
-
middleware/
|
|
100
|
-
auth.rs # JWT 提取与验证
|
|
101
|
-
logging.rs # 请求/响应追踪
|
|
102
|
-
handlers/
|
|
103
|
-
mod.rs # 路由处理器(精简版——委托给服务层)
|
|
104
|
-
users.rs
|
|
105
|
-
orders.rs
|
|
106
|
-
services/
|
|
107
|
-
mod.rs # 业务逻辑
|
|
108
|
-
users.rs
|
|
109
|
-
orders.rs
|
|
110
|
-
repositories/
|
|
111
|
-
mod.rs # 数据库访问(SQLx 查询)
|
|
112
|
-
users.rs
|
|
113
|
-
orders.rs
|
|
114
|
-
domain/
|
|
115
|
-
mod.rs # 领域类型、错误枚举
|
|
116
|
-
user.rs
|
|
117
|
-
order.rs
|
|
118
|
-
migrations/
|
|
119
|
-
001_create_users.sql
|
|
120
|
-
002_create_orders.sql
|
|
121
|
-
tests/
|
|
122
|
-
common/mod.rs # 共享测试辅助工具、测试服务器设置
|
|
123
|
-
api_users.rs # 用户端点的集成测试
|
|
124
|
-
api_orders.rs # 订单端点的集成测试
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## 关键模式
|
|
128
|
-
|
|
129
|
-
### Handler (薄层)
|
|
130
|
-
|
|
131
|
-
```rust
|
|
132
|
-
async fn create_user(
|
|
133
|
-
State(ctx): State<AppState>,
|
|
134
|
-
Json(payload): Json<CreateUserRequest>,
|
|
135
|
-
) -> Result<(StatusCode, Json<UserResponse>), AppError> {
|
|
136
|
-
let user = ctx.user_service.create(payload).await?;
|
|
137
|
-
Ok((StatusCode::CREATED, Json(UserResponse::from(user))))
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Service (业务逻辑)
|
|
142
|
-
|
|
143
|
-
```rust
|
|
144
|
-
impl UserService {
|
|
145
|
-
pub async fn create(&self, req: CreateUserRequest) -> Result<User, AppError> {
|
|
146
|
-
if self.repo.find_by_email(&req.email).await?.is_some() {
|
|
147
|
-
return Err(AppError::Validation("Email already registered".into()));
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
let password_hash = hash_password(&req.password)?;
|
|
151
|
-
let user = self.repo.insert(&req.email, &req.name, &password_hash).await?;
|
|
152
|
-
|
|
153
|
-
Ok(user)
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Repository (数据访问)
|
|
159
|
-
|
|
160
|
-
```rust
|
|
161
|
-
impl UserRepository {
|
|
162
|
-
pub async fn find_by_email(&self, email: &str) -> Result<Option<User>, sqlx::Error> {
|
|
163
|
-
sqlx::query_as!(User, "SELECT * FROM users WHERE email = $1", email)
|
|
164
|
-
.fetch_optional(&self.pool)
|
|
165
|
-
.await
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
pub async fn insert(
|
|
169
|
-
&self,
|
|
170
|
-
email: &str,
|
|
171
|
-
name: &str,
|
|
172
|
-
password_hash: &str,
|
|
173
|
-
) -> Result<User, sqlx::Error> {
|
|
174
|
-
sqlx::query_as!(
|
|
175
|
-
User,
|
|
176
|
-
r#"INSERT INTO users (email, name, password_hash)
|
|
177
|
-
VALUES ($1, $2, $3) RETURNING *"#,
|
|
178
|
-
email, name, password_hash,
|
|
179
|
-
)
|
|
180
|
-
.fetch_one(&self.pool)
|
|
181
|
-
.await
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### 集成测试
|
|
187
|
-
|
|
188
|
-
```rust
|
|
189
|
-
#[tokio::test]
|
|
190
|
-
async fn test_create_user() {
|
|
191
|
-
let app = spawn_test_app().await;
|
|
192
|
-
|
|
193
|
-
let response = app
|
|
194
|
-
.client
|
|
195
|
-
.post(&format!("{}/api/v1/users", app.address))
|
|
196
|
-
.json(&json!({
|
|
197
|
-
"email": "alice@example.com",
|
|
198
|
-
"name": "Alice",
|
|
199
|
-
"password": "securepassword123"
|
|
200
|
-
}))
|
|
201
|
-
.send()
|
|
202
|
-
.await
|
|
203
|
-
.expect("Failed to send request");
|
|
204
|
-
|
|
205
|
-
assert_eq!(response.status(), StatusCode::CREATED);
|
|
206
|
-
let body: serde_json::Value = response.json().await.unwrap();
|
|
207
|
-
assert_eq!(body["email"], "alice@example.com");
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
#[tokio::test]
|
|
211
|
-
async fn test_create_user_duplicate_email() {
|
|
212
|
-
let app = spawn_test_app().await;
|
|
213
|
-
// Create first user
|
|
214
|
-
create_test_user(&app, "alice@example.com").await;
|
|
215
|
-
// Attempt duplicate
|
|
216
|
-
let response = create_user_request(&app, "alice@example.com").await;
|
|
217
|
-
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
## 环境变量
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
# Server
|
|
225
|
-
HOST=0.0.0.0
|
|
226
|
-
PORT=8080
|
|
227
|
-
RUST_LOG=info,tower_http=debug
|
|
228
|
-
|
|
229
|
-
# Database
|
|
230
|
-
DATABASE_URL=postgres://user:pass@localhost:5432/myapp
|
|
231
|
-
|
|
232
|
-
# Auth
|
|
233
|
-
JWT_SECRET=your-secret-key-min-32-chars
|
|
234
|
-
JWT_EXPIRY_HOURS=24
|
|
235
|
-
|
|
236
|
-
# Optional
|
|
237
|
-
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## 测试策略
|
|
241
|
-
|
|
242
|
-
```bash
|
|
243
|
-
# Run all tests
|
|
244
|
-
cargo test
|
|
245
|
-
|
|
246
|
-
# Run with output
|
|
247
|
-
cargo test -- --nocapture
|
|
248
|
-
|
|
249
|
-
# Run specific test module
|
|
250
|
-
cargo test api_users
|
|
251
|
-
|
|
252
|
-
# Check coverage (requires cargo-llvm-cov)
|
|
253
|
-
cargo llvm-cov --html
|
|
254
|
-
open target/llvm-cov/html/index.html
|
|
255
|
-
|
|
256
|
-
# Lint
|
|
257
|
-
cargo clippy -- -D warnings
|
|
258
|
-
|
|
259
|
-
# Format check
|
|
260
|
-
cargo fmt -- --check
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
## ECC 工作流
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
# Planning
|
|
267
|
-
/plan "Add order fulfillment with Stripe payment"
|
|
268
|
-
|
|
269
|
-
# Development with TDD
|
|
270
|
-
/tdd # cargo test-based TDD workflow
|
|
271
|
-
|
|
272
|
-
# Review
|
|
273
|
-
/code-review # Rust-specific code review
|
|
274
|
-
/security-scan # Dependency audit + unsafe scan
|
|
275
|
-
|
|
276
|
-
# Verification
|
|
277
|
-
/verify # Build, clippy, test, security scan
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
## Git 工作流
|
|
281
|
-
|
|
282
|
-
* `feat:` 新功能,`fix:` 错误修复,`refactor:` 代码变更
|
|
283
|
-
* 从 `main` 创建功能分支,需要 PR
|
|
284
|
-
* CI:`cargo fmt --check`、`cargo clippy`、`cargo test`、`cargo audit`
|
|
285
|
-
* 部署:使用 `scratch` 或 `distroless` 基础镜像的 Docker 多阶段构建
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
# SaaS 应用程序 — 项目 CLAUDE.md
|
|
2
|
-
|
|
3
|
-
> 一个 Next.js + Supabase + Stripe SaaS 应用程序的真实示例。
|
|
4
|
-
> 将此复制到您的项目根目录,并根据您的技术栈进行自定义。
|
|
5
|
-
|
|
6
|
-
## 项目概览
|
|
7
|
-
|
|
8
|
-
**技术栈:** Next.js 15(App Router)、TypeScript、Supabase(身份验证 + 数据库)、Stripe(计费)、Tailwind CSS、Playwright(端到端测试)
|
|
9
|
-
|
|
10
|
-
**架构:** 默认使用服务器组件。仅在需要交互性时使用客户端组件。API 路由用于 Webhook,服务器操作用于数据变更。
|
|
11
|
-
|
|
12
|
-
## 关键规则
|
|
13
|
-
|
|
14
|
-
### 数据库
|
|
15
|
-
|
|
16
|
-
* 所有查询均使用启用 RLS 的 Supabase 客户端 — 绝不要绕过 RLS
|
|
17
|
-
* 迁移在 `supabase/migrations/` 中 — 绝不要直接修改数据库
|
|
18
|
-
* 使用带有明确列列表的 `select()`,而不是 `select('*')`
|
|
19
|
-
* 所有面向用户的查询必须包含 `.limit()` 以防止返回无限制的结果
|
|
20
|
-
|
|
21
|
-
### 身份验证
|
|
22
|
-
|
|
23
|
-
* 在服务器组件中使用来自 `@supabase/ssr` 的 `createServerClient()`
|
|
24
|
-
* 在客户端组件中使用来自 `@supabase/ssr` 的 `createBrowserClient()`
|
|
25
|
-
* 受保护的路由检查 `getUser()` — 绝不要仅依赖 `getSession()` 进行身份验证
|
|
26
|
-
* `middleware.ts` 中的中间件会在每个请求上刷新身份验证令牌
|
|
27
|
-
|
|
28
|
-
### 计费
|
|
29
|
-
|
|
30
|
-
* Stripe webhook 处理程序在 `app/api/webhooks/stripe/route.ts` 中
|
|
31
|
-
* 绝不要信任客户端的定价数据 — 始终在服务器端从 Stripe 获取
|
|
32
|
-
* 通过 `subscription_status` 列检查订阅状态,由 webhook 同步
|
|
33
|
-
* 免费层用户:3 个项目,每天 100 次 API 调用
|
|
34
|
-
|
|
35
|
-
### 代码风格
|
|
36
|
-
|
|
37
|
-
* 代码或注释中不使用表情符号
|
|
38
|
-
* 仅使用不可变模式 — 使用展开运算符,永不直接修改
|
|
39
|
-
* 服务器组件:不使用 `'use client'` 指令,不使用 `useState`/`useEffect`
|
|
40
|
-
* 客户端组件:`'use client'` 放在顶部,保持最小化 — 将逻辑提取到钩子中
|
|
41
|
-
* 所有输入验证(API 路由、表单、环境变量)优先使用 Zod 模式
|
|
42
|
-
|
|
43
|
-
## 文件结构
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
src/
|
|
47
|
-
app/
|
|
48
|
-
(auth)/ # 认证页面(登录、注册、忘记密码)
|
|
49
|
-
(dashboard)/ # 受保护的仪表板页面
|
|
50
|
-
api/
|
|
51
|
-
webhooks/ # Stripe、Supabase webhooks
|
|
52
|
-
layout.tsx # 根布局(包含 providers)
|
|
53
|
-
components/
|
|
54
|
-
ui/ # Shadcn/ui 组件
|
|
55
|
-
forms/ # 带验证的表单组件
|
|
56
|
-
dashboard/ # 仪表板专用组件
|
|
57
|
-
hooks/ # 自定义 React hooks
|
|
58
|
-
lib/
|
|
59
|
-
supabase/ # Supabase 客户端工厂
|
|
60
|
-
stripe/ # Stripe 客户端与辅助工具
|
|
61
|
-
utils.ts # 通用工具函数
|
|
62
|
-
types/ # 共享 TypeScript 类型
|
|
63
|
-
supabase/
|
|
64
|
-
migrations/ # 数据库迁移
|
|
65
|
-
seed.sql # 开发用种子数据
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## 关键模式
|
|
69
|
-
|
|
70
|
-
### API 响应格式
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
type ApiResponse<T> =
|
|
74
|
-
| { success: true; data: T }
|
|
75
|
-
| { success: false; error: string; code?: string }
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 服务器操作模式
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
81
|
-
'use server'
|
|
82
|
-
|
|
83
|
-
import { z } from 'zod'
|
|
84
|
-
import { createServerClient } from '@/lib/supabase/server'
|
|
85
|
-
|
|
86
|
-
const schema = z.object({
|
|
87
|
-
name: z.string().min(1).max(100),
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
export async function createProject(formData: FormData) {
|
|
91
|
-
const parsed = schema.safeParse({ name: formData.get('name') })
|
|
92
|
-
if (!parsed.success) {
|
|
93
|
-
return { success: false, error: parsed.error.flatten() }
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const supabase = await createServerClient()
|
|
97
|
-
const { data: { user } } = await supabase.auth.getUser()
|
|
98
|
-
if (!user) return { success: false, error: 'Unauthorized' }
|
|
99
|
-
|
|
100
|
-
const { data, error } = await supabase
|
|
101
|
-
.from('projects')
|
|
102
|
-
.insert({ name: parsed.data.name, user_id: user.id })
|
|
103
|
-
.select('id, name, created_at')
|
|
104
|
-
.single()
|
|
105
|
-
|
|
106
|
-
if (error) return { success: false, error: 'Failed to create project' }
|
|
107
|
-
return { success: true, data }
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## 环境变量
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
# Supabase
|
|
115
|
-
NEXT_PUBLIC_SUPABASE_URL=
|
|
116
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=
|
|
117
|
-
SUPABASE_SERVICE_ROLE_KEY= # Server-only, never expose to client
|
|
118
|
-
|
|
119
|
-
# Stripe
|
|
120
|
-
STRIPE_SECRET_KEY=
|
|
121
|
-
STRIPE_WEBHOOK_SECRET=
|
|
122
|
-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
|
|
123
|
-
|
|
124
|
-
# App
|
|
125
|
-
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## 测试策略
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
/tdd # Unit + integration tests for new features
|
|
132
|
-
/e2e # Playwright tests for auth flow, billing, dashboard
|
|
133
|
-
/test-coverage # Verify 80%+ coverage
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 关键的端到端测试流程
|
|
137
|
-
|
|
138
|
-
1. 注册 → 邮箱验证 → 创建第一个项目
|
|
139
|
-
2. 登录 → 仪表盘 → CRUD 操作
|
|
140
|
-
3. 升级计划 → Stripe 结账 → 订阅激活
|
|
141
|
-
4. Webhook:订阅取消 → 降级到免费层
|
|
142
|
-
|
|
143
|
-
## ECC 工作流
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# Planning a feature
|
|
147
|
-
/plan "Add team invitations with email notifications"
|
|
148
|
-
|
|
149
|
-
# Developing with TDD
|
|
150
|
-
/tdd
|
|
151
|
-
|
|
152
|
-
# Before committing
|
|
153
|
-
/code-review
|
|
154
|
-
/security-scan
|
|
155
|
-
|
|
156
|
-
# Before release
|
|
157
|
-
/e2e
|
|
158
|
-
/test-coverage
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## Git 工作流
|
|
162
|
-
|
|
163
|
-
* `feat:` 新功能,`fix:` 错误修复,`refactor:` 代码变更
|
|
164
|
-
* 从 `main` 创建功能分支,需要 PR
|
|
165
|
-
* CI 运行:代码检查、类型检查、单元测试、端到端测试
|
|
166
|
-
* 部署:在 PR 上部署到 Vercel 预览环境,在合并到 `main` 时部署到生产环境
|