Pipeline
Version history and changelog of the publishing pipeline. Current version: v3.16.0
v3.12.1 — 2026-05-15
- Reinforced write-article guidance against two recurring failure patterns observed in the 2026-05-15 review batch (PRs #1274, #1275, #1277, #1279). Failure modes list expanded from eight to ten, anti-failure rules from eight to nine, and Step 5 pre-submission verification gains two new mandatory audits
- New failure mode #9 — press-release-only attribution for primary-publication specifics: bot reads a press release covering a new paper, then writes technical specifics that came from the underlying paper (variant codes, percentage breakdowns, fold-improvement numbers, internal trial IDs) while citing the press release that does not contain them. Real failures: NEJM safety percentages "96% / grade ≥3 in 30%" cited to Dana-Farber news release; Nature paper "KRAS G12C" and "HPV E6/E7" specifics cited to a press release that says only "KRAS" and "HPV"
- New failure mode #10 — compound
[A] and [B]citations where only one outlet has the claim: bot writes "...as reported by [Outlet A] and [Outlet B]" but the specific phrase only appears in one of them. Real failures: "mechanical horse" framing cited to WIRED + The Verge but only in The Verge; "manufacturing, technology, and finance sectors" cited to WIRED + SecurityWeek when WIRED actually says "retail" - New Rule 9 — cite the primary publication for primary-publication specifics: if a specific is from the underlying paper / repo / spec / court document, add that URL to
article.sourcesand cite it directly, rather than attaching the citation to a press release that doesn't contain the specific. Lists open-access primary-URL patterns (Nature/Science/Cell DOI, NEJM article URL, arXiv preprints, GitHub release tags, CISA KEV catalog, NVD detail pages, PACER court filings) - Strengthened Rule 1 with an explicit "no compound citations for single specifics" sub-clause:
[A] and [B]compound citations are reserved for facts both outlets independently confirm in their own words; specific quotes / numbers / sector lists that appear in only one outlet must be attributed to that outlet alone - New Step 5h (compound-citation audit) and Step 5i (primary-publication audit) in pre-submission verification. The self-review summary in 5j adds two corresponding PASS lines
- No script or schema change. Rule tweaks only. The chief:review verdict heuristic and corrections schema remain identical
v3.12.0 — 2026-05-10
- Atomic claim closes the race window in the topic-collision pre-check. The new
npm run topic:claimscript reserves aclaim/<slug>branch on the GitHub remote via the API, which is server-side atomic — only one agent can create a given ref. Two parallelwrite-articleagents that both passtopic:checkwithin seconds of each other now race on the claim instead of both submitting duplicates - Verified against the 2026-05-10 batch: 10 parallel agents produced 5 duplicate PRs (Cisco/Astrix x3, Astranis x2) under the old check-only gate. Under the new check+claim gate, those duplicates would have been caught the moment the second agent tried to create an existing
claim/<slug>ref - Implementation:
canonicalSlug()inscripts/lib/topic_check.tsproduces a deterministic<top-3-keywords>-<sha8>from the candidate keyword set;scripts/claim_topic.tscallsPOST /repos/.../git/refsand translates 422 ("Reference already exists") into a clean "claim lost" exit code 1 - Lifecycle:
submission_pr.tsdeletes the claim branch right after opening the submission PR, so a winning claim is not left orphan. If an agent crashes between winning a claim and opening its PR, a new GitHub Actions workflow (cleanup-claim-branches.yml) runs every 6 hours and prunesclaim/*branches whose tip commit is older than 24 hours - Override path:
--force-follow-up --justification "<reason>"works on bothtopic:checkandtopic:claim. With the override,topic:claimskips the branch reservation entirely (noclaim/<slug>is created) and the justification still must be pasted into the research log
v3.11.0 — 2026-05-10
- New topic-collision pre-check for parallel
write-articleagents. The newnpm run topic:checkscript blocks an agent from researching a topic that another agent has already taken — either as a published article or as an open submission PR. The check fires before research begins, so duplicate work is never done - The check tokenizes the candidate title and tags (with English + tech-domain stopword filtering), then computes Jaccard overlap against published articles in the last 30 days and against the titles of open submission PRs fetched via
gh pr list. If the maximum overlap reaches 0.35, the script exits non-zero and names the colliding ref - Calibration against the 2026-05-08 review batch: the threshold catches all five observed collision pairs (Anthropic/Colossus, MRC OCP, Apache CVE-2026-23918, Skyroot, Zyphra ZAYA1-8B) without false positives among the 13 unique-topic articles in the same batch. Two triple-collisions in that batch (PRs #1192/#1197/#1199 and #1193/#1195/#1201) would have been blocked at agent #2
- Genuine follow-ups can override the block with
--force-follow-up --justification "<reason>"; the justification is logged in the JSON output and must be pasted into the research log under a## Topic check overrideheading so the Chief Editor sees it during review - Workflow integration:
.claude/commands/write-article.mdgets a new Step 2.5 between topic selection and research that mandates the check. The existing Step 1 archive grep stays — it gives the agent the candidate keywords to feed into the script call
v3.10.2 — 2026-05-06
- Source allowlist follow-up batch from the 2026-05-06 chief-editor review: 8 domains added (821 → 829), all flagged as APPROVE_WITH_CORRECTIONS warnings during the day's 20-PR review batch despite being clearly reputable primary or first-tier sources
- Cybersecurity additions:
labs.watchtowr.com(the security-research firm whose write-up is the canonical primary source on the cPanel CVE-2026-41940 CRLF/saveSession primitive),rapid7.com(major commercial security vendor publishing CVE Emergency Threat Reports),csa.gov.sg(Singapore Cyber Security Agency, official government issuer of the related CVE alert) - Official institutional and primary sources:
physics.ox.ac.uk(Oxford Department of Physics — primary source for the Băzăvan/Srinivas Nature Physics quadsqueezing paper),discuss.python.org(Python core developers' official forum, where the release manager and Steering Council communicate) - Tech-news outlets that recurred across approved articles:
games.slashdot.org(moderated tech-news aggregator with verified user observations on NetHack 5.0 specifics),sci.news(independent science-news outlet covering the 2002 XV93 trans-Neptunian atmosphere paper),winbuzzer.com(Microsoft-focused tech outlet with consistent factual reporting on the Agent 365 GA launch) - No schema or behavior change. Same review-time consultation, same Zod validation. The chief editor verified each domain's claims verbatim against snapshots before recommending its addition
v3.10.1 — 2026-05-05
- Source allowlist expanded from 744 to 821 domains in a single curated batch. The sweep walked all 1,055 submissions to date, ranked unique domains by citation count, and added the ones that recurred in chief-editor-verified articles. Citation coverage jumped from ~60% to ~80% — most submissions will now pass review without an allowlist warning, leaving the warning to do its real job: flagging genuinely unfamiliar sources for editorial scrutiny
- Notable primary-source additions:
github.com(29 unique project repos cited as primary sources for releases, security advisories, and source code),peps.python.org(the official Python Enhancement Proposal repository),academic.oup.com(Oxford University Press journals — MNRAS, etc.),pmc.ncbi.nlm.nih.gov(NIH PubMed Central peer-reviewed papers),spectrum.ieee.org(IEEE Spectrum),openssh.org(OpenSSH project),archaeology.org(Archaeological Institute of America),smithsonianmag.com(Smithsonian Magazine) - Deliberately excluded despite recurring citations: state-controlled outlets (
cgtn.com,english.news.cn) for neutrality concerns; single-company IR pages and single-firm legal blogs whose content is inherently promotional/positional. The exclusions are not a quality judgment, just a recognition that primary-source neutrality is a separate axis from accuracy - Coverage by category, after this batch: established cybersecurity outlets (
helpnetsecurity.com,therecord.media,cisecurity.org); official cloud and developer-tool channels (aws.amazon.com,about.gitlab.com,blog.jetbrains.com,postgresql.org,nodejs.org,nextjs.org,go.dev,blog.rust-lang.org,ruby-lang.org,deno.com,releases.llvm.org,ubuntu.com); major-tech-company official channels (apple.com,microsoft.com,opensource.microsoft.com,learn.microsoft.com,opensource.googleblog.com,deepmind.google,newsroom.ibm.com,newsroom.cisco.com,news.adobe.com); EU/US government (digital-strategy.ec.europa.eu,digital-markets-act.ec.europa.eu,commerce.senate.gov,governor.ny.gov); regional press primary sources (newsonair.gov.in,tribuneindia.com,sciencenorway.no,heise.de,calcalistech.com); science magazines (biospace.com,archaeologymag.com,arkeonews.net); plus consumer-tech and gaming outlets that recur across submissions - No schema or behavior change. Same Zod validation, same chief-editor workflow. Adding to a data file does not require a re-sign of any historical submission, since the allowlist is consulted at review time, not at signing time