Repository navigation
feat(app-control): add the drive affected action and --trusted-root #11384
Copy link
Copy link
Closed
Copy link
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Description
Parent
Refs #8651. Evidence-verification plan: Brief and acceptance criteria at #11364 (comment); Design and Plan comments are on #11364.
Depends on
- none
Outcome
/app-control:drive affected maps a diff to the features of the app's control skill, and --trusted-root limits control-skill discovery to a trusted checkout, proven by the script's tests and drive's evals.
Demo: run the script's test file; the glob-semantics and trusted-root cases pass.
Plan (phase S1)
Satisfies: AC3, AC4
Size Medium. Depends on: none. Plugin: app-control. Design: Module layout (app-control), Contracts C1, --trusted-root.
- Identify consumers first: grep
sourcesindex parsing inplugins/testing,plugins/verification,plugins/app-controland record the parse paths. - Add
plugins/app-control/scripts/affected_features.py(+.test.sh, same shape asverify_pin.test.sh): reads a hub index andgit diff --name-only <base>...<head>, writesaffected.json. plugins/app-control/skills/drive/SKILL.md:affectedrow in Actions;--trusted-rootin "Find the control skill" steps 1-2; argument-hint.drive/reference/evidence.md:affected.jsonandtrusted_root.- Update
plugins/app-control/reference/control-skill.md:49-50:sourcesresolve against the project directory, or, for a plugin control skill, against the repository under verification; glob syntax fixed in the script (**crosses/,*does not), notfnmatch. A control skill present that matched nothing reportscontrol skill present, <n> files unmatched. - Evals in
drive/evals/evals.json: project skill match, plugin skill match (repo-root globs), no control skill → empty with note, PR-checkout control skill ignored under--trusted-root. - Blast radius: LOW-MEDIUM (additive action; drive's existing actions unchanged).
- Sanity Check:
bash plugins/app-control/scripts/affected_features.test.shexits 0 with casesplugins/*/SKILL.mdnot matchingplugins/a/b/SKILL.mdandplugins/**/xmatching nested paths;grep -n "affected" plugins/app-control/skills/drive/SKILL.mdshows the Actions row;/skill-quality:check drivePASS. - Run budget: at most 2 runs per new eval case; stop on the first usage-limit error.
Design excerpt
- app-control (owns finding and driving apps): drive gains
affected(diff → features, backed
byscripts/affected_features.py),--trusted-root <dir>, the mask post-check, the publishable
list and redactedreport.public.{json,md}; the control-skill contract (reference/control-skill.md)
gains## Maskand the<changed files>placeholder. Knows nothing about Claude Code.
components:
schemas:
AffectedJson: # C1, written by /app-control:drive affected
type: object
required: [app, control_skill, source, base, head, features, unmatched_files]
properties:
app: {type: string}
control_skill: {type: [string, "null"]} # full name + source, as report.json
source: {enum: [project, plugin, none]}
trusted_root: {type: [string, "null"]}
base: {type: string}
head: {type: string}
features:
type: array
items:
type: object
required: [id, title, entry_points, matched_files]
properties:
id: {type: string} # features/<id>/README.md
title: {type: string}
entry_points:
type: array
items: {type: object, properties: {text: {type: string}, driven: {type: boolean}, reason: {type: [string, "null"]}}}
matched_files: {type: array, items: {type: string}}
unmatched_files: {type: array, items: {type: string}}
note: {type: [string, "null"]} # e.g. "No control skill: nothing matched"/app-control:drive affected [<app>] --base <ref> [--head <ref>] [--out <dir>] [--unattended] [--trusted-root <dir>]
— discovery as bare drive (plugins/app-control/skills/drive/SKILL.md:40-100); launches nothing; emptyfeatureswhen
nothing matches or no control skill. Glob root: the repository under verification, for project
and plugin control skills alike.--trusted-root <dir>on every drive action: control skills only from<dir>and plugins loaded
from under it (a PR head cannot supply its own control skill, masks or driver).
Acceptance criteria
Brief criteria this slice satisfies:
- AC3: Diff-to-feature matching lives only in app-control; confirm and run-e2e call it instead of parsing control skills.
- AC4: With the app's control skill not installed, drive falls back to the generic recipe and the report says so; nothing errors.
Done when:
- Sanity Check passes:
bash plugins/app-control/scripts/affected_features.test.shexits 0 with casesplugins/*/SKILL.mdnot matchingplugins/a/b/SKILL.mdandplugins/**/xmatching nested paths;grep -n "affected" plugins/app-control/skills/drive/SKILL.mdshows the Actions row;/skill-quality:check drivePASS. - Evals in
drive/evals/evals.jsoncover: project skill match, plugin skill match (repo-root globs), no control skill (empty with note), PR-checkout control skill ignored under--trusted-root - The plugin's version and CHANGELOG are bumped per the repository's release convention
-
ci-statusis green on the PR head
🤖 Generated with Claude Code
Metadata
Metadata
Assignees
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Type
Fields
No fields configured for Feature.
Activity
github-actions commentedon Oct 30, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: add a
drive affectedaction to app-control that maps a git diff to control-skill features (viaaffected_features.pyand its test script), plus a--trusted-rootoption that limits control-skill discovery to a trusted checkout. The issue also covers the SKILL.md and reference doc updates, the four evals, the version and CHANGELOG bump, and a greenci-status.The scope and done-when items are exact, so nothing is missing. The open issues on making
confirmandrun-e2econsumeaffectedare downstream consumers of this work, not duplicates.Automated triage, applied by the lanes App.
github-actions commentedon Oct 30, 2026
github-actions commentedon Oct 30, 2026