Last updated: 2026-04-03
PARITY.md is the file consumed by rust/scripts/run_mock_parity_diff.py.main.main HEAD: ee31e00 (stub implementations replaced with real AskUserQuestion + RemoteTrigger).main / 293 across all branches, 9 crates, 48,599 tracked Rust LOC, 2,568 test LOC, 3 authors, date range 2026-03-31 → 2026-04-03./v1/messages requests in rust/crates/rusty-claude-cli/tests/mock_parity_harness.rs.rust/crates/mock-anthropic-service)rust/crates/rusty-claude-cli/tests/mock_parity_harness.rs)streaming_text, read_file_roundtrip, grep_chunk_assembly, write_file_allowed, write_file_deniedmulti_tool_turn_roundtripbash_stdout_roundtripbash_permission_prompt_approved, bash_permission_prompt_deniedplugin_tool_roundtriprust/scripts/run_mock_parity_diff.pyCanonical scenario map: rust/mock_parity_scenarios.json
| Lane | Status | Feature commit | Merge commit | Evidence |
|---|---|---|---|---|
| 1. Bash validation | merged | 36dac6c |
1cfd78a |
jobdori/bash-validation-submodules, rust/crates/runtime/src/bash_validation.rs (+1004 on main) |
| 2. CI fix | merged | 89104eb |
f1969ce |
rust/crates/runtime/src/sandbox.rs (+22/-1) |
| 3. File-tool | merged | 284163b |
a98f2b6 |
rust/crates/runtime/src/file_ops.rs (+195/-1) |
| 4. TaskRegistry | merged | 5ea138e |
21a1e1d |
rust/crates/runtime/src/task_registry.rs (+336) |
| 5. Task wiring | merged | e8692e4 |
d994be6 |
rust/crates/tools/src/lib.rs (+79/-35) |
| 6. Team+Cron | merged | c486ca6 |
49653fe |
rust/crates/runtime/src/team_cron_registry.rs, rust/crates/tools/src/lib.rs (+441/-37) |
| 7. MCP lifecycle | merged | 730667f |
cc0f92e |
rust/crates/runtime/src/mcp_tool_bridge.rs, rust/crates/tools/src/lib.rs (+491/-24) |
| 8. LSP client | merged | 2d66503 |
d7f0dc6 |
rust/crates/runtime/src/lsp_client.rs, rust/crates/tools/src/lib.rs (+461/-9) |
| 9. Permission enforcement | merged | 66283f4 |
336f820 |
rust/crates/runtime/src/permission_enforcer.rs, rust/crates/tools/src/lib.rs (+357) |
main.36dac6c — feat: add bash validation submodules — readOnlyValidation, destructiveCommandWarning, modeValidation, sedValidation, pathValidation, commandSemanticsrust/crates/runtime/src/bash_validation.rs and a runtime::lib export (+1005 across 2 files).rust/crates/runtime/src/bash.rs is still the active on-main implementation at 283 LOC, with timeout/background/sandbox execution. PermissionEnforcer::check_bash() adds read-only gating on main, but the dedicated validation module is not landed.main, this statement is still materially true.readOnlyValidation, destructiveCommandWarning, modeValidation, sedValidation, pathValidation, and commandSemantics.main.89104eb — fix(sandbox): probe unshare capability instead of binary existencef1969ce — Merge jobdori/fix-ci-sandbox: probe unshare capability for CI fixrust/crates/runtime/src/sandbox.rs is 385 LOC and now resolves sandbox support from actual unshare capability and container signals instead of assuming support from binary presence alone..github/workflows/rust-ci.yml runs cargo fmt --all --check and cargo test -p rusty-claude-cli; this lane removed a CI-specific sandbox assumption from runtime behavior.main.284163b — feat(file_ops): add edge-case guards — binary detection, size limits, workspace boundary, symlink escapea98f2b6 — Merge jobdori/file-tool-edge-cases: binary detection, size limits, workspace boundary guardsrust/crates/runtime/src/file_ops.rs is 744 LOC and now includes MAX_READ_SIZE, MAX_WRITE_SIZE, NUL-byte binary detection, and canonical workspace-boundary validation.read_file_roundtrip, grep_chunk_assembly, write_file_allowed, and write_file_denied are in the manifest and exercised by the clean-env harness.read_file_roundtrip checks read-path execution and final synthesis.grep_chunk_assembly checks chunked grep tool output handling.write_file_allowed and write_file_denied validate both write success and permission denial.main.5ea138e — feat(runtime): add TaskRegistry — in-memory task lifecycle management21a1e1d — Merge jobdori/task-runtime: TaskRegistry in-memory lifecycle managementrust/crates/runtime/src/task_registry.rs is 335 LOC and provides create, get, list, stop, update, output, append_output, set_status, and assign_team over a thread-safe in-memory registry.main.e8692e4 — feat(tools): wire TaskRegistry into task tool dispatchd994be6 — Merge jobdori/task-registry-wiring: real TaskRegistry backing for all 6 task toolsrust/crates/tools/src/lib.rs dispatches TaskCreate, TaskGet, TaskList, TaskStop, TaskUpdate, and TaskOutput through execute_tool() and concrete run_task_* handlers.main via global_task_registry().main.c486ca6 — feat(runtime+tools): TeamRegistry and CronRegistry — replace team/cron stubs49653fe — Merge jobdori/team-cron-runtime: TeamRegistry + CronRegistry wired into tool dispatchrust/crates/runtime/src/team_cron_registry.rs is 363 LOC and adds thread-safe TeamRegistry and CronRegistry; rust/crates/tools/src/lib.rs wires TeamCreate, TeamDelete, CronCreate, CronDelete, and CronList into those registries.main; they still stop short of a real background scheduler or worker fleet.main.730667f — feat(runtime+tools): McpToolRegistry — MCP lifecycle bridge for tool surfacecc0f92e — Merge jobdori/mcp-lifecycle: McpToolRegistry lifecycle bridge for all MCP toolsrust/crates/runtime/src/mcp_tool_bridge.rs is 406 LOC and tracks server connection status, resource listing, resource reads, tool listing, tool dispatch acknowledgements, auth state, and disconnects.rust/crates/tools/src/lib.rs routes ListMcpResources, ReadMcpResource, McpAuth, and MCP into global_mcp_registry() handlers.main; end-to-end MCP connection population and broader transport/runtime depth still depend on the wider MCP runtime (mcp_stdio.rs, mcp_client.rs, mcp.rs).main.2d66503 — feat(runtime+tools): LspRegistry — LSP client dispatch for tool surfaced7f0dc6 — Merge jobdori/lsp-client: LspRegistry dispatch for all LSP tool actionsrust/crates/runtime/src/lsp_client.rs is 438 LOC and models diagnostics, hover, definition, references, completion, symbols, and formatting across a stateful registry.LSP tool schema in rust/crates/tools/src/lib.rs currently enumerates symbols, references, diagnostics, definition, and hover, then routes requests through registry.dispatch(action, path, line, character, query).main.66283f4 — feat(runtime+tools): PermissionEnforcer — permission mode enforcement layer336f820 — Merge jobdori/permission-enforcement: PermissionEnforcer with workspace + bash enforcementrust/crates/runtime/src/permission_enforcer.rs is 340 LOC and adds tool gating, file write boundary checks, and bash read-only heuristics on top of rust/crates/runtime/src/permissions.rs.rust/crates/tools/src/lib.rs exposes enforce_permission_check() and carries per-tool required_permission values in tool specs.write_file_denied, bash_permission_prompt_approved, and bash_permission_prompt_denied.PermissionEnforcer::check() delegates to PermissionPolicy::authorize() and returns structured allow/deny results.check_file_write() enforces workspace boundaries and read-only denial; check_bash() denies mutating commands in read-only mode and blocks prompt-mode bash without confirmation.mainmvp_tool_specs() in rust/crates/tools/src/lib.rs exposes 40 tool specs.bash, read_file, write_file, edit_file, glob_search, and grep_search.mvp_tool_specs() include WebFetch, WebSearch, TodoWrite, Skill, Agent, ToolSearch, NotebookEdit, Sleep, SendUserMessage, Config, EnterPlanMode, ExitPlanMode, StructuredOutput, REPL, and PowerShell.Task*, Team*, Cron*, LSP, and MCP tools with registry-backed handlers on main.Brief is handled as an execution alias in execute_tool(), but it is not a separately exposed tool spec in mvp_tool_specs().AskUserQuestion still returns a pending response payload rather than real interactive UI wiring.RemoteTrigger remains a stub response.TestingPermission remains test-only.execute_tool(), but several remain registry-backed approximations rather than full external-runtime integrations.36dac6c is merged.../ escapes)ConfigLoader::discover() loads user → project → local, and loads_and_merges_claude_code_config_files_by_precedence() verifies the merge order./plugin slash handling in rust/crates/commands/src/lib.rs delegates to PluginManager::{install, enable, disable, uninstall} in rust/crates/plugins/src/lib.rs.#[ignore] tests hiding failures — grep over rust/**/*.rs found 0 ignored tests.mainmainPARITY.md maintained and honestmain (bash-validation is still branch-only)#[ignore] tests hiding failures