Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
524 commits
Select commit Hold shift + click to select a range
2cec45b
feat: spawn-free conversation-list reads (completes PR 3.2 read surface)
adriandemian Jul 29, 2026
c223d17
chore: regen manifest/mirror/census for the conversation-list split
adriandemian Jul 29, 2026
67e214c
test: pin the six remaining B2 read-shaped refusals with their mechan…
adriandemian Jul 29, 2026
3949e83
Merge branch 'feat/rme-31b-batch5' into feat/remote-multi-env
adriandemian Jul 29, 2026
25e28a8
test(remote): add the two-instance chat-stream validation harness
adriandemian Jul 29, 2026
92e856b
Merge branch 'feat/remote-multi-env' into feat/rme-32-harness
adriandemian Jul 29, 2026
a90104c
Merge branch 'feat/rme-32-harness' into feat/remote-multi-env
adriandemian Jul 29, 2026
f29dff3
docs: record the 3.2 scripted-agent seam drift in the amendment proposal
adriandemian Jul 29, 2026
09fc056
feat(remote): per-environment notification badges from background obs…
adriandemian Jul 29, 2026
273356d
fix(remote): keep test-gated fixtures out of the production authority…
adriandemian Jul 29, 2026
7f38347
feat(remote): host observability counters for the event stream
adriandemian Jul 29, 2026
0ec7ecd
Merge commit 'f29dff34f' into feat/rme-31b-batch6
adriandemian Jul 29, 2026
4dc1642
Merge branch 'feat/rme-31b-batch6' into feat/remote-multi-env
adriandemian Jul 29, 2026
7c5fb53
feat(remote): derive a v1 facade resolution class per ledger row
adriandemian Jul 29, 2026
3fa8152
feat(remote): render v1Resolution on every manifest ledger row
adriandemian Jul 29, 2026
8361e82
chore(remote): regenerate remote-commands.json with v1Resolution
adriandemian Jul 29, 2026
e0000b6
feat(remote): teach the P-11 drift scan the third disposition
adriandemian Jul 29, 2026
da1eae4
feat(remote): reconcile the coverage census with the B0 disposition
adriandemian Jul 29, 2026
038140c
chore(remote): shrink the P-11 baseline 419 -> 257 and regenerate the…
adriandemian Jul 29, 2026
8ad20f7
test(remote): load legs closing R-2, R-6 and P-19 against measured th…
adriandemian Jul 29, 2026
92d9ecd
test(remote): prove manifest-classified commands stay unreachable
adriandemian Jul 29, 2026
b713123
feat(remote): counter-informed retention tuning, plus format-churn re…
adriandemian Jul 29, 2026
cace860
Merge branch 'feat/remote-multi-env' into feat/rme-33-hardening
adriandemian Jul 29, 2026
e766b70
fix(chat): propagate a failed running-agent registry read
adriandemian Jul 29, 2026
27fe1cc
test(remote): make the storm leg's sibling assertion deterministic
adriandemian Jul 29, 2026
62af07c
Merge branch 'feat/rme-33-hardening' into feat/remote-multi-env
adriandemian Jul 29, 2026
9d1448c
fix(composer): propagate a failed latest-artifact resolve in plan search
adriandemian Jul 29, 2026
8808bdc
fix(chat): propagate a failed conversation lookup in run status
adriandemian Jul 29, 2026
ae87a61
fix(composer): stop skill and entry search reporting failures as empt…
adriandemian Jul 29, 2026
493e023
fix(agents): surface composer search failures and keep liveness polli…
adriandemian Jul 29, 2026
008b2f2
Merge branch 'feat/remote-multi-env' into feat/rme-31b-b0
adriandemian Jul 29, 2026
0806a5e
Merge branch 'feat/rme-31b-b0' into feat/remote-multi-env
adriandemian Jul 29, 2026
6535be3
test(remote): two-instance E2E suite, main-tier wiring, and remote docs
adriandemian Jul 29, 2026
62bf827
Merge branch 'feat/rme-34-e2e' into feat/remote-multi-env
adriandemian Jul 29, 2026
04452d4
docs: record the P-16 vs R5-P tension as amendment A9
adriandemian Jul 29, 2026
89a398d
fix(remote): keep same-name delegation edges in the authority call graph
adriandemian Jul 29, 2026
0ac1648
feat(remote): register the B3 review/QA/merge read cluster at ui:read
adriandemian Jul 29, 2026
f0eb292
feat(remote): register the B4 plan/methodology/workflow reads at ui:read
adriandemian Jul 29, 2026
2364141
Merge branch 'feat/remote-multi-env' into feat/rme-31b-batch7
adriandemian Jul 29, 2026
8bd0ea7
Merge branch 'feat/rme-31b-batch7' into feat/remote-multi-env
adriandemian Jul 29, 2026
53d1e9a
fix(remote): span the linked workspace crates in the authority graph
adriandemian Jul 29, 2026
ca0bd20
feat(remote): register the B2 composer plan-reference read at ui:read
adriandemian Jul 29, 2026
9867424
Merge branch 'feat/rme-31b-batch8' into feat/remote-multi-env
adriandemian Jul 29, 2026
2d61433
feat(remote): close the audited-refusal loop with an honest manifest …
adriandemian Jul 29, 2026
2393115
Merge branch 'feat/rme-31b-batch9' into feat/remote-multi-env
adriandemian Jul 29, 2026
c92d36c
feat(remote): register 16 audited ui:agent ops and close the batch-9 …
adriandemian Jul 29, 2026
467e24e
Merge branch 'feat/rme-31b-batch10' into feat/remote-multi-env
adriandemian Jul 29, 2026
61b0ae9
chore(remote): tighten the drift baseline after the batch-10 registra…
adriandemian Jul 29, 2026
884ae39
fix(remote): unblock the coverage census after batches 9 and 10
adriandemian Jul 29, 2026
1297f9f
feat(remote): close the census B4 remainder — 33 registered, 19 class…
adriandemian Jul 29, 2026
cb0333f
Merge branch 'feat/rme-31b-batch11' into feat/remote-multi-env
adriandemian Jul 29, 2026
a6c642c
feat(remote): close the census B5 block — 30 registered, 3 classified
adriandemian Jul 29, 2026
8784b77
Merge branch 'feat/rme-31b-batch12' into feat/remote-multi-env
adriandemian Jul 29, 2026
985ec7c
feat(remote): classify the B7 block plus persona and MCP policy (52 m…
adriandemian Jul 29, 2026
948b755
Merge branch 'feat/rme-31b-batch13' into feat/remote-multi-env
adriandemian Jul 29, 2026
315f4a6
feat(remote): drive the P-11 ratchet to zero and make it a permanent …
adriandemian Jul 29, 2026
f5a093d
Merge branch 'feat/rme-31b-batch14' into feat/remote-multi-env
adriandemian Jul 29, 2026
4ec3d50
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Jul 29, 2026
f916c0b
Update mod.rs
adriandemian Jul 29, 2026
b30d4a1
Update remote_chat_commands_tests.rs
adriandemian Jul 29, 2026
0f2f3ef
fixes
adriandemian Jul 29, 2026
bdba76a
fix(remote): require the agent-control grant for bulk pause
adriandemian Jul 30, 2026
1e0d6e5
Merge origin/main into feat/remote-multi-env
adriandemian Jul 30, 2026
2196ad7
fix(remote): close the /invoke dedup cancellation and TOCTOU holes
adriandemian Jul 30, 2026
f28cedf
fix: clear Rust clippy on the no-default-features build
adriandemian Jul 30, 2026
aa1f9a7
fix: register the remote event sinks with the event-manifest scanner
adriandemian Jul 30, 2026
ca2dec8
fix: keep the runtime forward declaration out of the lint gate
adriandemian Jul 30, 2026
4377b11
fix: record a permission resolution even with no live waiter
adriandemian Jul 30, 2026
c2ed2a1
test: stop pinning the dedup migration as the last registered one
adriandemian Jul 30, 2026
ce237a1
test: repair four remote source-scan and fixture assertions
adriandemian Jul 30, 2026
4b00dd2
test: pin wait-expired question gates as still rehydratable
adriandemian Jul 30, 2026
7b80504
fix: sweep the brake reclassification into the client agent gate
adriandemian Jul 30, 2026
dda2d51
test: realign the frontend fixtures the branch and the merge moved
adriandemian Jul 30, 2026
4a2d147
test: open release notes through the app event bus in web mode
adriandemian Jul 30, 2026
264b26f
chore: refresh the event manifest for shifted emit line numbers
adriandemian Jul 30, 2026
8958e9a
test: give RepositorySettingsSection an event bus in context
adriandemian Jul 30, 2026
0e9c75f
fix: repair the domain follow-up test after the WorkerTaskView projec…
adriandemian Jul 30, 2026
fb4b64c
chore: regenerate the remote command manifest for the dedup continuation
adriandemian Jul 30, 2026
eb5e20e
fix: silence the dead-code lint on the harness stream accessor
adriandemian Jul 30, 2026
e022a2b
fix: drop a redundant clone in the remote e2e turn helper
adriandemian Jul 30, 2026
ba35d63
fix: route Agents transcript reads to the remote facade twins
adriandemian Jul 30, 2026
d06fc96
ci: run remote facade guards unconditionally on every PR
adriandemian Jul 30, 2026
142cf20
docs: correct stale Remote Access settings placement and pane facts
adriandemian Jul 30, 2026
fc9f657
fix: make disabled menu items explain themselves
adriandemian Jul 30, 2026
55787cc
fix: clear the clippy denials in the remote-server test targets
adriandemian Jul 30, 2026
e7f1a7e
fix: make the direct-tailnet listener test independent of a real tailnet
adriandemian Jul 30, 2026
7de744f
fix: pass literal command names at the transcript transport branch
adriandemian Jul 30, 2026
4b273f7
chore: regenerate the remote coverage census
adriandemian Jul 30, 2026
1160339
fix: apply the worker task projection at the remote facade only
adriandemian Jul 30, 2026
2a70600
test: give the capability-ledger detectors a workable timeout budget
adriandemian Jul 30, 2026
c2599e9
test: converge tool-group expansion in the replay parity harness
adriandemian Jul 30, 2026
7a477fd
fix: rename the transcript transport predicate off the hook namespace
adriandemian Jul 30, 2026
4643f14
Merge branch 'main' into feat/remote-multi-env
adriandemian Jul 30, 2026
652a5ad
Update ralphx.yaml
adriandemian Jul 30, 2026
f923208
fix: drop the useless Task conversion in the review-complete tests
adriandemian Jul 30, 2026
8f46dd4
fix: read the remoteEnvironments gate from the client-owned copy
adriandemian Jul 30, 2026
ed52afc
Merge branch 'feat/remote-multi-env' of https://github.com/aigentive/…
adriandemian Jul 30, 2026
8a2fad6
Create remote-access-setup.md
adriandemian Jul 30, 2026
22d0f60
fix: refresh the Remote Access pane when a device pairs
adriandemian Jul 30, 2026
3d899be
fix: keep showing an active pairing code after leaving the settings s…
adriandemian Jul 30, 2026
236c2e9
wip
adriandemian Jul 30, 2026
e80509a
fix: stop the hydration barrier from making remote connect impossible
adriandemian Jul 30, 2026
2beb633
fix: tokenise the remote UI accent literals the design guards flag
adriandemian Jul 30, 2026
edef218
docs: handoff spec for the remote workspace mirror gap
adriandemian Jul 30, 2026
d99c3f0
fix: pin the startup lifecycle commands to the local transport
adriandemian Jul 30, 2026
e0be53d
feat: register the workspace shell reads on the remote facade
adriandemian Jul 30, 2026
8afad49
feat: route the workspace shell reads to the remote twins
adriandemian Jul 31, 2026
912fb4c
Update remote_workspace_commands.rs
adriandemian Jul 31, 2026
26a1f18
feat: tell the user whose settings they are viewing under a remote en…
adriandemian Jul 31, 2026
768be8c
docs: handoff for the remote host authenticated-route stall
adriandemian Jul 31, 2026
865217a
fix: scope the settings banner to what actually comes from the host
adriandemian Jul 31, 2026
1e19c56
feat: let a remote client save the host's execution settings
adriandemian Jul 31, 2026
38777de
fix: paint the dock badge locally while counting the host's notificat…
adriandemian Jul 31, 2026
e4c68f5
feat(remote): register the Agents inbox read on the remote facade
adriandemian Jul 31, 2026
7498310
feat(remote): project the host's configured providers spawn-free (Par…
adriandemian Aug 1, 2026
44c5cd2
fix(remote): preserve the host's sidebar order on a remote client
adriandemian Aug 1, 2026
a059ce2
fix(remote): chunk the remote_event_log pruner so it never parks the …
adriandemian Aug 1, 2026
b813555
Merge remote-tracking branch 'origin/feat/remote-multi-env' into fix/…
adriandemian Aug 1, 2026
902a411
feat(remote): spawn-free remote conversation start (Part B)
adriandemian Aug 1, 2026
c6bd2e9
feat(remote): route the composer to spawn-free start on a remote host…
adriandemian Aug 1, 2026
df7a55c
Merge spawn-free remote conversation start (Parts B+C) into feat/remo…
adriandemian Aug 1, 2026
7a3019b
fixes
adriandemian Aug 1, 2026
bb84dd5
fix(remote): spawn the conversation-start dispatcher outside the reco…
adriandemian Aug 1, 2026
52ba723
feat(remote): present live-socket hydration as Syncing instead of an …
adriandemian Aug 1, 2026
cb8a370
docs: full remote-management reassessment + implementation spec
adriandemian Aug 1, 2026
fbe21b6
Merge branch 'feat/remote-multi-env' of github.com:aigentive/ralphx.a…
adriandemian Aug 1, 2026
2221df9
feat(remote): spawn-free conversation continuation intent surface (WP1)
adriandemian Aug 1, 2026
f0c7e02
docs: mobile client tech stack + architecture summary
adriandemian Aug 1, 2026
10011df
feat(remote): remount the workspace-review context as a persisted sna…
adriandemian Aug 1, 2026
615a3e0
chore(remote): regenerate remote-commands manifest, census, and front…
adriandemian Aug 1, 2026
85a1989
feat(remote): spawn-free single-project read for the remote front door
adriandemian Aug 1, 2026
4f99667
docs: mobile client rev 2 — React Native + full screen-by-screen UX/U…
adriandemian Aug 1, 2026
324b412
fix(remote): fail closed on delegated-tool reads, then register tool-…
adriandemian Aug 1, 2026
1964657
Merge WP3: workspace-review snapshot remount + fail-closed tool-call …
adriandemian Aug 1, 2026
5414e83
docs: mobile spec — add S5 Agent tab (task-to-conversation bridge)
adriandemian Aug 1, 2026
df72592
feat(remote): remote agent stop intent surface
adriandemian Aug 1, 2026
3dc5d67
feat(remote): spawn-free stop command + host-owned stop dispatcher
adriandemian Aug 1, 2026
83df7f4
fix(remote): tie the continuation declaration to its ledger reason an…
adriandemian Aug 1, 2026
b454028
feat(remote): register the stop brake at ui:operate
adriandemian Aug 1, 2026
31c7dc4
feat(remote): route stopAgent through the spawn-free intent
adriandemian Aug 1, 2026
06567be
fix(agents): surface stop failures instead of swallowing them twice
adriandemian Aug 1, 2026
85bd621
Merge WP1: spawn-free conversation continuation intent surface
adriandemian Aug 1, 2026
d81e5d9
fix(remote): register the eight rows deferred on a transport shape th…
adriandemian Aug 1, 2026
49ecf50
Merge WP2: remote stop intent at ui:operate + brake failure surfacing
adriandemian Aug 1, 2026
6ee641f
fixes cleanup
adriandemian Aug 1, 2026
421c6a2
Update app_state.rs
adriandemian Aug 1, 2026
bc150a9
Update capability_ledger_tests.rs
adriandemian Aug 1, 2026
3cedcbe
Merge WP2: remote stop intent at ui:operate + brake failure surfacing
adriandemian Aug 1, 2026
f2aa177
Merge WP4: registration sweep, project-read twin, transport-shape ref…
adriandemian Aug 1, 2026
cd4c208
fixes
adriandemian Aug 1, 2026
1cfb564
cleanup unused
adriandemian Aug 1, 2026
ed578e2
fix(remote): restore WP3 ledger pins lost in WP2 merge; regenerate ma…
adriandemian Aug 1, 2026
d7731de
Merge remote tip (unused-import cleanup)
adriandemian Aug 1, 2026
5ab0252
remaining planning
adriandemian Aug 1, 2026
f553705
fix(remote): route permission gates through the pinned approve/deny f…
adriandemian Aug 1, 2026
7d932e5
fix(remote): stop the question gate writing false terminals from tran…
adriandemian Aug 1, 2026
56e2fb6
fix(remote): fail closed on queued-message delete/edit, gate them fro…
adriandemian Aug 1, 2026
21e6df5
test(remote): guard affordance rows against their real callsites
adriandemian Aug 1, 2026
8ed1d99
test(remote): extend the gate wiring guard to the Agents detail-view …
adriandemian Aug 1, 2026
ee0f94d
fix(remote): route tauri plugin invokes to the client via a prefix rule
adriandemian Aug 1, 2026
a811f13
feat(remote): spawn-free conversation mode switch (WP5a)
adriandemian Aug 1, 2026
ab51201
Merge WP5a: spawn-free conversation mode switch
adriandemian Aug 1, 2026
239b83a
style: re-indent the gated queued-message controls
adriandemian Aug 1, 2026
dce2d5f
chore: regenerate remote coverage census for the Phase 1 pinned ops
adriandemian Aug 1, 2026
7d97398
Merge rc-p0-guardrails
adriandemian Aug 1, 2026
fe975d3
Merge rc-p1-safety
adriandemian Aug 1, 2026
e516b03
Merge rc-p2-plugins
adriandemian Aug 1, 2026
425844e
fix(remote): reconcile the gate ratchet across the phase-0/1/2 merge
adriandemian Aug 1, 2026
457330b
fix(remote): close guard ratchet holes and Phase 1 residuals from adv…
adriandemian Aug 2, 2026
b29ae86
feat(remote): reconcile run liveness on connect and stop the doomed l…
adriandemian Aug 2, 2026
fc8bc6e
test(remote): cover the runtime-index reconcile listener (missed in b…
adriandemian Aug 2, 2026
34cf127
feat(remote): spawn-free get_remote_execution_status read twin
adriandemian Aug 2, 2026
2e7e17f
feat(remote): route execution-status reads to the spawn-free twin and…
adriandemian Aug 2, 2026
5b89b51
fix(remote): close the five blocking findings from the Phase 3 advers…
adriandemian Aug 2, 2026
ff561f9
feat(remote): honest gating for every Automation surface
adriandemian Aug 2, 2026
6d3df7c
feat(remote): gate every mutating task-detail view — both copies
adriandemian Aug 2, 2026
3d00414
feat(remote): honest gates for plan approval, ideation finalize, and …
adriandemian Aug 2, 2026
9e22d0b
test(remote): mounted behavioral coverage for the gated task-detail v…
adriandemian Aug 2, 2026
0f7651e
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 2, 2026
23788db
fix(remote): integrate main's new surface into the coverage contracts
adriandemian Aug 2, 2026
4645efb
feat(remote): truthful attribution — stop presenting failed host read…
adriandemian Aug 3, 2026
0160da0
feat(remote): answer agent questions from a paired device — spawn-fre…
adriandemian Aug 3, 2026
dfbaccd
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 3, 2026
20926e6
feat(remote): ship the remote settings surfaces visible by default
adriandemian Aug 3, 2026
4df48ac
feat(remote): pairing grants agent control by default — retire the re…
adriandemian Aug 3, 2026
5723192
fix(ci): green the branch — event manifest, layering, lint, and no-op…
adriandemian Aug 3, 2026
5176c51
chore: re-trigger CI
adriandemian Aug 3, 2026
5b82edc
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 3, 2026
d45e9cf
fix(ci): repair post-merge collisions surfaced by the first real CI run
adriandemian Aug 3, 2026
2b1e2bf
fix(remote): name a missing conversation/project instead of dumping a…
adriandemian Aug 3, 2026
d0b5318
feat(remote): start a conversation in any mode from a paired client
adriandemian Aug 3, 2026
d2b1809
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 3, 2026
fced8dd
fix(remote): unblock Send on a paired client, and stop two host-only …
adriandemian Aug 3, 2026
e4efb77
ci: cap rustc concurrency on the two Rust archive jobs
adriandemian Aug 3, 2026
fd74862
ci: drop the nextest archive to single-threaded, and cover the host-o…
adriandemian Aug 3, 2026
7dee109
ci: apply the rustc concurrency cap to the job that actually needs it
adriandemian Aug 4, 2026
3b2fe46
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 4, 2026
a04e008
chore: regenerate the event manifest after merging main
adriandemian Aug 4, 2026
e07e22d
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 4, 2026
04c3247
feat(remote): artifacts load on a paired client — spawn-free workspac…
adriandemian Aug 4, 2026
4c34522
fix(remote): Tier 0 — the client can no longer wedge the host, mislea…
adriandemian Aug 4, 2026
3cc689b
wip(remote): Wave B1 resume intent twins — extraction + scaffolding, …
adriandemian Aug 4, 2026
7f90edc
Merge origin/main into feat/remote-multi-env
adriandemian Aug 4, 2026
8fc1d5b
feat(remote): Wave B1 — execution/task resume intent twins, dispatche…
adriandemian Aug 4, 2026
b768692
fix(ci): heal the four merge-induced CI failures on the B1 head
adriandemian Aug 4, 2026
ab33edb
feat(remote): Wave B2a — plan-approval intent twin + layering re-home
adriandemian Aug 4, 2026
6dec5e3
chore: retrigger CI (no run was created for ab33edbc4)
adriandemian Aug 4, 2026
d4d028d
feat(remote): Wave B2b — ideation finalize-decision intent twin (acce…
adriandemian Aug 4, 2026
6ee25f7
feat(remote): Wave B2c — plan-artifact edit intent twin with lost-upd…
adriandemian Aug 5, 2026
47093d0
feat(remote): Wave B2d — plan approval, plan edit, and finalize decis…
adriandemian Aug 5, 2026
2dfd145
feat(remote): Wave B3a — queue read + cancel twins (no intent machine…
adriandemian Aug 5, 2026
4bd6950
feat(remote): Wave B3b — queued-message send-now intent twin (kill + …
adriandemian Aug 5, 2026
6ec7cc2
feat(remote): Wave B3c — queue management live on paired clients
adriandemian Aug 5, 2026
6f0c8e4
feat(remote): Wave B4a — automation setup-edit twin (direct, spawn-free)
adriandemian Aug 5, 2026
cb3f6d8
feat(remote): Wave B4b — automation run-now / retry-judge intent twin
adriandemian Aug 5, 2026
15874b7
feat(remote): Wave B4c — automation create-draft intent twin (at-most…
adriandemian Aug 5, 2026
5d8bd80
fix(remote): align request_remote_automation_draft caps order with it…
adriandemian Aug 5, 2026
274f149
feat(remote): Wave B4d — automation run-now, retry-judge, and create-…
adriandemian Aug 5, 2026
edbaa6e
feat(remote): Wave B5b — mute + persona twins, unarchive gate
adriandemian Aug 5, 2026
abcc1af
feat(remote): Wave B5d — recovery-prompt resolution twin (closes Tier…
adriandemian Aug 5, 2026
fe0ee52
feat(remote): Wave B5c — conversation archive + fork intent twins
adriandemian Aug 5, 2026
f20a675
fix(remote): Wave C1 — stop rendering absence and failure as fact
adriandemian Aug 5, 2026
585fd59
feat(remote): Wave C2+C3 — cached repository capability and MCP catal…
adriandemian Aug 5, 2026
fc6ad3b
feat(remote): Wave C4a — workspace changes reach paired clients as la…
adriandemian Aug 5, 2026
2b71f13
feat(remote): Wave C4b — file-level diffs complete the Changes surface
adriandemian Aug 5, 2026
b8d22a8
feat(remote): Wave D1 — host version, five audited ticketing reads, a…
adriandemian Aug 5, 2026
5218730
fix(remote): Wave E1 — repoint stale gate rows, extend the guard that…
adriandemian Aug 5, 2026
a99df33
fix(remote): Wave E5 — twelve places where a failed read claimed "non…
adriandemian Aug 5, 2026
1909fd2
feat(remote): Wave E6 — host attachments are visible on paired clients
adriandemian Aug 5, 2026
5af02c8
feat(remote): Wave E7 — the publish tab shows PR state instead of a b…
adriandemian Aug 5, 2026
3d269b1
docs: adversarial review prompt for remote parity waves A-E
adriandemian Aug 6, 2026
388f2c0
docs: open-decisions report for the remote parity effort
adriandemian Aug 6, 2026
7754b62
feat(remote): Wave F1 — ticketing reaches paired clients (owner-appro…
adriandemian Aug 6, 2026
bb177e0
feat(remote): Wave F2+F3 — update channel reclassified, repository UR…
adriandemian Aug 6, 2026
4fedcbd
Merge origin/main into feat/remote-multi-env
adriandemian Aug 6, 2026
bef0075
Merge origin/main (v0.95.1) into feat/remote-multi-env
adriandemian Aug 6, 2026
bc8b248
fix(ci): drop the duplicate CARGO_BUILD_JOBS the merge left in covera…
adriandemian Aug 6, 2026
528d6ad
fix(remote): §7.1 — every mutation reconciles an unknown outcome, not…
adriandemian Aug 6, 2026
fcda4a9
fix(remote): §7.2a — gate the six task-lifecycle writes that had no a…
adriandemian Aug 7, 2026
81618a4
fix(remote): §7.2b — gate the eight persona writes; fix what CI caught
adriandemian Aug 7, 2026
ef4e786
test(remote): reset the environment store after gate tests
adriandemian Aug 7, 2026
45c1c8d
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 7, 2026
14ee351
chore(remote): merge main (v0.96.0) and regenerate both generated man…
adriandemian Aug 7, 2026
eff1cdc
fix(ci): repair the four CI gates this branch was failing
adriandemian Aug 7, 2026
b08a9cc
Merge remote-tracking branch 'origin/main' into feat/remote-multi-env
adriandemian Aug 8, 2026
dc10e37
fix(ci): give the Rust jobs the capacity this branch's growth needs
adriandemian Aug 8, 2026
b33faa6
docs: adversarial review findings across five lenses
adriandemian Aug 8, 2026
13d00f0
Merge origin/main (v0.96.2): adopt the locator-free event-bus APIs
adriandemian Aug 10, 2026
5758a46
Merge origin/main (#1009 Unattended Workspace Flow)
adriandemian Aug 10, 2026
e93c43b
Merge origin/main (#1012 Reopen closed agent workspace PRs)
adriandemian Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .claude/rules/production-cli-resolution.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ paths:
|---|---|
| `claude` | Claude harness chat/execution and reserved user-scope `ralphx` MCP registration cleanup |
| `codex` | Codex harness chat/execution and capability probes |
| `tailscale` | remote host tailnet discovery and Serve exposure |
| `gh` | GitHub auth, PR polling, PR/release operations |
| `git` | repository state, diffs, worktrees, merge/cleanup |
| `node` | bundled RalphX MCP servers |
Expand Down
29 changes: 29 additions & 0 deletions .claude/rules/remote-facade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
paths:
- "src-tauri/src/remote_server/**"
- "src-tauri/src/commands/remote_*.rs"
- "src-tauri/crates/ralphx-remote-protocol/**"
- "frontend/src/lib/remote/**"
- "frontend/src/api/*.ts"
---

> **Maintainer note:** This file optimizes for LLM context efficiency. Rules: (1) Tables > prose (2) One example max per concept (3) No redundant explanations (4) Use symbols: → = leads to, | = or, ❌/✅ = wrong/right (5) Before adding content, ask: "Can this be a single line?" If yes, make it one line.

# Remote Facade

Scoped rules for the `:3849` host/client surface. These were root `CLAUDE.md` principles 27-28; they moved here so they load only for the code they govern.

| Rule | Detail |
|---|---|
| Command registration (NON-NEGOTIABLE) | Every `:3849`-reachable command is a hand-audited `remote_server/registry.rs` allowlist entry with a `capability_ledger.rs` class; never a passthrough, a `generate_handler!` edit, or a command fork. Details: `docs/architecture/remote-protocol.md` |
| Event fan-out (NON-NEGOTIABLE) | Remote events travel by classification-table delivery class — Durable rides the sequencer, Transient broadcasts with no seq and is never persisted, LocalOnly never leaves the host. ❌ Re-deriving remote event sources from `EventSink`/`AppState.events` |
| Twin naming | A spawn-free twin is named for what its closure does (persists an intent), not for what the host later does (starts an agent). |
| Absence is the signal | Client gates derive `unavailable` from a command's absence in the generated manifest — never from a hardcoded name list. |
| Spawn-distinct paths are distinct FUNCTIONS (NON-NEGOTIABLE) | When a local path may reach a spawn/recovery seam and its twin may not, express the difference as two functions sharing only work that names NEITHER seam. ❌ One body behind a `bool`/enum flag: the ledger detectors are call-graph based, so a shared body that names both seams puts the spawned side in the twin's closure whatever the flag does at runtime. Measured 2026-08-05 on `set_agent_conversation_muted`: the flag form ran 18 hops into `reconcile_reserved_claude_registration` and the corrective-transition sinks, failing `detector_c_floors_process_spawn_authority`, `batch13_detector_gap_is_measured_not_inherited`, and `no_registered_facade_target_reaches_a_corrective_transition`. Same reason a closure/bare-fn indirection must not be used to *hide* a launch — the gate is only worth what the graph can see. |
| Test the real envelope | Remote client tests assert the shapes the transport actually produces — `{outcome: "commandError", error: <the command's own error value, unwrapped>}` per `network-invoke.ts`, explicit nulls, real casing. ❌ Mock-convenient envelopes (`{outcome: "error", …}`) that no client path can emit; they pass while proving nothing. |

## Client surfaces

- **Remote Connection Journal** — `stores/remoteConnectionJournalStore.ts` is the per-environment connection diagnostics ring buffer; `lib/remote/environment-runtime.ts` is its single writer, the banner Details dialog its reader. Remote HTTP reads must lift the host's `REMOTE_COMMAND_UNAVAILABLE` envelope into `RemoteTransportError` (capability boundary, tolerated by the hydration barrier) — ❌ flattening it into generic HTTP errors.
- **Tauri Plugin Prefix Rule** — every `plugin:*` command (opener/dialog/fs/updater/process/global-shortcut/notification) routes to THIS device via the one prefix rule in `lib/remote/local-only-commands.ts`; their subject is the machine showing the UI. Host-targeted plugin calls need a reviewed row in `HOST_TARGETED_PLUGIN_COMMANDS` (empty today) and then a registration or ledger row. ❌ Per-call-site remote branching for plugin invokes; ❌ passing a host filesystem path to `openPath`/`revealItemInDir` — those degrade through host-affordance gating to `HostPathCopyButton`.
- **Syncing Presentation** — `lib/remote/supervisor-presentation.ts` owns the `syncing` projection (live socket mid-hydration → chip-only accent pulse in `EnvironmentSwitcher`, no banner) with K=2 barrier-failure / T=12s one-way escalation back to `reconnecting`; still read-only. ❌ New surfaces reading FSM state directly to infer "connection dropped".
99 changes: 94 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ jobs:
- 'scripts/tests/test-ci-path-filters.py'
- 'scripts/tests/test-claude-rule-utils.py'
- 'scripts/tests/test-claude-rules-activation.py'
- 'scripts/check-raw-tauri-event-listen.mjs'
- 'scripts/tests/test-raw-tauri-event-listen-guard.sh'
- 'scripts/event-manifest-scanner/**'
- 'scripts/event-manifest.json'
- 'scripts/build-prod-release.sh'
- 'scripts/render-homebrew-cask.sh'
- 'scripts/reconcile-homebrew-cask.sh'
Expand Down Expand Up @@ -206,6 +210,10 @@ jobs:
shell: bash
run: bash scripts/tests/test-coverage-rust-shards.sh

- name: Validate raw Tauri event listen guard
shell: bash
run: bash scripts/tests/test-raw-tauri-event-listen-guard.sh

- name: Validate CI path filters
shell: bash
run: python3 scripts/tests/test-ci-path-filters.py
Expand Down Expand Up @@ -252,6 +260,76 @@ jobs:
- name: Check JavaScript and Rust Tauri package alignment
run: node scripts/check-tauri-package-alignment.mjs .

# UNCONDITIONAL BY DESIGN — no `needs: changes`, no path filter.
#
# These guards enforce the remote command facade's P-11 invariant (zero
# unclassified commands) and the currency of the generated manifest/mirrors.
# A backend-only PR that registers or reclassifies a Tauri command, and a
# docs-only PR that hand-edits docs/generated/remote-commands.json, both
# violate these invariants without touching `frontend/**` or `src-tauri/**`.
# Gating this job would restore the "merge first, discover red on main"
# behaviour it exists to prevent.
remote-facade-guards:
name: Remote Facade Guards
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json

# check-remote-transport-drift.mjs parses frontend TypeScript with the
# compiler resolved from frontend/package.json, so the frontend dev
# dependencies must be present.
- name: Install frontend dependencies
run: npm ci --no-audit --no-fund
working-directory: frontend

- name: Guard self-test (drift detector)
run: node scripts/check-remote-transport-drift.mjs --self-test

- name: Raw Tauri event listen guard
run: node scripts/check-raw-tauri-event-listen.mjs .

- name: Remote transport drift (P-11 — zero unclassified)
run: node scripts/check-remote-transport-drift.mjs .

- name: Local-only backend event mirror is current
run: node scripts/check-local-only-event-mirror.mjs .

- name: Remote protocol vocabulary mirror is current
run: node scripts/check-remote-vocabulary-mirror.mjs .

- name: Agent-control capability mirror is current
run: node scripts/check-agent-control-command-mirror.mjs .

- name: Remote coverage census is current
run: node scripts/generate-remote-coverage-census.mjs --check

event-manifest:
name: Event Manifest
needs: changes
if: needs.changes.outputs.run_automation == 'true' || needs.changes.outputs.run_rust == 'true' || needs.changes.outputs.run_frontend == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- name: Setup Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
with:
toolchain: 1.91.0

- name: Test event manifest scanner
run: cargo test --manifest-path scripts/event-manifest-scanner/Cargo.toml --test scanner

- name: Verify event manifest is current
run: cargo run --manifest-path scripts/event-manifest-scanner/Cargo.toml -- --check

rust-ipc-contracts:
name: Rust IPC Contracts
needs: changes
Expand Down Expand Up @@ -315,6 +393,12 @@ jobs:
env:
CARGO_PROFILE_TEST_DEBUG: "1"
RALPHX_TEST_MODE: "1"
# Archiving every test binary is the heaviest link step in CI. On this branch's Rust
# surface the job went silent mid-compile and the runner was reaped (exit 143) on every
# recent attempt, with 100+ GB of disk free — the signature of a memory kill on a 16 GB
# `ubuntu-latest`. Same value the Rust IPC Coverage job already uses; the 40 min budget
# absorbs the slower build (deaths were at ~7 min). Raise it if the runners grow.
CARGO_BUILD_JOBS: "1"
steps:
- uses: actions/checkout@v6

Expand Down Expand Up @@ -356,7 +440,7 @@ jobs:
retention-days: 1

rust-lib-tests:
name: Rust Lib Tests (Shard ${{ matrix.shard }}/2)
name: Rust Lib Tests (Shard ${{ matrix.shard }}/3)
needs:
- changes
- rust-lib-nextest-archive
Expand All @@ -366,7 +450,7 @@ jobs:
strategy:
fail-fast: false
matrix:
shard: [1, 2]
shard: [1, 2, 3]
env:
RALPHX_TEST_MODE: "1"
steps:
Expand All @@ -391,19 +475,19 @@ jobs:
name: rust-lib-tests-nextest-archive
path: .

- name: Run Rust lib tests shard ${{ matrix.shard }}/2
- name: Run Rust lib tests shard ${{ matrix.shard }}/3
run: |
cargo nextest run \
--archive-file rust-lib-tests.tar.zst \
--workspace-remap "${GITHUB_WORKSPACE}/src-tauri" \
--profile ci \
--partition hash:${{ matrix.shard }}/2
--partition hash:${{ matrix.shard }}/3

- name: Upload Rust lib test timings
if: always()
uses: actions/upload-artifact@v7
with:
name: rust-lib-tests-junit-${{ matrix.shard }}-of-2
name: rust-lib-tests-junit-${{ matrix.shard }}-of-3
path: src-tauri/target/nextest/ci/junit.xml
if-no-files-found: warn
retention-days: 7
Expand Down Expand Up @@ -451,6 +535,11 @@ jobs:
timeout-minutes: 30
env:
RALPHX_TEST_MODE: "1"
# --all-targets --all-features peaks past the 16 GB on ubuntu-latest once the
# crate graph is this large: the job was reaped mid-compile with exit 143
# ("runner has received a shutdown signal"), not a lint failure. Same cap, and
# same reason, as the coverage archive job. Raise if the runner grows.
CARGO_BUILD_JOBS: "1"
steps:
- uses: actions/checkout@v6

Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 40
env:
# Coverage-instrumented lib builds exceed the hosted runner memory limit
# when Cargo compiles crates concurrently.
# Coverage-instrumented lib builds exceed the hosted runner memory limit when Cargo
# compiles crates concurrently. Observed on this branch, whose Rust surface is larger:
# the job went silent mid-compile and the runner was reaped (exit 143, "runner has
# received a shutdown signal") on 3 of 4 attempts at 4 parallel rustc processes,
# against the 16 GB on `ubuntu-latest`. Raise it back if the crate graph shrinks or
# the runner size grows.
CARGO_BUILD_JOBS: "1"
CARGO_TERM_COLOR: never
RALPHX_TEST_MODE: "1"
Expand Down
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ If one is missing, skip it and continue; do not fail work or run bare `sed`/`cat

## Project: RalphX
Native Mac GUI for autonomous AI dev: Kanban, multi-agent orchestration, ideation chat.
Code quality: `.claude/rules/code-quality-standards.md` | State machine: `.claude/rules/task-state-machine.md` | Stateful review: `.claude/rules/stateful-workflow-review.md` | Big-PR checks: `.claude/rules/big-pr-review-checklist.md` | Git/merge: `.claude/rules/task-git-branching.md` | Merge recovery: `.claude/rules/merge-recovery-consistency.md` | Review modes: `.claude/rules/agent-workspace-review-modes.md` | Agents: `.claude/rules/task-execution-agents.md` | Delegation: `.claude/rules/delegation-topology.md` | Thinking: `.claude/rules/agent-thinking-capture.md` | Runtime roots: `.claude/rules/runtime-root-vs-target-project.md` | Prod CLI: `.claude/rules/production-cli-resolution.md` | CodeQL paths: `.claude/rules/codeql-path-safety.md` | Ideation verification: `.claude/rules/ideation-verification-architecture.md` | Blocker dedupe: `.claude/rules/followup-blocker-dedupe.md` | Agent types: `.claude/rules/agent-type-map.md` | Detail views: `.claude/rules/task-detail-views.md` | Frontend perf: `.claude/rules/frontend-interaction-performance.md` | Icons: `.claude/rules/icon-only-buttons.md` | Rust API: `.claude/rules/rust-stable-apis.md` | Rust tests: `.claude/rules/rust-test-execution.md` | WKWebView CSS: `.claude/rules/wkwebview-css-vars.md` | Release scripts: `.claude/rules/release-script-validation.md` | Assets: `.claude/rules/assets.md` | Tauri invoke: `.claude/rules/tauri-invoke-conventions.md` | PR body (READ): `.claude/rules/pr-descriptions.md`
Code quality: `.claude/rules/code-quality-standards.md` | State machine: `.claude/rules/task-state-machine.md` | Stateful review: `.claude/rules/stateful-workflow-review.md` | Big-PR checks: `.claude/rules/big-pr-review-checklist.md` | Git/merge: `.claude/rules/task-git-branching.md` | Merge recovery: `.claude/rules/merge-recovery-consistency.md` | Review modes: `.claude/rules/agent-workspace-review-modes.md` | Agents: `.claude/rules/task-execution-agents.md` | Delegation: `.claude/rules/delegation-topology.md` | Thinking: `.claude/rules/agent-thinking-capture.md` | Runtime roots: `.claude/rules/runtime-root-vs-target-project.md` | Prod CLI: `.claude/rules/production-cli-resolution.md` | CodeQL paths: `.claude/rules/codeql-path-safety.md` | Ideation verification: `.claude/rules/ideation-verification-architecture.md` | Blocker dedupe: `.claude/rules/followup-blocker-dedupe.md` | Agent types: `.claude/rules/agent-type-map.md` | Detail views: `.claude/rules/task-detail-views.md` | Frontend perf: `.claude/rules/frontend-interaction-performance.md` | Icons: `.claude/rules/icon-only-buttons.md` | Rust API: `.claude/rules/rust-stable-apis.md` | Rust tests: `.claude/rules/rust-test-execution.md` | WKWebView CSS: `.claude/rules/wkwebview-css-vars.md` | Release scripts: `.claude/rules/release-script-validation.md` | Remote facade: `.claude/rules/remote-facade.md` | Assets: `.claude/rules/assets.md` | Tauri invoke: `.claude/rules/tauri-invoke-conventions.md` | PR body (READ): `.claude/rules/pr-descriptions.md`
CodeQL path safety applies to production and tests; use process-owned runtime roots, fixed entry lists, pure test builders, and suppress `rust/path-injection` only after containment validation.
Production CLI resolution applies to installed app launches; all runtime subprocess binaries must go through the shared resolver surface.

Expand Down Expand Up @@ -107,6 +107,7 @@ style={{ boxShadow: "none", outline: "none" }}
- **Session Recovery** — Expired Claude session recovery with history preservation. Docs: `docs/features/session-recovery.md`
- **Plan Verification** — Automated adversarial review loop for ideation plans. Docs: `docs/features/plan-verification.md` | Architecture: `.claude/rules/ideation-verification-architecture.md`
- **Agent Personas** — Conversation-bound prompt-only behavior profiles for Project Agent conversations. Docs: `docs/features/agent-personas.md`
- **Remote Access** — Two-instance host/client mode over an authenticated `:3849` listener. Docs: `docs/features/remote-access.md` | Protocol: `docs/architecture/remote-protocol.md`

## Git Conventions
❌ git init/push/remotes | Prefixes: `docs:` | `feat:` | `fix:` | `chore:`
Expand Down
9 changes: 9 additions & 0 deletions config/ralphx.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@ ui:
standalone_conversations: false
# A20 escape hatch: skip --resume on the send after a persona switch.
persona_switch_forces_fresh_provider_session: false
# Remote multi-environment client UI.
# Env override: RALPHX_UI_REMOTE_ENVIRONMENTS=true|false
# Shows the Remote Access + Connections settings panes, the environment
# switcher, and the connection banner. It does NOT expose this host — that
# is a separate DB-persisted toggle (RemoteHostSettings.enabled, default
# false) inside the Remote Access pane.
remote_environments: true

# Compatibility runtime row for the PersonaBuilder-only extractor. Canonical
# `agents/ralphx-persona-extractor/agent.yaml` remains authoritative.
Expand Down Expand Up @@ -249,6 +256,8 @@ git:
workspace_freshness_cache_ttl_ms: 2000 # Env: RALPHX_GIT_WORKSPACE_FRESHNESS_CACHE_TTL_MS
# diff_commands.rs — short backend TTL for workspace review context/payload reuse
workspace_review_cache_ttl_ms: 2000 # Env: RALPHX_GIT_WORKSPACE_REVIEW_CACHE_TTL_MS
# diff_commands.rs — long TTL for spawn-free paired-device workspace snapshots
remote_workspace_snapshot_ttl_ms: 86400000 # Env: RALPHX_GIT_REMOTE_WORKSPACE_SNAPSHOT_TTL_MS
# agent_workspace_pr_description.rs — short backend TTL for precomputed publish PR descriptions
workspace_pr_description_cache_ttl_ms: 300000 # Env: RALPHX_GIT_WORKSPACE_PR_DESCRIPTION_CACHE_TTL_MS
# diff_commands.rs — short backend TTL for live GitHub PR annotation payload reuse
Expand Down
Loading
Loading