@rfxlamia/skillkit 1.0.0 → 1.2.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/agents/creative-copywriter.md +212 -0
- package/agents/agents/dario-amodei.md +135 -0
- package/agents/agents/doc-simplifier.md +63 -0
- package/agents/agents/kotlin-pro.md +433 -0
- package/agents/agents/red-team.md +136 -0
- package/agents/agents/sam-altman.md +121 -0
- package/agents/agents/seo-manager.md +184 -0
- package/package.json +7 -2
- package/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skillkit/.claude/settings.local.json +7 -0
- package/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
- package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
- package/skills/skillkit-help/SKILL.md +81 -0
- package/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
- package/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skillkit-help/template/SKILL.md +52 -0
- package/skills/skills/adversarial-review/SKILL.md +219 -0
- package/skills/skills/baby-education/SKILL.md +260 -0
- package/skills/skills/baby-education/references/advanced-techniques.md +323 -0
- package/skills/skills/baby-education/references/transformations.md +345 -0
- package/skills/skills/been-there-done-that/SKILL.md +455 -0
- package/skills/skills/been-there-done-that/references/analysis-patterns.md +162 -0
- package/skills/skills/been-there-done-that/references/git-commands.md +132 -0
- package/skills/skills/been-there-done-that/references/tree-insertion-logic.md +145 -0
- package/skills/skills/coolhunter/SKILL.md +270 -0
- package/skills/skills/coolhunter/assets/elicitation-methods.csv +51 -0
- package/skills/skills/coolhunter/knowledge/elicitation-methods.md +312 -0
- package/skills/skills/coolhunter/references/workflow-execution.md +238 -0
- package/skills/skills/coolhunter/workflow-plan-coolhunter.md +232 -0
- package/skills/skills/creative-copywriting/SKILL.md +324 -0
- package/skills/skills/creative-copywriting/databases/README.md +60 -0
- package/skills/skills/creative-copywriting/databases/carousel-structures.csv +16 -0
- package/skills/skills/creative-copywriting/databases/emotional-arcs.csv +11 -0
- package/skills/skills/creative-copywriting/databases/hook-formulas.csv +51 -0
- package/skills/skills/creative-copywriting/databases/power-words.csv +201 -0
- package/skills/skills/creative-copywriting/databases/psychological-triggers.csv +21 -0
- package/skills/skills/creative-copywriting/databases/read-more-patterns.csv +26 -0
- package/skills/skills/creative-copywriting/databases/swipe-triggers.csv +31 -0
- package/skills/skills/creative-copywriting/references/carousel-psychology.md +223 -0
- package/skills/skills/creative-copywriting/references/hook-anatomy.md +169 -0
- package/skills/skills/creative-copywriting/references/power-word-science.md +134 -0
- package/skills/skills/creative-copywriting/references/storytelling-frameworks.md +157 -0
- package/skills/skills/diverse-content-gen/SKILL.md +201 -0
- package/skills/skills/diverse-content-gen/references/advanced-techniques.md +320 -0
- package/skills/skills/diverse-content-gen/references/research-findings.md +379 -0
- package/skills/skills/diverse-content-gen/references/task-workflows.md +241 -0
- package/skills/skills/diverse-content-gen/references/tool-integration.md +419 -0
- package/skills/skills/diverse-content-gen/references/troubleshooting.md +426 -0
- package/skills/skills/diverse-content-gen/references/vs-core-technique.md +240 -0
- package/skills/skills/framework-critical-thinking/SKILL.md +220 -0
- package/skills/skills/framework-critical-thinking/references/bias_detector.md +375 -0
- package/skills/skills/framework-critical-thinking/references/fallback_handler.md +239 -0
- package/skills/skills/framework-critical-thinking/references/memory_curator.md +161 -0
- package/skills/skills/framework-critical-thinking/references/metacognitive_monitor.md +297 -0
- package/skills/skills/framework-critical-thinking/references/producer_critic_orchestrator.md +333 -0
- package/skills/skills/framework-critical-thinking/references/reasoning_router.md +235 -0
- package/skills/skills/framework-critical-thinking/references/reasoning_validator.md +97 -0
- package/skills/skills/framework-critical-thinking/references/reflection_trigger.md +78 -0
- package/skills/skills/framework-critical-thinking/references/self_verification.md +388 -0
- package/skills/skills/framework-critical-thinking/references/uncertainty_quantifier.md +207 -0
- package/skills/skills/framework-initiative/SKILL.md +231 -0
- package/skills/skills/framework-initiative/references/examples.md +150 -0
- package/skills/skills/framework-initiative/references/impact-analysis.md +157 -0
- package/skills/skills/framework-initiative/references/intent-patterns.md +145 -0
- package/skills/skills/framework-initiative/references/star-framework.md +165 -0
- package/skills/skills/humanize-docs/SKILL.md +203 -0
- package/skills/skills/humanize-docs/references/advanced-techniques.md +13 -0
- package/skills/skills/humanize-docs/references/core-transformations.md +368 -0
- package/skills/skills/humanize-docs/references/detection-patterns.md +400 -0
- package/skills/skills/humanize-docs/references/examples-gallery.md +374 -0
- package/skills/skills/imagine/SKILL.md +190 -0
- package/skills/skills/imagine/references/artstyle-corporate-memphis.md +625 -0
- package/skills/skills/imagine/references/artstyle-crewdson-hyperrealism.md +295 -0
- package/skills/skills/imagine/references/artstyle-iphone-social-media.md +426 -0
- package/skills/skills/imagine/references/artstyle-sciencesaru.md +276 -0
- package/skills/skills/pre-deploy-checklist/README.md +26 -0
- package/skills/skills/pre-deploy-checklist/SKILL.md +153 -0
- package/skills/skills/pre-deploy-checklist/references/checklist-categories.md +174 -0
- package/skills/skills/pre-deploy-checklist/references/domain-prompts.md +216 -0
- package/skills/skills/prompt-engineering/SKILL.md +209 -0
- package/skills/skills/prompt-engineering/references/advanced-combinations.md +444 -0
- package/skills/skills/prompt-engineering/references/chain-of-thought.md +140 -0
- package/skills/skills/prompt-engineering/references/decision_matrix.md +220 -0
- package/skills/skills/prompt-engineering/references/few-shot.md +346 -0
- package/skills/skills/prompt-engineering/references/json-format.md +270 -0
- package/skills/skills/prompt-engineering/references/natural-language.md +420 -0
- package/skills/skills/prompt-engineering/references/pitfalls.md +365 -0
- package/skills/skills/prompt-engineering/references/prompt-chaining.md +498 -0
- package/skills/skills/prompt-engineering/references/react.md +108 -0
- package/skills/skills/prompt-engineering/references/self-consistency.md +322 -0
- package/skills/skills/prompt-engineering/references/tree-of-thoughts.md +386 -0
- package/skills/skills/prompt-engineering/references/xml-format.md +220 -0
- package/skills/skills/prompt-engineering/references/yaml-format.md +488 -0
- package/skills/skills/prompt-engineering/references/zero-shot.md +74 -0
- package/skills/skills/quick-spec/SKILL.md +280 -0
- package/skills/skills/quick-spec/assets/tech-spec-template.md +74 -0
- package/skills/skills/quick-spec/references/step-01-understand.md +189 -0
- package/skills/skills/quick-spec/references/step-02-investigate.md +144 -0
- package/skills/skills/quick-spec/references/step-03-generate.md +128 -0
- package/skills/skills/quick-spec/references/step-04-review.md +173 -0
- package/skills/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skills/quick-spec/tests/test_scenarios.md +83 -0
- package/skills/skills/quick-spec/tests/test_skill.py +136 -0
- package/skills/skills/readme-expert/SKILL.md +538 -0
- package/skills/skills/readme-expert/knowledge/INDEX.md +192 -0
- package/skills/skills/readme-expert/knowledge/application/quality-standards.md +470 -0
- package/skills/skills/readme-expert/knowledge/application/script-executor.md +604 -0
- package/skills/skills/readme-expert/knowledge/application/template-library.md +822 -0
- package/skills/skills/readme-expert/knowledge/foundation/codebase-scanner.md +361 -0
- package/skills/skills/readme-expert/knowledge/foundation/validation-checklist.md +481 -0
- package/skills/skills/red-teaming/SKILL.md +321 -0
- package/skills/skills/red-teaming/references/ai-llm-redteam.md +517 -0
- package/skills/skills/red-teaming/references/attack-techniques.md +410 -0
- package/skills/skills/red-teaming/references/cybersecurity-redteam.md +383 -0
- package/skills/skills/red-teaming/references/tools-frameworks.md +446 -0
- package/skills/skills/releasing/.skillkit-mode +1 -0
- package/skills/skills/releasing/SKILL.md +225 -0
- package/skills/skills/releasing/references/version-detection.md +108 -0
- package/skills/skills/screenwriter/SKILL.md +273 -0
- package/skills/skills/screenwriter/references/advanced-techniques.md +216 -0
- package/skills/skills/screenwriter/references/pipeline-integration.md +266 -0
- package/skills/skills/skillkit/.claude/settings.local.json +7 -0
- package/skills/skills/skillkit/.claude-plugin/plugin.json +27 -0
- package/skills/skills/skillkit/CHANGELOG.md +484 -0
- package/skills/skills/skillkit/SKILL.md +511 -0
- package/skills/skills/skillkit/commands/skillkit.md +6 -0
- package/skills/skills/skillkit/commands/validate-plan.md +6 -0
- package/skills/skills/skillkit/commands/verify.md +6 -0
- package/skills/skills/skillkit/knowledge/INDEX.md +352 -0
- package/skills/skills/skillkit/knowledge/application/09-case-studies.md +257 -0
- package/skills/skills/skillkit/knowledge/application/10-technical-architecture.md +324 -0
- package/skills/skills/skillkit/knowledge/application/11-adoption-strategy.md +267 -0
- package/skills/skills/skillkit/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skills/skillkit/knowledge/application/13-competitive-landscape.md +198 -0
- package/skills/skills/skillkit/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skills/skillkit/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skills/skillkit/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skills/skillkit/knowledge/foundation/04-hybrid-patterns.md +308 -0
- package/skills/skills/skillkit/knowledge/foundation/05-token-economics.md +275 -0
- package/skills/skills/skillkit/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skills/skillkit/knowledge/foundation/07-security-concerns.md +322 -0
- package/skills/skills/skillkit/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skills/skillkit/knowledge/plugin-guide.md +614 -0
- package/skills/skills/skillkit/knowledge/tools/14-validation-tools-guide.md +150 -0
- package/skills/skills/skillkit/knowledge/tools/15-cost-tools-guide.md +157 -0
- package/skills/skills/skillkit/knowledge/tools/16-security-tools-guide.md +122 -0
- package/skills/skills/skillkit/knowledge/tools/17-pattern-tools-guide.md +161 -0
- package/skills/skills/skillkit/knowledge/tools/18-decision-helper-guide.md +243 -0
- package/skills/skills/skillkit/knowledge/tools/19-test-generator-guide.md +275 -0
- package/skills/skills/skillkit/knowledge/tools/20-split-skill-guide.md +149 -0
- package/skills/skills/skillkit/knowledge/tools/21-quality-scorer-guide.md +226 -0
- package/skills/skills/skillkit/knowledge/tools/22-migration-helper-guide.md +356 -0
- package/skills/skills/skillkit/knowledge/tools/23-subagent-creation-guide.md +448 -0
- package/skills/skills/skillkit/knowledge/tools/24-behavioral-testing-guide.md +122 -0
- package/skills/skills/skillkit/references/proposal-generation.md +982 -0
- package/skills/skills/skillkit/references/rationalization-catalog.md +75 -0
- package/skills/skills/skillkit/references/research-methodology.md +661 -0
- package/skills/skills/skillkit/references/section-2-full-creation-workflow.md +452 -0
- package/skills/skills/skillkit/references/section-3-validation-workflow-existing-skill.md +63 -0
- package/skills/skills/skillkit/references/section-4-decision-workflow-skills-vs-subagents.md +64 -0
- package/skills/skills/skillkit/references/section-5-migration-workflow-doc-to-skill.md +58 -0
- package/skills/skills/skillkit/references/section-6-subagent-creation-workflow.md +499 -0
- package/skills/skills/skillkit/references/section-7-knowledge-reference-map.md +72 -0
- package/skills/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/skills/skills/skillkit/scripts/decision_helper.py +799 -0
- package/skills/skills/skillkit/scripts/init_skill.py +400 -0
- package/skills/skills/skillkit/scripts/init_subagent.py +231 -0
- package/skills/skills/skillkit/scripts/migration_helper.py +669 -0
- package/skills/skills/skillkit/scripts/package_skill.py +211 -0
- package/skills/skills/skillkit/scripts/pattern_detector.py +381 -0
- package/skills/skills/skillkit/scripts/pattern_detector_new.py +382 -0
- package/skills/skills/skillkit/scripts/pressure_tester.py +157 -0
- package/skills/skills/skillkit/scripts/quality_scorer.py +999 -0
- package/skills/skills/skillkit/scripts/quick_validate.py +100 -0
- package/skills/skills/skillkit/scripts/security_scanner.py +474 -0
- package/skills/skills/skillkit/scripts/split_skill.py +540 -0
- package/skills/skills/skillkit/scripts/test_generator.py +695 -0
- package/skills/skills/skillkit/scripts/token_estimator.py +493 -0
- package/skills/skills/skillkit/scripts/utils/__init__.py +49 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
- package/skills/skills/skillkit/scripts/utils/budget_tracker.py +388 -0
- package/skills/skills/skillkit/scripts/utils/output_formatter.py +263 -0
- package/skills/skills/skillkit/scripts/utils/reference_validator.py +401 -0
- package/skills/skills/skillkit/scripts/validate_skill.py +594 -0
- package/skills/skills/skillkit/tests/test_behavioral.py +39 -0
- package/skills/skills/skillkit/tests/test_scenarios.md +83 -0
- package/skills/skills/skillkit/tests/test_skill.py +136 -0
- package/skills/skills/skillkit-help/SKILL.md +81 -0
- package/skills/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
- package/skills/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
- package/skills/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
- package/skills/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
- package/skills/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
- package/skills/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
- package/skills/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
- package/skills/skills/skillkit-help/template/SKILL.md +52 -0
- package/skills/skills/social-media-seo/SKILL.md +278 -0
- package/skills/skills/social-media-seo/databases/caption-styles.csv +31 -0
- package/skills/skills/social-media-seo/databases/engagement-tactics.csv +16 -0
- package/skills/skills/social-media-seo/databases/hashtag-strategies.csv +21 -0
- package/skills/skills/social-media-seo/databases/hook-formulas.csv +26 -0
- package/skills/skills/social-media-seo/databases/keyword-clusters.csv +11 -0
- package/skills/skills/social-media-seo/databases/thread-structures.csv +26 -0
- package/skills/skills/social-media-seo/databases/viral-patterns.csv +21 -0
- package/skills/skills/social-media-seo/references/analytics-guide.md +321 -0
- package/skills/skills/social-media-seo/references/instagram-seo.md +235 -0
- package/skills/skills/social-media-seo/references/threads-seo.md +305 -0
- package/skills/skills/social-media-seo/references/x-twitter-seo.md +337 -0
- package/skills/skills/social-media-seo/scripts/query_database.py +191 -0
- package/skills/skills/storyteller/SKILL.md +241 -0
- package/skills/skills/storyteller/references/transformation-methodology.md +293 -0
- package/skills/skills/storyteller/references/visual-vocabulary.md +177 -0
- package/skills/skills/thread-pro/SKILL.md +162 -0
- package/skills/skills/thread-pro/anti-ai-patterns.md +120 -0
- package/skills/skills/thread-pro/hook-formulas.md +138 -0
- package/skills/skills/thread-pro/references/anti-ai-patterns.md +120 -0
- package/skills/skills/thread-pro/references/hook-formulas.md +138 -0
- package/skills/skills/thread-pro/references/thread-structures.md +240 -0
- package/skills/skills/thread-pro/references/voice-injection.md +130 -0
- package/skills/skills/thread-pro/thread-structures.md +240 -0
- package/skills/skills/thread-pro/voice-injection.md +130 -0
- package/skills/skills/tinkering/SKILL.md +251 -0
- package/skills/skills/tinkering/references/graduation-checklist.md +100 -0
- package/skills/skills/validate-plan/.skillkit-mode +1 -0
- package/skills/skills/validate-plan/SKILL.md +406 -0
- package/skills/skills/validate-plan/references/dry-principles.md +251 -0
- package/skills/skills/validate-plan/references/gap-analysis-guide.md +320 -0
- package/skills/skills/validate-plan/references/tdd-patterns.md +413 -0
- package/skills/skills/validate-plan/references/yagni-checklist.md +330 -0
- package/skills/skills/verify-before-ship/.skillkit-mode +1 -0
- package/skills/skills/verify-before-ship/SKILL.md +116 -0
- package/skills/skills/verify-before-ship/references/anti-rationalization.md +212 -0
- package/skills/skills/verify-before-ship/references/verification-gates.md +305 -0
- package/skills-manifest.json +8 -2
- package/src/banner.js +1 -1
- package/src/cli.js +15 -4
- package/src/install.js +45 -29
- package/src/install.test.js +75 -7
- package/src/picker.js +15 -4
- package/src/picker.test.js +36 -1
- package/src/scope.js +8 -39
- package/src/scope.test.js +9 -13
- package/src/tools.js +76 -0
- package/src/tools.test.js +80 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# YAGNI Checklist - You Aren't Gonna Need It
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
|
|
5
|
+
- [What is YAGNI?](#what-is-yagni)
|
|
6
|
+
- [YAGNI Violation Types](#yagni-violation-types)
|
|
7
|
+
- [YAGNI Detection Checklist](#yagni-detection-checklist)
|
|
8
|
+
- [Common YAGNI Scenarios](#common-yagni-scenarios)
|
|
9
|
+
- [Plan Validation Questions](#plan-validation-questions)
|
|
10
|
+
- [YAGNI-Compliant Alternatives](#yagni-compliant-alternatives)
|
|
11
|
+
- [Red Flags in Plans](#red-flags-in-plans)
|
|
12
|
+
- [Resolution Strategies](#resolution-strategies)
|
|
13
|
+
- [Examples in Plan Context](#examples-in-plan-context)
|
|
14
|
+
|
|
15
|
+
## What is YAGNI?
|
|
16
|
+
|
|
17
|
+
**YAGNI (You Aren't Gonna Need It)** is a principle that states functionality should not be added until it is actually needed. It fights against over-engineering and speculative development.
|
|
18
|
+
|
|
19
|
+
## YAGNI Violation Types
|
|
20
|
+
|
|
21
|
+
### 1. Premature Abstraction
|
|
22
|
+
|
|
23
|
+
**Symptoms:**
|
|
24
|
+
- Abstract base classes with one implementation
|
|
25
|
+
- Plugin systems without plugins
|
|
26
|
+
- Generic solutions for specific problems
|
|
27
|
+
- Configuration for hypothetical scenarios
|
|
28
|
+
|
|
29
|
+
**Example:**
|
|
30
|
+
```typescript
|
|
31
|
+
// ❌ YAGNI: Plugin system for one widget
|
|
32
|
+
interface WidgetPlugin {
|
|
33
|
+
render(): React.ReactNode;
|
|
34
|
+
configure(options: WidgetOptions): void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
class WidgetManager {
|
|
38
|
+
plugins: Map<string, WidgetPlugin> = new Map();
|
|
39
|
+
|
|
40
|
+
register(plugin: WidgetPlugin) { ... }
|
|
41
|
+
unregister(name: string) { ... }
|
|
42
|
+
loadFromConfig(config: PluginConfig[]) { ... }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// When you only have one widget:
|
|
46
|
+
<WidgetManager plugins={[UserProfileWidget]} />
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// ✅ YAGNI-compliant: Direct implementation first
|
|
51
|
+
<UserProfileWidget />
|
|
52
|
+
// Add abstraction when you have 2+ widgets
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Over-Configuration
|
|
56
|
+
|
|
57
|
+
**Symptoms:**
|
|
58
|
+
- Settings that won't be changed
|
|
59
|
+
- Environment variables for constants
|
|
60
|
+
- Config files for simple values
|
|
61
|
+
- Feature flags for unimplemented features
|
|
62
|
+
|
|
63
|
+
**Example:**
|
|
64
|
+
```javascript
|
|
65
|
+
// ❌ YAGNI: Config for values that never change
|
|
66
|
+
{
|
|
67
|
+
"buttonPadding": 8,
|
|
68
|
+
"primaryColor": "#007bff",
|
|
69
|
+
"maxRetries": 3,
|
|
70
|
+
"timeout": 5000
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
// ✅ YAGNI-compliant: Hardcode until change needed
|
|
76
|
+
const BUTTON_PADDING = 8; // Extract when used in 2+ places
|
|
77
|
+
const PRIMARY_COLOR = "#007bff"; // Extract when theming needed
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 3. Future-Proofing
|
|
81
|
+
|
|
82
|
+
**Symptoms:**
|
|
83
|
+
- "We'll need this later" features
|
|
84
|
+
- Scalability for theoretical load
|
|
85
|
+
- Multi-tenant architecture for single tenant
|
|
86
|
+
- Multi-language support for one language
|
|
87
|
+
|
|
88
|
+
### 4. Speculative Extensibility
|
|
89
|
+
|
|
90
|
+
**Symptoms:**
|
|
91
|
+
- Hook points that won't be used
|
|
92
|
+
- Event systems for no listeners
|
|
93
|
+
- Extension points without extensions
|
|
94
|
+
- API versioning for one version
|
|
95
|
+
|
|
96
|
+
## YAGNI Detection Checklist
|
|
97
|
+
|
|
98
|
+
### For Each Feature in Plan
|
|
99
|
+
|
|
100
|
+
- [ ] Is this required for the current user story?
|
|
101
|
+
- [ ] Is there a concrete, immediate use case?
|
|
102
|
+
- [ ] Can this be added later without rewriting?
|
|
103
|
+
- [ ] Is the complexity justified by the value?
|
|
104
|
+
- [ ] Would a simpler solution work now?
|
|
105
|
+
|
|
106
|
+
### For Each Configuration
|
|
107
|
+
|
|
108
|
+
- [ ] Will this value actually be changed?
|
|
109
|
+
- [ ] Is this configurable in other similar projects?
|
|
110
|
+
- [ ] Does this need to vary by environment?
|
|
111
|
+
- [ ] Is the overhead of configuration worth it?
|
|
112
|
+
|
|
113
|
+
### For Each Abstraction
|
|
114
|
+
|
|
115
|
+
- [ ] Are there 2+ concrete use cases now?
|
|
116
|
+
- [ ] Is the abstraction simpler than duplication?
|
|
117
|
+
- [ ] Will this abstraction actually be used?
|
|
118
|
+
- [ ] Can the abstraction be added later?
|
|
119
|
+
|
|
120
|
+
## Common YAGNI Scenarios
|
|
121
|
+
|
|
122
|
+
### 1. Database Design
|
|
123
|
+
|
|
124
|
+
**YAGNI Violations:**
|
|
125
|
+
- Soft delete when hard delete is fine
|
|
126
|
+
- Audit logging when not required
|
|
127
|
+
- Multi-tenant fields for single tenant
|
|
128
|
+
- Archiving strategies for new features
|
|
129
|
+
|
|
130
|
+
**Questions to Ask:**
|
|
131
|
+
- Do we actually need to restore deleted records?
|
|
132
|
+
- Who will review audit logs?
|
|
133
|
+
- When will we add tenants?
|
|
134
|
+
- How long until we have archive-worthy data?
|
|
135
|
+
|
|
136
|
+
### 2. API Design
|
|
137
|
+
|
|
138
|
+
**YAGNI Violations:**
|
|
139
|
+
- GraphQL when REST is sufficient
|
|
140
|
+
- Pagination for small datasets
|
|
141
|
+
- Caching strategies for low traffic
|
|
142
|
+
- Rate limiting for internal APIs
|
|
143
|
+
|
|
144
|
+
**Questions to Ask:**
|
|
145
|
+
- How many entities will this endpoint return?
|
|
146
|
+
- What's the actual response time without caching?
|
|
147
|
+
- Who would abuse this API?
|
|
148
|
+
- What's the actual traffic volume?
|
|
149
|
+
|
|
150
|
+
### 3. UI Components
|
|
151
|
+
|
|
152
|
+
**YAGNI Violations:**
|
|
153
|
+
- Theme system for single theme
|
|
154
|
+
- 10 button variants when 2 are used
|
|
155
|
+
- Responsive breakpoints for unsupported devices
|
|
156
|
+
- Accessibility features for internal tools
|
|
157
|
+
|
|
158
|
+
**Questions to Ask:**
|
|
159
|
+
- Will we actually have multiple themes?
|
|
160
|
+
- Which button variants are used in designs?
|
|
161
|
+
- What devices do our users actually use?
|
|
162
|
+
- Who are the actual users of this tool?
|
|
163
|
+
|
|
164
|
+
### 4. Testing
|
|
165
|
+
|
|
166
|
+
**YAGNI Violations:**
|
|
167
|
+
- 100% coverage mandate
|
|
168
|
+
- E2E tests for simple CRUD
|
|
169
|
+
- Load testing for low-traffic features
|
|
170
|
+
- Cross-browser testing for Chrome-only users
|
|
171
|
+
|
|
172
|
+
**Questions to Ask:**
|
|
173
|
+
- What's the critical path for users?
|
|
174
|
+
- What bugs have actually occurred?
|
|
175
|
+
- What's the actual usage pattern?
|
|
176
|
+
- What browsers do analytics show?
|
|
177
|
+
|
|
178
|
+
## Plan Validation Questions
|
|
179
|
+
|
|
180
|
+
### High-Priority Checks
|
|
181
|
+
|
|
182
|
+
1. **Does the plan include features not in requirements?**
|
|
183
|
+
```
|
|
184
|
+
Requirement: "User can log in"
|
|
185
|
+
Plan includes: "OAuth, SAML, MFA, passwordless"
|
|
186
|
+
→ YAGNI violation: Implement basic auth first
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
2. **Are there abstractions without concrete needs?**
|
|
190
|
+
```
|
|
191
|
+
Plan: "Create plugin architecture for widget system"
|
|
192
|
+
Reality: Only one widget type needed
|
|
193
|
+
→ YAGNI violation: Build direct widget first
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
3. **Is there premature optimization?**
|
|
197
|
+
```
|
|
198
|
+
Plan: "Add Redis caching layer"
|
|
199
|
+
Reality: Database queries complete in <50ms
|
|
200
|
+
→ YAGNI violation: Optimize when it's a problem
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Medium-Priority Checks
|
|
204
|
+
|
|
205
|
+
1. **Are there configurable values that won't change?**
|
|
206
|
+
```
|
|
207
|
+
Plan: "Make pagination limit configurable"
|
|
208
|
+
Reality: 20 items per page is standard
|
|
209
|
+
→ YAGNI consideration: Hardcode, extract when needed
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
2. **Is there generic handling for specific cases?**
|
|
213
|
+
```
|
|
214
|
+
Plan: "Support N validation rules per field"
|
|
215
|
+
Reality: Only required + email validation needed
|
|
216
|
+
→ YAGNI consideration: Handle specific case first
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## YAGNI-Compliant Alternatives
|
|
220
|
+
|
|
221
|
+
### When Tempted to Add Abstraction
|
|
222
|
+
|
|
223
|
+
| Instead of... | Do this first... | Add abstraction when... |
|
|
224
|
+
|---------------|------------------|------------------------|
|
|
225
|
+
| Plugin system | Direct implementation | 2+ plugins exist |
|
|
226
|
+
| Generic validator | Specific validation | 3+ similar validations |
|
|
227
|
+
| Config file | Hardcoded constants | Values differ by env |
|
|
228
|
+
| Event system | Direct function calls | 2+ listeners needed |
|
|
229
|
+
| Microservices | Monolith modules | Team scaling issues |
|
|
230
|
+
|
|
231
|
+
### When Tempted to Optimize
|
|
232
|
+
|
|
233
|
+
| Instead of... | Do this first... | Optimize when... |
|
|
234
|
+
|---------------|------------------|------------------|
|
|
235
|
+
| Database caching | Direct queries | >200ms response |
|
|
236
|
+
| CDN | Serve static files | >1s load time |
|
|
237
|
+
| Connection pooling | Simple connections | Connection limits hit |
|
|
238
|
+
| Async processing | Synchronous | User waits >3s |
|
|
239
|
+
| Pagination | Full list | >50 items |
|
|
240
|
+
|
|
241
|
+
## Red Flags in Plans
|
|
242
|
+
|
|
243
|
+
### Critical (Must Fix)
|
|
244
|
+
- Building features for hypothetical users
|
|
245
|
+
- Multi-tenant architecture for single tenant
|
|
246
|
+
- API versioning before first release
|
|
247
|
+
- Scalability for theoretical load
|
|
248
|
+
|
|
249
|
+
### Warning (Consider Carefully)
|
|
250
|
+
- More than 3 configuration options
|
|
251
|
+
- Generic solutions for one use case
|
|
252
|
+
- Extensibility hooks without clear need
|
|
253
|
+
- Caching for low-traffic features
|
|
254
|
+
|
|
255
|
+
### Info (Keep in Mind)
|
|
256
|
+
- Extra fields "just in case"
|
|
257
|
+
- Comments about future features
|
|
258
|
+
- TODO items not in current scope
|
|
259
|
+
- "We might need this" statements
|
|
260
|
+
|
|
261
|
+
## Resolution Strategies
|
|
262
|
+
|
|
263
|
+
### When YAGNI Violation Found
|
|
264
|
+
|
|
265
|
+
1. **Assess the actual need**
|
|
266
|
+
- Is this in current requirements?
|
|
267
|
+
- What's the concrete use case?
|
|
268
|
+
- When will this be needed?
|
|
269
|
+
|
|
270
|
+
2. **Determine the right scope**
|
|
271
|
+
- Remove speculative features
|
|
272
|
+
- Simplify abstractions
|
|
273
|
+
- Hardcode configuration values
|
|
274
|
+
- Focus on immediate requirements
|
|
275
|
+
|
|
276
|
+
3. **Document future possibilities**
|
|
277
|
+
- Add comments for future extension
|
|
278
|
+
- Note potential abstraction points
|
|
279
|
+
- Don't build, but design for addition
|
|
280
|
+
|
|
281
|
+
## Examples in Plan Context
|
|
282
|
+
|
|
283
|
+
### Example 1: Admin Interface
|
|
284
|
+
|
|
285
|
+
**Plan says:**
|
|
286
|
+
```markdown
|
|
287
|
+
Create comprehensive admin panel with:
|
|
288
|
+
- User management
|
|
289
|
+
- Role configuration
|
|
290
|
+
- Audit logging
|
|
291
|
+
- Export functionality
|
|
292
|
+
- Bulk operations
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**YAGNI Check:**
|
|
296
|
+
- Requirements only mention "admin can view users"
|
|
297
|
+
- No mention of roles, audit, export, bulk ops
|
|
298
|
+
|
|
299
|
+
**Recommendation:**
|
|
300
|
+
```markdown
|
|
301
|
+
Create simple user list view:
|
|
302
|
+
- Display users in table
|
|
303
|
+
- Basic filtering
|
|
304
|
+
- YAGNI: Add admin features when admin workflows are defined
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Example 2: API Design
|
|
308
|
+
|
|
309
|
+
**Plan says:**
|
|
310
|
+
```markdown
|
|
311
|
+
Design API with:
|
|
312
|
+
- Versioning (/v1/, /v2/)
|
|
313
|
+
- Pagination for all endpoints
|
|
314
|
+
- HATEOAS links
|
|
315
|
+
- Rate limiting
|
|
316
|
+
- Request queuing
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**YAGNI Check:**
|
|
320
|
+
- Only one client (web app)
|
|
321
|
+
- Low traffic expected initially
|
|
322
|
+
- Small dataset
|
|
323
|
+
|
|
324
|
+
**Recommendation:**
|
|
325
|
+
```markdown
|
|
326
|
+
Simple REST API:
|
|
327
|
+
- No versioning until breaking change needed
|
|
328
|
+
- Pagination when datasets grow >50 items
|
|
329
|
+
- YAGNI: Add rate limiting when abuse detected
|
|
330
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
full
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verify-before-ship
|
|
3
|
+
description: Enforce agent to complete all 7 production safety gates with evidence before any deployment. Use when about to deploy, push to production, merge a release branch, or ship any change to a live environment. Blocks rationalized shortcuts under time, authority, sunk-cost, or exhaustion pressure.
|
|
4
|
+
category: deployment
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Verify Before Ship
|
|
8
|
+
|
|
9
|
+
## The Non-Negotiable Mandate
|
|
10
|
+
|
|
11
|
+
**You may not ship to production until all 7 gates are cleared with evidence.**
|
|
12
|
+
|
|
13
|
+
This is not a suggestion. It is not a checklist to tick when convenient. No urgency, role, authority, or circumstance overrides this mandate. The pressure you feel to skip a gate is the exact signal that the gate must be held.
|
|
14
|
+
|
|
15
|
+
When in doubt: **DO NOT SHIP.**
|
|
16
|
+
|
|
17
|
+
## When This Skill Applies
|
|
18
|
+
|
|
19
|
+
Invoke this skill whenever any of the following is true:
|
|
20
|
+
- You are about to deploy code to production
|
|
21
|
+
- You are merging a release branch into main/master
|
|
22
|
+
- You are pushing a hotfix, patch, or "quick fix" live
|
|
23
|
+
- You are applying schema migrations, config changes, or infrastructure updates
|
|
24
|
+
- Someone asks you to ship anything to a live environment
|
|
25
|
+
|
|
26
|
+
## The 7 Gates
|
|
27
|
+
|
|
28
|
+
Every gate requires **evidence** — a concrete artifact, not a statement of belief.
|
|
29
|
+
|
|
30
|
+
| # | Gate | Evidence Required |
|
|
31
|
+
|---|------|-------------------|
|
|
32
|
+
| G1 | Tests pass | Paste CI output or test run result showing all pass |
|
|
33
|
+
| G2 | Security scan clean | Paste scan report summary — no critical/high CVEs |
|
|
34
|
+
| G3 | No breaking changes | Paste diff summary or contract test output |
|
|
35
|
+
| G4 | Environment config validated | Paste config diff between staging and production |
|
|
36
|
+
| G5 | Staging deployment verified | Paste staging URL + smoke test result or screenshot |
|
|
37
|
+
| G6 | Rollback plan documented | Paste rollback steps or link to runbook |
|
|
38
|
+
| G7 | Code review approved | Paste PR link showing at least one approval |
|
|
39
|
+
|
|
40
|
+
Gates must be completed **in full, not in part**. "I checked" without evidence is not evidence.
|
|
41
|
+
|
|
42
|
+
**→ Full gate specifications with evidence templates: [references/verification-gates.md](references/verification-gates.md)**
|
|
43
|
+
|
|
44
|
+
## Red Flags — Rationalization Alert
|
|
45
|
+
|
|
46
|
+
If you hear yourself thinking any of these, STOP. Do not proceed.
|
|
47
|
+
|
|
48
|
+
| Rationalization | Reality | Required Action |
|
|
49
|
+
|-----------------|---------|-----------------|
|
|
50
|
+
| "The manager/CTO authorized skipping this" | No one has authority to skip safety gates | Hold the gate. Escalate the risk in writing. |
|
|
51
|
+
| "It's just a minimal/targeted check, not the full thing" | Partial verification is no verification | All 7 gates. No subset. |
|
|
52
|
+
| "It's a live outage — different rules apply" | Outage pressure is the exact trap this skill prevents | Gates still apply. Compress time, not gates. |
|
|
53
|
+
| "I've already spent hours on this, the logic is clearly correct" | Self-review under sunk-cost bias misses bugs systematically | Tests catch what familiarity hides. |
|
|
54
|
+
| "It's just a hotfix / one-line change / obviously safe" | Catastrophic incidents commonly originate from "obvious" fixes | Gate size does not scale with change size. |
|
|
55
|
+
| "I'll verify after it's live" | Post-hoc verification of broken production is incident response | Verify before. Always. |
|
|
56
|
+
| "Tests are slow / CI is down today" | Use that time to write the rollback plan | No CI = no ship today. |
|
|
57
|
+
| "We can rollback if anything goes wrong" | Rollback is not a substitute for verification | Rollback must be the last resort, not the plan A. |
|
|
58
|
+
|
|
59
|
+
**→ Full rationalization counter-playbook: [references/anti-rationalization.md](references/anti-rationalization.md)**
|
|
60
|
+
|
|
61
|
+
## Gate Sequence Protocol
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
BEFORE SHIP:
|
|
65
|
+
FOR each gate G1 through G7:
|
|
66
|
+
1. Collect evidence artifact
|
|
67
|
+
2. Present evidence explicitly
|
|
68
|
+
3. Confirm gate cleared
|
|
69
|
+
IF any gate cannot be cleared:
|
|
70
|
+
→ DO NOT SHIP
|
|
71
|
+
→ Document the blocker
|
|
72
|
+
→ Escalate to human decision-maker WITH the blocker documented
|
|
73
|
+
IF all 7 gates cleared:
|
|
74
|
+
→ Ship with confidence
|
|
75
|
+
→ Monitor first 15 minutes post-deploy
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Hardcoded Exceptions
|
|
79
|
+
|
|
80
|
+
There are **zero** hardcoded exceptions to the gate sequence.
|
|
81
|
+
|
|
82
|
+
Not for P0 incidents. Not for CTO orders. Not for contract deadlines. Not for 2AM exhaustion. Not for "obviously correct" fixes. Not for one-line changes.
|
|
83
|
+
|
|
84
|
+
The argument "this is a special case" is the most common rationalization pattern. Every skipped gate in history felt like a special case at the time.
|
|
85
|
+
|
|
86
|
+
## Evidence Format
|
|
87
|
+
|
|
88
|
+
When presenting gate evidence, use this format:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
GATE [#] [Name]: CLEARED
|
|
92
|
+
Evidence: [paste artifact here]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Example:
|
|
96
|
+
```
|
|
97
|
+
GATE G1 Tests: CLEARED
|
|
98
|
+
Evidence:
|
|
99
|
+
✓ 247 tests passed, 0 failed, 0 skipped
|
|
100
|
+
CI run: github.com/org/repo/actions/runs/12345
|
|
101
|
+
|
|
102
|
+
GATE G6 Rollback: CLEARED
|
|
103
|
+
Evidence:
|
|
104
|
+
Rollback steps:
|
|
105
|
+
1. git revert HEAD~1
|
|
106
|
+
2. kubectl rollout undo deployment/api
|
|
107
|
+
3. Verify health endpoint returns 200
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## After All Gates Clear
|
|
111
|
+
|
|
112
|
+
Only after all 7 gates show CLEARED:
|
|
113
|
+
1. Ship the change
|
|
114
|
+
2. Monitor for 15 minutes post-deploy (errors, latency, alerts)
|
|
115
|
+
3. Confirm health indicators are stable
|
|
116
|
+
4. Document the deployment in your team's deploy log
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Anti-Rationalization Playbook
|
|
2
|
+
|
|
3
|
+
This file documents every known rationalization pattern for skipping production verification gates, with explicit counters. Each entry comes from observed agent behavior under pressure.
|
|
4
|
+
|
|
5
|
+
When you recognize a rationalization, name it aloud and apply the counter.
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Pattern 1: Authority Override](#pattern-1-authority-override)
|
|
10
|
+
- [Pattern 2: Minimal Verification Substitution](#pattern-2-minimal-verification-substitution)
|
|
11
|
+
- [Pattern 3: Live Outage Exception](#pattern-3-live-outage-exception)
|
|
12
|
+
- [Pattern 4: Sunk Cost Confidence](#pattern-4-sunk-cost-confidence)
|
|
13
|
+
- [Pattern 5: Post-Hoc Verification Promise](#pattern-5-post-hoc-verification-promise)
|
|
14
|
+
- [Pattern 6: Change Size Minimization](#pattern-6-change-size-minimization)
|
|
15
|
+
- [Pattern 7: CI Infrastructure Excuse](#pattern-7-ci-infrastructure-excuse)
|
|
16
|
+
- [Combined Pressure Recognition](#combined-pressure-recognition)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Pattern 1: Authority Override
|
|
21
|
+
|
|
22
|
+
**The rationalization:**
|
|
23
|
+
> "My manager / CTO / VP / incident commander has authorized skipping the verification process. They said this is a special case."
|
|
24
|
+
|
|
25
|
+
**Why it feels compelling:**
|
|
26
|
+
Hierarchy is a powerful social signal. When a high-authority figure gives a direct order, compliance feels correct. The agent may frame skipping as "following orders" rather than "skipping safety."
|
|
27
|
+
|
|
28
|
+
**The counter:**
|
|
29
|
+
Authority controls business decisions. Authority does not change whether the code is correct, whether tests pass, or whether a rollback plan exists.
|
|
30
|
+
|
|
31
|
+
When an executive says "skip verification," they mean "move as fast as possible given the risk." They are expressing urgency, not literally ordering you to deploy broken code. Your job is to compress verification time, not eliminate it.
|
|
32
|
+
|
|
33
|
+
**Correct response to authority pressure:**
|
|
34
|
+
- Acknowledge urgency: "Moving as fast as possible."
|
|
35
|
+
- State what you're doing: "Running targeted tests and writing the rollback command now — 3 minutes."
|
|
36
|
+
- Escalate the risk in writing: "Deploying without G1/G2 — @CTO, confirming you accept this risk" [in writing, timestamped].
|
|
37
|
+
- If they say "no, zero checks": Ask them to deploy it themselves. You are not an execution arm for non-judgment.
|
|
38
|
+
|
|
39
|
+
**What is NOT acceptable:**
|
|
40
|
+
- Deploying with no tests run because someone told you to
|
|
41
|
+
- Saying "the CTO authorized it" without running any of the 7 gates
|
|
42
|
+
- Treating "authority approval" as equivalent to evidence
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Pattern 2: Minimal Verification Substitution
|
|
47
|
+
|
|
48
|
+
**The rationalization:**
|
|
49
|
+
> "I'll do a minimal/targeted/quick verification instead of the full checklist. Just the critical checks. Not the full suite."
|
|
50
|
+
|
|
51
|
+
**Why it feels compelling:**
|
|
52
|
+
This sounds reasonable. "I'm not skipping verification, I'm just scoping it appropriately." It lets the agent feel disciplined while still bypassing most gates.
|
|
53
|
+
|
|
54
|
+
**The counter:**
|
|
55
|
+
"Minimal verification" is not a defined state — it is a blank check to skip whichever gate is most inconvenient. Every skipped gate sounded "not critical" to someone, at some point, before an incident.
|
|
56
|
+
|
|
57
|
+
The 7 gates exist as a set. The gate you most want to skip is usually the gate that would catch the bug.
|
|
58
|
+
|
|
59
|
+
**The specific substitutions to reject:**
|
|
60
|
+
- "Just running unit tests, not integration" → G1 requires all tests to pass
|
|
61
|
+
- "Skipping staging because it's similar to prod" → G5 is not optional
|
|
62
|
+
- "No rollback plan needed, it's a simple change" → G6 is not optional
|
|
63
|
+
- "Code review was informal, not a formal PR" → G7 requires a documented approval
|
|
64
|
+
|
|
65
|
+
**Correct behavior:**
|
|
66
|
+
State which gates cannot be cleared and why. Do not invent a subset that happens to be completable. If a gate cannot be cleared, the ship is blocked. That is the correct outcome.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Pattern 3: Live Outage Exception
|
|
71
|
+
|
|
72
|
+
**The rationalization:**
|
|
73
|
+
> "There's a live outage causing active harm right now. Normal verification rules don't apply in a P0 situation. We need to deploy the fix immediately with minimum viable checks."
|
|
74
|
+
|
|
75
|
+
**Why it feels compelling:**
|
|
76
|
+
The harm is real and visible. Users are affected. Every minute counts. Skipping verification feels like the responsible thing — it prioritizes users over process.
|
|
77
|
+
|
|
78
|
+
**The counter:**
|
|
79
|
+
Deploying an unverified fix during an active outage is how single outages become cascading disasters. The pressure to skip verification is highest exactly when the consequences of a bad deploy are worst.
|
|
80
|
+
|
|
81
|
+
"Minimum viable checks" during an outage usually means "I'm too stressed to think clearly about what to check." Stressed, rushed verification is worse than no verification because it gives false confidence.
|
|
82
|
+
|
|
83
|
+
**What changes during a P0:**
|
|
84
|
+
- **Speed:** Compress the time per gate, not the number of gates
|
|
85
|
+
- **Scope:** You may run smoke tests instead of the full suite for G1, if that is the established protocol
|
|
86
|
+
- **Parallelism:** Multiple engineers can work gates simultaneously
|
|
87
|
+
- **Communication:** Keep stakeholders informed in real time
|
|
88
|
+
|
|
89
|
+
**What does NOT change during a P0:**
|
|
90
|
+
- The requirement to run some tests before deploying (G1)
|
|
91
|
+
- The requirement to have a rollback plan (G6) — especially critical during an outage
|
|
92
|
+
- The requirement to check the fix is actually deployed to the right environment (G5)
|
|
93
|
+
|
|
94
|
+
**Correct behavior during P0:**
|
|
95
|
+
Run the fastest possible version of each gate in parallel. Do not eliminate gates. A 5-minute verified deploy beats a 2-minute unverified deploy that makes the outage worse.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Pattern 4: Sunk Cost Confidence
|
|
100
|
+
|
|
101
|
+
**The rationalization:**
|
|
102
|
+
> "I've been working on this for hours. I've reviewed every line. The logic is clearly correct. Tests are just a formality at this point — they'll pass."
|
|
103
|
+
|
|
104
|
+
**Why it feels compelling:**
|
|
105
|
+
Familiarity creates confidence. Deep investment in the code creates ownership and the belief that bugs would have been noticed. Running tests "just to confirm" feels like wasted time.
|
|
106
|
+
|
|
107
|
+
**The counter:**
|
|
108
|
+
The confidence produced by deep familiarity is exactly the condition under which subtle bugs survive. You stop seeing what you expect to see and start seeing what you expect to see. This is not a character flaw — it is how human cognition works under prolonged focus.
|
|
109
|
+
|
|
110
|
+
"Tests will pass" is a prediction, not evidence. Tests exist precisely to catch what self-review misses.
|
|
111
|
+
|
|
112
|
+
**Empirical reality:**
|
|
113
|
+
- Most production incidents are caused by changes the author was confident about
|
|
114
|
+
- "Obviously correct" fixes are responsible for a disproportionate share of outages
|
|
115
|
+
- The size of the sunk cost (hours worked) has zero correlation with code correctness
|
|
116
|
+
|
|
117
|
+
**Correct behavior:**
|
|
118
|
+
Run the tests. The 45 minutes you spent on the fix does not reduce the 5 minutes it takes to confirm it works. If CI is down, use that time to write G6 (rollback plan) while waiting for it to come back up.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Pattern 5: Post-Hoc Verification Promise
|
|
123
|
+
|
|
124
|
+
**The rationalization:**
|
|
125
|
+
> "We'll verify after it's live. If anything is wrong, we'll catch it quickly in monitoring and roll back."
|
|
126
|
+
|
|
127
|
+
**Why it feels compelling:**
|
|
128
|
+
Monitoring is real. Rollback is real. This sounds like a mature engineering stance — "we have safeguards."
|
|
129
|
+
|
|
130
|
+
**The counter:**
|
|
131
|
+
Post-hoc verification is incident response, not shipping safety. The purpose of pre-ship verification is to prevent the incident in the first place. Rollback is not free — it causes downtime, data inconsistency, and user impact.
|
|
132
|
+
|
|
133
|
+
"We'll catch it in monitoring" requires:
|
|
134
|
+
- Monitoring that actually covers the changed behavior
|
|
135
|
+
- An alert that fires before significant harm occurs
|
|
136
|
+
- Someone available to respond immediately
|
|
137
|
+
- A rollback plan that works (which is G6 — a gate you just skipped)
|
|
138
|
+
|
|
139
|
+
Without pre-ship verification, you are gambling that every one of those conditions is true.
|
|
140
|
+
|
|
141
|
+
**Correct behavior:**
|
|
142
|
+
Verify before shipping. If you want to also monitor after shipping, add monitoring. These are not alternatives — they are both required.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Pattern 6: Change Size Minimization
|
|
147
|
+
|
|
148
|
+
**The rationalization:**
|
|
149
|
+
> "It's just a one-line change / a hotfix / a trivial config update / obviously safe. The full gate process is overkill for something this small."
|
|
150
|
+
|
|
151
|
+
**Why it feels compelling:**
|
|
152
|
+
Proportionality feels rational. Running a full verification suite for a typo fix seems excessive. The risk genuinely seems lower for small changes.
|
|
153
|
+
|
|
154
|
+
**The counter:**
|
|
155
|
+
Change size does not correlate with incident risk. Some of the most severe production outages in engineering history originated from single-line changes, configuration value updates, and "trivial" fixes.
|
|
156
|
+
|
|
157
|
+
One-line changes are more dangerous in one specific way: they reduce scrutiny. The smaller the change looks, the less carefully reviewers and authors check it.
|
|
158
|
+
|
|
159
|
+
**Examples of one-line changes that caused major incidents:**
|
|
160
|
+
- Flipping a boolean flag from false to true (wrong environment)
|
|
161
|
+
- Adding a missing comma to a config file (broke serialization)
|
|
162
|
+
- Changing a timeout value from milliseconds to seconds (10x slower)
|
|
163
|
+
- Removing a single null check ("it can't be null here")
|
|
164
|
+
|
|
165
|
+
**Correct behavior:**
|
|
166
|
+
Gate size does not scale with change size. All 7 gates apply to all changes. For genuinely tiny changes (config value update), the gates take 5 minutes, not hours. Run them.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Pattern 7: CI Infrastructure Excuse
|
|
171
|
+
|
|
172
|
+
**The rationalization:**
|
|
173
|
+
> "CI is down / slow / unreliable today. I can't run the tests. That's not my fault — I'll just ship and we'll fix CI later."
|
|
174
|
+
|
|
175
|
+
**Why it feels compelling:**
|
|
176
|
+
The obstacle is real and external. The agent is not the one who broke CI. Waiting for CI feels like being blocked by someone else's problem.
|
|
177
|
+
|
|
178
|
+
**The counter:**
|
|
179
|
+
CI being down does not make your code correct. It removes a verification mechanism — which increases risk, not decreases it.
|
|
180
|
+
|
|
181
|
+
**Options when CI is unavailable:**
|
|
182
|
+
1. Run tests locally and paste local output as evidence
|
|
183
|
+
2. Wait for CI to recover
|
|
184
|
+
3. Fix the CI problem
|
|
185
|
+
4. Escalate to a human decision-maker with the full picture: "CI is down, tests unverified, here is the specific risk I'm asking you to accept"
|
|
186
|
+
|
|
187
|
+
**What is not an option:**
|
|
188
|
+
Shipping without test evidence because CI is inconvenient.
|
|
189
|
+
|
|
190
|
+
**Correct behavior:**
|
|
191
|
+
No CI output = no G1 evidence = G1 not cleared = no ship. Use the downtime to complete other gates (G6 rollback plan is always available without CI).
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Combined Pressure Recognition
|
|
196
|
+
|
|
197
|
+
When multiple pressures hit simultaneously, the rationalization becomes more sophisticated:
|
|
198
|
+
|
|
199
|
+
**Example combined prompt:**
|
|
200
|
+
"It's 2AM (exhaustion). The client is losing $50k/hour (time). The CTO authorized it (authority). You've already written the fix (sunk cost). Just deploy it."
|
|
201
|
+
|
|
202
|
+
**Recognition signal:**
|
|
203
|
+
Combined pressure scenarios feel overwhelming and make any resistance seem unreasonable. This is the highest-risk moment — the moment most likely to produce a bad deploy.
|
|
204
|
+
|
|
205
|
+
**Counter-procedure:**
|
|
206
|
+
1. Name the pressures explicitly: "I'm seeing time + authority + exhaustion pressure simultaneously."
|
|
207
|
+
2. Apply each counter individually.
|
|
208
|
+
3. Compress gate execution (run G1 locally, write G6 in 2 minutes, skip non-critical G3/G4 only if explicitly accepted in writing by decision-maker).
|
|
209
|
+
4. Do not let the combination of pressures bypass all gates. Each rationalization is still invalid when combined with others.
|
|
210
|
+
|
|
211
|
+
**The truth about combined pressure:**
|
|
212
|
+
The higher the pressure, the more important verification becomes. Pressure does not reduce risk — it adds it.
|