Repository navigation
Closed
Copy link
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.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
Source: PLAN Phase 9, topic planning-chain-consolidation. Epic: #12646.
Depends on
Outcome
architecture:improve and the architecture map skills resolve their medium through the shared resolver CLI and print the report line, naming no medium values themselves; their evals match.
Demo: Run architecture:improve on a sample: it prints the report line; the skill text lists no medium values.
The Brief (Problem, Goal, Constraints) is in the epic body.
Decisions
- Q14: medium moves onto ADR 0075 scopes; ~/.claude/rendered-views.md is no longer read.
- Q17: One fallback chain; every view lane names the medium used and the fact that decided it.
- Q52: AC15 covers every view lane, planning chain first.
Key interfaces
Contracts
resolveMedium(request) -> Resolution
request: lane, argument?, userConfig?, projectRoot?, teamRef?
Resolution: preferred?, medium, decidedBy, notices[]
Rules: the argument decides alone. Each scope's own value is read separately (cascade file reader
and schema check, not resolve()'s merged output; team file optionally from teamRef). terminal/file
from any scope keeps the view local. Else the first publishing value from a trusted scope wins:
personal override (untracked and gitignored only), then userConfig. With no scope deciding, the
plugin default applies (trusted: the installed plugin); "any scope" never includes the plugin default. A team file never publishes; an invalid value is ignored without dropping another
scope's value; auto equals unset. Retired files (~/.claude/rendered-views.md,
.claude/rendered-views*.md) produce notices, never values.
CLI: view-settings resolve --lane <id> --option <user_config.medium> [--argument <m>] [--team-ref <ref>]
MediumEntry { id, publishes, reachable(context) -> {ok, reason}, deliver(view, context) -> {location}, reportName }
SurfaceEntry { id (terminal | page | shared-session; a shared-session variant is a new entry),
available(context) -> {ok, reason}, start(session) -> handle, reportName }
ViewKindEntry { id, parse(record) -> data, template, tier }
Lane registration: { laneId, kinds[], hostedCapable }
Fallback chain (medium registry): artifact, file, terminal; hosted read as artifact unless hostedCapable.
Skills call resolveMedium, render(laneId, kind, record), resolveSurface; they never name a medium,
surface or kind value in their own prose.
Report line: view: <medium> (<decidedBy>), plus one line per notice.
PageInput { kind: lock | unlock | comment, recordId, choiceId?, optionId?, text?, at }
- untrusted data; the session reads only these fields; a lock is written to the record, never approval
- delivery: file via the session bridge; terminal via the conversation; Artifact via a
"Copy choices as prompt" control (existing runtime copy binding) the owner pastes; the page says
live lock needs the local page
- unhandled input is collected at the start of the owner's next message
Redraw binding: a choice names the example blocks it selects; client-only, no network, no storage.
Done when
- AC4 / AC7 / AC15: a git grep for an enumerated medium list in the architecture plugin's skills and evals finds none; the architecture evals validate with no FAIL; no model evals are run.
Out of scope
- Other plugins
- Vocabulary fixes (vocabulary slice)
Metadata
Metadata
Assignees
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.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
Work status
deferred
Activity
melodic-automation-lanes commentedon Nov 3, 2026
This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41576642546, the work-resolve-issue run that
agent-readystarted, before it did any work; that run ended at 2026-11-03T04:44:55Z. work-unblock has now removed and addedagent-readyback to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last addedagent-readyor a run last reported, work-unblock waits longer before each one, up to 24 hours.github-actions commentedon Nov 3, 2026
github-actions commentedon Nov 3, 2026
melodic-automation-lanes commentedon Nov 3, 2026
The work-resolve-issue lane stopped on this issue (
stopped): the run stopped for a reason it gave no code for, which names no intent, design, security or cost finding, so the lane runs it again only if the issue has had no retry, for any stop, since a listed human last added agent-ready, and otherwise stops.It keeps
agent-ready, and work-unblock starts it again (retry 1 of 1).In the run's words:
What the run says it did not do:
Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41581286983
melodic-automation-lanes commentedon Nov 3, 2026
This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41583618977, the work-resolve-issue run that
agent-readystarted, before it did any work; that run ended at 2026-11-03T05:40:29Z. work-unblock has now removed and addedagent-readyback to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last addedagent-readyor a run last reported, work-unblock waits longer before each one, up to 24 hours.15 remaining items
melodic-automation-lanes commentedon Nov 4, 2026
The lanes App's pull request #12991 for this issue was closed without merging. work-unblock removed
status: readyandagent-ready, so the hourly triage sweep sends it back to intake triage, which decides what work is left and admits it again.github-actions commentedon Nov 4, 2026
The triage sweep dispatched intake triage for this issue (dispatch 1; 2 runs that reach intake, or 6 dispatches, hand it to a maintainer).
github-actions commentedon Nov 4, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: change architecture:improve and the architecture map skills so they get their medium from the shared resolver CLI and print the
view: <medium> (<decidedBy>)report line. The skill text and evals should list no medium values. Done when a git grep of the architecture plugin's skills and evals finds no enumerated medium list, and the architecture evals validate with no FAIL.The issue names #12667 as a dependency. It isn't in the open-issue list, so I treated it as done and set no blocker. Nothing else is missing, and I found no duplicates.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Nov 4, 2026
Not admitted to the issue lane yet: open pull request #13027 is for it.