@howlil/ez-agents 3.5.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +735 -537
- package/agents/ez-architect-agent.md +267 -0
- package/agents/ez-backend-agent.md +303 -0
- package/agents/ez-chief-strategist.md +271 -0
- package/agents/ez-codebase-mapper.md +770 -770
- package/agents/ez-context-manager.md +319 -0
- package/agents/ez-debugger.md +1255 -1255
- package/agents/ez-design-expert.md +347 -0
- package/agents/ez-devops-agent.md +331 -0
- package/agents/ez-executor.md +487 -487
- package/agents/ez-frontend-agent.md +322 -0
- package/agents/ez-phase-researcher.md +553 -553
- package/agents/ez-planner.md +1307 -1307
- package/agents/ez-product-engineer.md +435 -0
- package/agents/ez-project-researcher.md +629 -629
- package/agents/ez-qa-agent.md +320 -0
- package/agents/ez-release-agent.md +333 -333
- package/agents/ez-requirements-agent.md +377 -377
- package/agents/ez-roadmapper.md +650 -650
- package/agents/ez-technical-writer.md +551 -0
- package/agents/ez-ux-expert.md +393 -0
- package/agents/ez-verifier.md +579 -579
- package/bin/guards/autonomy-guard.cjs +346 -0
- package/bin/guards/context-budget-guard.cjs +278 -0
- package/bin/guards/hallucination-guard.cjs +380 -0
- package/bin/guards/hidden-state-guard.cjs +182 -0
- package/bin/guards/team-overhead-guard.cjs +266 -0
- package/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/bin/lib/archetype-detector.cjs +289 -0
- package/bin/lib/assistant-adapter.cjs +361 -0
- package/bin/lib/audit-exec.cjs +175 -0
- package/bin/lib/auth.cjs +176 -0
- package/bin/lib/backup-service.cjs +422 -0
- package/bin/lib/bdd-validator.cjs +622 -0
- package/bin/lib/business-flow-mapper.cjs +429 -0
- package/bin/lib/circuit-breaker.cjs +276 -0
- package/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/bin/lib/codebase-analyzer.cjs +241 -0
- package/bin/lib/commands.cjs +691 -0
- package/bin/lib/config.cjs +236 -0
- package/bin/lib/constraint-extractor.cjs +526 -0
- package/bin/lib/content-scanner.cjs +238 -0
- package/bin/lib/context-cache.cjs +154 -0
- package/bin/lib/context-compressor.cjs +102 -0
- package/bin/lib/context-deduplicator.cjs +105 -0
- package/bin/lib/context-errors.cjs +78 -0
- package/bin/lib/context-manager.cjs +338 -0
- package/bin/lib/context-metadata-tracker.cjs +140 -0
- package/bin/lib/context-relevance-scorer.cjs +99 -0
- package/bin/lib/core.cjs +507 -0
- package/bin/lib/cost-alerts.cjs +174 -0
- package/bin/lib/cost-tracker.cjs +275 -0
- package/bin/lib/crash-recovery.cjs +220 -0
- package/bin/lib/dependency-graph.cjs +319 -0
- package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/bin/lib/deploy/deploy-status.cjs +74 -0
- package/bin/lib/discussion-synthesizer.cjs +439 -0
- package/bin/lib/error-cache.cjs +114 -0
- package/bin/lib/error-registry.cjs +177 -0
- package/bin/lib/file-access.cjs +207 -0
- package/bin/lib/file-lock.cjs +236 -0
- package/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/bin/lib/finops/cost-reporter.cjs +132 -0
- package/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/bin/lib/finops/spot-manager.cjs +118 -0
- package/bin/lib/framework-detector.cjs +396 -0
- package/bin/lib/frontmatter.cjs +313 -0
- package/bin/lib/fs-utils.cjs +153 -0
- package/bin/lib/gate-executor.cjs +272 -0
- package/bin/lib/gates/README.md +374 -0
- package/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/bin/lib/gates/gate-03-code.cjs +635 -0
- package/bin/lib/gates/gate-04-security.cjs +829 -0
- package/bin/lib/git-errors.cjs +83 -0
- package/bin/lib/git-utils.cjs +321 -0
- package/bin/lib/git-workflow-engine.cjs +1157 -0
- package/bin/lib/health-check.cjs +227 -0
- package/bin/lib/index.cjs +279 -0
- package/bin/lib/init.cjs +725 -0
- package/bin/lib/lock-logger.cjs +194 -0
- package/bin/lib/lock-state.cjs +263 -0
- package/bin/lib/lockfile-validator.cjs +227 -0
- package/bin/lib/log-rotation.cjs +71 -0
- package/bin/lib/logger.cjs +125 -0
- package/bin/lib/memory-compression.cjs +256 -0
- package/bin/lib/milestone.cjs +247 -0
- package/bin/lib/model-provider.cjs +241 -0
- package/bin/lib/package-manager-detector.cjs +203 -0
- package/bin/lib/package-manager-executor.cjs +385 -0
- package/bin/lib/package-manager-service.cjs +216 -0
- package/bin/lib/perf/api-monitor.cjs +88 -0
- package/bin/lib/perf/db-optimizer.cjs +78 -0
- package/bin/lib/perf/frontend-performance.cjs +56 -0
- package/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/bin/lib/perf/perf-baseline.cjs +102 -0
- package/bin/lib/perf/perf-reporter.cjs +117 -0
- package/bin/lib/perf/regression-detector.cjs +92 -0
- package/bin/lib/phase.cjs +963 -0
- package/bin/lib/planning-write.cjs +123 -0
- package/bin/lib/project-reporter.cjs +565 -0
- package/bin/lib/quality-gate.cjs +332 -0
- package/bin/lib/quality-metrics.cjs +324 -0
- package/bin/lib/recovery-manager.cjs +98 -0
- package/bin/lib/release-validator.cjs +617 -0
- package/bin/lib/retry.cjs +119 -0
- package/bin/lib/roadmap.cjs +309 -0
- package/bin/lib/safe-exec.cjs +173 -0
- package/bin/lib/safe-path.cjs +130 -0
- package/bin/lib/security-errors.cjs +62 -0
- package/bin/lib/session-chain.cjs +304 -0
- package/bin/lib/session-errors.cjs +81 -0
- package/bin/lib/session-export.cjs +251 -0
- package/bin/lib/session-import.cjs +262 -0
- package/bin/lib/session-manager.cjs +280 -0
- package/bin/lib/skill-context.cjs +148 -0
- package/bin/lib/skill-matcher.cjs +236 -0
- package/bin/lib/skill-registry.cjs +360 -0
- package/bin/lib/skill-resolver.cjs +449 -0
- package/bin/lib/skill-triggers.cjs +90 -0
- package/bin/lib/skill-validator.cjs +270 -0
- package/bin/lib/skill-versioning.cjs +355 -0
- package/bin/lib/stack-detector.cjs +399 -0
- package/bin/lib/state.cjs +736 -0
- package/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/bin/lib/temp-file.cjs +239 -0
- package/bin/lib/template.cjs +223 -0
- package/bin/lib/test-file-lock.cjs +112 -0
- package/bin/lib/test-graceful.cjs +93 -0
- package/bin/lib/test-logger.cjs +60 -0
- package/bin/lib/test-safe-exec.cjs +38 -0
- package/bin/lib/test-safe-path.cjs +33 -0
- package/bin/lib/test-temp-file.cjs +125 -0
- package/bin/lib/tier-manager.cjs +428 -0
- package/bin/lib/timeout-exec.cjs +63 -0
- package/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/bin/lib/url-fetch.cjs +170 -0
- package/bin/lib/verify.cjs +863 -0
- package/bin/update.js +217 -214
- package/commands/deploy.cjs +53 -0
- package/commands/ez/add-tests.md +41 -41
- package/commands/ez/audit-milestone.md +36 -36
- package/commands/ez/complete-milestone.md +136 -136
- package/commands/ez/discuss-phase.md +90 -90
- package/commands/ez/execute-phase.md +52 -52
- package/commands/ez/help.md +22 -22
- package/commands/ez/map-codebase.md +71 -71
- package/commands/ez/new-milestone.md +44 -44
- package/commands/ez/new-project.md +51 -42
- package/commands/ez/plan-phase.md +53 -53
- package/commands/ez/progress.md +36 -36
- package/commands/ez/quick.md +45 -45
- package/commands/ez/resume-work.md +40 -40
- package/commands/ez/run-phase.md +580 -0
- package/commands/ez/settings.md +36 -36
- package/commands/ez/update.md +37 -37
- package/commands/ez/verify-work.md +402 -38
- package/commands/health-check.cjs +44 -0
- package/commands/rollback.cjs +47 -0
- package/ez-agents/bin/ez-tools.cjs +599 -2
- package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
- package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
- package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
- package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
- package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
- package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
- package/ez-agents/bin/lib/audit-exec.cjs +166 -167
- package/ez-agents/bin/lib/auth.cjs +176 -176
- package/ez-agents/bin/lib/backup-service.cjs +422 -0
- package/ez-agents/bin/lib/bdd-validator.cjs +622 -622
- package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
- package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
- package/ez-agents/bin/lib/commands.cjs +685 -685
- package/ez-agents/bin/lib/config.cjs +41 -1
- package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
- package/ez-agents/bin/lib/content-scanner.cjs +238 -238
- package/ez-agents/bin/lib/context-cache.cjs +154 -154
- package/ez-agents/bin/lib/context-errors.cjs +71 -71
- package/ez-agents/bin/lib/context-manager.cjs +220 -220
- package/ez-agents/bin/lib/core.cjs +507 -512
- package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
- package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
- package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
- package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
- package/ez-agents/bin/lib/file-access.cjs +207 -207
- package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
- package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
- package/ez-agents/bin/lib/framework-detector.cjs +396 -0
- package/ez-agents/bin/lib/frontmatter.cjs +3 -1
- package/ez-agents/bin/lib/gates/README.md +374 -0
- package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
- package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
- package/ez-agents/bin/lib/git-errors.cjs +83 -83
- package/ez-agents/bin/lib/git-utils.cjs +321 -321
- package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -1157
- package/ez-agents/bin/lib/health-check.cjs +162 -162
- package/ez-agents/bin/lib/index.cjs +2 -8
- package/ez-agents/bin/lib/init.cjs +0 -2
- package/ez-agents/bin/lib/lockfile-validator.cjs +227 -227
- package/ez-agents/bin/lib/log-rotation.cjs +71 -0
- package/ez-agents/bin/lib/logger.cjs +22 -47
- package/ez-agents/bin/lib/memory-compression.cjs +256 -256
- package/ez-agents/bin/lib/package-manager-detector.cjs +203 -203
- package/ez-agents/bin/lib/package-manager-executor.cjs +385 -385
- package/ez-agents/bin/lib/package-manager-service.cjs +216 -216
- package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
- package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
- package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
- package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
- package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
- package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
- package/ez-agents/bin/lib/project-reporter.cjs +502 -0
- package/ez-agents/bin/lib/quality-gate.cjs +332 -0
- package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
- package/ez-agents/bin/lib/release-validator.cjs +617 -614
- package/ez-agents/bin/lib/security-errors.cjs +62 -0
- package/ez-agents/bin/lib/session-chain.cjs +304 -304
- package/ez-agents/bin/lib/session-errors.cjs +81 -81
- package/ez-agents/bin/lib/session-export.cjs +251 -251
- package/ez-agents/bin/lib/session-import.cjs +262 -262
- package/ez-agents/bin/lib/session-manager.cjs +280 -280
- package/ez-agents/bin/lib/skill-context.cjs +148 -0
- package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
- package/ez-agents/bin/lib/skill-registry.cjs +341 -0
- package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
- package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
- package/ez-agents/bin/lib/skill-validator.cjs +270 -0
- package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
- package/ez-agents/bin/lib/stack-detector.cjs +399 -0
- package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/ez-agents/bin/lib/tier-manager.cjs +428 -428
- package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/ez-agents/bin/lib/url-fetch.cjs +170 -170
- package/ez-agents/bin/lib/verify.cjs +863 -863
- package/ez-agents/references/decimal-phase-calculation.md +65 -65
- package/ez-agents/references/git-integration.md +248 -248
- package/ez-agents/references/git-planning-commit.md +38 -38
- package/ez-agents/references/metrics-schema.md +118 -118
- package/ez-agents/references/model-profile-resolution.md +34 -34
- package/ez-agents/references/model-profiles.md +93 -93
- package/ez-agents/references/phase-argument-parsing.md +61 -61
- package/ez-agents/references/planning-config.md +340 -340
- package/ez-agents/references/tier-strategy.md +103 -103
- package/ez-agents/references/ui-brand.md +160 -160
- package/ez-agents/references/verification-patterns.md +612 -612
- package/ez-agents/templates/DEBUG.md +164 -164
- package/ez-agents/templates/UAT.md +247 -247
- package/ez-agents/templates/agent-output-format.md +404 -0
- package/ez-agents/templates/bdd-feature.md +173 -173
- package/ez-agents/templates/codebase/architecture.md +255 -255
- package/ez-agents/templates/codebase/structure.md +285 -285
- package/ez-agents/templates/copilot-instructions.md +7 -7
- package/ez-agents/templates/debug-subagent-prompt.md +91 -91
- package/ez-agents/templates/discovery.md +146 -146
- package/ez-agents/templates/discussion.md +68 -68
- package/ez-agents/templates/handoff-protocol.md +294 -0
- package/ez-agents/templates/incident-runbook.md +205 -205
- package/ez-agents/templates/mode-workflow-templates.md +301 -0
- package/ez-agents/templates/phase-prompt.md +610 -610
- package/ez-agents/templates/planner-subagent-prompt.md +117 -117
- package/ez-agents/templates/project.md +184 -184
- package/ez-agents/templates/release-checklist.md +136 -133
- package/ez-agents/templates/research.md +552 -552
- package/ez-agents/templates/rollback-plan.md +201 -201
- package/ez-agents/templates/security-user-setup.md +244 -0
- package/ez-agents/templates/skill-validation-rules.md +476 -0
- package/ez-agents/templates/state.md +180 -176
- package/ez-agents/templates/summary-complex.md +59 -59
- package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
- package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
- package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
- package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
- package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
- package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
- package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
- package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
- package/ez-agents/workflows/audit-milestone.md +1 -1
- package/ez-agents/workflows/autonomous.md +844 -844
- package/ez-agents/workflows/complete-milestone.md +1 -1
- package/ez-agents/workflows/discuss-phase.md +1 -1
- package/ez-agents/workflows/execute-phase.md +124 -3
- package/ez-agents/workflows/help.md +42 -181
- package/ez-agents/workflows/hotfix.md +291 -291
- package/ez-agents/workflows/new-milestone.md +713 -713
- package/ez-agents/workflows/new-project.md +1089 -1107
- package/ez-agents/workflows/plan-phase.md +0 -40
- package/ez-agents/workflows/release.md +253 -253
- package/ez-agents/workflows/resume-session.md +215 -215
- package/ez-agents/workflows/run-phase.md +531 -0
- package/ez-agents/workflows/settings.md +2 -35
- package/hooks/dist/ez-check-update.js +81 -81
- package/hooks/dist/ez-context-monitor.js +148 -141
- package/hooks/dist/ez-statusline.js +115 -115
- package/package.json +78 -71
- package/scripts/fix-qwen-installation.js +144 -144
- package/agents/ez-integration-checker.md +0 -443
- package/agents/ez-nyquist-auditor.md +0 -176
- package/agents/ez-observer-agent.md +0 -260
- package/agents/ez-plan-checker.md +0 -706
- package/agents/ez-research-synthesizer.md +0 -247
- package/agents/ez-scrum-master-agent.md +0 -242
- package/agents/ez-tech-lead-agent.md +0 -267
- package/agents/ez-ui-auditor.md +0 -439
- package/agents/ez-ui-checker.md +0 -300
- package/agents/ez-ui-researcher.md +0 -353
- package/commands/ez/add-phase.md +0 -43
- package/commands/ez/add-todo.md +0 -47
- package/commands/ez/arch-review.md +0 -102
- package/commands/ez/auth.md +0 -87
- package/commands/ez/autonomous.md +0 -41
- package/commands/ez/check-todos.md +0 -45
- package/commands/ez/cleanup.md +0 -18
- package/commands/ez/debug.md +0 -168
- package/commands/ez/export-session.md +0 -79
- package/commands/ez/gather-requirements.md +0 -117
- package/commands/ez/git-workflow.md +0 -72
- package/commands/ez/health.md +0 -22
- package/commands/ez/hotfix.md +0 -120
- package/commands/ez/import-session.md +0 -82
- package/commands/ez/insert-phase.md +0 -32
- package/commands/ez/join-discord.md +0 -18
- package/commands/ez/list-phase-assumptions.md +0 -46
- package/commands/ez/list-sessions.md +0 -96
- package/commands/ez/package-manager.md +0 -316
- package/commands/ez/pause-work.md +0 -38
- package/commands/ez/plan-milestone-gaps.md +0 -34
- package/commands/ez/preflight.md +0 -79
- package/commands/ez/reapply-patches.md +0 -124
- package/commands/ez/release.md +0 -153
- package/commands/ez/remove-phase.md +0 -31
- package/commands/ez/research-phase.md +0 -190
- package/commands/ez/resume.md +0 -107
- package/commands/ez/set-profile.md +0 -34
- package/commands/ez/standup.md +0 -85
- package/commands/ez/stats.md +0 -18
- package/commands/ez/ui-phase.md +0 -34
- package/commands/ez/ui-review.md +0 -32
- package/commands/ez/validate-phase.md +0 -35
- package/ez-agents/bin/lib/metrics-tracker.cjs +0 -406
- package/ez-agents/templates/UI-SPEC.md +0 -100
- package/ez-agents/templates/VALIDATION.md +0 -76
- package/ez-agents/templates/context.md +0 -352
- package/ez-agents/templates/verification-report.md +0 -322
- package/ez-agents/workflows/arch-review.md +0 -54
- package/ez-agents/workflows/export-session.md +0 -255
- package/ez-agents/workflows/gather-requirements.md +0 -206
- package/ez-agents/workflows/import-session.md +0 -303
- package/ez-agents/workflows/research-phase.md +0 -74
- package/ez-agents/workflows/standup.md +0 -64
- package/ez-agents/workflows/ui-phase.md +0 -290
- package/ez-agents/workflows/ui-review.md +0 -157
- package/ez-agents/workflows/validate-phase.md +0 -167
|
@@ -1,291 +1,291 @@
|
|
|
1
|
-
<purpose>
|
|
2
|
-
Manage hotfix branches: create from main, complete by merging atomically to main (and develop for GitFlow), tag the release, and sync without polluting in-progress work.
|
|
3
|
-
</purpose>
|
|
4
|
-
|
|
5
|
-
<process>
|
|
6
|
-
|
|
7
|
-
## 1. Parse Arguments
|
|
8
|
-
|
|
9
|
-
Extract from $ARGUMENTS:
|
|
10
|
-
- Subcommand: `start` or `complete`
|
|
11
|
-
- Name: slug for the hotfix (e.g., `critical-bug`, `gmail-login-fix`)
|
|
12
|
-
- Version (for `complete` only): semver string
|
|
13
|
-
|
|
14
|
-
**If missing subcommand:**
|
|
15
|
-
```
|
|
16
|
-
Usage:
|
|
17
|
-
/ez:hotfix start <name>
|
|
18
|
-
/ez:hotfix complete <name> <version>
|
|
19
|
-
```
|
|
20
|
-
Exit.
|
|
21
|
-
|
|
22
|
-
## 2. Handle "start" Subcommand
|
|
23
|
-
|
|
24
|
-
### 2a. Load current state
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
# Current branch
|
|
28
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
29
|
-
|
|
30
|
-
# Current version
|
|
31
|
-
CURRENT_VERSION=$(node -e "console.log(require('./package.json').version)" 2>/dev/null || echo "0.0.0")
|
|
32
|
-
|
|
33
|
-
# Load tier from config
|
|
34
|
-
TIER=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get release.tier 2>/dev/null || echo "mvp")
|
|
35
|
-
|
|
36
|
-
# Last tag
|
|
37
|
-
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### 2b. Check for uncommitted changes
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
git status --short
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**If uncommitted changes:** Error — "Stash or commit current work before creating a hotfix"
|
|
47
|
-
|
|
48
|
-
### 2c. Create hotfix branch
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
# Get hotfix branch name
|
|
52
|
-
HOTFIX_BRANCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" hotfix-branch-name "${NAME}")
|
|
53
|
-
# Returns: hotfix/{name-slug}
|
|
54
|
-
|
|
55
|
-
# Branch from main (or last release tag if available)
|
|
56
|
-
SOURCE=$(git rev-parse --verify "${LAST_TAG}" 2>/dev/null && echo "${LAST_TAG}" || echo "main")
|
|
57
|
-
|
|
58
|
-
git checkout "${SOURCE}"
|
|
59
|
-
git checkout -b "${HOTFIX_BRANCH}"
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### 2d. Report to user
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
66
|
-
EZ ► HOTFIX STARTED: {HOTFIX_BRANCH}
|
|
67
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
68
|
-
|
|
69
|
-
Branch: {HOTFIX_BRANCH}
|
|
70
|
-
From: {SOURCE} ({CURRENT_VERSION})
|
|
71
|
-
Tier: {TIER}
|
|
72
|
-
|
|
73
|
-
Make your fix, commit it, then complete:
|
|
74
|
-
/ez:hotfix complete {NAME} {NEXT_PATCH_VERSION}
|
|
75
|
-
|
|
76
|
-
Example:
|
|
77
|
-
Current: {CURRENT_VERSION}
|
|
78
|
-
Next: {NEXT_PATCH_SUGGESTION}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Suggest next patch version: increment patch number (1.2.3 → 1.2.4).
|
|
82
|
-
|
|
83
|
-
**STOP here for `start` subcommand.**
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 3. Handle "complete" Subcommand
|
|
88
|
-
|
|
89
|
-
### 3a. Validate state
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
# Confirm on hotfix branch
|
|
93
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
94
|
-
EXPECTED_BRANCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" hotfix-branch-name "${NAME}")
|
|
95
|
-
|
|
96
|
-
if [ "$CURRENT_BRANCH" != "$EXPECTED_BRANCH" ]; then
|
|
97
|
-
echo "ERROR: Not on hotfix branch. Expected: ${EXPECTED_BRANCH}, got: ${CURRENT_BRANCH}"
|
|
98
|
-
exit 1
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
# Check for uncommitted changes
|
|
102
|
-
git status --short
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**If uncommitted changes:** Error — "Commit your fix before completing the hotfix"
|
|
106
|
-
|
|
107
|
-
### 3b. Validate version is semver
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
echo "${VERSION}" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$"
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**If invalid:** Error — "Version must be semver (X.Y.Z)"
|
|
114
|
-
|
|
115
|
-
### 3c. Run security gates
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" release security-gates
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**If secrets found:** Error — "Remove secrets before completing hotfix"
|
|
122
|
-
**If critical vulns:** Warning (not hard block for hotfix — speed matters)
|
|
123
|
-
|
|
124
|
-
### 3d. Run tests
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
npm test 2>/dev/null || yarn test 2>/dev/null || echo "WARNING: No test command found"
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**If tests fail:** Warning — "Tests failing. Hotfix will be tagged but verify before pushing."
|
|
131
|
-
|
|
132
|
-
### 3e. Load tier and git strategy
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
TIER=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get release.tier 2>/dev/null || echo "mvp")
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Determine sync target:
|
|
139
|
-
- MVP/Medium: No sync needed (just main)
|
|
140
|
-
- Enterprise: Also sync to develop
|
|
141
|
-
|
|
142
|
-
### 3f. Generate changelog entry
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
LAST_TAG=$(git describe --tags --abbrev=0 main 2>/dev/null || echo "")
|
|
146
|
-
if [ -n "$LAST_TAG" ]; then
|
|
147
|
-
COMMITS=$(git log ${LAST_TAG}..HEAD --oneline --no-merges)
|
|
148
|
-
fi
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Format entry for CHANGELOG.md:
|
|
152
|
-
```markdown
|
|
153
|
-
## [{VERSION}] — {date} (hotfix)
|
|
154
|
-
|
|
155
|
-
### Bug Fixes
|
|
156
|
-
- {fix commit message(s)}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### 3g. Merge to main
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
git checkout main
|
|
163
|
-
git merge --no-ff "${HOTFIX_BRANCH}" -m "hotfix(release): merge ${HOTFIX_BRANCH} for v${VERSION}"
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
**If merge conflict:**
|
|
167
|
-
```
|
|
168
|
-
MERGE CONFLICT during hotfix merge.
|
|
169
|
-
Resolve conflicts in: {conflicting files}
|
|
170
|
-
Then run: git commit && /ez:hotfix complete {NAME} {VERSION}
|
|
171
|
-
```
|
|
172
|
-
STOP.
|
|
173
|
-
|
|
174
|
-
### 3h. Bump version and update changelog
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
# Bump version in package.json
|
|
178
|
-
node -e "
|
|
179
|
-
const pkg = JSON.parse(require('fs').readFileSync('package.json'));
|
|
180
|
-
pkg.version = '${VERSION}';
|
|
181
|
-
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
|
|
182
|
-
"
|
|
183
|
-
|
|
184
|
-
# Update CHANGELOG.md (prepend entry)
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### 3i. Create rollback plan
|
|
188
|
-
|
|
189
|
-
Write to `.planning/releases/v${VERSION}-ROLLBACK-PLAN.md` using rollback-plan template.
|
|
190
|
-
|
|
191
|
-
### 3j. Commit and tag
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
git add CHANGELOG.md package.json .planning/releases/
|
|
195
|
-
git commit -m "chore(hotfix): v${VERSION} — ${NAME}
|
|
196
|
-
|
|
197
|
-
Hotfix: ${NAME}
|
|
198
|
-
Previous: v${PREVIOUS_VERSION}"
|
|
199
|
-
|
|
200
|
-
git tag -a "v${VERSION}" -m "Hotfix v${VERSION}: ${NAME}"
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### 3k. Sync to develop (Enterprise tier only)
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
if [ "$TIER" = "enterprise" ]; then
|
|
207
|
-
# Check if develop exists
|
|
208
|
-
git rev-parse --verify develop 2>/dev/null
|
|
209
|
-
if [ $? -eq 0 ]; then
|
|
210
|
-
git checkout develop
|
|
211
|
-
fi
|
|
212
|
-
fi
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Enterprise: Sync hotfix ke develop
|
|
216
|
-
|
|
217
|
-
1. Cek apakah sync akan conflict:
|
|
218
|
-
```
|
|
219
|
-
git merge-base --is-ancestor v{version} develop
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
2. Jika tidak conflict → `git merge v{version} --no-ff -m "chore: sync hotfix v{version} to develop"`
|
|
223
|
-
|
|
224
|
-
3. **Jika CONFLICT terdeteksi:**
|
|
225
|
-
- Jangan auto-merge. Beri instruksi eksplisit:
|
|
226
|
-
```
|
|
227
|
-
⚠️ MERGE CONFLICT: Hotfix sync ke develop memerlukan manual resolution.
|
|
228
|
-
|
|
229
|
-
Langkah:
|
|
230
|
-
a. git checkout develop
|
|
231
|
-
b. git merge v{version}
|
|
232
|
-
c. Resolve conflicts di file yang di-list git
|
|
233
|
-
d. git add . && git merge --continue
|
|
234
|
-
e. git push origin develop
|
|
235
|
-
|
|
236
|
-
PENTING: Hotfix SUDAH di production (main + tag).
|
|
237
|
-
Develop conflict tidak memblokir hotfix — selesaikan setelah production stabil.
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### 3l. Clean up hotfix branch (optional)
|
|
241
|
-
|
|
242
|
-
```bash
|
|
243
|
-
git branch -d "${HOTFIX_BRANCH}"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### 3m. Report completion
|
|
247
|
-
|
|
248
|
-
```
|
|
249
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
250
|
-
EZ ► HOTFIX COMPLETE: v{VERSION} ✓
|
|
251
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
252
|
-
|
|
253
|
-
Hotfix: {NAME}
|
|
254
|
-
Version: v{VERSION}
|
|
255
|
-
Tag: v{VERSION}
|
|
256
|
-
Changelog: Updated
|
|
257
|
-
Rollback: .planning/releases/v{VERSION}-ROLLBACK-PLAN.md
|
|
258
|
-
|
|
259
|
-
{If enterprise:}
|
|
260
|
-
Synced to develop: ✓
|
|
261
|
-
|
|
262
|
-
### To Ship
|
|
263
|
-
git push origin main && git push origin v{VERSION}
|
|
264
|
-
|
|
265
|
-
{If enterprise:}
|
|
266
|
-
git push origin develop
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
</process>
|
|
270
|
-
|
|
271
|
-
<success_criteria>
|
|
272
|
-
|
|
273
|
-
### start
|
|
274
|
-
- [ ] Uncommitted changes check passed
|
|
275
|
-
- [ ] Hotfix branch created from main (or last tag)
|
|
276
|
-
- [ ] User sees branch name and complete instructions
|
|
277
|
-
|
|
278
|
-
### complete
|
|
279
|
-
- [ ] On correct hotfix branch
|
|
280
|
-
- [ ] Security gates run
|
|
281
|
-
- [ ] Tests run (warn if fail, don't block)
|
|
282
|
-
- [ ] Changelog entry generated
|
|
283
|
-
- [ ] Merged to main with no-ff
|
|
284
|
-
- [ ] Version bumped in package.json
|
|
285
|
-
- [ ] Rollback plan created
|
|
286
|
-
- [ ] Release tagged
|
|
287
|
-
- [ ] Develop synced (enterprise tier only)
|
|
288
|
-
- [ ] Hotfix branch cleaned up
|
|
289
|
-
- [ ] User sees push instructions
|
|
290
|
-
|
|
291
|
-
</success_criteria>
|
|
1
|
+
<purpose>
|
|
2
|
+
Manage hotfix branches: create from main, complete by merging atomically to main (and develop for GitFlow), tag the release, and sync without polluting in-progress work.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<process>
|
|
6
|
+
|
|
7
|
+
## 1. Parse Arguments
|
|
8
|
+
|
|
9
|
+
Extract from $ARGUMENTS:
|
|
10
|
+
- Subcommand: `start` or `complete`
|
|
11
|
+
- Name: slug for the hotfix (e.g., `critical-bug`, `gmail-login-fix`)
|
|
12
|
+
- Version (for `complete` only): semver string
|
|
13
|
+
|
|
14
|
+
**If missing subcommand:**
|
|
15
|
+
```
|
|
16
|
+
Usage:
|
|
17
|
+
/ez:hotfix start <name>
|
|
18
|
+
/ez:hotfix complete <name> <version>
|
|
19
|
+
```
|
|
20
|
+
Exit.
|
|
21
|
+
|
|
22
|
+
## 2. Handle "start" Subcommand
|
|
23
|
+
|
|
24
|
+
### 2a. Load current state
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Current branch
|
|
28
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
29
|
+
|
|
30
|
+
# Current version
|
|
31
|
+
CURRENT_VERSION=$(node -e "console.log(require('./package.json').version)" 2>/dev/null || echo "0.0.0")
|
|
32
|
+
|
|
33
|
+
# Load tier from config
|
|
34
|
+
TIER=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get release.tier 2>/dev/null || echo "mvp")
|
|
35
|
+
|
|
36
|
+
# Last tag
|
|
37
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2b. Check for uncommitted changes
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git status --short
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**If uncommitted changes:** Error — "Stash or commit current work before creating a hotfix"
|
|
47
|
+
|
|
48
|
+
### 2c. Create hotfix branch
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Get hotfix branch name
|
|
52
|
+
HOTFIX_BRANCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" hotfix-branch-name "${NAME}")
|
|
53
|
+
# Returns: hotfix/{name-slug}
|
|
54
|
+
|
|
55
|
+
# Branch from main (or last release tag if available)
|
|
56
|
+
SOURCE=$(git rev-parse --verify "${LAST_TAG}" 2>/dev/null && echo "${LAST_TAG}" || echo "main")
|
|
57
|
+
|
|
58
|
+
git checkout "${SOURCE}"
|
|
59
|
+
git checkout -b "${HOTFIX_BRANCH}"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2d. Report to user
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
66
|
+
EZ ► HOTFIX STARTED: {HOTFIX_BRANCH}
|
|
67
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
68
|
+
|
|
69
|
+
Branch: {HOTFIX_BRANCH}
|
|
70
|
+
From: {SOURCE} ({CURRENT_VERSION})
|
|
71
|
+
Tier: {TIER}
|
|
72
|
+
|
|
73
|
+
Make your fix, commit it, then complete:
|
|
74
|
+
/ez:hotfix complete {NAME} {NEXT_PATCH_VERSION}
|
|
75
|
+
|
|
76
|
+
Example:
|
|
77
|
+
Current: {CURRENT_VERSION}
|
|
78
|
+
Next: {NEXT_PATCH_SUGGESTION}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Suggest next patch version: increment patch number (1.2.3 → 1.2.4).
|
|
82
|
+
|
|
83
|
+
**STOP here for `start` subcommand.**
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 3. Handle "complete" Subcommand
|
|
88
|
+
|
|
89
|
+
### 3a. Validate state
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Confirm on hotfix branch
|
|
93
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
94
|
+
EXPECTED_BRANCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" hotfix-branch-name "${NAME}")
|
|
95
|
+
|
|
96
|
+
if [ "$CURRENT_BRANCH" != "$EXPECTED_BRANCH" ]; then
|
|
97
|
+
echo "ERROR: Not on hotfix branch. Expected: ${EXPECTED_BRANCH}, got: ${CURRENT_BRANCH}"
|
|
98
|
+
exit 1
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# Check for uncommitted changes
|
|
102
|
+
git status --short
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**If uncommitted changes:** Error — "Commit your fix before completing the hotfix"
|
|
106
|
+
|
|
107
|
+
### 3b. Validate version is semver
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
echo "${VERSION}" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+$"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**If invalid:** Error — "Version must be semver (X.Y.Z)"
|
|
114
|
+
|
|
115
|
+
### 3c. Run security gates
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" release security-gates
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**If secrets found:** Error — "Remove secrets before completing hotfix"
|
|
122
|
+
**If critical vulns:** Warning (not hard block for hotfix — speed matters)
|
|
123
|
+
|
|
124
|
+
### 3d. Run tests
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npm test 2>/dev/null || yarn test 2>/dev/null || echo "WARNING: No test command found"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**If tests fail:** Warning — "Tests failing. Hotfix will be tagged but verify before pushing."
|
|
131
|
+
|
|
132
|
+
### 3e. Load tier and git strategy
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
TIER=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get release.tier 2>/dev/null || echo "mvp")
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Determine sync target:
|
|
139
|
+
- MVP/Medium: No sync needed (just main)
|
|
140
|
+
- Enterprise: Also sync to develop
|
|
141
|
+
|
|
142
|
+
### 3f. Generate changelog entry
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
LAST_TAG=$(git describe --tags --abbrev=0 main 2>/dev/null || echo "")
|
|
146
|
+
if [ -n "$LAST_TAG" ]; then
|
|
147
|
+
COMMITS=$(git log ${LAST_TAG}..HEAD --oneline --no-merges)
|
|
148
|
+
fi
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Format entry for CHANGELOG.md:
|
|
152
|
+
```markdown
|
|
153
|
+
## [{VERSION}] — {date} (hotfix)
|
|
154
|
+
|
|
155
|
+
### Bug Fixes
|
|
156
|
+
- {fix commit message(s)}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 3g. Merge to main
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
git checkout main
|
|
163
|
+
git merge --no-ff "${HOTFIX_BRANCH}" -m "hotfix(release): merge ${HOTFIX_BRANCH} for v${VERSION}"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**If merge conflict:**
|
|
167
|
+
```
|
|
168
|
+
MERGE CONFLICT during hotfix merge.
|
|
169
|
+
Resolve conflicts in: {conflicting files}
|
|
170
|
+
Then run: git commit && /ez:hotfix complete {NAME} {VERSION}
|
|
171
|
+
```
|
|
172
|
+
STOP.
|
|
173
|
+
|
|
174
|
+
### 3h. Bump version and update changelog
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Bump version in package.json
|
|
178
|
+
node -e "
|
|
179
|
+
const pkg = JSON.parse(require('fs').readFileSync('package.json'));
|
|
180
|
+
pkg.version = '${VERSION}';
|
|
181
|
+
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
|
|
182
|
+
"
|
|
183
|
+
|
|
184
|
+
# Update CHANGELOG.md (prepend entry)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 3i. Create rollback plan
|
|
188
|
+
|
|
189
|
+
Write to `.planning/releases/v${VERSION}-ROLLBACK-PLAN.md` using rollback-plan template.
|
|
190
|
+
|
|
191
|
+
### 3j. Commit and tag
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
git add CHANGELOG.md package.json .planning/releases/
|
|
195
|
+
git commit -m "chore(hotfix): v${VERSION} — ${NAME}
|
|
196
|
+
|
|
197
|
+
Hotfix: ${NAME}
|
|
198
|
+
Previous: v${PREVIOUS_VERSION}"
|
|
199
|
+
|
|
200
|
+
git tag -a "v${VERSION}" -m "Hotfix v${VERSION}: ${NAME}"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 3k. Sync to develop (Enterprise tier only)
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
if [ "$TIER" = "enterprise" ]; then
|
|
207
|
+
# Check if develop exists
|
|
208
|
+
git rev-parse --verify develop 2>/dev/null
|
|
209
|
+
if [ $? -eq 0 ]; then
|
|
210
|
+
git checkout develop
|
|
211
|
+
fi
|
|
212
|
+
fi
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Enterprise: Sync hotfix ke develop
|
|
216
|
+
|
|
217
|
+
1. Cek apakah sync akan conflict:
|
|
218
|
+
```
|
|
219
|
+
git merge-base --is-ancestor v{version} develop
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
2. Jika tidak conflict → `git merge v{version} --no-ff -m "chore: sync hotfix v{version} to develop"`
|
|
223
|
+
|
|
224
|
+
3. **Jika CONFLICT terdeteksi:**
|
|
225
|
+
- Jangan auto-merge. Beri instruksi eksplisit:
|
|
226
|
+
```
|
|
227
|
+
⚠️ MERGE CONFLICT: Hotfix sync ke develop memerlukan manual resolution.
|
|
228
|
+
|
|
229
|
+
Langkah:
|
|
230
|
+
a. git checkout develop
|
|
231
|
+
b. git merge v{version}
|
|
232
|
+
c. Resolve conflicts di file yang di-list git
|
|
233
|
+
d. git add . && git merge --continue
|
|
234
|
+
e. git push origin develop
|
|
235
|
+
|
|
236
|
+
PENTING: Hotfix SUDAH di production (main + tag).
|
|
237
|
+
Develop conflict tidak memblokir hotfix — selesaikan setelah production stabil.
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 3l. Clean up hotfix branch (optional)
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
git branch -d "${HOTFIX_BRANCH}"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### 3m. Report completion
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
250
|
+
EZ ► HOTFIX COMPLETE: v{VERSION} ✓
|
|
251
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
252
|
+
|
|
253
|
+
Hotfix: {NAME}
|
|
254
|
+
Version: v{VERSION}
|
|
255
|
+
Tag: v{VERSION}
|
|
256
|
+
Changelog: Updated
|
|
257
|
+
Rollback: .planning/releases/v{VERSION}-ROLLBACK-PLAN.md
|
|
258
|
+
|
|
259
|
+
{If enterprise:}
|
|
260
|
+
Synced to develop: ✓
|
|
261
|
+
|
|
262
|
+
### To Ship
|
|
263
|
+
git push origin main && git push origin v{VERSION}
|
|
264
|
+
|
|
265
|
+
{If enterprise:}
|
|
266
|
+
git push origin develop
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
</process>
|
|
270
|
+
|
|
271
|
+
<success_criteria>
|
|
272
|
+
|
|
273
|
+
### start
|
|
274
|
+
- [ ] Uncommitted changes check passed
|
|
275
|
+
- [ ] Hotfix branch created from main (or last tag)
|
|
276
|
+
- [ ] User sees branch name and complete instructions
|
|
277
|
+
|
|
278
|
+
### complete
|
|
279
|
+
- [ ] On correct hotfix branch
|
|
280
|
+
- [ ] Security gates run
|
|
281
|
+
- [ ] Tests run (warn if fail, don't block)
|
|
282
|
+
- [ ] Changelog entry generated
|
|
283
|
+
- [ ] Merged to main with no-ff
|
|
284
|
+
- [ ] Version bumped in package.json
|
|
285
|
+
- [ ] Rollback plan created
|
|
286
|
+
- [ ] Release tagged
|
|
287
|
+
- [ ] Develop synced (enterprise tier only)
|
|
288
|
+
- [ ] Hotfix branch cleaned up
|
|
289
|
+
- [ ] User sees push instructions
|
|
290
|
+
|
|
291
|
+
</success_criteria>
|