train S2: merge #3881 at 8b293231fe v1.93.24.0

This commit is contained in:
garrytan committed 2000-01-01 00:00:00 +00:00
commit db8ece37dc
12 files changed
+60 -81

No files matched your search

+5 -13
View File
@@ -521,7 +521,8 @@ chooses it in item 2 and ALREADY_BUMPED derives it in item 1.
runs items 1 and 3–5; each decision left to you is a `STOP:` naming its rerun flag
(`--bump`, `--accept-incomplete`, `--version <v>`, `--keep-current`, `--answer`).
`ship: queue_mode stamp-at-merge` replaces items 1–4.
`VERSION: skipped` or `VERSION: <v> kept (…; no write)` ends Step 12 with
`NEW_VERSION` unset: Step 13 follows its `NEXT:`; Steps 18 and 20 take NO_VERSION's branch.
1. **Classify state** — pure reader, never writes:
```bash
@@ -642,19 +643,10 @@ Make bisectable commits; if already committed, continue to Step 16. Never create
migrations may stand alone. Under 50 lines across fewer than 4 files may be one commit.
2. Order dependencies first: infrastructure → models/services → controllers/views.
Each commit works alone (no broken imports or missing code).
Group VERSION + CHANGELOG + TODOS.md after the feature commits.
3. Use `<type>: <summary>` (feat/fix/chore/refactor/docs) and a brief body; fixing a
user-named issue adds a `Fixes: #<n>` trailer. Only the final
VERSION/CHANGELOG commit gets the release version and co-author trailer. No Git tag:
```bash
git commit -m "$(cat <<'EOF'
chore: bump version and changelog (vX.Y.Z.W)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
```
user-named issue adds a `Fixes: #<n>` trailer. Leave VERSION, CHANGELOG/fragment, TODOS.md
and the digest uncommitted: Step 16's `finish` commits them last with
`--trailer 'Co-Authored-By: Claude <noreply@anthropic.com>'`. Do not add a Git tag.
---
+5 -13
View File
@@ -520,7 +520,8 @@ chooses it in item 2 and ALREADY_BUMPED derives it in item 1.
runs items 1 and 3–5; each decision left to you is a `STOP:` naming its rerun flag
(`--bump`, `--accept-incomplete`, `--version <v>`, `--keep-current`, `--answer`).
`ship: queue_mode stamp-at-merge` replaces items 1–4.
`VERSION: skipped` or `VERSION: <v> kept (…; no write)` ends Step 12 with
`NEW_VERSION` unset: Step 13 follows its `NEXT:`; Steps 18 and 20 take NO_VERSION's branch.
1. **Classify state** — pure reader, never writes:
```bash
@@ -641,19 +642,10 @@ Make bisectable commits; if already committed, continue to Step 16. Never create
migrations may stand alone. Under 50 lines across fewer than 4 files may be one commit.
2. Order dependencies first: infrastructure → models/services → controllers/views.
Each commit works alone (no broken imports or missing code).
Group VERSION + CHANGELOG + TODOS.md after the feature commits.
3. Use `<type>: <summary>` (feat/fix/chore/refactor/docs) and a brief body; fixing a
user-named issue adds a `Fixes: #<n>` trailer. Only the final
VERSION/CHANGELOG commit gets the release version and co-author trailer. No Git tag:
```bash
git commit -m "$(cat <<'EOF'
chore: bump version and changelog (vX.Y.Z.W)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
```
user-named issue adds a `Fixes: #<n>` trailer. Leave VERSION, CHANGELOG/fragment, TODOS.md
and the digest uncommitted: Step 16's `finish` commits them last with
`--trailer 'Co-Authored-By: Claude <noreply@anthropic.com>'`. Do not add a Git tag.
---
+5 -13
View File
@@ -520,7 +520,8 @@ chooses it in item 2 and ALREADY_BUMPED derives it in item 1.
runs items 1 and 3–5; each decision left to you is a `STOP:` naming its rerun flag
(`--bump`, `--accept-incomplete`, `--version <v>`, `--keep-current`, `--answer`).
`ship: queue_mode stamp-at-merge` replaces items 1–4.
`VERSION: skipped` or `VERSION: <v> kept (…; no write)` ends Step 12 with
`NEW_VERSION` unset: Step 13 follows its `NEXT:`; Steps 18 and 20 take NO_VERSION's branch.
1. **Classify state** — pure reader, never writes:
```bash
@@ -644,19 +645,10 @@ Make bisectable commits; if already committed, continue to Step 16. Never create
migrations may stand alone. Under 50 lines across fewer than 4 files may be one commit.
2. Order dependencies first: infrastructure → models/services → controllers/views.
Each commit works alone (no broken imports or missing code).
Group VERSION + CHANGELOG + TODOS.md after the feature commits.
3. Use `<type>: <summary>` (feat/fix/chore/refactor/docs) and a brief body; fixing a
user-named issue adds a `Fixes: #<n>` trailer. Only the final
VERSION/CHANGELOG commit gets the release version and co-author trailer. No Git tag:
```bash
git commit -m "$(cat <<'EOF'
chore: bump version and changelog (vX.Y.Z.W)
Co-Authored-By: OpenAI Codex <noreply@openai.com>
EOF
)"
```
user-named issue adds a `Fixes: #<n>` trailer. Leave VERSION, CHANGELOG/fragment, TODOS.md
and the digest uncommitted: Step 16's `finish` commits them last with
`--trailer 'Co-Authored-By: OpenAI Codex <noreply@openai.com>'`. Do not add a Git tag.
---
+5 -13
View File
@@ -522,7 +522,8 @@ chooses it in item 2 and ALREADY_BUMPED derives it in item 1.
runs items 1 and 3–5; each decision left to you is a `STOP:` naming its rerun flag
(`--bump`, `--accept-incomplete`, `--version <v>`, `--keep-current`, `--answer`).
`ship: queue_mode stamp-at-merge` replaces items 1–4.
`VERSION: skipped` or `VERSION: <v> kept (…; no write)` ends Step 12 with
`NEW_VERSION` unset: Step 13 follows its `NEXT:`; Steps 18 and 20 take NO_VERSION's branch.
1. **Classify state** — pure reader, never writes:
```bash
@@ -646,19 +647,10 @@ Make bisectable commits; if already committed, continue to Step 16. Never create
migrations may stand alone. Under 50 lines across fewer than 4 files may be one commit.
2. Order dependencies first: infrastructure → models/services → controllers/views.
Each commit works alone (no broken imports or missing code).
Group VERSION + CHANGELOG + TODOS.md after the feature commits.
3. Use `<type>: <summary>` (feat/fix/chore/refactor/docs) and a brief body; fixing a
user-named issue adds a `Fixes: #<n>` trailer. Only the final
VERSION/CHANGELOG commit gets the release version and co-author trailer. No Git tag:
```bash
git commit -m "$(cat <<'EOF'
chore: bump version and changelog (vX.Y.Z.W)
Co-Authored-By: Factory Droid <droid@users.noreply.github.com>
EOF
)"
```
user-named issue adds a `Fixes: #<n>` trailer. Leave VERSION, CHANGELOG/fragment, TODOS.md
and the digest uncommitted: Step 16's `finish` commits them last with
`--trailer 'Co-Authored-By: Factory Droid <droid@users.noreply.github.com>'`. Do not add a Git tag.
---
@@ -185,6 +185,22 @@ describe('ship/SKILL.md — Plan Completion gate invariants', () => {
expect(entry).not.toMatch(/Step 15\.[012]/);
});
test('one owner per release commit and a defined result for a version Step 12 does not write', () => {
// Value: protects=the ship workflow judge's 6/6 cited conflict (Step 15 committed release metadata by hand while Step 16 finish also commits it) and its 3/6 undefined stamp-at-merge/kept result; fails_when=Step 15 regains a manual release commit or Step 12 drops the skipped/kept route; why_new=no pin covered commit ownership; seam=none; no_claim=judge scores
const entry = fs.readFileSync(path.join(SHIP_DIR, 'SKILL.md'), 'utf8');
const commit = entry.slice(entry.indexOf('## Step 15:'), entry.indexOf('## Step 16:'));
expect(commit).not.toContain('git commit');
expect(commit.replace(/\s+/g, ' ')).toMatch(/TODOS\.md and the digest uncommitted: Step 16's `finish` commits them last/);
const finish = entry.slice(entry.indexOf('## Step 16:'), entry.indexOf('### 1. Finish writers'));
expect(finish).toContain("makes Step 15's item-3 commit");
const version = entry.slice(entry.indexOf('## Step 12:'), entry.indexOf('1. **Classify state**')).replace(/\s+/g, ' ');
expect(version).not.toContain('replaces items 1–4');
expect(version).toContain('`VERSION: skipped`');
expect(version).toContain('`VERSION: <v> kept (…; no write)` ends Step 12 with `NEW_VERSION` unset');
expect(version).toContain('ALREADY_BUMPED derives it in item 1');
expect(version).toContain("Steps 18 and 20 take NO_VERSION's branch");
});
test('a rejected push stops publication and routes changed content back through verification', () => {
const entry = fs.readFileSync(path.join(SHIP_DIR, 'SKILL.md'), 'utf8');
const push = entry.slice(entry.indexOf('## Step 17:'), entry.indexOf('## Step 20:'));
@@ -0,0 +1,4 @@
{
"bytes": 4,
"why": "Steps 12 and 15 name who makes the release commit and what a skipped or kept version leaves for Steps 13, 18 and 20 (ship workflow judge flake, GSTA-253)"
}