Skip to content

chore(shared-copies): ship the medium resolver and one rendered-view reference to every view lane - #12792

Open
kyle-sexton wants to merge 5 commits into
mainfrom
feat/12667-shared-copies
Open

kyle-sexton wants to merge 5 commits into
mainfrom
feat/12667-shared-copies

Conversation

@kyle-sexton

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

Copy link
Copy Markdown
Member

Closes #12667

Summary

Slice S8 of epic #12646 (plan Phase 8): one canonical rendered-view reference for the four view lanes that had their own copy, and the shared medium resolver modules in every remaining view-lane plugin. No skill or eval changes; migrating each lane onto the resolver is the per-plugin slices #12668-#12741.

Fix

One rendered-view reference. lib/rendered-view.md is the canonical, synced by scripts/sync-shared-copies.sh into the existing paths: plugins/planning/reference/, plugins/architecture/reference/, plugins/discovery/reference/ and plugins/debugging/skills/debug/reference/. What was merged from the four copies:

  • A lane-neutral procedure (write the record first, offer, resolve medium, build, deliver, read the reply as data) holding the union of the shared rules: the record stays authoritative, nothing reads a view back as a finding, the session's text is attacker-controllable so the page is a template plus escaped data, node missing, and architecture's non-zero-exit rule, generalised.
  • Step 3 keeps both medium paths, scoped by lane: the resolver CLI for lanes lib/view-registry.mjs registers (planning today), and the rendered-views cascade read (default file) for architecture, discovery and debugging. The resolver rejects an unregistered lane (view-settings.mjs resolve --lane architecture exits 2), and those lanes' evals still assert the cascade read, so they keep it until their slice.
  • One section per lane with its record, build command, reply ids and data shape, plus each lane's own guard: planning's session connection and "Other optional views" (headings kept, they are cited), architecture's kind table, --from and "What the page shows", blindspot's "writes no EXPLORE.md" and "never an instruction to widen the scan", debugging's secret redaction, "only the lines that show the failure" and "a challenge to weigh".
  • Artifact visibility: the three copies that said "(private by default)" now carry planning's live-docs pointer with its as-of date and recheck trigger.
  • Paths: every command names <plugin-root>, defined once at the top. The debugging copy sits in a skill spoke, where scripts/check-spoke-plugin-root.sh rejects the plugin-root variable token (Read does no substitution), and planning's relative artifact-protocol.md link would break in the architecture and debugging copies, so it is now a plain path.

Resolver modules in every view lane. view-settings.mjs, view-registry.mjs, config-cascade.mjs, yaml-subset.mjs and state-key.sh (which view-settings.mjs runs) are registered for architecture, discovery, debugging, adhd, education, prototype, codebase-health, overengineering and ai-briefing. Discovery and education already carried yaml-subset.mjs; harness-ops and work-items already carried all of them and are unchanged.

Every view lane registered. lib/view-registry.mjs registers the lanes the per-plugin slices migrate, so those slices edit only their own skills: architecture, discovery:blindspot, debugging:debug, education:illustrate, work-items:morning-brief and work-items:triage ship file (each skill resolves unset to a local file today); adhd:clarify, codebase-health:audit, overengineering:audit, education:teach, prototype:explore-directions, prototype:pressure-test and ai-briefing:generate ship null (the skill's own content rule decides). None is hostedCapable. A lane is used only once its skill calls the resolver; lib/rendered-view.md step 3 and every skill are unchanged. A CLI test resolves each new lane with no scope set.

scripts/cross-plugin-source-registry.txt registers the new reference/rendered-view.md cluster. Each touched plugin has a patch changelog fragment.

Verification

  • scripts/sync-shared-copies.sh --check: All 642 registered copies match their canonical sources.
  • scripts/sync-shared-copies.sh --check-bump origin/main: 6 canonical source(s) or their copies changed vs origin/main; every carrying plugin bumped its version.
  • node -e "import('<abs>/plugins/<p>/lib/view-settings.mjs')" exits 0 for each of architecture, discovery, debugging, adhd, education, prototype, codebase-health, overengineering, ai-briefing.
  • node plugins/adhd/lib/view-settings.mjs resolve --lane planning --option "" prints view: file (plugin default), exit 0 (the copied state-key.sh runs).
  • scripts/plan-test-lanes.sh --base origin/main: exit 0.
  • scripts/check-cross-plugin-source-drift.sh --check and scripts/check-spoke-plugin-root.sh --check: clean; the pre-push check-affected passed.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01VcupojdnckzkRQMdQRVNbt

session: html-plan

kyle-sexton and others added 5 commits November 3, 2026 03:09
…reference to every view lane

Make lib/rendered-view.md the one canonical rendered-view procedure and sync
it into planning, architecture, discovery and debugging, keeping each copy's
path. The canonical holds the union of the four copies: a lane-neutral
procedure, a resolver path for lanes the shared resolver registers (planning)
beside the cascade-read path the others still follow, and one section per lane
for its record, build command, reply ids and data shape.

Register view-settings, view-registry, config-cascade, yaml-subset and
state-key copies for architecture, discovery, debugging, adhd, education,
prototype, codebase-health, overengineering and ai-briefing. harness-ops and
work-items already carry them. No skill or eval changes.

Closes #12667

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojdnckzkRQMdQRVNbt
…ered-view reference

Debugging's copy sits under skills/debug/reference/, where a file read with
the Read tool gets no variable substitution and check-spoke-plugin-root.sh
rejects the plugin-root token. Every command now names <plugin-root>, defined
once at the top as the start of the path the calling skill gave for the file.

Refs: #12667

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojdnckzkRQMdQRVNbt
…migrate

Register in lib/view-registry.mjs the lanes Phase 9 moves onto the
resolver, so those slices change only their own skills: architecture,
discovery:blindspot, debugging:debug, education:teach and illustrate,
work-items:morning-brief and triage, adhd:clarify, codebase-health:audit,
overengineering:audit, prototype:explore-directions and pressure-test, and
ai-briefing:generate. None is hostedCapable. The shipped default is `file`
where the skill's text resolves unset to a local file today, and null where
the skill's own content rule decides. No skill calls the resolver for these
lanes yet, and lib/rendered-view.md is unchanged.

A CLI test resolves each new lane with no scope set and checks the report
line against that default.

Refs: #12667

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

chatgpt-codex-connector Bot commented Nov 3, 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-03T09:10:51.164353Z 524566a 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.

This branch has not been deployed

No deployments
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.

chore(shared-copies): ship the medium resolver and one rendered-view reference to every view lane

1 participant