Skip to content

refactor(visualization): resolve the view medium through the shared resolver #12669

Description

@kyle-sexton

Parent

Source: PLAN Phase 9, topic planning-chain-consolidation. Epic: #12646.

Depends on

Outcome

visualization:visualize and visualization:present resolve their medium through the shared resolver CLI and print the report line, naming no medium values themselves; their evals match.

Demo: Run visualization:visualize 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 visualization plugin's skills and evals finds none; the visualization evals validate with no FAIL; no model evals are run.

Out of scope

  • Other plugins
  • Vocabulary fixes (vocabulary slice)

Activity

  1. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 3, 2026
  2. added theissue type on Nov 3, 2026
  3. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41576429802, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-03T04:44:19Z. work-unblock has now removed and added agent-ready back 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 added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  4. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 3, 2026
  5. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  6. self-assigned this
    on Nov 3, 2026
  7. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  8. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    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:

    Dependency #12667 is unmet: the shared medium resolver CLI (view-settings resolve --lane ... --option ...) that this issue's skills must call is not on the default branch at 76a7d9f, and #12667 is still open with no linked or referencing pull request. Moving visualization:visualize and visualization:present onto that CLI and dropping their medium lists cannot be done until it ships; building the resolver here would be #12667's work and its primary design. Run this issue again once #12667 merges.

    What the run says it did not do:

    • The AC4/AC7/AC15 change to visualization:visualize, visualization:present and their evals was not started: it depends on the resolver CLI from #12667, which has not shipped.
    • Tidy, review, verify and checks steps were not run: there is no change to tidy, review or verify.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41581276225

  9. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 3, 2026
  10. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41583098412, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-03T05:40:08Z. work-unblock has now removed and added agent-ready back 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 added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  11. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 3, 2026
  12. 18 remaining items

  13. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  14. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41723630420, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-03T23:34:56Z. work-unblock has now removed and added agent-ready back 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 added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  15. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
  16. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  17. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue run that agent-ready started waited in its slot past a change to its lane workflow files on main, so it stopped before any model turn. The run's report-outcome removed and added agent-ready back 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.

  18. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
  19. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41755957655, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-04T01:49:55Z. work-unblock has now removed and added agent-ready back 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 added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  20. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
  21. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  22. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  23. removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions