*Released by @Bastidores. Translated into English here, like every other row, under the language
rule this site adopted in v0.9.0 — the words are that release's, the language is the house's.*

**The agents become a register, and the mail between them becomes a protocol.** It was three
paragraphs in `dados/equipa.json` and two loose messages in a folder. `dados/agentes.json`
becomes the register, in the form [teams.sgit.ai publishes for a
`ROLE.md`](https://teams.sgit.ai/role-format/index.html) crossed with the one [sgraph.ai
publishes for each agent on its
team](https://sgraph.ai/en-gb/library/agentic-teams/sgraph-ai-team.md). Five roles, and the
fifth — @Bastidores — writes not one line of the paper. Five others are named as **not built**,
with the reason, because a register claiming roles nobody runs would be claiming a capability.

**The field that makes this a team is "not responsible for".** Without it every role silently
becomes the same role — which is why it is in every definition, saying whose the work actually
is. Each role's central claim is written as a **failure condition**, so it can be contradicted
rather than admired.

**Email-FS-lite, as published, with the difference said out loud.** The mail runs on the
protocol the sgraph.ai team publishes and runs: one writer per folder, dispatch as the only
shared surface, one commit per cycle, immutable `.eml` messages that only move. A message's
state is **the folder it is in** and not a field, because a field can disagree with the folder
and a folder cannot disagree with itself. The protocol was designed for a vault, where `sgit
pull` is the inbox notification; here it runs in a git repository, and that difference is
written in `redacao/correio/LEIA-ME.md` rather than disguised.

**One reader, and a second reader caught out of date.** `build/equipa.py` reads the folder and
derives `dados/correio.json`; everything else reads the derived file. v0.3.1 was the deletion of
a second document reader, and this cycle's integration showed why: `build/mesa.py` counted the
mail by opening the folder, and after the migration counted zero **without failing**. A fault
that does not fail is the worst kind, and two readers created it. There were also two lists of
agents — one hand-written in `build/comentarios.py` — and now there is one.

**The bridge: the editor can talk to the newsroom from the browser.** This site is static and
cannot write to the repository; a vault append queue closes that gap without giving it a server,
because it splits access into four capabilities that do not overlap — whoever holds the code
**appends and nothing else**, and the response to an append is blind on purpose. It is built and
**credential-free**: the vault id and the code are given to the browser and live in
`localStorage`, because the validator's key-shaped-string tripwire would fail the build if one
entered a file — which is the gate working rather than a rule being remembered.

**A finding from the games vault that changes the design.** Its telemetry built events and never
sent them. The cause was not the code: a vault app runs in a frame whose CSP is `connect-src
blob: data:`, and the only way out would reopen every exit from a frame holding decrypted
content. This site is not a vault app — so what the games telemetry could not do, this site can.
The difference is one of surface, not of effort.

**"Talk to this content", at both levels, and level 0 is the default because it says why it
chose.** A deterministic comparator running in the browser against the index the build emitted,
showing the words that matched and where. Level 1 is the reader's own key, with eighteen tools
that are `GET`s to `/api/v1/` — unusually safe to hand a model, because the API is only files
and the worst a call can do is read something already public. Four new API collections: agents,
mail, board and bridges.

**What is blocked, and is the editor's.** `dados/aviso.json` does not mention telemetry, and
while the bridge is off that is correct. The moment it takes credentials the notice is wrong by
omission — and the IP address the queue's server sees has to be written down, because it is the
one part the reader cannot verify. The order is **the notice first, the credentials after**,
which is the order this site already got right once, when the notice was published before the
first page that names anybody.

**The review of the other agent's work, and three things it changed.** The browser gate he added
the same night — `admin/build/render.mjs`, which opens every page in a real Chromium — found a
real defect in this version the first time it ran over it: the bridges page overflowed at 390px,
`scrollWidth 413 > 390`. The cause was a `<select>`, which takes its width from its longest
option and will not shrink below it. Fixed, and it is the gate's argument made in public: none
of the other three would have seen it.

**The gate did not cover the new pages, and the omission was exactly the exemption gate 26
forbids.** `render.mjs`'s page list is made of components, and this version's four pages use
none — but they have code that runs, and the bridges page has the largest script block on the
site. All four join the list: 15 pages in a browser instead of 11.

**And "ready" on two components did not mean what the base class says it means.** The comment on
`pronto()` promises `data-estado` is only set once the component "has actually finished loading
whatever it loads". `pt-json-viewer` and `pt-doc-browser` started their load without awaiting
it, and so became "ready" when the shell mounted — the same false health `falhou()` was added to
remove, one level down. Both now await what they started.
