career-ops: v1.21.0
The signals release
Every evaluation now ends with a Risk Summary: one table joining the five company-risk signals (posting legitimacy, employment classification, culture screen, interview red flags, AI claims vs infrastructure) — aggregation only, and "not evaluated" is stated honestly instead of hidden. On top of it, eleven new behavioral signals and guards landed across oferta, interview and apply modes, the scanner now persists a per-posting trust score, and reserved report numbers can no longer race each other.
The CareerOps Manifesto keeps growing on its own — 30+ signatures, each one a commit. This release routes to it from every surface (README, first scan, dashboard m, post-update note), and if you signed with your first-ever public GitHub contribution, your certificate now says so.
New here? npm run manifesto · https://career-ops.org/manifesto
1.21.0 (2026-07-17)
Features
- apply: warn before reapplying to a repeat company (#1921) (6cdca85), closes #1920
- cover-letter: support --format and --report CLI arguments (#1830) (88c75cf), closes #1828
- dashboard: manifesto shortcut, help entry and footer link (64e81de)
- email: add confirmed-time no-show follow-up variant (#1860) (c77d138), closes #1859
- interview-prep: cross-reference coffee chat notes against interview intel (#1941) (2692051), closes #1940
- interview-redflag: flag scope/compensation mismatch as a separate fifth dimension (#1943) (ea57b82), closes #1942
- interview-redflag: suggest a ready-to-copy blacklist row at Reconsider level (#1856) (b645e69), closes #1854
- interview/plan: wire the existing Panel Intel table into multi-panelist rounds (#1858) (a8ceed2), closes #1857
- ledger: immutable n: ordinal per signature + first-contribution question for new signers (8ec80b5)
- liveness: add Workday to the zero-token ATS liveness API rung (#1928) (f6afdf9)
- oferta: Block G signal for benefits terminology country mismatch (#1936) (3f0985d), closes #1935
- onboarding: route to the manifesto from the README and the first successful scan (e3a82e0)
- pdf: add role name to the tailored PDF filename for multi-role tracking (#1890) (e878096)
- providers: add Oracle Recruiting Cloud zero-auth provider (#1929) (52db048)
- reports: unified Risk Summary block joining the five company-risk signals (#1738) (f0c742a), closes #1737
- salary-gap: track compensation figures stated per interview round (#1853) (8308cd1), closes #1852
- scan: persist and surface the scanner trust signal to pipeline and history (#1765) (16c8497), closes #1743
- scan: track portal health over time and surface coverage decay (#1768) (9bc82e2), closes #1744
Bug Fixes
- cv-template: keep role header with its bullets when a location line is present (#1903) (66b1024)
- doctor: warn when Node is below 22.5 instead of passing silently (#1831) (30e470d), closes #1829
- envrc: only load the Nix flake when Nix is installed (#1863) (ca23af6)
- interview-redflag: drop GitHub PR references from candidate-facing output templates (aa35162)
- ledger-bot: make the first-contribution confirmation copy match what ships (89e1741)
- ledger-bot: restore the 'done' confirmation now that the certificate render is live (9c033d2)
- onboarding: relay the manifesto note in agent-mediated updates (0a3abed)
- pdf: drop empty Projects section instead of rendering a bare header (#1879) (a64d590)
- role-matcher: keep base titles distinct from specialized-suffix siblings (#1922) (723f727), closes #1881
- scan-ats-full: respect data/blacklist.md (#1914) (6512870), closes #1911
- scan: quiet dotenv so --json stdout stays parseable (#1907) (2e0b29e), closes #1906
- unify atomic report number allocation (#1910) (3b265cb), closes #1733 #1801 #1835 #1895
- update-system: attribute the post-update manifesto link (utm_source=updater) (a363ec4)
- update-system: surface commit failures instead of silently swallowing them (#1855) (2ad3453), closes #1844
- upskill: keep fetched JD text as a string in the targeted --url-text path (#1917) (c7e9ff5), closes #1894