T-H3RG-publish-as-secondary-view
State: planning/proposed · Impact: medium · Complexity: medium
The note page’s full publish detail — state and dry-run preview — lives behind a
primary stage tab (“Publish results”) that replaces the editor instead of sitting
beside it. This task moves that detail into one secondary-pane view,
ApPublishView.vue, so the editor stays on screen while a reader checks or acts on
publish state — the placement half of render-publish-status-desktop.md’s tracking
work; the data half stays there.
| Location | Role today |
|---|---|
solutions/determined/experiences/agent-pants/app/pages/apps/agent-pants/notes/[...path].vue#stage | UTabs v-model="stage" switches the whole column between the MdSurface editor and a full ApPublishStatusPanel + ApPublishPreviewPanel pair; no Install action exists on this page for any kind |
solutions/determined/experiences/agent-pants/app/components/ApPublishStatusPanel.vue | Reads a real destination root’s state (current/stale/conflict/unknown) once a root is typed; used only inside the results stage tab |
solutions/determined/experiences/agent-pants/app/components/ApPublishPreviewPanel.vue | The dry-run preview; a layout="compact" mode is used in the aux pane today, a full mode in the results tab |
solutions/determined/experiences/agent-pants/app/components/ApInstallModal.vue | Install-with-preview dialog, already scoped by an optional path prop; used from plugins/[...path].vue and index.vue, not from the note page |
solutions/determined/experiences/agent-pants/app/utils/publishVerdict.ts | The one verdict/label logic both preview panels share |
solutions/agent-pants/docs/vault/tasks/render-publish-status-desktop.md | Names ApPublishPreviewPanel.vue and ApInstallModal.vue as the callers to change once the real status query is wired in; tracks the data half, not placement |
Proposed
Section titled “Proposed”ApPublishView.vue renders in the secondary pane for every publishable note (skill,
command, agent, plugin — PUBLISHABLE_KINDS) and shows real publish state, the
dry-run preview, and — for the first time on this page — an Install action that opens
the existing ApInstallModal.vue. notes/[...path].vue drops its stage UTabs; the
editor is the whole column, and the aux pane’s compact Publish section is replaced by
the full ApPublishView.vue. A plugin note is a container, so its ApPublishView.vue
also links to the existing marketplace-wide Build flow (there is no per-plugin build);
a marketplace note stays non-publishable and keeps its “no per-destination layout”
message.
Approach
Section titled “Approach”- Extract
ApPublishView.vuefrom the currentresultsstage tab markup: status panel, preview panel (its existing full, non-compact mode), and an Install button that opensApInstallModal.vuescoped to the open note’s path. - In
notes/[...path].vue, delete thestageref,stageTabs, theUTabs, and the conditionalresultsbranch; theMdSurfaceeditor renders unconditionally. Replace the aux “Publish”ApPanel(today’s compact preview only) withApPublishView.vue. - For a plugin note (
data.kind === 'plugin'), add a “Build…” link inApPublishView.vueto the existing marketplace build flow (ApBuildPanel.vue/build.vue) — open decision: link to the standalone/apps/agent-pants/buildroute, or openApBuildPanel.vueinline; resolve by checking how much vertical room the secondary pane leaves once the editor owns the main column. - Update the Playwright authoring spec: assert the editor is on screen with no
stagetab strip, and that the secondary Publish section offers Install for a skill/command/agent/plugin note.
| Area | Note |
|---|---|
solutions/determined/experiences/agent-pants/app/components/ApPublishView.vue | Secondary-pane publish state, preview and Install/Build actions |
solutions/determined/experiences/agent-pants/app/pages/apps/agent-pants/notes/[...path].vue | Remove the stage UTabs; mount ApPublishView.vue in the aux pane |
solutions/determined/products/agent-pants/tests/e2e/authoring.e2e.ts | Assert the editor is on screen with no stage tab strip, and Install works from the secondary view |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
notes/[...path].vueno longer renders astageUTabs; the editor is visible unconditionally. - AC-2: The secondary pane shows
ApPublishView.vuefor a skill, command, agent or plugin note, and the “no per-destination layout” message for a marketplace note. - AC-3: Install is reachable from the secondary pane on a skill/command/agent/plugin note, where today it does not exist on this page at all.
- AC-4: A plugin note’s secondary pane links to the marketplace build flow.
- AC-5: The Playwright
authoringproject passes with the updated assertions.
Out of scope
Section titled “Out of scope”plugins/[...path].vue’s ownMembers/Installprimary tabs — a similar primary-vs-secondary question, left for a follow-up now thatApPublishView.vueexists to reuse.- The Home page’s vault-wide “Installed on disk” tab and
ApBuildPanelBuild tab (index.vue) — a different, vault-wide operation, not a single note’s publish view. - The real publish-status data model (five-state tracking against a chosen
destination) — that is
render-publish-status-desktop.md’s open work, read but not done here.
Dependencies
Section titled “Dependencies”- T-GHE3-edit-form-in-center-pane moves
SkillFieldsFormout of theauxregion into the center pane, freeing the secondary pane this task’sApPublishView.vuefills. - T-RR9V-tabs-carry-entity-icons-and-views gives the secondary pane a way to follow
the active tab, so
ApPublishView.vueshows the open note’s publish state rather than a stale one.
Discovery context
Section titled “Discovery context”From the user’s planning request of 2026-09-07: “publish status and controls are a
secondary view, not a primary tab.” Tracked as the placement half of
solutions/agent-pants/docs/vault/tasks/render-publish-status-desktop.md, which
covers calling the desktop’s real publish-status query instead of the dry-run
heuristic currently on screen.
Depends on
Section titled “Depends on”T-GHE3-edit-form-in-center-pane, T-RR9V-tabs-carry-entity-icons-and-views