Skip to content

Gate reference

l0-git ships 35 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

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.
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