Skip to content

feat(harness-ops): add the control-claude-code driver on a pinned @microsoft/tui-test #9591

Description

@kyle-sexton

Track B driver slice of #9507 (no poteto draft).

Problem

Nothing drives Claude Code's TUI for screenshots and video. The attended spike chose @microsoft/tui-test over VHS (VHS drew Claude Code's glyphs as boxes and downloads an unverified browser).

Fix

  • plugins/harness-ops/skills/control-claude-code/driver/: package.json and package-lock.json with an exact @microsoft/tui-test pin; driver.mjs with verbs launch, wait-for, type, screenshot, record start|stop, stop, doctor (install state and font probe). The launch command is built in a function that imports nothing from tui-test.
  • First-use install per docs/conventions/on-demand-dependencies/README.md: npm ci --ignore-scripts --no-audit --no-fund into <plugin data dir>/control-claude-code/<first 12 hex of the lockfile sha256>/, then npm audit signatures once, failing closed with a repair line.
  • launch builds claude --restricted --strict-mcp-config --plugin-dir <pluginDir>, unsets ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN and the cloud-provider variables, uses no --bare, sets CLAUDE_CODE_FORCE_SESSION_PERSISTENCE=1.
  • driver.test.mjs runs with no node_modules and asserts the launch command line.
  • New weekly Dependabot npm entry for the directory; plugins/harness-ops/prerequisites.json system-lib entry probing fc-list for Noto Sans Symbols 2 (needed for U+23F5), with a macOS/Windows degrade. Fragment: harness-ops minor.

Done when

  • node --test plugins/harness-ops/skills/control-claude-code/driver/driver.test.mjs exits 0 with no node_modules.
  • The lockfile's @microsoft/tui-test version equals the package.json pin, with no range character.
  • grep -n 'directory: /plugins/harness-ops/skills/control-claude-code/driver' .github/dependabot.yml matches.

Blocked by: none.

Activity

  1. github-actions commented on Oct 24, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none

    I read this as the Track B driver slice of #9507. It adds a control-claude-code driver under harness-ops. The driver sits on an exact-pinned @​microsoft/tui-test and installs on first use with a signature audit. It comes with an offline launch-command test, a weekly Dependabot entry and a font prerequisite probe. The three done-when checks can all be run in the lane. Nothing looks missing. #9592 (the control skill) looks like a sibling slice rather than a duplicate. I found no duplicates.

    Automated triage, applied by the lanes App.

  2. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 24, 2026
  3. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: a Feature needs an open parent issue a listed human filed that awaits no decision. A recorded decision does not change these rules (.github/actions/resolve-config/admission-rules.json); a person who wants it worked adds agent-ready.

  4. self-assigned this
    on Oct 24, 2026
  5. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority: mediumReal value, no hard deadline; normal backlog flow.status: needs-decisionAwaiting a human or maintainer judgment call.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

Fields

No fields configured for Feature.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions