godpowers 0.15.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/AGENTS.md +37 -0
- package/CHANGELOG.md +639 -0
- package/INSPIRATION.md +52 -0
- package/LICENSE +21 -0
- package/README.md +232 -0
- package/SKILL.md +500 -0
- package/agents/god-archaeologist.md +139 -0
- package/agents/god-architect.md +92 -0
- package/agents/god-auditor.md +150 -0
- package/agents/god-browser-tester.md +144 -0
- package/agents/god-context-writer.md +137 -0
- package/agents/god-coordinator.md +138 -0
- package/agents/god-debt-assessor.md +132 -0
- package/agents/god-debugger.md +77 -0
- package/agents/god-deploy-engineer.md +87 -0
- package/agents/god-deps-auditor.md +111 -0
- package/agents/god-design-reviewer.md +137 -0
- package/agents/god-designer.md +171 -0
- package/agents/god-docs-writer.md +102 -0
- package/agents/god-executor.md +76 -0
- package/agents/god-explorer.md +110 -0
- package/agents/god-harden-auditor.md +163 -0
- package/agents/god-incident-investigator.md +144 -0
- package/agents/god-launch-strategist.md +103 -0
- package/agents/god-migration-strategist.md +126 -0
- package/agents/god-observability-engineer.md +76 -0
- package/agents/god-orchestrator.md +728 -0
- package/agents/god-org-context-loader.md +124 -0
- package/agents/god-planner.md +73 -0
- package/agents/god-pm.md +105 -0
- package/agents/god-quality-reviewer.md +74 -0
- package/agents/god-reconciler.md +230 -0
- package/agents/god-reconstructor.md +124 -0
- package/agents/god-repo-scaffolder.md +60 -0
- package/agents/god-retrospective.md +109 -0
- package/agents/god-roadmap-reconciler.md +123 -0
- package/agents/god-roadmap-updater.md +89 -0
- package/agents/god-roadmapper.md +82 -0
- package/agents/god-spec-reviewer.md +70 -0
- package/agents/god-spike-runner.md +119 -0
- package/agents/god-stack-selector.md +93 -0
- package/agents/god-standards-check.md +132 -0
- package/agents/god-storyteller.md +116 -0
- package/agents/god-updater.md +174 -0
- package/bin/install.js +514 -0
- package/extensions/data-pack/README.md +33 -0
- package/extensions/data-pack/agents/god-dashboard-builder.md +66 -0
- package/extensions/data-pack/agents/god-etl-engineer.md +64 -0
- package/extensions/data-pack/agents/god-ml-feature-engineer.md +66 -0
- package/extensions/data-pack/manifest.yaml +39 -0
- package/extensions/data-pack/package.json +42 -0
- package/extensions/data-pack/skills/god-dashboard.md +28 -0
- package/extensions/data-pack/skills/god-etl.md +28 -0
- package/extensions/data-pack/skills/god-ml-feature.md +28 -0
- package/extensions/data-pack/workflows/dashboard-arc.yaml +13 -0
- package/extensions/data-pack/workflows/etl-arc.yaml +13 -0
- package/extensions/data-pack/workflows/ml-feature-arc.yaml +13 -0
- package/extensions/launch-pack/README.md +36 -0
- package/extensions/launch-pack/agents/god-indie-hackers-strategist.md +128 -0
- package/extensions/launch-pack/agents/god-oss-release-strategist.md +125 -0
- package/extensions/launch-pack/agents/god-product-hunt-strategist.md +118 -0
- package/extensions/launch-pack/agents/god-show-hn-strategist.md +113 -0
- package/extensions/launch-pack/manifest.yaml +45 -0
- package/extensions/launch-pack/package.json +41 -0
- package/extensions/launch-pack/skills/god-indie-hackers.md +39 -0
- package/extensions/launch-pack/skills/god-oss-release.md +43 -0
- package/extensions/launch-pack/skills/god-product-hunt.md +41 -0
- package/extensions/launch-pack/skills/god-show-hn.md +40 -0
- package/extensions/launch-pack/workflows/indie-hackers.yaml +13 -0
- package/extensions/launch-pack/workflows/oss-release.yaml +13 -0
- package/extensions/launch-pack/workflows/product-hunt.yaml +13 -0
- package/extensions/launch-pack/workflows/show-hn.yaml +13 -0
- package/extensions/security-pack/README.md +48 -0
- package/extensions/security-pack/agents/god-hipaa-auditor.md +117 -0
- package/extensions/security-pack/agents/god-pci-auditor.md +100 -0
- package/extensions/security-pack/agents/god-soc2-auditor.md +107 -0
- package/extensions/security-pack/manifest.yaml +39 -0
- package/extensions/security-pack/package.json +42 -0
- package/extensions/security-pack/skills/god-hipaa-audit.md +41 -0
- package/extensions/security-pack/skills/god-pci-audit.md +40 -0
- package/extensions/security-pack/skills/god-soc2-audit.md +42 -0
- package/extensions/security-pack/workflows/hipaa-arc.yaml +15 -0
- package/extensions/security-pack/workflows/pci-arc.yaml +15 -0
- package/extensions/security-pack/workflows/soc2-arc.yaml +15 -0
- package/hooks/pre-tool-use.sh +40 -0
- package/hooks/session-start.sh +74 -0
- package/lib/README.md +28 -0
- package/lib/agent-browser-driver.js +215 -0
- package/lib/agent-cache.js +194 -0
- package/lib/agent-validator.js +275 -0
- package/lib/artifact-diff.js +168 -0
- package/lib/artifact-linter.js +142 -0
- package/lib/awesome-design.js +312 -0
- package/lib/browser-bridge.js +209 -0
- package/lib/budget.js +215 -0
- package/lib/checkpoint.js +390 -0
- package/lib/code-scanner.js +262 -0
- package/lib/context-budget.js +170 -0
- package/lib/context-writer.js +348 -0
- package/lib/cost-tracker.js +325 -0
- package/lib/cross-artifact-impact.js +162 -0
- package/lib/cross-repo-linkage.js +150 -0
- package/lib/design-detector.js +167 -0
- package/lib/design-spec.js +348 -0
- package/lib/drift-detector.js +212 -0
- package/lib/event-reader.js +174 -0
- package/lib/events.js +183 -0
- package/lib/extensions.js +257 -0
- package/lib/have-nots-validator.js +647 -0
- package/lib/impact.js +314 -0
- package/lib/impeccable-bridge.js +139 -0
- package/lib/intent.js +177 -0
- package/lib/linkage.js +232 -0
- package/lib/meta-linter.js +263 -0
- package/lib/multi-repo-detector.js +182 -0
- package/lib/otel-exporter.js +308 -0
- package/lib/recipes.js +186 -0
- package/lib/reverse-sync.js +332 -0
- package/lib/review-required.js +224 -0
- package/lib/router.js +278 -0
- package/lib/runtime-audit.js +455 -0
- package/lib/runtime-test.js +309 -0
- package/lib/skillui-bridge.js +216 -0
- package/lib/state-lock.js +201 -0
- package/lib/state.js +142 -0
- package/lib/story-validator.js +301 -0
- package/lib/suite-state.js +220 -0
- package/lib/workflow-parser.js +109 -0
- package/lib/workflow-runner.js +221 -0
- package/package.json +63 -0
- package/references/HAVE-NOTS.md +573 -0
- package/references/building/BUILD-ANTIPATTERNS.md +102 -0
- package/references/building/BUILD-VERTICAL-SLICES.md +75 -0
- package/references/building/BUILD-WAVES.md +61 -0
- package/references/building/README.md +17 -0
- package/references/design/COLOR.md +122 -0
- package/references/design/DESIGN-ANATOMY.md +121 -0
- package/references/design/DESIGN-ANTIPATTERNS.md +108 -0
- package/references/design/INTERACTION.md +148 -0
- package/references/design/MOTION.md +120 -0
- package/references/design/RESPONSIVE.md +157 -0
- package/references/design/SPATIAL.md +109 -0
- package/references/design/TYPOGRAPHY.md +121 -0
- package/references/design/UX-WRITING.md +135 -0
- package/references/orchestration/MODE-DETECTION.md +74 -0
- package/references/orchestration/README.md +18 -0
- package/references/orchestration/SCALE-DETECTION.md +81 -0
- package/references/planning/ARCH-ANATOMY.md +143 -0
- package/references/planning/ARCH-ANTIPATTERNS.md +52 -0
- package/references/planning/PRD-ANATOMY.md +117 -0
- package/references/planning/PRD-ANTIPATTERNS.md +138 -0
- package/references/planning/README.md +16 -0
- package/references/planning/ROADMAP-ANATOMY.md +43 -0
- package/references/planning/ROADMAP-ANTIPATTERNS.md +94 -0
- package/references/planning/STACK-ANATOMY.md +60 -0
- package/references/planning/STACK-ANTIPATTERNS.md +95 -0
- package/references/shared/GLOSSARY.md +80 -0
- package/references/shared/ORCHESTRATORS.md +76 -0
- package/references/shared/README.md +14 -0
- package/references/shipping/DEPLOY-ANTIPATTERNS.md +64 -0
- package/references/shipping/DEPLOY-PATTERNS.md +110 -0
- package/references/shipping/HARDEN-ANTIPATTERNS.md +66 -0
- package/references/shipping/HARDEN-OWASP-WORKSHEETS.md +89 -0
- package/references/shipping/LAUNCH-ANTIPATTERNS.md +68 -0
- package/references/shipping/OBSERVE-ANTIPATTERNS.md +62 -0
- package/references/shipping/OBSERVE-SLO-EXAMPLES.md +107 -0
- package/references/shipping/README.md +18 -0
- package/routing/god-add-backlog.yaml +24 -0
- package/routing/god-add-tests.yaml +27 -0
- package/routing/god-add-todo.yaml +24 -0
- package/routing/god-agent-audit.yaml +24 -0
- package/routing/god-arch.yaml +46 -0
- package/routing/god-archaeology.yaml +28 -0
- package/routing/god-audit.yaml +32 -0
- package/routing/god-budget.yaml +24 -0
- package/routing/god-build-agent.yaml +24 -0
- package/routing/god-build.yaml +46 -0
- package/routing/god-cache-clear.yaml +24 -0
- package/routing/god-check-todos.yaml +24 -0
- package/routing/god-context-scan.yaml +24 -0
- package/routing/god-context.yaml +44 -0
- package/routing/god-cost.yaml +24 -0
- package/routing/god-debug.yaml +28 -0
- package/routing/god-deploy.yaml +34 -0
- package/routing/god-design-impact.yaml +25 -0
- package/routing/god-design.yaml +67 -0
- package/routing/god-discuss.yaml +27 -0
- package/routing/god-docs.yaml +33 -0
- package/routing/god-doctor.yaml +27 -0
- package/routing/god-explore.yaml +27 -0
- package/routing/god-extension-add.yaml +24 -0
- package/routing/god-extension-info.yaml +24 -0
- package/routing/god-extension-list.yaml +24 -0
- package/routing/god-extension-remove.yaml +24 -0
- package/routing/god-extract-learnings.yaml +24 -0
- package/routing/god-fast.yaml +27 -0
- package/routing/god-feature.yaml +34 -0
- package/routing/god-graph.yaml +24 -0
- package/routing/god-harden.yaml +41 -0
- package/routing/god-help.yaml +27 -0
- package/routing/god-hotfix.yaml +34 -0
- package/routing/god-hygiene.yaml +28 -0
- package/routing/god-init.yaml +37 -0
- package/routing/god-intel.yaml +24 -0
- package/routing/god-launch.yaml +41 -0
- package/routing/god-lifecycle.yaml +27 -0
- package/routing/god-link.yaml +24 -0
- package/routing/god-lint.yaml +24 -0
- package/routing/god-list-assumptions.yaml +27 -0
- package/routing/god-locate.yaml +24 -0
- package/routing/god-logs.yaml +24 -0
- package/routing/god-map-codebase.yaml +24 -0
- package/routing/god-metrics.yaml +24 -0
- package/routing/god-mode.yaml +31 -0
- package/routing/god-next.yaml +27 -0
- package/routing/god-note.yaml +24 -0
- package/routing/god-observe.yaml +34 -0
- package/routing/god-org-context.yaml +28 -0
- package/routing/god-party.yaml +24 -0
- package/routing/god-pause-work.yaml +27 -0
- package/routing/god-plant-seed.yaml +24 -0
- package/routing/god-postmortem.yaml +34 -0
- package/routing/god-pr-branch.yaml +25 -0
- package/routing/god-prd.yaml +49 -0
- package/routing/god-quick.yaml +28 -0
- package/routing/god-reconcile.yaml +48 -0
- package/routing/god-reconstruct.yaml +36 -0
- package/routing/god-redo.yaml +27 -0
- package/routing/god-refactor.yaml +36 -0
- package/routing/god-repair.yaml +27 -0
- package/routing/god-repo.yaml +35 -0
- package/routing/god-restore.yaml +27 -0
- package/routing/god-resume-work.yaml +27 -0
- package/routing/god-review-changes.yaml +25 -0
- package/routing/god-review.yaml +28 -0
- package/routing/god-roadmap-check.yaml +39 -0
- package/routing/god-roadmap-update.yaml +37 -0
- package/routing/god-roadmap.yaml +42 -0
- package/routing/god-rollback.yaml +27 -0
- package/routing/god-scan.yaml +24 -0
- package/routing/god-set-profile.yaml +24 -0
- package/routing/god-settings.yaml +24 -0
- package/routing/god-skip.yaml +27 -0
- package/routing/god-smite.yaml +29 -0
- package/routing/god-spike.yaml +35 -0
- package/routing/god-sprint.yaml +25 -0
- package/routing/god-stack.yaml +41 -0
- package/routing/god-standards.yaml +24 -0
- package/routing/god-status.yaml +27 -0
- package/routing/god-stories.yaml +24 -0
- package/routing/god-story-build.yaml +25 -0
- package/routing/god-story-close.yaml +25 -0
- package/routing/god-story-verify.yaml +25 -0
- package/routing/god-story.yaml +24 -0
- package/routing/god-suite-init.yaml +24 -0
- package/routing/god-suite-patch.yaml +25 -0
- package/routing/god-suite-release.yaml +25 -0
- package/routing/god-suite-status.yaml +25 -0
- package/routing/god-suite-sync.yaml +25 -0
- package/routing/god-sync.yaml +33 -0
- package/routing/god-tech-debt.yaml +32 -0
- package/routing/god-test-extension.yaml +24 -0
- package/routing/god-test-runtime.yaml +25 -0
- package/routing/god-thread.yaml +24 -0
- package/routing/god-trace.yaml +24 -0
- package/routing/god-undo.yaml +27 -0
- package/routing/god-update-deps.yaml +39 -0
- package/routing/god-upgrade.yaml +33 -0
- package/routing/god-version.yaml +24 -0
- package/routing/god-workstream.yaml +24 -0
- package/routing/god.yaml +24 -0
- package/routing/recipes/add-feature-defer-current-milestone.yaml +21 -0
- package/routing/recipes/add-feature-future-conditional.yaml +21 -0
- package/routing/recipes/add-feature-mid-arc-pause.yaml +33 -0
- package/routing/recipes/add-feature-next-milestone.yaml +23 -0
- package/routing/recipes/add-feature-parallel.yaml +29 -0
- package/routing/recipes/add-feature-prd-update.yaml +21 -0
- package/routing/recipes/add-feature-small.yaml +24 -0
- package/routing/recipes/add-feature-tiny.yaml +24 -0
- package/routing/recipes/bluefield-org-aware.yaml +27 -0
- package/routing/recipes/broken-install.yaml +22 -0
- package/routing/recipes/brownfield-onboarding.yaml +32 -0
- package/routing/recipes/bug-no-urgency.yaml +21 -0
- package/routing/recipes/capture-idea.yaml +22 -0
- package/routing/recipes/capture-todo.yaml +21 -0
- package/routing/recipes/clean-pr.yaml +21 -0
- package/routing/recipes/code-cleanup.yaml +23 -0
- package/routing/recipes/docs-drift.yaml +21 -0
- package/routing/recipes/existing-codebase-onboarding.yaml +32 -0
- package/routing/recipes/extract-learnings.yaml +22 -0
- package/routing/recipes/greenfield-fast.yaml +25 -0
- package/routing/recipes/greenfield-manual.yaml +32 -0
- package/routing/recipes/greenfield-with-ideation.yaml +29 -0
- package/routing/recipes/incident-postmortem.yaml +24 -0
- package/routing/recipes/major-framework-upgrade.yaml +23 -0
- package/routing/recipes/monthly-deps.yaml +22 -0
- package/routing/recipes/multi-repo-suite.yaml +56 -0
- package/routing/recipes/parallel-engineers.yaml +26 -0
- package/routing/recipes/pause-handoff.yaml +21 -0
- package/routing/recipes/production-broken.yaml +26 -0
- package/routing/recipes/rerun-tier.yaml +21 -0
- package/routing/recipes/returning-after-break.yaml +31 -0
- package/routing/recipes/state-drift.yaml +21 -0
- package/routing/recipes/undo-last.yaml +21 -0
- package/routing/recipes/weekly-health-check.yaml +24 -0
- package/routing/recipes/whats-next.yaml +22 -0
- package/routing/recipes/where-am-i.yaml +21 -0
- package/schema/events.v1.json +63 -0
- package/schema/extension-manifest.v1.json +84 -0
- package/schema/intent.v1.yaml.json +116 -0
- package/schema/recipe.v1.json +120 -0
- package/schema/routing.v1.json +163 -0
- package/schema/state.v1.json +146 -0
- package/schema/workflow.v1.json +96 -0
- package/skills/god-add-backlog.md +40 -0
- package/skills/god-add-tests.md +53 -0
- package/skills/god-add-todo.md +32 -0
- package/skills/god-agent-audit.md +87 -0
- package/skills/god-arch.md +81 -0
- package/skills/god-archaeology.md +48 -0
- package/skills/god-audit.md +65 -0
- package/skills/god-budget.md +103 -0
- package/skills/god-build-agent.md +91 -0
- package/skills/god-build.md +90 -0
- package/skills/god-cache-clear.md +75 -0
- package/skills/god-check-todos.md +42 -0
- package/skills/god-context-scan.md +125 -0
- package/skills/god-context.md +147 -0
- package/skills/god-cost.md +118 -0
- package/skills/god-debug.md +30 -0
- package/skills/god-deploy.md +76 -0
- package/skills/god-design-impact.md +86 -0
- package/skills/god-design.md +275 -0
- package/skills/god-discuss.md +46 -0
- package/skills/god-docs.md +81 -0
- package/skills/god-doctor.md +94 -0
- package/skills/god-explore.md +50 -0
- package/skills/god-export-otel.md +87 -0
- package/skills/god-extension-add.md +79 -0
- package/skills/god-extension-info.md +75 -0
- package/skills/god-extension-list.md +55 -0
- package/skills/god-extension-remove.md +66 -0
- package/skills/god-extract-learnings.md +60 -0
- package/skills/god-fast.md +47 -0
- package/skills/god-feature.md +114 -0
- package/skills/god-graph.md +56 -0
- package/skills/god-harden.md +106 -0
- package/skills/god-help.md +66 -0
- package/skills/god-hotfix.md +139 -0
- package/skills/god-hygiene.md +104 -0
- package/skills/god-init.md +161 -0
- package/skills/god-intel.md +36 -0
- package/skills/god-launch.md +86 -0
- package/skills/god-lifecycle.md +119 -0
- package/skills/god-link.md +90 -0
- package/skills/god-lint.md +128 -0
- package/skills/god-list-assumptions.md +56 -0
- package/skills/god-locate.md +97 -0
- package/skills/god-logs.md +57 -0
- package/skills/god-map-codebase.md +45 -0
- package/skills/god-metrics.md +51 -0
- package/skills/god-mode.md +159 -0
- package/skills/god-next.md +257 -0
- package/skills/god-note.md +39 -0
- package/skills/god-observe.md +76 -0
- package/skills/god-org-context.md +81 -0
- package/skills/god-party.md +87 -0
- package/skills/god-pause-work.md +64 -0
- package/skills/god-plant-seed.md +59 -0
- package/skills/god-postmortem.md +103 -0
- package/skills/god-pr-branch.md +50 -0
- package/skills/god-prd.md +90 -0
- package/skills/god-quick.md +50 -0
- package/skills/god-reconcile.md +90 -0
- package/skills/god-reconstruct.md +72 -0
- package/skills/god-redo.md +73 -0
- package/skills/god-refactor.md +137 -0
- package/skills/god-repair.md +82 -0
- package/skills/god-repo.md +49 -0
- package/skills/god-restore.md +91 -0
- package/skills/god-resume-work.md +42 -0
- package/skills/god-review-changes.md +93 -0
- package/skills/god-review.md +52 -0
- package/skills/god-roadmap-check.md +66 -0
- package/skills/god-roadmap-update.md +64 -0
- package/skills/god-roadmap.md +77 -0
- package/skills/god-rollback.md +88 -0
- package/skills/god-scan.md +106 -0
- package/skills/god-set-profile.md +58 -0
- package/skills/god-settings.md +44 -0
- package/skills/god-skip.md +78 -0
- package/skills/god-smite.md +86 -0
- package/skills/god-spike.md +120 -0
- package/skills/god-sprint.md +77 -0
- package/skills/god-stack.md +74 -0
- package/skills/god-standards.md +62 -0
- package/skills/god-status.md +99 -0
- package/skills/god-stories.md +60 -0
- package/skills/god-story-build.md +76 -0
- package/skills/god-story-close.md +82 -0
- package/skills/god-story-verify.md +71 -0
- package/skills/god-story.md +55 -0
- package/skills/god-suite-init.md +75 -0
- package/skills/god-suite-patch.md +64 -0
- package/skills/god-suite-release.md +58 -0
- package/skills/god-suite-status.md +63 -0
- package/skills/god-suite-sync.md +49 -0
- package/skills/god-sync.md +102 -0
- package/skills/god-tech-debt.md +56 -0
- package/skills/god-test-extension.md +87 -0
- package/skills/god-test-runtime.md +144 -0
- package/skills/god-thread.md +39 -0
- package/skills/god-trace.md +50 -0
- package/skills/god-undo.md +68 -0
- package/skills/god-update-deps.md +134 -0
- package/skills/god-upgrade.md +139 -0
- package/skills/god-version.md +37 -0
- package/skills/god-workstream.md +61 -0
- package/skills/god.md +207 -0
- package/templates/ARCH.md +99 -0
- package/templates/DEPS-AUDIT.md +66 -0
- package/templates/DESIGN.md +71 -0
- package/templates/DOCS-UPDATE-LOG.md +64 -0
- package/templates/HARDEN-FINDINGS.md +69 -0
- package/templates/MIGRATION.md +86 -0
- package/templates/POSTMORTEM.md +88 -0
- package/templates/PRD.md +80 -0
- package/templates/PROGRESS.md +49 -0
- package/templates/ROADMAP.md +47 -0
- package/templates/SPIKE.md +72 -0
- package/templates/STACK-DECISION.md +61 -0
- package/workflows/audit-only.yaml +22 -0
- package/workflows/bluefield-arc.yaml +87 -0
- package/workflows/brownfield-arc.yaml +44 -0
- package/workflows/deps-audit.yaml +56 -0
- package/workflows/docs-arc.yaml +22 -0
- package/workflows/feature-arc.yaml +59 -0
- package/workflows/full-arc.yaml +84 -0
- package/workflows/hotfix-arc.yaml +59 -0
- package/workflows/hygiene.yaml +43 -0
- package/workflows/migration-arc.yaml +73 -0
- package/workflows/postmortem.yaml +31 -0
- package/workflows/refactor-arc.yaml +59 -0
- package/workflows/spike.yaml +23 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# ROADMAP Antipatterns
|
|
2
|
+
|
|
3
|
+
> Common ways roadmaps fail. Each has a sample, why it fails, and the fix.
|
|
4
|
+
|
|
5
|
+
## 1. The Date-Hopeful Roadmap
|
|
6
|
+
|
|
7
|
+
**Sample**: "M-1: Auth — early Q3"
|
|
8
|
+
|
|
9
|
+
**Why it fails**: "Early Q3" is not a gate, not a date, not a measurable
|
|
10
|
+
state. The team treats it as soft, slippage compounds, and by mid-Q3 the
|
|
11
|
+
milestone is "in progress" with no ship date.
|
|
12
|
+
|
|
13
|
+
**Fix**: Replace dates with gates. "M-1 ships when integration tests pass
|
|
14
|
+
on the staging environment with two beta accounts active for 7 consecutive
|
|
15
|
+
days." The gate is the milestone, not the date.
|
|
16
|
+
|
|
17
|
+
## 2. The Featurelist Roadmap
|
|
18
|
+
|
|
19
|
+
**Sample**:
|
|
20
|
+
- M-1: Auth, profile pages, settings, password reset
|
|
21
|
+
- M-2: Dashboard, charts, exports, sharing
|
|
22
|
+
|
|
23
|
+
**Why it fails**: Each milestone bundles unrelated features. There is no
|
|
24
|
+
shippable subset; users get nothing until the whole bag arrives. Slippage
|
|
25
|
+
on one item delays everything.
|
|
26
|
+
|
|
27
|
+
**Fix**: Each milestone must produce a thin vertical slice that delivers
|
|
28
|
+
real user value. M-1 = "user can sign up and see one chart." M-2 = "user
|
|
29
|
+
can share that chart." Each milestone ships independently.
|
|
30
|
+
|
|
31
|
+
## 3. The Phantom Gate
|
|
32
|
+
|
|
33
|
+
**Sample**: "M-2 gate: integration tests pass."
|
|
34
|
+
|
|
35
|
+
**Why it fails**: "Integration tests pass" is mechanical but vague. Which
|
|
36
|
+
tests? Against what data? In what environment? Writing the gate this way
|
|
37
|
+
makes it un-falsifiable.
|
|
38
|
+
|
|
39
|
+
**Fix**: Specify the gate concretely. "M-2 gate: the regression suite of
|
|
40
|
+
50 real CI logs identifies the right line in 95% of cases, run against
|
|
41
|
+
the M-2 build on the production CI runner."
|
|
42
|
+
|
|
43
|
+
## 4. The Reordering Trap
|
|
44
|
+
|
|
45
|
+
**Sample**: M-1 marked "done" but the gate criterion was relaxed mid-sprint.
|
|
46
|
+
|
|
47
|
+
**Why it fails**: A milestone that closed without meeting its original
|
|
48
|
+
gate is technical debt disguised as progress. The team moves on; the
|
|
49
|
+
unmet gate becomes invisible.
|
|
50
|
+
|
|
51
|
+
**Fix**: Treat gate changes as milestone changes. If the gate must move,
|
|
52
|
+
the milestone gets a new ID (M-1.1) and the old one is documented as
|
|
53
|
+
"closed with relaxed gate, see ADR-XXX." The original gate is preserved
|
|
54
|
+
for honesty.
|
|
55
|
+
|
|
56
|
+
## 5. The Phase-as-Milestone
|
|
57
|
+
|
|
58
|
+
**Sample**:
|
|
59
|
+
- M-1: Planning (4 weeks)
|
|
60
|
+
- M-2: Building (8 weeks)
|
|
61
|
+
- M-3: Shipping (2 weeks)
|
|
62
|
+
|
|
63
|
+
**Why it fails**: This is a Gantt chart, not a roadmap. Phases group
|
|
64
|
+
activities, not outcomes. Tracking against phases tells you how much
|
|
65
|
+
time elapsed, not what shipped.
|
|
66
|
+
|
|
67
|
+
**Fix**: Milestones are user-facing outcomes. "M-1: First account synced
|
|
68
|
+
end-to-end." "M-2: Dashboard reads cache, p99 under 800ms." Time
|
|
69
|
+
spent is incidental.
|
|
70
|
+
|
|
71
|
+
## 6. The Roadmap Without Reverse Direction
|
|
72
|
+
|
|
73
|
+
**Sample**: Each milestone lists what to build but never what to remove,
|
|
74
|
+
deprecate, or migrate.
|
|
75
|
+
|
|
76
|
+
**Why it fails**: Software accretes; only deletes shrink it. A roadmap
|
|
77
|
+
that only adds eventually becomes the source of complexity.
|
|
78
|
+
|
|
79
|
+
**Fix**: At least one milestone per quarter has a "remove" item. M-N:
|
|
80
|
+
"Remove the legacy v1 export path; users on v1 emails since Jan are
|
|
81
|
+
migrated to v2." Roadmap = what we ship + what we sunset.
|
|
82
|
+
|
|
83
|
+
## 7. The Empty Changelog
|
|
84
|
+
|
|
85
|
+
**Sample**: ROADMAP.md exists; the Changelog table at the bottom is
|
|
86
|
+
empty or has a single entry from project start.
|
|
87
|
+
|
|
88
|
+
**Why it fails**: Roadmaps drift. Milestones get added, removed, reordered.
|
|
89
|
+
No log = no honesty about why. New team members read the current roadmap
|
|
90
|
+
as if it were the original plan.
|
|
91
|
+
|
|
92
|
+
**Fix**: Every roadmap edit appends a changelog row with date, change,
|
|
93
|
+
reason. `2026-06-15 | Moved M-3 ahead of M-2 | Beta users blocked on
|
|
94
|
+
digest delivery, dashboard can wait`.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Stack Decision Anatomy
|
|
2
|
+
|
|
3
|
+
## Per-category structure
|
|
4
|
+
|
|
5
|
+
For each technology category:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
### [Category]: [Chosen Technology]
|
|
9
|
+
|
|
10
|
+
**Candidates**: A, B, C
|
|
11
|
+
**Scores**: A 9.2 / B 7.8 / C 6.5
|
|
12
|
+
**Why this one**: [specific to ARCH NFRs]
|
|
13
|
+
**Flip point**: [condition under which we reverse]
|
|
14
|
+
**Lock-in cost**: Low / Medium / High
|
|
15
|
+
**What switching requires**: [concrete description]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Worked example
|
|
19
|
+
|
|
20
|
+
### Language: TypeScript
|
|
21
|
+
|
|
22
|
+
**Candidates**: TypeScript, Python, Go
|
|
23
|
+
**Scores**: TS 9.2 / Python 7.8 / Go 7.1
|
|
24
|
+
|
|
25
|
+
**Why TypeScript**:
|
|
26
|
+
- Frontend is React (TS already in stack)
|
|
27
|
+
- Team has TS experience
|
|
28
|
+
- Type safety reduces post-deploy bug rate per PRD NFR (95% reduction in
|
|
29
|
+
runtime type errors vs JavaScript baseline; team's last project)
|
|
30
|
+
|
|
31
|
+
**Flip point**: If we add a service that needs sub-millisecond p99 latency
|
|
32
|
+
or hot-path performance (e.g., a real-time analytics engine), evaluate Go
|
|
33
|
+
or Rust for that service specifically. Don't migrate the whole stack.
|
|
34
|
+
|
|
35
|
+
**Lock-in cost**: Medium
|
|
36
|
+
- Switching the API to Python would require rewriting the data access layer
|
|
37
|
+
and validation library. Estimated 4-6 weeks for a single engineer.
|
|
38
|
+
- Lower if we keep an abstraction layer between web framework and business logic.
|
|
39
|
+
|
|
40
|
+
## Pairing checks
|
|
41
|
+
|
|
42
|
+
Verify chosen technologies work together:
|
|
43
|
+
|
|
44
|
+
- TypeScript + Express + Prisma: yes (Prisma has first-class TS support)
|
|
45
|
+
- Postgres + Prisma: yes (Prisma supports Postgres natively)
|
|
46
|
+
- BullMQ + Redis: yes (BullMQ requires Redis; we have it)
|
|
47
|
+
|
|
48
|
+
Flag mismatches:
|
|
49
|
+
- ChosenORM doesn't support ChosenDB: blocker
|
|
50
|
+
- Library X requires Node 16, but we chose Node 20: minor (verify upgrade path)
|
|
51
|
+
|
|
52
|
+
## High lock-in watch list
|
|
53
|
+
|
|
54
|
+
Choices marked "High" lock-in with flip points <6 months away:
|
|
55
|
+
|
|
56
|
+
| Choice | Lock-in | Likely flip | Mitigation |
|
|
57
|
+
|--------|---------|-------------|------------|
|
|
58
|
+
| Vercel for hosting | High | If we hit Vercel's scale tier limits | Maintain Dockerfile so we can leave |
|
|
59
|
+
|
|
60
|
+
If a high-lock-in choice has no mitigation, that's a have-not (S-04).
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# STACK Antipatterns
|
|
2
|
+
|
|
3
|
+
> Common ways stack decisions fail. Each has a sample, why it fails, and the fix.
|
|
4
|
+
|
|
5
|
+
## 1. The Resume-Driven Choice
|
|
6
|
+
|
|
7
|
+
**Sample**: "Selected Rust because it's a great learning opportunity."
|
|
8
|
+
|
|
9
|
+
**Why it fails**: The PRD does not require Rust's strengths (extreme
|
|
10
|
+
performance, no GC). The team takes 3x longer building features than they
|
|
11
|
+
would in TypeScript. The choice serves the resume, not the user.
|
|
12
|
+
|
|
13
|
+
**Fix**: Map each choice to a PRD requirement. "Rust because PRD NFR
|
|
14
|
+
requires processing 10MB logs in under 500ms with zero allocations in
|
|
15
|
+
hot path; benchmarks show TypeScript is 4x slower at this." If the PRD
|
|
16
|
+
doesn't pull, the stack doesn't push.
|
|
17
|
+
|
|
18
|
+
## 2. The Lock-In Without Acknowledgment
|
|
19
|
+
|
|
20
|
+
**Sample**: "Selected Vercel for hosting" with no flip point and no
|
|
21
|
+
estimated migration cost.
|
|
22
|
+
|
|
23
|
+
**Why it fails**: Single-vendor lock-in is sometimes the right choice,
|
|
24
|
+
but it must be acknowledged. Without a documented flip point, the team
|
|
25
|
+
can't tell when the choice has become a liability.
|
|
26
|
+
|
|
27
|
+
**Fix**: Every high-lock-in choice has a flip point and a migration cost
|
|
28
|
+
estimate. "Vercel; flip point when sync-worker exceeds 300s function
|
|
29
|
+
timeout; migration to Fly.io estimated at 2 weeks (cron + KV
|
|
30
|
+
re-platforming)."
|
|
31
|
+
|
|
32
|
+
## 3. The Pairing Mismatch
|
|
33
|
+
|
|
34
|
+
**Sample**: "Selected Next.js + AWS Lambda + DynamoDB."
|
|
35
|
+
|
|
36
|
+
**Why it fails**: Next.js is built around Vercel's runtime. Lambda has
|
|
37
|
+
cold-start issues for Next.js's SSR model. DynamoDB requires a different
|
|
38
|
+
data access pattern than the Next.js server-component idiom assumes. The
|
|
39
|
+
pairing fights itself.
|
|
40
|
+
|
|
41
|
+
**Fix**: Verify pairing compatibility pairwise. Document any
|
|
42
|
+
incompatibilities found. If a pair fights, either change the pair or
|
|
43
|
+
explicitly accept the friction with a Mitigations section.
|
|
44
|
+
|
|
45
|
+
## 4. The Buzzword Stack
|
|
46
|
+
|
|
47
|
+
**Sample**: A small SaaS app stack listing Kubernetes, Kafka, Cassandra,
|
|
48
|
+
Redis, Elasticsearch, and Spark.
|
|
49
|
+
|
|
50
|
+
**Why it fails**: Each tool is a category leader for its problem, but
|
|
51
|
+
the project doesn't have those problems yet. Operating six distributed
|
|
52
|
+
systems for 200 users is a full-time job; the actual product never ships.
|
|
53
|
+
|
|
54
|
+
**Fix**: Match operational complexity to current scale. A SaaS at $5k
|
|
55
|
+
MRR runs on Postgres + a single Node process. Add Kafka the day you
|
|
56
|
+
need event streaming you can't get from Postgres LISTEN/NOTIFY.
|
|
57
|
+
|
|
58
|
+
## 5. The Untyped Selection
|
|
59
|
+
|
|
60
|
+
**Sample**: "TBD on database; will decide during build."
|
|
61
|
+
|
|
62
|
+
**Why it fails**: Stack decisions made under build-time pressure are
|
|
63
|
+
worse than stack decisions made up front. The team picks whatever is
|
|
64
|
+
fastest in the moment; that choice locks in operational debt.
|
|
65
|
+
|
|
66
|
+
**Fix**: STACK.md has zero "TBD" entries before /god-build starts. If
|
|
67
|
+
genuinely unresolved, the entry says "/god-spike scheduled to evaluate
|
|
68
|
+
options X, Y, Z by date" and is gated as Tier 1 incomplete until the
|
|
69
|
+
spike resolves.
|
|
70
|
+
|
|
71
|
+
## 6. The "We'll Just Use" Trap
|
|
72
|
+
|
|
73
|
+
**Sample**: Casual sentence in PRD: "We'll just use Postgres."
|
|
74
|
+
|
|
75
|
+
**Why it fails**: That casual line skipped STACK entirely. No flip point,
|
|
76
|
+
no rationale, no pairing check. The choice is now load-bearing for
|
|
77
|
+
several other decisions and nobody owns it.
|
|
78
|
+
|
|
79
|
+
**Fix**: Promote every stack decision to STACK.md. If a PRD or ARCH
|
|
80
|
+
sentence implies a stack choice, that choice gets its own row in
|
|
81
|
+
STACK.md with rationale and flip point, even if the decision feels
|
|
82
|
+
obvious.
|
|
83
|
+
|
|
84
|
+
## 7. The Migration That Wasn't
|
|
85
|
+
|
|
86
|
+
**Sample**: STACK.md says "we use library X 2.x" but package.json shows 1.4.
|
|
87
|
+
|
|
88
|
+
**Why it fails**: Stack drift between the document and the code is
|
|
89
|
+
invisible until something breaks. The doc has aspirational truth; the
|
|
90
|
+
code has actual truth. Reverse-sync (Phase 6) catches this.
|
|
91
|
+
|
|
92
|
+
**Fix**: STACK.md entries get reverse-sync'd from `package.json` /
|
|
93
|
+
`go.mod` / `Cargo.toml` etc. The sync runs on /god-sync and updates
|
|
94
|
+
"Used in: X files; current version: 1.4" footers. Drift between stated
|
|
95
|
+
and actual is flagged in REVIEW-REQUIRED.md.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Godpowers Glossary
|
|
2
|
+
|
|
3
|
+
> Canonical vocabulary. Every doc, agent prompt, error message, and command
|
|
4
|
+
> must use these consistently.
|
|
5
|
+
|
|
6
|
+
## Core abstractions
|
|
7
|
+
|
|
8
|
+
**Tier**: a phase of the dev arc (0: Orchestration, 1: Planning, 2: Building, 3: Shipping).
|
|
9
|
+
|
|
10
|
+
**Sub-step**: a bounded unit within a tier (PRD, ARCH, Roadmap, Stack, Repo, Build, Deploy, Observe, Launch, Harden).
|
|
11
|
+
|
|
12
|
+
**Artifact**: a file on disk produced by a sub-step. Has a contract.
|
|
13
|
+
|
|
14
|
+
**Skill**: a slash command. Thin handle that spawns agents.
|
|
15
|
+
|
|
16
|
+
**Agent**: a specialist that turns sub-step inputs into the artifact. Fresh context per spawn.
|
|
17
|
+
|
|
18
|
+
**Gate**: a passing upstream artifact required for a downstream sub-step.
|
|
19
|
+
|
|
20
|
+
**Have-not**: a named, grep-testable failure mode. 200 in the catalog.
|
|
21
|
+
|
|
22
|
+
**Mode**: a run flavor (greenfield A, gap-fill B, audit C, multi-repo D-future).
|
|
23
|
+
|
|
24
|
+
**Scale**: project size (trivial, small, medium, large, enterprise). Drives which tiers and personas activate.
|
|
25
|
+
|
|
26
|
+
## Quality concepts
|
|
27
|
+
|
|
28
|
+
**Substitution test**: replace product name with competitor's; if sentence still reads true, it decides nothing. Rewrite.
|
|
29
|
+
|
|
30
|
+
**Three-label test**: every sentence is exactly DECISION, HYPOTHESIS, or OPEN QUESTION. Anything unlabeled is theater.
|
|
31
|
+
|
|
32
|
+
**Theater**: sentences that read fine but say nothing measurable, decidable, or testable.
|
|
33
|
+
|
|
34
|
+
**AI-slop**: output that passes substitution test. Reads generic.
|
|
35
|
+
|
|
36
|
+
**Paper artifact**: document exists but mechanism does not (e.g., "runbook" never executed, "SLO" with no error budget policy).
|
|
37
|
+
|
|
38
|
+
**Phantom resume**: agent claims tier is done but artifact is missing from disk.
|
|
39
|
+
|
|
40
|
+
**Ghost handoff**: tier invoked before its upstream artifact exists.
|
|
41
|
+
|
|
42
|
+
**Drift**: gap between what state.json claims and what disk actually contains.
|
|
43
|
+
|
|
44
|
+
## Workflow concepts
|
|
45
|
+
|
|
46
|
+
**Pause**: a genuine human-in-the-loop checkpoint. Five legitimate categories (ambiguous intent, human-only flip-point, statistical tie, Critical security finding, brand voice).
|
|
47
|
+
|
|
48
|
+
**YOLO**: auto-resolve all pauses except security Criticals. Logs to YOLO-DECISIONS.md.
|
|
49
|
+
|
|
50
|
+
**Workstream**: an isolated parallel branch with its own state.
|
|
51
|
+
|
|
52
|
+
**Vertical slice**: one user-visible behavior end-to-end. Not "set up the database".
|
|
53
|
+
|
|
54
|
+
**Wave**: a set of slices that can run in parallel within a build phase.
|
|
55
|
+
|
|
56
|
+
**Reflog**: append-only log of state-changing operations. Enables /god-undo.
|
|
57
|
+
|
|
58
|
+
**Trash**: recoverable deletion to `.godpowers/.trash/`.
|
|
59
|
+
|
|
60
|
+
## Agent concepts
|
|
61
|
+
|
|
62
|
+
**Fresh context**: each spawned agent gets a new context window. Defeats context rot.
|
|
63
|
+
|
|
64
|
+
**TDD enforcement**: tests written before implementation. Code-before-test triggers rewrite.
|
|
65
|
+
|
|
66
|
+
**Two-stage review**: god-spec-reviewer (compliance) then god-quality-reviewer (craft). Both must pass for commit.
|
|
67
|
+
|
|
68
|
+
**Atomic commit**: one slice = one commit. Never multiple slices in one commit.
|
|
69
|
+
|
|
70
|
+
**Critical-finding gate**: launch is blocked if god-harden-auditor finds Critical. Even --yolo.
|
|
71
|
+
|
|
72
|
+
## Extension concepts
|
|
73
|
+
|
|
74
|
+
**Extension**: a skill pack from npm. Adds new agents, skills, workflows, have-nots.
|
|
75
|
+
|
|
76
|
+
**Lazy activation**: extension files don't load until a slash command from that extension is invoked.
|
|
77
|
+
|
|
78
|
+
**Capability handshake**: extension declares `engines.godpowers: "^X.Y.0"` and install fails on mismatch.
|
|
79
|
+
|
|
80
|
+
**Skill pack**: another name for an extension. Same thing.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Composing with Other AI Coding Workflow Systems
|
|
2
|
+
|
|
3
|
+
> Godpowers is one of several skill-based AI dev tools. Here's how it
|
|
4
|
+
> composes with others, what's safe to combine, and how to resolve
|
|
5
|
+
> conflicts.
|
|
6
|
+
|
|
7
|
+
Godpowers does not assume it's the only AI workflow system installed.
|
|
8
|
+
Many users layer multiple tools (planning frameworks, discipline harnesses,
|
|
9
|
+
codebase mappers, story trackers). The rules below let them coexist.
|
|
10
|
+
|
|
11
|
+
## Coexistence principles
|
|
12
|
+
|
|
13
|
+
1. **One state directory per project.** Godpowers owns `.godpowers/`.
|
|
14
|
+
Other systems own their own directories (e.g. `.planning/`,
|
|
15
|
+
`.<vendor>/`). Don't point two systems at the same directory.
|
|
16
|
+
|
|
17
|
+
2. **Skills can coexist in `~/.claude/skills/`** (or the equivalent for
|
|
18
|
+
other AI tools). The AI tool routes by description match. Multiple
|
|
19
|
+
`/god-*` skills and any other namespace coexist fine.
|
|
20
|
+
|
|
21
|
+
3. **Don't mix recovery commands across systems.** `/god-undo` reverts
|
|
22
|
+
Godpowers state only. If another tool also writes to `.godpowers/`,
|
|
23
|
+
recovery drifts. Keep recovery scopes disjoint.
|
|
24
|
+
|
|
25
|
+
4. **Hooks are per-tool but share the directory.** SessionStart hooks
|
|
26
|
+
from multiple systems live in `~/.claude/hooks/` and run sequentially.
|
|
27
|
+
Order is not guaranteed; do not rely on cross-tool hook ordering.
|
|
28
|
+
|
|
29
|
+
5. **Resolve conflicts by state-directory ownership.** If Godpowers
|
|
30
|
+
says X and another tool says Y about the same artifact, follow
|
|
31
|
+
whichever system owns the directory the artifact lives in.
|
|
32
|
+
|
|
33
|
+
## When two systems overlap
|
|
34
|
+
|
|
35
|
+
| Overlap kind | Strategy |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Both write to the same artifact | Pick one as authoritative. Disable the other's writer for that artifact. |
|
|
38
|
+
| Both define a planning workflow | Pick one for planning. Mixing creates duplicate state and divergent truth. |
|
|
39
|
+
| One reasons (TDD, review), the other plans (PRD/ARCH) | Stack them. They're orthogonal. |
|
|
40
|
+
| Both ship slash commands with similar names | Disambiguate by prefix. `/god-*` is reserved for Godpowers. |
|
|
41
|
+
|
|
42
|
+
## Migration into Godpowers
|
|
43
|
+
|
|
44
|
+
If you arrive at Godpowers carrying artifacts from another system,
|
|
45
|
+
`/god-init` Mode B (gap-fill) reads what exists and maps it forward:
|
|
46
|
+
|
|
47
|
+
- Existing PRD-like documents -> `.godpowers/prd/PRD.md` (after
|
|
48
|
+
substitution-test rewrite if needed)
|
|
49
|
+
- Existing ADRs -> `.godpowers/arch/adr/`
|
|
50
|
+
- Existing roadmap / milestones -> `.godpowers/roadmap/ROADMAP.md`
|
|
51
|
+
- Existing story / ticket files -> `.godpowers/stories/STORY-*.md`
|
|
52
|
+
(via `/god-story`)
|
|
53
|
+
|
|
54
|
+
Mode B does not delete the source files. It produces Godpowers
|
|
55
|
+
artifacts alongside them. Once parity is reached, you can retire the
|
|
56
|
+
older system at your own pace.
|
|
57
|
+
|
|
58
|
+
## Migration out of Godpowers
|
|
59
|
+
|
|
60
|
+
Every Godpowers artifact is a plain Markdown file with optional
|
|
61
|
+
frontmatter. There's no proprietary binary state. To leave:
|
|
62
|
+
|
|
63
|
+
1. Copy `.godpowers/prd/`, `arch/`, `roadmap/`, `stack/` somewhere.
|
|
64
|
+
2. Strip the fenced "Implementation Linkage" footers if the target
|
|
65
|
+
system doesn't understand them (they're recoverable from code
|
|
66
|
+
annotations).
|
|
67
|
+
3. Delete `.godpowers/`.
|
|
68
|
+
|
|
69
|
+
## What Godpowers does not try to be
|
|
70
|
+
|
|
71
|
+
Godpowers is opinionated about: artifact discipline, bidirectional
|
|
72
|
+
linkage, the four-tier arc, the single-orchestrator rule, headless
|
|
73
|
+
runtime verification, and the substitution / three-label / have-nots
|
|
74
|
+
gates. It is intentionally not opinionated about: team ceremonies,
|
|
75
|
+
sprint cadence, ticket trackers, knowledge graphs, prompt engineering
|
|
76
|
+
methodology. If you need those, run them alongside.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Shared References
|
|
2
|
+
|
|
3
|
+
Cross-tier reference content used by multiple agents.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- [HAVE-NOTS.md](../HAVE-NOTS.md) (canonical failure-mode catalog, 115 entries)
|
|
8
|
+
|
|
9
|
+
## Planned content
|
|
10
|
+
|
|
11
|
+
- ORCHESTRATORS.md: composition patterns with other AI coding workflow systems
|
|
12
|
+
- RESEARCH.md: dated research notes informing agent design decisions
|
|
13
|
+
- GLOSSARY.md: standardized vocabulary across tiers (substitution test,
|
|
14
|
+
three-label test, flip point, have-not, paper artifact, theater, AI-slop)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# DEPLOY Antipatterns
|
|
2
|
+
|
|
3
|
+
## 1. The Manual Deploy
|
|
4
|
+
|
|
5
|
+
**Sample**: "Deploy steps: 1. SSH to server. 2. Git pull. 3. npm restart."
|
|
6
|
+
|
|
7
|
+
**Why it fails**: Manual steps run by a human are unreproducible, undocumented in
|
|
8
|
+
runtime state, and accumulate divergence from what's checked in.
|
|
9
|
+
|
|
10
|
+
**Fix**: Every deploy is a CI workflow triggered by a tag or merge to main.
|
|
11
|
+
The workflow is the deploy spec; the runbook describes the workflow, not
|
|
12
|
+
the steps to run by hand.
|
|
13
|
+
|
|
14
|
+
## 2. The Untested Rollback
|
|
15
|
+
|
|
16
|
+
**Sample**: Deploy doc lists "rollback: redeploy previous tag." Nobody has
|
|
17
|
+
ever tested rollback in production.
|
|
18
|
+
|
|
19
|
+
**Why it fails**: When you need rollback, it's because something is broken.
|
|
20
|
+
That's not the moment to discover the rollback path also broken.
|
|
21
|
+
|
|
22
|
+
**Fix**: Rollback is exercised at least quarterly (game-day), and the
|
|
23
|
+
exercise generates an entry in DEPLOY/STATE.md with the date and outcome.
|
|
24
|
+
|
|
25
|
+
## 3. The Secret in the Repo
|
|
26
|
+
|
|
27
|
+
**Sample**: `.env.production` checked in with API keys.
|
|
28
|
+
|
|
29
|
+
**Why it fails**: Once committed, it lives in git history forever. Rotation
|
|
30
|
+
is required; reputation damage is not undone.
|
|
31
|
+
|
|
32
|
+
**Fix**: Secrets in the platform's secret manager (Vercel env, AWS Secrets
|
|
33
|
+
Manager, etc.). `.gitignore` enforces; pre-commit hook scans. Detected
|
|
34
|
+
violations BLOCK commit.
|
|
35
|
+
|
|
36
|
+
## 4. The Big-Bang Deploy
|
|
37
|
+
|
|
38
|
+
**Sample**: 2-week change merged and deployed all at once.
|
|
39
|
+
|
|
40
|
+
**Why it fails**: Bisecting a regression across 100 commits is hours of
|
|
41
|
+
work. Blast radius is the entire change.
|
|
42
|
+
|
|
43
|
+
**Fix**: Continuous deploy on merge. Each commit deploys. Feature flags
|
|
44
|
+
gate user exposure. Rollback rolls back one commit.
|
|
45
|
+
|
|
46
|
+
## 5. The Silent Deploy
|
|
47
|
+
|
|
48
|
+
**Sample**: No notification, no log, no audit when production deploys.
|
|
49
|
+
|
|
50
|
+
**Why it fails**: When something breaks at 3 AM, you don't know if the
|
|
51
|
+
2:55 AM deploy caused it because there's no record.
|
|
52
|
+
|
|
53
|
+
**Fix**: Every deploy emits an event (Slack, audit log, observability
|
|
54
|
+
trace). DEPLOY/STATE.md records the deploy SHA, time, and operator
|
|
55
|
+
(human or CI).
|
|
56
|
+
|
|
57
|
+
## 6. The Environment Drift
|
|
58
|
+
|
|
59
|
+
**Sample**: Staging works, production fails. Investigation reveals
|
|
60
|
+
staging has Node 20 and production runs Node 18.
|
|
61
|
+
|
|
62
|
+
**Fix**: Identical infrastructure-as-code for staging and production.
|
|
63
|
+
Differ only in scale, not in versions. Drift between environments is a
|
|
64
|
+
SEV-2 incident in itself.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Deploy Patterns
|
|
2
|
+
|
|
3
|
+
## Same-Artifact Promotion
|
|
4
|
+
|
|
5
|
+
Build the artifact ONCE. Promote the SAME artifact through environments.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
build (CI) -> dev artifact -> dev env
|
|
9
|
+
-> staging env (same artifact)
|
|
10
|
+
-> prod env (same artifact)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Why**: prevents "works in staging, broken in prod" caused by build drift.
|
|
14
|
+
|
|
15
|
+
**How**:
|
|
16
|
+
- Tag the artifact (Docker image, binary, bundle) with a version
|
|
17
|
+
- Use the tag throughout promotion
|
|
18
|
+
- NEVER rebuild per environment
|
|
19
|
+
- Configuration is the only thing that differs across environments
|
|
20
|
+
|
|
21
|
+
## Environment Parity
|
|
22
|
+
|
|
23
|
+
Configuration shape is the same across environments. Values differ.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
# All environments use:
|
|
27
|
+
DATABASE_URL=...
|
|
28
|
+
STRIPE_API_KEY=...
|
|
29
|
+
LOG_LEVEL=...
|
|
30
|
+
|
|
31
|
+
# Values differ:
|
|
32
|
+
DATABASE_URL=postgres://dev-host vs postgres://prod-host
|
|
33
|
+
LOG_LEVEL=debug vs info
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Anti-pattern**: dev has feature flags that prod doesn't have. Or prod has
|
|
37
|
+
secrets that dev mocks. Drift accumulates and bites you.
|
|
38
|
+
|
|
39
|
+
## Expand-Contract for Schema Changes
|
|
40
|
+
|
|
41
|
+
Multi-step deploy for breaking schema changes:
|
|
42
|
+
|
|
43
|
+
1. **Expand**: deploy code that supports BOTH old and new schema. Old schema
|
|
44
|
+
still active.
|
|
45
|
+
2. **Migrate data**: backfill new schema from old. Both still work.
|
|
46
|
+
3. **Switch**: deploy code that reads/writes new schema only.
|
|
47
|
+
4. **Contract**: drop old schema in a separate deploy.
|
|
48
|
+
|
|
49
|
+
Each step is independently deployable and rollback-able.
|
|
50
|
+
|
|
51
|
+
## Real Health Checks
|
|
52
|
+
|
|
53
|
+
Application-level. NOT just TCP port.
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
// Good
|
|
57
|
+
GET /health -> {
|
|
58
|
+
status: "ok" | "degraded" | "down",
|
|
59
|
+
database: "connected",
|
|
60
|
+
stripe_api: "reachable",
|
|
61
|
+
worker_lag_seconds: 12,
|
|
62
|
+
version: "1.2.3"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Bad
|
|
66
|
+
GET /health -> 200 OK (just because the process is running)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Tested Rollback
|
|
70
|
+
|
|
71
|
+
Document the rollback. THEN run it in staging. Then commit the runbook.
|
|
72
|
+
|
|
73
|
+
A rollback that's never been executed is a paper rollback.
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Rollback procedure for v1.2.3:
|
|
77
|
+
1. Tag v1.2.2 in deploy system: kubectl rollout undo deployment/api
|
|
78
|
+
2. Verify health endpoint returns version: 1.2.2
|
|
79
|
+
3. Verify no DB schema rollback needed (this release was code-only)
|
|
80
|
+
4. Estimated time: 90 seconds
|
|
81
|
+
5. Last tested: 2026-04-15 (in staging)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Smoke Test Post-Deploy
|
|
85
|
+
|
|
86
|
+
Automated. Runs against the live environment. Fails the deploy if it fails.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# After deploy:
|
|
90
|
+
curl -sf https://api.example.com/health || rollback
|
|
91
|
+
curl -sf https://api.example.com/api/v1/version | grep "1.2.3" || rollback
|
|
92
|
+
# Critical user path:
|
|
93
|
+
curl -sf https://api.example.com/api/v1/auth/test || rollback
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Anti-patterns
|
|
97
|
+
|
|
98
|
+
### Manual deploy steps
|
|
99
|
+
Production deploy requires a human running commands. Each step is a
|
|
100
|
+
chance to mess up.
|
|
101
|
+
|
|
102
|
+
**Fix**: automate end-to-end. Even the "click approve" step should be a
|
|
103
|
+
script that opens the right URL.
|
|
104
|
+
|
|
105
|
+
### Paper canary
|
|
106
|
+
Canary deploy "label" exists, but no traffic split. Just calling something
|
|
107
|
+
canary doesn't make it one.
|
|
108
|
+
|
|
109
|
+
**Fix**: actually split traffic at the load balancer. 1% -> 10% -> 50% ->
|
|
110
|
+
100%. Verify metrics at each step.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# HARDEN Antipatterns
|
|
2
|
+
|
|
3
|
+
## 1. The Compliance-Only Audit
|
|
4
|
+
|
|
5
|
+
**Sample**: Auditor runs OWASP top-10 checklist; checks all boxes; ships.
|
|
6
|
+
|
|
7
|
+
**Why it fails**: OWASP top-10 is a floor, not a ceiling. A compliant
|
|
8
|
+
system can still leak through application-specific vulnerabilities the
|
|
9
|
+
checklist doesn't cover.
|
|
10
|
+
|
|
11
|
+
**Fix**: Adversarial review with named threat models. Auditor asks
|
|
12
|
+
"what would an attacker who has X try?" and traces the attack path
|
|
13
|
+
through actual code, not through a checklist.
|
|
14
|
+
|
|
15
|
+
## 2. The Findings Without Owner
|
|
16
|
+
|
|
17
|
+
**Sample**: HARDEN/FINDINGS.md lists 12 findings. None have owners or
|
|
18
|
+
deadlines.
|
|
19
|
+
|
|
20
|
+
**Why it fails**: Findings without owners are graveyards. Three months
|
|
21
|
+
later they're still open and no one remembers why.
|
|
22
|
+
|
|
23
|
+
**Fix**: Every finding gets an owner, severity, and a deadline. CRITICAL
|
|
24
|
+
findings block launch. HIGH findings have a deadline within the next
|
|
25
|
+
sprint. Open findings auto-surface in /god-status until closed.
|
|
26
|
+
|
|
27
|
+
## 3. The Untested Remediation
|
|
28
|
+
|
|
29
|
+
**Sample**: Finding closed because "we added validation." No test
|
|
30
|
+
demonstrates the validation works against the original attack.
|
|
31
|
+
|
|
32
|
+
**Why it fails**: Remediation that wasn't tested may not actually fix
|
|
33
|
+
the issue. Regression is invisible.
|
|
34
|
+
|
|
35
|
+
**Fix**: Each remediation lands with a regression test that fails
|
|
36
|
+
without the fix and passes with it. Closed findings link to the test.
|
|
37
|
+
|
|
38
|
+
## 4. The Auth Boundary Confusion
|
|
39
|
+
|
|
40
|
+
**Sample**: The system has authentication (who you are) but the team
|
|
41
|
+
treats it as authorization (what you can do).
|
|
42
|
+
|
|
43
|
+
**Why it fails**: Logged-in users can take actions they should not be
|
|
44
|
+
allowed to. Authorization is a separate layer.
|
|
45
|
+
|
|
46
|
+
**Fix**: Document auth boundaries explicitly: identity (who), session
|
|
47
|
+
(active), permissions (what). Each layer has its own tests.
|
|
48
|
+
|
|
49
|
+
## 5. The Trusted Input
|
|
50
|
+
|
|
51
|
+
**Sample**: Backend trusts data from frontend because "we control both."
|
|
52
|
+
|
|
53
|
+
**Why it fails**: Anyone can call the backend directly. Frontend
|
|
54
|
+
validation prevents accidents, not attacks.
|
|
55
|
+
|
|
56
|
+
**Fix**: Every input is untrusted. Validation runs on the boundary
|
|
57
|
+
between layers, not just at the UI.
|
|
58
|
+
|
|
59
|
+
## 6. The Outdated Threat Model
|
|
60
|
+
|
|
61
|
+
**Sample**: Threat model written at /god-init has not been updated even
|
|
62
|
+
though the system added a payment integration and a public API.
|
|
63
|
+
|
|
64
|
+
**Fix**: Threat model is a living document. /god-feature, /god-deploy,
|
|
65
|
+
and any change touching trust boundaries triggers a HARDEN review of
|
|
66
|
+
the affected boundary.
|