Skip to content

feat(reports): unified Risk Summary block — one checklist joining the five scattered company-risk signals #1737

Description

@Schlaflied

Problem

A candidate evaluating one company now gets five independent risk signals, each living in a different place in the report (or outside it entirely):

Background — "Block G" is the Posting Legitimacy assessment in modes/oferta.md: the ghost-job / scam screen that produces the **Legitimacy:** {High Confidence | Proceed with Caution | Suspicious} header line. It predates the issue-first process — introduced directly in 3a636ac (2026-04) and documented in the README via #862. It has since become the anchor that newer risk signals attach to (#1631's flag line lives inside it; #1685 extends it).

Signal Where it lives today Origin
Posting Legitimacy tier Block G + **Legitimacy:** header line 3a636ac
Employment classification warning (contractor-vs-employee language) A flag line inside Block G #1631
Culture Screen (pass / caution / fail) A field inside Block A #1641
Interview red-flag score A separate file: interview-prep/{company-slug}-redflags.md #1233
AI/transformation buzzword–infrastructure mismatch Block G (in flight) #1685

Answering the question the candidate actually asks — "is this company safe to join?" — currently requires reading Block A, Block G, and a sidecar file, and mentally joining them. Nothing in the report ever puts these on one screen. A posting can be High Confidence legitimate in the header while the Culture Screen says fail two hundred lines up and a red-flag file next door says HIGH — and no single place shows that contradiction.

Proposal

Add a ## Risk Summary block at the end of every evaluation report (after Block G, before the Machine Summary): one line per signal, fixed order, three states per line — ✅ clear / ⚠️ {finding} / — not evaluated.

## Risk Summary

| Signal | Status |
|--------|--------|
| Posting legitimacy | ✅ High Confidence |
| Employment classification | ⚠️ contractor-style language: "{quoted phrase}" |
| Culture screen | ⚠️ caution — {evidence} |
| Interview red flags | — no interview sessions yet |
| AI claims vs. infrastructure | ✅ consistent |

Rules:

  • Aggregation only, zero new judgment. Each line quotes/links the verdict already produced by its source block or file. The summary never re-scores, re-weights, or overrides — if a line is wrong, the fix belongs in the source signal.
  • The interview red-flag line is a cross-reference, not a copy: if interview-prep/{company-slug}-redflags.md exists, surface its current score + link; otherwise — no interview sessions yet. This also gives the red-flag detector (feat(interview): company red-flag detector from transcript signal #1233) a consumer inside the report for the first time.
  • — not evaluated is a first-class state. Batch-mode reports that skip a signal say so explicitly instead of silently omitting the row, so an all-✅ summary can be trusted.
  • Mirror the block into ## Machine Summary as a risk_summary: map so downstream scripts (analyze-patterns.mjs, dashboard) can consume it without re-parsing prose.

Why now (and why this isn't the aggregation anti-pattern)

When this was last discussed, the concern was building an aggregation layer ahead of its consumers. That precondition has flipped: three of the five signals are merged (#1631, #1233, #1641), one is core Block G, and #1685 is in review. All five producers are real; the only missing piece is the join. If #1685 lands after this, its row starts as — not evaluated and activates with the merge — no ordering dependency.

Scope

  • modes/oferta.md: add the ## Risk Summary section to the report template + rendering rules (prompt-level).
  • modes/interview-redflag.md: one line noting that its output file is cross-referenced by the report's Risk Summary.
  • batch/batch-prompt.md: same block, with batch-mode signals marked — not evaluated where applicable.
  • Docs: report format description in AGENTS.md/CLAUDE.md (Blocks A–G + Risk Summary).
  • No new scripts. Optional follow-up: verify-pipeline.mjs check that reports ≥ the adopting version contain the block.

Happy to submit a PR if this direction looks right.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions