Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

step-01-gather-context.md 6.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. ---
  2. diff_output: '' # set at runtime
  3. spec_file: '' # set at runtime (path or empty)
  4. review_mode: '' # set at runtime: "full" or "no-spec"
  5. story_key: '' # set at runtime when discovered from sprint status
  6. ---
  7. # Step 1: Gather Context
  8. ## RULES
  9. - YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
  10. - The prompt that triggered this workflow IS the intent — not a hint.
  11. - Do not modify any files. This step is read-only.
  12. ## INSTRUCTIONS
  13. 1. **Find the review target.** The conversation context before this skill was triggered IS your starting point — not a blank slate. Check in this order — stop as soon as the review target is identified:
  14. **Tier 1 — Explicit argument.**
  15. Did the user pass a PR, commit SHA, branch, spec file, or diff source this message?
  16. - PR reference → resolve to branch/commit via `gh pr view`. If resolution fails, ask for a SHA or branch.
  17. - Commit or branch → use directly.
  18. - Spec file → set `{spec_file}` to the provided path. Check its frontmatter for `baseline_commit`. If found, use as diff baseline. If not found, continue the cascade (a spec alone does not identify a diff source).
  19. - Also scan the argument for diff-mode keywords that narrow the scope:
  20. - "staged" / "staged changes" → Staged changes only
  21. - "uncommitted" / "working tree" / "all changes" → Uncommitted changes (staged + unstaged)
  22. - "branch diff" / "vs main" / "against main" / "compared to <branch>" → Branch diff (extract base branch if mentioned)
  23. - "commit range" / "last N commits" / "<from-sha>..<to-sha>" → Specific commit range
  24. - "this diff" / "provided diff" / "paste" → User-provided diff (do not match bare "diff" — it appears in other modes)
  25. - When multiple keywords match, prefer the most specific (e.g., "branch diff" over bare "diff").
  26. **Tier 2 — Recent conversation.**
  27. Do the last few messages reveal what the user wants to be reviewed? Look for spec paths, commit refs, branches, PRs, or descriptions of a change. Apply the same diff-mode keyword scan and routing as Tier 1.
  28. **Tier 3 — Sprint tracking.**
  29. Look for a sprint status file (`*sprint-status*`) in `{implementation_artifacts}` or `{planning_artifacts}`. If found, scan for stories with status `review`:
  30. - **Exactly one `review` story:** Set `{story_key}` to the story's key (e.g., `1-2-user-auth`). Suggest it: "I found story <story-id> in `review` status. Would you like to review its changes? [Y] Yes / [N] No, let me choose". If confirmed, use the story context to determine the diff source (branch name derived from story slug, or uncommitted changes). If declined, clear `{story_key}` and fall through.
  31. - **Multiple `review` stories:** Present them as numbered options alongside a manual choice option. Wait for user selection. If a story is selected, set `{story_key}` and use its context to determine the diff source. If manual choice is selected, clear `{story_key}` and fall through.
  32. - **None:** Fall through.
  33. **Tier 4 — Current git state.**
  34. If version control is unavailable, skip to Tier 5. Otherwise, check the current branch and HEAD. If the branch is not `main` (or the default branch), confirm: "I see HEAD is `<short-sha>` on `<branch>` — do you want to review this branch's changes?" If confirmed, treat as a branch diff against `main`. If declined, fall through.
  35. **Tier 5 — Ask.**
  36. Fall through to instruction 2.
  37. Never ask extra questions beyond what the cascade prescribes. If a tier above already identified the target, skip the remaining tiers and proceed to instruction 3 (construct diff).
  38. 2. HALT. Ask the user: **What do you want to review?** Present these options:
  39. - **Uncommitted changes** (staged + unstaged)
  40. - **Staged changes only**
  41. - **Branch diff** vs a base branch (ask which base branch)
  42. - **Specific commit range** (ask for the range)
  43. - **Provided diff or file list** (user pastes or provides a path)
  44. 3. Construct `{diff_output}` from the chosen source.
  45. - For **staged changes only**: run `git diff --cached`.
  46. - For **uncommitted changes** (staged + unstaged): run `git diff HEAD`.
  47. - For **branch diff**: verify the base branch exists before running `git diff`. If it does not exist, HALT and ask the user for a valid branch.
  48. - For **commit range**: verify the range resolves. If it does not, HALT and ask the user for a valid range.
  49. - For **provided diff**: validate the content is non-empty and parseable as a unified diff. If it is not parseable, HALT and ask the user to provide a valid diff.
  50. - For **file list**: validate each path exists in the working tree. Construct `{diff_output}` by running `git diff HEAD -- <path1> <path2> ...`. If any paths are untracked (new files not yet staged), use `git diff --no-index /dev/null <path>` to include them. If the diff is empty (files have no uncommitted changes and are not untracked), ask the user whether to review the full file contents or to specify a different baseline.
  51. - After constructing `{diff_output}`, verify it is non-empty regardless of source type. If empty, HALT and tell the user there is nothing to review.
  52. 4. **Set the spec context.**
  53. - If `{spec_file}` is already set (from Tier 1 or Tier 2): verify the file exists and is readable, then set `{review_mode}` = `"full"`.
  54. - Otherwise, ask the user: **Is there a spec or story file that provides context for these changes?**
  55. - If yes: set `{spec_file}` to the path provided, verify the file exists and is readable, then set `{review_mode}` = `"full"`.
  56. - If no: set `{review_mode}` = `"no-spec"`.
  57. 5. If `{review_mode}` = `"full"` and the file at `{spec_file}` has a `context` field in its frontmatter listing additional docs, load each referenced document. Warn the user about any docs that cannot be found.
  58. 6. Sanity check: if `{diff_output}` exceeds approximately 3000 lines, warn the user and offer to chunk the review by file group.
  59. - If the user opts to chunk: agree on the first group, narrow `{diff_output}` accordingly, and list the remaining groups for the user to note for follow-up runs.
  60. - If the user declines: proceed as-is with the full diff.
  61. ### CHECKPOINT
  62. Present a summary before proceeding: diff stats (files changed, lines added/removed), `{review_mode}`, and loaded spec/context docs (if any). HALT and wait for user confirmation to proceed.
  63. ## NEXT
  64. Read fully and follow `./step-02-review.md`