Repository navigation
Conversation
…ot carry Two text blocks reached the host with no separator, and a lone surrogate failed at send time as an internal error. Adjacent text blocks now have a blank line between them, while a text block next to a resource keeps the single newline it had. NUL and unpaired surrogates are refused with a protocol error naming the prompt.
_launchable inferred a bundled shim from the command containing {PYTHON},
which CONTEXT.md retires. BUNDLED_SHIM_PRESETS now decides which rows get
Raven's interpreter; a command that happens to spell the placeholder no
longer qualifies.
A Mirasim row declares sessionMcp false because the host takes no per-session servers. It was told to set sessionMcp true "once it isolates", which that host cannot do. The note now names the host and its limit.
A catalog listing own:sonnet beside sonnet lost the colliding copy silently. The collision is now logged as a warning naming the id.
The integration test let _unconfigured_acp_preset_rows probe whatever Mirasim reported installed on the machine. It is stubbed to nothing, as the unit tests already do.
The English and Chinese pages listed only presets.py and acp_registry_presets.py; the Mirasim rows live in mirasim_presets.py.
The pick held for a preset survived the add that wrote the row, so a later disconnect showed a stale model. It is cleared once the connect lands, and an add no longer sends a model the row's menu has dropped.
The picker row sized only > img where the other three mark slots size > img, > svg. A new gate keeps the two shapes in step.
gloryfromca
left a comment
There was a problem hiding this comment.
No blockers; this can merge as far as I am concerned.
I reviewed the full github/main...HEAD diff and the surrounding callers and history for prompt conversion, Mirasim catalog routing, preset expansion, MCP withholding, startup backfill, and the web family picker. I also checked AGENTS.md/CLAUDE.md, CONTEXT-MAP.md and the relevant ACP/Web UI architecture context, backward compatibility, and that the added tests exercise the changed behavior rather than weakening existing assertions.
Verification run on this revision:
uv run pytest tests/test_acp_mirasim_input.py tests/test_acp_mirasim_catalog.py tests/test_subagent_mirasim.py tests/test_subagent_acp_mcp_lifecycle.py -q -n 0: 104 passed.uv run pytest tests/integration/test_research_subagent_smoke.py -m integration -k statefulness -q -n 0: 1 passed, 1 deselected.npm test -- --run src/features/extAgents/store.test.ts scripts/gates/ext-agents-mark-css.test.mjs: 2 files / 21 tests passed.- Source-language and large-file gates over
github/main..HEAD: passed. uv run pytest tests/test_living_docs.py -q -n 0: 2 passed.
The initial Python attempt failed before collection because the fresh worktree environment lacked the declared everos-memory dev extra; after uv sync --frozen --extra dev --dev, the unchanged test command passed as reported above. make itself is unavailable on this runner, so I invoked the two gate scripts with their Makefile-equivalent uv commands.
Windows compatibility reviewReviewed Findings (Windows): none. This is display, prompt-validation, and preset-gating work; I found no platform-specific change to paths, process creation, encoding, or packaging that misbehaves on Windows. Checks
Verification (native Windows; detached worktrees
Coverage gaps
|
|
Not a blocker (head Severity of this one finding, not a verdict on the pull request. Any blocking findings from this pass are review threads on the changed files; GitHub renders those collapsed, as a file name with no text.
Checked on the merged tree:
|
|
No blockers; suggestions only, and they are marked inline. I agree with both wording mismatches in comment 6529142737: the preset comment still names isolation after this change gives Mirasim its host-specific reason, and the catalog test docstring says the literal entry wins while the assertion correctly keeps the contested spelling out of the menu. They are nonblocking documentation/test-description issues, so the code remains mergeable; they move my whole-record stance from clean to nonblocking. Focused verification remains behavioral: |
|
Not a blocker - a correction to my note above (6529142737). It does not change the result. Severity of this one finding, not a verdict on the pull request. Any blocking findings from this pass are review threads on the changed files; GitHub renders those collapsed, as a file name with no text. I wrote that the 11 environment reds in
What does stand: all 11 fail the same way on main |
Summary
Closes #994, the thirteen nits the review of #971 left behind. Nine
apply to the tree today and are fixed here; one is already enforced on
main; three name code the Mirasim host rewrite removed.Fixed:
line between them, the way Raven's own ACP server joins them, while a
text block beside a resource keeps the single newline it had. A prompt
carrying a NUL or an unpaired surrogate is refused with a protocol
error naming the prompt, instead of failing while the frame is sent.
_launchablereadsBUNDLED_SHIM_PRESETSinstead of inferring a bundled shim from
{PYTHON}in the command.per-session servers, rather than to set
sessionMcptrue "once itisolates".
mirasim_presets.py._unconfigured_acp_preset_rows, so it cannot handshake a real Mirasiminstalled on the machine.
lands, and an add no longer sends a model the row's menu has dropped.
> imgand
> svgmarks.reported as a warning instead of dropped silently.
Item 5 is already enforced on
main:test_a_rows_budgets_cover_the_adapters_own_slowest_answerspinsreadyTimeoutMsand the adapter's own limits.No longer applicable: items 2, 3 and 4 referred to
uicli.py(stagedarguments, a temporary directory, a
version()subprocess), which theMirasim host rewrite removed. Prompts now travel over JSON-RPC.
Type
Verification
uv run --no-sync pytest tests/test_acp_mirasim_input.pytests/test_acp_mirasim_catalog.pytests/test_subagent_mirasim.pytests/test_subagent_acp_mcp_lifecycle.py -q -n 0: 102 passed, 2skipped.
uv run --no-sync pytest tests/test_acp_mirasim_server.py -q -n 0with
-k "not test_a_turn_stopped_from_the_app_ends_cancelled": 111passed, 3 failed, 1 deselected. The same command at
origin/maingives 110 passed and 4 failed, the 3 head failures a subset of the
base's set; the deselected test hangs at the base too. Both are this
Windows host, not the changes.
tests/test_subagent_third_party.pyandtests/test_rpc_subagents.py: 447 passed and 15 failed; the sortedfailing ids are identical at
origin/main.tests/test_acp_mirasim_host.py,store.py,stream.py,interactions.py: 30, 9, 31 and 18 passed (3 Unix-socket skips).tests/integration/test_research_subagent_smoke.py -m integrationwith
-k statefulness: 1 passed.tests/test_living_docs.py: 2 passed.Mutation pass, one construct at a time, each reverted piece failing
its test: the blank-line join, the surrogate refusal, the declared
preset expansion, the Mirasim MCP branch, the catalogue warning, the
ui-web pick clearing, the ui-web menu guard, and the CSS svg rule.
Every file was restored and compared byte for byte.
ui-web, in
ui-web/:npm test263 files / 4520 passed; lint 0errors (4 pre-existing warnings);
npx tsc --noEmit -p tsconfig.json;npm run build;python ui-web/build.py;check-page.mjs,check-css.mjs,check-class-namespace.mjs.Repository gates: commitlint for each commit,
check_commit_messages.py,check_source_language.py,check_large_files.py, andpre-commit runover the branch: allpass.
ruff check,ruff format --check;tyreports only the twoexisting
url2pathnamedeprecation warnings inserver.py.Not run: the full Python suite; CI runs on the pull request.
Relevant tests pass locally
Relevant lint / type checks pass locally
User-facing docs or screenshots are updated when needed
Risk
Prompt text: a multi-block ACP client now sees a blank line between
text blocks; a text block beside a resource is unchanged. NUL and
unpaired surrogates are refused, and neither is legitimate prompt
text.
Preset expansion: every shipped preset behaves as before. Only a
non-bundled preset whose command spells
{PYTHON}would stop beingexpanded, and none exists.
ui-web: a picked model is dropped after a successful connect, when the
row holds it, and a stale pick is not sent; that add runs the agent's
default instead of being refused.
CSS: an svg mark in the family picker is now 19px; no current preset
ships one.
Security impact considered: none; no path or credential handling
changes.
Backward compatibility considered: the prompt separator is the only
wire-visible change.
Rollback path: revert the branch.
Security impact considered
Backward compatibility considered
Rollback path is clear for risky changes
Related Issues
Closes #994