Skip to content

Write the CI workflows and the root configuration in English - #302

Open
gplanchat wants to merge 7 commits into
mainfrom
docs/ci-and-root-config-in-english
Open

Write the CI workflows and the root configuration in English#302
gplanchat wants to merge 7 commits into
mainfrom
docs/ci-and-root-config-in-english

Conversation

@gplanchat

@gplanchat gplanchat commented Sep 7, 2026

Copy link
Copy Markdown
Owner

The last French outside documentation/, .cursor/ and the coordination registry. 15 files,
~520 lines.

This touches supervised scope. CLAUDE.md lists .github/workflows/ as never edited unattended,
because CI reaches outside this repository. This slice was asked for explicitly, and every guard
below exists because of that.

Nothing executable changed, and it is audited rather than claimed

For all six workflows, the run: blocks were extracted from the parsed YAML of both versions
and compared one by one. prises.yml, issue-trust-gate.yml and splitsh.yml: identical.
For the other three, every single difference is one of two things:

  • a shell comment — the DurableModule / DurableProbe distinction, the sshpass note, the
    two-package-URL-families note;
  • an echo — six ::error:: / ::warning:: / ::notice:: annotations and three plain ones.
    Those are what a person reads in a run log.

Not one command, path, flag, secret name, matrix entry or if: expression moved. In particular the
grep assertions that pin the demonstration's output are untouched.

The Dockerfile's non-comment lines are byte-identical. .gitignore and .git-blame-ignore-revs
diff empty with comments stripped — a changed pattern silently stops ignoring a file, and a changed
SHA silently un-skips a commit in git blame. The two Psalm XML trees are identical parsed. The two
.neon files diff empty with comments stripped.

retention.py got the most care

It decides which published container images may be deleted. Its module docstring — which is also its
--help — its two docstrings and its four printed messages are English now, and so are its
identifiers: a_supprimerto_delete, DATEEDATED, surnumérairessurplus. All are
module-local; the workflow calls the script, not its functions. Its own --self-test passes, and a
hand-run over a three-version fixture still returns exactly the one dated version beyond the keep
count.

One correction, not a translation

psalm-magento.xml said what ignoreFiles does with a missing negation — the French read as the
opposite of the tool's behaviour. The English says what the sentence evidently meant.

Kept as found

  • .git-blame-ignore-revs now labels in English a commit whose own subject stays French. A commit
    subject is history.
  • One French line inside a docker/php-grpc/README.md code fence: real 6m58s image finale : 126 Mo.
    It is a recorded measurement, and a fence is a transcript.
  • A comment in psalm-magento.xml names magento/vendor/gplanchat/durable where the ignoreFiles
    entry beside it says durable-magento. Possibly wrong in the source; a prose path is still a path.

Not in scope

UPGRADE.md (128 French lines — a migration guide, not configuration), bin/splitsh-publish.sh and
bin/prises-check*.sh (supervised too, and not what was asked for), openspec/ (point-in-time
records), documentation/ (WA006's own exception). Happy to take any of them next.

Gate

cs:check, test, phpstan and psalm each exit 0, and psalm-baseline.xml is untouched. The
real check for this PR is CI itself: it runs the rewritten workflows.

gplanchat and others added 6 commits September 8, 2026 00:07
`.php-cs-fixer.dist.php`, the two Psalm configs, the two PHPStan configs, and one line of the README.

These comments are load-bearing: why the PER revision is pinned rather than aliased, and why
`psalm-magento.xml` cannot join `psalm.xml` — with the reason `ignoreFiles` on the bench's own copy
of the module is safe *only because both come from the same commit*.

`psalm.xml` carried one French comment that the accent grep missed; only a full read found it.

One correction rather than a translation: the French said `ignoreFiles` makes a file
"n'est pas seulement analysé", which reads as the opposite of what Psalm does. The English says what
the sentence evidently meant and what the tool actually does — not merely left unanalysed, skipped
at scan time.

Two things kept as found: the same comment names `magento/vendor/gplanchat/durable` where the
`ignoreFiles` entry beside it says `durable-magento`, and `.git-blame-ignore-revs` now labels in
English a commit whose own subject stays French, because a commit subject is history.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Nine comment lines across `.gitignore` and `.git-blame-ignore-revs`.

The check that matters here is that no non-comment line moved: a changed pattern silently starts or
stops ignoring files, and a changed SHA silently un-skips a commit in `git blame`. Diffed with the
comments stripped, both files are byte-identical.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The comments here are the most valuable prose in the CI: why the Symfony matrix is a hand-picked
list of edges rather than a cartesian product, why the `#[\Override]` bug was only visible at the
*crossing* of an old Symfony line and a recent PHP, why `--prefer-lowest` is filtered, why the 7.0
to 7.3 lines cannot be pinned at all. Every measured fact and every version number survives.

Seven job names and thirty step names move with them. **Two do not.**
`Analyse statique (PHPStan + Psalm)` and `QA (CS + tests)` are required status checks on `main`: a
check's name comes from the job's `name:`, so renaming either makes the required context never
report and leaves every pull request unmergeable until branch protection is updated in the same
breath. Both keep their names and now carry a comment saying so.

Nothing executable changed, and that is checked rather than claimed: the thirteen `run:` blocks are
identical, the structure is equal after dropping every `name` key, and a diff of all non-comment,
non-`name` lines is empty. The two quoted error strings were verified byte-wise at their wrap seams.

Two things inside `run:` blocks did move, both deliberately: a four-line shell comment explaining
the `DurableModule` / `DurableProbe` distinction, and one `echo` that said `tentative` where the
rest of the log says English.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`docs-ovh.yml` deploys the Hugo site to OVH; `prises.yml` runs the claim-registry check.

Their `run:` blocks keep every command byte-identical — a diff of all non-comment, non-`name`,
non-`echo` lines is empty. What did move inside them is what a person reads in a run log: the six
`::error::` / `::warning::` annotations and one `echo`, plus the two-line shell comment explaining
why `sshpass` feeds the password that `-u` ignores.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The weekly build of the sixteen `php-grpc` images and the pruning of their dated tags.

Beyond comments and step names, three kinds of text moved, none of them executable: the two
`workflow_dispatch` input descriptions, which are the help GitHub shows when a human runs the
workflow by hand; the `::warning::` that fires when `GHCR_RETENTION_TOKEN` is absent; and the
dry-run notice. The four `run:` blocks are identical, and the shell comment about the two package
URL families moved with the prose it belongs to.

The header's cross-reference to the `Tests d'intégration Temporal` check follows that job's rename
in `ci.yml`, in the commit below.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Dockerfile, the README that documents the sixteen images, and `retention.py`.

The Dockerfile's non-comment lines are byte-identical: no instruction, package, version, `ARG` or
`ENV` moved.

`retention.py` decides which published images may be deleted, so it got the most care. Its module
docblock — which is also its `--help` — its two docstrings and its four printed messages are English
now, and so are its identifiers: `a_supprimer` is `to_delete`, `DATEE` is `DATED`, `surnuméraires`
is `surplus`. They are all module-local; the workflow calls the script, not its functions. Its own
`--self-test` passes, and a hand-run over a three-version fixture still returns exactly the one
dated version beyond the keep count.

One French line stays, inside a README code fence: `real 6m58s image finale : 126 Mo`. It is a
recorded measurement, and a fence is a transcript.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gplanchat
gplanchat force-pushed the docs/ci-and-root-config-in-english branch from f3a8715 to d5cb4ab Compare September 7, 2026 22:07
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