agentsclimarketplace

Reassess roadmap

Skill Yesterday-AI/ytstack/skills/reassess-roadmap

After a slice completes, review whether the milestone roadmap still fits reality. Reads recent summaries, surfaces deviations, prompts for roadmap changes (add/split/reorder/remove slices). Run at slice boundaries, not mid-slice.From its SKILL.md

Install
npx -y skills add Yesterday-AI/ytstack --skill reassess-roadmap

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 8 commands, including `_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$PWD}"` and 7 more.

SKILL.md

9.0 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it

reassess-roadmap

Post-slice checkpoint. Looks at what was learned during the slice and asks whether the milestone roadmap still matches reality. Often the answer is yes -- but when it's no, catching it here is cheap; catching it at milestone-end is expensive.

When to run

  • After ytstack:summarize-task closes the last task of a slice
  • Before picking the next slice to plan/execute
  • NOT mid-slice -- in-flight changes scatter the plan

Anti-Pattern: "The plan was right, no need to reassess"

Run it anyway. It takes 2 minutes and either confirms the plan (good -- more confidence) or surfaces a gap the next slice would have hit blind (much better -- save a slice of wasted work). The value isn't in changing the plan -- it's in knowing whether to change it.

Checklist

  1. Run preamble -- detect milestone + just-completed slice
  2. HARD-GATE -- slice must be fully complete (all tasks [x])
  3. Summarize the slice -- show outcomes of the N task summaries
  4. Ask: does the remaining roadmap still fit?
  5. If no, prompt for changes -- add / split / reorder / remove slices
  6. Update M###-ROADMAP.md with agreed changes
  7. Append decision to M###-CONTEXT.md if the change is non-trivial
  8. Update STATE.md -- flip completed slice, set next active_slice (guarded)
  9. Backlog sweep (only if this was the last slice of the milestone) -- per-item prompt from M###-CONTEXT.md scope

Preamble

_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$PWD}"
cd "$_PROJECT_DIR" 2>/dev/null || true
_PROJECT_SLUG=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || basename "$(pwd)")
if [ -d "$_PROJECT_DIR/.ytstack" ]; then _YT_DIR="$_PROJECT_DIR/.ytstack";
elif [ -d "$HOME/.ytstack/projects/$_PROJECT_SLUG" ]; then _YT_DIR="$HOME/.ytstack/projects/$_PROJECT_SLUG";
else _YT_DIR=""; fi
_HAS_YTSTACK=$([ -n "$_YT_DIR" ] && echo yes || echo no)

_NON_INTERACTIVE=false
if [ -n "$YTSTACK_NON_INTERACTIVE" ] || [ -n "$OPENCLAW_SESSION" ] || [ -n "$CLAUDE_AGENT_TEAM_MEMBER" ]; then
  _NON_INTERACTIVE=true
fi

_CURRENT_MILESTONE=none; _ACTIVE_SLICE=none
if [ -f "$_YT_DIR/STATE.md" ]; then
  _CURRENT_MILESTONE=$(sed -n 's/^current_milestone: *//p' "$_YT_DIR/STATE.md" | head -1)
  _ACTIVE_SLICE=$(sed -n 's/^active_slice: *//p' "$_YT_DIR/STATE.md" | head -1)
fi

# Determine if the current slice is complete
_SLICE_PLAN="$_YT_DIR/$_CURRENT_MILESTONE-$_ACTIVE_SLICE-PLAN.md"
_SLICE_COMPLETE=no
if [ -f "$_SLICE_PLAN" ]; then
  _REMAINING=$(grep -c '^- \[ \]' "$_SLICE_PLAN" 2>/dev/null || echo 0)
  [ "$_REMAINING" -eq 0 ] && _SLICE_COMPLETE=yes
fi

echo "HAS_YTSTACK: $_HAS_YTSTACK"
echo "YTSTACK_NON_INTERACTIVE: $_NON_INTERACTIVE"
echo "CURRENT_MILESTONE: $_CURRENT_MILESTONE"
echo "ACTIVE_SLICE: $_ACTIVE_SLICE"
echo "SLICE_COMPLETE: $_SLICE_COMPLETE"

Procedure

Step 2 HARD-GATE. If SLICE_COMPLETE=no: abort with "slice still has open tasks. Close them via summarize-task before reassessing."

Step 3. Collect recent summaries: read all {MILESTONE}-{SLICE}-T##-SUMMARY.md files. For each, extract Outcome + Deviations. Present to user:

Slice {CURRENT_MILESTONE}-{ACTIVE_SLICE} complete. Here's what shipped:

{For each task summary:}

  • T##: {OUTCOME_FIRST_LINE} (deviations: {DEVIATIONS_SHORT})

Step 4. Use AskUserQuestion:

Given what actually shipped, does the remaining roadmap for {CURRENT_MILESTONE} still fit reality?

Look at the next slice in {CURRENT_MILESTONE}-ROADMAP.md. Does it still make sense given what you learned in this slice?

RECOMMENDATION: A if nothing surprised you. B if one or two surprises. C if you feel "we should reconsider the whole plan."

A) Yes, proceed as planned. (Completeness: 10/10) B) Partial changes needed -- add / split / reorder a slice. (Completeness: 8/10) C) Major rethink -- the milestone scope or goal shifted. (Completeness: 10/10 for doing the rethink honestly)

