{
  "version": "act 2.1.1",
  "slug": "change-impact",
  "name": "change-impact",
  "description": "Use before modifying a file or symbol, or when asked \"what breaks if I change X?\". Depth 0 \u2014 fast, no follow-up queries, returns immediately. Two modes: inline (no artifacts, default for agent-initiated use) and artifact (writes to docs/act/, triggered for human-initiated requests or Critical risk verdicts).",
  "url": "https://act101.ai/docs/skills/change-impact",
  "body_md": "# Change Impact\n\n**Depth:** Level 0 (Collect).\n\nSee `../analysis-protocol/references/protocol.md` for: artifact directory structure,\nthe investigation loop, depth levels, summary format, token budget rules, and project\nmap structure.\n\n## Tools\n\n| Tool | Purpose | MCP call | Tier |\n|------|---------|----------|------|\n| `analyze_impact` (file mode) | Blast radius \u2014 files that depend on target (R1) | `analyze_impact` with `target: <file>` | Free |\n| `analyze_impact` (symbol mode) | Transitive callers of a function symbol | `analyze_impact` with `target: <file>` and `symbol: <name>` | Architecture |\n| `analyze_test_gaps` | Is the target tested? (R5) | `analyze_test_gaps` | \u2014 |\n| `analyze_cycle_risk` | Is the target in a risky cycle? (R6) | `analyze_cycle_risk` | \u2014 |\n\n**Symbol mode workflow (Architecture):** For PR review or before renaming/changing a function signature,\nrun `skeleton` to confirm the function exists in the file, then use symbol mode to get the full\ntransitive caller chain. Append `::<line>` to `symbol` to disambiguate overloads\n(e.g. `symbol: \"process::42\"`). Symbol mode uses syntactic-floor analysis; LSP is not required.\nThe `confidence`, `modeled_kinds`, and `unresolved` fields in the result are honesty signals \u2014\nreview them to understand gaps in the analysis.\n\nIf `analyze_test_gaps` or `analyze_cycle_risk` are unavailable: run `analyze_impact`\nonly. Note which tools were skipped in the verdict and caveat accordingly.\n\nIf `analyze_impact` is unavailable: report that and stop \u2014 no useful verdict possible.\n\n## Two Modes\n\n**Inline mode** (default for agent-initiated use):\n- Returns the summary directly to the calling agent\n- Does NOT write artifacts to disk\n- Use when an agent needs a quick risk check before making a change\n\n**Artifact mode** (for human-initiated requests, or when verdict is Critical):\n- Follows the full artifact protocol: create `docs/act/<timestamp>/`, write\n  `manifest.json`, save `raw/*.json`, write `report.md`\n- Triggered automatically when verdict is **Critical**, even if initially invoked inline\n- Triggered by explicit user request (e.g., \"analyze impact of changing X\")\n\n## Risk Verdict\n\nCompute from tool outputs:\n\n| Verdict | Criteria |\n|---------|----------|\n| **Low** | Blast radius < 5 files, target is tested, not in a risky cycle |\n| **Medium** | Blast radius 5-15 files, OR target is untested |\n| **High** | Blast radius > 15 files, OR target is untested AND in a cycle |\n| **Critical** | Blast radius > 30 files, OR target is in a high-risk cycle (>50% of codebase risk surface) |\n\nWhen multiple criteria apply, use the highest verdict. When tools are missing, caveat\nthe verdict: \"Medium (test coverage unknown \u2014 analyze_test_gaps not available)\".\n\n## Summary Format\n\nReturn this to the calling agent:\n\n```\n## Change Impact: <target>\n\n**Risk: <Low / Medium / High / Critical>**\n- Blast radius: N direct, M transitive dependents\n- Test coverage: tested / untested / unknown (tool unavailable)\n- Cycle risk: none / low / high (N% of codebase affected) / unknown (tool unavailable)\n\n**Caution areas:** <list of highest-risk direct dependents, or \"none identified\">\n**Suggested:** <e.g., \"run tests in X before merging\", \"review Y for breakage\", \"run architecture-audit to understand full impact\">\n```\n\n## Project Map Updates\n\nNone. Change Impact reads `project-map.md` (workspace root) for context (chokepoints, known\nrisky files) but does not modify it."
}