Repository navigation
Open
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.
Description
Parent
Source: PLAN Phase 9, topic planning-chain-consolidation. Epic: #12646.
Depends on
Outcome
ai-briefing:generate resolve their medium through the shared resolver CLI and print the report line, naming no medium values themselves; their evals match.
Demo: Run ai-briefing:generate 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 ai-briefing plugin's skills and evals finds none; the ai-briefing evals validate with no FAIL; no model evals are run.
Out of scope
- Other plugins
- Vocabulary fixes (vocabulary slice)
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.
Type
Fields
No fields configured for Task.
Activity
melodic-automation-lanes commentedon Nov 3, 2026
The work-resolve-issue run that
agent-readystarted failed or was cancelled before it reported, or it stopped or the token broker refused it because its workflow files differ from main's. work-unblock removed and addedagent-readyback to start a fresh run on main's workflow files. If this run ends the same way, it re-fires the issue again, waiting longer each time.github-actions commentedon Nov 3, 2026