161 lines
7.3 KiB
Markdown
161 lines
7.3 KiB
Markdown
# Mode: interview-redflag — Company Red-Flag Detector
|
||
|
||
## Purpose
|
||
|
||
Analyse the **interviewer's side** of session transcripts to surface structural red flags about a company before the candidate accepts an offer or re-applies. Complements `patterns` (tracker-level win/loss) and `#960` / `realign-targeting` (candidate-side answer clustering).
|
||
|
||
This mode answers: *"Even if I win this process — is this company safe to join?"*
|
||
|
||
## Dependency
|
||
|
||
Requires transcripts produced by `modes/interview/debrief.md` or `modes/interview/practice.md` (#956). Each transcript must be saved under `interview-prep/sessions/` (gitignored). If no session files exist, exit gracefully with an onboarding message.
|
||
|
||
## Inputs
|
||
|
||
- `interview-prep/sessions/` — Session transcripts (debrief + practice outputs). One file per round.
|
||
- `interview-prep/{company}-{role}.md` — Company intel file (for context + output target).
|
||
- `config/profile.yml` — User profile (for role/archetype context).
|
||
|
||
Expected transcript filename convention (from #956):
|
||
```
|
||
{company-slug}-{role-slug}-{round}-{YYYY-MM-DD}.md
|
||
```
|
||
|
||
## Minimum Threshold
|
||
|
||
Check: does `interview-prep/sessions/` contain at least **1** file?
|
||
|
||
If not:
|
||
> "No session transcripts found yet. Run `/career-ops interview` on a role after your next interview to generate a debrief, then come back to check for red flags."
|
||
|
||
Exit gracefully.
|
||
|
||
## Step 1 — Discover Sessions
|
||
|
||
List all `.md` files in `interview-prep/sessions/`. Parse each filename using the `YYYY-MM-DD` date segment as the anchor:
|
||
|
||
```
|
||
{company-slug}-{role-slug}-{round}-{YYYY-MM-DD}.md
|
||
↑ ↑ ↑ ↑
|
||
everything segment round date anchor
|
||
before round immediately label (trailing)
|
||
before round
|
||
```
|
||
|
||
- `YYYY-MM-DD` is the anchor — find the date, work left from it.
|
||
- `round` = segment immediately before the date anchor.
|
||
- `company+role` = everything before `round`.
|
||
|
||
Example: `acme-corp-swe-hr-2024-01-15.md` → company=`acme-corp`, role=`swe`, round=`hr`, date=`2024-01-15`.
|
||
|
||
Group files by `{company-slug}`. For each company group, note:
|
||
- Number of rounds on file
|
||
- Date range of sessions
|
||
- Role slugs covered (a company may have sessions across multiple roles)
|
||
|
||
## Step 2 — Classify Interviewer Signals Per Session
|
||
|
||
For each transcript, read **only the interviewer's turns** (lines attributed to the interviewer, moderator, or prefixed with role labels). Ignore candidate turns for this pass.
|
||
|
||
Mark each of the four signal types as **present** or **absent** for the session. A signal is present if it is directly observable in the transcript — do not infer. Single occurrence within a session is sufficient to mark it present; noise filtering happens at the company-level aggregation step (Step 3).
|
||
|
||
### Signal taxonomy
|
||
|
||
| Signal | What to look for |
|
||
|--------|-----------------|
|
||
| **Scope ambiguity** | Questions with no measurable criteria ("tell me about yourself, anything really"; "just talk us through whatever you think is relevant"); no definition of what a good answer looks like; role responsibilities described in circular or contradictory terms across interviewers |
|
||
| **Defensive closure** | Interviewer shortens or redirects after a technically complete / superior candidate answer; follow-up probes absent when answer exceeds expectations; session ends abruptly after candidate gives a comprehensive response without probing further |
|
||
| **Evaluator competency gap** | Interviewer cannot engage with a domain-correct answer (silence, non-sequitur follow-up, pivot to unrelated topic); senior interviewer asks questions whose framing reveals unfamiliarity with the candidate's stated domain |
|
||
| **Process signals** | Contradictory criteria across interviewers in the same company; structured follow-up absent across all rounds; interviewers visibly unaware of previous round's content; evaluation criteria shift mid-session |
|
||
|
||
Record which signals are present per session. Do not infer — only flag what is explicitly observable in the transcript text.
|
||
|
||
## Step 3 — Aggregate Per Company
|
||
|
||
For each company, count how many sessions triggered each signal type.
|
||
|
||
Compute a **red-flag score**:
|
||
- Each signal type present in **1 session**: +1
|
||
- Each signal type present in **2+ sessions** (pattern, not noise): +2
|
||
- Maximum possible: 8 (4 signal types × 2)
|
||
|
||
## Step 4 — Assign Warning Level
|
||
|
||
| Score | Level | Label |
|
||
|-------|-------|-------|
|
||
| 0–1 | None | No structural red flags detected |
|
||
| 2–3 | Caution | `⚠️ Enter with eyes open` |
|
||
| 4+ | Warning | `🚩 Reconsider` |
|
||
|
||
## Step 5 — Generate Output
|
||
|
||
**Output routing:** Red-flag analysis is company-wide (signals aggregate across rounds regardless of role). Write to a single company-level file: `interview-prep/{company-slug}-redflags.md`. Create it if absent. If sessions span multiple role slugs, note all roles in the header. Do not append to per-role intel files — those are role-specific, this is company-specific.
|
||
|
||
Write the following structure:
|
||
|
||
```markdown
|
||
# Red-Flag Analysis — {Company}
|
||
|
||
**Roles covered:** {role-slug(s)}
|
||
**Sessions analysed:** {N} round(s) — {date range}
|
||
**Warning level:** {emoji} {label}
|
||
|
||
### Signals detected
|
||
|
||
| Signal | Sessions | Severity |
|
||
|--------|----------|----------|
|
||
| Scope ambiguity | {n}/{total} | {single/pattern} |
|
||
| Defensive closure | {n}/{total} | {single/pattern} |
|
||
| Evaluator competency gap | {n}/{total} | {single/pattern} |
|
||
| Process signals | {n}/{total} | {single/pattern} |
|
||
|
||
### What this means
|
||
|
||
{1–3 sentences interpreting the pattern in plain language. What specifically did the interviewers do? What does this predict about the role? Be direct — if the signal predicts the candidate will absorb undefined responsibility, say so.}
|
||
|
||
### Recommended action
|
||
|
||
{One of:
|
||
- "No action needed — proceed."
|
||
- "Before accepting: clarify [specific scope/responsibility] in writing."
|
||
- "Before accepting: ask [specific questions] to verify the concern."
|
||
- "Reconsider: the pattern across {N} rounds suggests [specific risk]."}
|
||
|
||
*Analysis based on interviewer behaviour only. Candidate decides.*
|
||
```
|
||
|
||
## Step 6 — Present Summary
|
||
|
||
After writing the file, show the user:
|
||
|
||
```
|
||
Red-Flag Analysis — {Company}
|
||
──────────────────────────────
|
||
Rounds analysed: {N}
|
||
Warning level: {emoji} {label}
|
||
|
||
Signals:
|
||
• {signal}: {n}/{total} sessions {(pattern) if 2+}
|
||
...
|
||
|
||
→ Full analysis written to interview-prep/{company-slug}-redflags.md
|
||
```
|
||
|
||
If multiple companies were analysed in one run, show a summary table:
|
||
|
||
```
|
||
Company Rounds Level
|
||
──────────────── ────── ─────────────────────────
|
||
{Company A} 3 🚩 Reconsider
|
||
{Company B} 1 ⚠️ Enter with eyes open
|
||
{Company C} 2 No red flags
|
||
```
|
||
|
||
## Scope / Non-Goals
|
||
|
||
- **No auto-action** — never edits `portals.yml`, `modes/_profile.md`, or `data/applications.md`. Advisory only.
|
||
- **No new dependencies** — prompt-level analysis over local files.
|
||
- **Privacy** — reads only local, gitignored session files. Nothing leaves the machine.
|
||
- **Not a Glassdoor replacement** — analyses this candidate's live experience in this process, not crowd-sourced opinion.
|
||
- **Candidate-side analysis is out of scope** — use `realign-targeting` (#960) for that.
|