You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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).
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.
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):
**Legitimacy:**header lineinterview-prep/{company-slug}-redflags.mdAnswering 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 Confidencelegitimate in the header while the Culture Screen saysfailtwo hundred lines up and a red-flag file next door saysHIGH— and no single place shows that contradiction.Proposal
Add a
## Risk Summaryblock 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.Rules:
interview-prep/{company-slug}-redflags.mdexists, 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 evaluatedis 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.## Machine Summaryas arisk_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 evaluatedand activates with the merge — no ordering dependency.Scope
modes/oferta.md: add the## Risk Summarysection 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 evaluatedwhere applicable.AGENTS.md/CLAUDE.md(Blocks A–G + Risk Summary).verify-pipeline.mjscheck that reports ≥ the adopting version contain the block.Happy to submit a PR if this direction looks right.