mirror of
https://github.com/GMGNAI/gmgn-skills.git
synced 2026-11-02 07:46:11 +00:00
`rage` fell back to `now` when a row carried neither `open_timestamp` nor `creation_timestamp`, so a row with no age read as "launched this instant": it walked through the `MAX_AGE_D` ceiling -- the one gate the whole list rests on -- was judged on the wrong (new-launch) track, and would have taken full freshness credit had it cleared that track's gates. That is the same mistake as reading a missing risk field as clean, which this skill refuses to make anywhere else. An unreadable age is now placed past the ceiling and refused as `no timestamp (age unknown)`, reported as the data fault it is rather than as a token that failed a check. Both timestamp fields are normalised as counts, so an unparseable value arrives as 0 and is caught by the same test as an absent one. Verified: on a row with both timestamps stripped, before/after is rage=0.000 age=0.500 young=True (age gate silent) -> rage=8.000 young=False fail=['no timestamp (age unknown)'], with no duplicate age-backstop reason. Output is byte-identical on four unmodified fixtures. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>