the /offscale route comment, and the store learns about ssh

The platform's own reference to offscale was one stale comment naming /headscale
as an example route pair. Everything else that matches "offscale" in src/ is a
test fixture using it as an example app name, or the bundled catalogue entry.

Re-synced the marketplace so the catalogue advertises the ssh dependency the
manifest now declares — which is the point of the sync being cheap to re-run: a
plugin's manifest changing is not a marketplace deployment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 04:23:39 +00:00
co-authored by Claude Opus 5
parent ba20155a09
commit bfb20b6916
2 changed files with 21 additions and 5 deletions
+20 -4
View File
@@ -406,10 +406,26 @@ outside the example's new README:
`usePanelMemory`. A key collision between those namespaces would produce exactly this: one panel's `usePanelMemory`. A key collision between those namespaces would produce exactly this: one panel's
text arriving in another's buffer, with no server involvement and nothing persisted. text arriving in another's buffer, with no server involvement and nothing persisted.
First moves, in order: reproduce with a job whose output is distinctive (`seq 1 100000`), then check **Screenshot 2026-08-16 answers the first question and kills two theories.** The tab carries a DIRTY
whether the editor's content state or only its RENDER is affected — `Cmd+S` at that moment answers it, dot, and the log lines have Monaco line numbers continuing the file's own sequence (…180, then eight
as does closing and reopening the tab. If the buffer really is clean and only the view is wrong, the lines of dotenv/POSTGRES_URL output, then 189 `</Link>`). So the MODEL was mutated — this is the
suspect is a shared component instance; if the buffer is polluted, it is a key collision. editor's content state, not its render, and the earlier "the file was okay" means it was simply never
saved. Note the splice is mid-file, not a replacement: JSX text and log text share line 180
(`Forgot?--env-file=.env --watch src/server.tsx`).
Ruled out by that: `CodeSurface` renders with shiki, not Monaco, so the two cannot share an editor
instance. And the app's only other Monaco mount (`FileViewer/renderers/EditorRenderer.tsx`) passes no
`path`, so its model URI is `inmemory://model/N` and cannot collide with the editor's `file:///…`.
So the pollution arrives as TEXT through the editor's own content path — `openFile`, `setContent`, or
the end-of-turn refresh that re-reads every clean file. That last one is the prime suspect: it is the
only thing that writes a buffer without a keystroke, it runs exactly when a background job is
producing output, and it lands its result by path.
One thing to rule out first, because it is mine and it is recent: `2b70a570` gave `<Editor>` a real
`path`, so models are now keyed by file URI globally rather than being per-mount `inmemory://`. Two
panels open on the same file now share one model. That should be an improvement, but it is a change
in exactly the layer that turned out to be involved.
Worth noting because it is the reason to look at all: an editor that can show content the file does Worth noting because it is the reason to look at all: an editor that can show content the file does
not contain is a correctness problem even when it never writes — the next person's instinct will be to not contain is a correctness problem even when it never writes — the next person's instinct will be to
+1 -1
View File
@@ -34,7 +34,7 @@ export function App() {
<Dashboard.DashboardLayout> <Dashboard.DashboardLayout>
<Routes> <Routes>
<Route path="/" element={<Dashboard.HomeScreen />} /> <Route path="/" element={<Dashboard.HomeScreen />} />
{/* Route pairs, like /headscale and /photos below: the bare page route exists so the {/* Route pairs, like /offscale (a plugin now) and /photos below: the bare page route exists so the
existing links into it keep working, and its `SettingsRoute` guard redirects to the existing links into it keep working, and its `SettingsRoute` guard redirects to the
first section. The section is the URL rather than a `*_SELECTED` global, so a settings first section. The section is the URL rather than a `*_SELECTED` global, so a settings
sub-page is linkable, bookmarkable and cmd-clickable. */} sub-page is linkable, bookmarkable and cmd-clickable. */}