pi-studio 0.9.56 → 0.9.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +28 -7
- package/ROADMAP.md +26 -2
- package/client/studio-client.js +587 -57
- package/client/studio.css +171 -0
- package/index.ts +249 -114
- package/package.json +1 -1
- package/shared/REPL_SESSION_RECORD_PROTOCOL.md +24 -1
- package/shared/repl-control-files.js +158 -0
- package/shared/repl-submission-display.js +227 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,38 @@ All notable changes to `pi-studio` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.58] — 2026-09-03
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Add a scoped REPL-pane **Quick send** composer beneath the Shared REPL Record, with exact raw text, multiline editing, explicit `Cmd/Ctrl+Enter` submission, a compact session-name target that links back to the session controls while retaining full runtime/pane details on hover, exact-tmux-lifetime in-memory drafts, and acknowledgement-aware clearing through the existing shared lease/control-file/record path.
|
|
11
|
+
- Add persisted **Side by side**, **Editor above**, and **Response above** pane layouts with orientation-aware pointer and keyboard resizing.
|
|
12
|
+
- Add opt-in, browser-stored **Follow activity** view switching from Working during main-agent generation to Response Preview on completion, while keeping it off by default and respecting manual view changes.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Add `Cmd/Ctrl+Alt+R` as a mnemonic direct switch to the REPL view, focus its Quick send composer when available, and move manual PDF refresh to `Cmd/Ctrl+Alt+Shift+R`.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Keep Quick send results clean when IPython wraps the private loader command across continuation prompts, including inside the word `globals`.
|
|
19
|
+
|
|
20
|
+
### Acknowledgements
|
|
21
|
+
- Credit [Hal Gumbert / CampSoftware](https://github.com/campsoftware) for the [Pi Studio Activity](https://campsoftware.com/blog/post.php?post=20260507-ai-ollama-pi-studio-activity) experiments that inspired the built-in **Follow activity** option and stacked pane layouts.
|
|
22
|
+
|
|
23
|
+
## [0.9.57] — 2026-09-03
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- Add deterministic raw-pane submission displays and alignment anchors for Studio browser and `studio_repl_send` submissions across Shell, Python/IPython, Julia, R, GHCi, and Clojure.
|
|
27
|
+
- Add a browser-stored **Pane echo** selector with privacy-conscious **Off** default, adaptive **Summary**, and bounded **Full** modes, plus per-tool `echoMode` and `PI_STUDIO_REPL_ECHO_MODE` support.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Keep ordinary panes quiet by default; opt-in Summary now shows short submissions in full, truncates longer ones after 6 lines or 600 source characters, and uses compact begin/completion anchors with a plain unanchored output divider instead of three metadata-heavy marker lines.
|
|
31
|
+
- Strip each request-specific header, source preview, divider, and footer from captured tool output and the Shared REPL Record while retaining the optional display in raw tmux history for human readability and future transcript alignment.
|
|
32
|
+
- Replace long per-request Studio loader paths with compact collision-resistant files under a private per-user `/tmp/pi-rc-<user-key>` root. Source files use mode `0600`; completed files are removed immediately, timeout/abort files remain only until the submission settles, and crash leftovers older than 24 hours are pruned on a later send.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- Send GHCi completion signalling as a separate command so a submitted Haskell runtime error cannot prevent completion capture or leave the cross-client lease waiting until timeout.
|
|
36
|
+
- Persist a final clean-record error through the previously validated exact session identity when a Studio submission's tmux lifetime disappears before output capture, instead of leaving its sidecar entry stuck in `sending`.
|
|
37
|
+
- Strip the new compact loader path from browser-side optimistic capture as well as server capture, and stop later raw transcript refreshes from overwriting an authoritative finalized clean-record entry.
|
|
38
|
+
|
|
7
39
|
## [0.9.56] — 2026-09-02
|
|
8
40
|
|
|
9
41
|
### Added
|
package/README.md
CHANGED
|
@@ -30,16 +30,17 @@ _The video shows an earlier version of the Studio interface. The basic workflow
|
|
|
30
30
|
|
|
31
31
|
## What it does
|
|
32
32
|
|
|
33
|
-
- Opens a two-pane browser workspace: **Editor**
|
|
33
|
+
- Opens a two-pane browser workspace: **Editor** + **Response/Working/Editor Preview/Quarto Preview/Side questions**, side by side by default
|
|
34
|
+
- Lets you choose a persisted pane layout from **View → Workspace**: side by side, Editor above, or Response above; the same divider resizes width or height and either pane can still be focused independently
|
|
34
35
|
- Supports one canonical full Studio view per Pi session, plus additional editor-only companion views when you want extra editing/preview surfaces; editor-only views can also browse files and use the Studio REPL send controls without taking over the full Studio session view
|
|
35
|
-
- Includes a global **Zen** mode that hides the Studio header and secondary chrome without changing the current
|
|
36
|
+
- Includes a global **Zen** mode that hides the Studio header and secondary chrome without changing the current pane layout; the header can also be hidden independently and restored from the top-right edge
|
|
36
37
|
- Runs editor text directly, asks for structured critique (auto/writing/code focus), offers explicit **Show me** actions for a one-turn compact visual or structural explanation of the editor selection/document, displayed response, or current conversation topic, provides a manual **Suggest completion** action for short cursor-aware continuations (`Option/Alt+Tab` where available or `Cmd/Ctrl+Shift+Space` from the editor, `Tab` to insert a visible suggestion) with an optional editor-plus-latest-response context mode, or opens **Quiz me** for a Studio-native active-recall loop over the current editor text, selection, current file, folder, or repo, with optional focus guidance for shaping question selection
|
|
37
38
|
- Adds a right-pane **Side questions** thread for contextual questions that stay outside the main Pi conversation unless explicitly promoted. It can start with the editor selection, the Markdown/LaTeX heading block at the cursor, nearby unstructured text, the whole editor, the displayed response, or no starting text; independently, it can use read-only tools to map, search, and read the document folder, repository, or another chosen folder—including extracted PDF, DOCX, ODT, and EPUB text—and can optionally search the web through Brave Search.
|
|
38
|
-
- Includes a live **Working** view for following current model/tool activity, with `All` / `Thinking` / `Tools` filters, image previews for image-producing tool outputs, plus **Load visible into editor** and **Copy visible** actions; when cycling response history, Working follows saved working details for the selected response when available, and `Cmd/Ctrl+Alt+1–8` switches directly between right-pane views while `Cmd/Ctrl+Alt+P` / `Cmd/Ctrl+Alt+E` / `Cmd/Ctrl+Alt+W` / `Cmd/Ctrl+Alt+F` / `Cmd/Ctrl+Alt+Q` keep quick mnemonic shortcuts for Response Preview, Editor Preview, Working, Files, and Side questions
|
|
39
|
+
- Includes a live **Working** view for following current model/tool activity, with `All` / `Thinking` / `Tools` filters, image previews for image-producing tool outputs, plus **Load visible into editor** and **Copy visible** actions; optional browser-stored **Follow activity** (off by default under **View → Workspace**) switches to Working when the main Pi agent starts generating and to Response Preview when it completes, unless you manually choose another view during that request. When cycling response history, Working follows saved working details for the selected response when available, and `Cmd/Ctrl+Alt+1–8` switches directly between right-pane views while `Cmd/Ctrl+Alt+P` / `Cmd/Ctrl+Alt+E` / `Cmd/Ctrl+Alt+W` / `Cmd/Ctrl+Alt+F` / `Cmd/Ctrl+Alt+R` / `Cmd/Ctrl+Alt+Q` keep quick mnemonic shortcuts for Response Preview, Editor Preview, Working, Files, REPL, and Side questions
|
|
39
40
|
- Includes a right-pane **Changes** view for browsing the current git diff by file, previewing per-file diffs, opening changed files, loading the full diff into the editor, and copying the diff
|
|
40
41
|
- Includes a right-pane **Files** view rooted in folders allowed for the current Studio session, with an **Allow folder…** action and location selector; exact-file grants can still be opened independently without exposing their parent folders. Files supports sorting by name/modified time/size, opening folders or the current root in Finder/the system file manager, loading text/code/CSV/TSV documents into the editor, opening a read-only **Preview (follow)** tab whose disk content is authoritative, previewing PDFs/images, opening previews in new Studio tabs, converting DOCX/ODT documents to editable Markdown when Pandoc is available after confirmation, copying paths, setting the current folder as the Studio working directory, and revealing files in the file manager
|
|
41
42
|
- Imports detached text-file copies either through the browser's file picker or from a path on the computer running Pi, keeping the path option available in embedded and remote browser views; imported copies remain detached until saved or opened as file-backed documents
|
|
42
|
-
- Includes an optional tmux-backed **REPL** view for Shell, Python, IPython, Julia, R, GHCi, and Clojure sessions, with Raw/Literate send modes, `Cmd/Ctrl+Shift+Enter` **Send to REPL**, session start/stop/interrupt controls, a compact refresh-persistent **Shared REPL Record** of compatible-client submissions, a secondary raw tmux mirror, agent-facing `studio_repl_status` / `studio_repl_send` tools, and Markdown/PDF/HTML export
|
|
43
|
+
- Includes an optional tmux-backed **REPL** view for Shell, Python, IPython, Julia, R, GHCi, and Clojure sessions, with a scoped **Quick send** composer (`Cmd/Ctrl+Enter`), Raw/Literate editor send modes, `Cmd/Ctrl+Shift+Enter` **Send to REPL**, session start/stop/interrupt controls, a privacy-conscious Off/Summary/Full pane-echo selector, a compact refresh-persistent **Shared REPL Record** of compatible-client submissions, a secondary raw tmux mirror, agent-facing `studio_repl_status` / `studio_repl_send` tools, and Markdown/PDF/HTML export
|
|
43
44
|
- Includes a local persistent scratchpad for quick notes you want to keep out of the main editor until you're ready to copy or insert them, with a **Recent…** picker for recovering scratchpads saved under earlier file/draft identities
|
|
44
45
|
- Includes a docked **Outline** rail for navigating document structure in the current editor text, with clickable entries that jump in the raw editor and reveal matching preview locations when available
|
|
45
46
|
- Restores each browser tab’s editor workspace after refresh or cmux hidden-surface reconstruction, and provides an explicit **Reset editor** action when you want to discard the restored draft and return the tab to a fresh blank draft without changing responses or saved files
|
|
@@ -92,7 +93,7 @@ _The video shows an earlier version of the Studio interface. The basic workflow
|
|
|
92
93
|
| `studio_export_pdf` | Export direct Markdown/LaTeX, a local file, or the last model response to PDF. Defaults to writing a file without opening a viewer. |
|
|
93
94
|
| `studio_export_html` | Export direct Markdown/LaTeX, a local file, or the last model response to standalone HTML. Defaults to writing a file without opening a viewer. |
|
|
94
95
|
| `studio_repl_status` | Inspect tmux-backed REPL sessions, including shared clean-record identity, compatible-client entries, and raw-mirror details. |
|
|
95
|
-
| `studio_repl_send` | Send code to a visible REPL under the cross-client send lease and add its captured output to the shared clean record. |
|
|
96
|
+
| `studio_repl_send` | Send code to a visible REPL under the cross-client send lease, optionally choose its raw-pane `echoMode`, and add its captured output to the shared clean record. |
|
|
96
97
|
|
|
97
98
|
## Install
|
|
98
99
|
|
|
@@ -118,6 +119,22 @@ Compatible clients publish a versioned opaque record ID in tmux and keep the bou
|
|
|
118
119
|
|
|
119
120
|
The clean record covers only submissions and notes whose boundaries a compatible client knows. Text typed directly into an attached tmux pane remains in the secondary raw pane/history mirror and is not presented as reliably parsed code/output. **Export record** produces a canonical Markdown representation with origin, mode, status, runtime, timestamp, and this limitation; PDF and HTML exports are derived from that Markdown.
|
|
120
121
|
|
|
122
|
+
**Quick send** is a small command composer beneath the Shared REPL Record and above the secondary raw mirror, not a second persistent editor or terminal emulator. Its compact target shows the selected session name and doubles as a link back to the session controls; the hover and accessibility label retain the runtime and exact tmux pane details. Plain Enter adds a line, and `Cmd/Ctrl+Enter` submits the exact text through the same cross-client lease, control-file, and Shared REPL Record path as editor sends. Unsaved drafts stay in browser memory per exact tmux lifetime/runtime, survive session switching, and clear only after Studio acknowledges the submission; rejected text remains available to edit or retry.
|
|
123
|
+
|
|
124
|
+
### Submission display and alignment anchors
|
|
125
|
+
|
|
126
|
+
Optional pane echo places submitted code after a compact begin anchor, followed by a plain `── output ──` divider and a completion anchor. The anchors contain a stable 12-character hash derived from the Shared REPL Record entry ID, so compatible clients can align known sends in future derived transcripts without exposing the entry ID itself. Studio strips the exact header, source preview, divider, and footer from captured tool output and the clean record; they remain visible only in the raw pane/history.
|
|
127
|
+
|
|
128
|
+
The REPL footer selector offers:
|
|
129
|
+
|
|
130
|
+
- **Off** (default): no optional submission display or anchors; the runtime's unavoidable temporary-file control command can still be echoed by the REPL.
|
|
131
|
+
- **Summary**: short submissions in full, truncating after 6 lines or 600 source characters, with compact begin/end anchors and a plain output divider.
|
|
132
|
+
- **Full**: up to 40 lines or 4,000 source characters with the same anchors and divider. Full mode writes source code into persistent raw terminal history, so use it only when that is acceptable.
|
|
133
|
+
|
|
134
|
+
The browser choice is stored locally for that Studio origin. `studio_repl_send` accepts the same per-call `echoMode`; `PI_STUDIO_REPL_ECHO_MODE=off|summary|full` changes the tool-send startup default from Off. Display text escapes terminal, line-separator, and bidirectional control characters. The anchors improve raw-history alignment but do not make direct pane activity without instrumentation authoritative or alter protocol-v1 entries.
|
|
135
|
+
|
|
136
|
+
Runtime wrappers use compact request-unique paths such as `/tmp/pi-rc-<user-key>/<token>.py` rather than a long Studio/session directory tree. The per-user root is current-user-owned mode `0700`, source files are mode `0600`, and files are removed after capture or by the timeout/abort watcher once execution settles. This keeps the unavoidable echoed loader command short without reverting to a collision-prone shared filename.
|
|
137
|
+
|
|
121
138
|
See [`shared/REPL_SESSION_RECORD_PROTOCOL.md`](./shared/REPL_SESSION_RECORD_PROTOCOL.md) for protocol, safety, retention, and compatibility details.
|
|
122
139
|
|
|
123
140
|
## Side questions and research context
|
|
@@ -162,7 +179,7 @@ caption: Optional caption
|
|
|
162
179
|
|
|
163
180
|
`path` must point to a local `.pdf`. Relative paths resolve from the opened document's directory, or from Studio's working directory for non-file-backed content; the resolved file must be inside a location allowed for the current Studio session before it loads. `page` is an initial page hint for the browser PDF viewer, `height` controls the embedded frame height in pixels, and `watch: true` enables auto-refresh after Studio observes the changed file in a stable state. Use normal Markdown links for PDFs when embedding is not useful.
|
|
164
181
|
|
|
165
|
-
To view an existing PDF directly, run `/studio report.pdf` (or `/studio "path with spaces/report.pdf"`). The PDF opens read-only in a focused companion preview, even when the full Studio workspace is already open. A `#page=N` suffix selects the initial page. Auto-refresh is off by default; use `/studio --watch report.pdf` to start with it on, or toggle **Auto-refresh** in the PDF card or focused viewer. Studio checks only while the tab is visible and waits for two matching file-version observations before reloading, which avoids reading a PDF while LaTeX is still writing it. **Cmd/Ctrl+Alt+R** manually refreshes the focused or visible PDF. This is distinct from `/studio-pdf`, which exports Markdown, LaTeX, code, or the last response to a new PDF.
|
|
182
|
+
To view an existing PDF directly, run `/studio report.pdf` (or `/studio "path with spaces/report.pdf"`). The PDF opens read-only in a focused companion preview, even when the full Studio workspace is already open. A `#page=N` suffix selects the initial page. Auto-refresh is off by default; use `/studio --watch report.pdf` to start with it on, or toggle **Auto-refresh** in the PDF card or focused viewer. Studio checks only while the tab is visible and waits for two matching file-version observations before reloading, which avoids reading a PDF while LaTeX is still writing it. **Cmd/Ctrl+Alt+Shift+R** manually refreshes the focused or visible PDF. This is distinct from `/studio-pdf`, which exports Markdown, LaTeX, code, or the last response to a new PDF.
|
|
166
183
|
|
|
167
184
|
For a disk-authoritative text or code preview, run `/studio --watch notes.md` or choose **Preview file (follow changes)** from a local-link menu / **Preview (follow)** in Files. This opens a transient read-only companion tab with the preview pane focused; leaving pane focus reveals the same disk-following text as **Source** with a visible **Read-only · follows disk** badge rather than as an editable buffer. Studio polls the canonical file, debounces change bursts, compares SHA-256 content revisions, accepts ordinary and atomic-replacement saves, and never writes back. Each watcher socket is bound to the exact path in a bounded, expiring server-created tab capability; if that identity expires before a reload or reconnect, the tab stays read-only and asks you to open a fresh watched preview. A missing, unreadable, oversized, binary, or path-replaced source leaves the last good preview visible and automatically recovers when the same canonical file becomes readable again. Render failures likewise retain the last successfully staged document rather than replacing it with partial output. On successful updates, Studio restores a nearby stable content anchor where possible and falls back to the previous scroll ratio.
|
|
168
185
|
|
|
@@ -190,6 +207,10 @@ mmdc --version
|
|
|
190
207
|
|
|
191
208
|
Studio only passes icon-pack arguments when a diagram actually references `lucide:` or `logos:`, so ordinary Mermaid PDF diagrams remain compatible with older CLI versions.
|
|
192
209
|
|
|
210
|
+
## Acknowledgements
|
|
211
|
+
|
|
212
|
+
Thanks to [Hal Gumbert / CampSoftware](https://github.com/campsoftware) for publishing [Pi Studio Activity](https://campsoftware.com/blog/post.php?post=20260507-ai-ollama-pi-studio-activity). Its Working-to-Preview following and vertical-layout experiments inspired Studio's built-in **Follow activity** option and stacked pane layouts; the built-in implementation uses Studio's own lifecycle events and layout system.
|
|
213
|
+
|
|
193
214
|
## Notes
|
|
194
215
|
|
|
195
216
|
- Local-only server (`127.0.0.1`) with tokenized Studio URLs.
|
|
@@ -199,7 +220,7 @@ Studio only passes icon-pack arguments when a diagram actually references `lucid
|
|
|
199
220
|
- Studio is designed as a complement to terminal pi, not a replacement.
|
|
200
221
|
- Installing pi-studio makes the optional `pi-studio-dark` and `pi-studio-light` themes available in pi's theme selector; it does not change your active theme.
|
|
201
222
|
- Editor/code font uses a best-effort terminal-monospace match when the current terminal config exposes it; set `PI_STUDIO_FONT_MONO` to force a specific CSS `font-family` stack. Use `PI_STUDIO_FONT_UI` or `PI_STUDIO_FONT_PROSE` to override the Studio UI or rendered-preview font stacks.
|
|
202
|
-
- The optional REPL view requires `tmux`. Studio can start and stop Studio-owned `pi-studio-repl-*` sessions and can mirror detected `pi-repl-*` sessions, but it will not stop external `pi-repl-*` sessions. Compatible clients synchronize their clean record automatically; direct pane interaction remains available only in the raw mirror. A send timeout or tool abort does not stop submitted runtime code, so Studio keeps that session's cross-client lease until the completion
|
|
223
|
+
- The optional REPL view requires `tmux`. Studio can start and stop Studio-owned `pi-studio-repl-*` sessions and can mirror detected `pi-repl-*` sessions, but it will not stop external `pi-repl-*` sessions. Compatible clients synchronize their clean record automatically; direct pane interaction remains available only in the raw mirror. A send timeout or tool abort does not stop submitted runtime code, so Studio keeps that session's cross-client lease until the runtime completion signal appears or the exact tmux session ends. The visible request-specific completion anchor is separate presentation metadata and stays in raw history when pane echo is enabled.
|
|
203
224
|
- Side-question web search requires `BRAVE_API_KEY`; without it, local and conversation context still work, and the web option is shown as unavailable. Side sub-sessions are deliberately read-only and can run independently while the main Pi agent is busy.
|
|
204
225
|
- Full preview/PDF quality depends on `pandoc` (and `xelatex` for PDF):
|
|
205
226
|
- `brew install pandoc`
|
package/ROADMAP.md
CHANGED
|
@@ -83,6 +83,29 @@ A coordinated interoperability release with `pi-repl` 0.4.0:
|
|
|
83
83
|
|
|
84
84
|
This release does not change Studio's single-buffer architecture or move buffer-first work forward from `0.10.0`.
|
|
85
85
|
|
|
86
|
+
## 0.9.57 — REPL submission display and alignment anchors (shipped 2026-09-03)
|
|
87
|
+
|
|
88
|
+
A coordinated presentation and future-alignment increment with `pi-repl` 0.4.1:
|
|
89
|
+
|
|
90
|
+
- keep optional pane echo Off by default, with an adaptive Summary that shows short submissions in full and a separately bounded Full choice;
|
|
91
|
+
- derive collision-resistant human-readable anchors from immutable clean-record entry IDs without exposing those IDs in the pane;
|
|
92
|
+
- retain compact begin/completion anchors and a plain unanchored output divider in raw tmux history while stripping the exact header, source preview, divider, and footer from captured output and protocol-v1 records;
|
|
93
|
+
- sanitize terminal controls, cap all visible source previews, and warn that Full mode persists bounded source code in raw history;
|
|
94
|
+
- cover Shell, Python/IPython, Julia, R, GHCi, and Clojure consistently across browser and tool sends, including error, timeout, abort, and exact-session-disappearance paths;
|
|
95
|
+
- replace verbose or fixed loader paths in both clients with compact request-unique files in a private per-user control root, retaining files through timed-out/aborted execution and cleaning them when the submission settles;
|
|
96
|
+
- treat markers only as presentation and alignment evidence, never as authority for silently promoting inferred direct activity into the clean record.
|
|
97
|
+
|
|
98
|
+
A separate Derived REPL Transcript can use these anchors later, but it remains outside protocol v1 and outside this release.
|
|
99
|
+
|
|
100
|
+
## 0.9.58 — Workspace and REPL interaction refinements (shipped 2026-09-03)
|
|
101
|
+
|
|
102
|
+
A small interaction increment before the buffer-first architecture:
|
|
103
|
+
|
|
104
|
+
- add a scoped right-pane Quick send composer that keeps exact-session drafts in memory and uses the existing safe Shared REPL Record send path;
|
|
105
|
+
- add persisted side-by-side and vertical pane arrangements, including either Editor or Response above;
|
|
106
|
+
- add opt-in activity following from Working during main-agent generation to Response Preview on completion, disabled by default and cancelled when the user manually changes views;
|
|
107
|
+
- keep Quick send separate from the durable editor, the raw tmux mirror read-only, and protocol-v1 authority unchanged.
|
|
108
|
+
|
|
86
109
|
## 0.10.0 — Buffer-first editing
|
|
87
110
|
|
|
88
111
|
The first architectural `0.10` release should add:
|
|
@@ -94,7 +117,7 @@ The first architectural `0.10` release should add:
|
|
|
94
117
|
- MRU cycling, next/previous, close, and reopen commands;
|
|
95
118
|
- originating buffer ID and revision targeting for asynchronous Pi work.
|
|
96
119
|
|
|
97
|
-
PDFs remain preview documents, and conversation history remains session-global.
|
|
120
|
+
PDFs remain preview documents, and conversation history remains session-global. Arbitrary multi-pane layouts, project trees, and simultaneous per-buffer Pi conversations are outside the initial `0.10.0` scope.
|
|
98
121
|
|
|
99
122
|
## Validation matrix
|
|
100
123
|
|
|
@@ -107,4 +130,5 @@ Cross-environment checks should cover, where relevant:
|
|
|
107
130
|
- paths with spaces, Unicode, traversal attempts, and symlinks;
|
|
108
131
|
- supported and unavailable browser APIs;
|
|
109
132
|
- browser reconstruction, refresh recovery, and clean shutdown;
|
|
110
|
-
- for shared REPL work: bidirectional visibility, compatible-client send contention, output attribution, restart persistence, clear/import behavior, stale or malformed records, and direct attached-pane activity
|
|
133
|
+
- for shared REPL work: bidirectional visibility, compatible-client send contention, output attribution, restart persistence, clear/import behavior, stale or malformed records, and direct attached-pane activity;
|
|
134
|
+
- for REPL submission displays: Summary/Off/Full bounds, raw-versus-clean separation, stable cross-client anchors, compact private collision-resistant control files and cleanup, every supported runtime, runtime errors, timeout/abort lease retention, and exact-session disappearance.
|