Repository navigation
app-control: new plugin plus testing and debugging changes #7581
Description
Parent
Refs #7555. Source: PLAN Phase 13, topic poteto-review. Thread: app-control, testing and
debugging.
Depends on
- config-cascade: settings resolution and convention home #7571 Settings resolution and convention home
- testing: one named tool per job for browser and profiling #7580 Tool per job (setting before capture defaults)
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:mapcreate,refresh,check; bare proposes;createonly 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),
optionalcli/; 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-clifor a human yes (D52, D53). /app-control:drive: operates and observes, never judges; bare drive plusready,capture,
cleanup; consumers call only drive; degrades to a stack recipe with a "runmap create" note
(D54). Capture--kind trace|cpu|heap|screenshot|aria|video|logs;--attachalways 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-e2eshrinks to choosing affected entry points and reporting;/testing:check-visual-parity
uses drive when installed (D26, Q204)./debugging:analyze-profileonly analyzes; gainscompare <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 stepon, first testuser-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-valuenow (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:auditabsence 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
mapanddriveskills 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/scriptsexits 0 with a compare
case, andbash plugins/testing/skills/audit/scripts/cant-fail-scan.sh --checkexits 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
- test(testing): re-run the first-consumer pass for the visual-parity and feature-map skills on a host with a chromium build #7195 feature-map and visual-parity first-consumer pass (sub-issue of this thread).
Metadata
Metadata
Assignees
Labels
Type
Fields
Work status
Activity
github-actions commentedon Oct 16, 2026
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
#7581 (comment)
The decision settles the open questions. The remaining work is the
driveskill, the debugging and testing changes, nodefaultEnabledkey in the manifest, andcontrol-claude-coderefusing unattended runs. It needs splitting across the sub-issues. Map work is tracked in #9507.Automated triage, applied by the lanes App.
13 remaining items
kyle-sexton commentedon Oct 24, 2026
Owner decision (2026-10-24), reconciling two section-set answers. The feature file in the unified feature-map contract keeps
## Partsbeside the 02:19Z set:## Parts,## Sub-features,## Entry points(each driven ornot 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-codeis 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.kyle-sexton commentedon Oct 24, 2026
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(orstatus: needs-decision) and say why in a comment.melodic-automation-lanes commentedon Oct 24, 2026
Not admitted to the issue lane yet: Size large: the split into sub-issues at intake is pending (owner Q93).
melodic-automation-lanes commentedon Oct 24, 2026
The latest triage verdict holds nothing: the issue is at
status: ready.kyle-sexton commentedon Oct 26, 2026
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):
driveskill exists; themapskill and the removal of testing's map-features and refresh-feature-map are tracked and closed under feat(app-control): discover-and-interview setup that generates and maintains a control skill #9507, not here (amends the body's first line).defaultEnabledkey.control-claude-coderefuses an unattended run, whoever calls it.