Skip to content

feat(harness-ops): mask control-claude-code captures and launch changed plugins #11390

Description

@kyle-sexton

Parent

Refs #8651. Evidence-verification plan: Brief and acceptance criteria at #11364 (comment); Design and Plan comments are on #11364.

Depends on

Outcome

control-claude-code masks account, usage and cwd text in its screenshots and recordings, writes <file>.txt sidecars, and launches one session per changed plugin.

Demo: run the driver test; the fixture buffer holding user@example.com is absent from the masked buffer and the sidecar.

Plan (phase S4b)

Satisfies: AC8, AC1
Size Medium. Depends on: S3 (#11387), S4a (#11386). Plugin: harness-ops. Design: T3, Contracts C2.

  • First work item: verify tui-test buffer access for masked rendering (Load-bearing assumption row 4).
  • SKILL.md ## Mask: account/email/org lines, usage/limit lines, cwd, with an as-of Claude Code version and recheck trigger, plus a fixture from a real captured screen; values: for the signed-in email/org. maxEntryPoints (judgment: 6) in config. One Launch per changed plugin (single pluginDir per plugins/harness-ops/skills/control-claude-code/driver/driver.mjs:96-100), with a test. Run /app-control:map refresh on the control skill so sources cover hook scripts, skill reference//scripts/, and agents. Driver screenshot/record apply masks and write <file>.txt sidecars; Launch takes plugin dirs from <changed files>.
  • Sanity Check: driver.test.mjs case feeds a fixture buffer holding user@example.com and asserts the masked buffer passed to the renderer and the sidecar both lack it; /app-control:map check plugins/harness-ops/skills/control-claude-code reports no missing ## Mask.

Design excerpt

  • harness-ops / control-claude-code (owns Claude Code knowledge): drops Attended runs only.,
    adds ## Mask, credentials.ci, maxCaptures, masked rendering plus text sidecars in the driver,
    Ready accepting the named CI credential's key source, plugin dir from changed files.
components:
  schemas:
    MaskSection:             # C2, control skill hub "## Mask" (markdown, shown as data)
      oneOf:
        - type: array        # lines "- <label> | <regex>"
          items: {type: object, required: [label, pattern], properties: {label: {type: string}, pattern: {type: string}}}
        - type: string       # "none: <reason>"

Acceptance criteria

Brief criteria this slice satisfies:

  • AC8: A passing PR carries one comment linking redacted evidence; account and usage lines never appear in uploaded captures.
  • AC1: A PR whose diff changes something visible in the interface gets screenshots or video captured and judged against its acceptance criteria before merge.

Done when:

  • Sanity Check passes: driver.test.mjs case feeds a fixture buffer holding user@example.com and asserts the masked buffer passed to the renderer and the sidecar both lack it; /app-control:map check plugins/harness-ops/skills/control-claude-code reports no missing ## Mask.
  • The tui-test buffer-access check (first work item) is recorded in the PR body, with the fallback used if it fails
  • maxEntryPoints (6) is in config and enforced
  • The plugin's version and CHANGELOG are bumped per the repository's release convention
  • ci-status is green on the PR head

Held for owner decision

Dependencies only; no scope is carved out of this slice. It builds on S3's masking contract (#11387) and S4a (#11386).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UJUn7KoThXoYQoxfvdCVi7

Activity

  1. github-actions commented on Oct 30, 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: Knowable
    Flags: none
    Blocked by: #11387, #11386

    I read this as slice S4b of the evidence-verification plan. It has four parts. The control-claude-code driver would mask account, usage and cwd text in screenshots and recordings, and write <file>.txt sidecars. The skill would gain a ## Mask section. Config would gain an enforced maxEntryPoints of 6. Launch would start one session per changed plugin. The done-when list is specific: a driver test with the user@​example.com fixture, a /app-control:map check, the plugin version and CHANGELOG bump, and a green ci-status.

    The tui-test buffer-access check comes first. It is the one assumption to settle before the rest, and the PR body should record the result and any fallback.

    It depends on #11387 and #11386, which are both still open. I found no duplicate among the open issues.

    Automated triage, applied by the lanes App.

  2. melodic-automation-lanes commented on Oct 30, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: blocker #11387 is not closed by a listed human or a merge; blocker #11386 is not closed by a listed human or a merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions