Skip to content

Manual Test Runbook — E7: TicketPlatform Adapters

Owner: Sagar  |  Time: ~5 min (Part A offline) · +10 min per platform (Part B live)  |  Cloud: none · $0

Promotes E7 (apps/ticket-platform/) from 🟦 Code Complete → 🟩 Shipped. Part A is 100% offline (typecheck + jest + dry-run CLI). Part B is an optional live upsert drill per platform you have an account for.


Prerequisites

  • Local tooling: Node ≥ 20, npm
  • (Part B only) A token/PAT for the platform under test (GitHub / Jira / Linear / ADO)
  • Working directory: apps/ticket-platform

Steps

Part A — typecheck + unit suite + dry-run CLI (offline, ~5 min)

  1. Install + typecheck:
cd apps/ticket-platform
npm install
npm run typecheck

Expected: clean (no TS errors).

  1. Run the unit suite:
npm test

Expected: 6 suites / 26 tests pass. Coverage: the shared marker upsert (create-when-absent / update-when-marker-matches / no-match-other-key) + each adapter's HTTP request mapping (GitHub REST, Jira v2 JQL+create, Linear GraphQL, ADO WIQL+JSON-Patch) + the factory's env resolution and missing-credential errors.

  1. Dry-run CLI (creates nothing):
npm run build
printf '## Drift on payments-prod\n\nstorage changed.\n' > /tmp/e7-body.md
node dist/index.js --platform dry-run \
  --title "[drift] payments-prod" --body-file /tmp/e7-body.md \
  --labels snowops,drift --dedupe-key stack=payments-prod
echo "exit: $?"

Expected: prints the body, exit: 0. Then confirm the arg guards: node dist/index.js --platform github --body x--title is required, exit 1.

Part B — live upsert drill (optional, per platform, ~10 min, $0)

Run against a throwaway repo/project/team. The point is to prove idempotency: the second run updates the same ticket, it does not open a duplicate.

  1. Export the platform's credentials (see README.md table), then run twice with the same --dedupe-key. Example for GitHub:
export GITHUB_REPOSITORY=you/sandbox GITHUB_TOKEN=ghp_...
node dist/index.js --platform github --label snowops \
  --title "[e7-drill] demo" --body-file /tmp/e7-body.md \
  --labels snowops --dedupe-key drill=e7
# run the exact same command again:
node dist/index.js --platform github --label snowops \
  --title "[e7-drill] demo" --body-file /tmp/e7-body.md \
  --labels snowops --dedupe-key drill=e7

Expected: first run logs opened … → <url>; second run logs updated … → <url> pointing at the same ticket. Confirm in the platform UI that only one open ticket exists. Repeat for jira / linear / ado as accounts allow.

  1. Close/delete the drill ticket(s).

Sign-Off

Field Value
Part A (typecheck + 26 tests + dry-run CLI) ☐ PASS
Part B — github ☐ PASS / ☐ skipped
Part B — jira ☐ PASS / ☐ skipped
Part B — linear ☐ PASS / ☐ skipped
Part B — ado ☐ PASS / ☐ skipped
Tester
Date
Result ☐ PASS