chore: release v0.23.0#153
Conversation
Bundles the three "fix before shadow mode" blockers, all harness-validated: - #150 (#149) — forward/init resolved the glossary CWD-relative and no edition repo carries one, so a resync from the target repo translated with no glossary and logged nothing either way. Now package-relative, reported, loud on failure; `forward --glossary` added. - #151 (#146) — review mode never read `glossary-path`, so a repo with a custom glossary was translated against one terminology and judged against another. Fixing it exposed that the shared loader tried the built-in glossary FIRST, so `glossary-path` was silently dead in all three modes for every language that ships one. Custom is now an override that fails the run when unreadable. - #152 (#148) — the four diffChecks gate absolutely but were all model output. structurePreserved and headingMapCorrect are now computed; scopeCorrect and positionCorrect stay model-asserted, are tagged in a new optional `diffCheckSources` field, and gate through a `diff-check` finding. Routing is unchanged; shadow calibration can now separate measured fact from model opinion. No behavioural change on upgrade for the fleet: no edition sets `glossary-path`, `auto-merge-mode` still defaults to `off`, and the deterministic checks were verified against every production file before shipping (248 of 249 with sections carry a heading map; the one gap was real and is fixed in lecture-python-programming.fa#142). schemaVersion stays 1 — `diffCheckSources` is a pure optional addition. Pre-flight: rebuilt dist-action matches the committed bundle. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Release prep for v0.23.0 of action-translation, updating repository metadata/docs to reflect the new version and the bundled changes described in the PR description.
Changes:
- Bump package version to
0.23.0inpackage.jsonandpackage-lock.json. - Cut the
0.23.0section inCHANGELOG.mddated2026-07-23. - Refresh internal docs/state to reflect the new release (current version/test count, and
.dev/STATE.mdverified date + release summary).
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| package.json | Version bump to 0.23.0. |
| package-lock.json | Lockfile package version bump to 0.23.0 (root + package entry). |
| CHANGELOG.md | Adds ## [0.23.0] - 2026-07-23 release notes section. |
| .github/copilot-instructions.md | Updates “Current Version” and test/suite counts to v0.23.0. |
| .dev/STATE.md | Updates verified: date and records the v0.23.0 “recently landed” summary. |
CI produced no run for 6439ad0 on either `opened` or `reopened`, and no skipped-run record either. Ruled out first: paths-ignore (PR #145 fired with an identical five-file set including .dev/STATE.md, on its own release commit), Actions disabled, workflow inactive, draft PR, a push/create race, skip-ci tokens, and workflow-file drift. This empty commit tests whether a fresh head SHA is evaluated at all.
|
Why this PR shows no checks: a GitHub incident, not anything in this repo. GitHub Status reports an active incident — "Latency issues across a number of services … degraded availability for Actions, Issues and Webhooks" — with Actions in partial outage and Webhooks degraded. It began at 07:53:59 UTC. This PR was created at 07:54:02 UTC, three seconds later. That accounts for every observation:
Ruled out first, before reaching for the incident: The release commit is verified regardless. The Recommendation: wait for Actions to recover before merging. Not because this PR is unsafe, but because a release cut during an Actions outage is hard to verify — the post-merge The empty commit above was a diagnostic (testing whether a fresh head SHA was evaluated); it is squashed away on merge. |
|
Correction to my analysis above: the events were not dropped, they were late. The run timestamps show what actually happened:
The That also means the empty diagnostic commit was unnecessary — the What stands from the earlier analysis: the cause was the GitHub incident rather than anything in this repo, and every repo-side hypothesis ruled out there ( All components returned to operational by 09:35Z. Checks are green and attached; |
Cuts v0.23.0, bundling the three issues that had to land before shadow-mode calibration could start. All three are merged and harness-validated.
What ships
forward/initresolve the built-in glossary package-relative and report which one they loaded;forward --glossaryaddedglossary-path; a custom glossary becomes an override rather than a dead inputdiffCheckscomputed rather than model-asserted; all four declare provenance via a newdiffCheckSourcesfieldBehavioural impact on upgrade: none for the fleet
Worth stating explicitly, because two of these are gate-adjacent:
glossary-path— verified across all five editions' workflows — so the override/fail-fast change alters nothing in production today. It matters for the first edition to adopt a custom glossary.auto-merge-modestill defaults tooff, so no gate acts anywhere.editor; it arrives as adiff-checkfinding instead of a boolean. What changes is that shadow data can distinguish model opinion from measured fact.schemaVersionstays 1.diffCheckSourcesis a pure, optional field addition — no renames, removals or type changes. Blocks written before this release simply lack it, and absence means treat every check as gating (documented indocs/user/metadata-contract.md).The one change that could newly gate a healthy PR is the deterministic
headingMapCorrect. That was checked against the live estate rather than reasoned about: of 249 production files with sections, 248 carry a heading map. The single exception —lecture-python-programming.fa'sautodiff.md, an in-_toclecture with 16 sections and no map — was a genuine gap, not a false positive, and is already fixed in that edition (fa#142). So the fleet-wide blast radius is zero.Validation
Harness runs against the built bundle (the convention for unreleased code — never pinning a harness workflow to a branch):
diffCheckSourcespresent and correct, both deterministic checks pass,scores.diffconsistent with the booleans,auto-mergestill reachable. That last point matters: the 2026-07-23 fixture trap was aheadingMapCorrectartefact makingauto-mergeunreachable and the harness silently useless for the Stage 4 base-rate question.heading-map:key. The deterministic check reads it and passes, so the new gate will not false-gate an unmigrated repo.Earlier in the same session, #149 was validated by a live
forwardrun from a directory with no glossary (357 terms loaded package-relative, and the generated text used the glossary renderings), and #146 by a review run against a deliberately conflicting custom glossary, whose verdict flipped toeditorciting the exact planted terms.Not covered on the harness: a deterministic check failing end-to-end, and a model-asserted check failing. Every harness fixture legitimately passes and the model returned
truein all three runs; manufacturing failures would mean pushing throwaway branches to the harness. Both paths are covered by unit tests, including the fullreviewPRpath with a map-less target assertingscores.diff === 7.5,deterministicprovenance and thediff check failed: headingMapCorrectreason.Pre-flight
dist-action/index.jsand diffed against the committed bundle: identical. (The version bump does not touch the bundle —getEngineVersion()readspackage.jsonat runtime.)After merge — the tags do not cut themselves
There is no release workflow, so merging this PR ships nothing.
@v0keeps resolving to v0.22.0 until three tags are created by hand at the release commit:v0.23.0— annotated, with a GitHub releasev0.23— the minor seriesv0— force-movedThis has bitten the program before: #145 merged,
mainread 0.22.0, andv0.22.0did not exist. Merged, released and working are three separate states.engineVersionin the next review's verdict block is the field that confirms the release actually took.🤖 Generated with Claude Code