The principles, and the gate that enforces each one
The principles, and the gate that enforces each one
A rule without a gate is decoration. coding.sgit.ai measured its own estate and found a guard that had never matched anything — a guard that passes because it cannot fail. So every principle below names the thing that stops the build when it is broken, and where a principle has no gate, it says so in those words rather than pretending.
The seven rules in CLAUDE.md outrank this page. These are the working principles that follow from them.
---
1. Everything except what a visitor reads is in English
One test, in language.md: would a visitor read this string on the site?
Gate 34 (build/gates_artigos.py) reads every comment and docstring in build/, admin/build/ and assets/components/ and fails on Portuguese. Two honest exceptions are declared in language.md and encoded in the gate, not hidden in it.
2. Every claim walks back to bytes
A source is fetched, frozen to fontes/congeladas/<date>/<page>.snapshot, hashed with SHA-256 and registered before any claim stands on it. A claim with no source is a build failure.
Gate 1 re-verifies every hash on every build. Gate 17 checks every [[fonte:…]] mark and every cited source resolves in the register. Gate 2 fails if a frozen copy is ever served as a page of this site — that is why the extension is .snapshot and not .html.
3. A name is verbatim, and accents come from the source
Names of people and organisations are copied from the frozen bytes, with the accents the source gave them. Not from a typed list, not normalised, not corrected.
Gate 9 checks every name against the frozen bytes and reports which direction the drift went. It runs inverse to the estate's ASCII convention, and this repository says so out loud.
4. Nothing is attributed to anyone who did not say it
This is the one failure mode that does not look broken. A comment attributed to a model that never wrote it is a claim with a forged source, which is worse than a claim with none — you cannot tell it from a real one without leaving the site.
So agent activity is derived, never authored: every entry in a comentarios.json names the file and path it came from. Gate 25 opens that file and walks that path.
5. Only the named human editor publishes
estado: publicado is one person's line. No automated run may write it, and the newsroom floor has no control that moves a card into that column — the absence is the design.
Gate 11 fails any story in publicado that the editor did not sign. Gate 26 fails a construction run that moved a card at all.
6. A department only writes in its own folder
Research freezes sources. The newsroom writes prose. Verification writes verdicts. The run record lists the diff by folder.
Gate 12 fails a run that crossed a line. Gate 26 closes the exemption: a run that declares no department must declare its especie, and a construcao run that froze a source, moved a card or published anything fails. An exemption any run can claim by typing the right word is not a boundary — it is a door with the name written beside it.
7. The graph reads aloud in Portuguese
Every edge is a Portuguese verb with a distinct named inverse. Symmetric verbs are banned. A path that does not read as a sentence is a wrong edge.
Gate 10 reads every verb aloud and fails a reading that is not a sentence — and fails any reading touching a Pessoa that agrees a participle in gender, because the source does not publish anyone's gender and inferring it from a name is a refused inference.
8. Classification is a published formula or it does not happen
Deciding that a string is an entity, that a page is about a sector, or that a publisher is one house rather than two is classification. Each one is published as data — dados/lexico.json, dados/entidades.json#formula, ontologia.formulas — so a reader can disagree with the formula rather than with the result.
Gate 8 re-runs each lexicon pattern over the bytes. Gates 22 and 23 check every entity link against its published formula and its stated ground.
9. Version everything, and show the version
admin/build/version.txt is bumped once per release, the commit subject repeats it, the badge is on every page, and admin/versions.html gets a row saying what changed and why.
The site gate (admin/build/validate.js) checks all four agree, with no duplicate rows. CI validates, tags and deploys; a red validate is not a release.
---
The principle with no gate
Read the brief before changing what the brief asked for. Nothing enforces this and nothing can. It is the reason briefs/pack/ is kept whole in this repository rather than summarised: a summary of a brief is how a project quietly stops doing what it was asked to do.
← The language rule · Before you change anything →
This page is rendered from
docs/guidance/principles.md by build/guia.py. The
markdown is the source; edit that and rebuild. Nobody hand-edits this file.
build/newsroom.py from the files in this
repository; nothing here is hand-written. The machine-readable index of the publication is at
llms.txt. Source: github.com/SGit-AI/SGit-AI__Website__Newsroom__PT · file:
newsroom/guidance/principles.html · version v0.23.6.