{"id":"39eb603d-a8ba-405b-999c-7f1d6d2e9c4f","shortId":"DyJsXK","kind":"skill","title":"plan","tagline":">-","description":"!../principles/SKILL_BODY.md\n\n!../tool-gitnexus/SKILL_BODY.md\n\n---\n\n# Sprint Planning Workflow\n\n## Core Principle\n\nA plan is only as good as its dependency order. Tasks executed out of order produce integration failures that look like bugs but are actually sequencing errors. The goal is a **dependency-ordered task list where each task has a clear skill assignment, a bounded scope, and a single testable acceptance condition**.\n\n> **Upstream skill:** `sextant:refine-requirements` answers \"what to build\" and produces a requirements confirmation document. This skill answers \"how to build it and in what order.\" If requirements are still unclear or unconfirmed, use `sextant:refine-requirements` first.\n\n---\n\n## Complete Execution Workflow\n\n### Session Resume Check\n\nBefore Step 1, check whether `.sextant/state.json` exists in the project root.\n\n**If the file exists:** display the current sprint summary (requirement name, task statuses) and ask:\n> \"An existing sprint plan was found. Resume it, or start a new plan?\"\n\n- **Resume:** present the task list with current statuses; skip to the Execution Handoff section. Continue from the first `pending` or `in_progress` task.\n- **New plan:** proceed with Steps 1–4 normally. Confirm with the user before overwriting the existing state.\n\n**If the file does not exist:** proceed with Step 1 normally.\n\n### Step 1: Parse Inputs\n\nAccept either a requirements confirmation document (output of `sextant:refine-requirements`) or a clearly stated, unambiguous requirement. Extract:\n\n- **Modules involved:** which existing modules will be modified or extended?\n- **Entry points:** where does the new behavior surface (API endpoint, CLI command, UI trigger, event producer)?\n- **Integration points:** where does the new code connect to existing code (interfaces, events, shared data structures, registries)?\n- **Paradigm:** which architecture paradigm applies (per §6.0)? — determines the default layer ordering in Step 2.\n\n🔗 When GitNexus is available, use `context` / `query` MCP tools to extract module relationships automatically.\n\n### Step 2: Dependency Analysis\n\n**Ordering rule:** lower-layer tasks must complete before higher-layer tasks that depend on them.\n\nDefault task ordering by paradigm (matches §6.2 dependency direction):\n\n| Paradigm | Default Task Order |\n|----------|--------------------|\n| Backend layered | Data layer → Logic layer → Entry layer → Tests |\n| Frontend component tree | Store / hooks → Feature components → Page → Tests |\n| CLI / Script | Core logic → Command handlers → CLI entry → Tests |\n| Functional (FP) | Pure core functions → I/O adapters → Entry → Tests |\n| Monorepo | Shared packages → Domain packages → App packages → Tests |\n| Event-driven | Schema / event contracts → Producers → Consumers → Integration tests |\n| Serverless | Core logic → Handler functions → Infrastructure config → Tests |\n| AI/ML pipeline | Data pipeline → Preprocessing → Model → Evaluation → Serving |\n\n**Cross-task data dependencies:** if Task B consumes the output or interface produced by Task A, Task A must be sequenced first — regardless of layer.\n\n**Conflict arbitration:** when ordering is ambiguous, apply §5.5 arbitration rules. When a task touches a public interface, treat it as at least Medium scale and confirm before sequencing.\n\n### Step 3: Task Specification\n\nFor each task, specify all six fields:\n\n1. **Title:** one action verb + one noun (e.g., \"Add `UserRepository.findByEmail` method\")\n2. **Skill:** which sextant sub-skill handles this task?\n   - New code → `sextant:add-feature`\n   - Change existing → `sextant:modify-feature`\n   - Multi-module coordinated change → `sextant:migrate`\n   - Tests → `sextant:write-tests`\n   - Unclear requirements → `sextant:refine-requirements`\n3. **Scale:** apply the Impact Radius Scorecard (§3.2) — Lightweight / Medium / Large\n4. **Files:** likely files to create or modify\n5. **Depends on:** list of task IDs that must complete first, or \"None\"\n6. **Acceptance:** a single, testable condition confirming the task is done\n\n**Acceptance condition format:** `Given <precondition>, when <action>, then <verifiable outcome>.`\nOne sentence — if it requires more, the task scope is too large and should be split.\n\n**Scale gate:** if any task scores as Architectural (Impact Radius 9–10), flag it for decomposition before proceeding. Do not plan an Architectural task as a single unit.\n\n### Step 4: Output the Plan\n\n```\n─── Sprint Plan ─────────────────────────────────────\nRequirement: <name / one-sentence description>\nParadigm:    <detected paradigm>\n\nTask 1: <title>\n  Skill:       <sextant skill name>\n  Scale:       <Lightweight / Medium / Large> (Impact radius: N)\n  Files:       <likely files to create or modify>\n  Depends on:  None / Task N, Task M\n  Acceptance:  Given <precondition>, when <action>, then <verifiable outcome>.\n\nTask 2: <title>\n  Skill:       ...\n  Scale:       ...\n  Files:       ...\n  Depends on:  ...\n  Acceptance:  ...\n\nSuggested sequence: 1 → 3 → 2 → 4 → 5\nRationale: <one sentence explaining any non-obvious ordering decisions>\n─────────────────────────────────────────────────────\n```\n\n### Execution Handoff\n\nAfter the user confirms the sprint plan, this skill transitions from planner to pipeline entry point. Immediately offer to begin execution:\n\n```\n─── Ready to Execute ────────────────────────────────\nThe plan is confirmed. Suggested starting point:\n\nTask 1: <title>\n  → Invoke: sextant:<skill>\n  → To begin, describe the task to me and I will apply the <skill> workflow.\n\nWhen Task 1 is complete, Task 2 becomes unblocked:\n  → Invoke: sextant:<skill>\n\nContinue in sequence: <1 → 2 → ...>\n─────────────────────────────────────────────────────\n```\n\n**Flow rules for execution:**\n- Each task handoff is a fresh skill invocation — the executing skill owns its own workflow from that point\n- If a task reveals a blocking issue (test failure, missing dependency, ambiguous requirement), pause execution and surface it before moving to the next task\n- If a task's scope expands beyond its planned scale during execution, re-assess the Impact Radius before proceeding — it may affect downstream task ordering\n- Tasks with no mutual dependencies can be executed in parallel if the user has multiple working contexts\n\n**State persistence (optional):**\n\nTo resume this sprint across sessions, ask the user: *\"Save sprint state to `.sextant/state.json` so we can resume later?\"*\n\nIf the user confirms, write the file:\n\n```json\n{\n  \"version\": \"1\",\n  \"sprint\": {\n    \"requirement\": \"<one-sentence requirement name>\",\n    \"tasks\": [\n      {\n        \"id\": 1,\n        \"title\": \"<title>\",\n        \"skill\": \"sextant:<skill>\",\n        \"scale\": \"Lightweight | Medium | Large\",\n        \"status\": \"pending | in_progress | done | blocked\",\n        \"depends_on\": [],\n        \"acceptance\": \"<testable condition>\",\n        \"flags\": []\n      }\n    ],\n    \"suggested_sequence\": [1, 2, 3]\n  },\n  \"flags\": []\n}\n```\n\nUpdate the relevant task's `status` field as tasks complete:\n- `pending` → `in_progress` when a task begins\n- `in_progress` → `done` when its acceptance condition is met\n- `in_progress` → `blocked` if a blocking issue is surfaced\n\n**Do not write `.sextant/state.json` without explicit user confirmation.** Automatic writes are forbidden.\n\n---\n\n## Forbidden Actions\n\n- Do not assign vague acceptance criteria (\"works correctly\", \"looks good\") — every condition must be testable without interpretation\n- Do not output an unordered list of tasks and call it a plan — dependency order is the core deliverable\n- Do not plan a task that scores Architectural without first flagging it for decomposition\n- Do not begin planning if the requirement still has unresolved 🔴 gaps — resolve them via `sextant:refine-requirements` first\n\n---\n\n## Reply Format\n\nPrepend the Sprint Plan block with a one-line summary:\n\n```\nPlanning complete: <N> tasks, suggested sequence: <1 → 2 → ...>, scales: <N Lightweight, N Medium, N Large>.\n```\n\nThen output the full Sprint Plan block.","tags":["plan","sextant","hellotern","agent-skills","claude-code","skill-md"],"capabilities":["skill","source-hellotern","skill-plan","topic-agent-skills","topic-claude-code","topic-skill-md"],"categories":["Sextant"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/hellotern/Sextant/plan","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add hellotern/Sextant","source_repo":"https://github.com/hellotern/Sextant","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 14 github stars · SKILL.md body (8,001 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-22T13:03:26.153Z","embedding":null,"createdAt":"2026-04-19T00:40:23.087Z","updatedAt":"2026-04-22T13:03:26.153Z","lastSeenAt":"2026-04-22T13:03:26.153Z","tsv":"'/principles/skill_body.md':2 '/tool-gitnexus/skill_body.md':3 '1':110,175,196,199,462,616,644,684,702,714,836,841,861,1001 '10':589 '2':278,294,473,635,646,706,715,862,1002 '3':452,513,645,863 '3.2':520 '4':176,524,607,647 '5':532,648 '5.5':430 '6':545 '6.0':270 '6.2':320 '9':588 'accept':60,202,546,556,630,641,857,887,918 'across':812 'action':465,913 'actual':33 'adapt':360 'add':470,487 'add-featur':486 'affect':784 'ai/ml':389 'ambigu':428,749 'analysi':296 'answer':68,80 'api':239 'app':368 'appli':268,429,515,697 'arbitr':424,431 'architectur':266,585,600,957 'ask':133,814 'assess':776 'assign':52,916 'automat':292,908 'avail':282 'b':404 'backend':327 'becom':707 'begin':671,688,881,966 'behavior':237 'beyond':768 'block':743,854,893,896,989,1016 'bound':54 'bug':30 'build':71,83 'call':940 'chang':489,499 'check':107,111 'clear':50,216 'cli':241,345,351 'code':253,257,484 'command':242,349 'complet':102,304,541,704,874,997 'compon':337,342 'condit':61,550,557,888,925 'config':387 'confirm':76,178,206,448,551,655,679,830,907 'conflict':423 'connect':254 'consum':378,405 'context':284,804 'continu':161,711 'contract':376 'coordin':498 'core':7,347,357,382,948 'correct':921 'creat':529 'criteria':919 'cross':398 'cross-task':397 'current':125,153 'data':261,329,391,400 'decomposit':593,963 'default':273,314,324 'deliver':949 'depend':17,41,295,311,321,401,533,623,639,748,792,855,944 'dependency-ord':40 'describ':689 'determin':271 'direct':322 'display':123 'document':77,207 'domain':366 'done':555,853,884 'downstream':785 'driven':373 'e.g':469 'either':203 'endpoint':240 'entri':231,333,352,361,666 'error':35 'evalu':395 'event':245,259,372,375 'event-driven':371 'everi':924 'execut':20,103,158,650,672,675,719,729,752,773,795 'exist':114,122,135,185,192,224,256,490 'expand':767 'explicit':905 'extend':230 'extract':220,289 'failur':26,746 'featur':341,488,494 'field':461,871 'file':121,189,525,527,622,638,833 'first':101,164,419,542,959,982 'flag':590,858,864,960 'flow':716 'forbidden':911,912 'format':558,984 'found':139 'fp':355 'fresh':725 'frontend':336 'full':1013 'function':354,358,385 'gap':974 'gate':579 'gitnexus':280 'given':559,631 'goal':37 'good':14,923 'handl':480 'handler':350,384 'handoff':159,651,722 'higher':307 'higher-lay':306 'hook':340 'i/o':359 'id':538,840 'immedi':668 'impact':517,586,619,778 'infrastructur':386 'input':201 'integr':25,247,379 'interfac':258,409,439 'interpret':930 'invoc':727 'invok':685,709 'involv':222 'issu':744,897 'json':834 'larg':523,573,848,1009 'later':826 'layer':274,301,308,328,330,332,334,422 'least':444 'lightweight':521,846,1005 'like':29,526 'line':994 'list':44,151,535,936 'logic':331,348,383 'look':28,922 'lower':300 'lower-lay':299 'm':629 'match':319 'may':783 'mcp':286 'medium':445,522,847,1007 'met':890 'method':472 'migrat':501 'miss':747 'model':394 'modifi':228,493,531 'modify-featur':492 'modul':221,225,290,497 'monorepo':363 'move':757 'multi':496 'multi-modul':495 'multipl':802 'must':303,416,540,926 'mutual':791 'n':621,627,1004,1006,1008 'name':129 'new':145,170,236,252,483 'next':760 'none':544,625 'normal':177,197 'noun':468 'offer':669 'one':464,467,562,993 'one-lin':992 'option':807 'order':18,23,42,88,275,297,316,326,426,787,945 'output':208,407,608,933,1011 'overwrit':183 'own':731 'packag':365,367,369 'page':343 'paradigm':264,267,318,323,614 'parallel':797 'pars':200 'paus':751 'pend':165,850,875 'per':269 'persist':806 'pipelin':390,392,665 'plan':1,5,10,137,146,171,598,610,612,658,677,770,943,952,967,988,996,1015 'planner':663 'point':232,248,667,682,737 'prepend':985 'preprocess':393 'present':148 'principl':8 'proceed':172,193,595,781 'produc':24,73,246,377,410 'progress':168,852,877,883,892 'project':117 'public':438 'pure':356 'queri':285 'radius':518,587,620,779 'rational':649 're':775 're-assess':774 'readi':673 'refin':66,99,212,511,980 'refine-requir':65,98,211,510,979 'regardless':420 'registri':263 'relationship':291 'relev':867 'repli':983 'requir':67,75,90,100,128,205,213,219,508,512,566,613,750,838,970,981 'resolv':975 'resum':106,140,147,809,825 'reveal':741 'root':118 'rule':298,432,717 'save':817 'scale':446,514,578,618,637,771,845,1003 'schema':374 'scope':55,570,766 'score':583,956 'scorecard':519 'script':346 'section':160 'sentenc':563 'sequenc':34,418,450,643,713,860,1000 'serv':396 'serverless':381 'session':105,813 'sextant':64,97,210,476,485,491,500,503,509,686,710,844,978 'sextant/state.json':113,821,903 'share':260,364 'singl':58,548,604 'six':460 'skill':51,63,79,474,479,617,636,660,726,730,843 'skill-plan' 'skip':155 'source-hellotern' 'specif':454 'specifi':458 'split':577 'sprint':4,126,136,611,657,811,818,837,987,1014 'start':143,681 'state':186,217,805,819 'status':131,154,849,870 'step':109,174,195,198,277,293,451,606 'still':92,971 'store':339 'structur':262 'sub':478 'sub-skil':477 'suggest':642,680,859,999 'summari':127,995 'surfac':238,754,899 'task':19,43,47,130,150,169,302,309,315,325,399,403,412,414,435,453,457,482,537,553,569,582,601,615,626,628,634,683,691,701,705,721,740,761,764,786,788,839,868,873,880,938,954,998 'test':335,344,353,362,370,380,388,502,506,745 'testabl':59,549,928 'titl':463,842 'tool':287 'topic-agent-skills' 'topic-claude-code' 'topic-skill-md' 'touch':436 'transit':661 'treat':440 'tree':338 'trigger':244 'ui':243 'unambigu':218 'unblock':708 'unclear':93,507 'unconfirm':95 'unit':605 'unord':935 'unresolv':973 'updat':865 'upstream':62 'use':96,283 'user':181,654,800,816,829,906 'userrepository.findbyemail':471 'vagu':917 'verb':466 'version':835 'via':977 'whether':112 'without':904,929,958 'work':803,920 'workflow':6,104,699,734 'write':505,831,902,909 'write-test':504","prices":[{"id":"9fc31e6c-76d9-4efc-80a5-095e2b717716","listingId":"39eb603d-a8ba-405b-999c-7f1d6d2e9c4f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"hellotern","category":"Sextant","install_from":"skills.sh"},"createdAt":"2026-04-19T00:40:23.087Z"}],"sources":[{"listingId":"39eb603d-a8ba-405b-999c-7f1d6d2e9c4f","source":"github","sourceId":"hellotern/Sextant/plan","sourceUrl":"https://github.com/hellotern/Sextant/tree/main/skills/plan","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:23.087Z","lastSeenAt":"2026-04-22T13:03:26.153Z"}],"details":{"listingId":"39eb603d-a8ba-405b-999c-7f1d6d2e9c4f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"hellotern","slug":"plan","github":{"repo":"hellotern/Sextant","stars":14,"topics":["agent-skills","claude-code","skill-md"],"license":"mit","html_url":"https://github.com/hellotern/Sextant","pushed_at":"2026-04-07T00:57:27Z","description":"init","skill_md_sha":"2247b9603a0faa92c009740b9cc6922e15f54e71","skill_md_path":"skills/plan/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/hellotern/Sextant/tree/main/skills/plan"},"layout":"multi","source":"github","category":"Sextant","frontmatter":{"description":">-"},"skills_sh_url":"https://skills.sh/hellotern/Sextant/plan"},"updatedAt":"2026-04-22T13:03:26.153Z"}}