Skip to content

sync-skill: resolve the locale directory, and guard seams against upstream test fixtures - #88

Merged
zpyoung merged 2 commits into
mainfrom
sync-lessons/v1.4.206-recut
Sep 27, 2026
Merged

zpyoung merged 2 commits into
mainfrom
sync-lessons/v1.4.206-recut

Conversation

@zpyoung

@zpyoung zpyoung commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner
Files Added Deleted Net
Test 0 0 0 0
Prod 1 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​36 $\color{#cf222e}{\Huge{\mathbf{−}}}$​2 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​34

Two lessons from the v1.4.206 re-cut sync (#87). Both are rules, so both are edited into the step
that owns them — references/file-ownership.md. Nothing here touches SKILL.md or
sync-lessons.md, so it cannot conflict with #85 or #86.

1. The locale sweep pointed at a directory that does not exist

The reference told the run to sweep fork locale bundles against src/renderer/src/locales/*.json.
That directory does not exist — not at v1.4.206, and not at the previous tag either:

$ git ls-tree -r --name-only c464b10149 -- src/renderer/src/locales   # (retracted v1.4.206)
$ git ls-tree -r --name-only c62eca3988 -- src/renderer/src/locales   # (re-cut v1.4.206)
$ git ls-tree -r --name-only HEAD       -- src/renderer/src/i18n/locales | head -3
src/renderer/src/i18n/locales/en.json
src/renderer/src/i18n/locales/es.json
src/renderer/src/i18n/locales/fr.json

Run as documented with ls, the sweep errors. Run the way an agent will naturally reach for —
a Python glob or find — it returns the empty set, and every fork bundle then compares clean
against zero required locales:

upstream locales: []
(fork bundles with missing locales: 0)

That is the false-pass shape this reference warns about elsewhere, and it reported success on the
one check that exists to catch a missing locale file. Re-run against the real directory, the
answer was also zero — but only by luck.

The fix corrects the path in both places and adds the rule: resolve the directory, and confirm the
locale set is non-empty before trusting the comparison. The path has moved once, so it can move
again; a pasted path fails silent while a resolved one fails loud.

2. A fork seam threw inside upstream's own test fixture

v1.4.206 added pending-split-close-test-fixture.ts. It is upstream's fixture, built for
upstream's code, and it supplies no settingsRef. The terminal-dock seam in
terminal-pane-pane-closed.ts read:

deps.settingsRef.current?.experimentalTerminalDock === true,

Optional on .current, but not on the ref. Three of upstream's pending-close suites threw
TypeError: Cannot read properties of undefined (reading 'current') across shards 4, 5 and 6 —
one fork line failing suites the fork has no stake in, in files it does not own.

Nothing in the ownership pass sees this. --verify-seams passes (the declared line is present),
--verify-residuals passes, the guard passes, and all four typecheck projects pass. It appears
only in PR CI, and the stack reads as a renderer bug rather than a seam question.

The skill had no guidance for this at all — the only record was a note outside the repo. The new
section gives the tell (a TypeError whose stack runs upstream test → upstream fixture → one fork
line in an upstream file), the rule (optional-chain the whole access path, absent state means the
feature is off, open durable state lazily), and why the guard belongs in the seam rather than in
the fixture: upstream's fixture resets to the tag every sync, so hardening it there is undone at
the next release.

Fixed in #87 as 98ca77ac0d.

@zpyoung
zpyoung merged commit 2cfa517 into main Sep 27, 2026
28 checks passed
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