for agents/docs/llms.txtv0.7.39 · 10 Oct 2026

Home / Docs / Briefs / Moving the newsroom

Brief · for the newsroom.sgit.ai session · 10 October 2026

Moving the SGit Newsroom from sgit.ai to newsroom.sgit.ai (migration brief)

The SGit Newsroom grew up inside sgit.ai: 65 articles since 17 August, 47 of them in the first ten days of October, plus the desk that places them, a newsletter, and a reader account with a meter, personas and a way to send us one's reading. It has outgrown a product site. It moves to newsroom.sgit.ai, which until now has argued for exactly this kind of newsroom without running one. This brief is for the agent working in the newsroom.sgit.ai repository: what exists, where every piece of it is, what to build on your side, the order to do it in, and what not to break.

Decided by Dinis Cruz, 10 October 2026. The newsroom moves to newsroom.sgit.ai. The site there today becomes the reference for the design it argued. sgit.ai keeps its copies for links and reference for a while, drops them from its top navigation, and decommissions them later. Everything stays client side: no server, no database, reader data only in the reader's browser.

Start here

  1. Download the bundle: newsroom-move-bundle.zip (source, content, components and this brief as markdown; images listed by URL, not included). Every file in it is also public on sgit.ai at the same path, for example https://sgit.ai/admin/build/newsroom.py, so you can always fetch the current version instead.
  2. Read your own repository first and write down what it does today: its generator, its gates, its navigation, its /newsroom/ page. Change nothing in phase 0.
  3. Follow the phases below in order, and stop at the end of each for Dinis to look. Each phase has its acceptance checks.
  4. Ask before anything in decisions. Those are his.

What is moving

