# TE Factory run

Job: b2f46ee4-a3ad-47d9-941b-0112d265aa0c

## Request

Change the “+ Add candidate” button in the dashboard header to say “+
New candidate”.

Do not change its behavior, styling, location, or any unrelated UI.
Clicking it must continue opening the existing candidate form.

This is presentation-only and requires no database schema or migration
changes. Update any affected automated test and verify the existing
candidate workflow still works.

## Plan

1. User-visible behavior  
   In the dashboard header, change the button label from “+ Add candidate” to “+ New candidate”. Its click handler will remain unchanged, so it continues opening the existing “Add candidate” form.

2. Frontend changes  
   Update only the button text in [components/recruiting-app.tsx](/vercel/sandbox/target/components/recruiting-app.tsx:123). Preserve its `primary` class, header placement, markup, stable header marker, and `setCandidateEditor(emptyCandidate(data.jobs))` handler. No CSS changes.

3. Backend and Convex changes  
   None. The candidate form, POST API, data layer, and Convex candidate mutation remain unchanged.

4. Data migration  
   No existing records need a versioned migration: this is presentation-only. No widened schema, snapshot/stash, transform, rollback, reapply, or count/invariant validation changes apply; do not modify the schema or migration configuration.

5. Tests and browser verification  
   Update the dashboard button locator in [e2e/factory-preview.spec.ts](/vercel/sandbox/target/e2e/factory-preview.spec.ts:18) to expect/click “New candidate”; retain the existing dialog assertion as “Add candidate.” Run the configured typecheck, unit tests, build, and Playwright preview workflow. The existing E2E flow verifies that opening the form still permits candidate creation, edit, stage change, note creation, and deletion.

6. Risks or questions  
   No blocking questions or unsafe changes identified. The work is isolated to one text node and one E2E expectation, and can safely run in the required isolated preview.

## Migration

Migration applied: {"affected":0,"finalCounts":{"candidates":7,"jobs":3,"notes":4,"users":1},"sourceCounts":{"candidates":7,"jobs":3,"notes":4,"users":1},"status":"applied","version":"0.1.0"}

Migration validation: {"counts":{"candidates":7,"jobs":3,"notes":4,"users":1},"missing":[],"status":"applied","valid":true,"version":"0.1.0"}

Rollback:
Migration rolled back: {"idMaps":{"candidates":7,"jobs":3,"notes":4,"users":1},"restored":{"candidates":7,"jobs":3,"notes":4,"users":1},"status":"rolled_back","version":"0.1.0"}

Rollback validation:
Rollback validation: {"counts":{"candidates":7,"jobs":3,"notes":4,"users":1},"mismatches":[],"status":"rolled_back","valid":true,"version":"0.1.0"}

Reapply:
Migration reapplied: {"affected":0,"finalCounts":{"candidates":7,"jobs":3,"notes":4,"users":1},"sourceCounts":{"candidates":7,"jobs":3,"notes":4,"users":1},"status":"applied","version":"0.1.0"}

Final validation:
Migration validation: {"counts":{"candidates":7,"jobs":3,"notes":4,"users":1},"missing":[],"status":"applied","valid":true,"version":"0.1.0"}


## Quality guardrails

Changed files: 2
Total line churn: 4
- components/recruiting-app.tsx: +1 -1
- e2e/factory-preview.spec.ts: +1 -1

Visual regression: {"status":"passed","changedPixelRatio":0.00028858024691358027,"missingStableElements":[],"stableElementCount":8,"diffPath":"/tmp/factory-ui-diff.png"}

Independent review: Diff is limited to the approved dashboard button text and its E2E locator. The class, placement, stable marker, click handler, and existing “Add candidate” dialog assertion remain unchanged; no backend, schema, migration, or unrelated changes are present.
