---
title: Editorial Line
type: L3-rule
license: CC-BY-4.0
attribution: azimuth (HemySphere doctrine demonstrator)
---

# Editorial Line (L3)

**facts in, opinions out.** (Michael 2026-06-24.)

azimuth surfaces **any** channel that monitors **facts** — observed events,
measurements, positions, records — and is **free-to-use** (license-clean). It reports
what the open data **shows**, with provenance. It never advises, predicts harm, takes a
political or safety side, or editorialises. This is the line the `azimuth-curator` writes
inside, the `synthesis` lint enforces (`synthesis/lint.py` `check_editorial_denylist`),
and the source-guardrail enforces at the channel boundary (`guardrail/source_guardrail.py`).
A rule without a lint line is a TODO, not a rule — so each clause below names its enforcement.

## The line: facts allowed, propaganda denied

| | Allowed — an observed FACT (surface it) | Denied — an OPINION / POSITION (exclude it) |
|---|------------------------------------------|----------------------------------------------|
| **Markets** | "EU gas storage rose to 62% ([[natural-gas-storage-eu]])" | "buy/sell", "go long", "price target", "will rise to $N" |
| **Hazards** | "USGS logged a M5.8 event ([[earthquakes]])" | "imminent disaster", "the quake will strike", "you should evacuate" |
| **Conflict / unrest** | "A conflict event was recorded at <place> on <date> ([[conflict-events]])" | "the regime is to blame", "war crimes", "the aggressor must be stopped" |
| **Maritime / aviation** | "Vessel X reported position <lat,lon> ([[vessel-tracking]])" | "this proves an imminent blockade / strike is coming" |
| **News** | wire/agency **fact-reporting** of what happened, sourced | op-ed, editorial, advocacy, "in my view", "it is clear that" |

**Sensitivity is never a deny reason.** A factual record is allowed even on a sensitive
topic — a conflict EVENT, a ship POSITION, a flight TRACK, a power outage, a cyber
incident are observed facts (allowed). An OPINION about them is propaganda (denied).

**The gate is two ANDed conditions:** a channel is surfaced iff it is **factual** AND
**free-to-use** (public-domain / CC / API-ToS-permitted / non-commercial-with-attribution,
since azimuth is a non-commercial demonstrator carrying `CREDITS.md`). A restricted or
commercial-only feed stays out on **license** grounds — that is a separate bar from the
editorial line, and the source-guardrail tags the reason `license` vs `editorial`.

### News (allowed) — the per-source filter

NEWS is a factual channel: surface wire/agency **fact-reporting** (what happened, where,
when, sourced). The per-source filter keeps only fact-reporting outlets and **strips
op-ed / editorial / advocacy** sources. Report the event, never the outlet's opinion of it.

### Not surfaced as channels — forecast / assessment / scenario

Predictions, intelligence assessments, and hypothetical scenarios are **not** observed
facts, so they are **not** azimuth channels. azimuth instead uses them as **benchmark
foils**: it proves its USP by contrast — observed + sourced facts vs predicted / assessed
opinion (see work-item `azi-benchmark-vs-forecast-intelligence-W26`). prediction-MARKET
prices are the exception: the **quoted price is an observed fact**, so it stays allowed
(with a synthesis caution forbidding investment framing).

**Prediction markets are briefed (owner review 2026-06-26 — reverses the earlier hold).** The
earlier call (#862, 2026-06-24) kept prediction-markets **L1-only** — ingested but not
briefed — on a synthesis-breadth concern (the live feed surfaced a single market). Michael
reversed that in the 2026-06-26 interactive review: prediction-markets are now **in scope for
this fact-vs-propaganda lens** and the `Prediction Markets Weekly` L2 brief lands. The
editorial discipline is unchanged — it *is* the change's safeguard: azimuth reports the
**venue-quoted price as an observed fact** (the implied probability and traded volume), with
the `no-investment-framing` / `odds-are-not-forecasts` caution, and takes **no position on the
underlying question** the market asks. The price is the market's number, never azimuth's
forecast. The single-market breadth that justified the old hold is now handled by an explicit
honest-scope note inside the brief, not by withholding it. (`sources/registry.json` →
`themes.prediction-markets.brief_landed`.)

## Positive contract (L2 synthesis)

- Every claim paragraph or bullet carries **>=1 `[[wikilink]]`** to the L1 note it rests on
  (enforced: `check_claim_sourcing` + `check_l1_links_exist`).
- Describe the **signal and its source**, not what the reader should do, think, or feel.
- Quantify from the data; attribute uncertainty to the data, not to a forecast of ours.
- Report **observed**, never **predicted**. Assign no blame, take no political or safety side.
- When data conflicts, say so and link both L1 notes — do not resolve it with an opinion.

## Enforcement map

| Clause | Enforcement |
|--------|-------------|
| Channel is factual, not propaganda/opinion | `guardrail/source_guardrail.py` (`denied-content-class` / `denied-risk-flag`, category `editorial`) |
| Channel is free-to-use (license gate, separate bar) | `guardrail/source_guardrail.py` (`missing-license` / `unrecognised-license`, category `license`) |
| No investment / safety-position / propaganda / advocacy framing in L2 | `synthesis/lint.py` `check_editorial_denylist` |
| Every claim sourced | `check_claim_sourcing` |
| Links point at real L1 notes | `check_l1_links_exist` |
| Curator never edits L1 | `check_diff_guard` |