PartOn sgit.ai todaySource
Articles (65)/articles/, one page per article, each with a markdown twin, a card, an Open Graph image, often a LinkedIn banner, and the "threads" (what it builds on, what builds on it)admin/content/articles/*.md
A graph per articlecore idea, typed nodes and edges, links, quotes checked word for word against the article at build; all of them in /articles/graphs.json and drawn on /articles/graphs.htmladmin/content/articles/graphs/*.json
Article versionsevery article's history and diffs, from gitadmin/build/article_versions.py, article_diff.py, article_versions.json
Read it another waythe five readers (librarian, cartographer, historian, explainer, storyteller) for some articlesadmin/content/articles/views/<slug>/
The front page/articles/index.html: lead, latest, highlights, desk notes, collections, every article with topic filter and search; placement from one fileadmin/content/newsroom/front.json
The newsroom, backstage/newsroom/: six roles with behaviour policies, publishing guide, board, run log, pitches, desk healthadmin/content/newsroom/{roles,board,log,pitches}, admin/build/newsroom.py, desk.py, policy_check.py
Desk notes (4), collections (5)/articles/desk/, /articles/collections/admin/content/newsroom/{notes,collections}
Newsletter (2 issues)/articles/newsletter/, also published on LinkedIn as "Deterministic GenAI"; each issue has a LinkedIn kit and banneradmin/content/newsroom/newsletter/*.md
Subscribe/subscribe/: the address is encrypted in the browser and dropped into a write-only append laneassets/subscribe.js, .well-known/sgit-subscribe.json
The reader account/account/: the reading meter (pay by depth, below zero allowed, usefulness sets the price), history, graph, personas, the newsroom of your own, share your reading, top-up and the Stripe return pageSG Meter v1.3.1, assets/components/sg-meter/v1/v1.3/v1.3.1/ and the base class at assets/components/base/v1/v1.0/v1.0.0/
SG Meter, the library/meter/ and /meter/security.htmladmin/content/meter/*.html
Feeds for people and agents/articles/feed.xml, /newsroom/wire.json, graphs.json, the markdown twins, the llms.txt sectionsgenerated by the build

What does not move: the product documentation, the published vaults and their pages, the API and CLI docs, the case studies, the network pages and the site's own admin. Articles about sgit itself (for example what sgit is) move with the rest, and sgit.ai links to them.

How it is built today

One Python generator, admin/build/build_pages.py (about 7,700 lines), builds the whole of sgit.ai from admin/content/; validate.js gates it (links, orphans, the authoring contract, house style); release.sh builds, validates, commits as site vX.Y.Z: …, pushes to the deploy branch and waits until the live site serves the new version. The newsroom parts are entangled with the rest, so expect to extract rather than copy. The pieces, by function (line numbers as of v0.7.36):

ConcernWhere
Loading articles (front matter, !shot, !source, !trail, graphs, quote checks)content.py (Content_Loader); ARTICLES, BY_SLUG, ARTICLE_OUT/IN near line 5393
The editorial layer: roles, front, pitches, board, log, notes, collections, issues, findingsnewsroom.py (Newsroom); desk.py; policy_check.py
Article pagearticle_body, article_threads_block, article_desk_block, article_views_block, linkedin_kit
Front page and indexesarticles_index_body, _masthead, _lead_block, _latest_rail, _high_card, articles_filter_bar, collections_index_body, desk_index_body
Backstage pagesnewsroom_index_body, newsroom_role_body, newsroom_policies_body, newsroom_publish_body, newsroom_board_body, newsroom_log_body, newsroom_pages
Graphsgraph_svg, articles_map_svg, articles_graphs_body; graphs.json is written alongside
Newsletternewsletter_index_body, issue_body, subscribe_body, subscribe_block
Banners and cardswrite_banner_manifest, then make_banners.mjs (Playwright); make_og_cards.mjs (needs sharp)
Reader account and meterMETER, PERSONAS, PERSONA_NAMES, meter_kind, meter_config, the injection in page(); account_body, yours_body, personas_body, share_body, topup_body, toppedup_body
Feedswrite_wire, write_articles_feed, the llms writers
Testsadmin/build/test_meter.mjs (28 checks in Chromium against the built site, no mocks)

Where things go on newsroom.sgit.ai

Keep every path the same. The articles have been linked from LinkedIn articles and newsletter issues; if sgit.ai/articles/x.html becomes newsroom.sgit.ai/articles/x.html, the forward from the old address is one rule and nobody has to keep a map.

On sgit.aiOn newsroom.sgit.aiNote
/articles/… (articles, desk, collections, newsletter, graphs, feed, images, cards, banners)/articles/…free there today
/articles/index.html (the front page)/ and /articles/index.htmlthe front page becomes the homepage; see decisions
/newsroom/… (backstage, wire.json)/newsroom/…collides with the existing /newsroom/index.html (the design of the newsroom's roles and operations). Move that page to /design/newsroom.html and keep a forward at its old path
/account/…, /subscribe/, /meter/samefree there today
/.well-known/sgit-subscribe.jsonsame, unchangedthe same public key and lane; subscriptions and reading shares keep landing in the same vault
(newsroom.sgit.ai's own sections: thesis, corrections, provenance, economics, rights, mvps, portugal, governance, world-news-day, databases, documents, library, shipped, network, about, admin)unchanged pathsgrouped in the navigation as The design and The instances; nothing of theirs is deleted

Phases

Phase 0: read, inventory, no changes

Phase 1: the articles, exactly as they are

Phase 2: the newsroom around them

Phase 3: the reader account

Phase 4: feeds, agents and the outside world

Phase 5: cutover (both sessions)

What not to break

Decisions for Dinis, before or during the move

  1. The homepage. The newsroom front page at /, with the current thesis page one click away (recommended), or the thesis stays the homepage.
  2. The meter's storage key on the new origin: keep sgit.meter.v1 (simplest for imports) or start newsroom.meter.v1.
  3. The £5 Stripe Payment Link is still not created. Its redirect should point at https://newsroom.sgit.ai/account/topped-up.html?session_id={CHECKOUT_SESSION_ID} once the move is done.
  4. SG Meter's documentation: move with the newsroom (recommended, it is where the meter runs) or stay on sgit.ai as a product library.
  5. The name. "SGit Newsroom" for now; a better name can come later as an alias.

Open items handed over

Why this brief is public

Because it is an example of the flow it describes. A decision made in a voice note, a brief written for another agent with the facts it needs and the lines it must not cross, published where anyone, person or agent, can read it and check it against the source files it names. The other session reads this page; Dinis reviews each phase; the articles keep arriving while the move happens. If the brief is wrong about something, the fix is a correction to this page, recorded as one.

Written by the Claude Code session that built the newsroom on sgit.ai, from a voice note by Dinis Cruz, 10 October 2026. Counts and line numbers are as of site v0.7.36.