🍊😺 obot
Launched
Commit41c578d

changelog v2.16.1 is current with this build

What changed · full log

NowSession feed not read — this readout needs JavaScript.

Session feed rechecks every 60 seconds in this tab; repo lights are last-commit ages as of the 2026-08-20 06:25 EDT deploy.

The obot roadmap, as it happened

The wire

The last 7 days · 2026-08-13 → 2026-08-20 · newest first · compiled 2026-08-20 06:25 EDT

Scroll until you hit something you already know — that point is caught up.

Waiting on you

1 release candidate in the review queue and 1 decision waiting — the full ranked queue is the roadmap page.

Waiting longest: the release candidate open.gismo#10 — open.gismo v0.2.0-RC1, since 2026-08-15.

9 config items need your keyboard — counted here, never described here, and cleared on the dashboard.

Counts as of this edition (2026-08-20 06:25 EDT); a deploy refreshes them.
  1. Wed 19 Aug2026-08-19
  2. req filedRequirement filed: the usage analytics run on a cadence, and the page says when it last did. #282
  3. req filedRequirement filed: safetyGraphics and safetyCharts back on CRAN — remove the Tendril chart. #281
  4. Tue 18 Aug2026-08-18
  5. req filedRequirement filed: an open decision artifact has an episode he can answer from a car. #280
  6. req filedRequirement filed: a step-by-step IQ for the new laptop — the chance to fix rather than replicate. #279
  7. req filedRequirement filed: what comes next is written down — a ranked head, tiers below, before any clock runs. #278
  8. decidedDecided: SafetyCensus() shipped: does it stay as public API, or get deprecated out?. artifact Q&A #235
  9. mergedobot.roadmap merged: D0021 is decided: SafetyCensus stays and is rebuilt, against the recommendation. #277
  10. req filedRequirement filed: what the fleet spends is measured before it is spent. #275
  11. req filedRequirement filed: SafetyCensus stays and is rebuilt on metrics and reports — design first. #274
  12. mergedobot.agent merged: A pull request only he can merge routes itself to the config bucket. #265
  13. mergedobot.roadmap merged: Record D0020 as fully decided: both recommendations approved, dictated after the audio brief. #273
  14. req filedRequirement filed: branch protections, live before any scheduled session runs. #272
  15. mergedobot.agent merged: A claim is checked on a cadence rather than asserted on the day it was written. #263
  16. mergedobot.roadmap merged: D0021: make the correction's struck-through quotes easier to read. #270
  17. mergedobot.roadmap merged: D0021: correct the expired premise — the release it says is held was already published. #269
  18. mergedobot.agent merged: Watching the dashboard can no longer prevent the dashboard updating. #260
  19. req filedRequirement filed: the judge can see the constraints it is judging against. #267
  20. req filedRequirement filed: a decision artifact notices when its own premise expires. #266
  21. req filedRequirement filed: he answers a decision from the car, by voice, without a screen or an issue number. #265
  22. mergedobot.agent merged: A doc comment describes the function under it again. #257
  23. mergedobot.agent merged: The brief names the config items that are actually blocking, and composes nothing out of failed queries. #256
  24. req filedRequirement filed: a config item's claim is checked on a cadence, not asserted on the day it was filed. #264
  25. mergedobot.agent merged: A config item as a page he can decide from, not a form he has to decode. #254
  26. mergedobot.agent merged: The daily brief is one paragraph and one line per item, and a test counts them. #253
  27. req filedRequirement filed: config items are short local artifacts he can decide from, not a field form. #263
  28. mergedobot.agent merged: A credential at rest, and a branch preserved on purpose. #250
  29. mergedobot.agent merged: A commit the identity scan could not parse is unread, not clean (#247). #248
  30. mergedobot.agent merged: An age that could not be measured is unknown, not 56 years. #245
  31. mergedobot.agent merged: The bot's user id is resolved from one module, and a wrong one is reported (#241). #244
  32. mergedobot.agent merged: A failed fetch and an unread PR listing are said out loud. #243
  33. mergedobot.agent merged: Teach the five-minute sweep to see local-only work. #242
  34. mergedobot.roadmap merged: Publish the org chart: promote the artifact to a hub page. #262
  35. req filedRequirement filed: the highest-authority file the agents read has no owner, no history and no review path. #261
  36. mergedobot.agent merged: The standard lane is the default, and the file everyone reads now says so. #237
  37. auditRoadmap audit v2.16.1: Whether a decision has been made now has one authority — the artifact page declares its own state next to his words, and the registry and the published index are a generated view and a checked one. Ten of twenty-one… changelog
  38. mergedobot.agent merged: Two spellings that read as a broken tool rather than as a shape you chose. #235
  39. mergedobot.agent merged: The briefing carries the six rules a dispatcher kept typing by hand. #233
  40. mergedobot.agent merged: The Checkout line says what the checkout IS (#231). #232
  41. auditRoadmap audit v2.16.0: The requirements count stops calling a blocked mechanism drift. Nothing can put an issue on the obot Roadmap board any more — the obotclaw App is refused on a user-owned project and the guard denies the only credential… changelog
  42. auditRoadmap audit v2.16.0: The queue says it once instead of eleven times. Eleven separate "fix its stage on the board" cards, each proposing a repair no agent can perform, are replaced by a single card naming the cause — and the card that used… changelog
  43. auditRoadmap audit v2.16.0: The audit stops offering repairs it cannot run. 61 of 98 findings propose a board write; each now says so on the row, in the rail, in the audit fold and in the apply lane, and accepting one is refused before anything is… changelog
  44. mergedobot.agent merged: A re-export creates no local binding, and the update lane needed one (#229). #230
  45. mergedobot.agent merged: A merged pull request counts as covered when it names an issue that is itself parented. #227
  46. mergedobot.roadmap merged: The artifact says whether he decided, and nothing else gets a vote. #259
  47. req filedRequirement filed: git pushes and commits still go out as him — the lane no token fixes. #260
  48. mergedobot.roadmap merged: The count says blocked when the board is unwritable, not drift. #258
  49. req filedRequirement filed: a thing he asked for has a delivery state, and something notices when it goes quiet. #257
  50. req filedRequirement filed: work that never reached GitHub is invisible to every check we run. #256
  51. mergedobot.agent merged: A kill this house reports is a kill it confirmed (#223). #224
  52. req filedRequirement filed: nobody can write to the board — the App is forbidden and the guard denies the only credential that works. #252
  53. req filedRequirement filed: a kill this house reports is a kill it confirmed — the liveness anchor reports success while the session survives. #251
  54. mergedobot.agent merged: Two things reach his phone, on a path that was tested as far as it can be. #222
  55. auditRoadmap audit v2.15.1: The briefing's config line carries its own age once the count is more than six hours old, so last night's number cannot be read as this morning's. The count comes from a file nothing refreshes on a schedule, and the… changelog
  56. mergedobot.agent merged: The ideas backstop runs without anyone starting it. #221
  57. mergedobot.agent merged: The fold brings the hub clone up to date before it commits into it. #220
  58. mergedobot.agent merged: The fault banner is styled on the page it appears on (#215). #219
  59. mergedobot.agent merged: A day with activity gets its diary entry the morning after, not never. #218
  60. mergedobot.agent merged: A count is never stated about a source nobody read (#215). #217
  61. mergedobot.agent merged: 07:00 arrives whether or not anyone is awake, and a stopped clock says so. #216
  62. mergedobot.roadmap merged: A session record destroyed on 27 July is back, named by its boundary. #250
  63. mergedobot.agent merged: The dashboard can read the machine it describes again (#206). #213
  64. mergedobot.agent merged: The day boundary is written again, and its absence stops being silent. #214
  65. auditRoadmap audit v2.15.0: The briefing exists, at one URL you can bookmark on your phone: /reports/briefing/. Ten lines at most, one line per item, the ask at the front, every line a link you can act on without opening anything else. It always… changelog
  66. auditRoadmap audit v2.15.0: It is a second view of the queue, not a second computation of it. The same buildItems() that ranks /roadmap.html feeds the briefing, so the two surfaces cannot disagree about what counts as waiting. What differs is that… changelog
  67. auditRoadmap audit v2.15.0: Config items appear as a count and never as text, which is the rule the local-only guard enforces rather than the rule anyone remembers. changelog
  68. auditRoadmap audit v2.15.0: Two things are still owed and say so on the page rather than being faked: the overnight record of what shipped, and the fold's own freshness stamp. Both arrive with the morning fold (obot.agent#202). changelog
  69. mergedobot.roadmap merged: A config count older than six hours says how old it is. #249
  70. mergedobot.roadmap merged: The briefing exists, at one URL, in ten lines, with the ask first. #248
  71. mergedobot.agent merged: A worker is told a requirement is not an approval, and given the command that says what is. #211
  72. mergedobot.agent merged: A quiet night is provably quiet: the morning fold decides whether there is anything to say. #208
  73. auditRoadmap audit v2.14.0: A requirement now says whose decision it carries (#215). Two lines at the foot of the body: who authored it, and who approved it — or the literal EMPTY, which means nobody has and is the normal, correct state for work… changelog
  74. auditRoadmap audit v2.14.0: Approved by holds a citation that resolves, never prose. A decision id (D0018.1) resolves to what was asked, what he said, the channel and the date, by joining the registry's questions to the codes each decision block… changelog
  75. auditRoadmap audit v2.14.0: The nightly audit gained APPROVAL-UNRESOLVED, which fires when a requirement claims his approval and cannot show it, and PROVENANCE-MISSING for requirements filed from 2026-08-18 with no block. Neither ever demands an… changelog
  76. auditRoadmap audit v2.14.0: The drafted-by attribution line stops asserting a review. It named the author and then added "and reviewed by @jwildfire" — on 75 of this hub's 113 requirements, none of which carry any record of that review, including… changelog
  77. mergedobot.agent merged: A blocked state derived from a session's own prose no longer wakes anyone or closes anything (#176, #177). #199
  78. Mon 17 Aug2026-08-17
  79. req filedRequirement filed: what the machine may say about itself in public — session names and draft-release titles. #246
  80. mergedobot.agent merged: The README describes the tabs this page actually has. #196
  81. mergedobot.agent merged: The dashboard and the hub carry the same four names, in the same order. #195
  82. mergedobot.roadmap merged: One information architecture, two audiences — the shared spine, and a boundary the build cannot cross. #245
  83. mergedobot.agent merged: A test fixture is not a role: the launcher stops spawning, and the band stops believing a name (#188). #194
  84. mergedobot.agent merged: The page says when it restarted, which is what the requirement asked for. #193
  85. mergedobot.agent merged: Say what the restart rescued him from, not just that one happened. #192
  86. mergedobot.agent merged: The checkout tracks main, and the consumers that read it restart. #189
  87. mergedobot.agent merged: The fleet manager is the admiral: prime, admiral and nav. #187
  88. mergedobot.agent merged: Make the OVERDUE flag clearable, and watch the roles that must exit. #184
  89. mergedobot.agent merged: Agents tab: a task tag in the row, times on the dates, and one local day boundary. #183
  90. questionA decision was put to @jwildfire: SafetyCensus() shipped: does it stay as public API, or get deprecated out?. artifact Q&A #235
  91. decidedDecided: Bringing the autonomy goal up to date. artifact Q&A #228
  92. mergedobot.agent merged: The fleet manager: the sweep detects, a short-lived agent acts and exits. #170
  93. mergedobot.agent merged: Make the pinning tests' band marker required, not an optional fallback. #175
  94. mergedobot.agent merged: Pin agents on the Agents tab, with the standing roles pinned by default. #171
  95. mergedobot.agent merged: Agents tab: a created column sorted newest first, and the model that ran each agent. #172
  96. mergedobot.agent merged: The Navigator tab is a metrics dashboard: a selectable period, a repo filter and a goal filter. #165
  97. req filedRequirement filed: merging is not deploying — the checkout tracks main, and consumers restart when it moves. #243
  98. mergedobot.agent merged: A test server declines the serve marker instead of taking it. #150
  99. req filedRequirement filed: does the briefing get read aloud — and at what cost to the words. #242
  100. req filedRequirement filed: an answer you clicked that nothing applied has to reach someone. #241
  101. req filedRequirement filed: the session skills the fold replaces — one retirement, five re-homings, and the notes that say so. #240
  102. req filedRequirement filed: the weekly briefing — the sink that keeps the daily at nine lines. #239
  103. req filedRequirement filed: the morning fold, and the briefing it produces. #238
  104. mergedobot.agent merged: The RC banner moves out of his PR body and into the agent-facing rules. #158
  105. req filedRequirement filed: the org chart — who does what, what each may never do, and which failure created each role. #237
  106. mergedobot.agent merged: Every dashboard surface renders honestly on a machine with no history. #160
  107. mergedobot.agent merged: The Agents tab is a table with a filter sidebar, one row per agent. #161
  108. req filedRequirement filed: the admiral — a triggered manager, so finished work stops sitting and nobody has to remember to look. #236
  109. mergedobot.agent merged: The orphan check treats a labelled orphan as settled. #164
  110. mergedobot.agent merged: The merge command is documented as one undecorated command, and guarded. #163
  111. req filedRequirement filed: one-off tasks — a small fix files against its goal, without a requirement to justify it. #234
  112. releasegsm.safety shipped v1.1.0. v1.1.0
  113. mergedgsm.safety merged: gsm.safety v1.1.0 release paperwork. #54
  114. mergedobot.agent merged: The sweep quotes the deployed build rather than guessing at it. #152
  115. mergedobot.roadmap merged: The local-build guard fired on its own announcement. #232
  116. req filedRequirement filed: adversarial review of safetyCensus() — does it stay or go, before v1.1.0 publishes. #229
  117. mergedgsm.safety merged: NEWS: promote v1.1.0, open v1.2.0 (Upcoming). #53
  118. mergedgsm.safety merged: gsm.safety v1.1.0-RC1. #52
  119. auditRoadmap audit v2.13.0: The header carries a version number on every page, and it tells the truth about when the page shipped (#224). @jwildfire, 2026-08-16: "Add a version # on the hub in the header and let me hover to see when it was… changelog
  120. auditRoadmap audit v2.13.0: The version and the launch time now come from different places, because only one of them can know. The version is this file's newest entry, which stays hand-written. The launch time and commit are stamped by the deploy… changelog
  121. auditRoadmap audit v2.13.0: When the changelog falls behind what the site ships, the badge says so instead of choosing a half to believe. It is counted in commits touching site/ and scripts/ since this file was last committed, not in hours - the… changelog
  122. auditRoadmap audit v2.13.0: The badge was on catalog.html and on none of the other ten published pages, including the queue that D0018 had made the front door the day before he asked where the version number was. It now comes from the shared… changelog
  123. auditRoadmap audit v2.13.0: The Navigator sweep reports the same verdict, read from the published _site/version.json rather than computed a second time from a local clone that is routinely behind the deployed commit. changelog
  124. req filedRequirement filed: the dashboard's two views, literally — a session table with filters, and a filterable metrics dashboard. #227
  125. req filedRequirement filed: goal #73 says what it is now — a current body, five workstreams, and a bounded backlog. #226
  126. Sun 16 Aug2026-08-16
  127. req filedRequirement filed: every surface renders honestly on a machine with no history — before the move, not after. #223
  128. req filedRequirement filed: his queue holds exactly three buckets — RC, decision, config — and the remainder is ours. #220
  129. req filedRequirement filed: the dashboard reads like a news feed, not an audit log — rebuild the sessions and Navigator pages. #218
  130. req filedRequirement filed: a requirement says whose decision it carries — an agent's inference must not read as his approval. #215
  131. questionA decision was put to @jwildfire: Scheduled sessions: what is ready, what is not, and what would make it ready. artifact Q&A #222
  132. decidedDecided: The roadmap page — three directions to react to. artifact Q&A #208
  133. decidedDecided: The Navigator — how the operating officer works. artifact Q&A #197
  134. decidedDecided: The session model after obot-prime — five calls. artifact Q&A #158
  135. req filedRequirement filed: a worker that stops — finished, stalled or dead — wakes the Navigator. #212
  136. req filedRequirement filed: rebuild the roadmap page on D0018 — the queue in front, the catalog behind. #211
  137. req filedRequirement filed: the priced usage artifact refreshes on a cadence, or every surface says how old it is. #206
  138. req filedRequirement filed: a real "since you last looked" — record page views locally, or say plainly that we cannot. #205
  139. req filedRequirement filed: one information architecture, two audiences — symmetry between the private dashboard and the public hub. #203
  140. req filedRequirement filed: the roadmap page redesign — a design spike he can react to. #202
  141. req filedRequirement filed: roadmap discipline is measured — the sweep checks all seven repos, and the audit stops reporting stale. #200
  142. req filedRequirement filed: the agent roster — every agent with its id, status, cost and roadmap impact. #199
  143. req filedRequirement filed: no inline bold in artifacts — emphasis is structural, or it is a callout. #198
  144. auditRoadmap audit v2.12.0: Eleven new requirements on the board, all at Backlog on the 2026q3 milestone: worker close-out checks (#184), worker supervision (#185), surviving compaction (#186), the three demo-301 site-size mitigations (#189-#191),… changelog
  145. auditRoadmap audit v2.12.0: Seven of those requirements (#184, #185, #186, #192, #193, #194, #195) were not on the board at all until this pass, and three more (#189-#191) sat on it with no stage set - the only board items anywhere carrying an… changelog
  146. auditRoadmap audit v2.12.0: #184 is now linked under its goal, Goal: increased autonomy in obot.agent (#73). Its close-out had reported the link as made; it had not been. changelog
  147. req filedRequirement filed: the Navigator as operating officer — asks become requirements, and delivery is judged at closeout. #195
  148. req filedRequirement filed: every worker agent gets a permanent W0001 identity, allocated once and never recycled. #194
  149. Sat 15 Aug2026-08-15
  150. mergedobot.agent merged: The ledger verdict leads, so the status line keeps showing status. #129
  151. mergedobot.agent merged: Stop committing Python bytecode. #128
  152. req filedRequirement filed: standing sessions survive compaction — continuous state, an explicit setting, and a silent-loss check. #186
  153. req filedRequirement filed: the first mate — in-flight supervision of worker agents. #185
  154. req filedRequirement filed: the worker closeout check — every agent finishes into a PR, a question, or a config request. #184
  155. questionA decision was put to @jwildfire: Who watches the workers. artifact Q&A #187
  156. questionA decision was put to @jwildfire: Workers that finish into nothing. artifact Q&A #188
  157. questionA decision was put to @jwildfire: Scheduled sessions: go, after three fixes. artifact Q&A #183
  158. decidedDecided: Siblings stay — the two delegation lanes under obot-prime. artifact
  159. decidedDecided: Recording your decisions — in-doc, a derived log, and the "approve" button. artifact
  160. decidedDecided: The roadmap audit audits itself. artifact Q&A #163
  161. decidedDecided: The blockers list — work only your hands can do. artifact Q&A #162
  162. decidedDecided: How to interview @jwildfire — the elicitation method. artifact Q&A #159
  163. decidedDecided: Which repos are operational, which are clinical. artifact Q&A #160
  164. questionA decision was put to @jwildfire: The session model after obot-prime — five calls. artifact Q&A #158
  165. decidedDecided: Who gets to change the guardrails? One real decision, two rubber stamps. artifact Q&A #156
  166. decidedDecided: obot.agent has no branch to open a release PR from. artifact Q&A #155
  167. decidedDecided: demo-301's site branch — what the fork actually costs. artifact Q&A #150
  168. releasesafety.viz shipped v1.7.0. v1.7.0
  169. mergedsafety.viz merged: v1.7.0 release paperwork: NEWS promote + external-review condition, done-gate pillar. #135
  170. mergedsafety.viz merged: NEWS: promote v1.7.0, record the external-review condition, open v1.8.0 (Upcoming). #134
  171. mergedsafety.viz merged: Release candidate: safety.viz v1.7.0 — Time-to-Event Explorer. #131
  172. mergedsafety.viz merged: Time-to-event: flexible event filters compose the endpoint; no intro animation (sv#131 review). #133
  173. mergedobot.agent merged: The Operations Dashboard — his todo list, and where he answers decisions. #109
  174. mergedobot.agent merged: Record the operational-vs-clinical classification as a class field in policy.json. #108
  175. mergedobot.agent merged: Artifacts describe themselves, and decisions carry an ID, at the point they are written. #107
  176. mergedobot.agent merged: tools/blocker-log: ten-second capture for the workspace-local blockers list (BL3). #105
  177. mergedobot.agent merged: Renderer done-gate gains the R-widget pillar. #103
  178. mergedopen.csr merged: NEWS.md: drop the stale (Upcoming) bullet — #21 shipped in v0.2.0. #27
  179. mergedgsm.safety merged: Release prep v1.1.0: version bump + copy-ready NEWS notes. #50
  180. mergedopen.gismo merged: NEWS.md: reconcile the two 0.2.0 sections into one copy-ready v0.2.0 (Upcoming) draft. #8
  181. mergedobot.agent merged: NEWS promote after v0.4.0: heading loses (Upcoming), v0.5.0 (Upcoming) opens. #101
  182. mergedsafety.viz merged: Release prep v1.7.0: version, vendored dist, NEWS notes draft. #130
  183. releaseobot.agent shipped v0.4.0 — fast sessions, one write policy, and runs that don't stall. v0.4.0
  184. mergedobot.agent merged: Release candidate: obot.agent v0.4.0 — fast sessions, one write policy, and runs that don't stall. #99
  185. Fri 14 Aug2026-08-14
  186. mergedopen.gismo merged: NEWS.md: running release log with the (Upcoming) convention. #7
  187. mergedgsm.safety merged: NEWS.md: running release log with the (Upcoming) convention. #48
  188. mergedsafety.viz merged: NEWS.md: running release log with the (Upcoming) convention. #127
  189. mergedopen.csr merged: NEWS.md: running release log with the (Upcoming) convention. #26
  190. mergeddemo-301 merged: NEWS.md: running release log with the (Upcoming) convention. #2
  191. mergedobot.agent merged: NEWS.md: the merge-lane denial is resolved, not a known issue. #88
  192. mergedobot.agent merged: Add NEWS.md: obot.agent's own release log, opening with v0.4.0. #87
  193. mergedobot.agent merged: rc-framework: decisions post to hub Q&A; the thread is where he answers. #85
  194. mergedobot.agent merged: rc-release-notes skill: NEWS.md as the release-notes draft. #86
  195. releasesafety.viz shipped v1.6.0. v1.6.0
  196. mergedsafety.viz merged: Release v1.6.0: Nephrotoxicity Explorer, study-day playback, P_ALT, eDISH polish (dev → main). #124
  197. mergedsafety.viz merged: Add NEWS.md: running release log, opening with the v1.6.0 notes draft. #125
  198. ideaIdea filed: Document Monitor-authoring rules: zsh word-splitting trap + gate gh calls on .... #151
  199. auditRoadmap audit v2.11.0: New Todo section leads the page (RC framework, @jwildfire 2026-08-14): release candidates needing his review (review-requested PRs, re-checked live on page load, plus draft releases) and decision artifacts awaiting his… changelog
  200. auditRoadmap audit v2.11.0: Decision artifacts now post to the hub's Q&A discussions as brief executive summaries (question, options, recommendation) linking the artifact; the thread is where @jwildfire records the decision. First two posted: #149… changelog
  201. auditRoadmap audit v2.11.0: Contract updates: reports/decisions/README.md gains the Q&A lane and a Discussion column in its index; the decisions index page links each open artifact's thread. changelog
  202. mergedobot.agent merged: RC framing v1: pause csr/keynote, the review contract, and a wrapup that leads with RCs + decisions. #83
  203. mergedobot.agent merged: Add obot-prime: the standing Q&A concierge session. #84
  204. mergedsafety.viz merged: Release prep v1.6.0: version bump, vendored bundle, fixture repoint. #123
  205. mergedobot.agent merged: Add gsm.qtl report_qtl.yaml upstream audit drafts. #62
  206. questionA decision was put to @jwildfire: Who gets to change the guardrails? One real decision, two rubber stamps. artifact Q&A #156
  207. questionA decision was put to @jwildfire: obot.agent has no branch to open a release PR from. artifact Q&A #155
  208. decidedDecided: How prime remembers — context management, six calls. artifact Q&A #154
  209. questionA decision was put to @jwildfire: The app plan rewrite — four calls to make. artifact Q&A #149
  210. questionA decision was put to @jwildfire: demo-301's site branch — what the fork actually costs. artifact Q&A #150
  211. decidedDecided: The merge lane is not broken — one invocation form is. artifact

Merged-PR events show 100 of 140 merges in the window (most recently updated first).

Requirement-filed events show 50 of 65 in the window (newest first).

Why this page answers a different question from the dashboard's wire. The window above is fixed at 7 days and is a property of this page, not a claim about you: the public site records nothing per visitor, and per-visitor tracking has no place on a public page even if this site had a server to do it with. The private Operations Dashboard is served from @jwildfire's own machine, so its request handler genuinely knows when he last opened a page — it answers since you last looked, and this page answers what changed recently. Same question, two honest answers at different depths, and the difference is by nature rather than by omission (#203, recorded in #205). The visit marker, when one appears in the stream, is a real timestamp this browser stored on your previous view and shows on this device only; nothing here stands in for the cross-device signal. Everything that exists is on the catalog.