Skip to content

app-control: new plugin plus testing and debugging changes #7581

Open
10 of 12 issues completed
Open

Description

@kyle-sexton

Parent

Refs #7555. Source: PLAN Phase 13, topic poteto-review. Thread: app-control, testing and
debugging.

Depends on

Outcome

A new app-control plugin owns the feature map, the driver and the evidence layout: consumers call
only /app-control:drive, which operates and observes but never judges; testing and debugging
shrink to choosing, reporting and analysis.

Decisions

  • New plugin app-control, created in the same migration as the capture move, owning the feature
    map, driver CLI, readiness step and evidence (D25, D52). Origin: Lauren's
    (create-verification-skill, Control Glass) with ours.
  • /app-control:map create, refresh, check; bare proposes; create only on the explicit word;
    --unattended; replaces map-features and refresh-feature-map (D26, D52).
  • One generated project skill per app, control-<app>: hub, features/ (Reset and States lines),
    optional cli/; shape derived from the repo (D27, D52, D53).
  • Drive records a fingerprint of each ad-hoc script; refresh counts repeats and proposes a CLI verb
    via /developer-experience:build-cli for a human yes (D52, D53).
  • /app-control:drive: operates and observes, never judges; bare drive plus ready, capture,
    cleanup; consumers call only drive; degrades to a stack recipe with a "run map create" note
    (D54). Capture --kind trace|cpu|heap|screenshot|aria|video|logs; --attach always attended
    behind a script; owns only the evidence layout (D55).
  • Capability requests: readiness lists what is reachable, each feature records what it needs, the
    report asks for the narrowest grant; read-only by default (D13, D54). A missing signal is a
    capability gap (D54). Benny control-adapter contract is drive's acceptance list (Q528).
  • Dogfood: a feature map of this repo's skills and a per-PR live smoke of changed skills (D16).
  • run-e2e shrinks to choosing affected entry points and reporting; /testing:check-visual-parity
    uses drive when installed (D26, Q204).
  • /debugging:analyze-profile only analyzes; gains compare <before> <after> and shortest GC-root
    path in its SQLite converter (D55, Q561; Lauren's "dump into sqlite ... diff"). /debugging:debug
    keeps live mechanism proof and the two-failed-fixes stop; adds a minimise step, a pristine-copy diff
    for forced red, a HITL template note (D55, Q16, Q524).
  • /testing:write: settings TDD refactor step on, first test user-flow; bug-fix red fails on
    behavior; one line on what the assumed seam catches and misses (Q524, Q538, Q539).
  • Tests that can't fail: fix the 2 findings on main (child testing: fix the two tests the can't-fail scan flags #7597), scoped scan in the required
    check, test guards on; absence-only and never-called checks into /testing:test-value now (D8,
    Q18). Mutation testing runs post-merge, diff-scoped, never a PR blocker (D71, Q79).
  • Research tags: control-skill size budget measured on the dogfood map first (D52); converter on a
    large heap (Q561); precision run before /testing:audit absence and never-called rules (D8, Q18);
    "did the Refactor step run" inside the K36 eval (Q538).
  • Sub-topic promotion: this thread gets its own plan at phase start (B7).

Key interfaces

From the design's module layout: "app-control: created in the same migration as the capture move.
Owns the feature map, driver CLI, readiness step and evidence layout. /app-control:map (create,
refresh, check) replaces map-features and refresh-feature-map. /app-control:drive (bare,
ready, capture, cleanup) is the only entry consumers call. One generated project skill per app,
control-<app>." "testing: run-e2e shrinks to choosing entry points and reporting;
check-visual-parity uses drive when installed; /testing:write settings; /testing:test-value
gains absence-only and never-called checks; map-features and refresh-feature-map leave for
app-control." "debugging: /debugging:analyze-profile only analyzes (no capture), gains
compare <before> <after> and shortest GC-root path; /debugging:debug gains minimise,
pristine-copy diff, HITL template note."

Contracts: "Capture: --kind trace|cpu|heap|screenshot|aria|video|logs; --attach always attended."
Variation verdicts: "App driver (control-<app>): abstract now; /app-control:drive only, finds the
skill via app-control.yaml or discovery, degrades to a stack recipe (D54)." "Stack-specific tools
(linters, architecture tests, profilers): contain now; research live, write setup into the project
(D65, D66, Q46)."

Done when

  • The app-control map and drive skills exist and testing's map-features and
    refresh-feature-map do not (none of this on main).
  • python3 -m pytest plugins/debugging/skills/analyze-profile/scripts exits 0 with a compare
    case, and bash plugins/testing/skills/audit/scripts/cant-fail-scan.sh --check exits 0.
  • Every slice sub-issue is closed by a merged PR, each skill-body cut with before/after evals.

Out of scope

  • Electron and mobile capture (parked item).
  • The tool-per-job setting itself (Tool per job thread).

Related

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 16, 2026
  2. github-actions commented on Oct 16, 2026

    @github-actions
    Contributor

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

    Size: Large
    Complexity: High
    Uncertainty: Knowable
    Flags: none
    Blocked by: #7571, #7580

    Decision recorded. This issue's - [ ] criteria are already in its body, written by a listed human. The owner's 2026-10-23 decisions move this thread's map work to #9507 and amend D16. Nothing new is decided here. Intake posted no refinement comment on this issue, so no refinement questions are open. It closes through its sub-issues, never by a lane run on it.
    [quote truncated; the full decision is at the link]

    #7581 (comment)

    The decision settles the open questions. The remaining work is the drive skill, the debugging and testing changes, no defaultEnabled key in the manifest, and control-claude-code refusing unattended runs. It needs splitting across the sub-issues. Map work is tracked in #9507.

    Automated triage, applied by the lanes App.

  3. changed the issue type fromtoon Oct 16, 2026
  4. changed the issue type fromtoon Oct 16, 2026
  5. 13 remaining items

  6. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    Owner decision (2026-10-24), reconciling two section-set answers. The feature file in the unified feature-map contract keeps ## Parts beside the 02:19Z set: ## Parts, ## Sub-features, ## Entry points (each driven or not driven: <reason>), ## Reset, ## Drive, ## Gotchas.

    Basis: Parts lists a feature's distinct behaviors "so a change can be matched to the part it touches" (plugins/testing/reference/feature-map.md:84-85). run-e2e and the touched-features drift report use it to map a changed file to a feature.

    Also settled: the Claude Code TUI recorder for control-claude-code is Microsoft @microsoft/tui-test (npm, SLSA provenance verified), not VHS and ttyd. The A slices of #9507 are owned by the laptop session; B, C, D, #9533, #9534 and #9542 stay with poteto.

  7. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  8. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    Released for re-triage under the owner's 2026-10-24 rule: an issue stops for a person only for an intent or vision question, a security call, a host or attended run, or spend outside prepaid credit. The hold label came off and intake triage runs again now; it re-applies a hold, with a numbered question, when one of those applies.

    To hold this issue again, add needs-human (or status: needs-decision) and say why in a comment.

  9. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 24, 2026
  10. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 24, 2026
  11. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: Size large: the split into sub-issues at intake is pending (owner Q93).

  12. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: the issue is at status: ready.

  13. kyle-sexton commented on Oct 26, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. This issue's - [ ] criteria are already in its body, written by a listed human. The owner's 2026-10-23 decisions move this thread's map work to #9507 and amend D16. Nothing new is decided here. Intake posted no refinement comment on this issue, so no refinement questions are open. It closes through its sub-issues, never by a lane run on it.

    Sources, quoted verbatim:

    The feature-file section set (#7581 (comment)) is map work, so #9507 carries it as a criterion, not this issue.

    Body criteria as amended by those decisions (only the amended lines; the rest of the body's list stands as written):

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

    needs-specNeeds a Brief or plan before anyone can build it.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

    Fields

    Work status

    needs-spec

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions