Skip to content

Match webware-ci.json to the canonical CI contract - #2

Merged
tyrsson merged 1 commit into
1.0.xfrom
ci/webware-ci-contract
Sep 23, 2026
Merged

tyrsson merged 1 commit into
1.0.xfrom
ci/webware-ci-contract

Conversation

@tyrsson

@tyrsson tyrsson commented Sep 23, 2026

Copy link
Copy Markdown
Member

Settles the CI parameter contract for this repository (handoff §7, "decide deliberately whether to disable infection for this repo, or keep a real MSI").

Change

webware-ci.json was missing integration_php_version, which the canonical preset artifact (webware-tools/presets/webware-alignment/artifacts/webware-ci.json) ships and which webware-event already carries. That is the only diff — one key, in the canonical position.

"" keeps the workflow's documented default (integration on every php/dependency leg), so no CI behaviour changes; the contract is now explicit and shaped like the artifact instead of silently relying on jq's fallback.

The decisions this file records, with evidence

Knob Value Why
enable_infection on, min_msi/min_covered_msi = 95 Measured, not assumed: infection reports 100% mutation code coverage and 100% covered MSI (3 mutants, all killed) on the current src. The required workflow's Mutation testing job also passed on the rename PR. 95 is the ecosystem standard, with headroom for app code still to come.
run_integration on test/integration holds a real wiring test (composer's config-provider must match App\ConfigProvider).
db_* absent No integration test touches a database yet, and the workflow starts + health-checks the DB on every leg it is configured for (~20–25s each). They arrive with the first DB-backed suite, alongside the mysql service in compose.yml.
integration_php_version "" (every leg) The DB start is gated by this same value, so narrowing it is the lever for when the integration suite gets expensive — not before.
php_versions, coverage_php_version 8.4 + 8.5, coverage on 8.5 Matches composer.json's ~8.4.1 || ~8.5.0.

I verified all 16 keys the workflow reads (including every defaulted one) resolve to the intended values by running the workflow's own jq expressions against the file locally.

Note: the rename PR already shows this is not "the likely first red run"

The handoff predicted enable_infection: true with min_msi: 95 would be the first red run. It is not — PR #1 is green on all 11 required checks, mutation job included, on the template's library values.

Drift found while checking (not touched here)

Two other files diverge from the canonical artifacts, both cosmetic and unrelated to CI:

  • compose.yml line 30 comments the key as db-image where the artifact says db_image — the correct key name is the one the workflow reads.
  • renovate.json is missing a trailing newline, so it is not byte-identical to the artifact.

Also worth knowing outside this repo: repo-template's copy of webware-ci.json is stale in the same way — it lacks integration_php_version while its committed lock pins the same webware-tools 1.0.0-beta.3 that ships the key. Every repo derived from it inherits the gap.

The file was missing `integration_php_version`, which the canonical preset
artifact ships and which webware-event already carries. Empty keeps the
workflow's documented default - the integration suite runs on every
php/dependency leg - so no behaviour changes, but the contract is now explicit
and shaped like the artifact.

Decisions this file records, and the evidence for each:

- `enable_infection` stays ON at 95/95. Measured rather than assumed:
  infection reports 100% mutation code coverage and 100% covered MSI (3
  mutants, all killed) on the current src, and the required workflow's
  mutation job passed on the rename PR. 95 is the ecosystem standard with
  headroom for the app code still to come.
- `run_integration` stays ON: test/integration holds a real wiring test that
  asserts composer.json's config-provider matches App\ConfigProvider.
- `db_*` keys stay ABSENT: no integration test touches a database yet, and the
  workflow starts and health-checks the DB on every leg it is configured for.
  They arrive with the first DB-backed suite.
- `integration_php_version` stays "" (every leg). The DB start is gated by the
  same value, so narrowing it is the lever to reach for when the integration
  suite gets expensive - not before.

Signed-off-by: Joey Smith <jsmith@webinertia.net>
@codecov

codecov Bot commented Sep 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@tyrsson
tyrsson merged commit 311dd96 into 1.0.x Sep 23, 2026
12 checks passed
@tyrsson
tyrsson deleted the ci/webware-ci-contract branch September 23, 2026 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant