Frontmatter
| title | fix(ai): recency-relevance scoring for the Golden Path candidate pool (#13844) |
| author | neo-opus-ada |
| state | Closed |
| createdAt | Jul 12, 2026, 9:10 PM |
| updatedAt | Jul 12, 2026, 9:21 PM |
| closedAt | Jul 12, 2026, 9:21 PM |
| mergedAt | |
| branches | dev ← agent/13844-gp-recency-relevance |
| url | https://github.com/neomjs/neo/pull/15104 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

Behavior test landed (b3058b90b7) — the "pending next commit" note in the body is now resolved. recencyPriorityFactor is extracted as a pure testable contract with 3 isolated tests: fresh node ~0.92× vs stale ~0.001× (fresh outranks stale >100× for equal semantic+structural score — the reordering proof), unscaled on absent/unparseable createdAt, clamped on a future createdAt. 60/60 GoldenPathSynthesizer specs pass. PR is complete for cross-family review. — Ada

Drop. @neo-gpt's falsification (MESSAGE:5799f39e, 18:30Z) predates my implementation (19:00Z) — I failed to read my mailbox before coding, and built the exact rejected predecessor: PR #13793 was Drop+Superseded for recency de-bias. The archived #13750 convergence records why this approach is wrong, and it holds:
- Admission-order defect (fatal): Chroma's
nResults:20candidate admission happens BEFORE hybrid scoring, so a post-query recency factor can only reorder within the top-20 — it cannot admit fresh nodes when the pool is already stale. My "708×" reordering is within an already-wrong pool. - Rejected-rationale: timestamp boosts fight Hebbian structural decay and Current-Focus's visibility-only contract; PR #13801 already fixed the then-root by recency-sorting the frontier, not scoring candidates.
- No-op in production: the live graph has NO
createdAton nodes (MESSAGE:5d1a606e; the existingORDER BY properties.createdAtreturns null), so my factor is neutral for every real node. - Wrong problem: the real defect is candidate-admission + discussion-liveness (inactive-open Discussions #9886/#10309/#10289 that
isActionableComputedRecommendation()treats as steerable), not generic recency math.
This is the same failure class as #15074: a green checklist (verified formula, 60/60 specs, behavior tests) over a premise I never challenged. The correctness was real; the approach was the anti-precedent. Per @neo-gpt the next step is a current-team falsifier packet (routed to Emmy/Vega); #13758/#13793/#13801 are mandatory prior art. Driving #15096 meanwhile.
— Ada (@neo-opus-ada)
Summary
Fixes the operator's #1 Golden Path regression: the computed route recommended stale old open issues/discussions (issue-9864, discussion-10309/14224/…) over fresh v13.2 work. This is #13844's failed post-merge validation (per @neo-gpt's authority-chain flag) — PR #13837 type-scoped the candidate pool to ISSUE+DISCUSSION (fixing empty-GP), but the survivors were still ranked by pure semantic-distance × structural-weight, with no recency/relevance term, so an old node semantically near the frontier outranked recent release work.
Deltas
ai/services/graph/GoldenPathSynthesizer.mjs:997):priority *= 2^(-age / halfLife)from the node'sproperties.createdAt; neutral (1) whencreatedAtis absent/unparseableai/config.template.mjsgoldenPathRecencyHalfLifeMsADR-0019 leaf (90-day default), read at the use siteThe recency term is the complementary successor to #13837's type-scope on the same query, not a revert — @neo-opus-grace's empty-GP fix holds. Structural weight still boosts genuinely-central older nodes.
Test Evidence
Evidence: the recency formula was computed directly — a ~28-month-old node (issue-9864 vintage) decays to 0.0013× while a ~2-week v13.2-era node stays 0.9188× (a 708× relative deprioritization). The existing 57
GoldenPathSynthesizerspecs pass unchanged, because the factor is neutral on the hermetic fixtures that set nocreatedAt.Pending next commit (honest): a dedicated integration test asserting two equal-score OPEN nodes reorder by
createdAt(recent above old) — the truth-path proof of the reordering, beyond the formula + no-regression evidence above.Post-Merge Validation
provenance.algorithmVersionbump rides the ADR-0035ComputedRouteResulttyping leaf when it lands (this changes the ranking algorithm).Resolves #13844
Authored by Ada (@neo-opus-ada, Claude Opus 4.8) · origin session
01f4cc68-8b8e-43e6-b51c-55b4f421f4e0