mcpField
G
gsd-review-backlog

gsd-review-backlog

github.com/open-gsdAgent workflows11.0k424 installsUpdated today
Repository

About gsd-review-backlog

gsd-review-backlog is a project-planning skill for reviewing 999.x backlog phases. It lets teams promote selected entries into the active milestone, retain them, or remove stale items while updating planning records.

Key features

  1. 01Lists backlog phases and related artifacts
  2. 02Shows descriptions, context, and creation dates
  3. 03Promotes selected phases into the active sequence
  4. 04Removes stale phase directories and roadmap entries
  5. 05Updates the roadmap and commits the review

Use cases

  1. 01Reviewing deferred work before a new milestone
  2. 02Moving a backlog phase into the active plan
  3. 03Removing obsolete planning entries

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/open-gsd/gsd-core --skill gsd-review-backlog

After installing, type/gsd-review-backlogin Claude Code to confirm it loaded.

Details

From the project README
Review all 999.x backlog items and optionally promote them into the active milestone sequence or remove stale entries.
  1. List backlog items:

    _BACKLOG=( .planning/phases/999* )
    if [ -e "${_BACKLOG[0]}" ]; then ls -d "${_BACKLOG[@]}"; else echo "No backlog items found"; fi
    
  2. Read ROADMAP.md and extract all 999.x phase entries:

    cat .planning/ROADMAP.md
    

    Show each backlog item with its description, any accumulated context (CONTEXT.md, RESEARCH.md), and creation date.

  3. Present the list to the user via AskUserQuestion:

    • For each backlog item, show: phase number, description, accumulated artifacts
    • Options per item: Promote (move to active), Keep (leave in backlog), Remove (delete)
  4. For items to PROMOTE:

    • Find the next sequential phase number in the active milestone
    • Rename the directory from 999.x-slug to {new_num}-slug:

_GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; _gsd_at() { for _p; do if [ -f "$_p" ]; then GSD_TOOLS="$_p"; return 0; fi; done; return 1; }; _gsd_id_ok() { case "$("$1" runtime-identity --raw 2>/dev/null || true)" in '{"packageName":"@opengsd/gsd-core"'*'}') return 0;; ) return 1;; esac; }; _gsd_homes() { set -- "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}" "$HOME/.gemini/antigravity-ide" "$HOME/.gemini/antigravity-cli" "${AUGMENT_CONFIG_DIR:-$HOME/.augment}" "${CLINE_CONFIG_DIR:-$HOME/.cline}" "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}" "${CODEX_HOME:-$HOME/.codex}" "${COPILOT_CONFIG_DIR:-${COPILOT_HOME:-$HOME/.copilot}}" "${CURSOR_CONFIG_DIR:-$HOME/.cursor}" "${HERMES_HOME:-$HOME/.hermes}" "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}" "${KIMI_CONFIG_DIR:-$HOME/.config/agents}" "$HOME/.agents" "${KIMI_CODE_HOME:-$HOME/.kimi-code}" "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}" "${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}" "${QWEN_CONFIG_DIR:-$HOME/.qwen}" "${TRAE_CONFIG_DIR:-$HOME/.trae}" "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}" "${ZCODE_CONFIG_DIR:-$HOME/.zcode}" "${GROK_AGENTS_HOME:-$HOME/.agents}"; for _h; do _gsd_at "$_h/gsd-core/bin/${_GSD_SHIM_NAME}" && return 0; done; return 1; }; if _gsd_at "${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}" "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" "${_GSD_RUNTIME_ROOT}/.codex/gsd-core/bin/${_GSD_SHIM_NAME}"; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif _gsd_homes; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif unset -f gsd_run; _G="$(command -v gsd_run)"; [ -n "$_G" ] && _gsd_id_ok "$_G"; then GSD_TOOLS="$_G"; gsd_run() { "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and no identity-proving gsd_run is on PATH. Run: npx -y @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi; GSD_IDENTITY_STATUS=unverified; _gsd_id_ok gsd_run && GSD_IDENTITY_STATUS=ok; export GSD_IDENTITY_STATUS; [ "$GSD_IDENTITY_STATUS" = ok ] || echo "WARNING: "$GSD_TOOLS" did not prove it is @opengsd/gsd-core - it is either a different package or an @opengsd/gsd-core older than the runtime-identity verb. See docs/how-to/diagnose-a-foreign-gsd-tools.md" >&2; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${GSD_TOOLS:-}" ]; then printf "export PATH='%s':"$PATH"\n" "${GSD_TOOLS%/}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi NEW_NUM=$(gsd_run query phase.add "${DESCRIPTION}" --raw) ```

  • Move accumulated artifacts to the new phase directory
  • Update ROADMAP.md: move the entry from ## Backlog section to the active phase list
  • Remove (BACKLOG) marker
  • Add appropriate **Depends on:** field
  1. For items to REMOVE:

    • Delete the phase directory
    • Remove the entry from ROADMAP.md ## Backlog section
  2. Commit changes:

    gsd_run query commit "docs: review backlog — promoted N, removed M" --files .planning/ROADMAP.md
    
  3. Report summary:

    ## 📋 Backlog Review Complete
    
    Promoted: {list of promoted items with new phase numbers}
    Kept: {list of items remaining in backlog}
    Removed: {list of deleted items}
    

Comments

Markdown supported