Cada gate abaixo é gerado do catálogo no código. O anchors init semeia os que têm relação com as camadas e artefatos que o projeto declara; o anchors doctor lista o catálogo inteiro, e o anchors check --all aponta os gates que cobrem o que o projeto declara mas não estão declarados.
| Gate |
Confronta |
O que mede |
unit-complete |
spec |
The spec has code, feature and test that realise it |
spec-has-code |
spec |
The spec carries a scenario code (identity) |
spec-complete |
spec |
The spec has at least one state/rule, with no placeholder |
feature-not-empty |
feature |
The feature is not an empty skeleton |
spec-feature-match |
spec |
Every requirement declared in the spec has a scenario in the feature |
feature-spec-match |
feature |
Every scenario of the feature matches a rule the spec declares |
feature-test-match |
feature |
Every scenario of the feature is implemented in the linked test, by code and by description |
test-feature-match |
test |
Every code the test proves matches a declared scenario |
scenario-identity |
feature |
Each scenario code identifies one scenario: no code repeated and no body copied under another title |
scenario-asserts |
feature |
The outcome step asserts an observable outcome |
scenario-type-aligned |
feature |
A scenario’s nature tag agrees with the letter of its code |
scenario-letter-declared |
feature |
Every scenario code’s letter is a rule letter — the project’s rule_types, or the canonical ones |
code-reference-valid |
spec |
Every code the spec cites exists in the project |
code-cataloged |
spec |
Every exported symbol has a rule in the spec or a written waiver |
placeholder-filled |
spec feature |
No generator placeholder remains in a value position: header field, table cell, rule or title line |
header-valid |
spec feature code test guide doc plan product flag |
The @anchors header carries the artifact’s identity |
header-layer-declared |
spec feature code test |
The layer a header declares is one the Estrutura has |
ref-resolves |
code feature test |
The ref: points at the sibling spec’s code: |
examples-match |
feature |
Every row of an outline’s Examples is run by a test citing the scenario |
| Gate |
Confronta |
O que mede |
presentation-exhaustive |
spec |
Every value of a prop or state the presentation reads has an appearance decided |
presentation-conflict |
spec |
One prop and one condition do not lead to two appearances |
presentation-copy-single-source |
spec |
The text a presentation shows is a message code, not copy repeated in the rule |
presentation-observable |
spec |
What a presentation changes is an element a test can point at |
identity-consistent |
spec |
The spec’s code is the only identity across its surfaces: testID prefixes and visual baselines |
testid-consistent |
spec |
The spec’s testID inventory, the IDs the code exposes, and the tests that query them agree |
testid-queried-exists |
test |
Every handle an end-to-end flow queries is exposed somewhere in the code |
vr-baseline |
feature |
Every visual-regression scenario has its baseline image |
vr-states-covered |
code |
Every state the visual unit’s spec registers has a visual-regression scenario in the feature, unless exempted with @no-vr: <reason> |
vr-scenarios-tested |
code |
Every visual-regression scenario of the unit has a VR test and a baseline image |
vr-scenarios-of-states |
code |
Every visual-regression scenario of the unit is of a state its spec registers |
vr-tests-of-scenarios |
code |
Every VR test of the unit is of a visual-regression scenario its feature declares |
validation-transitions |
code |
Every validation of a visual unit is the trigger of a state transition, or says @no-state: <reason> |
error-message-declared |
code |
Every error of a visual unit names the message it shows, or says @no-message: <reason> |
| Gate |
Confronta |
O que mede |
mock-stamped |
test |
The double’s stamp matches the real snippet (recomputed, not just validated) |
mock-typed |
test |
The test double derives from the real module (not a frozen copy of the contract) |
mock-detect-covers-dialect |
test |
The project declares derived.mock_detect — the regex that recognises a test double in this ecosystem |
| Gate |
Confronta |
O que mede |
failure-declared |
spec |
The handling that exists in the code answers some declared failure |
failure-handled |
spec |
The declared failure has a path that handles it in the code |
failure-logged |
spec |
The failure handling RECORDS the occurrence |
region-pair-honored |
code test |
Every #region [CODE] closes, and closes with its own code |
rule-types |
spec |
Every code letter is declared in the vocabulary, with no conflict |
rule-implemented |
spec |
Every rule the spec catalogs is marked in its code target, unless waived on its line with @no-mark: <reason> |
marker-parity |
— |
|
obligation-honored |
spec |
The artifact fulfils the cross-cutting obligations it takes on |
updated-at-atual |
spec feature code test |
The header’s updated_at is the day of the file’s last commit |
guide-checklist |
guide |
The guide has the conformance-points section (CKn) |
docs-fresh |
spec |
The compiled docs/*.md reflects the spec it came from |
docs-covered |
spec |
Every spec reaches some documentation page |
doc-required |
spec |
The contracted documents exist and mention the units that trigger them |
doc-self-contained |
spec |
The spec carries the text it cites, instead of pointing at another file |
| Gate |
Confronta |
O que mede |
layer-boundary |
code |
The layer does not reach what is not its own (boundaries:) |
sibling-guard |
code |
Sibling functions handle the same parameter consistently |
proof-crosses-boundary |
spec |
A rule asserting a relation with another unit has the code importing that unit |
circular |
code |
There is no import cycle between modules |
deadcode |
code |
There is no orphan export, symbol or file in the project |
| Gate |
Confronta |
O que mede |
rule-fulfilled |
spec |
Each rule of this spec is marked in the code by a comment carrying its code (// ABCDX-B01: …) |
no-test-proof-real |
spec |
This spec waives its own test with @no-test and points at a scenario code as the proof elsewhere |
| Gate |
Confronta |
O que mede |
phase-exists |
spec |
The spec’s needs: points at a phase some plan catalogues |
phase-ordered |
plan |
The plan’s phases do not depend on what comes after them |
parent-valid |
spec plan code |
The declared parent: points at something that exists, with no cycle |
plan-seeds-valid |
plan |
The plan only seeds specs in a layer that has specs |
plan-source-declared |
plan |
The source the plan names has the adapter’s plan in needs: |
plan-revised |
plan |
A plan revised by another tells whoever reads it |
plan-change-justified |
plan spec |
The changed plan/spec records the revision that says why it changed |
open-questions-resolved |
spec |
The spec has no open question — implementing is not guessing |
progress-honest |
plan |
The plan’s progress file tells the truth about the disk |
revision-orphans |
spec |
The revision names the sibling rules that speak of the same subject |
| Gate |
Confronta |
O que mede |
tests-green |
test |
This file’s tests pass (from the ingested result) |
test-has-assertion |
test |
Every test asserts something in its body — the project says what an assertion is |
test-exercises-unit |
test |
A test reaches the unit it tests, and does not define a copy of it |
test-ref-matches-unit |
test |
A test reaches the unit its ref: names — by import, a name it defines, or a declared invocation |
evidence-fresh |
test |
The test’s last green run still holds: neither the test nor any file in its closure changed since it ran |
line-coverage |
code |
Line coverage >= threshold (from the ingested lcov) |
branch-coverage |
code |
The tests take the branches the lcov lists (BRDA), and none is likely dead |
coverage-delta |
code |
Line coverage did not drop vs. the previous ingestion |
mutation-score |
code |
The test PROVES the line: killed mutants >= threshold (from the ingested mutation report) |
scenario-coverage |
spec |
Each scenario of the spec has a passing test (semantic coverage) |
single-test-per-unit |
code |
A unit has one test file per test layer, or declares the split with a reason |
test-level-codes |
— |
|
test-traceable |
test |
The test cites the code of what it proves (visible to the relational gates) |
| Gate |
Confronta |
O que mede |
no-secret-leaked |
code |
No secret (key, token, credential) enters the history |
dependency-vulnerable |
code |
The project’s dependencies have no known vulnerability (OSV) |
sbom-generated |
code |
The inventory of shipped components (SBOM) is generated and versionable |
license-compatible |
code |
No dependency with strong copyleft or an incompatible licence |
no-duplication |
code |
No code block appears copied in two places |
spellcheck |
code test spec |
No spelling mistake in the text or the identifiers |
| Gate |
Confronta |
O que mede |
rule-uses-declared |
spec |
Every rule says what it uses — the fields, codes and dependencies it reads |
rule-uses-resolve |
spec |
What a rule says it uses exists in the spec — a declared field, a dependency row |
rule-uses-implemented |
spec |
The fields a rule says it uses appear in the code the spec governs |
contract-impact |
spec |
A field changed since the last commit names the rules that use it, and their tests |
contract-status-declared |
spec |
The Output Contract statuses are the ones the handler returns — and only those |
contract-tested |
code |
Every API unit has a contract scenario and a contract test that validates it against the project’s OpenAPI document |
api-contracts-resolve |
code |
Every contract an API unit’s body and responses cite is a spec with a Domain, and no response leaves its contract unsaid |
api-errors-declared |
code |
Every error response of an API unit carries its error code and message, under a status its Responses declare |
error-codes-honored |
code |
Every error code an API unit’s spec declares is one its code emits |
domain-declared |
spec |
The spec declares what it accepts and who guards the boundary |
count-honored |
spec |
The number the spec asserts matches the code |
pagination-honored |
code |
A function promising the whole set does not silently return the first page |
route-declared |
spec |
A screen spec declares its route and names its neighbour screens |
route-exists |
spec |
The route the spec declares is registered where the app registers its routes |
dependency-honored |
spec |
The spec declares no dependency table — the code declares its dependencies by @dep: |
trigger-declared |
— |
|
value-anchored |
code |
Each declared value anchor matches the code below it, its spec rule’s value, and every other declaration of the same key |
env-declared |
spec |
The environment variables a unit’s code reads are the ones its spec declares, and only those |
| Gate |
Confronta |
O que mede |
cross-unit-citation |
spec |
The spec cites no rule of another unit — a shared rule lives in the product |
dep-declared |
code test |
Every import of a governed file carries @dep: with the code of the file it uses, or @no-dep: <reason> |
dep-honored |
code test |
Every @dep: flag names the code of the file its import resolves to |
nav-annotated |
code |
Every navigation call — back and reset included — carries @navigates: naming the screen it leads to, or @no-nav: <reason> |
nav-matches-spec |
spec |
A screen’s Out table and its code’s @navigates: flags name the same screens |
nav-reachable |
spec |
Every screen is reachable from the app’s entry routes (navigation.entry) |
nav-symmetric |
spec |
A screen’s Out leads to another exactly when that one’s In comes from it |
used-by-declared |
code test |
Every symbol another file imports carries @used-by: with exactly the codes of who imports it |