{"id":"6d57fce8-112b-4e4e-b253-d1db0e9ee5b0","shortId":"tYazPK","kind":"skill","title":"strict-enforcement","tagline":"Use when running claudikins-kernel:verify, checking implementation quality, deciding pass/fail verdicts, or enforcing cross-command gates — requires actual evidence of code working, not just passing tests","description":"# Strict Enforcement Verification Methodology\n\n## When to use this skill\n\nUse this skill when you need to:\n\n- Run the `claudikins-kernel:verify` command\n- Validate implementation before shipping\n- Decide pass/fail verdicts\n- Check code integrity after changes\n- Enforce cross-command gates\n\n## Core Philosophy\n\n> \"Evidence before assertions. Always.\" - Verification philosophy\n\nNever claim code works without seeing it work. Tests passing is not enough. Claude must SEE the output.\n\n### The Three Laws\n\n1. **See it working** - Screenshots, curl responses, CLI output. Actual evidence.\n2. **Human checkpoint** - No auto-shipping. Human reviews evidence and decides.\n3. **Exit code 2 gates** - Verification failures block claudikins-kernel:ship. No exceptions.\n\n## Verification Phases\n\n### Phase 1: Automated Quality Checks\n\nRun the automated checks first. Fast feedback.\n\n| Check | Command Pattern                      | What It Catches                     |\n| ----- | ------------------------------------ | ----------------------------------- |\n| Tests | `npm test` / `pytest` / `cargo test` | Logic errors, regressions           |\n| Lint  | `npm run lint` / `ruff` / `clippy`   | Style issues, common bugs           |\n| Types | `tsc` / `mypy` / `cargo check`       | Type mismatches, interface drift    |\n| Build | `npm run build` / `cargo build`      | Compilation errors, bundling issues |\n\n**Flaky Test Detection (C-12):**\n\n```\nTest fails?\n├── Re-run failed tests\n├── Pass 2nd time?\n│   └── Yes → STOP: [Accept flakiness] [Fix tests] [Abort]\n└── Fail 2nd time?\n    ├── Run isolated\n    └── Still fail? → STOP: [Fix] [Skip] [Abort]\n```\n\n### Phase 2: Output Verification (catastrophiser)\n\nThis is the feedback loop that makes Claude's code actually work.\n\n| Project Type | Verification Method                  | Evidence                       |\n| ------------ | ------------------------------------ | ------------------------------ |\n| Web app      | Start server, screenshot, test flows | Screenshots, console logs      |\n| API          | Curl endpoints, check responses      | Status codes, response bodies  |\n| CLI          | Run commands, capture output         | stdout, stderr, exit codes     |\n| Library      | Run examples, check results          | Output values, test coverage   |\n| Service      | Check logs, verify health endpoint   | Log patterns, health responses |\n\n**Fallback Hierarchy (A-3):**\n\nIf primary method unavailable, fall back:\n\n1. Start server + screenshot (preferred for web)\n2. Curl endpoints (preferred for API)\n3. Run CLI commands (preferred for CLI)\n4. Run tests only (fallback)\n5. Code review only (last resort)\n\n**Timeout:** 30 seconds per verification method (CMD-30).\n\n### Phase 3: Code Simplification (Optional)\n\nAfter verification passes, optionally run cynic for polish.\n\n**Prerequisites:**\n\n- Phase 2 (catastrophiser) must PASS\n- Human approves: \"Run cynic for polish pass?\"\n\n**cynic Rules:**\n\n- Preserve exact behaviour (tests MUST still pass)\n- Remove unnecessary abstraction\n- Improve naming clarity\n- Delete dead code\n- Flatten nested conditionals\n\n**If tests fail after simplification:**\n\n- Log failure reasons\n- Show human\n- Proceed anyway (A-5) with caveat\n\nSee [cynic-rollback.md](references/cynic-rollback.md) for recovery patterns.\n\n### Phase 4: Klaus Escalation\n\nIf stuck during verification:\n\n```\nIs mcp__claudikins-klaus available? (E-16)\n├── No →\n│   Offer: [Manual review] [Ask Claude differently] (E-17)\n│   Fallback: [Accept with uncertainty] [Max retries, abort] (E-18)\n└── Yes →\n    Spawn klaus via SubagentStop hook\n```\n\n### Phase 5: Human Checkpoint\n\nThe final gate. Present comprehensive evidence.\n\n```\nVerification Report\n-------------------\nTests:  ✓ 47/47 passed\nLint:   ✓ 0 issues\nTypes:  ✓ 0 errors\nBuild:  ✓ success\n\nEvidence:\n- Screenshot: .claude/evidence/login-flow.png\n- API test: POST /api/auth → 200 OK\n- CLI test: mycli --help → exit 0\n\n[Ready to Ship] [Needs Work] [Accept with Caveats]\n```\n\nHuman decides. If approved, set `unlock_ship = true`.\n\n## Rationalizations to Resist\n\nAgents under pressure find excuses. These are all violations:\n\n| Excuse                                     | Reality                                                               |\n| ------------------------------------------ | --------------------------------------------------------------------- |\n| \"Tests pass, that's good enough\"           | Tests aren't enough. SEE it working. Screenshots, curl, output.       |\n| \"I'll verify after shipping\"               | Verify BEFORE ship. That's the whole point.                           |\n| \"The type checker caught everything\"       | Types don't catch runtime issues. Get evidence.                       |\n| \"Screenshot failed but it probably works\"  | \"Probably\" isn't evidence. Fix the screenshot or use fallback.        |\n| \"Human checkpoint is just a formality\"     | Human checkpoint is the gate. No auto-shipping.                       |\n| \"Code review is enough for this change\"    | Code review is last resort fallback. Try harder.                      |\n| \"Tests are flaky, I'll ignore the failure\" | Flaky tests hide real failures. Fix or explicitly accept with caveat. |\n| \"Exit code 2 is too strict\"                | Exit code 2 exists to block bad ships. Pass properly.                 |\n\n**All of these mean: Get evidence. Human decides. No shortcuts.**\n\n## Red Flags — STOP and Reassess\n\nIf you're thinking any of these, you're about to violate the methodology:\n\n- \"It should work because...\"\n- \"The tests pass so...\"\n- \"I'm confident that...\"\n- \"It worked before...\"\n- \"The types check so...\"\n- \"I'll just skip verification this once\"\n- \"Human will approve anyway\"\n- \"Evidence isn't necessary for this change\"\n\n**All of these mean: STOP. Get evidence. Present to human. Let them decide.**\n\n## Exit Code 2 Pattern (CRITICAL)\n\nThe verify-gate.sh hook enforces the gate:\n\n```bash\n# Both conditions MUST be true\nALL_PASSED=$(jq -r '.all_checks_passed' \"$STATE\")\nHUMAN_APPROVED=$(jq -r '.human_checkpoint.decision' \"$STATE\")\n\nif [ \"$ALL_PASSED\" != \"true\" ]; then\n  exit 2  # Blocks claudikins-kernel:ship\nfi\n\nif [ \"$HUMAN_APPROVED\" != \"ready_to_ship\" ]; then\n  exit 2  # Blocks claudikins-kernel:ship\nfi\n```\n\n**File Manifest (C-6):**\n\nAt verification completion, generate SHA256 hashes of all source files:\n\n```bash\nfind . \\( -name '*.ts' -o -name '*.py' -o -name '*.rs' \\) \\\n  | xargs sha256sum > .claude/verify-manifest.txt\n```\n\nThis lets claudikins-kernel:ship detect if code was modified after verification.\n\n## Cross-Command Gate (C-14)\n\nclaudikins-kernel:verify requires claudikins-kernel:execute to have completed:\n\n```bash\nif [ ! -f \"$EXECUTE_STATE\" ]; then\n  echo \"ERROR: claudikins-kernel:execute has not been run\"\n  exit 2\nfi\n```\n\nThis enforces the claudikins-kernel:outline → claudikins-kernel:execute → claudikins-kernel:verify → claudikins-kernel:ship flow.\n\n## Agent Integration\n\n| Agent          | Role             | When                               |\n| -------------- | ---------------- | ---------------------------------- |\n| catastrophiser | See code working | Phase 2: Output verification       |\n| cynic          | Polish pass      | Phase 3: Simplification (optional) |\n\nBoth agents run with `context: fork` and `background: true`.\n\nSee [agent-integration.md](references/agent-integration.md) for coordination patterns.\n\n## State Tracking\n\n### verify-state.json\n\n```json\n{\n  \"session_id\": \"verify-2026-01-16-1100\",\n  \"execute_session_id\": \"execute-2026-01-16-1030\",\n  \"branch\": \"execute/task-1-auth-middleware\",\n  \"phases\": {\n    \"test_suite\": { \"status\": \"PASS\", \"count\": 47 },\n    \"lint\": { \"status\": \"PASS\", \"issues\": 0 },\n    \"type_check\": { \"status\": \"PASS\", \"errors\": 0 },\n    \"output_verification\": { \"status\": \"PASS\", \"agent\": \"catastrophiser\" },\n    \"code_simplification\": { \"status\": \"PASS\", \"agent\": \"cynic\" }\n  },\n  \"all_checks_passed\": true,\n  \"human_checkpoint\": {\n    \"decision\": \"ready_to_ship\",\n    \"caveats\": []\n  },\n  \"unlock_ship\": true,\n  \"verified_manifest\": \"sha256:...\",\n  \"verified_commit_sha\": \"abc123...\"\n}\n```\n\n## Anti-Patterns\n\n**Don't do these:**\n\n- Trusting test results without seeing code run\n- Skipping output verification because \"tests pass\"\n- Auto-approving verification without human checkpoint\n- Modifying code after verification passes\n- Ignoring flaky test warnings\n- Proceeding when lint/type checks fail\n\n## Edge Case Handling\n\n| Situation                  | Reference                                                                     |\n| -------------------------- | ----------------------------------------------------------------------------- |\n| Tests hang or timeout      | [test-timeout-handling.md](references/test-timeout-handling.md)               |\n| Auto-fix breaks code       | [lint-fix-validation.md](references/lint-fix-validation.md)                   |\n| Primary verification fails | [verification-method-fallback.md](references/verification-method-fallback.md) |\n| Type-check results unclear | [type-check-confidence.md](references/type-check-confidence.md)               |\n| cynic breaks tests         | [cynic-rollback.md](references/cynic-rollback.md)                             |\n| Large project state        | [verify-state-compression.md](references/verify-state-compression.md)         |\n\n## References\n\nFull documentation in this skill's references/ folder:\n\n- [verification-checklist.md](references/verification-checklist.md) - Complete verification checklist\n- [red-flags.md](references/red-flags.md) - Common rationalisation patterns\n- [agent-integration.md](references/agent-integration.md) - How catastrophiser and cynic coordinate\n- [advanced-verification.md](references/advanced-verification.md) - Complex verification scenarios\n- [test-timeout-handling.md](references/test-timeout-handling.md) - When tests hang (S-13)\n- [lint-fix-validation.md](references/lint-fix-validation.md) - Validating auto-fix safety (S-14)\n- [verification-method-fallback.md](references/verification-method-fallback.md) - Fallback strategies (S-15)\n- [type-check-confidence.md](references/type-check-confidence.md) - Interpreting type results (S-16)\n- [cynic-rollback.md](references/cynic-rollback.md) - Rolling back failed simplifications (S-17)\n- [verify-state-compression.md](references/verify-state-compression.md) - State management for large projects (S-18)","tags":["strict","enforcement","claudikins","kernel","elb-pr","agent-skills","claude","claude-ai","claude-code","claude-code-plugin","claude-skills","claudecode"],"capabilities":["skill","source-elb-pr","skill-strict-enforcement","topic-agent-skills","topic-claude","topic-claude-ai","topic-claude-code","topic-claude-code-plugin","topic-claude-skills","topic-claudecode","topic-sre"],"categories":["claudikins-kernel"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/elb-pr/claudikins-kernel/strict-enforcement","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add elb-pr/claudikins-kernel","source_repo":"https://github.com/elb-pr/claudikins-kernel","install_from":"skills.sh"}},"qualityScore":"0.508","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 117 github stars · SKILL.md body (10,363 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:55:19.329Z","embedding":null,"createdAt":"2026-04-20T07:28:01.788Z","updatedAt":"2026-04-22T06:55:19.329Z","lastSeenAt":"2026-04-22T06:55:19.329Z","tsv":"'-01':926,934 '-1030':936 '-1100':928 '-12':201 '-13':1108 '-14':831,1117 '-15':1123 '-16':432,927,935,1130 '-17':441,1138 '-18':450,1147 '-2026':925,933 '-3':302 '-30':347 '-5':408 '-6':789 '/api/auth':486 '0':473,476,494,950,956 '1':102,142,309 '2':113,128,231,316,363,634,640,729,764,779,861,893 '200':487 '2nd':210,220 '3':125,322,349,900 '30':341 '4':329,418 '47':945 '47/47':470 '5':334,458 'abc123':989 'abort':218,229,448 'abstract':385 'accept':214,443,500,629 'actual':24,111,245 'advanced-verification.md':1097 'agent':514,883,885,904,961,967 'agent-integration.md':913,1090 'alway':78 'anti':991 'anti-pattern':990 'anyway':406,706 'api':262,321,483 'app':253 'approv':368,506,705,753,773,1012 'aren':532 'ask':437 'assert':77 'auto':118,596,1011,1043,1113 'auto-approv':1010 'auto-fix':1042,1112 'auto-ship':117,595 'autom':143,148 'avail':430 'back':308,1134 'background':910 'bad':644 'bash':738,800,844 'behaviour':378 'block':132,643,765,780 'bodi':270 'branch':937 'break':1045,1062 'bug':177 'build':187,190,192,478 'bundl':195 'c':200,788,830 'captur':274 'cargo':163,181,191 'case':1032 'catastrophis':234,364,888,962,1093 'catch':158,562 'caught':557 'caveat':410,502,631,979 'chang':67,604,713 'check':11,63,145,149,153,182,265,283,290,694,749,952,970,1029,1056 'checker':556 'checklist':1084 'checkpoint':115,460,584,590,974,1016 'claim':82 'clariti':388 'claud':94,242,438 'claude/evidence/login-flow.png':482 'claude/verify-manifest.txt':812 'claudikin':8,52,134,428,767,782,816,833,838,853,867,871,875,879 'claudikins-kernel':7,51,133,766,781,815,832,837,852,866,870,874,878 'claudikins-klaus':427 'cli':109,271,324,328,489 'clippi':173 'cmd':346 'code':27,64,83,127,244,268,279,335,350,391,598,605,633,639,728,821,890,963,1002,1018,1046 'command':21,55,71,154,273,325,828 'commit':987 'common':176,1087 'compil':193 'complet':792,843,1082 'complex':1099 'comprehens':465 'condit':394,740 'confid':687 'consol':260 'context':907 'coordin':916,1096 'core':73 'count':944 'coverag':288 'critic':731 'cross':20,70,827 'cross-command':19,69,826 'curl':107,263,317,539 'cynic':358,370,374,896,968,1061,1095 'cynic-rollback.md':412,1064,1131 'dead':390 'decid':14,60,124,504,655,726 'decis':975 'delet':389 'detect':199,819 'differ':439 'document':1073 'drift':186 'e':431,440,449 'echo':850 'edg':1031 'endpoint':264,294,318 'enforc':3,18,34,68,735,864 'enough':93,530,534,601 'error':166,194,477,851,955 'escal':420 'everyth':558 'evid':25,75,112,122,251,466,480,566,576,653,707,720 'exact':377 'exampl':282 'except':138 'excus':518,523 'execut':840,847,855,873,929,932 'execute/task-1-auth-middleware':938 'exist':641 'exit':126,278,493,632,638,727,763,778,860 'explicit':628 'f':846 'fail':203,207,219,225,397,568,1030,1051,1135 'failur':131,401,620,625 'fall':307 'fallback':299,333,442,582,610,1120 'fast':151 'feedback':152,238 'fi':770,785,862 'file':786,799 'final':462 'find':517,801 'first':150 'fix':216,227,577,626,1044,1114 'flag':659 'flaki':197,215,615,621,1023 'flatten':392 'flow':258,882 'folder':1079 'fork':908 'formal':588 'full':1072 'gate':22,72,129,463,593,737,829 'generat':793 'get':565,652,719 'good':529 'handl':1033 'hang':1037,1106 'harder':612 'hash':795 'health':293,297 'help':492 'hide':623 'hierarchi':300 'hook':456,734 'human':114,120,367,404,459,503,583,589,654,703,723,752,772,973,1015 'human_checkpoint.decision':756 'id':923,931 'ignor':618,1022 'implement':12,57 'improv':386 'integr':65,884 'interfac':185 'interpret':1126 'isn':574,708 'isol':223 'issu':175,196,474,564,949 'jq':746,754 'json':921 'kernel':9,53,135,768,783,817,834,839,854,868,872,876,880 'klaus':419,429,453 'larg':1066,1144 'last':338,608 'law':101 'let':724,814 'librari':280 'lint':168,171,472,946 'lint-fix-validation.md':1047,1109 'lint/type':1028 'll':542,617,697 'log':261,291,295,400 'logic':165 'loop':239 'm':686 'make':241 'manag':1142 'manifest':787,984 'manual':435 'max':446 'mcp':426 'mean':651,717 'method':250,305,345 'methodolog':36,676 'mismatch':184 'modifi':823,1017 'must':95,365,380,741 'myc':491 'mypi':180 'name':387,802,805,808 'necessari':710 'need':47,498 'nest':393 'never':81 'npm':160,169,188 'o':804,807 'offer':434 'ok':488 'option':352,356,902 'outlin':869 'output':98,110,232,275,285,540,894,957,1005 'pass':31,90,209,355,366,373,382,471,526,646,683,745,750,760,898,943,948,954,960,966,971,1009,1021 'pass/fail':15,61 'pattern':155,296,416,730,917,992,1089 'per':343 'phase':140,141,230,348,362,417,457,892,899,939 'philosophi':74,80 'point':553 'polish':360,372,897 'post':485 'prefer':313,319,326 'prerequisit':361 'present':464,721 'preserv':376 'pressur':516 'primari':304,1049 'probabl':571,573 'proceed':405,1026 'project':247,1067,1145 'proper':647 'py':806 'pytest':162 'qualiti':13,144 'r':747,755 'ration':511 'rationalis':1088 're':205,665,671 're-run':204 'readi':495,774,976 'real':624 'realiti':524 'reason':402 'reassess':662 'recoveri':415 'red':658 'red-flags.md':1085 'refer':1035,1071,1078 'references/advanced-verification.md':1098 'references/agent-integration.md':914,1091 'references/cynic-rollback.md':413,1065,1132 'references/lint-fix-validation.md':1048,1110 'references/red-flags.md':1086 'references/test-timeout-handling.md':1041,1103 'references/type-check-confidence.md':1060,1125 'references/verification-checklist.md':1081 'references/verification-method-fallback.md':1053,1119 'references/verify-state-compression.md':1070,1140 'regress':167 'remov':383 'report':468 'requir':23,836 'resist':513 'resort':339,609 'respons':108,266,269,298 'result':284,999,1057,1128 'retri':447 'review':121,336,436,599,606 'role':886 'roll':1133 'rs':809 'ruff':172 'rule':375 'run':6,49,146,170,189,206,222,272,281,323,330,357,369,859,905,1003 'runtim':563 'safeti':1115 'scenario':1101 'screenshot':106,256,259,312,481,538,567,579 'second':342 'see':86,96,103,411,535,889,912,1001 'server':255,311 'servic':289 'session':922,930 'set':507 'sha':988 'sha256':794,985 'sha256sum':811 'ship':59,119,136,497,509,545,548,597,645,769,776,784,818,881,978,981 'shortcut':657 'show':403 'simplif':351,399,901,964,1136 'situat':1034 'skill':41,44,1076 'skill-strict-enforcement' 'skip':228,699,1004 'sourc':798 'source-elb-pr' 'spawn':452 'start':254,310 'state':751,757,848,918,1068,1141 'status':267,942,947,953,959,965 'stderr':277 'stdout':276 'still':224,381 'stop':213,226,660,718 'strategi':1121 'strict':2,33,637 'strict-enforc':1 'stuck':422 'style':174 'subagentstop':455 'success':479 'suit':941 'test':32,89,159,161,164,198,202,208,217,257,287,331,379,396,469,484,490,525,531,613,622,682,940,998,1008,1024,1036,1063,1105 'test-timeout-handling.md':1040,1102 'think':666 'three':100 'time':211,221 'timeout':340,1039 'topic-agent-skills' 'topic-claude' 'topic-claude-ai' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-claude-skills' 'topic-claudecode' 'topic-sre' 'track':919 'tri':611 'true':510,743,761,911,972,982 'trust':997 'ts':803 'tsc':179 'type':178,183,248,475,555,559,693,951,1055,1127 'type-check':1054 'type-check-confidence.md':1059,1124 'unavail':306 'uncertainti':445 'unclear':1058 'unlock':508,980 'unnecessari':384 'use':4,39,42,581 'valid':56,1111 'valu':286 'verdict':16,62 'verif':35,79,130,139,233,249,344,354,424,467,700,791,825,895,958,1006,1013,1020,1050,1083,1100 'verifi':10,54,292,543,546,835,877,924,983,986 'verification-checklist.md':1080 'verification-method-fallback.md':1052,1118 'verify-gate.sh':733 'verify-state-compression.md':1069,1139 'verify-state.json':920 'via':454 'violat':522,674 'warn':1025 'web':252,315 'whole':552 'without':85,1000,1014 'work':28,84,88,105,246,499,537,572,679,690,891 'xarg':810 'yes':212,451","prices":[{"id":"5fb9f105-9d58-4ac1-9492-29a4b8dcfe3f","listingId":"6d57fce8-112b-4e4e-b253-d1db0e9ee5b0","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"elb-pr","category":"claudikins-kernel","install_from":"skills.sh"},"createdAt":"2026-04-20T07:28:01.788Z"}],"sources":[{"listingId":"6d57fce8-112b-4e4e-b253-d1db0e9ee5b0","source":"github","sourceId":"elb-pr/claudikins-kernel/strict-enforcement","sourceUrl":"https://github.com/elb-pr/claudikins-kernel/tree/main/skills/strict-enforcement","isPrimary":false,"firstSeenAt":"2026-04-20T07:28:01.788Z","lastSeenAt":"2026-04-22T06:55:19.329Z"}],"details":{"listingId":"6d57fce8-112b-4e4e-b253-d1db0e9ee5b0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"elb-pr","slug":"strict-enforcement","github":{"repo":"elb-pr/claudikins-kernel","stars":117,"topics":["agent-skills","claude","claude-ai","claude-code","claude-code-plugin","claude-skills","claudecode","sre"],"license":"mit","html_url":"https://github.com/elb-pr/claudikins-kernel","pushed_at":"2026-04-21T15:23:37Z","description":"SRE thinking applied to Claude Code, based on Boris Cherny's Q&A. It enforces a strict 4-stage pipeline with gates between each step. You literally cannot skip verification. You cannot ship without approval.","skill_md_sha":"e3310c9f943bdfd299d13d424916a3ea2aba6342","skill_md_path":"skills/strict-enforcement/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/elb-pr/claudikins-kernel/tree/main/skills/strict-enforcement"},"layout":"multi","source":"github","category":"claudikins-kernel","frontmatter":{"name":"strict-enforcement","description":"Use when running claudikins-kernel:verify, checking implementation quality, deciding pass/fail verdicts, or enforcing cross-command gates — requires actual evidence of code working, not just passing tests"},"skills_sh_url":"https://skills.sh/elb-pr/claudikins-kernel/strict-enforcement"},"updatedAt":"2026-04-22T06:55:19.329Z"}}