HR-ATS-Portal/frontend
Talha Ahmed 921d3bf383 Inbox: label CVs the pipeline could not read, on the row itself
A CV goes through four steps before it is usable: the intake classifier
decides it is an application, the PDF text is extracted, an agent matches it
against job posts, and only then is an ATS score written. A PDF with no
readable text stops at step two. It is never matched and never scored.

The list said nothing about any of this. The parse badge existed only in the
detail pane, so a dead row looked exactly like a good one until you clicked
it. Across eleven hundred applications that is not discoverable, and the
candidate whose file happened not to open is simply lost.

The row now carries the badge, with two deliberate limits:

  - Exceptions only. Parsing, Failed and Pending show; Parsed shows nothing.
    A green chip on the overwhelming majority of rows is decoration that
    buries the two states worth spotting, and no badge already reads as fine.
    The detail pane still shows every state, Parsed included, because there
    the row is the whole subject.
  - Email only. Sheet Form applicants have no mailbox attachment to parse.
    The guard is redundant against today's mapFormRow, which sets no
    resumeStatus at all, and is kept as a tripwire rather than a load-bearing
    check — the comment says so rather than overclaiming.

"Failed" on its own tells a recruiter nothing to do next, so each state got a
plain-language tooltip saying what happened and that the attachment is still
there to open by hand. That needed Badge to forward `title`, which it did not.

The colour rule was duplicated inline in the detail pane; it is now one
helper both halves call, so the same state cannot paint two colours.

Four assertions added to inbox-loading.test.mjs. Three are proven sensitive
by reverting the change: removing the badge fails the label and tooltip
checks, and badging every state fails the exceptions-only check. The fourth,
that form rows stay unlabelled, passes even without the guard and is marked
in the test as a tripwire, not proof.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 17:48:28 +05:00
..
.vite/deps update 2026-08-12 13:57:53 +05:00
dist add history 2026-09-02 15:33:20 +05:00
node_modules Mobile responsiveness: fix grid blowouts, calendar clipping, wrapping controls; add viewport test 2026-09-02 15:18:47 +05:00
src Inbox: label CVs the pipeline could not read, on the row itself 2026-09-03 17:48:28 +05:00
.dockerignore push the scoring connect 2026-08-17 14:31:30 +05:00
.env.development Remove `.env.example` and update Docker configurations for environment management 2026-08-24 20:38:15 +05:00
.env.production REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
Dockerfile Update Docker and API configurations for improved job fetching and API proxying 2026-08-20 18:55:49 +05:00
inbox-loading.test.mjs Inbox: label CVs the pipeline could not read, on the row itself 2026-09-03 17:48:28 +05:00
index.html Typography overhaul: Inter Tight display headings, Belleza confined to wordmark 2026-08-27 11:31:19 +05:00
mobile.test.mjs Post-merge: Progress screen mobile fixes, register Progress in smoke harness 2026-09-02 15:32:23 +05:00
nginx.conf Add Progress bar 2026-09-02 13:33:11 +05:00
package-lock.json Brand-styled XLSX exports across Inbox, Candidates and Talent Pool 2026-09-02 20:40:43 +05:00
package.json Inbox: serve the queue from cache instead of re-skeletoning every visit 2026-09-03 16:39:55 +05:00
smoke.test.mjs add history 2026-09-02 15:33:20 +05:00
theme.test.mjs theme updated 2026-08-19 19:34:16 +05:00
token.test.mjs REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
vite.config.js . 2026-09-01 18:25:53 +05:00