{"id":"d840c19d-f1be-4425-8dbd-a30b993586f9","shortId":"ZDL9kj","kind":"skill","title":"shipping-methodology","tagline":"Use when running claudikins-kernel:ship, preparing PRs, writing changelogs, deciding merge strategy, or handling CI failures — enforces GRFP-style iterative approval, code integrity validation, and human-gated merges","description":"# Shipping Methodology\n\n## When to use this skill\n\nUse this skill when you need to:\n\n- Run the `claudikins-kernel:ship` command\n- Prepare commit messages and PR descriptions\n- Update changelogs and documentation\n- Decide merge strategy (squash vs preserve)\n- Handle CI failures or merge conflicts\n- Validate code integrity before shipping\n\n## Core Philosophy\n\n> \"Ship with confidence, not hope.\" - Shipping philosophy\n\nShipping is the final gate. Apply GRFP-style iterative workflow to every stage.\n\n### The Five Principles\n\n1. **Gate check first** - claudikins-kernel:verify must have passed. No exceptions.\n2. **Code integrity** - Ship exactly what was verified. No sneaky changes.\n3. **GRFP everywhere** - Section-by-section approval at every stage.\n4. **Human decides** - No auto-merging. Human approves final merge.\n5. **Clean up after** - Delete branches, update docs, celebrate.\n\n## The Five Stages\n\n### Stage 1: Pre-Ship Review\n\nShow what's being shipped. Human confirms ready.\n\n| Check               | What to Show                                    |\n| ------------------- | ----------------------------------------------- |\n| Verification status | All phases PASS from claudikins-kernel:verify   |\n| Branches to merge   | List all execute/task-\\* branches               |\n| Evidence summary    | Screenshots, curl responses from catastrophiser |\n| Code delta          | Lines added/removed, files changed              |\n\n**Checkpoint:**\n\n```\nReady to ship?\n\nVerified: ✓ All checks passed\nBranches: 3 branches to merge\nChanges: +450 / -120 lines\n\n[Continue] [Back to Verify] [Abort]\n```\n\n### Stage 2: Commit Strategy\n\nDraft commit message(s). Human approves.\n\n**Decision:**\n\n```\nHow should we commit?\n\n[Squash into single commit] [Preserve commit history]\n```\n\n**Squash (recommended for features):**\n\n- Single clean commit on main\n- Clear feature boundary\n- Easier to revert if needed\n\n**Preserve (for large multi-part work):**\n\n- Keeps granular history\n- Better for debugging\n- Use for multi-feature batches\n\n**Checkpoint:**\n\n```\nCommit message:\n\nfeat(auth): Add authentication middleware\n\n- JWT token validation\n- Role-based access control\n- Session management\n\nCloses #42\n\n[Accept] [Revise] [Back]\n```\n\n### Stage 3: Documentation (git-perfectionist)\n\nUpdate README, CHANGELOG, version. GRFP-style.\n\n**git-perfectionist uses github-readme plugin:**\n\n1. Deep-dive on current docs\n2. Identify gaps from changes\n3. Pen-wielding for updates\n4. Section-by-section approval\n\n**Files to update:**\n\n| File                                       | What to Update                           |\n| ------------------------------------------ | ---------------------------------------- |\n| README.md                                  | Features, usage, installation if changed |\n| CHANGELOG.md                               | Add entry in Keep a Changelog format     |\n| package.json / Cargo.toml / pyproject.toml | Version bump if needed                   |\n\n**Checkpoint:**\n\n```\nDocumentation updates:\n\nREADME.md:\n- Added: Authentication section\n- Updated: Installation (new deps)\n\nCHANGELOG.md:\n- Added: v1.2.0 entry\n\nVersion: 1.1.0 → 1.2.0 (minor)\n\n[Accept] [Revise] [Skip]\n```\n\n### Stage 4: PR Creation\n\nDraft PR title and body. Section-by-section approval.\n\n**PR Title Pattern:**\n\n```\nfeat(scope): Short description\n```\n\n**PR Body Structure:**\n\n```markdown\n## Summary\n\n[2-3 bullet points of what changed]\n\n## Changes\n\n[Detailed breakdown]\n\n## Testing\n\n[How it was verified]\n\n## Screenshots\n\n[If applicable]\n```\n\n**Checkpoint:**\n\n```\nPR ready to create:\n\nTitle: feat(auth): Add authentication middleware\n\nBody:\n## Summary\n- Added JWT token validation\n- Implemented role-based access control\n...\n\n[Create PR] [Revise] [Back]\n```\n\n### Stage 5: Final Merge\n\nCI passes. Human approves. Merge and cleanup.\n\n**CI Status Check:**\n\n```\nCI Status: ⏳ Running...\n\n[Wait for CI] [View logs] [Merge anyway]\n```\n\n**On CI pass:**\n\n```\nCI Status: ✓ All checks passed\n\nReady to merge PR #42 to main?\n\n[Merge] [Request review first] [Cancel]\n```\n\n**After merge:**\n\n- Delete feature branches (unless --no-delete-branch)\n- Update ship-state.json\n- Celebrate\n\n**Final output:**\n\n```\nDone! Shipped to main.\n\nPR #42 merged ✓\nBranches cleaned up ✓\nVersion: 1.1.0 → 1.2.0\n\nNice work!\n```\n\n## Rationalizations to Resist\n\nAgents under pressure find excuses. These are all violations:\n\n| Excuse                                      | Reality                                                                  |\n| ------------------------------------------- | ------------------------------------------------------------------------ |\n| \"Verify passed yesterday, close enough\"     | Stale verification = no verification. Re-run claudikins-kernel:verify.   |\n| \"Just a tiny fix after verify, no big deal\" | Any change after verify invalidates it. Re-run claudikins-kernel:verify. |\n| \"CI is flaky, I'll merge anyway\"            | Flaky CI hides real failures. Fix or explicitly skip with caveat.        |\n| \"It's just a typo, skip the PR\"             | All changes go through PR. No exceptions.                                |\n| \"Both reviewers passed, auto-merge is fine\" | Human approves final merge. Always.                                      |\n| \"I'll update the changelog later\"           | Changelog is part of shipping. Do it now.                                |\n| \"Force push is fine, it's my branch\"        | Never force push to protected branches. Ever.                            |\n| \"Skip docs, nobody reads them\"              | Docs are part of shipping. GRFP them.                                    |\n| \"The gate check is too strict\"              | The gate exists for a reason. Pass it properly.                          |\n\n**All of these mean: Follow the methodology. Shortcuts create incidents.**\n\n## Red Flags — STOP and Reassess\n\nIf you're thinking any of these, you're about to violate the methodology:\n\n- \"Let me just push this one change...\"\n- \"Verify is probably still valid\"\n- \"CI will pass next time\"\n- \"I'll do the PR properly next time\"\n- \"Auto-merge saves time\"\n- \"Docs can wait\"\n- \"Force push will fix it\"\n- \"The human already approved something similar\"\n\n**All of these mean: STOP. Gate check exists. Human decides. Follow the stages.**\n\n## Gate Check Pattern (CRITICAL)\n\nThe ship-init.sh hook enforces the claudikins-kernel:verify gate with code integrity validation.\n\n### Required Checks\n\n```bash\n# 1. Verify state exists\nif [ ! -f \"$VERIFY_STATE\" ]; then\n  echo \"ERROR: claudikins-kernel:verify has not been run\"\n  exit 2\nfi\n\n# 2. Unlock flag is set\nUNLOCK=$(jq -r '.unlock_ship // false' \"$VERIFY_STATE\")\nif [ \"$UNLOCK\" != \"true\" ]; then\n  echo \"ERROR: claudikins-kernel:verify did not pass or was not approved\"\n  exit 2\nfi\n```\n\n### Code Integrity (C-5, C-7)\n\nEnsure we ship exactly what was verified:\n\n```bash\n# C-5: Commit hash validation\nVERIFY_COMMIT=$(jq -r '.verified_commit_sha' \"$VERIFY_STATE\")\nCURRENT_COMMIT=$(git rev-parse HEAD)\nif [ \"$VERIFY_COMMIT\" != \"$CURRENT_COMMIT\" ]; then\n  echo \"ERROR: Code changed since verification\"\n  exit 2\nfi\n\n# C-7: File manifest validation\nVERIFIED_MANIFEST=$(jq -r '.verified_manifest' \"$VERIFY_STATE\")\nCURRENT_MANIFEST=$(sha256sum \"$MANIFEST_FILE\" | cut -d' ' -f1)\nif [ \"$VERIFIED_MANIFEST\" != \"$CURRENT_MANIFEST\" ]; then\n  echo \"ERROR: Source files changed after verification\"\n  exit 2\nfi\n```\n\n**If integrity check fails:**\n\n```\nCode has changed since verification.\n\nVerified commit: abc123\nCurrent commit:  def456\n\n[Re-run claudikins-kernel:verify] [Abort]\n```\n\n## Commit Message Patterns\n\n### Feature\n\n```\nfeat(scope): Short description\n\n- Bullet point of what changed\n- Another change\n\nCloses #123\n```\n\n### Bug Fix\n\n```\nfix(scope): Short description\n\nRoot cause: What was wrong\nFix: What we did\n\nFixes #456\n```\n\n### Breaking Change\n\n```\nfeat(scope)!: Short description\n\nBREAKING CHANGE: What breaks and migration path\n\n- Change 1\n- Change 2\n```\n\n### Chore (no user-facing change)\n\n```\nchore(scope): Short description\n\n- Internal refactor\n- Dependency update\n```\n\nSee [commit-message-patterns.md](references/commit-message-patterns.md) for full guide.\n\n## CHANGELOG Format\n\nFollow Keep a Changelog format:\n\n```markdown\n## [Unreleased]\n\n## [1.2.0] - 2026-01-17\n\n### Added\n\n- Authentication middleware with JWT support (#42)\n\n### Changed\n\n- Updated error messages for clarity\n\n### Fixed\n\n- Token refresh race condition (#38)\n\n## [1.1.0] - 2026-01-10\n\n...\n```\n\nSee [changelog-merge-strategy.md](references/changelog-merge-strategy.md) for merging entries.\n\n## External Service Failures\n\n### GitHub API Failure (E-6, E-7, E-8)\n\n```\nPR creation failed.\n\nError: GitHub API returned 503\n\nRetry 1/3...\n```\n\n**Pattern:** Max 3 retries with exponential backoff.\n\n**If persistent:**\n\n```\nGitHub API unavailable after 3 retries.\n\n[Try again] [Save as draft PR] [Manual merge]\n```\n\nSave state with `pending_merge: true` for recovery.\n\n### CI Failure\n\n```\nCI failed.\n\nFailed checks:\n- lint: 2 errors\n- test: 1 failure\n\n[View logs] [Fix and retry] [Skip CI] [Abort]\n```\n\nSee [ci-failure-handling.md](references/ci-failure-handling.md) for recovery patterns.\n\n## Force Push Protection (S-23)\n\nNever force push to protected branches.\n\n```bash\n# Check if target is protected\nPROTECTED_BRANCHES=\"main master release\"\nif echo \"$PROTECTED_BRANCHES\" | grep -q \"$TARGET\"; then\n  if [ \"$FORCE\" = \"true\" ]; then\n    echo \"ERROR: Cannot force push to $TARGET\"\n    exit 2\n  fi\nfi\n```\n\nSee [force-push-protection.md](references/force-push-protection.md) for safeguards.\n\n## Breaking Change Detection (S-24)\n\nDetect breaking changes before shipping:\n\n| Signal                     | Indicates            |\n| -------------------------- | -------------------- |\n| Removed public function    | Breaking             |\n| Changed function signature | Breaking             |\n| Removed config option      | Breaking             |\n| Changed default behaviour  | Potentially breaking |\n\n**If breaking change detected:**\n\n```\nBreaking change detected!\n\n- Removed: authenticate() function\n- Changed: login() now requires email\n\nThis requires a MAJOR version bump.\n\n[Acknowledge and continue] [Abort]\n```\n\nSee [breaking-change-detection.md](references/breaking-change-detection.md) for detection patterns.\n\n## Anti-Patterns\n\n**Don't do these:**\n\n- Shipping without claudikins-kernel:verify passing\n- Modifying code after verification\n- Force pushing to main/master\n- Auto-merging without human approval\n- Skipping documentation updates\n- Ignoring CI failures\n- Using vague commit messages (\"fix stuff\")\n- Forgetting to delete feature branches\n\n## State Tracking\n\n### ship-state.json\n\n```json\n{\n  \"session_id\": \"ship-2026-01-17-1130\",\n  \"verify_session_id\": \"verify-2026-01-17-1100\",\n  \"target\": \"main\",\n  \"phases\": {\n    \"pre_ship_review\": { \"status\": \"APPROVED\" },\n    \"commit_strategy\": { \"status\": \"APPROVED\", \"strategy\": \"squash\" },\n    \"documentation\": {\n      \"status\": \"APPROVED\",\n      \"files_updated\": [\"README.md\", \"CHANGELOG.md\"]\n    },\n    \"pr_creation\": { \"status\": \"CREATED\", \"pr_number\": 42 },\n    \"merge\": { \"status\": \"MERGED\", \"sha\": \"abc123\" }\n  },\n  \"cleanup\": {\n    \"branches_deleted\": [\"execute/task-1-auth\", \"execute/task-2-routes\"]\n  },\n  \"shipped_at\": \"2026-01-17T11:46:00Z\"\n}\n```\n\n## References\n\nFull documentation in this skill's references/ folder:\n\n- [commit-message-patterns.md](references/commit-message-patterns.md) - Full commit message guide\n- [grfp-checklist.md](references/grfp-checklist.md) - GRFP integration checklist\n- [pr-creation-strategy.md](references/pr-creation-strategy.md) - PR body templates\n- [deployment-checklist.md](references/deployment-checklist.md) - Pre-deploy checks\n- [gate-failure-recovery.md](references/gate-failure-recovery.md) - Recovering from gate failures (S-19)\n- [ci-failure-handling.md](references/ci-failure-handling.md) - Handling CI pipeline failures (S-20)\n- [message-generation-fallback.md](references/message-generation-fallback.md) - When commit message generation fails (S-21)\n- [changelog-merge-strategy.md](references/changelog-merge-strategy.md) - Merging CHANGELOG entries (S-22)\n- [force-push-protection.md](references/force-push-protection.md) - Preventing accidental force pushes (S-23)\n- [breaking-change-detection.md](references/breaking-change-detection.md) - Detecting breaking changes (S-24)","tags":["shipping","methodology","claudikins","kernel","elb-pr","agent-skills","claude","claude-ai","claude-code","claude-code-plugin","claude-skills","claudecode"],"capabilities":["skill","source-elb-pr","skill-shipping-methodology","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/shipping-methodology","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 (12,292 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.252Z","embedding":null,"createdAt":"2026-04-20T07:28:00.903Z","updatedAt":"2026-04-22T06:55:19.252Z","lastSeenAt":"2026-04-22T06:55:19.252Z","tsv":"'+450':230 '-01':1067,1090,1340,1348,1392 '-10':1091 '-1100':1350 '-1130':1342 '-120':231 '-17':1068,1341,1349,1393 '-19':1435 '-20':1443 '-2026':1339,1347 '-21':1452 '-22':1459 '-23':1181,1467 '-24':1231,1474 '-3':441 '-5':878,890 '-6':1105 '-7':880,926,1107 '-8':1109 '00z':1396 '1':110,169,340,820,1033,1161 '1.1.0':408,555,1088 '1.2.0':409,556,1065 '1/3':1119 '123':1001 '2':123,239,347,440,840,842,873,923,960,1035,1158,1219 '2026':1066,1089,1391 '3':134,225,320,352,1122,1133 '38':1087 '4':145,358,415 '42':315,521,549,1075,1378 '456':1018 '46':1395 '5':156,486 '503':1117 'abc123':973,1383 'abort':237,984,1170,1280 'accept':316,411 'access':310,479 'accident':1463 'acknowledg':1277 'ad':396,404,471,1069 'add':301,378,466 'added/removed':213 'agent':562 'alreadi':782 'alway':656 'anoth':998 'anti':1288 'anti-pattern':1287 'anyway':508,617 'api':1102,1115,1130 'appli':98 'applic':457 'approv':27,141,153,247,363,427,492,653,783,871,1314,1358,1362,1367 'auth':300,465 'authent':302,397,467,1070,1264 'auto':150,648,768,1310 'auto-merg':149,647,767,1309 'back':234,318,484 'backoff':1126 'base':309,478 'bash':819,888,1188 'batch':295 'behaviour':1253 'better':287 'big':596 'bodi':422,436,469,1420 'boundari':271 'branch':161,196,202,224,226,533,538,551,678,684,1187,1195,1202,1331,1385 'break':1019,1025,1028,1227,1233,1242,1246,1250,1255,1257,1260,1471 'breakdown':449 'breaking-change-detection.md':1282,1468 'bug':1002 'bullet':442,993 'bump':389,1276 'c':877,879,889,925 'cancel':528 'cannot':1213 'cargo.toml':386 'catastrophis':209 'caus':1009 'caveat':628 'celebr':164,541 'chang':133,215,229,351,376,446,447,599,638,748,919,956,968,997,999,1020,1026,1032,1034,1041,1076,1228,1234,1243,1251,1258,1261,1266,1472 'changelog':14,64,327,383,661,663,1056,1061,1456 'changelog-merge-strategy.md':1093,1453 'changelog.md':377,403,1371 'check':112,182,222,498,515,700,792,800,818,964,1156,1189,1427 'checklist':1416 'checkpoint':216,296,392,458 'chore':1036,1042 'ci':20,74,489,496,499,504,510,512,611,619,754,1151,1153,1169,1319,1439 'ci-failure-handling.md':1172,1436 'clariti':1081 'claudikin':8,53,115,193,586,608,809,832,862,981,1297 'claudikins-kernel':7,52,114,192,585,607,808,831,861,980,1296 'clean':157,265,552 'cleanup':495,1384 'clear':269 'close':314,576,1000 'code':28,80,124,210,814,875,918,966,1302 'command':56 'commit':58,240,243,252,256,258,266,297,891,895,899,904,912,914,972,975,985,1323,1359,1409,1447 'commit-message-patterns.md':1051,1406 'condit':1086 'confid':88 'config':1248 'confirm':180 'conflict':78 'continu':233,1279 'control':311,480 'core':84 'creat':462,481,721,1375 'creation':417,1111,1373 'critic':802 'curl':206 'current':345,903,913,938,949,974 'cut':943 'd':944 'deal':597 'debug':289 'decid':15,67,147,795 'decis':248 'deep':342 'deep-div':341 'def456':976 'default':1252 'delet':160,531,537,1329,1386 'delta':211 'dep':402 'depend':1048 'deploy':1426 'deployment-checklist.md':1422 'descript':62,434,992,1007,1024,1045 'detail':448 'detect':1229,1232,1259,1262,1285,1470 'dive':343 'doc':163,346,687,691,772 'document':66,321,393,1316,1365,1399 'done':544 'draft':242,418,1139 'e':1104,1106,1108 'easier':272 'echo':829,859,916,952,1200,1211 'email':1270 'enforc':22,806 'enough':577 'ensur':881 'entri':379,406,1097,1457 'error':830,860,917,953,1078,1113,1159,1212 'ever':685 'everi':105,143 'everywher':136 'evid':203 'exact':127,884 'except':122,643 'excus':566,571 'execute/task-':201 'execute/task-1-auth':1387 'execute/task-2-routes':1388 'exist':706,793,823 'exit':839,872,922,959,1218 'explicit':625 'exponenti':1125 'extern':1098 'f':825 'f1':945 'face':1040 'fail':965,1112,1154,1155,1450 'failur':21,75,622,1100,1103,1152,1162,1320,1433,1441 'fals':852 'feat':299,431,464,989,1021 'featur':263,270,294,372,532,988,1330 'fi':841,874,924,961,1220,1221 'file':214,364,367,927,942,955,1368 'final':96,154,487,542,654 'find':565 'fine':651,674 'first':113,527 'five':108,166 'fix':592,623,778,1003,1004,1013,1017,1082,1165,1325 'flag':724,844 'flaki':613,618 'folder':1405 'follow':717,796,1058 'forc':671,680,775,1177,1183,1208,1214,1305,1464 'force-push-protection.md':1223,1460 'forget':1327 'format':384,1057,1062 'full':1054,1398,1408 'function':1241,1244,1265 'gap':349 'gate':34,97,111,699,705,791,799,812,1432 'gate-failure-recovery.md':1428 'generat':1449 'git':323,333,905 'git-perfectionist':322,332 'github':337,1101,1114,1129 'github-readm':336 'go':639 'granular':285 'grep':1203 'grfp':24,100,135,330,696,1414 'grfp-checklist.md':1412 'grfp-style':23,99,329 'guid':1055,1411 'handl':19,73,1438 'hash':892 'head':909 'hide':620 'histori':259,286 'hook':805 'hope':90 'human':33,146,152,179,246,491,652,781,794,1313 'human-g':32 'id':1337,1345 'identifi':348 'ignor':1318 'implement':475 'incid':722 'indic':1238 'instal':374,400 'integr':29,81,125,815,876,963,1415 'intern':1046 'invalid':602 'iter':26,102 'jq':848,896,932 'json':1335 'jwt':304,472,1073 'keep':284,381,1059 'kernel':9,54,116,194,587,609,810,833,863,982,1298 'larg':279 'later':662 'let':742 'line':212,232 'lint':1157 'list':199 'll':615,658,760 'log':506,1164 'login':1267 'main':268,523,547,1196,1352 'main/master':1308 'major':1274 'manag':313 'manifest':928,931,935,939,941,948,950 'manual':1141 'markdown':438,1063 'master':1197 'max':1121 'mean':716,789 'merg':16,35,68,77,151,155,198,228,488,493,507,519,524,530,550,616,649,655,769,1096,1142,1147,1311,1379,1381,1455 'messag':59,244,298,986,1079,1324,1410,1448 'message-generation-fallback.md':1444 'methodolog':3,37,719,741 'middlewar':303,468,1071 'migrat':1030 'minor':410 'modifi':1301 'multi':281,293 'multi-featur':292 'multi-part':280 'must':118 'need':48,276,391 'never':679,1182 'new':401 'next':757,765 'nice':557 'no-delete-branch':535 'nobodi':688 'number':1377 'one':747 'option':1249 'output':543 'package.json':385 'pars':908 'part':282,665,693 'pass':120,190,223,490,511,516,574,646,710,756,867,1300 'path':1031 'pattern':430,801,987,1120,1176,1286,1289 'pen':354 'pen-wield':353 'pend':1146 'perfectionist':324,334 'persist':1128 'phase':189,1353 'philosophi':85,92 'pipelin':1440 'plugin':339 'point':443,994 'potenti':1254 'pr':61,416,419,428,435,459,482,520,548,636,641,763,1110,1140,1372,1376,1419 'pr-creation-strategy.md':1417 'pre':171,1354,1425 'pre-deploy':1424 'pre-ship':170 'prepar':11,57 'preserv':72,257,277 'pressur':564 'prevent':1462 'principl':109 'probabl':751 'proper':712,764 'protect':683,1179,1186,1193,1194,1201 'prs':12 'public':1240 'push':672,681,745,776,1178,1184,1215,1306,1465 'pyproject.toml':387 'q':1204 'r':849,897,933 'race':1085 'ration':559 're':583,605,730,736,978 're-run':582,604,977 'read':689 'readi':181,217,460,517 'readm':326,338 'readme.md':371,395,1370 'real':621 'realiti':572 'reason':709 'reassess':727 'recommend':261 'recov':1430 'recoveri':1150,1175 'red':723 'refactor':1047 'refer':1397,1404 'references/breaking-change-detection.md':1283,1469 'references/changelog-merge-strategy.md':1094,1454 'references/ci-failure-handling.md':1173,1437 'references/commit-message-patterns.md':1052,1407 'references/deployment-checklist.md':1423 'references/force-push-protection.md':1224,1461 'references/gate-failure-recovery.md':1429 'references/grfp-checklist.md':1413 'references/message-generation-fallback.md':1445 'references/pr-creation-strategy.md':1418 'refresh':1084 'releas':1198 'remov':1239,1247,1263 'request':525 'requir':817,1269,1272 'resist':561 'respons':207 'retri':1118,1123,1134,1167 'return':1116 'rev':907 'rev-pars':906 'revert':274 'review':173,526,645,1356 'revis':317,412,483 'role':308,477 'role-bas':307,476 'root':1008 'run':6,50,501,584,606,838,979 'safeguard':1226 'save':770,1137,1143 'scope':432,990,1005,1022,1043 'screenshot':205,455 'section':138,140,360,362,398,424,426 'section-by-sect':137,359,423 'see':1050,1092,1171,1222,1281 'servic':1099 'session':312,1336,1344 'set':846 'sha':900,1382 'sha256sum':940 'ship':2,10,36,55,83,86,91,93,126,172,178,219,545,667,695,851,883,1236,1294,1338,1355,1389 'ship-init.sh':804 'ship-state.json':540,1334 'shipping-methodolog':1 'short':433,991,1006,1023,1044 'shortcut':720 'show':174,185 'signal':1237 'signatur':1245 'similar':785 'sinc':920,969 'singl':255,264 'skill':42,45,1402 'skill-shipping-methodology' 'skip':413,626,634,686,1168,1315 'sneaki':132 'someth':784 'sourc':954 'source-elb-pr' 'squash':70,253,260,1364 'stage':106,144,167,168,238,319,414,485,798 'stale':578 'state':822,827,854,902,937,1144,1332 'status':187,497,500,513,1357,1361,1366,1374,1380 'still':752 'stop':725,790 'strategi':17,69,241,1360,1363 'strict':703 'structur':437 'stuff':1326 'style':25,101,331 'summari':204,439,470 'support':1074 't11':1394 'target':1191,1205,1217,1351 'templat':1421 'test':450,1160 'think':731 'time':758,766,771 'tini':591 'titl':420,429,463 'token':305,473,1083 'topic-agent-skills' 'topic-claude' 'topic-claude-ai' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-claude-skills' 'topic-claudecode' 'topic-sre' 'track':1333 'tri':1135 'true':857,1148,1209 'typo':633 'unavail':1131 'unless':534 'unlock':843,847,850,856 'unreleas':1064 'updat':63,162,325,357,366,370,394,399,539,659,1049,1077,1317,1369 'usag':373 'use':4,40,43,290,335,1321 'user':1039 'user-fac':1038 'v1.2.0':405 'vagu':1322 'valid':30,79,306,474,753,816,893,929 'verif':186,579,581,921,958,970,1304 'verifi':117,130,195,220,236,454,573,588,594,601,610,749,811,821,826,834,853,864,887,894,898,901,911,930,934,936,947,971,983,1299,1343,1346 'version':328,388,407,554,1275 'view':505,1163 'violat':570,739 'vs':71 'wait':502,774 'wield':355 'without':1295,1312 'work':283,558 'workflow':103 'write':13 'wrong':1012 'yesterday':575","prices":[{"id":"50fc6927-ab38-4963-9c85-1d14456cfc94","listingId":"d840c19d-f1be-4425-8dbd-a30b993586f9","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:00.903Z"}],"sources":[{"listingId":"d840c19d-f1be-4425-8dbd-a30b993586f9","source":"github","sourceId":"elb-pr/claudikins-kernel/shipping-methodology","sourceUrl":"https://github.com/elb-pr/claudikins-kernel/tree/main/skills/shipping-methodology","isPrimary":false,"firstSeenAt":"2026-04-20T07:28:00.903Z","lastSeenAt":"2026-04-22T06:55:19.252Z"}],"details":{"listingId":"d840c19d-f1be-4425-8dbd-a30b993586f9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"elb-pr","slug":"shipping-methodology","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":"7f07b02fccdd069671f26164c3213ef17a8535c4","skill_md_path":"skills/shipping-methodology/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/elb-pr/claudikins-kernel/tree/main/skills/shipping-methodology"},"layout":"multi","source":"github","category":"claudikins-kernel","frontmatter":{"name":"shipping-methodology","description":"Use when running claudikins-kernel:ship, preparing PRs, writing changelogs, deciding merge strategy, or handling CI failures — enforces GRFP-style iterative approval, code integrity validation, and human-gated merges"},"skills_sh_url":"https://skills.sh/elb-pr/claudikins-kernel/shipping-methodology"},"updatedAt":"2026-04-22T06:55:19.252Z"}}