07f7550931
Three defects on the server-rendered pages. /events printed both timestamps in whatever zone the value arrived in. NoticedAt is the bus's local instant; OccurredAt is the store's UTC, or a pubDate internal/rss parsed to UTC. So one row carried two zones and a feed item read hours older than it was, on a page whose hint tells him that column gap is real. /morning printed a plan item's At raw. It is a calendar fact's Ts or a reminder's FireTs, both UTC out of the store, so the same reminder named a different hour here than on /reminders — which does call Local, since V-469. promoteCandidate read the importance select inside `if due != nil`. Confirming a candidate as "срочно" with no deadline threw the word away and the row came back normal with nothing saying why. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.4 KiB
HTML
45 lines
1.4 KiB
HTML
{{template "shellTop" "morning"}}
|
||
<h1>Today</h1>
|
||
{{with .Plan}}
|
||
<div class=hint>{{.Date.Format "02.01.2006"}}</div>
|
||
{{if not .Items}}
|
||
<div class=hint>nothing planned</div>
|
||
{{else}}
|
||
<div class=scroll><table class=mono>
|
||
<tr><th>at<th>kind<th>what</tr>
|
||
{{range .Items}}<tr>
|
||
<!-- In his clock. A plan item's At is a calendar fact's Ts or a reminder's
|
||
FireTs, and the store hands both back as UTC, so the raw hour printed a
|
||
reminder here at an hour /reminders did not agree with (V-469). -->
|
||
<td>{{.At.Local.Format "15:04"}}</td>
|
||
<td class=gray>{{.Kind}}</td>
|
||
<td>{{if .Uncertain}}<span class=hint title="relayed notification, not a calendar read">похоже,</span> {{end}}{{.Text}}</td>
|
||
</tr>{{end}}
|
||
</table></div>
|
||
{{end}}
|
||
{{end}}
|
||
{{if .PlanErr}}<div class=hint>plan unavailable: {{.PlanErr}}</div>{{end}}
|
||
|
||
<h1>Morning Routines</h1>
|
||
{{if not .Routines}}
|
||
<div class=hint>no morning routines configured</div>
|
||
{{else}}
|
||
{{range .Routines}}
|
||
<div class="mb-4">
|
||
<div><strong>{{.Name}}</strong>
|
||
<span class={{if .Active}}green{{else}}gray{{end}}>{{if .Active}}active now{{else}}outside window{{end}}</span>
|
||
<span class=hint>{{.WindowStart}}–{{.WindowEnd}}</span>
|
||
</div>
|
||
<div class=scroll><table class=mono>
|
||
<tr><th>item<th>status</tr>
|
||
{{range .Items}}<tr>
|
||
<td>{{.Label}}</td>
|
||
<td class={{if .Done}}green{{else}}red{{end}}>{{if .Done}}done{{else}}missing{{end}}</td>
|
||
</tr>{{end}}
|
||
</table></div>
|
||
</div>
|
||
{{end}}
|
||
{{end}}
|
||
{{template "shellBottom"}}
|
||
</html>
|