This document explains how a project consumes a release without creating a runtime dependency or a divergent local copy.
The recommended inclusion method is a vendored snapshot that is committed with the consuming project. It is not a submodule, symlink, or runtime dependency. The project remains complete after a clone. Each version upgrade produces an explicit diff.
Official source
- Repository:
https://github.com/nclsppr/project-foundation.git - Current release:
v0.5.2 - Immutable reference: the complete SHA recorded in
FOUNDATION.md
Always adopt a tag and its commit. Never adopt the moving state of main.
New project
git clone --branch v0.5.2 --depth 1 \
https://github.com/nclsppr/project-foundation.git \
/tmp/project-foundation-v0.5.2
/tmp/project-foundation-v0.5.2/scripts/bootstrap.sh \
--target /absolute/path/to/the-new-project \
--class product \
--profiles webThe bootstrap does not create the project Git repository and does not overwrite
files. It records the foundation source, tag, and commit in FOUNDATION.md.
Nimbus, documentation-nimbus, compose.yaml, the Compose checker, and CI are
always included. --profiles selects only the additional profiles.
Existing project
The bootstrap requires a target that does not exist. For an existing repository:
- Generate the pack in an adjacent temporary directory.
- Inspect collisions with existing canonical sources.
- Copy the
docs/foundation/snapshot without modification. - Merge the local adapters and documentation contracts. Do not replace the project rules without review.
- Complete
FOUNDATION.md, the deviations, and the local sources. - Regenerate the documentation catalog.
- Run the project verification.
- Commit the adoption as a reversible unit.
- Push immediately to the canonical branch if direct write access is permitted. Otherwise, push to a dedicated branch.
Local exception or foundation challenge
An unsuitable rule can follow one of two paths.
The requirement is specific to the project
Document a limited deviation in FOUNDATION.md. Include the reason,
compensating control, owner, and review date. Do not modify the snapshot.
The problem is general
Modify the Project Foundation repository:
- Create a branch or worktree from the official repository.
- Modify the canonical source, its templates, controls, and tests.
- Run
./scripts/verify.sh. - Review and verify the change. Commit it as one coherent unit.
- Push the commit in accordance with
P18. - Publish a new version in accordance with
VERSIONING.md. - Then upgrade the consuming project to this tag and SHA.
Direct modification of docs/foundation/ is prohibited. The next upgrade would
overwrite the modification and hide the discussion from other projects.
Upgrade
- Read
CHANGELOG.mdbetween the two tags. - Replace the snapshot from the new commit.
- Review the diff for invariants, defaults, profiles, and quality gates.
- Reconcile the local deviations.
- Compare the new script baselines with the local adaptations.
- Regenerate the documentation catalog.
- Verify and commit the snapshot, provenance, and adaptations together.
- Push immediately to the canonical branch if direct write access is permitted. Otherwise, push to a dedicated branch.
A future upgrade command can prepare this diff. It must never silently overwrite a deviation or local quality gate.
Migration from v0.2.0 to v0.3.1
This upgrade is incompatible without adaptation:
- Install Node
22.12.0or later and npm in the local and CI environments. - Copy
docs-nimbus/, its lockfile, and the mandatory profile fromv0.3.1. - Add
CHANGELOG.mdfrom the template if the project does not have this file. - Merge the new baselines for
scripts/check_markdown.pyandscripts/verify.sh. - Declare
documentation-nimbusinFOUNDATION.md. - Define the Nimbus variables only if the local default values are not suitable.
- Run
./scripts/verify.shbefore you publish the upgrade.
Migration from v0.3.0 to v0.3.1
v0.3.0 builds the foundation repository correctly, but its Nimbus guide
contains two non-portable links. These links cause lint to fail in a generated
pack. Replace the scaffold and verification scripts with the files from
v0.3.1. Then run ./scripts/verify.sh again.
Migration from v0.3.1 to v0.4.0
This version adds invariant P18:
- Replace
PRINCIPLES.md,DEFAULTS.md, andDEFINITION-OF-DONE.mdwith the files fromv0.4.0. - Merge the new baseline for the
AGENTS.mdadapter. - Specify the canonical branch in
PROJECT.md. Also specify whether the project uses direct pushes or reviewed branches. - Preserve the local application quality gates. Then run
./scripts/verify.sh. - Commit the snapshot, provenance, and adaptations as one unit.
- Push this unit in accordance with
P18, and verify its remote SHA.
A local deviation cannot cancel P18. The only exceptions are a task that is
explicitly read-only or local-only, a higher-level prohibition, no remote, or a
documented external blocker.
Migration from v0.4.0 to v0.5.0
This version adds invariant P19 and a Docker Compose prerequisite:
- Install Docker and Docker Compose
2.20.0or later in the local and CI environments. - Replace
PRINCIPLES.md,DEFAULTS.md, andDEFINITION-OF-DONE.mdwith the files fromv0.5.0. - Add or merge
compose.yamlat the repository root. - Copy
scripts/check_compose.pyand call this checker fromscripts/verify.sh. - Merge the
.github/workflows/verify.ymlbaseline without removing the local application quality gates. - Add each application and dependency that the integrated local path requires to Compose.
- Pin external images by digest, add health checks, and label finite commands.
- Run
python3 scripts/check_compose.py, thedocker compose up --build --waitpath, and then./scripts/verify.sh. - Commit and push the snapshot, provenance, Compose configuration, CI configuration, and adaptations as one unit.
A local deviation cannot remove compose.yaml, its checker, or its quality gate.
A check that is independent of repository content also requires the platform to
make the verification workflow mandatory on the branch.
Migration from v0.5.0 to v0.5.1
This correction applies to compose.yaml in the Project Foundation repository.
The sources are mounted as read-only, and the checks run in an anonymous
workspace. Generated projects do not have this documentation service and do not
require an additional adaptation. However, each new adoption must use v0.5.1.
This release permits verification of main and tag runs without permission
conflicts.
Migration from v0.5.1 to v0.5.2
This correction strengthens the Compose quality gate wiring. Merge the new
baselines for scripts/check_markdown.py and .github/workflows/verify.yml.
The workflow now calls scripts/check_compose.py directly before the project
quality gate. The documentation checker rejects removal of this call or the
call in scripts/verify.sh. The control remains versioned with the repository.
An independent root of trust still requires the verification workflow to be a
required check in the GitHub rules of the consuming project.