org.projectfile.ignores
Declares which ignore files to generate and the patterns each one carries. Every pattern is declared — a consumer derives none from technology tags, so each line traces to an include in the document or in a fragment it merged. exclude subtracts, which is the only way to lose an inherited pattern: includes deep-merge unions lists (§4.9). Flat-file targets (.gitignore, .dockerignore, .containerignore, .npmignore, .claudeignore, .textlintignore, .fdignore) render one pattern per line; the yamllint target renders an ignore: block inside the .yamllint config (it has no standalone ignore file). Vulnerability IDs (CVE/GHSA) are NOT handled here — see org.projectfile.vulnerabilities.
- Namespace:
org.projectfile.ignores - Owner: projectfile.org (community-maintained)
- Status: proposed
Illustrative fragment — not a complete projectfile document. Consumers MUST round-trip unknown namespaces even when no shape is published.
---# SPDX-FileCopyrightText: 2026 Damián Búho <damian.buho@proton.me>## SPDX-License-Identifier: CC-BY-4.0# SPDX-License-Identifier: MIT
# Shape: org.projectfile.ignores extension namespace# Illustrative fragment — not a complete projectfile document.# See registry.yaml for ownership and status.
org: projectfile: ignores: # NOTE: vulnerability IDs (CVE/GHSA) are NOT handled by this namespace. # They are tool-agnostic and live in [org.projectfile.vulnerabilities], # which fans the same list out to every scanner ignore file # (.trivyignore, .grype.yaml, osv-scanner.toml). See # shapes/org.projectfile.vulnerabilities.yaml. # # Ignore-file targets to generate. Values: git | docker | npm | claude | # container | yamllint | textlint | fd. An absent list means every target # generates; a present list is authoritative and only its entries do. generate: [git, docker] # Patterns appended verbatim to every generated ignore file. A target’s # own `exclude` reaches these too, so one file can opt out of a pattern # that belongs everywhere else. extra: [".env", ".secrets/", "*.local"]
# Per-target overrides. One sub-table per generated ignore file; each # accepts OPTIONAL include (patterns to emit) and exclude (patterns to # drop). A bare list is shorthand for include-only — but do not mix the # two forms across documents that merge, since deep-merge unions two # lists and two mappings while a list meeting a mapping replaces it. # # `exclude` is the only way to LOSE a pattern: `includes` deep-merge # unions lists (§4.9), so a pattern an included fragment declared cannot # otherwise be dropped downstream. It is not a re-include — a `!pattern` # entry belongs in `include`, and consumers MUST emit such entries after # the patterns they answer, since these formats resolve last-match-wins. git: include: ["dist/", "*.log"] # OPTIONAL patterns emitted into .gitignore exclude: ["vendor/"] # OPTIONAL patterns to drop, however they arrived docker: include: [".git/", "*.md"] exclude: [] npm: include: ["*.tgz"] # OPTIONAL patterns emitted into .npmignore exclude: [] # OPTIONAL patterns to drop, however they arrived # The prose pair. A textlint runner that discovers files with `fd` passes # them on as explicit arguments, which .textlintignore does not filter — # so .fdignore is the load-bearing half and the two should agree. textlint: include: ["LICENSES/"] fd: include: ["LICENSES/"] # yamllint reads its excludes from this same sub-table but renders them # as an `ignore:` block inside .yamllint (not a flat pattern file). The # fleet rule block is mirrored from the d9t python-tools image default; # yamllint's `extends:` REPLACES `ignore:`, so every pattern (including # vendor/node_modules) must be re-emitted in the generated config. yamllint: include: [".forgejo/", ".github/"] # OPTIONAL paths excluded from yamllint[org.projectfile.ignores]generate = [ "git", "docker" ]extra = [ ".env", ".secrets/", "*.local" ]
[org.projectfile.ignores.git]include = [ "dist/", "*.log" ]exclude = [ "vendor/" ]
[org.projectfile.ignores.docker]include = [ ".git/", "*.md" ]exclude = []
[org.projectfile.ignores.npm]include = [ "*.tgz" ]exclude = []
[org.projectfile.ignores.textlint]include = [ "LICENSES/" ]
[org.projectfile.ignores.fd]include = [ "LICENSES/" ]
[org.projectfile.ignores.yamllint]include = [ ".forgejo/", ".github/" ]{ "org": { "projectfile": { "ignores": { "generate": [ "git", "docker" ], "extra": [ ".env", ".secrets/", "*.local" ], "git": { "include": [ "dist/", "*.log" ], "exclude": [ "vendor/" ] }, "docker": { "include": [ ".git/", "*.md" ], "exclude": [] }, "npm": { "include": [ "*.tgz" ], "exclude": [] }, "textlint": { "include": [ "LICENSES/" ] }, "fd": { "include": [ "LICENSES/" ] }, "yamllint": { "include": [ ".forgejo/", ".github/" ] } } } }}