Repository navigation
feat: route lessons to /app-control:map refresh or /corrections:codify - #10072
Conversation
Map create and refresh place a lesson by scope: one feature goes in that feature's Gotchas, every feature in a new optional hub Gotchas section, and any other lesson is reported for /corrections:codify. Refresh takes a feature id to narrow the pass. /verification:confirm lists lessons in its report and names both routes in its Next. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…resh skip A lesson handed to refresh after a clean pass at the same HEAD was dropped at step 2; a feature id now also narrows the live pass explicitly. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e's width Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…udget The added refresh <feature> alternative took it to 110; --dir now shows <path>, as the Actions table already does. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ow step 5 with it A feature id now finds features/<id>/README.md, else the legacy flat features/<id>.md, per the contract's id resolution; the hub's Live pass step names the one-feature narrowing the Actions row already states. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stop hub matching GitHub From a fresh-context test-value review: the every-feature regex's bare `hub` matched "GitHub", so a reply copying the lesson into each feature passed; the one-feature regex passed a right path in the wrong section. Each gets a fail sample of that shape. The not-a-feature judge now fails any destination other than /corrections:codify, which is what the skill specifies. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ting Security: a handed-in lesson is data, accepted only from the invocation, placed only when this pass shows it, and never carries a secret value; a refresh feature id must pass the slug rule and never reaches a shell. Code: create reports its lessons; a feature id on a skill due a conversion is blocked; a path is told from an id; the source wave checks the hub's Gotchas; confirm's Next takes the rule's bullet shape and routes every-feature lessons to the control skill's path. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed No security issues in the incremental change (since de19fce). The change only touches prose and an argument hint. It adds an optional I checked whether the new argument opens a path for untrusted text. None of the three changed files is a trusted path or a plugin manifest. The critical-findings: 0 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8a6cc0463e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-review reviewed Incremental review of cb7f4a7 against de19fce: no findings. The change makes confirm's map route carry the lesson text: What I checked by reading the files. I ran no commands or tests.
Spend: none. This is a docs-only change to skill text, with no billed resources and no added lane runs. |
Lane-Activity: pr-unblock/resolve-conflicts
One must-pass and one must-fail sample per llm grader, each fail a wrong answer that still names the right files. Opus agrees on 6 of 6 runs for each grader (calibrate-judge.py score: PASS). Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oftware/claude-code-plugins into feat/9584-lesson-routing
…rol skills Drive now also finds plugin-shipped control skills; refresh edits only the repository's, so its feature-id lookup says so. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kill holds From the stand-in review of the late delta: the zero-match case had no outcome, and the Actions row now names the repository-only limit. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… route Confirm now prints /app-control:map refresh <feature> "<lesson>", the same shape as its codify route, and map's argument-hint shows the quoted lesson slot, which its Lessons rule already accepts from the invocation. Refs: #9584 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #9584
Summary
A run's lessons now have one writer per concept.
/app-control:mapcreate and refresh place a lesson by scope: one feature goes in that feature's## Gotchas, every feature in a new optional hub## Gotchas, and anything else is written nowhere in the control skill and is reported for/corrections:codify./verification:confirmlists the lessons in its report and routes them in its## Next. It edits no control skill and names no instruction-placement or write-for-agents skill.Fix
mapgains a## Lessonssection. In refresh, a placed lesson counts as doc drift and ships in the upkeep pull request.refresh <feature>narrows the source wave and live pass to one feature. It resolves the id the way drive does (features/<id>/README.md, else the legacyfeatures/<id>.md), runs past askipline, and records no clean pass./app-control:map refresh <feature> "<lesson>", the same shape as its codify route. Map's argument-hint shows the quoted["<lesson>"]slot (D31, Q1).reference/control-skill.md) adds the optional## Gotchasrow. Confirm's report template adds a Lessons table.--dir <path>to stay inside the 100-character budget.hubno longer matches "GitHub", and the feature-file regex is tied to the Gotchas section. Each regex gets a fail sample of the wrong shape. Changelog fragments: app-control minor, verification minor.Verification
grep -n '/corrections:codify'matches in bothplugins/verification/skills/confirm/SKILL.mdandplugins/app-control/skills/map/SKILL.md. Confirm names no instruction-placement or write-for-agents skill (that grep exits 1).scripts/check-affected.sh --tests: 12 passed, 2 skipped.--scaffold --keep-temp, one--caseper command. Before means origin/main 2640984 (the new cases copied in). After means 8a6cc04, the head scored after the ready-review fixes. The later commits add only the judge samples, a main merge, and a clause that keeps refresh's feature id to the repository's control skills. Scores are with / without the plugin.--allow-tools Bash)The confirm case matches the plan's recorded baseline (0.833 / 0.167). The noise report reads "n too small to call" for each single-case comparison. Judge votes were unanimous in every run. Each llm grader has a must-pass and a must-fail sample, and the opus judge agrees with them on 6 of 6 runs per grader (
calibrate-judge.py score: PASS). The one-feature case already passed on main, because main's refresh treats a stale gotcha as doc drift.Known gaps: a lesson that is a step (dismiss a banner) still goes to the hub's Gotchas, not
shared/(D31, Q2: the plan's rule stands). No eval covers a refresh feature id that only a plugin's control skill holds.Left out: confirm's skill-creator
evals.jsonentrylessons-01(not a plugin-eval case), and a live drive against a real app.Related
/app-control:mapis the map's only writer).🤖 Generated with Claude Code