# Signal Interviews pilot

Signal v0.8 · 26 September 2026

The fifth connected review surface adds an interview agenda, preparation, structured scorecards and a simulated time change. It reuses the Signal components and the existing fictional candidate/application identities. This is a reference pilot, not a production route migration.

## Open

- [Hosted agenda](https://haya-design-review.pages.dev/design-system?pilot=interviews&chrome=0)
- [Hosted feedback task](https://haya-design-review.pages.dev/design-system?pilot=interviews&interview=signal-review-interview-4&chrome=0)
- Local: `http://127.0.0.1:5191/design-system.html?pilot=interviews`
- Development: `npm run dev -- --host 127.0.0.1 --port 5175`, then `/design-system.html?pilot=interviews`
- Add `chrome=0` to hide the review-state controls.

The portable folder is `output/haya-interactive-review`; the shareable archive is `output/Haya-Interactive-Review.zip`. Both include this guide. Claude needs a browser tool and a server running in the same environment as that browser to test the interactions.

## Sample answer key

The dates represent a fixed snapshot on 26 September 2026. They do not move with the system clock. Defaults are Africa/Lagos and Upcoming.

| Interview | Person / role | State | Lagos time | Scorecards |
| --- | --- | --- | --- | --- |
| `signal-review-interview-1` | Tara Ahmed / Frontend engineer | Upcoming | 28 Sep, 10:00–10:45 | 0 of 2 |
| `signal-review-interview-2` | Nina Mensah / Frontend engineer | Upcoming | 28 Sep, 14:00–15:00 | 0 of 2 |
| `signal-review-interview-3` | Amara Okafor / Senior product designer, enterprise experience | Upcoming | 29 Sep, 11:00–12:00 | 0 of 2 |
| `signal-review-interview-4` | Maya Bello / People operations lead | Feedback due | 21 Sep, 11:00–12:00 | 1 of 2 |
| `signal-review-interview-5` | Jordan Nwosu / Product designer | Completed | 18 Sep, 14:00–15:00 | 3 of 3 |
| `signal-review-interview-6` | Daniel Adeyemi / Platform engineer | Cancelled | 23 Sep, 15:00–15:45 | No feedback required |

Maya’s feedback was due 22 September and is shown as four days overdue. It is feedback lateness, separate from the application-stage overdue marker in My work and Candidates. Amara’s session is tied to application 5, not her separate Design systems lead application 9.

Search matches person, role and interview title. Status totals reflect the search, and a clear action resets to All. All contains six sessions in ascending date order; no pagination is needed for this complete sample. Status and time zone are restored through interview links; free-text search resets on navigation.

## Review tasks

1. Find the two upcoming Frontend engineer conversations. Change the time zone from Lagos to New York. Tara’s 10:00 becomes 05:00; it is the same instant.
2. Open Nina’s interview. Read the preparation and interviewer list. Open her application, then her candidate profile, and use Back to interview. The interview, agenda filter and time zone should be retained. The primary Interviews navigation is connected from all four earlier pilots.
3. Change Nina’s time. Submit an empty reason to inspect the inline error and focus. Choose a sample slot, enter a reason and update. The 60-minute duration remains intact; the saved reason is visible. Reopen and cancel a change to verify the previous time and focus return.
4. Open Feedback due → Maya. Try submitting an empty scorecard. The first rating receives focus and a single status announces the error. Each criterion requires a rating and evidence; whitespace-only evidence fails. “Not observed” is valid with an explanation. Save a draft, switch Preparation/Feedback and verify the values remain.
5. Submit the completed scorecard. It becomes read-only, the count changes to 2 of 2, the heading receives focus, and Alex Morgan’s feedback becomes readable. Open and close it with Escape; focus returns to Read. No application stage changes.
6. Open Jordan under Completed. All three received feedback summaries are readable; there is no scorecard submission or rescheduling action. Upcoming sessions do not accept feedback. Cancelled sessions require none.
7. Check review states: Loading, Empty, Request error and Permission denied. Retry should focus the persistent Reset sample button. An unknown interview ID shows Interview not found, never a different person.
8. Repeat on a phone and in dark/compact. The status tabs wrap; the page must not scroll sideways. Schedule and interviewers sit above the workspace under 1100px. Go to feedback/preparation brings the content into view and transfers keyboard focus. Dialogs and sheets inherit the active theme.

## Behaviour and ownership

- `src/design-system/reference/InterviewsPilot.tsx` owns composition and local review state; `interview-data.ts` owns six fictional sessions. It reads existing application fixtures rather than duplicating names and role identities.
- Shared controls come from `src/components/ui`; layout comes from the scoped `interviews-pilot.css`. There are no new primitives, tokens, dependencies or production routes.
- The existing evaluation contracts supplied vocabulary for schedules, panels, pinned criteria and scorecard visibility. The pilot is not an implementation of their permission or workflow rules. Criteria are illustrative and unweighted. It produces no candidate ranking or hiring decision.
- Rating/evidence values survive switching Preparation/Feedback. Save draft stores the current draft in this mounted page only. Leaving, reloading, Reset sample or switching the review scenario discards local changes. There is no account persistence or cross-pilot mutation propagation; the Application pilot’s independent evidence scenarios remain unchanged.
- Upcoming sample slots are UTC instants rendered with `Intl.DateTimeFormat` in Africa/Lagos, Europe/London or America/New_York. Duration is retained on a time change. Availability, conflicts, provider links, notifications and calendar invitations are not queried or sent.
- Scorecard submission validates all three ratings and evidence fields, locks the local form, and reveals the supplied peer summary. It does not POST feedback, advance an application or send a message.
- URL context uses `interview`, `agenda` and `zone`, alongside existing application/candidate/role context. The current local or hosted entry path and `chrome=0` survive navigation. Invalid zones fall back to Lagos; invalid agenda values fall back to the interview’s status or Upcoming. Unknown interview IDs receive a missing-record view.
- The production bundle remains fenced from reference data. No backend, API client or production feature files were changed for this pilot.

## Verification

- 205 tests across 46 files passed, including 18 interview tests for joins, time-zone conversion/DST, filters, count grammar, required evidence, local submission, schedule duration/cancel, focus, unavailable states, return links and structural accessibility.
- Both design-system and application builds passed. Production authority and bundle checks passed; interview fixture identifiers and reference UI strings are absent from production assets.
- Browser checks cover agenda and scorecard at 375, 768, 1024 and 1440px in light/comfortable and dark/compact. The phone tab overflow found in the first pass was fixed by wrapping the status tabs.
- Browser flows include required fields, draft retention between tabs, submission, feedback-sheet focus, rescheduling, application/candidate return links, phone content focus and dark portalled controls.
- Evidence, screenshots and logs: `output/signal-interviews/`. This does not replace a screen-reader session, recruiter usability feedback or real-backend acceptance.

The existing My work moderator pack remains its original task-specific pack. Use this guide for Interviews; no recruiter responses have been collected or sent automatically.
