org.projectfile.conventions
Cross-cutting workflow conventions read by multiple generators: commit-style, workflow model, style-guide-url (top-level or per-technology-tag), the tool-agnostic code-style block (line-length), and the fragment-assembly defaults (documents shells + flat parents list) consumed by pf-bridge-fragments. code-style holds only what more than one generator can honour, so one declaration reaches yamllint’s line-length, markdownlint’s MD013 and .editorconfig’s max_line_length without any of them carrying its own number. org.projectfile.release and org.projectfile.contributing read from here — neither duplicates these fields.
- Namespace:
org.projectfile.conventions - 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.conventions extension namespace# Illustrative fragment — not a complete projectfile document.# See registry.yaml for ownership and status.## Cross-cutting workflow conventions that multiple generators read from one place.# org.projectfile.release and org.projectfile.contributing both reference commit-style# here rather than carrying their own copies.# Per-language sub-keys match technology tags (see spec/technologies.yaml).
org: projectfile: conventions: commit-style: conventional # OPTIONAL conventional | gitmoji | free workflow: github-flow # OPTIONAL github-flow | git-flow | gitlab-flow | trunk-based | centralized versioning: semantic # OPTIONAL semantic | calver | rolling | none style-guide-url: "https://example.com/style" # OPTIONAL project-wide default
# Tool-agnostic source formatting. One declaration feeds every generator # that has a notion of line width — yamllint’s line-length, markdownlint’s # MD013, .editorconfig’s max_line_length — so they can never disagree. code-style: line-length: 120 # OPTIONAL maximum source line width, in columns
# Per-language overrides — keys match technology tags js: style-guide-url: "https://example.com/js-style" python: style-guide-url: "https://example.com/python-style"
# Fragment-assembly defaults consumed by pf-bridge-fragments. The # documents shells (dir/out/title) live in a shared conventions include # so every consumer declares them once; parents is a flat per-project # inheritance list shared by every shell. The include merger deep-merges # this namespace, so documents (from the include) and parents (from the # project) coexist — see org.projectfile.fragments for the override. fragments: documents: # OPTIONAL shared shells, normally supplied by a conventions include - dir: docs/features.d # REQUIRED source fragment directory out: docs/FEATURES.md # REQUIRED assembled artefact path title: Features # REQUIRED document H1; also the section heading base - dir: docs/roadmap.d out: docs/ROADMAP.md title: Roadmap - dir: docs/configuration.d out: docs/CONFIGURATION.md title: Configuration - dir: docs/usage.d out: docs/USAGE.md title: Usage inherit: false # OPTIONAL true by default; false keeps the parents list off this shell parents: # OPTIONAL flat per-project inheritance list, applied to every shell - ../ubuntu[org.projectfile.conventions]commit-style = "conventional"workflow = "github-flow"versioning = "semantic"style-guide-url = "https://example.com/style"
[org.projectfile.conventions.code-style]line-length = 120
[org.projectfile.conventions.js]style-guide-url = "https://example.com/js-style"
[org.projectfile.conventions.python]style-guide-url = "https://example.com/python-style"
[org.projectfile.conventions.fragments]parents = [ "../ubuntu" ]
[[org.projectfile.conventions.fragments.documents]]dir = "docs/features.d"out = "docs/FEATURES.md"title = "Features"
[[org.projectfile.conventions.fragments.documents]]dir = "docs/roadmap.d"out = "docs/ROADMAP.md"title = "Roadmap"
[[org.projectfile.conventions.fragments.documents]]dir = "docs/configuration.d"out = "docs/CONFIGURATION.md"title = "Configuration"
[[org.projectfile.conventions.fragments.documents]]dir = "docs/usage.d"out = "docs/USAGE.md"title = "Usage"inherit = false{ "org": { "projectfile": { "conventions": { "commit-style": "conventional", "workflow": "github-flow", "versioning": "semantic", "style-guide-url": "https://example.com/style", "code-style": { "line-length": 120 }, "js": { "style-guide-url": "https://example.com/js-style" }, "python": { "style-guide-url": "https://example.com/python-style" }, "fragments": { "documents": [ { "dir": "docs/features.d", "out": "docs/FEATURES.md", "title": "Features" }, { "dir": "docs/roadmap.d", "out": "docs/ROADMAP.md", "title": "Roadmap" }, { "dir": "docs/configuration.d", "out": "docs/CONFIGURATION.md", "title": "Configuration" }, { "dir": "docs/usage.d", "out": "docs/USAGE.md", "title": "Usage", "inherit": false } ], "parents": [ "../ubuntu" ] } } } }}