# Catching up with Rastrillo for 1.2.0

Rastrillo is moving to take its stylesheets and scripts from Fiesta, so
1.2.0 takes every change Rastrillo made to the shared files after
Fiesta copied them. This is the record of each differing hunk, which
side was newer, and what 1.2.0 does with it.

Compared on 2026-11-04: Rastrillo main at aa35d581 (its `ui/`) against
Fiesta main at bb23996 (1.1.0). Fiesta's scripts were seeded at
e14b745a and its CSS and `select.js` synced at f892f8be
(`hack/seed/README.md`), so a Rastrillo change after e14b745a to a
script other than `select.js`, or after f892f8be to anything, is one
Fiesta has not seen.

## Identical on both sides

`shell.css`, `themes/day.css`, `themes/plain.css`, `themes/signal.css`,
`light.js` and `anchor.js`: no difference.

## tokens.css: 11 hunks

Rastrillo's `ui/tokens.css` is exactly Fiesta 1.0.0's `css/tokens.css`
with cc7c9c69 applied (checked by applying the commit's diff to
`git show v1.0.0:css/tokens.css` and comparing bytes). So one hunk is
Rastrillo's and the other ten are Fiesta 1.1's additions.

| Rastrillo lines | what differs | newer | 1.2.0 |
|---|---|---|---|
| 235 | the control icon scope gains seg-tabs buttons and side nav links | Fiesta 1.1 | keep |
| 682 | the column's footer row, `rst-page-foot` | Fiesta 1.1 | keep |
| 1342 | `rst-snippet` | Fiesta 1.1 | keep |
| 1388 | `rst-status="inline"` on a phone | Fiesta 1.1 | keep |
| 1644 | the footer row's flat menus in the summary-face rules | Fiesta 1.1 | keep |
| 2089 | seg-tabs as buttons; `rst-side` and `rst-side-nav` | Fiesta 1.1 | keep |
| 2923 | the console rail's nav: 5px padding given back by negative margins, a smaller sticky inset and a larger cap, so the current item's ring and shadow are not clipped | Rastrillo, cc7c9c69 | take |
| 3377 | on a phone, seg-tabs buttons centre their label as the links do | Fiesta 1.1 | keep |
| 3484 | forced colours: the current side nav link is marked as the shell's is | Fiesta 1.1 | keep |
| 3525 | print: the current side nav link's wash | Fiesta 1.1 | keep |
| 3627 | seg-tabs buttons and side nav links centred as rows | Fiesta 1.1 | keep |

## shell.js: 4 hunks, all Rastrillo's

Fiesta's `js/shell.js` is f892f8be's byte for byte. Rastrillo changed
it in d9c9ed13, 023740c5, e5e35a3e and 6b1c5478 (skipped view
transitions). Every hunk is taken:

| Rastrillo lines | what differs | newer | 1.2.0 |
|---|---|---|---|
| 1 | the header's first line: transition observation and phone navigation | Rastrillo, e5e35a3e | take |
| 29 | the header's loading note: sidebar and console load it deferred; other layouts load `transition.js` before the styles | Rastrillo, 023740c5, e5e35a3e | take |
| 89 | `observeTransition`: swallow only a skipped transition's `AbortError`, `InvalidStateError` or `TimeoutError` on `ready`, `finished` and `updateCallbackDone`, once per transition; observe `document.activeViewTransition` at startup; the direction comment shortened | Rastrillo, d9c9ed13, 023740c5, 6b1c5478 | take |
| 110, 129 | `reveal` and `leave` observe their event's transition | Rastrillo, d9c9ed13, 023740c5 | take |

## busy.js: 3 hunks, all Rastrillo's

Fiesta's `js/busy.js` is e14b745a's byte for byte; 8548e455 (live
pages) changed it before the f892f8be sync, which took only the CSS
and `select.js`. Every hunk is taken:

| Rastrillo lines | what differs | newer | 1.2.0 |
|---|---|---|---|
| 28 | the header documents `data-live-form` | Rastrillo, 8548e455 | take |
| 95 | `busySubmit(e, late)`: a `data-live-form` form is not armed in the capture listener | Rastrillo, 8548e455 | take |
| 200 | the window listener arms a `data-live-form` form late, only if no live script claimed it (`e.liveForm`) and nobody cancelled it | Rastrillo, 8548e455 | take |

The header's wording names `live.js`, Rastrillo's script. It stays as
Rastrillo wrote it, so the bytes Rastrillo serves do not change; to
Fiesta it is the attribute "set by a server that swaps forms" and
harmless without one.

## transition.js: Rastrillo only

New in 023740c5 and finished in e5e35a3e and 6b1c5478: the small
observer column, stage and topbar pages load before their styles.
Taken whole, byte for byte, as an optional script.

## select.js: 10 hunks, all Fiesta's

Rastrillo has not changed `select.js` since f892f8be, when Fiesta
synced it, so on Rastrillo's side every hunk is f892f8be's text. Every
Fiesta side came in with Fiesta 1.0.0 (c50db6d); 1.1.0 did not touch
the file. Keep all.

