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

.onion.i2p