Validation Report
Scope
This validation report covers the first evidence-based pivot release for the manufacturing vertical.
Checked in this release
- Typed requirement extraction from pasted JD text
- Typed requirement extraction from LinkedIn job pages
- Requirement-by-requirement evidence mapping from CV text
- Grouped result rendering in the public UI
- Evidence Map rendering
- JD Quality Review rendering
- Manufacturing benchmark scaffolding and starter fixtures
- Product and quality telemetry capture
- New parse endpoints:
/api/jd/parse/api/cv/parse/api/jd/lint/api/analytics/summary
- Backward-compatible fields still present in
/api/analyze
What the release now proves
- The product no longer depends on flat keyword matching as its primary output model.
- Requirements are grouped and typed.
- Each requirement can carry evidence, support level, and confidence.
- The final score is decomposed and secondary.
- The UI exposes uncertainty and JD quality warnings.
Commands executed successfully
npm run lintnpm run buildnpm run benchmark:manufacturingPOST /api/analyzeagainst a pasted Hebrew factory-engineer JDPOST /api/scrapeagainst LinkedIn job URLhttps://www.linkedin.com/jobs/view/4398015632/
Local runtime checks
GET /health- returned
product=Pulse CV - Evidence-Based Hiring Intelligence - returned
scoringMode=evidence-based-deterministic - returned
vertical=manufacturing
- returned
GET /- returned HTTP 200 locally
POST /api/jd/parse- returned typed requirement groups for a manufacturing JD
POST /api/analyze- returned decomposed scoring, evidence map, JD quality warnings, and candidate/recruiter recommendations
GET /api/analytics/summary- returned telemetry summary JSON
Behavior checks confirmed
- Strong manufacturing-fit sample produced:
- explicit tool matches (
AutoCAD,SolidWorks) - explicit methods/domain matches (
Continuous Improvement,Quality Management,Manufacturing) - decomposed score instead of flat ATS-only output
- explicit tool matches (
- Partial-fit industrial leader sample stayed meaningfully lower than the strong-fit case
- Maintenance-heavy sample against manufacturing-engineer JD stayed low-fit and exposed real tool/domain gaps
- Seniority extraction no longer emits a flat
individual_contributorrequirement for non-leadership roles - Must-have calibration is stricter:
- role title and years-experience remain mandatory by default
- tools, education, and language only become must-haves when the JD wording actually marks them as required
- broad domain/methodology signals are no longer auto-promoted to must-have unless the source line carries explicit requirement context
- AI no longer overrides deterministic recommendations or bullet rewrites
- AI no longer overrides the deterministic profile summary / tailored bio in the main payload
Remaining weaknesses
- Manufacturing pack is curated and useful, but still compact rather than benchmark-complete.
- Recruiter and hiring manager views are beta-level surfaces, not separate polished products yet.
- AI rewrite quality still depends on provider availability.
- Benchmark scaffolding now exists, but a full human-reviewed corpus is still a next-step task.
Benchmark harness
- Script:
npm run benchmark:manufacturing - Fixtures:
benchmark/manufacturing/cases.json - Current benchmark asserts:
- primary domain detection
- expected role family where relevant
- score range guardrails
- matched requirement expectations
- missing requirement expectations
Telemetry added
- Product events:
analysis.startedjd.parsecv.parsefeedback.correction
- Quality events:
analysis.completedanalysis.fallbackjd.lint
- Summary endpoint:
GET /api/analytics/summary