| Rastrillo lines | Fiesta lines | what differs | newer | 1.2.0 |
|---|---|---|---|---|
| 42 | 42 | the header: words come from the attribute, then the page's string table, then English, where Rastrillo's said its partial emits them from a catalog | Fiesta, c50db6d | keep |
| 175 | 177 | `fiestaPickLang` and `fiestaWord`, the lookup, and both exported to the Node harness | Fiesta, c50db6d | keep |
| 270 | 303 | `say` reads through `fiestaWord` instead of the attribute alone | Fiesta, c50db6d | keep |
| 279 | 312 | `offLimits` (an option, or its option group, is disabled) and `locked` (the select is disabled, by itself or by a fieldset) | Fiesta, c50db6d | keep |
| 295 | 334 | an option in a disabled option group is neither a prompt nor choosable | Fiesta, c50db6d | keep |
| 329 | 368 | the box is built disabled when the select is | Fiesta, c50db6d | keep |
| 750 | 793 | a locked select's list does not open | Fiesta, c50db6d | keep |
| 805 | 848 | a locked select takes no choice | Fiesta, c50db6d | keep |
| 999 | 1044 | a form reset repaints the box a task later, unless a listener cancelled it | Fiesta, c50db6d | keep |
| 1038 | 1100 | the box follows the select's disabled attribute, closing an open list, and the prompt test uses `offLimits` | Fiesta, c50db6d | keep |

## datetime.js: 17 hunks, all Fiesta's

Rastrillo has not changed `datetime.js` since e14b745a, the seed, so on
Rastrillo's side every hunk is the seed's text. Every Fiesta side came
in with Fiesta 1.0.0 (c50db6d); 1.1.0 did not touch the file. Keep all.

| Rastrillo lines | Fiesta lines | what differs | newer | 1.2.0 |
|---|---|---|---|---|
| 18 | 18 | the header: the date words come from the table's `date-words`, not Rastrillo's `ui/funcs.go` | Fiesta, c50db6d | keep |
| 32 | 32 | the header: the seven quick-pick attributes spelled out one by one | Fiesta, c50db6d | keep |
| 43 | 45 | the header: words come from the attribute, then the page's table, then English, where Rastrillo's said its partials emit them | Fiesta, c50db6d | keep |
| 62 | 65 | the header names `check/node/datetime_node.mjs` and `check/testdata/datetime/` | Fiesta, c50db6d | keep |
| 73 | 76 | the header names `calendar.js` and the seam `window.fiestaCalendar` | Fiesta, c50db6d | keep |
| 1056 | 1059 | the English date words (`ENGLISH_WORDS`), `vocabulary`, and the reset accounting a blur commit reads | Fiesta, c50db6d | keep |
| 1115 | 1176 | the local `attr` helper goes, replaced by `fiestaWord` | Fiesta, c50db6d | keep |
| 1128 | 1184 | the vocabulary and every label read through `vocabulary` and `fiestaWord` | Fiesta, c50db6d | keep |
| 1354 | 1405 | the calendar is opened through `window.fiestaCalendar`, not `window.rastrilloCalendar` | Fiesta, c50db6d | keep |
| 1450 | 1501 | a locked field opens no suggestions | Fiesta, c50db6d | keep |
| 1461 | 1513 | a locked field opens no calendar | Fiesta, c50db6d | keep |
| 1481 | 1534 | a locked time field opens no clock | Fiesta, c50db6d | keep |
| 1510 | 1564 | `locked` (read-only or disabled); `follow`, which mirrors the field's disabled and read-only state onto the box and button as they change; and a locked field commits nothing | Fiesta, c50db6d | keep |
| 1523 | 1597 | a locked field's text is repainted, not committed | Fiesta, c50db6d | keep |
| 1613 | 1688 | a reset accepted after the blur wins over the blur's commit | Fiesta, c50db6d | keep |
| 1665 | 1749 | a form reset repaints the box a task later, unless a listener cancelled it | Fiesta, c50db6d | keep |
| 1714 | 1815 | `fiestaPickLang` and `fiestaWord`, the same two functions `select.js` carries, and the Node harness path | Fiesta, c50db6d | keep |

## calendar.js: 3 hunks, all Fiesta's

Rastrillo has not changed `calendar.js` since e14b745a. Every Fiesta
side came in with Fiesta 1.0.0 (c50db6d). Keep all.

| Rastrillo lines | Fiesta lines | what differs | newer | 1.2.0 |
|---|---|---|---|---|
| 18 | 18 | the header names the seam `window.fiestaCalendar` | Fiesta, c50db6d | keep |
| 38 | 38 | the header names `check/node/datetime_node.mjs` | Fiesta, c50db6d | keep |
| 517 | 517 | the panel is published as `window.fiestaCalendar`, and the comment on the pure half names the Fiesta harness | Fiesta, c50db6d | keep |

How the provenance was read: `git diff v1.0.0 v1.1.0` and
`git diff v1.1.0 HEAD` are empty for all three files, and the diff of
Rastrillo's file against `git show v1.0.0:js/<file>` has the same hunks
as the diff against the tree.

## Out of scope

`rastrillo.js` (its menu, switch, touch and scheme halves are already
`fiesta.js`; its fragment shim stays Rastrillo's) and `live.js` (live
pages stay Rastrillo's).