If A: jump to Step 8. If B: Step 5. If C: prompt "Should we go back to /ytstack:plan-milestone to re-define the milestone? The C option means the current roadmap is stale enough to rebuild." Ask user; if yes, STOP and recommend rerun. If they want to patch in place, proceed to Step 5.

Step 5. For B: use AskUserQuestion (open-ended):

What needs to change in the roadmap?

Describe changes in plain English. Examples:

  • "Add a new slice S04 between S02 and S03 for rate-limiting -- surfaced during S02."
  • "Remove S03 -- turns out what we did in S02 covered it."
  • "Split S03 into S03a (schema change) and S03b (UI update) -- too big for one slice."

Remember as _CHANGES.

Step 6. Apply changes to {CURRENT_MILESTONE}-ROADMAP.md via Edit tool. For each change:

  • Add: insert a new - [ ] S## -- {name} line at the correct position, increment total_slices frontmatter
  • Split: replace one slice line with two, increment total_slices
  • Remove: delete line, decrement total_slices
  • Reorder: move lines (preserve checkbox state)

If slices beyond the modified ones have placeholder task lists, leave them -- slice-milestone will handle re-planning.

Step 7. If the change was non-trivial (B or C): append to {CURRENT_MILESTONE}-CONTEXT.md:

## Reassessment {ISO_TIMESTAMP}

After **{ACTIVE_SLICE}**, changed the roadmap:

{CHANGES}

Reason: {USER_REASON_IF_PROVIDED}

Step 8. Update STATE.md:

If YTSTACK_NON_INTERACTIVE is false (i.e. CLAUDE_AGENT_TEAM_MEMBER is unset):

  • Flip active_slice from completed slice to the next unfinished slice (next - [ ] S## in ROADMAP), or active_slice: none if no unfinished slice remains
  • active_task: none

If YTSTACK_NON_INTERACTIVE is true (running as swarm teammate): skip frontmatter writes. Log:

[ytstack:reassess-roadmap] skipping STATE.md active_slice/active_task write -- running as swarm teammate (CLAUDE_AGENT_TEAM_MEMBER set)

Regardless of teammate mode:

  • Bump last_updated
  • Status line: **Status:** {CURRENT_MILESTONE} -- slice {OLD_SLICE} complete. Next slice: {NEW_ACTIVE_SLICE}.

Also flip - [ ] {OLD_SLICE} → - [x] {OLD_SLICE} in {CURRENT_MILESTONE}-ROADMAP.md and bump completed_slices.

Step 9. Backlog sweep (only if this was the last slice of the milestone -- no remaining - [ ] S## in ROADMAP).

Read {CURRENT_MILESTONE}-CONTEXT.md. Extract any backlog items listed under a "Backlog" or "Deferred" heading (pattern: lines starting with - under such a heading). If none found, skip this step and report "no backlog items found."

For each backlog item, use AskUserQuestion (multi-choice):

Wrapping up {CURRENT_MILESTONE} -- sweeping backlog item: "{ITEM_DESCRIPTION}"

This item was deferred into {CURRENT_MILESTONE} scope but not scheduled in any slice. Now that the milestone is done, decide its fate.

RECOMMENDATION: A if the item shipped as part of normal work. B if it is genuinely needed but needs more work. C if it no longer applies.

A) Fully shipped -- delete this item from the backlog. (Completeness: 10/10, tier: task) B) Still needed -- trim to what remains and carry forward to the next milestone's CONTEXT.md. (Completeness: 8/10, tier: task) C) Drop it -- not worth doing. Add a one-line DECISIONS.md note explaining why. (Completeness: 7/10, tier: task)

For A: remove the item from the backlog section in {CURRENT_MILESTONE}-CONTEXT.md. For B: prompt "What is still needed? (one sentence)" then update the item text in {CURRENT_MILESTONE}-CONTEXT.md and copy the trimmed item to the next milestone CONTEXT.md (append under a "Carried from {CURRENT_MILESTONE}" heading) once the next milestone exists. For C: remove the item from {CURRENT_MILESTONE}-CONTEXT.md and append to DECISIONS.md:

## {ISO_DATE}: Drop backlog item "{ITEM_DESCRIPTION}" from {CURRENT_MILESTONE}

**Context:** item was deferred into {CURRENT_MILESTONE} but not executed.
**Chose:** drop
**Reason:** {USER_REASON}

Report + return

Slice {OLD_SLICE} closed, roadmap reassessed: {A/B/C outcome}.

{If B/C:} Changes logged to {CURRENT_MILESTONE}-CONTEXT.md under "Reassessment {TIMESTAMP}".

Next: slice {NEW_ACTIVE_SLICE}. Run /ytstack:plan-task to flesh out the first task, or use subagent dispatch if available.

If this was the last slice of the milestone: flip milestone status to done in .ytstack/ROADMAP.md (global) and consider /ytstack:plan-milestone for the next milestone.

Terminal State

  • Return after ROADMAP + STATE + (optional) CONTEXT updates + (optional) backlog sweep
  • Abort if slice not complete (Step 2 HARD-GATE)
  • Abort + recommend rerun if user picks "major rethink, restart milestone"

Do NOT auto-invoke plan-task or plan-milestone.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.