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
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
- I3794BLOCKED The interaction probe drives the controls of /ui and the Cockpit as it drives the site's
- I3796BLOCKED Every command and its output is one shell block, on every surface
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.