Repository navigation
Closed
Feature
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.
Description
Parent
Source: PLAN Phase 5, topic planning-chain-consolidation. Epic: #12646.
Depends on
- none: on the frontier now
Outcome
The interview picks its surface (terminal, page, shared session) through one surface registry; with surface unset and more than one surface or an optional planner available, it names the default and the alternatives in one line and proceeds. Setting medium never changes the surface.
Demo: Start an interview with surface unset and two surfaces available: one line names the default and the alternatives, then the interview continues.
The Brief (Problem, Goal, Constraints) is in the epic body.
Decisions
- Q15: surface stays separate from medium.
- Q24: Mediums, surfaces and shared-session variants are added by registration.
- Q25: With surface unset, name the default and alternatives in one line and proceed.
- Q53: The shared session is a third surface entry; a variant is a new entry.
- D5: The interview server's own settings file moves to ADR 0075 in a separate issue; resolveSurface reads today's sources unchanged.
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
- AC5: a test sets medium in every scope and the resolved surface does not change (passes at base; kept: the new registry is the change that could break it).
- AC13 (surface part): a test with surface unset and two surfaces available asserts exactly one offer line.
- AC15 (surfaces): adding a surface entry needs no edit to the interview skill.
Out of scope
- Moving the interview server's own settings file onto ADR 0075 (follow-up issue)
- Plugin offers (next 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 Feature.
Activity
kyle-sexton commentedon Nov 3, 2026
Claimed by the planning-chain consolidation session (epic #12646) for an overnight build through merge. Other lanes: please skip this issue.
github-actions commentedon Nov 3, 2026
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 41575767762, the work-resolve-issue run that
agent-readystarted, before it did any work; that run ended at 2026-11-03T04:45:30Z. 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
fix(planning): resolve the surface from today's sources only, per D5