alonso.torres a54124536c ♻️ Look up head components once and pair switch shapes first
- find-ref-shape, find-content-ref-shape, find-ref-component and the
  walk that finds the container of a main each found a head's file
  data and component the same way: the local file or a library, then
  the component, deleted or not. ctf/head-component gives both, or nil
  when they are not there.
- ctf/get-component-shape, the child of a component by id, shared its
  name with ctn/get-component-shape, the top copy root of a shape; it
  is get-component-child.
- generate-keep-touched found, in one reduce, the shape in the new
  copy that each touched child of the old copy relates to, carried the
  child's overrides into it or kept a swapped child in its place, and
  collected the parents of the related shapes in a binding named
  parents-of-swapped, though it held the parent of every related
  shape. It now pairs the shapes first (the old child, the main shape
  it refers to, the related new shape, and whether the old child was
  swapped), then carries each pair in a reduce, and gives the parents
  from the pairs. The pairing reads the page as it was before the
  switch, as the reduce did, so the result is the same.

No behavior change: the golden masters and the suites are unchanged.

Benchmark (lower quantile, ms; baseline / now / ratio):
  deepest-edit-through-three-levels    35.2 /  16.5 / 0.47
  edit-through-a-chain-of-dependents   68.9 /  34.4 / 0.50
  library-update-into-copies           83.1 /  37.7 / 0.45
  main-edit-among-many-shapes           4.8 /   2.6 / 0.53
  main-edit-into-10-copies              1.8 /   0.7 / 0.42
  main-edit-into-100-copies            15.4 /   8.4 / 0.55
  main-edit-into-1000-copies          153.1 /  77.9 / 0.51
  variant-switch-into-copies           32.1 /  18.2 / 0.57

AI-assisted-by: claude-opus-5-5
2026-10-28 15:53:06 +01:00
..