@chongyan/autospec 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +242 -21
- package/README.md +54 -608
- package/dist/README.md +54 -0
- package/dist/adapters/claude-code/README.md.enc +6 -0
- package/dist/adapters/claude-code/agents.js +1 -0
- package/dist/adapters/claude-code/commands.config.js +1 -0
- package/dist/adapters/claude-code/commands.js +1 -0
- package/dist/adapters/claude-code/hooks.config.js +2 -0
- package/dist/adapters/claude-code/hooks.js +1 -0
- package/dist/adapters/claude-code/install.js +1 -0
- package/dist/adapters/claude-code/skills.js +1 -0
- package/dist/adapters/codex/README.md.enc +6 -0
- package/dist/adapters/codex/hooks/pre-commit.sh +10 -0
- package/dist/adapters/codex/install.js +1 -0
- package/dist/adapters/codex/prompts/env-learn.md.enc +6 -0
- package/dist/adapters/codex/prompts/review.md.enc +6 -0
- package/dist/adapters/codex/wrappers/autospec-cli.sh +118 -0
- package/dist/adapters/codex/wrappers/parallel.sh +20 -0
- package/dist/adapters/codex/wrappers/post-task.sh +138 -0
- package/dist/bin/autospec.js +2 -0
- package/dist/knowledge/README.en.md.enc +6 -0
- package/dist/knowledge/README.md.enc +6 -0
- package/dist/knowledge/change-management.md.enc +6 -0
- package/dist/knowledge/cognition-engine.md.enc +6 -0
- package/dist/knowledge/config/baseline-permissions.md.enc +6 -0
- package/dist/knowledge/config/external-mounts.yaml.enc +6 -0
- package/dist/knowledge/config/model-profiles.yaml.enc +6 -0
- package/dist/knowledge/config/role-composition.yaml.enc +6 -0
- package/dist/knowledge/config/token-optimization.yaml.enc +6 -0
- package/dist/knowledge/config/validation-patterns.yaml.enc +6 -0
- package/dist/knowledge/constitution.md.enc +6 -0
- package/dist/knowledge/core-rules.md.enc +6 -0
- package/dist/knowledge/environment/adapters/README.md.enc +6 -0
- package/dist/knowledge/environment/detection-patterns.yaml.enc +6 -0
- package/dist/knowledge/environment/failure-patterns.json +223 -0
- package/dist/knowledge/environment/repair-strategies.json +206 -0
- package/dist/knowledge/memory/README.md.enc +6 -0
- package/dist/knowledge/memory/field/README.md.enc +6 -0
- package/dist/knowledge/memory/project/decisions/README.md.enc +6 -0
- package/dist/knowledge/memory/project/evolution-log.md.enc +6 -0
- package/dist/knowledge/memory/project/health-metrics.md.enc +6 -0
- package/dist/knowledge/memory/team/best-practices.md.enc +6 -0
- package/dist/knowledge/pipeline/code.md.enc +6 -0
- package/dist/knowledge/pipeline/explore.md.enc +6 -0
- package/dist/knowledge/pipeline/plan.md.enc +6 -0
- package/dist/knowledge/pipeline/protocol.md.enc +6 -0
- package/dist/knowledge/protocol/capabilities.yaml.enc +6 -0
- package/dist/knowledge/protocol/evolve-integration.md.enc +6 -0
- package/dist/knowledge/skills/README.md.enc +6 -0
- package/dist/knowledge/skills/adversarial-review.md.enc +6 -0
- package/dist/knowledge/skills/analyze-requirement.md.enc +6 -0
- package/dist/knowledge/skills/channel-operations.md.enc +6 -0
- package/dist/knowledge/skills/content-operations.md.enc +6 -0
- package/dist/knowledge/skills/content-prompts.md.enc +6 -0
- package/dist/knowledge/skills/conversion-optimization.md.enc +6 -0
- package/dist/knowledge/skills/data-operations.md.enc +6 -0
- package/dist/knowledge/skills/design-solution.md.enc +6 -0
- package/dist/knowledge/skills/growth-strategies.md.enc +6 -0
- package/dist/knowledge/skills/implement-code.md.enc +6 -0
- package/dist/knowledge/skills/knowledge-distill.md.enc +6 -0
- package/dist/knowledge/skills/parallel-dev.md.enc +6 -0
- package/dist/knowledge/skills/private-domain-traffic.md.enc +6 -0
- package/dist/knowledge/skills/skill-format.md.enc +6 -0
- package/dist/knowledge/skills/social-commerce.md.enc +6 -0
- package/dist/knowledge/skills/team-orchestration.md.enc +6 -0
- package/dist/knowledge/skills/unified-review.md.enc +6 -0
- package/dist/knowledge/skills/user-operations.md.enc +6 -0
- package/dist/knowledge/templates/autospec-config.yaml.enc +6 -0
- package/dist/knowledge/templates/smoke-test.md.enc +6 -0
- package/dist/knowledge/templates/spec/SPEC.md.enc +6 -0
- package/dist/knowledge/templates/spec/layers/delta.md.enc +6 -0
- package/dist/knowledge/templates/spec/layers/how.md.enc +6 -0
- package/dist/knowledge/templates/spec/layers/plan.md.enc +6 -0
- package/dist/knowledge/templates/spec/layers/what.md.enc +6 -0
- package/dist/knowledge/templates/spec/layers/why.md.enc +6 -0
- package/dist/knowledge/templates/wiki/catalog.yaml.enc +6 -0
- package/dist/knowledge/templates/wiki/content.md.enc +6 -0
- package/dist/knowledge/templates/wiki/meta.yaml.enc +6 -0
- package/dist/package.json +62 -0
- package/{plugins → dist/plugins}/.claude-plugin/plugin.json +259 -101
- package/dist/plugins/agents/roles/ai-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/backend-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/ceo.md.enc +6 -0
- package/dist/plugins/agents/roles/channel-ops.md.enc +6 -0
- package/dist/plugins/agents/roles/content-ops.md.enc +6 -0
- package/dist/plugins/agents/roles/conversion-ops.md.enc +6 -0
- package/dist/plugins/agents/roles/data-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/data-ops.md.enc +6 -0
- package/dist/plugins/agents/roles/devops-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/frontend-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/marketing-director.md.enc +6 -0
- package/dist/plugins/agents/roles/operations-director.md.enc +6 -0
- package/dist/plugins/agents/roles/private-traffic.md.enc +6 -0
- package/dist/plugins/agents/roles/product-owner.md.enc +6 -0
- package/dist/plugins/agents/roles/quality-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/security-engineer.md.enc +6 -0
- package/dist/plugins/agents/roles/tech-lead.md.enc +6 -0
- package/dist/plugins/agents/roles/user-ops.md.enc +6 -0
- package/dist/plugins/agents/support/blind-comparator.md.enc +6 -0
- package/dist/plugins/agents/support/consistency-checker.md.enc +6 -0
- package/dist/plugins/agents/support/experiment-evaluator.md.enc +6 -0
- package/dist/plugins/agents/support/failure-diagnostician.md.enc +6 -0
- package/dist/plugins/agents/support/independent-reviewer.md.enc +6 -0
- package/dist/plugins/agents/support/memory-curator.md.enc +6 -0
- package/dist/plugins/agents/support/monitoring-agent.md.enc +6 -0
- package/dist/plugins/agents/support/safety-auditor.md.enc +6 -0
- package/dist/plugins/agents/support/skill-benchmarker.md.enc +6 -0
- package/dist/plugins/agents/support/skill-forger.md.enc +6 -0
- package/dist/plugins/agents/support/stage-gate-evaluator.md.enc +6 -0
- package/dist/plugins/agents/support/team-orchestrator.md.enc +6 -0
- package/dist/plugins/agents/support/test-coverage-reviewer.md.enc +6 -0
- package/dist/plugins/benchmarks/templates/README.en.md.enc +6 -0
- package/dist/plugins/benchmarks/templates/README.md.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/code-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/explore-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/field-evolve-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/plan-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/project-evolve-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/review-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/commands/run-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/benchmark-executor-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/benchmark-generator-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/delivery-stage-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/design-stage-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/exploration-phase-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-analyzer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-distiller-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-executor-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-fixer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-learner-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-scanner-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/field-evolve-verifier-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/implementation-stage-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/layer1-validation-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-analyzer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-fixer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-generator-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-learner-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-reviewer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-scanner-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/project-evolve-verifier-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/requirement-analyzer-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/skill-forge-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/startup-guard-template.yaml.enc +6 -0
- package/dist/plugins/benchmarks/templates/skills/testing-stage-template.yaml.enc +6 -0
- package/dist/plugins/commands/README.en.md.enc +6 -0
- package/dist/plugins/commands/README.md.enc +6 -0
- package/dist/plugins/commands/automation.md.enc +6 -0
- package/dist/plugins/commands/code.md.enc +6 -0
- package/dist/plugins/commands/contribute.md.enc +6 -0
- package/dist/plugins/commands/dashboard.md.enc +6 -0
- package/dist/plugins/commands/env.md.enc +6 -0
- package/dist/plugins/commands/explore.md.enc +6 -0
- package/dist/plugins/commands/field-evolve.md.enc +6 -0
- package/dist/plugins/commands/global.md.enc +6 -0
- package/dist/plugins/commands/init.md.enc +6 -0
- package/dist/plugins/commands/list.md.enc +6 -0
- package/dist/plugins/commands/memory.md.enc +6 -0
- package/dist/plugins/commands/monitor.md.enc +6 -0
- package/dist/plugins/commands/org.md.enc +6 -0
- package/dist/plugins/commands/persist.md.enc +6 -0
- package/dist/plugins/commands/plan.md.enc +6 -0
- package/dist/plugins/commands/plugin.md.enc +6 -0
- package/dist/plugins/commands/project-evolve.md.enc +6 -0
- package/dist/plugins/commands/review.md.enc +6 -0
- package/dist/plugins/commands/run.md.enc +6 -0
- package/dist/plugins/commands/status.md.enc +6 -0
- package/dist/plugins/commands/sync.md.enc +6 -0
- package/dist/plugins/commands/update.md.enc +6 -0
- package/dist/plugins/env-capabilities/env-core/plugin.json +33 -0
- package/dist/plugins/hooks/README.en.md.enc +6 -0
- package/dist/plugins/hooks/README.md.enc +6 -0
- package/dist/plugins/hooks/artifact-evaluation-hook.js +2 -0
- package/dist/plugins/hooks/cognitive-dreamer.js +2 -0
- package/dist/plugins/hooks/cognitive-sync.js +2 -0
- package/dist/plugins/hooks/cognitive-tracker.js +2 -0
- package/dist/plugins/hooks/config/detection-patterns.yaml.enc +6 -0
- package/dist/plugins/hooks/constitution-guard.js +2 -0
- package/dist/plugins/hooks/do-review-separation-guard.js +2 -0
- package/dist/plugins/hooks/environment-autocommit.js +2 -0
- package/dist/plugins/hooks/environment-doctor.js +1 -0
- package/dist/plugins/hooks/environment-startup-scan.js +2 -0
- package/dist/plugins/hooks/execution-tracker.js +2 -0
- package/dist/plugins/hooks/frozen-zone-guard.js +2 -0
- package/dist/plugins/hooks/layer1-validator.js +2 -0
- package/dist/plugins/hooks/lib/artifact-evaluator.js +1 -0
- package/dist/plugins/hooks/lib/auto-fix-loop.js +1 -0
- package/dist/plugins/hooks/lib/benchmarks/change-detector.js +1 -0
- package/dist/plugins/hooks/lib/benchmarks/evaluator.js +1 -0
- package/dist/plugins/hooks/lib/benchmarks/integration-example.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/adaptive-matcher.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/base-store.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/causal-engine.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/cognitive-config.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/cognitive-fingerprint.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/collective-sync.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/confidence-engine.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/dream-engine.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/episodic-store.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/index.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/kernel.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/knowledge-distiller.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/memory-transport.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/persistence-manager.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/priority-store.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/procedural-store.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/semantic-store.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/skill-tuner.js +1 -0
- package/dist/plugins/hooks/lib/cognitive/wiki-materializer.js +1 -0
- package/dist/plugins/hooks/lib/detection-pattern-loader.js +1 -0
- package/dist/plugins/hooks/lib/directory-discovery.js +1 -0
- package/dist/plugins/hooks/lib/environment-capability-package.js +1 -0
- package/dist/plugins/hooks/lib/environment-capability-probe.js +1 -0
- package/dist/plugins/hooks/lib/environment-config-loader.js +1 -0
- package/dist/plugins/hooks/lib/environment-executor.js +1 -0
- package/dist/plugins/hooks/lib/environment-feedback.js +1 -0
- package/dist/plugins/hooks/lib/environment-health-monitor.js +1 -0
- package/dist/plugins/hooks/lib/environment-knowledge-synthesizer.js +1 -0
- package/dist/plugins/hooks/lib/environment-knowledge-validator.js +1 -0
- package/dist/plugins/hooks/lib/environment-learning-discoverer.js +1 -0
- package/dist/plugins/hooks/lib/environment-learning-engine.js +1 -0
- package/dist/plugins/hooks/lib/environment-module-repository.js +1 -0
- package/dist/plugins/hooks/lib/environment-planner.js +1 -0
- package/dist/plugins/hooks/lib/environment-plugin-registry.js +1 -0
- package/dist/plugins/hooks/lib/environment-readiness.js +1 -0
- package/dist/plugins/hooks/lib/environment-route-ranking.js +1 -0
- package/dist/plugins/hooks/lib/environment-strategy-overlay.js +1 -0
- package/dist/plugins/hooks/lib/execution-path.js +1 -0
- package/dist/plugins/hooks/lib/external-mount-adapter.js +1 -0
- package/dist/plugins/hooks/lib/external-scanner.js +1 -0
- package/dist/plugins/hooks/lib/hook-error-recorder.js +1 -0
- package/dist/plugins/hooks/lib/hook-logger.js +1 -0
- package/dist/plugins/hooks/lib/hook-runner.js +2 -0
- package/dist/plugins/hooks/lib/hook-state-manager.js +1 -0
- package/dist/plugins/hooks/lib/memory-extractor.js +1 -0
- package/dist/plugins/hooks/lib/memory-manager.js +1 -0
- package/dist/plugins/hooks/lib/metrics-analyzer.js +1 -0
- package/dist/plugins/hooks/lib/mount-manager.js +1 -0
- package/dist/plugins/hooks/lib/plugin-activation-registry.js +1 -0
- package/dist/plugins/hooks/lib/plugin-selector.js +1 -0
- package/dist/plugins/hooks/lib/plugin-source-registry.js +1 -0
- package/dist/plugins/hooks/lib/plugin-workspace-registry.js +1 -0
- package/dist/plugins/hooks/lib/project-evolution/auto-fixer.js +1 -0
- package/dist/plugins/hooks/lib/project-evolution/memory-manager.js +1 -0
- package/dist/plugins/hooks/lib/project-evolution/pattern-detector.js +1 -0
- package/dist/plugins/hooks/lib/project-evolution/semantic-indexer.js +1 -0
- package/dist/plugins/hooks/lib/rollback-tracker.js +1 -0
- package/dist/plugins/hooks/lib/source-code-scanner.js +1 -0
- package/dist/plugins/hooks/lib/technology-stack-detector.js +1 -0
- package/dist/plugins/hooks/lib/test-failure-analyzer.js +1 -0
- package/dist/plugins/hooks/lib/test-failure-fixer.js +1 -0
- package/dist/plugins/hooks/lib/trace-context.js +1 -0
- package/dist/plugins/hooks/lib/validation-patterns.js +1 -0
- package/dist/plugins/hooks/memory-sync.js +1 -0
- package/dist/plugins/hooks/pipeline-observer.js +2 -0
- package/dist/plugins/hooks/retry-limit-guard.js +2 -0
- package/dist/plugins/hooks/scope-sentinel.js +2 -0
- package/dist/plugins/hooks/secret-scanner.js +2 -0
- package/dist/plugins/hooks/stop-evolve-prompt.js +1 -0
- package/dist/plugins/hooks/trace-initialization.js +2 -0
- package/dist/plugins/hooks/version-checker.js +2 -0
- package/dist/plugins/memory/templates/code-quality.yaml.enc +6 -0
- package/dist/plugins/memory/templates/multi-system.yaml.enc +6 -0
- package/dist/plugins/memory/templates/team-habits.yaml.enc +6 -0
- package/dist/plugins/memory/templates/testing.yaml.enc +6 -0
- package/dist/plugins/skills/README.en.md.enc +6 -0
- package/dist/plugins/skills/README.md.enc +6 -0
- package/dist/plugins/skills/ab-test-executor/SKILL.md.enc +6 -0
- package/dist/plugins/skills/benchmark-executor/SKILL.md.enc +6 -0
- package/dist/plugins/skills/benchmark-generator/SKILL.md.enc +6 -0
- package/dist/plugins/skills/content-prompts/SKILL.md.enc +6 -0
- package/dist/plugins/skills/delivery-stage/SKILL.md.enc +6 -0
- package/dist/plugins/skills/design-stage/SKILL.md.enc +6 -0
- package/dist/plugins/skills/environment-learning/SKILL.md.enc +6 -0
- package/dist/plugins/skills/environment-resilience/build-failure-doctor.md.enc +6 -0
- package/dist/plugins/skills/environment-resilience/environment-repair.md.enc +6 -0
- package/dist/plugins/skills/environment-resilience/pre-flight-check.md.enc +6 -0
- package/dist/plugins/skills/experiment-evaluator/SKILL.md.enc +6 -0
- package/dist/plugins/skills/exploration-phase/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-analyzer/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-distiller/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-executor/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-executor/executor.js +2 -0
- package/dist/plugins/skills/field-evolve-fixer/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-learner/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-scanner/SKILL.md.enc +6 -0
- package/dist/plugins/skills/field-evolve-scanner/scripts/fallback-scanner.js +2 -0
- package/dist/plugins/skills/field-evolve-verifier/SKILL.md.enc +6 -0
- package/dist/plugins/skills/heartbeat-monitor/SKILL.md.enc +6 -0
- package/dist/plugins/skills/implementation-stage/SKILL.md.enc +6 -0
- package/dist/plugins/skills/layer1-validation/SKILL.md.enc +6 -0
- package/dist/plugins/skills/multi-role-orchestration/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-content-marketing/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-conversion/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-data-driven/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-growth-strategies/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-private-domain/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-social-commerce/SKILL.md.enc +6 -0
- package/dist/plugins/skills/ops-user-growth/SKILL.md.enc +6 -0
- package/dist/plugins/skills/pending-dashboard/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-analyzer/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-fixer/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-generator/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-learner/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-reviewer/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-scanner/SKILL.md.enc +6 -0
- package/dist/plugins/skills/project-evolve-scanner/scripts/dependency-reuse-checker.js +2 -0
- package/dist/plugins/skills/project-evolve-scanner/scripts/subsystem-coverage.js +2 -0
- package/dist/plugins/skills/project-evolve-verifier/SKILL.md.enc +6 -0
- package/dist/plugins/skills/requirement-stage/SKILL.md.enc +6 -0
- package/dist/plugins/skills/secret-scanner/SKILL.md.enc +6 -0
- package/dist/plugins/skills/skill-forge/SKILL.md.enc +6 -0
- package/dist/plugins/skills/skill-forge/references/description-guide.md.enc +6 -0
- package/dist/plugins/skills/skill-forge/references/quality-rubric.md.enc +6 -0
- package/dist/plugins/skills/skill-forge/references/skill-template.md.enc +6 -0
- package/dist/plugins/skills/startup-guard/SKILL.md.enc +6 -0
- package/dist/plugins/skills/tdd-workflow/SKILL.md.enc +6 -0
- package/dist/plugins/skills/testing-stage/SKILL.md.enc +6 -0
- package/dist/plugins/skills/tracking-validator/SKILL.md.enc +6 -0
- package/dist/scripts/build-crypto.js +2 -0
- package/dist/scripts/cli/contribute.js +1 -0
- package/dist/scripts/cli/dashboard.js +1 -0
- package/dist/scripts/cli/env.js +1 -0
- package/dist/scripts/cli/global-init.js +1 -0
- package/dist/scripts/cli/global.js +1 -0
- package/dist/scripts/cli/index.js +1 -0
- package/dist/scripts/cli/init.js +1 -0
- package/dist/scripts/cli/list.js +1 -0
- package/dist/scripts/cli/memory.js +1 -0
- package/dist/scripts/cli/org.js +1 -0
- package/dist/scripts/cli/plugin.js +1 -0
- package/dist/scripts/cli/practice-report.js +1 -0
- package/dist/scripts/cli/runtime-governance.js +1 -0
- package/dist/scripts/cli/system.js +1 -0
- package/dist/scripts/cli/update.js +1 -0
- package/dist/scripts/commands/catalog.js +1 -0
- package/dist/scripts/commands/slash-command-docs.js +1 -0
- package/dist/scripts/config/external-mounts.config.js +2 -0
- package/dist/scripts/heartbeat/check.js +2 -0
- package/dist/scripts/heartbeat/setup-cron.js +2 -0
- package/dist/scripts/install/adapters.js +1 -0
- package/dist/scripts/install/constants.js +1 -0
- package/dist/scripts/install/file-reader.js +1 -0
- package/dist/scripts/install/index.js +1 -0
- package/dist/scripts/install/shards/constants-shard.js +1 -0
- package/dist/scripts/install/shards/crypto-config-shard.js +1 -0
- package/dist/scripts/install/shards/error-messages-shard.js +1 -0
- package/dist/scripts/install/shards/reassemble.js +1 -0
- package/dist/scripts/install/shards/utils-shard.js +1 -0
- package/dist/scripts/install/shards/version-info-shard.js +1 -0
- package/dist/scripts/postinstall.js +1 -0
- package/dist/scripts/state.js +1 -0
- package/package.json +21 -12
- package/README.en.md +0 -598
- package/bin/autospec.js +0 -3
- package/knowledge/01-principles/00-principles-hierarchy.md +0 -247
- package/knowledge/01-principles/01-first-principles.md +0 -241
- package/knowledge/01-principles/02-strategic-principles.md +0 -286
- package/knowledge/01-principles/03-tactical-principles.md +0 -385
- package/knowledge/01-principles/04-operational-principles.md +0 -275
- package/knowledge/01-principles/05-domain-principles.md +0 -539
- package/knowledge/01-principles/06-methodology-principles.md +0 -281
- package/knowledge/01-principles/07-cognitive-principles.md +0 -277
- package/knowledge/01-principles/08-auto-fix-principles.md +0 -320
- package/knowledge/01-principles/09-constitution.md +0 -220
- package/knowledge/01-principles/10-evolution-mechanism.md +0 -699
- package/knowledge/01-principles/README.en.md +0 -385
- package/knowledge/01-principles/README.md +0 -385
- package/knowledge/02-process/00-overview.md +0 -404
- package/knowledge/02-process/01-requirement.md +0 -113
- package/knowledge/02-process/02-design.md +0 -123
- package/knowledge/02-process/03-implementation.md +0 -90
- package/knowledge/02-process/04-review.md +0 -80
- package/knowledge/02-process/05-testing.md +0 -90
- package/knowledge/02-process/06-delivery.md +0 -88
- package/knowledge/02-process/README.en.md +0 -143
- package/knowledge/02-process/README.md +0 -186
- package/knowledge/03-guides/00-pipeline-protocol.md +0 -438
- package/knowledge/03-guides/01-team-orchestrator.md +0 -368
- package/knowledge/03-guides/02-analyze-requirement.md +0 -195
- package/knowledge/03-guides/03-design-solution.md +0 -401
- package/knowledge/03-guides/04-implement-code.md +0 -205
- package/knowledge/03-guides/05-plan-testing.md +0 -183
- package/knowledge/03-guides/06-generate-tests.md +0 -241
- package/knowledge/03-guides/07-check-release.md +0 -205
- package/knowledge/03-guides/08-evaluate-ai-effect.md +0 -100
- package/knowledge/03-guides/09-review-requirement.md +0 -83
- package/knowledge/03-guides/10-review-design.md +0 -83
- package/knowledge/03-guides/11-review-code.md +0 -111
- package/knowledge/03-guides/12-review-testing.md +0 -76
- package/knowledge/03-guides/13-audit-security.md +0 -89
- package/knowledge/03-guides/14-check-consistency.md +0 -177
- package/knowledge/03-guides/15-run-unit-tests.md +0 -83
- package/knowledge/03-guides/16-run-integration-tests.md +0 -105
- package/knowledge/03-guides/17-analyze-test-context.md +0 -250
- package/knowledge/03-guides/18-log-practice.md +0 -359
- package/knowledge/03-guides/19-distill-skill.md +0 -91
- package/knowledge/03-guides/20-update-skill.md +0 -45
- package/knowledge/03-guides/21-validate-skill.md +0 -72
- package/knowledge/03-guides/22-extract-methodology.md +0 -55
- package/knowledge/03-guides/23-infer-scope.md +0 -174
- package/knowledge/03-guides/24-assess-complexity.md +0 -270
- package/knowledge/03-guides/25-discover-component.md +0 -183
- package/knowledge/03-guides/26-analyze-tech-stack.md +0 -139
- package/knowledge/03-guides/27-scan-environment.md +0 -207
- package/knowledge/03-guides/28-validate-environment.md +0 -207
- package/knowledge/03-guides/29-generate-knowledge.md +0 -234
- package/knowledge/03-guides/30-analyze-ai-capability.md +0 -193
- package/knowledge/03-guides/31-analyze-ai-component.md +0 -169
- package/knowledge/03-guides/32-analyze-ai-agent.md +0 -362
- package/knowledge/03-guides/33-analyze-ai-rag.md +0 -339
- package/knowledge/03-guides/34-assess-ai-task.md +0 -418
- package/knowledge/03-guides/35-evaluate-ai-pipeline.md +0 -219
- package/knowledge/03-guides/36-evaluate-ai-artifact.md +0 -192
- package/knowledge/03-guides/37-plan-ai-evaluation.md +0 -374
- package/knowledge/03-guides/38-evaluate-ai-path.md +0 -274
- package/knowledge/03-guides/39-validate-ai-data.md +0 -276
- package/knowledge/03-guides/40-detect-ai-anomaly.md +0 -213
- package/knowledge/03-guides/41-diagnose-ai-test.md +0 -133
- package/knowledge/03-guides/42-apply-ddd.md +0 -345
- package/knowledge/03-guides/43-run-ai-sdlc.md +0 -475
- package/knowledge/03-guides/44-manage-knowledge.md +0 -369
- package/knowledge/03-guides/45-test-runner.md +0 -254
- package/knowledge/03-guides/README.en.md +0 -212
- package/knowledge/03-guides/README.md +0 -212
- package/knowledge/04-checklists/00-requirement.md +0 -169
- package/knowledge/04-checklists/01-design.md +0 -196
- package/knowledge/04-checklists/02-code.md +0 -197
- package/knowledge/04-checklists/03-test.md +0 -46
- package/knowledge/04-checklists/04-release.md +0 -70
- package/knowledge/04-checklists/README.en.md +0 -119
- package/knowledge/04-checklists/README.md +0 -123
- package/knowledge/05-config/00-validation-patterns.yaml +0 -137
- package/knowledge/05-config/01-team-stage.yaml +0 -95
- package/knowledge/05-config/02-team-tasks.yaml +0 -139
- package/knowledge/05-config/03-role-composition.yaml +0 -346
- package/knowledge/05-config/04-role-extensions.yaml +0 -140
- package/knowledge/05-config/05-skill-compositions.yaml +0 -142
- package/knowledge/05-config/README.en.md +0 -54
- package/knowledge/05-config/README.md +0 -132
- package/knowledge/06-environment/00-template-registry.md +0 -310
- package/knowledge/06-environment/01-detection-patterns.yaml +0 -1692
- package/knowledge/06-environment/README.en.md +0 -40
- package/knowledge/06-environment/README.md +0 -128
- package/knowledge/07-standards/00-coding-style.md +0 -1059
- package/knowledge/07-standards/01-code-review.md +0 -876
- package/knowledge/07-standards/02-data-consistency.md +0 -1085
- package/knowledge/07-standards/03-document-versioning.md +0 -210
- package/knowledge/07-standards/04-risk-detection.md +0 -186
- package/knowledge/07-standards/README.en.md +0 -119
- package/knowledge/07-standards/README.md +0 -123
- package/knowledge/08-organization/00-vision-mission.md +0 -113
- package/knowledge/08-organization/01-ai-native-culture.md +0 -318
- package/knowledge/08-organization/02-team-metrics.md +0 -228
- package/knowledge/08-organization/03-committee-structure.md +0 -54
- package/knowledge/08-organization/04-governance-metrics.md +0 -55
- package/knowledge/08-organization/05-improvement-process.md +0 -71
- package/knowledge/08-organization/README.en.md +0 -165
- package/knowledge/08-organization/README.md +0 -165
- package/knowledge/09-templates/00-requirement-proposal.md +0 -344
- package/knowledge/09-templates/01-architecture-design.md +0 -494
- package/knowledge/09-templates/02-api-design.md +0 -408
- package/knowledge/09-templates/03-database-design.md +0 -313
- package/knowledge/09-templates/04-product-design.md +0 -237
- package/knowledge/09-templates/05-domain-business.md +0 -388
- package/knowledge/09-templates/06-test-design.md +0 -268
- package/knowledge/09-templates/07-evaluation-design.md +0 -372
- package/knowledge/09-templates/08-component-knowledge.md +0 -272
- package/knowledge/09-templates/09-best-practices.md +0 -218
- package/knowledge/09-templates/10-middleware-knowledge.md +0 -342
- package/knowledge/09-templates/README.en.md +0 -222
- package/knowledge/09-templates/README.md +0 -216
- package/knowledge/README.en.md +0 -372
- package/knowledge/README.md +0 -399
- package/plugins/agents/roles/ai-engineer.md +0 -129
- package/plugins/agents/roles/backend-engineer.md +0 -165
- package/plugins/agents/roles/ceo.md +0 -94
- package/plugins/agents/roles/data-engineer.md +0 -135
- package/plugins/agents/roles/devops-engineer.md +0 -181
- package/plugins/agents/roles/frontend-engineer.md +0 -129
- package/plugins/agents/roles/product-owner.md +0 -98
- package/plugins/agents/roles/quality-engineer.md +0 -129
- package/plugins/agents/roles/security-engineer.md +0 -180
- package/plugins/agents/roles/tech-lead.md +0 -97
- package/plugins/agents/support/blind-comparator.md +0 -88
- package/plugins/agents/support/consistency-checker.md +0 -136
- package/plugins/agents/support/failure-diagnostician.md +0 -141
- package/plugins/agents/support/independent-reviewer.md +0 -80
- package/plugins/agents/support/monitoring-agent.md +0 -215
- package/plugins/agents/support/safety-auditor.md +0 -121
- package/plugins/agents/support/skill-benchmarker.md +0 -86
- package/plugins/agents/support/skill-forger.md +0 -105
- package/plugins/agents/support/stage-gate-evaluator.md +0 -205
- package/plugins/agents/support/test-coverage-reviewer.md +0 -73
- package/plugins/benchmarks/templates/README.md +0 -196
- package/plugins/benchmarks/templates/commands/apply-template.yaml +0 -108
- package/plugins/benchmarks/templates/commands/archive-template.yaml +0 -65
- package/plugins/benchmarks/templates/commands/env-export-template.yaml +0 -64
- package/plugins/benchmarks/templates/commands/env-sync-template.yaml +0 -104
- package/plugins/benchmarks/templates/commands/env-template-template.yaml +0 -96
- package/plugins/benchmarks/templates/commands/env-template.yaml +0 -58
- package/plugins/benchmarks/templates/commands/env-update-template.yaml +0 -110
- package/plugins/benchmarks/templates/commands/env-validate-template.yaml +0 -95
- package/plugins/benchmarks/templates/commands/explore-template.yaml +0 -48
- package/plugins/benchmarks/templates/commands/field-evolve-template.yaml +0 -104
- package/plugins/benchmarks/templates/commands/project-evolve-template.yaml +0 -104
- package/plugins/benchmarks/templates/commands/propose-template.yaml +0 -88
- package/plugins/benchmarks/templates/commands/review-template.yaml +0 -124
- package/plugins/benchmarks/templates/commands/run-template.yaml +0 -127
- package/plugins/benchmarks/templates/commands/test-template.yaml +0 -149
- package/plugins/benchmarks/templates/pipeline/agile-template.yaml +0 -84
- package/plugins/benchmarks/templates/pipeline/experiment-template.yaml +0 -92
- package/plugins/benchmarks/templates/pipeline/hotfix-template.yaml +0 -81
- package/plugins/benchmarks/templates/pipeline/waterfall-template.yaml +0 -106
- package/plugins/benchmarks/templates/skills/agile-iteration-template.yaml +0 -78
- package/plugins/benchmarks/templates/skills/benchmark-executor-template.yaml +0 -114
- package/plugins/benchmarks/templates/skills/benchmark-generator-template.yaml +0 -52
- package/plugins/benchmarks/templates/skills/delivery-stage-template.yaml +0 -130
- package/plugins/benchmarks/templates/skills/design-stage-template.yaml +0 -131
- package/plugins/benchmarks/templates/skills/experiment-iteration-template.yaml +0 -60
- package/plugins/benchmarks/templates/skills/exploration-phase-template.yaml +0 -114
- package/plugins/benchmarks/templates/skills/field-evolve-analyzer-template.yaml +0 -51
- package/plugins/benchmarks/templates/skills/field-evolve-distiller-template.yaml +0 -34
- package/plugins/benchmarks/templates/skills/field-evolve-executor-template.yaml +0 -50
- package/plugins/benchmarks/templates/skills/field-evolve-fixer-template.yaml +0 -52
- package/plugins/benchmarks/templates/skills/field-evolve-learner-template.yaml +0 -33
- package/plugins/benchmarks/templates/skills/field-evolve-scanner-template.yaml +0 -74
- package/plugins/benchmarks/templates/skills/field-evolve-template.yaml +0 -71
- package/plugins/benchmarks/templates/skills/field-evolve-verifier-template.yaml +0 -51
- package/plugins/benchmarks/templates/skills/hotfix-iteration-template.yaml +0 -54
- package/plugins/benchmarks/templates/skills/implementation-stage-template.yaml +0 -127
- package/plugins/benchmarks/templates/skills/layer1-validation-template.yaml +0 -121
- package/plugins/benchmarks/templates/skills/project-evolve-analyzer-template.yaml +0 -51
- package/plugins/benchmarks/templates/skills/project-evolve-fixer-template.yaml +0 -52
- package/plugins/benchmarks/templates/skills/project-evolve-generator-template.yaml +0 -34
- package/plugins/benchmarks/templates/skills/project-evolve-learner-template.yaml +0 -50
- package/plugins/benchmarks/templates/skills/project-evolve-reviewer-template.yaml +0 -50
- package/plugins/benchmarks/templates/skills/project-evolve-scanner-template.yaml +0 -75
- package/plugins/benchmarks/templates/skills/project-evolve-template.yaml +0 -72
- package/plugins/benchmarks/templates/skills/project-evolve-verifier-template.yaml +0 -51
- package/plugins/benchmarks/templates/skills/requirement-analyzer-template.yaml +0 -48
- package/plugins/benchmarks/templates/skills/skill-forge-template.yaml +0 -117
- package/plugins/benchmarks/templates/skills/startup-guard-template.yaml +0 -103
- package/plugins/benchmarks/templates/skills/testing-stage-template.yaml +0 -146
- package/plugins/benchmarks/templates/skills/waterfall-iteration-template.yaml +0 -55
- package/plugins/commands/README.en.md +0 -96
- package/plugins/commands/README.md +0 -96
- package/plugins/commands/apply.md +0 -277
- package/plugins/commands/archive.md +0 -132
- package/plugins/commands/env-export.md +0 -79
- package/plugins/commands/env-sync.md +0 -1281
- package/plugins/commands/env-template.md +0 -99
- package/plugins/commands/env-update.md +0 -264
- package/plugins/commands/env-validate.md +0 -176
- package/plugins/commands/env.md +0 -79
- package/plugins/commands/explore.md +0 -193
- package/plugins/commands/field-evolve.md +0 -412
- package/plugins/commands/memory.md +0 -249
- package/plugins/commands/project-evolve.md +0 -920
- package/plugins/commands/propose.md +0 -184
- package/plugins/commands/review.md +0 -140
- package/plugins/commands/run.md +0 -1052
- package/plugins/commands/status.md +0 -183
- package/plugins/commands/test.md +0 -389
- package/plugins/hooks/README.en.md +0 -56
- package/plugins/hooks/README.md +0 -56
- package/plugins/hooks/ai-project-guard.js +0 -329
- package/plugins/hooks/artifact-evaluation-hook.js +0 -237
- package/plugins/hooks/constitution-guard.js +0 -211
- package/plugins/hooks/environment-autocommit.js +0 -606
- package/plugins/hooks/environment-manager.js +0 -779
- package/plugins/hooks/execution-tracker.js +0 -459
- package/plugins/hooks/frozen-zone-guard.js +0 -140
- package/plugins/hooks/layer1-validator.js +0 -539
- package/plugins/hooks/lib/artifact-evaluator.js +0 -414
- package/plugins/hooks/lib/auto-fix-loop.js +0 -605
- package/plugins/hooks/lib/benchmarks/change-detector.js +0 -390
- package/plugins/hooks/lib/benchmarks/evaluator.js +0 -605
- package/plugins/hooks/lib/benchmarks/integration-example.js +0 -169
- package/plugins/hooks/lib/data-and-ai-detector.js +0 -275
- package/plugins/hooks/lib/detection-pattern-loader.js +0 -865
- package/plugins/hooks/lib/directory-discovery.js +0 -395
- package/plugins/hooks/lib/environment-config-loader.js +0 -345
- package/plugins/hooks/lib/environment-detector.js +0 -553
- package/plugins/hooks/lib/environment-evolver.js +0 -564
- package/plugins/hooks/lib/environment-registry.js +0 -813
- package/plugins/hooks/lib/execution-path.js +0 -427
- package/plugins/hooks/lib/hook-error-recorder.js +0 -245
- package/plugins/hooks/lib/hook-logger.js +0 -538
- package/plugins/hooks/lib/hook-runner.js +0 -97
- package/plugins/hooks/lib/hook-state-manager.js +0 -578
- package/plugins/hooks/lib/memory-extractor.js +0 -399
- package/plugins/hooks/lib/memory-manager.js +0 -673
- package/plugins/hooks/lib/metrics-analyzer.js +0 -489
- package/plugins/hooks/lib/project-evolution/auto-fixer.js +0 -511
- package/plugins/hooks/lib/project-evolution/memory-manager.js +0 -346
- package/plugins/hooks/lib/project-evolution/pattern-detector.js +0 -476
- package/plugins/hooks/lib/project-evolution/semantic-indexer.js +0 -480
- package/plugins/hooks/lib/project-structure-detector.js +0 -326
- package/plugins/hooks/lib/rollback-tracker.js +0 -346
- package/plugins/hooks/lib/source-code-scanner.js +0 -596
- package/plugins/hooks/lib/technology-stack-detector.js +0 -374
- package/plugins/hooks/lib/test-auto-fix.test.js +0 -194
- package/plugins/hooks/lib/test-failure-analyzer.js +0 -375
- package/plugins/hooks/lib/test-failure-fixer.js +0 -268
- package/plugins/hooks/lib/trace-context.js +0 -277
- package/plugins/hooks/lib/validation-patterns.js +0 -415
- package/plugins/hooks/memory-sync.js +0 -171
- package/plugins/hooks/monitoring-trigger.js +0 -467
- package/plugins/hooks/pipeline-observer.js +0 -413
- package/plugins/hooks/scope-sentinel.js +0 -204
- package/plugins/hooks/trace-initialization.js +0 -169
- package/plugins/memory/templates/code-quality.yaml +0 -149
- package/plugins/memory/templates/multi-system.yaml +0 -155
- package/plugins/memory/templates/team-habits.yaml +0 -119
- package/plugins/memory/templates/testing.yaml +0 -121
- package/plugins/skills/README.en.md +0 -59
- package/plugins/skills/README.md +0 -114
- package/plugins/skills/agile-iteration/SKILL.md +0 -187
- package/plugins/skills/benchmark-executor/SKILL.md +0 -647
- package/plugins/skills/benchmark-generator/SKILL.md +0 -349
- package/plugins/skills/delivery-stage/SKILL.md +0 -324
- package/plugins/skills/design-stage/SKILL.md +0 -307
- package/plugins/skills/experiment-evaluator/SKILL.md +0 -271
- package/plugins/skills/experiment-iteration/SKILL.md +0 -154
- package/plugins/skills/exploration-phase/SKILL.md +0 -216
- package/plugins/skills/field-evolve-analyzer/SKILL.md +0 -65
- package/plugins/skills/field-evolve-distiller/SKILL.md +0 -66
- package/plugins/skills/field-evolve-executor/SKILL.md +0 -94
- package/plugins/skills/field-evolve-executor/executor.js +0 -342
- package/plugins/skills/field-evolve-fixer/SKILL.md +0 -69
- package/plugins/skills/field-evolve-learner/SKILL.md +0 -65
- package/plugins/skills/field-evolve-scanner/SKILL.md +0 -87
- package/plugins/skills/field-evolve-scanner/scripts/fallback-scanner.js +0 -288
- package/plugins/skills/field-evolve-verifier/SKILL.md +0 -64
- package/plugins/skills/hotfix-iteration/SKILL.md +0 -279
- package/plugins/skills/implementation-stage/SKILL.md +0 -320
- package/plugins/skills/layer1-validation/SKILL.md +0 -79
- package/plugins/skills/pending-dashboard/SKILL.md +0 -110
- package/plugins/skills/project-evolve-analyzer/SKILL.md +0 -95
- package/plugins/skills/project-evolve-fixer/SKILL.md +0 -99
- package/plugins/skills/project-evolve-generator/SKILL.md +0 -149
- package/plugins/skills/project-evolve-learner/SKILL.md +0 -103
- package/plugins/skills/project-evolve-reviewer/SKILL.md +0 -104
- package/plugins/skills/project-evolve-scanner/SKILL.md +0 -95
- package/plugins/skills/project-evolve-scanner/scripts/dependency-reuse-checker.js +0 -395
- package/plugins/skills/project-evolve-scanner/scripts/subsystem-coverage.js +0 -315
- package/plugins/skills/project-evolve-verifier/SKILL.md +0 -105
- package/plugins/skills/requirement-stage/SKILL.md +0 -217
- package/plugins/skills/skill-forge/SKILL.md +0 -223
- package/plugins/skills/skill-forge/references/description-guide.md +0 -92
- package/plugins/skills/skill-forge/references/quality-rubric.md +0 -104
- package/plugins/skills/skill-forge/references/skill-template.md +0 -106
- package/plugins/skills/startup-guard/SKILL.md +0 -38
- package/plugins/skills/testing-stage/SKILL.md +0 -770
- package/plugins/skills/waterfall-iteration/SKILL.md +0 -115
- package/scripts/cli/global-init.js +0 -288
- package/scripts/cli/global.js +0 -324
- package/scripts/cli/index.js +0 -55
- package/scripts/cli/init.js +0 -408
- package/scripts/cli/list.js +0 -70
- package/scripts/cli/org.js +0 -340
- package/scripts/cli/update.js +0 -44
- package/scripts/config/commands.config.js +0 -145
- package/scripts/config/hooks.config.js +0 -197
- package/scripts/install/agents.js +0 -106
- package/scripts/install/commands.js +0 -133
- package/scripts/install/constants.js +0 -463
- package/scripts/install/hook-logger.js +0 -536
- package/scripts/install/hooks.js +0 -110
- package/scripts/install/index.js +0 -39
- package/scripts/install/skills.js +0 -95
- package/scripts/postinstall.js +0 -25
- package/scripts/state.js +0 -585
- /package/{plugins → dist/plugins}/hooks/lib/hook-runner.sh +0 -0
|
@@ -1,1059 +0,0 @@
|
|
|
1
|
-
# 通用编码规范
|
|
2
|
-
|
|
3
|
-
> **版本**: v1.1
|
|
4
|
-
> **最后更新**: 2026-03-27
|
|
5
|
-
> **适用范围**: 所有 Java/后端项目
|
|
6
|
-
> **设计原则**: 安全第一、可读性优先、预防为主、复用优先
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 📑 目录
|
|
11
|
-
|
|
12
|
-
0. [复用优先与禁止硬编码](#0-复用优先与禁止硬编码)
|
|
13
|
-
1. [数据安全](#1-数据安全)
|
|
14
|
-
2. [异常处理](#2-异常处理)
|
|
15
|
-
3. [多线程](#3-多线程)
|
|
16
|
-
4. [数据库](#4-数据库)
|
|
17
|
-
5. [国际化](#5-国际化)
|
|
18
|
-
6. [安全](#6-安全)
|
|
19
|
-
7. [日志打印](#7-日志打印)
|
|
20
|
-
8. [监控规范](#8-监控规范)
|
|
21
|
-
9. [编码基础](#9-编码基础)
|
|
22
|
-
10. [命名规范](#10-命名规范)
|
|
23
|
-
11. [面向对象设计原则](#11-面向对象设计原则)
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 0. 复用优先与禁止硬编码
|
|
28
|
-
|
|
29
|
-
### 0.1 优先复用项目现有能力
|
|
30
|
-
|
|
31
|
-
**说明**: 在实现任何功能或修复问题时,必须先扫描项目已有的框架、工具类、组件。
|
|
32
|
-
|
|
33
|
-
**强制要求**:
|
|
34
|
-
- 实现前先搜索代码库,查找是否有类似实现
|
|
35
|
-
- 优先使用项目已有的 AOP 框架、Helper 工具、Util 类
|
|
36
|
-
- 按已有代码的模式和风格实现新功能
|
|
37
|
-
- 绝不重复造轮子
|
|
38
|
-
|
|
39
|
-
**错误示例**:
|
|
40
|
-
```java
|
|
41
|
-
// ❌ 项目已有 TracingHelper,却自己新建埋点类
|
|
42
|
-
public class MyTracingHelper {
|
|
43
|
-
// 重复实现埋点逻辑
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// ❌ 项目已有 LogUtil,却直接使用 logger
|
|
47
|
-
private static final Logger logger = LoggerFactory.getLogger(Xxx.class);
|
|
48
|
-
logger.info("xxx"); // 没有 TraceId,无法链路追踪
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**正确示例**:
|
|
52
|
-
```java
|
|
53
|
-
// ✅ 复用项目已有的 TracingHelper
|
|
54
|
-
@Autowired
|
|
55
|
-
private TracingHelper tracingHelper;
|
|
56
|
-
|
|
57
|
-
// ✅ 使用项目已有的 LogUtil(带 TraceId)
|
|
58
|
-
LogUtil.info("key", "value");
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 0.2 禁止硬编码
|
|
62
|
-
|
|
63
|
-
**说明**: 不可在代码中硬编码目录名、包名、类名、配置项等。
|
|
64
|
-
|
|
65
|
-
**强制要求**:
|
|
66
|
-
- 路径配置从配置文件或环境知识中读取
|
|
67
|
-
- 技术栈信息从项目文件中动态识别
|
|
68
|
-
- 支持不同项目的差异化配置
|
|
69
|
-
|
|
70
|
-
**错误示例**:
|
|
71
|
-
```java
|
|
72
|
-
// ❌ 硬编码路径
|
|
73
|
-
String configPath = "/home/user/projects/myapp/config/";
|
|
74
|
-
|
|
75
|
-
// ❌ 硬编码包名
|
|
76
|
-
String basePackage = "com.example.myapp.service";
|
|
77
|
-
|
|
78
|
-
// ❌ 硬编码文件名
|
|
79
|
-
String pomFile = "backend/service/pom.xml";
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**正确示例**:
|
|
83
|
-
```java
|
|
84
|
-
// ✅ 从配置文件读取
|
|
85
|
-
@Value("${app.config.path}")
|
|
86
|
-
private String configPath;
|
|
87
|
-
|
|
88
|
-
// ✅ 动态扫描识别
|
|
89
|
-
File projectRoot = findProjectRoot();
|
|
90
|
-
List<String> pomFiles = scanForPattern(projectRoot, "**/pom.xml");
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### 0.3 设计原则约束
|
|
94
|
-
|
|
95
|
-
自主修复场景下,必须遵循以下面向对象设计原则:
|
|
96
|
-
|
|
97
|
-
**单一职责原则 (SRP)**:
|
|
98
|
-
- 每个类/方法只负责一项职责
|
|
99
|
-
- 修复代码不创建"上帝类"或"万能方法"
|
|
100
|
-
- 职责单一便于维护、测试和复用
|
|
101
|
-
|
|
102
|
-
**开闭原则 (OCP)**:
|
|
103
|
-
- 对扩展开放,对修改关闭
|
|
104
|
-
- 新增功能通过扩展实现,不修改已有核心代码
|
|
105
|
-
- 通过接口或抽象类约束扩展边界
|
|
106
|
-
|
|
107
|
-
**里氏替换原则 (LSP)**:
|
|
108
|
-
- 子类必须能够替换其父类,程序行为不变
|
|
109
|
-
- 继承必须确保合理,不破坏继承体系
|
|
110
|
-
- 避免滥用继承,优先考虑组合
|
|
111
|
-
|
|
112
|
-
**依赖倒置原则 (DIP)**:
|
|
113
|
-
- 面向接口编程,不依赖具体实现
|
|
114
|
-
- 高层模块和低层模块都依赖抽象
|
|
115
|
-
- 通过构造函数注入、setter 注入实现依赖注入
|
|
116
|
-
|
|
117
|
-
**接口隔离原则 (ISP)**:
|
|
118
|
-
- 使用多个专门的接口,不使用单一的总接口
|
|
119
|
-
- 将臃肿庞大的接口分解为多个独立的较小接口
|
|
120
|
-
- 客户端不应该依赖它不需要的接口
|
|
121
|
-
|
|
122
|
-
**迪米特法则 (最少知道原则)**:
|
|
123
|
-
- 一个对象应该对其他对象有最少的了解
|
|
124
|
-
- 只与直接的朋友通信,不与"陌生人"交谈
|
|
125
|
-
- 降低类与类之间的耦合
|
|
126
|
-
|
|
127
|
-
**合成/复用原则**:
|
|
128
|
-
- 优先使用组合/聚合,其次才是继承
|
|
129
|
-
- 组合复用比继承复用更灵活,耦合度更低
|
|
130
|
-
|
|
131
|
-
**高内聚低耦合**:
|
|
132
|
-
- 模块内部元素应紧密相关(高内聚)
|
|
133
|
-
- 模块之间依赖应尽可能少(低耦合)
|
|
134
|
-
- 变化点必须封装隔离(面向变化设计)
|
|
135
|
-
|
|
136
|
-
**AOP 优先**:
|
|
137
|
-
- 涉及跨切面功能(日志、埋点、鉴权、事务等)时,优先使用 AOP 切面方式
|
|
138
|
-
- 禁止侵入业务代码,通过切面增强实现
|
|
139
|
-
- 保持核心业务逻辑的纯净性
|
|
140
|
-
|
|
141
|
-
> 详细说明和代码示例见:[第 11 节 面向对象设计原则](#11-面向对象设计原则)
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## 1. 数据安全
|
|
146
|
-
|
|
147
|
-
### 1.1 更新数据前必须加锁(一锁二判三更新)
|
|
148
|
-
|
|
149
|
-
**说明**: 在并发场景下,线程读取的数据可能已被其他线程篡改,导致状态机推进错误或重复操作。
|
|
150
|
-
|
|
151
|
-
**原则**:
|
|
152
|
-
- **一锁**: 锁定单点资源(单条记录),并发请求串行处理
|
|
153
|
-
- **二判**: 基于锁定的记录最新状态,判断状态、数值
|
|
154
|
-
- **三更新**: 判断通过后的处理
|
|
155
|
-
|
|
156
|
-
**错误示例**:
|
|
157
|
-
```java
|
|
158
|
-
// ❌ 没有执行二判,直接更新
|
|
159
|
-
transactionTemplate.execute((TransactionStatus status) -> {
|
|
160
|
-
record = repository.loadWithLock(recordId);
|
|
161
|
-
repository.update(record); // 缺少状态检查
|
|
162
|
-
return true;
|
|
163
|
-
});
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
**正确示例**:
|
|
167
|
-
```java
|
|
168
|
-
// ✅ 严格遵循一锁二判三更新
|
|
169
|
-
transactionTemplate.execute((TransactionStatus status) -> {
|
|
170
|
-
// 1. 锁定记录
|
|
171
|
-
record = repository.loadWithLock(recordId);
|
|
172
|
-
// 2. 状态检查
|
|
173
|
-
record.validateState();
|
|
174
|
-
// 3. 更新
|
|
175
|
-
repository.update(record);
|
|
176
|
-
return true;
|
|
177
|
-
});
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### 1.2 禁止使用不安全的数值计算方法
|
|
181
|
-
|
|
182
|
-
**说明**: float/double 是浮点数,会损失精度,严禁用于精度敏感的计算(金额、数量等)。
|
|
183
|
-
|
|
184
|
-
**错误示例**:
|
|
185
|
-
```java
|
|
186
|
-
// ❌ 使用 double 进行精度敏感计算,可能导致精度丢失
|
|
187
|
-
double value1 = 100.50;
|
|
188
|
-
double value2 = 200.75;
|
|
189
|
-
double total = value1 + value2;
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**正确示例**:
|
|
193
|
-
```java
|
|
194
|
-
// ✅ 使用专用精度类型(推荐)
|
|
195
|
-
import com.example.common.util.Decimal;
|
|
196
|
-
|
|
197
|
-
Decimal value1 = new Decimal(100.50);
|
|
198
|
-
Decimal value2 = new Decimal(200.75);
|
|
199
|
-
Decimal total = value1.add(value2);
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
```java
|
|
203
|
-
// ✅ 或使用 BigDecimal(多币种/高精度场景)
|
|
204
|
-
import java.math.BigDecimal;
|
|
205
|
-
|
|
206
|
-
BigDecimal value1 = new BigDecimal("100.50");
|
|
207
|
-
BigDecimal value2 = new BigDecimal("200.75");
|
|
208
|
-
BigDecimal total = value1.add(value2);
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## 2. 异常处理
|
|
214
|
-
|
|
215
|
-
### 2.1 必须在异步方法中捕获和处理异常
|
|
216
|
-
|
|
217
|
-
**说明**: 使用 `@Async`、线程池、Future 等异步机制时,如果没有捕获异常,异常将不会被抛出,上层方法无感知。
|
|
218
|
-
|
|
219
|
-
**错误示例**:
|
|
220
|
-
```java
|
|
221
|
-
// ❌ 异步方法中没有捕获和处理异常
|
|
222
|
-
@Async
|
|
223
|
-
public void asyncCheckStatus(List<String> items) {
|
|
224
|
-
for (String item : items) {
|
|
225
|
-
// do something - 如果抛异常,上层无感知
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
**正确示例**:
|
|
231
|
-
|
|
232
|
-
方式 1:显式捕获异常
|
|
233
|
-
```java
|
|
234
|
-
// ✅ 增加 try catch 显式地捕获和处理异常
|
|
235
|
-
@Async
|
|
236
|
-
public void asyncCheckStatus(List<String> items) {
|
|
237
|
-
try {
|
|
238
|
-
for (String item : items) {
|
|
239
|
-
// do something
|
|
240
|
-
}
|
|
241
|
-
} catch (Exception e) {
|
|
242
|
-
LogUtil.error(e, LOGGER, "异步处理发生异常,items={0}", items);
|
|
243
|
-
// 根据情况进行处理
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
方式 2:使用带返回值的 AsyncResult
|
|
249
|
-
```java
|
|
250
|
-
// ✅ 使用 AsyncResult,上层通过 get() 捕获异常
|
|
251
|
-
@Async
|
|
252
|
-
public AsyncResult<String> asyncCheckStatus(List<String> items) {
|
|
253
|
-
for (String item : items) {
|
|
254
|
-
// do something
|
|
255
|
-
}
|
|
256
|
-
return new AsyncResult("success");
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// 调用方
|
|
260
|
-
public void test() {
|
|
261
|
-
try {
|
|
262
|
-
Future future = asyncCheckStatus();
|
|
263
|
-
future.get(); // 异常会在这里抛出
|
|
264
|
-
} catch (Exception e) {
|
|
265
|
-
LogUtil.error(e, LOGGER, "异步处理发生异常");
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### 2.2 必须处理被捕获的异常
|
|
271
|
-
|
|
272
|
-
**说明**: 禁止使用空的 catch 语句块。忽略异常可能吞掉应该被处理或报告的异常,造成系统风险。
|
|
273
|
-
|
|
274
|
-
**错误示例**:
|
|
275
|
-
```java
|
|
276
|
-
// ❌ 空的 catch 语句块
|
|
277
|
-
public void bad() {
|
|
278
|
-
try {
|
|
279
|
-
// 可能抛出异常的代码
|
|
280
|
-
} catch (SpecificException e) {
|
|
281
|
-
// 空实现 - 吞掉异常,非常危险!
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
**正确示例**:
|
|
287
|
-
```java
|
|
288
|
-
// ✅ 记录异常信息,并采取适当措施
|
|
289
|
-
public void good() {
|
|
290
|
-
try {
|
|
291
|
-
// 可能抛出异常的代码
|
|
292
|
-
} catch (SpecificException e) {
|
|
293
|
-
LogUtil.error(e, LOGGER, "处理过程中发生异常");
|
|
294
|
-
// 提示用户或采取补救措施
|
|
295
|
-
notifyUser("发生错误,请重试");
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
## 3. 多线程
|
|
303
|
-
|
|
304
|
-
### 3.1 必须及时清理 ThreadLocal
|
|
305
|
-
|
|
306
|
-
**说明**: ThreadLocal 使用完毕后不移除,会导致:
|
|
307
|
-
- 线程复用时数据污染,影响业务正确性
|
|
308
|
-
- 内存泄漏(核心线程不会退出,ThreadLocal 一直被持有)
|
|
309
|
-
|
|
310
|
-
**错误示例**:
|
|
311
|
-
```java
|
|
312
|
-
// ❌ ThreadLocal 使用完毕后未清理
|
|
313
|
-
static ThreadLocal<String> localVar = new ThreadLocal<>();
|
|
314
|
-
|
|
315
|
-
public static void bad() {
|
|
316
|
-
localVar.set("value");
|
|
317
|
-
try {
|
|
318
|
-
// 业务代码
|
|
319
|
-
} finally {
|
|
320
|
-
// 没有清理!
|
|
321
|
-
LOGGER.info("finish");
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**正确示例**:
|
|
327
|
-
```java
|
|
328
|
-
// ✅ 在 finally 中调用 remove() 清理
|
|
329
|
-
static ThreadLocal<String> localVar = new ThreadLocal<>();
|
|
330
|
-
|
|
331
|
-
public static void good() {
|
|
332
|
-
localVar.set("value");
|
|
333
|
-
try {
|
|
334
|
-
// 业务代码
|
|
335
|
-
} finally {
|
|
336
|
-
localVar.remove(); // 必须清理
|
|
337
|
-
LOGGER.info("finish");
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
> ⚠️ **注意**: `localVar.set(null)` 不被视为清理,仍会导致内存泄露,必须使用 `remove()`。
|
|
343
|
-
|
|
344
|
-
### 3.2 禁止使用无界线程池
|
|
345
|
-
|
|
346
|
-
**说明**: 无界线程池在极端大流量下会导致:
|
|
347
|
-
- 阻塞导致服务响应超时
|
|
348
|
-
- 系统资源得不到及时释放
|
|
349
|
-
- 内存泄漏 OOM
|
|
350
|
-
|
|
351
|
-
**错误示例**:
|
|
352
|
-
```java
|
|
353
|
-
// ❌ 无界线程池
|
|
354
|
-
Executors.newCachedThreadPool(); // maximumPoolSize 为 Integer.MAX_VALUE
|
|
355
|
-
|
|
356
|
-
// ❌ 使用无界队列
|
|
357
|
-
Executors.newFixedThreadPool(); // 实际使用 new LinkedBlockingQueue<Runnable>()
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
**正确示例**:
|
|
361
|
-
```java
|
|
362
|
-
// ✅ 使用有界队列线程池
|
|
363
|
-
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
|
|
364
|
-
10, // corePoolSize
|
|
365
|
-
50, // maximumPoolSize
|
|
366
|
-
60, // keepAliveTime
|
|
367
|
-
TimeUnit.SECONDS,
|
|
368
|
-
new LinkedBlockingQueue<>(100) // 有界队列
|
|
369
|
-
);
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
---
|
|
373
|
-
|
|
374
|
-
## 4. 数据库
|
|
375
|
-
|
|
376
|
-
### 4.1 禁止使用 SELECT *
|
|
377
|
-
|
|
378
|
-
**说明**: 使用 `SELECT *` 存在以下问题:
|
|
379
|
-
- 性能问题:检索不必要的列,增加网络负载
|
|
380
|
-
- 安全性问题:表结构变化可能导致应用错误
|
|
381
|
-
- 可读性问题:代码不清晰,难以维护
|
|
382
|
-
|
|
383
|
-
**错误示例**:
|
|
384
|
-
```xml
|
|
385
|
-
<!-- ❌ 使用 SELECT * -->
|
|
386
|
-
<select id="getUser" parameterType="int" resultType="UserInfo">
|
|
387
|
-
select * from user_info where id = #{id}
|
|
388
|
-
</select>
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
**正确示例**:
|
|
392
|
-
```xml
|
|
393
|
-
<!-- ✅ 指定具体的列名 -->
|
|
394
|
-
<select id="getUser" parameterType="int" resultType="String">
|
|
395
|
-
select phone_num, email from user_info where id = #{id}
|
|
396
|
-
</select>
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
### 4.2 使用参数化查询防止 SQL 注入
|
|
400
|
-
|
|
401
|
-
**说明**: 必须使用参数化查询,禁止字符串拼接 SQL。
|
|
402
|
-
|
|
403
|
-
**错误示例**:
|
|
404
|
-
```xml
|
|
405
|
-
<!-- ❌ 使用 ${},存在 SQL 注入风险 -->
|
|
406
|
-
<select id="getUserById" resultMap="UserMap" parameterType="java.util.String">
|
|
407
|
-
select id,username from t_user_info where id='${id}'
|
|
408
|
-
</select>
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
**正确示例**:
|
|
412
|
-
```xml
|
|
413
|
-
<!-- ✅ 使用 #{} 参数化查询 -->
|
|
414
|
-
<select id="getUserById" resultMap="UserMap" parameterType="java.util.String">
|
|
415
|
-
select id,username from t_user_info where id=#{id}
|
|
416
|
-
</select>
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
---
|
|
420
|
-
|
|
421
|
-
## 5. 国际化
|
|
422
|
-
|
|
423
|
-
### 5.1 必须在日期时间转换中设置时区
|
|
424
|
-
|
|
425
|
-
**说明**: 如果想支持国际化时间,必须指定时区。
|
|
426
|
-
|
|
427
|
-
**错误示例**:
|
|
428
|
-
```java
|
|
429
|
-
// ❌ 没有设置时区
|
|
430
|
-
public Date bad(final String format, final String dateStr) throws ParseException {
|
|
431
|
-
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
|
|
432
|
-
simpleDateFormat.applyPattern(format);
|
|
433
|
-
return simpleDateFormat.parse(dateStr);
|
|
434
|
-
}
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
**正确示例**:
|
|
438
|
-
```java
|
|
439
|
-
// ✅ 通过 setTimeZone 设置时区
|
|
440
|
-
public Date good(final String format, final String dateStr) throws ParseException {
|
|
441
|
-
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
|
|
442
|
-
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
|
|
443
|
-
simpleDateFormat.applyPattern(format);
|
|
444
|
-
simpleDateFormat.setLenient(false);
|
|
445
|
-
return simpleDateFormat.parse(dateStr);
|
|
446
|
-
}
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
---
|
|
450
|
-
|
|
451
|
-
## 6. 安全
|
|
452
|
-
|
|
453
|
-
### 6.1 验证反序列化的输入数据
|
|
454
|
-
|
|
455
|
-
**说明**: 必须验证要反序列化的不受信任的输入,确保序列化数据仅包含受信任的类,防止远程代码执行漏洞。
|
|
456
|
-
|
|
457
|
-
**正确示例**:
|
|
458
|
-
```java
|
|
459
|
-
// ✅ 通过白名单验证要反序列化的数据
|
|
460
|
-
class WhitelistedObjectInputStream extends ObjectInputStream {
|
|
461
|
-
public Set whitelist;
|
|
462
|
-
|
|
463
|
-
public WhitelistedObjectInputStream(InputStream inputStream, Set wl) throws IOException {
|
|
464
|
-
super(inputStream);
|
|
465
|
-
whitelist = wl;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
@Override
|
|
469
|
-
protected Class<?> resolveClass(ObjectStreamClass cls) throws IOException, ClassNotFoundException {
|
|
470
|
-
if (!whitelist.contains(cls.getName())) {
|
|
471
|
-
throw new InvalidClassException("Unexpected serialized class", cls.getName());
|
|
472
|
-
}
|
|
473
|
-
return super.resolveClass(cls);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
```
|
|
477
|
-
|
|
478
|
-
### 6.2 必须做好接口权限控制
|
|
479
|
-
|
|
480
|
-
**说明**: 防范水平越权、垂直越权、未授权访问等漏洞。
|
|
481
|
-
|
|
482
|
-
**水平越权防范**:
|
|
483
|
-
```java
|
|
484
|
-
// ✅ 增加权限校验
|
|
485
|
-
@RequestMapping(value="/delete/{id}")
|
|
486
|
-
public Object remove(@PathVariable Long id) {
|
|
487
|
-
if (WebUtils.isLogged()) {
|
|
488
|
-
// 增加权限校验:判断提交的数据是否属于当前登录用户
|
|
489
|
-
if (!checkPermission(id, WebUtils.getLoggedUserId())) {
|
|
490
|
-
return error("无权限删除此记录");
|
|
491
|
-
}
|
|
492
|
-
this.service.remove(id, WebUtils.getLoggedUserId());
|
|
493
|
-
return success("删除成功");
|
|
494
|
-
}
|
|
495
|
-
return error("用户未登录");
|
|
496
|
-
}
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### 6.3 禁止使用存在严重安全风险的组件
|
|
500
|
-
|
|
501
|
-
**禁用组件列表**:
|
|
502
|
-
- `xalan:xalan`
|
|
503
|
-
- `org.jolokia:jolokia-core`
|
|
504
|
-
- `org.apache.dubbo:dubbo`
|
|
505
|
-
- `com.alibaba:dubbo`
|
|
506
|
-
- `com.alibaba.fastjson2:fastjson2`
|
|
507
|
-
- `com.alibaba:fastjson`(及其相关变体)
|
|
508
|
-
- `org.apache.druid:druid-core`
|
|
509
|
-
|
|
510
|
-
---
|
|
511
|
-
|
|
512
|
-
## 7. 日志打印
|
|
513
|
-
|
|
514
|
-
### 7.1 必须使用 LogUtil 进行日志打印
|
|
515
|
-
|
|
516
|
-
**说明**: 监控系统通过日志进行监控配置。为了确保链路追踪和监控的有效性,必须使用 `LogUtil` 工具类进行日志打印,它会自动添加 TraceId。
|
|
517
|
-
|
|
518
|
-
**导入路径**:
|
|
519
|
-
```java
|
|
520
|
-
import com.example.common.util.log.LogUtil;
|
|
521
|
-
import com.alibaba.common.logging.Logger;
|
|
522
|
-
import com.alibaba.common.logging.LoggerFactory;
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
**Logger 定义**:
|
|
526
|
-
```java
|
|
527
|
-
// 使用 LoggerFileNames 定义 Logger(推荐,便于日志分类)
|
|
528
|
-
private static final Logger LOGGER = LoggerFactory.getLogger(LoggerFileNames.BIZ_BUSINESS);
|
|
529
|
-
|
|
530
|
-
// 或使用类名
|
|
531
|
-
private static final Logger LOGGER = LoggerFactory.getLogger(YourClass.class);
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
**日志打印方式**:
|
|
535
|
-
|
|
536
|
-
```java
|
|
537
|
-
// ✅ info 日志 - 无参数
|
|
538
|
-
LogUtil.info(LOGGER, "消息内容");
|
|
539
|
-
|
|
540
|
-
// ✅ info 日志 - 带参数(使用 {0}, {1} 占位符)
|
|
541
|
-
LogUtil.info(LOGGER, "处理成功,id={0}, userId={1}", id, userId);
|
|
542
|
-
|
|
543
|
-
// ✅ warn 日志
|
|
544
|
-
LogUtil.warn(LOGGER, "余额不足,userId={0}, balance={1}", userId, balance);
|
|
545
|
-
|
|
546
|
-
// ✅ error 日志 - 带异常
|
|
547
|
-
LogUtil.error(e, LOGGER, "处理异常,id={0}", id);
|
|
548
|
-
|
|
549
|
-
// ✅ error 日志 - 不带异常
|
|
550
|
-
LogUtil.error(LOGGER, "参数校验失败,request={0}", request);
|
|
551
|
-
|
|
552
|
-
// ✅ debug 日志
|
|
553
|
-
LogUtil.debug(LOGGER, "调试信息,data={0}", data);
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
**错误示例**:
|
|
557
|
-
```java
|
|
558
|
-
// ❌ 直接使用 logger 打印,无 TraceId
|
|
559
|
-
LOGGER.info("处理成功,id=" + id);
|
|
560
|
-
|
|
561
|
-
// ❌ 使用 System.out
|
|
562
|
-
System.out.println("处理成功");
|
|
563
|
-
|
|
564
|
-
// ❌ 使用字符串拼接而非占位符
|
|
565
|
-
LogUtil.info(LOGGER, "处理成功,id=" + id); // 应使用 {0} 占位符
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
### 7.2 日志打印最佳实践
|
|
569
|
-
|
|
570
|
-
**1. 关键业务节点必须打印日志**:
|
|
571
|
-
```java
|
|
572
|
-
// 入口日志
|
|
573
|
-
LogUtil.info(LOGGER, "【开始处理】id={0}, userId={1}", id, userId);
|
|
574
|
-
|
|
575
|
-
// 关键状态变更
|
|
576
|
-
LogUtil.info(LOGGER, "【状态变更】id={0}, oldStatus={1}, newStatus={2}",
|
|
577
|
-
id, oldStatus, newStatus);
|
|
578
|
-
|
|
579
|
-
// 出口日志
|
|
580
|
-
LogUtil.info(LOGGER, "【处理完成】id={0}, result={1}", id, result);
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
**2. 异常日志必须包含异常堆栈**:
|
|
584
|
-
```java
|
|
585
|
-
try {
|
|
586
|
-
// 业务代码
|
|
587
|
-
} catch (Exception e) {
|
|
588
|
-
// ✅ 正确:包含异常对象,会打印完整堆栈
|
|
589
|
-
LogUtil.error(e, LOGGER, "处理异常,id={0}", id);
|
|
590
|
-
|
|
591
|
-
// ❌ 错误:丢失异常堆栈
|
|
592
|
-
LogUtil.error(LOGGER, "处理异常,id={0}, error={1}", id, e.getMessage());
|
|
593
|
-
}
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
**3. 日志级别使用规范**:
|
|
597
|
-
|
|
598
|
-
| 级别 | 使用场景 |
|
|
599
|
-
|------|---------|
|
|
600
|
-
| ERROR | 影响业务的异常、需要人工介入处理的问题 |
|
|
601
|
-
| WARN | 可恢复的异常、不符合预期但不影响业务继续运行 |
|
|
602
|
-
| INFO | 关键业务流程、状态变更、外部调用 |
|
|
603
|
-
| DEBUG | 详细的调试信息,生产环境一般关闭 |
|
|
604
|
-
|
|
605
|
-
**4. 日志内容规范**:
|
|
606
|
-
- 使用中文方括号标记模块:`【开始处理】`、`【状态变更】`
|
|
607
|
-
- 包含关键业务字段:id、userId、tradeId 等
|
|
608
|
-
- 避免打印敏感信息(密码、身份证号、银行卡号等)
|
|
609
|
-
|
|
610
|
-
---
|
|
611
|
-
|
|
612
|
-
## 8. 监控规范
|
|
613
|
-
|
|
614
|
-
### 8.1 监控实现方式
|
|
615
|
-
|
|
616
|
-
监控通过 **监控平台** + **日志打印** 实现:
|
|
617
|
-
|
|
618
|
-
1. **业务代码打印日志**: 使用 `LogUtil` 按规范格式打印
|
|
619
|
-
2. **配置监控规则**: 在监控平台配置日志关键字匹配规则
|
|
620
|
-
3. **告警触发**: 当日志匹配规则时触发告警
|
|
621
|
-
|
|
622
|
-
### 8.2 监控日志打印规范
|
|
623
|
-
|
|
624
|
-
**1. 业务监控日志格式**:
|
|
625
|
-
```java
|
|
626
|
-
// 成功监控
|
|
627
|
-
LogUtil.info(LOGGER, "[MONITOR][SUCCESS] id={0}, amount={1}", id, amount);
|
|
628
|
-
|
|
629
|
-
// 失败监控
|
|
630
|
-
LogUtil.error(LOGGER, "[MONITOR][FAIL] id={0}, errorCode={1}, errorMsg={2}",
|
|
631
|
-
id, errorCode, errorMsg);
|
|
632
|
-
```
|
|
633
|
-
|
|
634
|
-
**2. 可监控的关键业务节点**:
|
|
635
|
-
- 交易下单成功/失败
|
|
636
|
-
- 支付成功/失败
|
|
637
|
-
- 确认成功/失败
|
|
638
|
-
- 退款成功/失败
|
|
639
|
-
- 外部接口调用超时/失败
|
|
640
|
-
- 数值核对异常
|
|
641
|
-
- 状态机异常流转
|
|
642
|
-
|
|
643
|
-
---
|
|
644
|
-
|
|
645
|
-
## 9. 编码基础
|
|
646
|
-
|
|
647
|
-
### 9.1 禁止在父子类中存在同名属性
|
|
648
|
-
|
|
649
|
-
**说明**: 父子类存在同名属性时,可能导致:
|
|
650
|
-
- 框架注入时仅注入子类属性,父类属性为 null,造成 NPE
|
|
651
|
-
- 父类方法访问父类属性(未注入),子类方法访问子类属性(已注入),行为不一致
|
|
652
|
-
|
|
653
|
-
**错误示例**:
|
|
654
|
-
```java
|
|
655
|
-
// ❌ 父子类存在同名属性
|
|
656
|
-
public class Task {
|
|
657
|
-
private String name;
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
public class PATask extends Task {
|
|
661
|
-
private String name; // 同名!
|
|
662
|
-
}
|
|
663
|
-
```
|
|
664
|
-
|
|
665
|
-
**正确示例**:
|
|
666
|
-
```java
|
|
667
|
-
// ✅ 使用不同的属性名
|
|
668
|
-
public class Task {
|
|
669
|
-
private String taskName;
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
public class PATask extends Task {
|
|
673
|
-
private String subTaskName;
|
|
674
|
-
}
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
---
|
|
678
|
-
|
|
679
|
-
## 10. 命名规范
|
|
680
|
-
|
|
681
|
-
### 10.1 基本命名规则
|
|
682
|
-
|
|
683
|
-
| 类型 | 规则 | 示例 |
|
|
684
|
-
|------|------|------|
|
|
685
|
-
| 类名 | PascalCase | `TradeOrder`, `UserService` |
|
|
686
|
-
| 方法名 | camelCase | `createOrder`, `validateUser` |
|
|
687
|
-
| 变量名 | camelCase | `orderId`, `userBalance` |
|
|
688
|
-
| 常量 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT` |
|
|
689
|
-
| 包名 | 全小写 | `com.example.trade.biz` |
|
|
690
|
-
|
|
691
|
-
### 10.2 有意义的命名
|
|
692
|
-
|
|
693
|
-
- 类名应该是名词:`Order`, `UserService`
|
|
694
|
-
- 方法名应该是动词或动词短语:`createOrder`, `isValid`
|
|
695
|
-
- 布尔变量应该使用 is/has/can 前缀:`isSuccess`, `hasPermission`
|
|
696
|
-
- 避免使用缩写(除非是通用缩写如 id, url)
|
|
697
|
-
|
|
698
|
-
---
|
|
699
|
-
|
|
700
|
-
## 附录:禁止事项速查表
|
|
701
|
-
|
|
702
|
-
| 类型 | 禁止事项 | 正确做法 |
|
|
703
|
-
|------|---------|---------|
|
|
704
|
-
| 数值计算 | 使用 float/double | 使用 Decimal/BigDecimal 类 |
|
|
705
|
-
| 数据更新 | 不加锁直接更新 | 一锁二判三更新 |
|
|
706
|
-
| 异常处理 | 空 catch 块 | 记录日志并处理 |
|
|
707
|
-
| 异步方法 | 不捕获异常 | try-catch 或 AsyncResult |
|
|
708
|
-
| ThreadLocal | 不清理 | finally 中 remove() |
|
|
709
|
-
| 线程池 | 无界线程池 | 有界线程池 (队列≤100) |
|
|
710
|
-
| SQL | SELECT * | 指定列名 |
|
|
711
|
-
| SQL | 使用 ${} | 使用 #{} |
|
|
712
|
-
| 日志 | 直接用 logger | 使用 LogUtil |
|
|
713
|
-
| 父子类 | 同名属性 | 使用不同属性名 |
|
|
714
|
-
|
|
715
|
-
---
|
|
716
|
-
|
|
717
|
-
## 11. 面向对象设计原则
|
|
718
|
-
|
|
719
|
-
> **说明**: 遵循 SOLID 原则和领域驱动设计 (DDD),编写高内聚、低耦合、易维护的代码
|
|
720
|
-
|
|
721
|
-
### 11.1 单一职责原则 (SRP - Single Responsibility Principle)
|
|
722
|
-
|
|
723
|
-
**原则**: 一个类只负责一个功能领域中的一项职责,只有一个引起它变化的原因。
|
|
724
|
-
|
|
725
|
-
**错误示例**:
|
|
726
|
-
```java
|
|
727
|
-
// ❌ 一个类承担多种职责
|
|
728
|
-
public class OrderService {
|
|
729
|
-
public void createOrder(Order order) { /* 创建订单 */ }
|
|
730
|
-
public void sendEmail(Order order) { /* 发送邮件 */ }
|
|
731
|
-
public String generateReport(List<Order> orders) { /* 生成报表 */ }
|
|
732
|
-
public void exportToExcel(List<Order> orders) { /* 导出 Excel */ }
|
|
733
|
-
}
|
|
734
|
-
```
|
|
735
|
-
|
|
736
|
-
**正确示例**:
|
|
737
|
-
```java
|
|
738
|
-
// ✅ 职责分离
|
|
739
|
-
public class OrderService {
|
|
740
|
-
public void createOrder(Order order) { /* 创建订单 */ }
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
public class OrderNotificationService {
|
|
744
|
-
public void sendOrderEmail(Order order) { /* 发送订单邮件 */ }
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
public class OrderReportService {
|
|
748
|
-
public String generateReport(List<Order> orders) { /* 生成报表 */ }
|
|
749
|
-
public void exportToExcel(List<Order> orders) { /* 导出 Excel */ }
|
|
750
|
-
}
|
|
751
|
-
```
|
|
752
|
-
|
|
753
|
-
### 11.2 开闭原则 (OCP - Open/Closed Principle)
|
|
754
|
-
|
|
755
|
-
**原则**: 对扩展开放,对修改关闭。新增功能通过扩展实现,而非修改现有代码。
|
|
756
|
-
|
|
757
|
-
**错误示例**:
|
|
758
|
-
```java
|
|
759
|
-
// ❌ 每新增支付方式都要修改这个方法
|
|
760
|
-
public class PaymentService {
|
|
761
|
-
public void pay(String payType, Money amount) {
|
|
762
|
-
if ("THIRD_PARTY".equals(payType)) {
|
|
763
|
-
// 第三方支付
|
|
764
|
-
} else if ("SCAN_CODE".equals(payType)) {
|
|
765
|
-
// 扫码支付
|
|
766
|
-
} else if ("BANK".equals(payType)) {
|
|
767
|
-
// 银行卡支付
|
|
768
|
-
}
|
|
769
|
-
// 新增支付方式需要修改此处...
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
```
|
|
773
|
-
|
|
774
|
-
**正确示例**:
|
|
775
|
-
```java
|
|
776
|
-
// ✅ 使用策略模式,新增支付方式只需添加新的实现类
|
|
777
|
-
public interface PaymentStrategy {
|
|
778
|
-
void pay(Money amount);
|
|
779
|
-
String getPayType();
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
@Component
|
|
783
|
-
public class ThirdPartyPayStrategy implements PaymentStrategy {
|
|
784
|
-
@Override
|
|
785
|
-
public void pay(Money amount) { /* 第三方支付 */ }
|
|
786
|
-
@Override
|
|
787
|
-
public String getPayType() { return "THIRD_PARTY"; }
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
@Component
|
|
791
|
-
public class ScanCodePayStrategy implements PaymentStrategy {
|
|
792
|
-
@Override
|
|
793
|
-
public void pay(Money amount) { /* 扫码支付 */ }
|
|
794
|
-
@Override
|
|
795
|
-
public String getPayType() { return "SCAN_CODE"; }
|
|
796
|
-
}
|
|
797
|
-
|
|
798
|
-
@Service
|
|
799
|
-
public class PaymentService {
|
|
800
|
-
private final Map<String, PaymentStrategy> strategies;
|
|
801
|
-
|
|
802
|
-
public PaymentService(List<PaymentStrategy> strategyList) {
|
|
803
|
-
this.strategies = strategyList.stream()
|
|
804
|
-
.collect(Collectors.toMap(PaymentStrategy::getPayType, s -> s));
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
public void pay(String payType, Money amount) {
|
|
808
|
-
PaymentStrategy strategy = strategies.get(payType);
|
|
809
|
-
if (strategy == null) {
|
|
810
|
-
throw new BusinessException("不支持的支付方式:" + payType);
|
|
811
|
-
}
|
|
812
|
-
strategy.pay(amount);
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
```
|
|
816
|
-
|
|
817
|
-
### 11.3 里氏替换原则 (LSP - Liskov Substitution Principle)
|
|
818
|
-
|
|
819
|
-
**原则**: 子类必须能够替换其父类,程序行为不变。
|
|
820
|
-
|
|
821
|
-
**错误示例**:
|
|
822
|
-
```java
|
|
823
|
-
// ❌ 正方形继承矩形,违反里氏替换
|
|
824
|
-
public class Rectangle {
|
|
825
|
-
protected int width;
|
|
826
|
-
protected int height;
|
|
827
|
-
|
|
828
|
-
public void setWidth(int width) { this.width = width; }
|
|
829
|
-
public void setHeight(int height) { this.height = height; }
|
|
830
|
-
public int getArea() { return width * height; }
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
public class Square extends Rectangle {
|
|
834
|
-
@Override
|
|
835
|
-
public void setWidth(int width) {
|
|
836
|
-
this.width = width;
|
|
837
|
-
this.height = width; // 违反父类行为预期
|
|
838
|
-
}
|
|
839
|
-
@Override
|
|
840
|
-
public void setHeight(int height) {
|
|
841
|
-
this.width = height;
|
|
842
|
-
this.height = height; // 违反父类行为预期
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
```
|
|
846
|
-
|
|
847
|
-
**正确示例**:
|
|
848
|
-
```java
|
|
849
|
-
// ✅ 使用组合或独立抽象
|
|
850
|
-
public interface Shape {
|
|
851
|
-
int getArea();
|
|
852
|
-
}
|
|
853
|
-
|
|
854
|
-
public class Rectangle implements Shape {
|
|
855
|
-
private int width;
|
|
856
|
-
private int height;
|
|
857
|
-
|
|
858
|
-
public Rectangle(int width, int height) {
|
|
859
|
-
this.width = width;
|
|
860
|
-
this.height = height;
|
|
861
|
-
}
|
|
862
|
-
|
|
863
|
-
@Override
|
|
864
|
-
public int getArea() { return width * height; }
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
public class Square implements Shape {
|
|
868
|
-
private int side;
|
|
869
|
-
|
|
870
|
-
public Square(int side) { this.side = side; }
|
|
871
|
-
|
|
872
|
-
@Override
|
|
873
|
-
public int getArea() { return side * side; }
|
|
874
|
-
}
|
|
875
|
-
```
|
|
876
|
-
|
|
877
|
-
### 11.4 接口隔离原则 (ISP - Interface Segregation Principle)
|
|
878
|
-
|
|
879
|
-
**原则**: 客户端不应该依赖它不需要的接口。接口应细粒度,避免"胖接口"。
|
|
880
|
-
|
|
881
|
-
**错误示例**:
|
|
882
|
-
```java
|
|
883
|
-
// ❌ 胖接口,强迫实现类实现不需要的方法
|
|
884
|
-
public interface OrderService {
|
|
885
|
-
void createOrder(Order order);
|
|
886
|
-
void cancelOrder(Long orderId);
|
|
887
|
-
void queryOrder(Long orderId);
|
|
888
|
-
void exportOrderReport(List<Long> orderIds); // 不是所有实现都需要
|
|
889
|
-
void syncOrderToThirdParty(Order order); // 不是所有实现都需要
|
|
890
|
-
}
|
|
891
|
-
```
|
|
892
|
-
|
|
893
|
-
**正确示例**:
|
|
894
|
-
```java
|
|
895
|
-
// ✅ 接口细粒度拆分
|
|
896
|
-
public interface OrderCommandService {
|
|
897
|
-
void createOrder(Order order);
|
|
898
|
-
void cancelOrder(Long orderId);
|
|
899
|
-
}
|
|
900
|
-
|
|
901
|
-
public interface OrderQueryService {
|
|
902
|
-
Order queryOrder(Long orderId);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
public interface OrderReportService {
|
|
906
|
-
void exportOrderReport(List<Long> orderIds);
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
public interface OrderSyncService {
|
|
910
|
-
void syncOrderToThirdParty(Order order);
|
|
911
|
-
}
|
|
912
|
-
```
|
|
913
|
-
|
|
914
|
-
### 11.5 依赖倒置原则 (DIP - Dependency Inversion Principle)
|
|
915
|
-
|
|
916
|
-
**原则**: 高层模块不依赖低层模块,都依赖抽象。面向接口编程。
|
|
917
|
-
|
|
918
|
-
**错误示例**:
|
|
919
|
-
```java
|
|
920
|
-
// ❌ 高层模块直接依赖低层具体实现
|
|
921
|
-
public class OrderService {
|
|
922
|
-
private MySQLOrderRepository repository = new MySQLOrderRepository(); // 直接依赖具体实现
|
|
923
|
-
|
|
924
|
-
public void createOrder(Order order) {
|
|
925
|
-
repository.save(order);
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
```
|
|
929
|
-
|
|
930
|
-
**正确示例**:
|
|
931
|
-
```java
|
|
932
|
-
// ✅ 依赖抽象,通过依赖注入
|
|
933
|
-
public interface OrderRepository {
|
|
934
|
-
void save(Order order);
|
|
935
|
-
Order findById(Long id);
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
@Repository
|
|
939
|
-
public class MySQLOrderRepository implements OrderRepository {
|
|
940
|
-
@Override
|
|
941
|
-
public void save(Order order) { /* MySQL 实现 */ }
|
|
942
|
-
@Override
|
|
943
|
-
public Order findById(Long id) { /* MySQL 实现 */ }
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
@Service
|
|
947
|
-
public class OrderService {
|
|
948
|
-
private final OrderRepository repository; // 依赖抽象
|
|
949
|
-
|
|
950
|
-
public OrderService(OrderRepository repository) { // 构造器注入
|
|
951
|
-
this.repository = repository;
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
public void createOrder(Order order) {
|
|
955
|
-
repository.save(order);
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
```
|
|
959
|
-
|
|
960
|
-
### 11.6 领域驱动设计原则 (DDD)
|
|
961
|
-
|
|
962
|
-
#### 11.6.1 聚合根设计
|
|
963
|
-
|
|
964
|
-
**聚合根 (Aggregate Root)**: 作为事务一致性边界,外部只能通过聚合根访问内部实体。
|
|
965
|
-
|
|
966
|
-
```java
|
|
967
|
-
// ✅ 聚合根示例:交易订单
|
|
968
|
-
public class TradeOrder {
|
|
969
|
-
private Long orderId;
|
|
970
|
-
private String userId;
|
|
971
|
-
private OrderStatus status;
|
|
972
|
-
private Money amount;
|
|
973
|
-
private List<TradePay> payments; // 内部实体,外部不直接访问
|
|
974
|
-
|
|
975
|
-
// 业务方法内聚到领域对象
|
|
976
|
-
public void confirm() {
|
|
977
|
-
if (this.status != OrderStatus.PAYING) {
|
|
978
|
-
throw new BusinessException("订单状态不允许确认");
|
|
979
|
-
}
|
|
980
|
-
this.status = OrderStatus.SUCCESS;
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
public void addPayment(TradePay payment) {
|
|
984
|
-
// 通过聚合根管理内部实体
|
|
985
|
-
this.payments.add(payment);
|
|
986
|
-
}
|
|
987
|
-
}
|
|
988
|
-
```
|
|
989
|
-
|
|
990
|
-
#### 11.6.2 业务逻辑内聚
|
|
991
|
-
|
|
992
|
-
**原则**: 核心业务逻辑放在领域对象中,而非 Service 层。Service 层负责编排和协调。
|
|
993
|
-
|
|
994
|
-
**错误示例**:
|
|
995
|
-
```java
|
|
996
|
-
// ❌ 贫血模型:领域对象只有 getter/setter,业务逻辑在 Service
|
|
997
|
-
public class Order {
|
|
998
|
-
private Long id;
|
|
999
|
-
private OrderStatus status;
|
|
1000
|
-
// 只有 getter/setter,无业务逻辑
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
public class OrderService {
|
|
1004
|
-
public void confirmOrder(Long orderId) {
|
|
1005
|
-
Order order = repository.findById(orderId);
|
|
1006
|
-
if (order.getStatus() != OrderStatus.PAYING) { // 业务逻辑泄露到 Service
|
|
1007
|
-
throw new BusinessException("订单状态不允许确认");
|
|
1008
|
-
}
|
|
1009
|
-
order.setStatus(OrderStatus.SUCCESS); // 直接修改状态
|
|
1010
|
-
repository.save(order);
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1013
|
-
```
|
|
1014
|
-
|
|
1015
|
-
**正确示例**:
|
|
1016
|
-
```java
|
|
1017
|
-
// ✅ 充血模型:业务逻辑内聚到领域对象
|
|
1018
|
-
public class Order {
|
|
1019
|
-
private Long id;
|
|
1020
|
-
private OrderStatus status;
|
|
1021
|
-
|
|
1022
|
-
// 业务逻辑内聚
|
|
1023
|
-
public void confirm() {
|
|
1024
|
-
if (this.status != OrderStatus.PAYING) {
|
|
1025
|
-
throw new BusinessException("订单状态不允许确认");
|
|
1026
|
-
}
|
|
1027
|
-
this.status = OrderStatus.SUCCESS;
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
public boolean canCancel() {
|
|
1031
|
-
return this.status == OrderStatus.INIT || this.status == OrderStatus.PAYING;
|
|
1032
|
-
}
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
public class OrderService {
|
|
1036
|
-
public void confirmOrder(Long orderId) {
|
|
1037
|
-
Order order = repository.findById(orderId);
|
|
1038
|
-
order.confirm(); // 调用领域对象的业务方法
|
|
1039
|
-
repository.save(order);
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
```
|
|
1043
|
-
|
|
1044
|
-
### 11.7 面向对象设计速查表
|
|
1045
|
-
|
|
1046
|
-
| 原则 | 核心要点 | 违反信号 |
|
|
1047
|
-
|------|---------|---------|
|
|
1048
|
-
| SRP | 一个类一个职责 | 类过大 (>500 行)、方法过多 (>20 个)、职责不相关 |
|
|
1049
|
-
| OCP | 扩展而非修改 | 新增功能需修改核心类、大量 if-else/switch |
|
|
1050
|
-
| LSP | 子类可替换父类 | 子类覆盖父类方法改变行为、子类抛出父类不抛的异常 |
|
|
1051
|
-
| ISP | 接口细粒度 | 接口方法过多、实现类有空方法或抛 UnsupportedOperationException |
|
|
1052
|
-
| DIP | 依赖抽象 | new 具体类、直接依赖第三方 SDK 类 |
|
|
1053
|
-
| DDD | 业务逻辑内聚 | 贫血模型 (只有 getter/setter)、Service 层过重 |
|
|
1054
|
-
|
|
1055
|
-
---
|
|
1056
|
-
|
|
1057
|
-
**维护者**: AutoSpec 团队
|
|
1058
|
-
**反馈渠道**: 知识库 Git 仓库 Issue
|
|
1059
|
-
**关联文档**: `knowledge/07-standards/02-data-consistency.md`, `knowledge/07-standards/01-code-review.md`
|