A GDD changed — scan ADRs and the traceability index for now-stale architectural decisions. Impact report, guides resolution.
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-propagate-design-change-85fd16427732 ,按照其中的说明把「propagate-design-change」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation,workflow,system_overrides
When a GDD changes, architectural decisions written against it may no longer be valid. This skill finds every affected ADR, compares what the ADR assumed against what the GDD now says, and guides the user through resolution.
Usage: /propagate-design-change design/gdd/combat-system.md
Every AskUserQuestion call follows .claude/docs/automation-modes.md
(collaborative asks always · guided major-only · autonomous logs and proceeds;
automation_always_ask categories always prompt — ADR/schema impacts here fall
under schema_changes and architecture_decisions).
Workflow tier: resolve for the changed GDD's system (per
.claude/docs/workflow-modes.md): use the
system_overrides row for that system if the block lists one, else the
project value. (A system pinned minimal has no ADRs even on a standard
project — so its change is N/A.) It scopes the cascade: full cascades across all
ADRs; standard checks only critical (Foundation-layer) ADRs plus any ADR
referencing the changed GDD; minimal is not applicable — no ADRs to cascade.
See Step 4.
A GDD path argument is required. If missing, fail with:
"Usage:
/propagate-design-change design/gdd/[system].mdProvide the path to the GDD that was changed."
Verify the file exists. If not, fail with:
"[path] not found. Check the path and try again."
Ask git what changed — do not read two whole documents and compare them by
eye. The previous form of this step read the current GDD in full and
git show-ed the full committed version, then diffed them mentally: two entire
documents in context to find what is usually a handful of lines, and a model
comparing 400-line documents will eventually miss an edit. Git cannot.
git diff HEAD -- design/gdd/[filename].md
If that is empty, the change may already be committed — widen to the commit that last touched it:
git diff HEAD~1 HEAD -- design/gdd/[filename].md
If the file has no git history (new file), report:
"No previous version in git — this appears to be a new GDD, not a revision. Nothing to propagate."
If the diff is empty and the file has history, report that plainly — "no
uncommitted or last-commit changes to [file]" — and ask which revision to
propagate. An empty diff is not "no impact"; it means nothing changed here.
From the diff hunks:
@@ hunk headers name
the enclosing section, so the changed-section list falls out of the diff itself.From the hunks resolved in step 2:
## Change Summary: [GDD filename]
Date of revision: [today]
Changed sections:
- [Section name]: [what changed — new rule, removed rule, formula modified, etc.]
Unchanged sections:
- [Section name]
Key changes affecting architecture:
- [Change 1 — likely to affect ADRs]
- [Change 2]
Downstream GDD impact via the registry. If design/registry/entities.yaml
exists, it already records which other GDDs depend on this system's facts —
compute the affected set from it rather than re-reading every GDD:
Grep pattern="source: design/gdd/[filename]" path="design/registry/entities.yaml" output_mode="content" -A 6
For each entity/constant/formula this GDD owns whose value the diff changed,
its referenced_by: list is the set of downstream GDDs that may now be
inconsistent — report them under "Downstream GDDs to re-check". If
design/registry/entities.yaml does not exist or has no entries (it ships as
an empty stub until /design-system populates it), skip this — the ADR cascade
below still runs.
Read ADRs in docs/architecture/ per the resolved tier:
full — read all ADRs.standard — read only critical (Foundation-layer) ADRs plus any ADR
that references the changed GDD.minimal — not applicable: there are no ADRs to cascade. Report "No ADR
cascade at minimal workflow — design change recorded; no architecture impact
analysis." and stop here.Establish the denominator first. Glob the in-scope ADRs (per the tier above).
Call the count N. If N is 0: "No ADRs found in docs/architecture/ — nothing
to cascade." Stop.
Scan the requirement tables — do not full-read the ADRs at this step:
Grep pattern="## GDD Requirements Addressed" glob="docs/architecture/adr-*.md" output_mode="content" -A 15
Recall net — an ADR may cite the changed GDD in prose without tabling it:
Grep pattern="[changed-gdd-basename]" glob="docs/architecture/adr-*.md" output_mode="files_with_matches"
Take the union of the two results as the affected set M. This turns N × ~200 lines into N × ~15 lines; §5 full-reads only the M.
Interpret the result — a zero-match scan is never "no impact" by default:
| Result | Meaning | Action |
|---|---|---|
| M ≥ 1 | Normal. | Proceed. The N − M non-matching ADRs are out of scope for this cascade — do not describe them as verified unaffected. |
| Both scans 0, N > 0 | Ambiguous — either no ADR references this GDD, or the ADRs lack requirement tables. | Run Grep pattern="## GDD Requirements Addressed" glob="docs/architecture/adr-*.md" output_mode="files_with_matches". If that is also empty: "[N] ADRs found, none contains a 'GDD Requirements Addressed' section — traceability cannot be computed (a gate-pre-production blocker). Run /architecture-decision [adr] retrofit." If it is non-empty: the tables exist and genuinely none reference this GDD — "No ADR references [gdd] — no architecture impact." |
Read docs/architecture/requirements-traceability.md if it exists.
Report: "Loaded [N] ADRs by scan. [M] reference [gdd filename] ([X] via requirements table, [Y] via prose reference only)."
Now read each ADR in the affected set M for its reasoning, not just its
table — judging whether a decision is still valid needs the ADR's ## Context
and ## Decision (and ## Consequences where present), not scan output. Do
not attempt the judgement below from scan output.
This read is unbounded only up to a point — check size first
(Bash: wc -c "docs/architecture/[adr-file].md"):
Read is fine and cheapest at this size.Grep pattern="^## " path="docs/architecture/[adr-file].md" output_mode="content" -n),
then bounded-Read only ## Context, ## Decision, and ## Consequences.
An unbounded Read on a large ADR hits the 25k-token cap and, unrecovered,
the only path forward is paging through the entire remainder — measured at
103k tokens on a 34k-token ADR, most of it content this analysis never uses.For each ADR that references the changed GDD:
Compare the ADR's "GDD Requirements Addressed" entries against the changed sections of the GDD. For each referenced requirement:
Classify each affected ADR as one of:
| Status | Meaning |
|---|---|
| ✅ Still Valid | The GDD change doesn't affect what this ADR decided |
| ⚠️ Needs Review | The GDD change may affect this ADR — human judgment needed |
| 🔴 Likely Superseded | The GDD change directly contradicts what this ADR assumed |
For each affected ADR, produce an impact entry:
### ADR-NNNN: [title]
Status: [Still Valid / Needs Review / Likely Superseded]
What the ADR assumed about this GDD:
"[relevant quote from the ADR's GDD Requirements Addressed section]"
What the GDD now says:
"[relevant quote from the current GDD]"
Assessment:
[Explanation of whether the ADR decision is still valid, and why]
Recommended action:
[Keep as-is | Review and update | Mark Superseded and write new ADR]
Present the full impact report to the user before asking for any action. Format:
## Design Change Impact Report
GDD: [filename]
Date: [today]
Changes detected: [N sections changed]
ADRs referencing this GDD: [M]
### Not Affected
[ADRs referencing this GDD whose decisions remain valid]
### Needs Review ([count])
[ADRs that may need updating]
### Likely Superseded ([count])
[ADRs whose assumptions are now contradicted]
Review mode check — apply before spawning TD-CHANGE-IMPACT:
solo → skip. Note: "TD-CHANGE-IMPACT skipped — Solo mode." Proceed to Phase 7.lean → skip. Note: "TD-CHANGE-IMPACT skipped — Lean mode." Proceed to Phase 7.full → spawn as normal.Spawn technical-director via Agent using gate TD-CHANGE-IMPACT (.claude/docs/director-gates/td-change-impact.md).
Pass: the full Design Change Impact Report from Phase 6 (change summary, all affected ADRs with their Still Valid / Needs Review / Likely Superseded classifications, and recommended actions).
The technical-director reviews whether:
Apply the verdict:
AskUserQuestion with options: Revise the impact assessment / Accept with noted concerns / Discuss furtherFor each ADR marked "Needs Review" or "Likely Superseded", ask the user what to do:
Ask for each ADR in turn:
"ADR-NNNN ([title]) — [status]. What would you like to do?" Options:
- "Mark Superseded (I'll write a new ADR)" — updates ADR status line to
Superseded by: [pending]- "Update in place (minor revision)" — opens the ADR for editing; note what to revise
- "Keep as-is (the change doesn't actually affect this decision)"
- "Skip for now (revisit later)"
For ADRs marked Superseded:
Superseded by ADR-[next number] (pending — see change-impact-[date]-[system].md)If docs/architecture/requirements-traceability.md exists:
## Superseded Requirements
| Date | GDD | Requirement | Changed To | ADRs Affected | Resolution |
|------|-----|-------------|------------|---------------|------------|
| [date] | [gdd] | [old requirement text] | [new requirement text] | ADR-NNNN | [Superseded/Updated/Valid] |
Ask: "May I update the traceability index?"
Ask: "May I write the change impact report to docs/architecture/change-impact-[date]-[system-slug].md?"
The document contains:
If user approved: Verdict: COMPLETE — change impact report saved. If user declined: Verdict: BLOCKED — user declined write.
Based on the resolution decisions, suggest:
/architecture-decision [title] to write the
replacement ADR. Then re-run /propagate-design-change to verify coverage."/architecture-review after all ADRs are updated
to verify the full traceability matrix is still coherent."Applies in collaborative mode (the default). For guided and
autonomous modes, see .claude/docs/automation-modes.md — the rules below
describe what collaborative mode requires, not universal behavior.