**The editor gets a page that asks him the questions, instead of six pages he has to read.** Coming
back after a day away meant reconstructing, from the release notes, the delivery pages, the board,
the mail, the revision files and the articles, what had happened and what was now his to decide.
Every one of those is honest and none of them is a briefing. `/redacao/revisao/` gathers the open
questions — and only the ones whose answer is the editor's to give — with the file each answer has
to end up in and the agent that will put it there. Today: six research items, one blocked issue, one
ontology proposal.

**It captures answers and it writes nothing, and it says so on the page.** A verdict, a comment and
a reaction per question, kept in `localStorage` so a review can be interrupted and resumed, and then
handed back as a block of text addressed to the agent that will do the work — copy all, or copy just
what goes to one agent. **This site is static and cannot write to git, and a console that looked
like it recorded a decision while recording nothing would be the one dishonest page on a publication
whose whole argument is that nothing is asserted without bytes behind it.** The browser holds the
editor's words; an agent turns them into files; nothing is a decision until the file exists. A
question with no verdict stays `por rever`, which is what the quarantine gate already enforces — so
the safe state and the default state are the same state.

**And the page does not pretend to know when your last review was.** It lists when each thing
happened and leaves "have I seen this?" to the browser, because that is knowledge about one person
on one device, not a fact about the newsroom.

**The interview method, and the prompts that do it.** `briefs/pack/09__entrevistas/` is the other
half of what this newsroom publishes: `08__research-briefs/` sends an assistant after documents,
this sends it into a conversation. Four pieces — the interviewer prompt in Portuguese and in
English, the topic block that is the only part that changes, and the prompt an agent is given to
assemble a pack for one named person. A person too busy to write two pages about their work will
talk for twenty minutes about it, at an hour that suits them, by voice or by typing.

The rules do not bend for it: an interview is a primary source **about the person speaking and
nothing else**, so what they assert about the world is a claim to verify and not a fact for having
been said aloud; three fields per person as everywhere else on this site; no contact detail in any
file; the interviewee approves the report and the editor of record decides publication, two
decisions neither of which substitutes for the other; and removal on request stays unconditional and
carries no reason.

**`/redacao/entrevistas/` renders those prompts rather than linking them, and gate 42 makes that
safe.** A prompt is copied, not read — by someone about to paste it into ChatGPT, often on a phone —
and sending them to a raw markdown file to select-all is how you lose them. So the page is a second
VIEW of one copy: rendered from the markdown on every build, marked derived, and checked. **A
derived file with no gate is a second copy with extra steps**, which is what gate 28 learned from
the agent mandates. Gate 42 was broken on purpose in both directions before it was trusted — a
hand-edited page and a source changed without a rebuild — and its first version passed the
hand-edited page, because it sampled a single line. A gate that checks one line certifies one line.
It now samples across the whole file.

**One latent bug, found by the browser gate.** The entity linker turns a name's first mention into a
link, and it protected `<a>` and `<code>` but not `<script>`. The review page carries its questions
in an inline `<script type="application/json">`, and the linker reached inside and rewrote entity
names there into `<a class="ent" href="…">` — well-formed HTML, and JSON with unescaped quotes in
the middle of a string, so the component failed to parse it and declared itself in error. **No other
gate could have caught it**: the page was valid, the damage was inside a string, and only opening it
in a browser showed anything wrong. The linker now skips `<script>` and `<style>`, which is what it
should always have done for any page carrying inline data.

*Numbered v0.23.1 and not v0.24.0: every push to `dev` is a minor release, and the minor is the
third component. `build/before_push.py` says to take the next second component, which disagrees with
`CLAUDE.md` and with what CI's tag job computes as `NEXT_MINOR`; the editor's instruction settles
it, and the tool's advice is noted for whoever owns that file.*
