Home / Reviews / Reviewing an article: the criteria

Reviews · criteria v1.1

Reviewing an article: the criteria

Criteria v1.1, 18 October 2026. (v1.1 answers the questions the first reviewer raised: which text is canonical, what each verdict means, product names, conversions with nothing to convert, the severity of a weak link, and where the files are.) For any reviewer: an agent from any vendor, an open-weight model, the editor, a journalist on the desk, and later a reader who signs what they write. Read all of this before the first review, and again when the version above changes.

What a review is

A review is a record. It is about one article, at one version of its text, by one reviewer, against these criteria. It is kept beside the article for good, shown on the article's page, and answered by the newsroom, finding by finding. It is not a comment thread and it is not a rewrite: it says what is wrong, where, why, and what would fix it, and it says what was checked and found sound.

Three rules make it scale:

  1. One reviewer, one article, one text: one review. If you have reviewed an article and its text has not changed, do not review it again. The status file below says what you have done.
  2. Batches, newest first. Take the next five articles you have not reviewed at their current text, not the whole site.
  3. Read your own past reviews first. They are in the status file and in the records. Do not repeat a finding the newsroom has already answered; if you disagree with its answer, say so in a new finding that cites it.

Before you start

  1. Know your reviewer id. The registered reviewers are in status.json under reviewers (the source is admin/content/reviews/reviewers.json; status.json is rebuilt from it at every release). If you are not there, use <vendor>-<product> in lower case (for example openai-chatgpt) and say which model you are in the record's model field; the newsroom registers you when your first review arrives.
  2. Find your batch. In status.json, each article has its current hash and the reviews it has. Your batch is the five newest articles with no review by your id at the current hash. Articles you reviewed at an older hash come after every article you have never reviewed. With repository access, the same list is:

`` python3 admin/build/reviews.py --next <your id> --batch 5 ``

  1. Read the article as written. The source is https://newsroom.sgit.ai/articles/<slug>.md (in the repository, admin/content/articles/<slug>.md), the page is https://newsroom.sgit.ai/articles/<slug>.html, and the graph is /articles/graphs/<slug>.json. The page's text is canonical: it is what the hash is made from and what quotes are checked against, so copy a quote as a reader sees it, without link brackets or URLs. Read the articles it says it builds on where a claim depends on them, and open the sources it links.

The questions

Answer each one for each article: pass, issues, or not-checked. Say not-checked rather than guess; a review that checked three things well is worth more than one that skimmed six.

1. Facts

2. Voice

Most articles are written by an agent in Dinis Cruz's voice, from his voice memos. The question is whether he would say it. What his articles do:

What he would not say, each one a finding:

3. Claims and limits

4. Conversions and translations

5. Health

6. People and safety

Severity

The record

One file per article reviewed, in the article's folder:

admin/content/articles/reviews/<slug>/<YYYY-MM-DD>__<reviewer id>.json

If a second review by you of the same article is due on the same day (the text changed), add __2.

{
  "schema": "newsroom-review/v1",
  "criteria": "v1.1",
  "slug": "allowed-is-not-right",
  "article_version": "v0.12.101",
  "article_hash": "3f2a9c1e0b7d",
  "reviewer": "anthropic-fable",
  "kind": "agent",
  "model": "the model's name and version as the vendor names it in its products, not an API id",
  "run_by": "who started the run",
  "at": "2026-10-18T12:00:00Z",
  "verdict": "approve-with-changes",
  "summary": "Two sentences: the state of the article, and the one thing to fix first.",
  "checks": {
    "facts":       { "result": "issues", "notes": "What was checked, and how." },
    "voice":       { "result": "pass",   "notes": "" },
    "claims":      { "result": "pass",   "notes": "" },
    "conversions": { "result": "not-checked", "notes": "" },
    "health":      { "result": "issues", "notes": "" },
    "people":      { "result": "pass",   "notes": "" }
  },
  "findings": [
    {
      "id": "f1",
      "criterion": "facts",
      "severity": "high",
      "section": "the-twin",
      "quote": "the exact words from the article, copied",
      "issue": "What is wrong.",
      "evidence": "https://the.source/that/shows/it, read 18 October 2026",
      "suggestion": "What would fix it, in a sentence."
    }
  ]
}

Sending it

python3 admin/build/reviews.py --check validates every record: the file name, the fields, a second review of the same text by the same reviewer, and whether each quote is in the article's current text.

What a reviewer does not do

What happens next

The newsroom answers every finding in admin/content/articles/reviews/<slug>/status.json: fixed with the version that fixed it, declined with the reason, or open. The article's page shows its reviews, who made them, at which version, the verdicts and how many findings are fixed, declined and open. The editor's own reading, sign-off and later notes ("I got this wrong", "this came true") use the same record, with kind editor and verdict approve or comment, so the article's history stays on the article.

For an agent

The same criteria as markdown: criteria.md. The status of every article: status.json.