Skip to content

refactor(architecture): resolve the view medium through the shared resolver - #13027

Merged
kyle-sexton merged 18 commits into
mainfrom
fix/12991-replacement
Nov 4, 2026
Merged

kyle-sexton merged 18 commits into
mainfrom
fix/12991-replacement

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

Closes #12672
Replaces #12991

Summary

The nine architecture map-* skills and the improve deepening report resolve their medium through the shared resolver (lib/view-settings.mjs resolve --lane architecture --option ${user_config.medium}) and print its report line. The skills and evals name no medium list. This carries the lanes App's #12991 forward on current main, with its three review threads addressed.

The issue's done-when greps only the architecture plugin's skills and evals, which this change covers in full, so it closes #12672.

Fix

Everything from #12991 (its body lists each file): the new medium userConfig option, the shared lib/rendered-view.md resolver-lane text and its four regenerated copies, the nine map-* SKILL.md and eval edits, improve SKILL.md, actions/deepening.md and eval case 15, the rendered-views contract entry, and the changelog fragments. On top of it:

  • .changes/architecture/...-6568f049.md: bump: major, with the retired files under ### Removed, as planning 1.0.0 and visualization 1.0.0 did for the same move. The text now matches the resolver since fix(lib): keep a retired rendered-views file's local medium local #12980 (lib/view-settings.mjs:7-11): a terminal or file value in a retired rendered-views file still keeps the view local when no scope sets a value; only an artifact or hosted value there is ignored. That is why the bump is major: a retired file's artifact used to publish the map-* views and now gives a local file. (The thread's own example, a user-global medium: terminal, still resolves to terminal through the retired-file rule, lib/view-settings.mjs:278-279.) It names the Claude Code v2.1.271 floor that the option's options list raises.
  • plugins/architecture/skills/improve/evals/evals.json case 15: the expected notice is the retired-file notice naming the file's value and where to set it, not "no longer read". With the option at terminal, userConfig decides (lib/view-settings.mjs:276-277) and the file's notice reads "is retired but still keeps the view local" (lib/view-settings.mjs:215).

Client version floor: declaring options on a userConfig field means "users on Claude Code versions before v2.1.271 can't load the plugin" (Limit a field to fixed options). This is the first options field in the architecture plugin.

Verification

Related

🤖 Generated with Claude Code

melodic-automation-lanes Bot and others added 6 commits November 3, 2026 23:21
Lane-Activity: work-resolve-issue/resolve-issue
Lane-Activity: pr-unblock/resolve-conflicts
…edium resolver move

The architecture fragment is now bump: major, with the retired
rendered-views files under Removed, as planning and visualization did.
Its wording and the improve eval case 15 match the shared resolver
since #12980: a terminal or file value in a retired file still keeps
the view local when no scope sets one, and only a publishing value is
ignored. The fragment names the Claude Code v2.1.271 floor that the
new medium option's options list raises.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MWmASPDSoP4Ps23JPiGyZV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 4, 2026 01:26
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-04T01:27:37.349020Z ee680d2 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 17f4260173a8ab006c8d815cba495604652a5ad3: read 34 of 34 changed file(s); 0 finding(s), 0 as inline comments.

Security review: PR #13027 (full diff, head 17f42601)

No security issues found.

critical-findings: 0

What I read

  • I read every hunk of 31 files. The full list has 34; the other three are plugins/debugging/…, plugins/discovery/… and plugins/planning/reference/rendered-view.md.
    • Per identical.txt, those three are copies of plugins/architecture/reference/rendered-view.md. They are plain reference docs, not hooks, workflows, settings or manifests, so each one does the same thing as the original.
  • No changed file matches a TRUSTED PATHS glob.
  • One file is new since the last clean round: scripts/view-medium-list-exemptions.txt. It drops the architecture row, which shrinks an exemption list, so it tightens a check rather than loosening one.
  • The round cap applied (past the cap: yes), so I would have dropped any SUGGESTION findings. There were none.

Manifest

  • manifest userConfig.medium: pass, advisory. The value picks where a view goes: auto, terminal, file, artifact or hosted.
  • The view-medium selector exception applies. I checked each condition at this head:
    • The value goes to the plugin's own lib/view-settings.mjs.
    • The diff does not change view-settings.mjs, the modules it imports from ./ (config-cascade.mjs and view-registry.mjs, L32-L33), or view-settings.test.mjs.
    • lib/view-settings.test.mjs#L92 holds the block "a publishing value counts only from a trusted scope".
  • Because the key passes as a selector, I did not post or count the earlier resolved manifest userConfig: flag threads on plugin.json L9-17 again.

