Fix release prep checks
This commit is contained in:
+8
-12
@@ -300,8 +300,8 @@ No prefix (`v`), no extra text. The parser matches the first `## X.Y.Z` line to
|
|||||||
|
|
||||||
## Changelog ownership
|
## Changelog ownership
|
||||||
|
|
||||||
- **Only Claude should write changelog entries.**
|
- **The agent running the stable release writes the changelog entry.** Do not hand the changelog to another model or agent. The release agent has the release context and owns the final wording.
|
||||||
- If you are Codex and a stable release needs a changelog entry, launch a Claude agent with Paseo to draft it, then review and commit the result.
|
- Draft the entry from the stable-to-stable diff, review it against the changelog policy below, show it to the user, and wait for approval before committing it.
|
||||||
|
|
||||||
## Changelog voice
|
## Changelog voice
|
||||||
|
|
||||||
@@ -380,19 +380,15 @@ Entries within each section (Added, Improved, Fixed) are ordered by user impact:
|
|||||||
|
|
||||||
## Pre-release sanity check
|
## Pre-release sanity check
|
||||||
|
|
||||||
Before cutting a **stable** release, run a Codex review of the diff as a last line of defence against shipping bugs. Skip this for betas — the beta itself is the smoke test, and gating each beta on a code review defeats the point of using betas as fast release candidates.
|
Before cutting a **stable** release, the release agent reviews the diff as a last line of defence against shipping bugs. Skip this for betas — the beta itself is the smoke test, and gating each beta on a code review defeats the point of using betas as fast release candidates.
|
||||||
|
|
||||||
Load the `paseo` skill and launch a **Codex 5.4** agent with a prompt like:
|
Review the diff between the latest release tag and `HEAD`. Focus on:
|
||||||
|
|
||||||
> Review the diff between the latest release tag and HEAD. Focus on:
|
1. **Breaking changes** — especially in the WebSocket protocol, agent lifecycle, and any server↔client contract.
|
||||||
>
|
2. **Backward compatibility** — the important direction is old app clients talking to newly updated daemons. Users update desktop and daemon first, then keep running the old app for a while. Flag anything that breaks old clients against new daemons or requires both sides to update in lockstep.
|
||||||
> 1. **Breaking changes** — especially in the WebSocket protocol, agent lifecycle, and any server↔client contract.
|
3. **Regressions** — anything that looks like it could break existing functionality.
|
||||||
> 2. **Backward compatibility** — the important direction is old app clients talking to newly updated daemons. Users update desktop and daemon first, then keep running the old app for a while. Flag anything that breaks old clients against new daemons or requires both sides to update in lockstep.
|
|
||||||
> 3. **Regressions** — anything that looks like it could break existing functionality.
|
|
||||||
>
|
|
||||||
> Diff: `git diff <latest-release-tag>..HEAD`
|
|
||||||
|
|
||||||
The agent's job is a deep sanity check, not a full code review. If it flags anything, investigate before proceeding.
|
Use `git diff <latest-release-tag>..HEAD` as the review input. This is a deep sanity check, not a full code review. If anything looks risky, investigate before proceeding and surface the finding to the user.
|
||||||
|
|
||||||
## Changelog scope
|
## Changelog scope
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,18 @@ function someRowContains(text: string): boolean {
|
|||||||
return dumpRows().some((r) => r.text.includes(text));
|
return dumpRows().some((r) => r.text.includes(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderSnapshotCommitted(runtime: TerminalEmulatorRuntime, state: TerminalState) {
|
||||||
|
return new Promise<void>((resolve) => {
|
||||||
|
runtime.renderSnapshot({ state, onCommitted: resolve });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeCommitted(runtime: TerminalEmulatorRuntime, data: Uint8Array) {
|
||||||
|
return new Promise<void>((resolve) => {
|
||||||
|
runtime.write({ data, onCommitted: resolve });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Build a server-style snapshot of one long pino line that the SERVER soft-wrapped
|
// Build a server-style snapshot of one long pino line that the SERVER soft-wrapped
|
||||||
// at `cols`, represented as multiple grid rows (exactly what the daemon stores in
|
// at `cols`, represented as multiple grid rows (exactly what the daemon stores in
|
||||||
// its headless xterm and ships in a snapshot).
|
// its headless xterm and ships in a snapshot).
|
||||||
@@ -122,12 +134,12 @@ describe("terminal resize reflow repro (Paseo terminal)", () => {
|
|||||||
|
|
||||||
// 1) Mid-stream snapshot arrives (server overflowed 256KB). It carries the
|
// 1) Mid-stream snapshot arrives (server overflowed 256KB). It carries the
|
||||||
// long line wrapped at the server width as separate grid rows.
|
// long line wrapped at the server width as separate grid rows.
|
||||||
m.runtime.renderSnapshot({ state: buildWrappedSnapshot(narrowCols) });
|
await renderSnapshotCommitted(m.runtime, buildWrappedSnapshot(narrowCols));
|
||||||
await waitFor(() => someRowContains('"seq":1'));
|
await waitFor(() => someRowContains('"seq":1'));
|
||||||
|
|
||||||
// 2) Normal post-snapshot streaming resumes (autowrap on -> soft-wrapped).
|
// 2) Normal post-snapshot streaming resumes (autowrap on -> soft-wrapped).
|
||||||
for (let seq = 90; seq <= 96; seq++) {
|
for (let seq = 90; seq <= 96; seq++) {
|
||||||
m.runtime.write({ data: encodeTerminalOutput(pinoLine(seq)) });
|
await writeCommitted(m.runtime, encodeTerminalOutput(pinoLine(seq)));
|
||||||
}
|
}
|
||||||
await waitFor(() => someRowContains('"seq":96'));
|
await waitFor(() => someRowContains('"seq":96'));
|
||||||
|
|
||||||
|
|||||||
@@ -256,6 +256,7 @@ test("advertises client capabilities in hello", async () => {
|
|||||||
capabilities: {
|
capabilities: {
|
||||||
custom_mode_icons: true,
|
custom_mode_icons: true,
|
||||||
reasoning_merge_enum: true,
|
reasoning_merge_enum: true,
|
||||||
|
terminal_reflowable_snapshot: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user