Skip to content

Manual Test Runbook — R2: Production Change Log

Owner: Sagar  |  Time: ~5 min (Parts A + B offline) · +5 min (optional Part C live)  |  Cloud: none · $0

Promotes R2 (apps/change-log/) from 🟦 Code Complete → 🟩 Shipped. Parts A/B are offline ($0). Part C files a change-record ticket via the E7 CLI.


Prerequisites

  • Local tooling: node >= 20, npm, git (Part B live), optionally gh
  • (Part C only) E7 (apps/ticket-platform/) built; tracker creds in env
  • Working directory: apps/change-log

Steps

Part A — build, typecheck, unit tests (offline, ~3 min)

  1. bash cd apps/change-log npm install npm run typecheck npm test

Expected: typecheck clean; 32 tests pass across categorize.test.ts (conventional parse, PR-number extraction, prefix/label categorization), render.test.ts (sections, entry rendering, prepend keeps preamble), collect.test.ts (git-log + gh-pr-list parsing + argv), ticket.test.ts (change-record draft, E7 argv + output parse).

Part B — offline + live changelog (~2 min, $0)

  1. Offline, from the sample PR list:
npm run build
node dist/index.js --input examples/prs.sample.json --release v0.59 --out-dir ./out
cat out/CHANGELOG.generated.md

Expected: 6 changes grouped into Features / Security / Tests / Other; the feat(J4): etc. prefixes stripped, (#N) + author shown; Implementing new tasks (no prefix, no label) lands in Other.

  1. Live, from this repo's own history:
node dist/index.js --range HEAD~6..HEAD --release v0.58 --out-dir ./out
cat out/CHANGELOG.generated.md

Expected: the last 6 commits categorized from their real subjects.

  1. Prepend mode (in place) keeps the preamble:
printf '# Changelog\n\n> blurb\n\n## v0.57 — 2026-06-04\n\n### Features\n\n- old\n' > /tmp/cl.md
node dist/index.js --input examples/prs.sample.json --release v0.59 --prepend /tmp/cl.md
head -6 /tmp/cl.md   # "# Changelog" + "> blurb" still at top, v0.59 below, v0.57 kept

Part C — E7 change-record ticket (~5 min)

  1. Confirm the I5/R2 → E7 contract with E7's dry-run CLI:
( cd ../ticket-platform && npm install && npm run build )
node dist/index.js --input examples/prs.sample.json --release v0.59 \
  --change-record dry-run --out-dir ./out

Expected: runs clean; changelog.json written. (dry-run files nothing.)

  1. File a real change-record ticket (GitHub Issues shown):
export GITHUB_TOKEN=node dist/index.js --range v0.57..HEAD --release v0.58 \
  --change-record github --repo <org>/<test-repo> \
  --ticket-cmd "node ../ticket-platform/dist/index.js" --out-dir ./out

Expected: one [change-record] v0.58: N change(s) issue with the rendered changelog as the body. Re-run → the same issue is updated (dedupe key change-record=v0.58), no duplicate.


Pass criteria

  • Part A — typecheck clean; 32 tests pass
  • Part B — sample groups into the right sections; live range categorizes real commits; prepend keeps the preamble
  • Part C — change-record dry-run runs; (optional) a real ticket is filed and a re-run updates it

Failure mode

Commits not following the conventional-commit standard fall into "Other" — mitigated by --source github (label-based categorization). Documented in the README.

Cost impact

$0 — pure orchestration; read-only against git/GitHub. No resources created.

Removal path

Delete apps/change-log/. Nothing external is provisioned (a filed change-record ticket lives in the tracker and is managed there).


Sign-Off

Field Value
Part A (unit tests) ☐ PASS
Part B (offline + live + prepend) ☐ PASS
Part C (E7 change-record) ☐ PASS / ☐ skipped
Tester
Date
Result ☐ PASS