Skip to content

Gate reference ​

l0-git ships 36 built-in gates. Every one of them fires only when the violation can be stated as a binary condition over the file system, the git index, or a parse tree, so a finding is reproducible on any machine, and two runs over the same tree always agree.

Three gates are opt-in and do nothing until you enable them in .l0git.json: Secrets scan (history), Large blob in history and Branch protection declared.

sh
lgit gates          # the same list, straight from the binary

A directory that is not a git repository ​

Many of the gates read the git index. On a directory with no .git/, lgit check does not repeat that once per gate: it files one info finding under the id git_repository, "Not a git repository, 17 gates skipped", that names the gates it stopped. git_repository is not a gate of its own and is not in lgit gates; it retires itself the next time the directory is a repository, and "ignore": ["git_repository"] in .l0git.json silences it. Asking for a single gate (lgit check . secrets_scan) still answers with that gate's own notice.

Project hygiene ​

GateSeverityWhat it catches
README presentWarningA repository with no README is a repository nobody can adopt.
LICENSE presentWarningWithout a license file, default copyright applies and nobody may legally reuse the code: however open the repository looks.
CONTRIBUTING presentInfoTells an outside contributor how to build, test and submit a change before they burn an afternoon guessing.
SECURITY policy presentInfoA SECURITY.md is the difference between a researcher mailing you privately and a researcher opening a public issue with a working exploit.
CHANGELOG presentInfoOne place users can look to see what changed between releases, instead of reading the commit log.
CODE_OF_CONDUCT presentInfoStates the rules of engagement before you need them, not during the incident.
Pull request template presentInfoStandardises what a PR description contains, so reviewers stop asking the same three questions.
Issue templates presentInfoTurns "it doesn't work" into a report you can actually act on.
CI workflow presentWarningIf nothing runs the tests on push, the tests are decoration.

Governance ​

GateSeverityWhat it catches
CODEOWNERS presentInfoRoutes pull requests to the people who actually own the touched paths.
Branch protection declaredInfoChecks that branch protection is declared as code.

Git hygiene ​

GateSeverityWhat it catches
.gitignore presentWarningThe first line of defence against committing build artefacts and secrets by accident.
.gitignore coverageWarningHaving a .gitignore is not the same as having the right one.
Tracked file matches .gitignoreWarningYour .gitignore says a file should not be in the repository, and the index says it is.
Merge conflict markersErrorAn unresolved conflict marker on a shipping branch is never intentional.
Large file trackedWarningLarge binaries in git are permanent: every clone pays for them forever, even after you delete them.
Vendored directory trackedWarningDependency directories are meant to be rebuilt from a manifest.
Editor/IDE artefact trackedWarningUser-local editor state does not belong in shared history.
Unexpected executable bitWarningA README.md tracked as mode 100755 is a mistake that survives every clone and confuses every packaging script.
File name qualityInfoFilenames containing spaces or invisible characters break every shell pipeline that forgot to quote $f.

Security ​

GateSeverityWhat it catches
Secrets scanErrorScans tracked files for credential shapes that are unambiguous enough to act on.
Connection stringsInfoFinds connection URIs in tracked source: legacy plaintext protocols, database URIs, and anything carrying inline credentials.
Network scanInfoSurfaces hardcoded IPv4 literals, CIDR blocks and ASN references.

Git history (opt-in) ​

GateSeverityWhat it catches
Secrets scan (history)WarningDeleting a secret from the working tree does not delete it from .git. This gate reads what is still in there.
Large blob in historyWarningFinds the files that are still making your clone slow long after you deleted them.

Containers ​

GateSeverityWhat it catches
Dockerfile lintWarningAn AST-based lint over tracked Dockerfiles: reproducibility and least privilege, nothing stylistic.
Compose lintWarningA YAML-AST lint over tracked Compose files, aimed at the settings that hand a container the host.

Frontend & accessibility ​

GateSeverityWhat it catches
HTML lintWarningAccessibility violations in tracked HTML that can be decided from the parse tree alone: no rendering, no heuristics.
CSS lintWarningThree things that are wrong in any stylesheet, regardless of taste.

Documentation ​

GateSeverityWhat it catches
Markdown lintWarningAST lint over tracked Markdown, via goldmark.
Dead placeholdersInfoFinds the unfinished-work markers that were meant to be temporary.
Uncommented .env.example keyInfoA list of bare KEY= lines tells a new contributor nothing about what to put in them.

Quality & release ​

GateSeverityWhat it catches
Tests presentWarningDetects whether the project has any tests at all.
Config parse errorWarningA package.json or CI workflow that does not parse is a defect you can prove without running anything.
Version driftWarningWhen two manifests in the same repository claim different versions, at least one of them is lying to whoever reads it.
Missing .nvmrc / .node-versionInfoA package.json with no pinned Node version means nvm, asdf, Volta and your CI runner each pick whatever Node they happen to have.

Released under the MIT License. · Privacy & legal