Conversation
added 3 commits
June 29, 2026 11:53
The reevaluation gate fired a false positive β a track-outcomes pass hand-counted cumulative rejections instead of reading the persisted analytics block, which trips on the delta since the last strategy review. Root cause was contract prose inviting a recompute that diverged from the implemented logic. Swept for the same class and fixed the siblings. - π fix(reevaluate-strategy): STEP 0 reads tracker.json#analytics.reevaluation (npm run analytics) not the descriptive analyze:outcomes CLI; STEP 1 partitions fit-bands by the persisted app.fitBucket, not re-derived from current fit_bands thresholds - π docs(AGENTS): reevaluation contract trips on the since-last-review delta, not the cumulative total; added "read the block, don't hand-count" + a two-distinct-gates clause - π fix(track-outcomes): add the missing `npm run analytics -- --write` refresh to STEP 3 so STEP 6 doesn't read a one-run-stale gate block - π fix(company-health): screen counts toward the interview fire-band (matches classifyStage) - π fix(apply-job): read the persisted fitBucket before re-deriving the FIT tier
Comp estimates were effectively eternal β no way to detect drift as comparables accumulate in the tracker. Mirror the company_health asOf/recheck_days pattern. - β¨ feat(evaluate-job): persist compEstimate.asOf + a freshness/decay rule (reuse if fresher than comp_estimate.recheck_days, default 30; re-estimate and bump asOf otherwise) - β¨ feat(dashboard): surface "as of <date>" in the comp range card (dashboard-data + shell) - π§ config(modes): add comp_estimate.recheck_days to the schema + example
biggest-littlest
approved these changes
Jun 29, 2026
biggest-littlest
left a comment
Member
There was a problem hiding this comment.
Approving: gate-truth fixes are correct, tests green.
ALARGECOMPANY
approved these changes
Jun 29, 2026
ALARGECOMPANY
left a comment
Member
There was a problem hiding this comment.
Second approval β release 0.3.1.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 0.3.1
Bugfix-led patch: fixes a reevaluation-gate false positive and the same recompute-instead-of-read class elsewhere, plus a small backward-compatible comp-staleness addition.
Fixes (read the persisted gate, don't recompute it)
tracker.json#analytics.reevaluation(npm run analytics) instead of the descriptiveanalyze:outcomesCLI; STEP 1 partitions fit-bands by the persistedapp.fitBucketrather than re-deriving from currentfit_bands.reevaluation.due).npm run analytics -- --writerefresh to STEP 3 so the gate block isn't read one run stale (root cause of the stale block).screennow counts toward the interview fire-band (matchesclassifyStage).fitBucketbefore re-deriving the FIT tier.Feature
asOf+ a freshness/decay rule mirroringcompany_health(comp_estimate.recheck_days, default 30); surfaced as "as of <date>" in the comp range card. Additive/optional schema change β non-breaking.Gates
npm test: 909 pass, 0 faillint:placeholders: cleandoctor: clean