Instruction surface

  • improve/actions/deepening.md no longer reads the rendered-views layers itself. The removed text included the rule that the overlay counts only when it is untracked and ignored by git.
  • That control still exists: the shared resolver enforces it now, and it also ignores publishing values from team files and retired files. The deepening report also stays a local file at every medium (lib/rendered-view.md#L245-L256).
  • I did not open the protected-class register. I judged the removed text by what would break without it, and nothing does.

Trust controls: the diff touches no token, trusted-actor, kill-switch or merge-hold code.

No text in the PR description or the settled threads tries to steer this review.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on ee680d26c439fea43ab654e78cea04b73b2c879b; the summary is in this lane's pull request comment.

claude-lane: claude-review

Comment thread lib/rendered-view.md Resolved
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 17f4260173a8ab006c8d815cba495604652a5ad3: read 34 of 34 changed file(s); 0 finding(s), 0 as inline comments.

Code review (full, 17f42601)

Scope. I read every hunk of 31 of the 34 changed files. identical.txt lists three files whose change matches plugins/architecture/reference/rendered-view.md:

  • plugins/debugging/reference/rendered-view.md
  • plugins/discovery/reference/rendered-view.md
  • plugins/planning/reference/rendered-view.md

I read the first one and counted the other three as copies. Each copy is a reference doc that its own plugin's skills read, so being at a different path doesn't change what the text does. Since the last round, one file is new to the scope: scripts/view-medium-list-exemptions.txt.

No findings this round.

What I checked

  • Last round's cross-file finding is resolved. That finding said nothing would catch a medium list coming back into the architecture plugin's skills.
    • The PR now deletes the architecture row from scripts/view-medium-list-exemptions.txt. That turns on the existing gate, scripts/check-view-medium-lists.mjs, for the architecture lane (registered at lib/view-registry.mjs:53).
    • The gate fails on any *.md line, or any evals.json string, under plugins/architecture/ that names two backticked medium ids.
    • It also fails on an exemption row whose lane no longer lists media. So deleting the row is required, and the gate would fail if the row were added back for no reason.
    • I grepped plugins/architecture at this head for two backticked medium ids on one line. The only hits are in files the gate skips: the registered shared copy reference/rendered-view.md and CHANGELOG.md. So I'd expect the gate to pass. I didn't run it; that is my own inference from the grep.
  • Closing issue refactor(architecture): resolve the view medium through the shared resolver #12672, done-when. The criterion reads: "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."
    • The text meets it: the nine map-* SKILL.md files, improve/SKILL.md, actions/deepening.md and their evals name only the resolver.
    • The gate above would now fail if the list came back.
    • "Evals validate with no FAIL" is the author's claim (check-evals-quality.sh). I didn't verify it.
  • Step 3 of lib/rendered-view.md.
    • architecture and debugging share one resolver bullet. It covers a missing node and the exit-2 usage case, so the earlier thread on this point is still addressed.
    • Each lane's section names its own --lane (architecture at L209, debugging:debug at L291).
  • "The deepening report" section.
    • --medium auto is treated as no argument (lib/view-settings.mjs:301). Any other unknown value exits 2, which the section handles.
    • hosted is read as artifact for this lane, which is not hosted-capable, and artifact writes the local report. This matches the contract README, which moves architecture:improve out of the "no medium option" list.
  • Path-scoped rules.
    • skill-bodies-state-current-rules.md: the SKILL.md edits restate no volatile upstream detail.
    • eval-case-transcripts.md: the eval edits are synthetic fixtures, not transcripts.
    • cost-claims.md: the changed text makes no cost claim.

Manifest (plugins/architecture/.claude-plugin/plugin.json)

  • manifest userConfig.medium (new field, default auto): pass. Every map-* SKILL.md and improve/SKILL.md reads ${user_config.medium}, and auto falls back to the lane default file, a local file. The settled threads on these lines record a record-only flag, and those lines haven't changed since.
  • manifest userConfig.medium options: pass. The PR body and the architecture changelog fragment both name the Claude Code v2.1.271 floor.
  • manifest version: pass. The repository releases from changelog fragments.
    • The architecture fragment is bump: major. That fits: an artifact value in a retired rendered-views file used to publish the views and now gives a local file.
    • The debugging, discovery and planning fragments are bump: patch, for reference-text changes only.
  • manifest description/keywords: pass. The diff adds no capability they would need to name and removes none they name.

Embedded text

The PR context, settled-threads and prior-findings files hold no directive aimed at this lane.

…edium

The architecture bullet in lib/rendered-view.md covered a missing node but not
the resolver's exit 2 for an --argument it does not know
(lib/view-settings.mjs:302), which prints no JSON line. Give it the rule the
deepening-report section already uses, and regenerate the copies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MWmASPDSoP4Ps23JPiGyZV
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 4, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Nov 4, 2026
kyle-sexton and others added 2 commits November 3, 2026 21:11
# Conflicts:
#	plugins/architecture/.claude-plugin/plugin.json
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-security-review: 1 inline finding(s) on 33e8dd677a96c6fa994828bf5916e393c07f350d; the summary is in this lane's pull request comment.

claude-lane: claude-security-review

Lane-Activity: pr-unblock/resolve-conflicts

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-security-review: 1 inline finding(s) on 9dd94060328759b1e07babda8ed70f71a685a1ba; the summary is in this lane's pull request comment.

claude-lane: claude-security-review

Lane-Activity: pr-unblock/resolve-conflicts

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-security-review: 1 inline finding(s) on 612522fb21fb6e9c9529818183142d90841d862f; the summary is in this lane's pull request comment.

claude-lane: claude-security-review

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

A lane run on this pull request's head failed because the token broker refused it as workflow-modified: .github/workflows/pr-unblock.yml changed on main after the run's event, and a rerun keeps the old file. pr-merge pushes an empty commit so the next pr-unblock run uses main's files. It does this once per version of that file, so if a run fails the same way again, a person looks at it. The push starts no run itself: the conflict-resolution run starts at the next push to main or half-hourly pr-unblock-dispatch tick, or when a listed person runs it by hand, and an address-feedback run can start after both review lanes review the new head, if an unresolved thread is left for it.

The token broker refused a lane run on the previous head as workflow-modified (.github/workflows/pr-unblock.yml). This commit changes no file.
Lane-Activity: pr-unblock/resolve-conflicts
@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

The pr-unblock lane stopped resolve-conflicts on this pull request: the lane has resolved conflicts on this branch as many times in a row as its cap allows. The lane sets no label: the run ends in a failing pr-unblock/conflict status on the head the lane gated.

When a retry on this head can change the outcome, the lane runs one on its own, up to its per-head cap, and edits this comment if it stops again; a run that does not stop clears the status. When no retry can (a review thread the lane does not take or settle, or a failing check after the retries are spent), a person resolves the threads or gets the checks green, then dispatches the workflow below: that run finds the cause gone and clears the status. On a pull request the lanes App opened, the dispatchers start that run once per stop; on any other, a person does. A new commit to the branch starts clean.

To run it again on this head now, dispatch the pr-unblock workflow:

gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=13027 -f activity=resolve-conflicts

kyle-sexton and others added 2 commits November 4, 2026 00:51
Resolve plugins/architecture/.claude-plugin/plugin.json: keep main's
release version 1.4.8 (#13082) and this branch's medium userConfig
option. architecture is in changelog-fragment mode, so the branch takes
no version of its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lane-Activity: pr-unblock/resolve-conflicts
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 4, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 4, 2026
@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

The unattended merge path enqueued this pull request at head 6c4c2c62ae5f48564f9c0753dba8e1b296fc20cf.

@melodic-automation-lanes
melodic-automation-lanes Bot added this pull request to the merge queue Nov 4, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 4, 2026
kyle-sexton and others added 3 commits November 4, 2026 01:46
…mptions

This slice removes the architecture lane's medium lists, so the exemption
row #13106 added for it is stale and the check fails it in the merge
group ("lists no media any more; delete the row").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	plugins/architecture/.claude-plugin/plugin.json
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit 4c0b4eb Nov 4, 2026
40 checks passed
@kyle-sexton
kyle-sexton deleted the fix/12991-replacement branch November 4, 2026 07:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(architecture): resolve the view medium through the shared resolver

1 participant