_global/monthly-report
Monthly "what Country OS did" report for every workspace, published as a Google Doc per country plus one cross-country doc. Journal-derived, no traffic or market analysis.
Monthly report — all workspaces
Once a month, tell the company what Country OS actually did last month. One document per workspace, each with a stable link that is updated in place — people paste those links into Chat and keep them, so the link must never change.
Audience: Selectra colleagues across countries, most of whom have never opened this repo. Write in English. Five minutes of reading per document, maximum.
Scope discipline: this report describes what the system did. It is not a
business review — no Search Console numbers, no competitor scan, no market
analysis. tn:business-review owns that, separately. Your sources are the run
journals, the cost ledger and GitHub, all delivered by month-stats.
Steps
Pick the month. Default: the previous calendar month. A trigger may name a different one — then use that.
List the workspaces.
month-stats --list— every directory undercountries/with activity, including any country added since this skill was written. Report on all of them, including_global.Per workspace, get the data:
month-stats --workspace <ws> --month <YYYY-MM>It returns: the ledger table (authoritative run counts, errors, minutes, API-equivalent cost), pull requests with GitHub's current state, approval requests, and every journal entry of that month grouped by the task it belongs to. Read all of it before writing anything.
Four things in that output need care:
- Group by task or campaign, never by run or by day. A workspace like
deproduces 50+ journal entries a month from one task. "46 runs completed the 900-operator seed list on 2026-07-25" is the report; a list of runs is not. - Journal state is stale, GitHub's is not. Entries are written when a run
ends, so they say "opened draft PR #x" and never learn it was merged later.
Always use the state
month-statsreports. If a PR opened in this month was merged in the next one, say exactly that. - Separate autonomous work from interactive work. Entries grouped under "no scheduled run — interactive/human work" were written during a hands-on session with a person, not by a scheduled run. Never present those as something the system did on its own. Give them their own short section ("Done with a human in the loop") so the autonomous record stays honest.
- Attributions marked
inferredorambiguousare the tool's best guess. If such an entry carries real weight in your summary, say the attribution is uncertain rather than asserting it.
- Group by task or campaign, never by run or by day. A workspace like
Write one fragment per workspace to
reports/monthly/<ws>/<YYYY-MM>.html— body HTML only, in this shape:<h3>In one line</h3> <p>The single sentence someone should remember.</p> <h3>Shipped</h3> <ul><li>What landed, with the PR and its real state.</li></ul> <h3>In progress / waiting on a human</h3> <ul><li>Open PRs, pending approvals, and who is blocked on what.</li></ul> <h3>Problems</h3> <ul><li>Failed runs, blockers, anything that needs a decision. Omit if none.</li></ul> <h3>Done with a human in the loop</h3> <ul><li>Only if the month had interactive entries. Omit otherwise.</li></ul> <h3>Cost</h3> <p>Runs, errors and API-equivalent cost, from the ledger table.</p>Rules for the fragment, enforced by
render-monthly:- No
<h1>or<h2>— the document title and the month heading are added for you. Start at<h3>. - Allowed tags only:
h3 h4 p ul ol li table thead tbody tr th td strong em b i a code br hr. No<style>, no<script>, no full HTML document. Google Docs discards everything else. - Never edit a previous month's fragment. Past months are immutable; you only ever add this month's file.
Write nothing you cannot point at in the
month-statsoutput. If it reported a GitHub lookup problem, or a workspace had zero runs, say so plainly — an empty month is a legitimate result and hiding it is not.- No
Assemble and publish. For each workspace:
render-monthly --workspace <ws> gdoc-publish --key monthly-<ws> --file countries/_global/reports/monthly/<ws>.htmlDo not pass
--title:gdoc-publishtakes the document name from the<h1>thatrender-monthlywrote, so the two always agree.render-monthlyfails loudly on a bad fragment — fix the fragment, never work around the check.gdoc-publishreuses the document recorded under its--key, so the link stays the same every month;--keymust therefore be exactlymonthly-<ws>. If it warns that a document was recreated with a new link, or that domain access could not be granted, put that warning in your final message — a report nobody can open is not published.Final message. Its first line becomes the Google Chat headline and the rest lands as a threaded reply, so the first line carries the whole month at a glance and nothing else.
Write the first line in exactly this shape — totals across all workspaces, no prose, no preamble, no country names:
Monthly report July 2026 — 3 workspaces, 120 ledger runs, ~$294 API-equivIt must fit 110 characters; past that Chat cuts it mid-sentence with
[…], which is why nothing but the numbers belongs there. Substitute the real month and the real totals, and keep the wordsworkspaces,ledger runsandAPI-equiv— readers scan for them.Then one line per workspace: its name, the single number that matters most for it, and the link.
Tunisia (8 runs, 2 PRs merged): <link> Germany (112 runs, seed list completed): <link> Cross-country (13 runs, 3 Sentry fixes): <link>Add any warning from step 5 at the end.
Notes
- Publishing to Drive is within
autonomous. This task performs no outward action on any Selectra site or repository; it writes a report to the Country OS Reports Shared Drive, the same way every autonomous task already reports to Google Chat. - Documents are owned by the
system@country-osservice account and readable by everyone atselectra.info. They are generated output: the header tells readers not to edit them, because the next run overwrites the file. - Claude Artifacts were the original plan for these pages and are not usable —
the
Artifacttool does not exist in headless runs. See ROADMAP.