Red-to-green demo
One bug, the whole loop, no credentials
Every panel below is generated by the real StepStitch service modules — the same scrubber, scorer, compiler, draft adapters, and verdict logic the live product runs. There is no database and no ServiceNow/Salesforce/GitHub/cloud credential anywhere. Drafts and the pull request are dry-run previews; nothing is ever sent.
- 1. User reports a bug→
- 2. StepStitch captures structural footsteps only→
- 3. The server scrubber proves no NPI persisted→
- 4. A replayability score tells engineering if the bug is reproducible→
- 5. StepStitch generates a Playwright repro→
- 6. A ticket/PR draft is created (dry-run — never sent)→
- 7. CI reports pre-fix failed and post-fix passed→
- 8. StepStitch records confirmed_fixed in the regression corpus
User reports a bug
User-reported issue: HTTP 500 on /accounts/:id/transfer
Forbidden fields the SDK sent (placeholders only)
Synthetic placeholders ONLY (no real NPI). Present to demonstrate the scrubber dropping forbidden fields and redacting PII-shaped text.
Structural footsteps only
Visited route
/accounts/:id
Visited route
/accounts/:id/transfer
Interaction
[data-testid=payee-select]
Interaction
[data-testid=amount-input]
Interaction
[data-testid=review-transfer]
API error
/accounts/:id/transfer
The server scrubber proves no NPI persisted
Fields dropped or redacted before storage
explanation → Transfer to account [redacted:number] failed; reach me at [redacted:email] or [redacted:ssn].
Never captured
- Screenshots / video
- Input values (what a user typed)
- Page text / DOM content
- Raw URLs (templated to routes)
- Request / response bodies
- Raw frontend logs / console messages / stack traces
- Network headers / cookies
- SSNs, account/card numbers, emails, phone numbers (redacted from free text)
Replayability score
6
steps
3
interactive
3
stable selectors
- templated_route_needs_fixture
- templated_route_needs_fixture
- templated_route_needs_fixture
- templated_route_needs_fixture
- templated_route_needs_fixture
- templated_route_needs_fixture
Generated Playwright repro
import { test, expect } from '@playwright/test';
// StepStitch autogenerated reproduction (trace: trc_demo_red_to_green_0001)
// Replayability: 0.76 (grade B)
// ⚠ templated_route_needs_fixture [step 0]: Route '/accounts/:id' is templated; supply a concrete fixture id.
// ⚠ templated_route_needs_fixture [step 1]: Route '/accounts/:id/transfer' is templated; supply a concrete fixture id.
// ⚠ templated_route_needs_fixture [step 2]: Route '/accounts/:id/transfer' is templated; supply a concrete fixture id.
// ⚠ templated_route_needs_fixture [step 3]: Route '/accounts/:id/transfer' is templated; supply a concrete fixture id.
// ⚠ templated_route_needs_fixture [step 4]: Route '/accounts/:id/transfer' is templated; supply a concrete fixture id.
// ⚠ templated_route_needs_fixture [step 5]: Route '/accounts/:id/transfer' is templated; supply a concrete fixture id.
// NOTE: no credentials are embedded. Wire authentication to a synthetic
// test account before running against a protected route.
test('StepStitch reproduction', async ({ page }) => {
// TODO: authenticate as a synthetic test user if the flow requires it.
// [NAVIGATION] /accounts/:id
// TODO: substitute id(s) in templated route '/accounts/:id'
await page.goto('http://localhost:3000/accounts/:id');
// [NAVIGATION] /accounts/:id/transfer
// TODO: substitute id(s) in templated route '/accounts/:id/transfer'
await page.goto('http://localhost:3000/accounts/:id/transfer');
// [CLICK] /accounts/:id/transfer
await page.locator('[data-testid=payee-select]').click();
// [CLICK] /accounts/:id/transfer
await page.locator('[data-testid=amount-input]').click();
// [CLICK] /accounts/:id/transfer
const response0 = page.waitForResponse(
(r) => r.url().includes('/api/accounts/') && r.request().method() === 'POST',
);
await page.locator('[data-testid=review-transfer]').click();
// expected API failure: /api/accounts/:id/transfers (HTTP 500)
const res0 = await response0;
expect(res0.status(), 'no server error from /api/accounts/:id/transfers').toBeLessThan(500);
});
Red while broken, green once fixed.
Ticket & PR drafts — created, never sent
servicenow
8 flat fields · correlation id linked
salesforce
10 flat fields · correlation id linked
genesys
13 flat fields · correlation id linked
GitHub
issue + dry-run PR on stepstitch/trace-trc_demo_red_to_green_0001
dry-run: StepStitch never merges — a human reviews and merges.
CI reports red, then green
confirmed_fixed derives only from pre_passed=false + post_passed=true.
Recorded in the regression corpus
The fix is now durable regression evidence: if this bug ever returns, the committed Playwright test goes red again. That is the moat — a recording cannot do this.