Workflow stubs, .editorconfig
, and dependabot.yml
are copied only
when the target file does not already exist unless --overwrite
is used.
This protects consumer-specific customizations by default while still
allowing explicit replacement during shared automation updates. The
generated .github/CODEOWNERS
file follows the same principle by keeping
an existing file unless you explicitly request replacement. The skills
and agents
phases follow the same spirit by preserving existing
non-symlink directories inside .agents/skills
and .agents/agents
.
Syncing Consumer Projects
The dev-tools:sync
command is the bridge between this repository and the
libraries that consume it.
For the focused skills-only workflow, see Syncing Packaged Skills. For packaged project agents, see Syncing Packaged Agents. For a first-time adoption path, see Migrating Consumer Repositories.
What the Command Changes
| Asset | Behavior | Overwrite policy |
|---|---|---|
composer.json
scripts |
Adds or updates dev-tools
and dev-tools:fix
. |
Updated in place. |
composer.json
extra |
Sets extra.grumphp.config-default-path
. |
Updated in place. |
.github/workflows/*.yml
|
Copies thin wrapper workflows from resources/github-actions
that
delegate to reusable workflows in php-fast-forward/dev-tools
. |
Only when missing by default; replaceable with --overwrite
. |
.editorconfig
|
Copies the packaged file from the repository root. | Only when missing by default; replaceable with --overwrite
. |
.github/dependabot.yml
|
Copies the packaged Dependabot template. | Only when missing by default; replaceable with --overwrite
. |
.github/CODEOWNERS
|
Generates managed ownership rules from local composer.json
metadata,
with commented suggestions when direct GitHub owners cannot be inferred. |
Preserved by default; replaceable with --overwrite
. |
.agents/skills/<skill-name>
|
Creates or repairs symlinks to packaged agent skills. | Creates missing links, repairs broken symlinks, and preserves existing non-symlink directories. |
.agents/agents/<agent-name>
|
Creates or repairs symlinks to packaged project agents. | Creates missing links, repairs broken symlinks, and preserves existing non-symlink directories. |
.github/wiki
|
Adds a Git submodule derived from git remote origin
. |
Only when missing. |
When to Run It
- right after installing the package with plugins disabled;
- after upgrading
fast-forward/dev-toolsand wanting new shared workflow stubs; - when onboarding an older repository into the Fast Forward automation model.
- when packaged skills were added or updated and the consumer repository needs fresh links.
What It Needs
- a writable
composer.jsonin the consumer project; - a configured
git remote originif the wiki submodule must be created; - permission to create local
.github/files; - permission to create local
.agents/skillsand.agents/agentsentries.
Workflow Wrapper Notes
The synchronized workflow files in consumer repositories are wrappers, not the
full implementation. The actual reusable workflows live in the upstream
php-fast-forward/dev-tools
repository and internally compose local actions
from .github/actions/
there.
That matters most for these cases:
.github/workflows/wiki.ymlnow handles only pull-request wiki previews..github/workflows/wiki-maintenance.ymlhandles publication to the wikimasterbranch after merge, closed-preview deletion, and scheduled cleanup..github/workflows/auto-assign.ymland.github/workflows/changelog.ymlaccept aprojectinput in the wrapper and also support thePROJECTrepository variable.- The effective project-board contract is
projectfirst, thenPROJECT, then any reusable-workflow default that applies tophp-fast-forwardrepositories.