Description
As a maintainer of php-service-template, I want the repository to maintain itself between pull requests so that bit-rot, new dependency CVEs and aging pinned versions are detected and remediated without waiting for a human to open a PR. Today every quality workflow in .github/workflows/ triggers on pull_request only, so main can silently break or accumulate vulnerable dependencies for weeks. .github/dependabot.yml covers only the composer and npm ecosystems, leaving SHA-pinned GitHub Actions (e.g. actions/checkout@34e11487...) and pinned Docker base images (frankenphp:1-php8.3.17-alpine, structurizr/lite:2024.07.02, localstack:3.4.0) to age unnoticed.
Even when automated PRs are green, they cannot land: Dependabot and template-sync PRs are blocked on the single hardcoded reviewer (Kravalg in .github/dependabot.yml), there is no auto-merge, and there is no stale issue/PR automation. Finally, the template-sync and autorelease workflows — core template deliverables — have no tests of their own, unlike the Makefile which is covered by the bats suites under tests/CLI/bats/.
Affected quality attributes
This issue is part of the enterprise quality audit (report: docs/audit/enterprise-quality-audit-2026-07.md on branch claude/enterprise-quality-audit-bc8jch).
- Autonomy — current 4/5, no scheduled CI on main, no auto-merge, Dependabot misses github-actions/docker — target 5/5
- Self-sustainability — current 4/5, CVEs and bit-rot surface only when someone opens a PR; no stale issue/PR management — target 5/5
- Sustainability — current 4/5, high bus factor: every automated PR requires the single hardcoded reviewer — target 5/5
- Upgradability — current 4/5, pinned actions and base images never receive automated updates — target 5/5
- Timeliness — current 3/5, no scheduled workflow exercises the build or heavier checks between PRs — target 5/5
- Relevance — current 4/5, the 20 CI workflows (template-sync, autorelease) are themselves untested — target 5/5
Tasks
Note: DAST/fuzzing coverage in CI is tracked separately in #11 and is out of scope here; AI-agent documentation sync is tracked in #171.
Acceptance Criteria
Description
As a maintainer of php-service-template, I want the repository to maintain itself between pull requests so that bit-rot, new dependency CVEs and aging pinned versions are detected and remediated without waiting for a human to open a PR. Today every quality workflow in
.github/workflows/triggers onpull_requestonly, somaincan silently break or accumulate vulnerable dependencies for weeks..github/dependabot.ymlcovers only thecomposerandnpmecosystems, leaving SHA-pinned GitHub Actions (e.g.actions/checkout@34e11487...) and pinned Docker base images (frankenphp:1-php8.3.17-alpine,structurizr/lite:2024.07.02,localstack:3.4.0) to age unnoticed.Even when automated PRs are green, they cannot land: Dependabot and template-sync PRs are blocked on the single hardcoded reviewer (
Kravalgin.github/dependabot.yml), there is no auto-merge, and there is no stale issue/PR automation. Finally, the template-sync and autorelease workflows — core template deliverables — have no tests of their own, unlike the Makefile which is covered by the bats suites undertests/CLI/bats/.Affected quality attributes
This issue is part of the enterprise quality audit (report:
docs/audit/enterprise-quality-audit-2026-07.mdon branchclaude/enterprise-quality-audit-bc8jch).Tasks
.github/workflows/scheduled-ci.yml) with a weeklyon: schedulecron that runsmake ciandmake check-securityagainstmain, with failure notifications (e.g. auto-opened issue or Slack/webhook step) so breakage is surfaced without a PR.github/dependabot.ymlwithpackage-ecosystem: github-actionsandpackage-ecosystem: dockerentries (grouped, conventional-commit prefixes consistent with the existing composer/npm entries) so SHA-pinned actions and base images inDockerfile/compose.yamlreceive automated updatesgh pr merge --autogated on all required checks passing), so routine dependency bumps land without the hardcoded reviewer being the bottleneckactions/staleconfiguration for stale issue/PR hygiene with conservative timeouts and exempt labelstests/CLI/bats/(mirroring the existing suites such asmake_validate_configuration_tests.bats) covering the sync/release script logic used by.github/workflows/template-sync-app.yml,tempate-sync-pat.ymlandautorelease.yml; extract inline workflow shell into testable scripts where neededactionlintto CI so the workflow files themselves are validated on every PRREADME.md,.github/TEMPLATE_SYNC_APP.md/TEMPLATE_SYNC_PAT.mdwhere relevant) to describe the new scheduled maintenance and auto-merge behaviorNote: DAST/fuzzing coverage in CI is tracked separately in #11 and is out of scope here; AI-agent documentation sync is tracked in #171.
Acceptance Criteria
make ciandmake check-securityonmainat least weekly and produces a visible failure notification when either fails.github/dependabot.ymlincludesgithub-actionsanddockerecosystems and Dependabot opens update PRs for pinned actions and base imagesactions/staleis active with documented labels/timeoutsactionlintpasses on all workflowsmake ci)