Skip to content

I3793 — One copy control and one tab control ship to every surface

Make kit.js's dependency-free copy and tab controls the only ones: replace the Alpine copy button and Alpine tabs on the site with them, and ship them to /ui and the Cockpit as byte copies held by scripts/cockpit-assets --check, the way nav.js and theme.js already travel, so a code block, a command or a set of tabs behaves the same on every surface.

READY wave 0 · p1 · implementation profile · parallel safe

Part of one-kit-on-every-surface — Code, charts, controls, embeds and shell blocks are one kit on every surface, declared in the design book and held there by a gate.

Ready. Every dependency is done, so majordomus plan start I3793 will be accepted.

Objective

Make kit.js's dependency-free copy and tab controls the only ones: replace the Alpine copy button and Alpine tabs on the site with them, and ship them to /ui and the Cockpit as byte copies held by scripts/cockpit-assets --check, the way nav.js and theme.js already travel, so a code block, a command or a set of tabs behaves the same on every surface.

Why

On 2026-10-20 the site had two copy implementations (Alpine in components.html and terminal-run.html, data-copy in kit.js) and two tab implementations (Alpine and kit.js), each with its own interaction spec, and /ui and the Cockpit had no copy control at all; the owner asked for one kit everywhere.

Current state

copy-button.mjs and kit-copy.mjs specs; tabs.mjs and kit-tabs.mjs specs; no copy or tabs on /ui and the Cockpit.

Desired state

One copy and one tab implementation, one spec each, present on the site, /ui and the Cockpit; a second implementation planted fails the design check that names it.

Scope

  • site/kit.js
  • site/templates/components.html
  • site/templates/partials/terminal-run.html
  • share/ui
  • share/cockpit
  • scripts/cockpit-assets
  • scripts/lib/interaction-specs
  • scripts/ci/design-check

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • The site, /ui and the Cockpit load the same copy and tab code, byte-identical, checked by cockpit-assets --check
  • No Alpine copy or tab component remains on the site, and one interaction spec covers each control
  • A second copy or tab implementation planted on any surface fails a gate that names it

Validation

  • bin/majordomus plan validate
  • scripts/cockpit-assets --check
  • scripts/interaction-probe

Evidence required

  • one_copy_and_tab_control_case

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3793.yaml. Read it back with majordomus plan show I3793.

Searches the titles and descriptions of every page this site publishes.