v0.3.1
Bugfix-led patch with one backward-compatible feature.
Fixed — reevaluation gate false positive (and the same class elsewhere)
The reevaluation gate could fire a false "thresholds tripped" because contract prose invited the agent to recompute the gate from cumulative rejections instead of reading the persisted analytics block, which trips on the delta since the last review.
- reevaluate-strategy reads
tracker.json#analytics.reevaluation(npm run analytics), not the descriptiveanalyze:outcomes; fit-bands come from persistedapp.fitBucket. - AGENTS.md reevaluation contract clarified (delta not cumulative; read-the-block; dashboard nudge vs
reevaluation.dueare distinct gates). - track-outcomes refreshes the analytics block (
npm run analytics -- --write) before re-render, so the gate isn't read stale. - company-health counts
screentoward the interview fire-band. - apply-job reads persisted
fitBucketbefore re-deriving the FIT tier.
Added
- compEstimate staleness — comp estimates now carry
asOfand acomp_estimate.recheck_dayswindow (default 30), mirroringcompany_health; the comp card shows "as of <date>". Additive, non-breaking.
909 tests pass.