Write the PR body using the following template:
## Summary
<diagram, diff-sketch, or tree>
## Evidence
- **Before:** <screenshot/output/failing test run>
**After:** <screenshot/output/passing test run>
## Merge Danger
**Door:** <one-way or two-way>
<optional: description>
**Blast Radius:** <one-word description>
<optional: potential ramifications of merge>
## 各部分
跳过所有开场白,保持文字简短。使用 `GLOSSARY.md` 中用户所在领域的语言。
### 摘要
选择能清楚表达要点的最小视图。
- 使用伪代码展示逻辑或算法:
```text
on(save)
if content is unchanged
return cached result
write new content
return fresh result
- Use a call tree to show runtime control flow:
submitForm
createSession
persistPrompt
launchAgent
navigateToSession
- Use a component tree to show the UI structure, including important state and module boundaries:
<SessionPage> (apps/example/src/routes/session.tsx)
useSessionEvents()
<SessionToolbar>
<RunSkillButton> (packages/ui)
- Use a shallow file tree to show file responsibilities or large-scale refactoring:
src/
├── commands/ # parses user actions
├── sessions/ # owns session state
└── transport/ # sends API requests
- Use Mermaid to show component interactions, control flow, or data flow:
sequenceDiagram
participant User
participant UI
participant Daemon
User->>UI: choose command
UI->>Daemon: send expanded prompt
Daemon-->>UI: stream result
- When the point is the specific change and the surrounding structure already exists, use
diff. Make the shape of the diff match the topic.
For component changes:
<SessionPage>
useSessionEvents()
<SessionToolbar>
+ <RunSkillButton />
<SessionTimeline>
+ <SkillResultCard />
For file layout changes:
src/
├── commands/
+│ └── show-me.ts # expands the slash command
├── sessions/
-└── transport.ts
+└── transport/
+ ├── client.ts
+ └── stream.ts
For call tree or call stack changes:
submitForm
createSession
persistPrompt
+ expandSkillMention
launchAgent
- navigateToSession
+ navigateToSession
+ subscribeToEvents
For state or control flow changes:
on(save)
- write content
+ if content is unchanged
+ return cached result
+ write new content
+ invalidate cache
- When most of the content is new, omitting context would obscure responsibilities or order, or the user needs a copyable target shape, show the full code block:
function expandSkill(command: string): string {
const skillName = command.slice(1);
return `use the ${skillName} skill`;
}
Guidelines
Place each visualization next to the short text it supports. Keep only the calls, files, props, state, and boundaries needed to answer the user's current question or address the current discussion point.
You can use one of them or several of them, but it is usually unlikely that you will use all of them. Use your own judgment, and do not burden the user with too much information.
Evidence
Provide specific evidence that proves the change works, and show before and after.
If the environment is ready and the change involves visual effects, a screenshot is S-tier evidence.
Execution results are A-tier evidence, such as test results and console output. Use pseudocode to show the exact tests that now fail and that will pass.
Merge risk
State whether this is a one-way door or a two-way door. A two-way door can be reversed, but a one-way door cannot. A PR with low rollback cost has lower risk. Changes involving destructive operations or decisions that are hard to reverse are one-way doors.
Blast Radius is the impact or scope that the changes introduced by this PR may cause. Consider all possibilities, such as layout shift, consumer breakage, mobile responsiveness, and so on.