ProofGit

Repo scope (skip policy)

Every paired repository has a scope: a skip policy that decides which of its files are summarized and indexed. It is three lists.

SettingWhat it does
skip_presetsShipped groups of deny patterns, chosen by key (node_modules, vendor directories, lockfiles and similar). A repository that has never been configured gets every preset, which is what keeps a freshly paired repository cheap.
skip_denyYour own patterns for files this repository should never summarize or index. This is the right place for anything that holds a secret.
skip_allowPatterns for a file this repository actually owns that a preset or a deny pattern caught. The allow list is applied last and overrides both.

So a file is excluded when a preset or a deny pattern matches it and no allow pattern does.

What "excluded" means

  • The summarizer skips it. No summary is generated for it, so summary generation never sends its contents to your model provider. Its summary job is recorded as skipped, with the reason: the preset and pattern, or your deny pattern.
  • Code search withholds it. A search_bnlgit_code match in an excluded file comes back with the file's path and the reason it was withheld, but with no source lines, no link and no summary. Code search cannot be used to read a file the policy refused to summarize.

Patterns

Patterns are globs, matched without regard to case against the file's full path from the repository root, with / as the separator.

  • **/ matches zero or more directories, so **/node_modules/** covers the root and every depth.
  • A pattern without **/ is anchored at the root: scripts/deploy-hook.php means exactly that file, and generated/** everything under the top-level generated/ directory.
  • Each list holds at most 200 patterns of at most 512 characters each. A pattern that is not a valid glob is rejected when you save it, with the reason.

The presets

These are the preset keys today; the scope form on the forge lists the current set under the presets field.

KeyCovers
secrets_materialSecrets and key material: .env files, private keys, keystores, credential JSON, .npmrc, .pypirc. Templates such as .env.example and public keys are not excluded.
node_modulesInstalled npm packages, at any depth.
vendored_libsThird-party libraries committed directly into the repository rather than installed.
vendorComposer, Go, Python, Ruby and CocoaPods dependency directories.
build_outputBuild and cache output such as dist/, build/, target/ and coverage/, plus log files. bin/ is not included: add it as a deny pattern if your build writes there.
minified_assetsMinified bundles, source maps and content-hashed build artefacts.
lockfilesResolved lock files only. go.mod, package.json and Cargo.toml are still summarized.
design_exportsDesign-tool documents and exported art, including SVG.
media_binariesImages, video, audio, fonts, archives, office documents, databases, model weights and compiled binaries.
test_fixturesFixture trees, snapshots and golden files.
ide_os_cruftEditor and operating-system files.
translation_catalogsPer-language string tables. The code that loads them is still summarized.

Apart from the policy, a file is never summarized if it is empty, binary, not valid UTF-8, over the summary size limit, or has a line longer than 5,000 characters (which is treated as generated or minified content). These checks are not configurable.

Changing the scope

In the web UI, open the repository's Repo cleaner at /{owner}/{repo}/bnlgit/cleaner and edit the Scope panel: one preset key or pattern per line, in three fields. The AI settings page at /{owner}/{repo}/bnlgit/ai has the same three fields under AI file scope. On a cleaner finding, Exclude from AI-ify adds that file to the deny list in one click. Changing the scope needs write access to the repository's code.

Over the API, send the complete policy:

PATCH /api/v1/repos/{owner}/{repo}/bnlgit/skip-policy
Authorization: token <your token>
Content-Type: application/json

{
  "skip_presets": ["secrets_material", "node_modules", "vendor", "build_output", "lockfiles"],
  "skip_deny": ["scripts/deploy-hook.php"],
  "skip_allow": []
}

All three lists are required on every call; there is no partial update. An empty skip_presets list switches every preset off: it does not bring back the defaults. The call changes these three settings and nothing else about the pairing. See the API reference.

The capabilities endpoint reports this feature as file_skip_policy; see Editions and capabilities.

  • The repo hygiene scan lists tracked files that the shipped presets would exclude — often a sign they were committed by accident.
  • The BNLRepo mirror model explains what a summary is and how its freshness is tracked.

Something here wrong or missing? Mail hello@proofgit.com — these pages are the single public source of truth for ProofGit and we would rather fix them than leave you guessing.