Test plan: New Hire Preboarding Console¶
Expands on spec.md's Scope and Acceptance Criteria into concrete scenarios,
grouped by flow area. Several scenarios that the Figma flow (design/figma-export.md)
implies but that current spec.md hasn't confirmed as in-scope are marked blocked —
see spec.md's Open Question 3 (scope reconciliation between the PRD-derived spec and the
25-screen Figma flow) rather than guessing at an answer.
Scenarios¶
Console access & session¶
- Magic-link invitation grants time-bound access.
- Given a candidate receives a gated Guest Console invitation email
- When they open the link within its validity window
-
Then they land in the console scoped to their own pre-boarding record only.
-
Expired or already-used invitation is rejected.
- Given a candidate's invitation link has expired or was already redeemed
- When they attempt to open it
-
Then access is denied with a clear message, and no session is issued.
-
Console access cannot reach another candidate's record.
- Given a candidate is authenticated in the console
- When any request is made (task list, document, preferences)
- Then only that candidate's own pre-boarding record is ever returned or modified — verify explicitly with a second candidate's identifiers, not just the happy path.
HR Concierge / chat-driven canvas¶
- Concierge greets the candidate and frames what's left. (blocked — depends on the
canvas-mode shell in
nova-frontend-litjs, not yet built; see ../software-design/adr-canvas-mode-shell.md) - Given a candidate enters the console for the first time
- When the HR Concierge agent greets them
- Then it states the number of remaining steps, estimated time, and the candidate's start date, consistent with the Figma flow's "Greeted by name" screen.
-
Cannot be verified end-to-end until the canvas-mode shell and its SSE directive (spec.md Dependencies) exist — this Feature builds neither itself.
-
Concierge escalates rather than guessing.
- Given a candidate asks the HR Concierge agent a question it's uncertain about, or one on a sensitive topic
- When the agent evaluates confidence
-
Then it hands off to a named HR Ops contact instead of answering speculatively.
-
Step advances via canvas button, independent of chat. (blocked — same canvas-mode-shell dependency as Scenario 4)
- Given a candidate is on any step's canvas
- When they click the canvas's primary CTA button without typing anything to the agent
- Then the step advances the same way it would if driven by a chat instruction — both paths must converge on the same step-state update.
Task list & sequencing¶
- Task list shows sequence and progress.
- Given a candidate has an active pre-boarding plan
- When they view their task list
-
Then remaining tasks are shown in policy-determined order (e.g. Security Policy and handbook before the employment contract) with clear progress (e.g. "0 of 6 done").
-
Universal-tasks fallback on a rule gap is explained, not silent.
- Given business rules (owned by
hr-admin-deterministic-transactions) don't cover this candidate's worker-type/jurisdiction combination - When their task list is generated
- Then they see universal tasks only, and are not shown an incomplete list without explanation — HR Ops is notified to assign the rest.
Policy read & sign¶
- Policies are read before they can be signed.
- Given a candidate has one or more required policy documents
- When they attempt to sign a policy
-
Then they must have opened/read it first, per the Figma flow's "Policies & NDA — read" step preceding "— sign".
-
Signing the offer and required policies completes those tasks.
- Given a candidate completes e-signature on the offer and each required policy
- When each signature is captured
- Then the corresponding task is marked complete and the candidate sees in-console confirmation — no separate email confirmation required.
Document upload & EDM¶
-
Bulk upload classifies and files documents automatically.
- Given a candidate drops multiple documents at once (e.g. ID for I-9 verification)
- When the system processes them
- Then each is classified and filed into the candidate's personal EDM without manual per-document labelling.
-
Unclassifiable upload is flagged, never silently accepted.
- Given an uploaded document the system cannot confidently classify or validate
- When classification completes
- Then both the candidate and HR Ops are notified and asked for re-upload — it is never filed into the EDM without confirmation.
-
Pending-replacement flag on a temporary document.
- Given a candidate has only a temporary version of a required document (e.g. a temporary license)
- When they upload it with an attached explanatory message
- Then it's filed in the EDM flagged as pending replacement, and HR Ops is notified of the gap rather than it appearing silently incomplete.
Contract renewal (contingent workers)¶
-
Expiring contract triggers a fresh gated re-entry, not persistent access.
- Given a contingent worker's contract is approaching its end date
- When the renewal workflow (owned by
hr-admin-deterministic-transactions) fires - Then the contractor receives an expiry notification and a new, time-bound gated invitation — not standing access to the console.
-
Signing the renewal supersedes the prior contract.
- Given a contractor re-enters via the renewal invitation and signs the renewed contract
- When the signature completes
- Then the renewed contract is auto-stored in the EDM, the prior contract is marked superseded, and the EDM status label updates from expiring to active.
-
Missing/ambiguous contract end date blocks the renewal flow.
- Given a contractor's contract end date is missing or ambiguous in the source record
- When the renewal check runs
- Then HR Ops is alerted instead of a renewal re-entry being generated on an incorrect date.
Cross-cutting¶
- Access window enforcement holds across all task types.
- Given a candidate's gated console access window has expired
- When they attempt any action (view tasks, upload, sign, message)
- Then every action is denied, not just the initial login.
Blocked — pending scope reconciliation (spec.md Open Question 3)¶
The Figma flow (design/figma-export.md) depicts additional steps not yet confirmed as
in-scope for this Feature. These are named here so they're not lost, not because they're
assumed to ship:
- Agent personalization sub-flow (name/look/voice selection for the Concierge agent).
- Equipment (laptop), swag (T-shirt size), and accommodations selection tasks.
- Background-check hand-off/resume via Checkr.
- Live ID-badge preview tied to preferred name.
- Explicit guest → full-employee account-state conversion on the start date.
Out of scope for this pass¶
- HR Admin workspace, deterministic task engine, recruiter hand-off/ATS readiness, the
orchestration layer, and the HR-Ops-facing half of contract renewal — covered by
hr-admin-deterministic-transactions's own test-plan.md, not here. - The actual ATS integration (SmartRecruiters) — this Feature only receives whatever the sibling Feature's endpoint delivers.
- Manager and HRBP readiness/insight views — deferred, not in scope this quarter.
- EDM classification/extraction internals — owned by
worker-document-management.