id: fba68802d4fd4bccb094b22dae531b94
parent_id: cac2d559a91a4d7d91737259f1c7cd58
item_type: 1
item_id: d4ca32cc133647b0b09d1009cc296f28
item_updated_time: 1789573478597
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\"path\"],[1,\", corrected\\\n> EA-over-SSH model, headless Joplin\"],[0,\"). The\"],[-1,\"\\\n>\"],[0,\" Feb\"]],\"start1\":193,\"start2\":193,\"length1\":16,\"length2\":62},{\"diffs\":[[0,\"lidated,\"],[1,\"\\\n>\"],[0,\" working\"]],\"start1\":277,\"start2\":277,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"ntation:\"],[-1,\"\\\n>\"],[0,\" the key\"]],\"start1\":320,\"start2\":320,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"complete\"],[1,\"\\\n>\"],[0,\" OpenUP \"]],\"start1\":354,\"start2\":354,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"audited,\"],[-1,\"\\\n>\"],[0,\" integra\"]],\"start1\":390,\"start2\":390,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"e is the\"],[1,\"\\\n>\"],[0,\" process\"]],\"start1\":428,\"start2\":428,\"length1\":16,\"length2\":18},{\"diffs\":[[0,\"te lives\"],[-1,\"\\\n>\"],[0,\" in the \"]],\"start1\":467,\"start2\":467,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\"s notes; all\"],[1,\"\\\n>\"],[0,\" repos and t\"]],\"start1\":500,\"start2\":500,\"length1\":24,\"length2\":26},{\"diffs\":[[0,\" live in\"],[-1,\"\\\n>\"],[0,\" \\\"Develo\"]],\"start1\":539,\"start2\":539,\"length1\":18,\"length2\":16},{\"diffs\":[[0,\" Index — Repos &\"],[1,\"\\\n>\"],[0,\" Joplin Coverage\"]],\"start1\":569,\"start2\":569,\"length1\":32,\"length2\":34},{\"diffs\":[[0,\"alidated\"],[1,\" + corrected 2026-08-29\"],[0,\"):** EA \"]],\"start1\":1538,\"start2\":1538,\"length1\":16,\"length2\":39},{\"diffs\":[[0,\"mation +\"],[-1,\" \"],[1,\"\\\n\"],[0,\"Word COM\"]],\"start1\":1587,\"start2\":1587,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"dows\"],[-1,\"\\\n(EA has no Linux client; Linux agents reach it via SSH-triggered scripts or\\\nRDP)\"],[0,\". Al\"]],\"start1\":1616,\"start2\":1616,\"length1\":89,\"length2\":8},{\"diffs\":[[0,\"and the JSON\"],[-1,\" \"],[1,\"\\\n\"],[0,\"exports are\\\n\"]],\"start1\":1663,\"start2\":1663,\"length1\":25,\"length2\":25},{\"diffs\":[[0,\"orts are\"],[-1,\"\\\n\"],[1,\" \"],[0,\"cross-pl\"]],\"start1\":1679,\"start2\":1679,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"from the\"],[-1,\" \"],[1,\"\\\n\"],[0,\"committe\"]],\"start1\":1738,\"start2\":1738,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"exports.\"],[-1,\"\\\n\"],[1,\" \"],[0,\"Open iss\"]],\"start1\":1757,\"start2\":1757,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\" docx so\"],[-1,\" \"],[1,\"\\\n\"],[0,\"`generat\"]],\"start1\":1805,\"start2\":1805,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"rops\"],[-1,\"\\\nits Word dependency\"],[1,\" its Word dependency.\\\n\\\n## Linux ↔ Windows EA interaction (the real model)\\\n\\\n**Nobody starts EA manually.** The PS/COM scripts spawn a headless EA instance\\\nthemselves. What a Linux-side agent actually needs:\\\n\\\n1. Windows machine powered on and **SSH-reachable** (OpenSSH Server enabled —\\\n   one-time). Addressing: LAN hostname/mDNS or DHCP reservation; off-LAN only\\\n   via WireGuard/Tailscale, never exposed SSH\\\n2. **Git as the transport**: push → `ssh <win> powershell scripts/<builder>.ps1`\\\n   → pull the updated exports/.eapx\\\n3. **Orphan cleanup before runs**: windowless EA instances block new ones\\\n   (license contention) — check/kill via SSH first\\\n4. **Human + RDP only for the interactive leftovers**: diagram layout,\\\n   license dialogs, EA upgrades. The agent announces when such a step blocks it\\\n\\\n**VirtualBox option (under consideration):** Windows VM on the Linux box with\\\nEA + SSH + repo = the whole stack on one machine. Check EA license terms for\\\nVM activation counting as an extra machine before committing.\\\n\\\n## Headless Joplin MCP (the pattern)\\\n\\\nThe MCP server ships with the Joplin **desktop** app only (CLI has none).\\\nHeadless: run the desktop app under **xvfb** on the server (x11vnc for rare\\\ninteractive needs), logged into the **same sync target** as all other\\\ninstances → notes replicate; enable the MCP server (binds localhost; port/\\\ntoken per Joplin version — check the settings pane). Agents on other machines\\\nreach it via **SSH tunnel** — never expose the port publicly. One MCP host\\\n(basement server), everyone else tunnels\"],[0,\".\\\n\\\n#\"]],\"start1\":1840,\"start2\":1840,\"length1\":28,\"length2\":1555},{\"diffs\":[[0,\"ows \"],[-1,\"(SSH-triggered scripts or\\\nRDP from Linux). \"],[1,\"per the SSH model above.\\\n\"],[0,\"**Un\"]],\"start1\":9350,\"start2\":9350,\"length1\":51,\"length2\":33},{\"diffs\":[[0,\" begins)\"],[1,\"\\\n8. Hetzner project: execute \\\"Hetzner Server — Audit & Container Setup (Plan)\\\"\\\n   (Infrastructure notebook) — agent on the server, Joplin via tunnel to the\\\n   basement MCP host\"],[0,\"\\\n\\\n## Ref\"]],\"start1\":11993,\"start2\":11993,\"length1\":16,\"length2\":192},{\"diffs\":[[0,\"didates\\\n\"],[1,\"- Hetzner Server — Audit & Container Setup (Plan) (2026-08-29, Infrastructure notebook)\\\n\"],[0,\"- keyfob\"]],\"start1\":12386,\"start2\":12386,\"length1\":16,\"length2\":104}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-09-16T15:53:50.562Z
created_time: 2026-09-16T15:53:50.562Z
is_locked: 0
type_: 13