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
Thanks for the report. Automated triage handed this issue to a maintainer.
Proposed work class: work-class: structural
Basis: automated intake triage; a maintainer confirms or changes it.
Automated triage. A maintainer reviews it.
kyle-sexton commentedon Oct 21, 2026
Decision recorded. The owner answered in the poteto-review session (2026-10-21, interview round 66, "Yes, go with recommendations."):
defaultEnabledkey, like testing, playwright, debugging and user-experience./app-control:drive captureand/debugging:analyze-profilecan capture, until the debugging slice removes analyze-profile's capture mode. This keeps the first slice Medium, which the lane can build.capture --kind logson request is in the first.Filed and admitted as feat(app-control): add the app-control plugin with /app-control:drive #8816. feat(pr-pipeline): run the project's app-control skill in pr-verify after the deterministic tests #8651 now names feat(app-control): add the app-control plugin with /app-control:drive #8816 as its blocker and calls
/app-control:drive --unattended, judging itsreport.json(D54).