Skip to content

docs(sync): backfill the four missing port logs and guard the pairing - #518

Merged
IgorShevchik merged 1 commit into
mainfrom
chore/sync-backfill-first-logs
Aug 31, 2026
Merged

docs(sync): backfill the four missing port logs and guard the pairing#518
IgorShevchik merged 1 commit into
mainfrom
chore/sync-backfill-first-logs

Conversation

@IgorShevchik

Copy link
Copy Markdown
Collaborator

Closes the finding left open by #515.

The ledger's log convention starts one entry in, at d50c121c, so the four commits before it had a processed entry and no .sync/log/<sha>.md. #515 deferred both the backfill and the guard that would have caught them, on the grounds that writing a rationale months later is reconstruction rather than record.

The record turned out to still exist. Both commits are readable on both sides, and three of the four fork commits carry contemporaneous reasoning in their own messages. Each log is derived from git show on the upstream commit and on ours, plus the fork commit's message, and says at the top that it was backfilled and from what. Nothing is recalled.

What the four are

upstream ours what the log had to work out
2799fa6ffix(InputMenu)!: rename autocomplete prop to mode #68 / 081a9799 Verbatim on the component. Three deliberate narrowings, two of them right (test names kept, so snapshot keys don't move; example file not renamed, so the docs name: stays valid) and one a real gap
631f5dc5fix(ContentSearch/DashboardSearch): proxy missing CommandPalette props #70 / e92fdc35 Looks like a verbatim prop-list copy and must not be
6102a87bdocs(design-system): Tailwind v4 cursor change #71 / 77314c8e Byte-for-byte; only the following heading differs, because the pages order sections differently
007b136afix(components)!: constrain popper content to viewport height #72 / 5da53b6b The opposite of verbatim — the cap had to move between slots

What re-deriving them turned up

An omission nobody had recorded. 2799fa6f added <UInputMenu placeholder="Autocomplete" mode="autocomplete" … /> to upstream's nuxt playground. The port dropped that line, and re-checking now, neither playgrounds/nuxt nor playgrounds/demo has an autocomplete-mode row for InputMenu. Small, but it is the only place the mode can be exercised by hand. Recorded in the log, not fixed here — that is a change to a playground, not bookkeeping.

Two ports the one-line summaries had flattened.

631f5dc5 reads as "copy upstream's prop list", and doing that would have been wrong: upstream's list contains loadingIcon and ours must not, because this fork does not carry the prop at all — CommandPalette.vue:93 says @memo not use loadingIcon. Taking the list verbatim would have added a name to a reactivePick for a prop that does not exist, forwarding undefined silently rather than failing.

007b136a diverges structurally. Upstream adds a popper cap to a content slot that already had flex flex-col; here the equivalent cap sat on viewport, so applying upstream's hunks verbatim would have left two caps fighting — an unconditional 40vh inside a content bounded by the available height. The port moves the cap instead, keeps the fork's own ceilings rather than upstream's 15rem, and adds a var(…, 100vh) fallback upstream's bare max-h-(--reka-…) form does not need: inside min(), an unset variable invalidates the whole declaration instead of merely not capping, which is exactly Select with position="item-aligned", where reka never publishes the height. Two transform-origin namespace bugs fixed in that commit were ours alone. That is why it is marked breaking here and is not upstream.

The guard

test/utils/sync-ledger.spec.ts gains two assertions:

  • pairing, both directions — a missing log is the obvious failure; an orphaned log is what a mistyped SHA in a filename looks like, where the entry reads as undocumented while its reasoning sits one character away
  • a floor on file size — an empty or stub file satisfies pairing while documenting nothing

Three mutations verified, each failing the assertion it should: delete a log (entry without log), add a deadbeef…md (log without entry), truncate a log to # stub (thinness).

Deliberately not guarded: the heading format. It varies across the 280 files — # no-op — nuxt/ui@<sha> and # Port: <subject> both occur — and a rule there would be invented rather than enforced.

Verification

Each log ends with a re-check against today's main, not against the commit it describes — the ports are all four still intact, and 007b136a's literal 40vh/40rem have since been tokenised by #430 (--max-height-popup-menu / --max-height-popup-list) with the min() shape and fallbacks unchanged.

Full gate: lint · typecheck · build (3.86 MB) · test322 files, 7502 passed, 6 skipped.


Generated by Claude Code

The ledger's log convention starts one entry in, at `d50c121c`, so the four
commits before it — `2799fa6f`, `631f5dc5`, `6102a87b`, `007b136a` (#68-#72) —
had a `processed` entry and no `.sync/log/<sha>.md`. #515 deferred both these
and the guard that would have caught them, on the grounds that writing a
rationale months later is reconstruction rather than record.

The record turned out to still exist. Both commits are readable on both sides,
and three of the four fork commits carry contemporaneous reasoning in their own
messages, so each log is derived from `git show` on the upstream commit and on
ours, and says at the top that it was backfilled and from what. Nothing is
recalled.

Re-deriving them was worth more than the tidiness. It surfaced an omission
nobody had recorded: `2799fa6f` added an autocomplete-mode row to upstream's
InputMenu playground, the port dropped it, and neither playground has one today,
so the mode cannot be exercised by hand. It also made two ports legible that the
one-line summaries had flattened — `631f5dc5` must NOT copy upstream's prop list
verbatim, because ours omits `loadingIcon` on purpose, and `007b136a` had to
move a cap between slots rather than add one, which is why it is breaking here
and is not upstream.

The guard now asserts the pairing in both directions plus a floor on file size:
a missing log is the obvious failure, an orphaned log is what a mistyped SHA in
a filename looks like, and an empty file satisfies pairing while documenting
nothing. Three mutations verified. The heading format is deliberately not
guarded — it varies across the 280 files, and a rule there would be invented
rather than enforced.

Gate: lint, typecheck, build (3.86 MB), test (322 files, 7502 passed).
@IgorShevchik
IgorShevchik merged commit f6484c5 into main Aug 31, 2026
2 checks passed
@IgorShevchik
IgorShevchik deleted the chore/sync-backfill-first-logs branch August 31, 2026 06:01
IgorShevchik added a commit that referenced this pull request Aug 31, 2026
…ssing (#520)

Upstream's `2799fa6f` — the commit that renamed InputMenu's `autocomplete`
boolean to `mode: 'combobox' | 'autocomplete'` — added a row exercising the new
mode to its own playground. The port (#68) dropped that line, and nothing has
added one since, so the mode has never been reachable by hand in either
playground. No snapshot covers it either: the render is identical and only the
prop spelling differs, which is why the port could report "snapshots unchanged"
and be right.

The row takes its own ref rather than reusing one above it. In autocomplete mode
`modelValue` is the input text, a string, where every other row on the page binds
a selected item — which is the point of the mode and the thing a person is there
to look at.

Found by backfilling that commit's `.sync/log/` entry in #518, which is also
where the omission is recorded; the log is updated to say the gap was closed here
rather than leave a claim that is no longer true.
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.

2 participants