| Title | Ticket | Status | Topics | DocType | Intent | Owners | RelatedFiles | ExternalSources | Summary | LastUpdated | WhatFor | WhenToUse | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Investigation Diary |
SURF-20260225-R1 |
active |
|
reference |
long-term |
|
Chronological command log and reasoning trail for full Snap Chromium compatibility research and report delivery. |
2026-02-25 16:04:46 -0500 |
Preserve reproducible investigation history for future implementation |
Use to reproduce findings and verify assumptions during implementation |
Produce a full research report for Snap Chromium native host compatibility in Surf CLI, backed by local reproduction and external primary sources, then upload the deliverable bundle to reMarkable.
User prompt (verbatim): "write a full research report and upload to remarkable. $ticket-research-docmgr-remarkable"
Assistant interpretation: Create a new docmgr ticket with a full design-grade research report + detailed diary, run quality checks, and upload a bundled PDF to reMarkable.
Inferred user intent: Obtain a durable, shareable engineering document suitable for implementation planning and review.
Commit (code): N/A (documentation/research only)
docmgr ticket create-ticket --ticket SURF-20260225-R1 --title "Full research report: Snap Chromium native host compatibility for Surf CLI" --topics linux,chromium,snap,native-messaging,debugging,architecture
docmgr doc add --ticket SURF-20260225-R1 --doc-type design-doc --title "Snap Chromium Native Messaging Compatibility Research Report"
docmgr doc add --ticket SURF-20260225-R1 --doc-type reference --title "Investigation Diary"
docmgr doc list --ticket SURF-20260225-R1- Ticket workspace and required docs were created successfully.
- Paths created:
.../design-doc/01-snap-chromium-native-messaging-compatibility-research-report.md.../reference/01-investigation-diary.md
docmgrticket and document creation workflow completed without errors.
- N/A.
nl -ba scripts/install-native-host.cjs | sed -n '1,260p'
nl -ba scripts/install-native-host.cjs | sed -n '260,380p'
nl -ba scripts/uninstall-native-host.cjs | sed -n '1,220p'
nl -ba native/host.cjs | sed -n '1,120p'
nl -ba native/host.cjs | sed -n '1520,1668p'
nl -ba native/cli.cjs | sed -n '1,60p'
nl -ba native/cli.cjs | sed -n '2920,2960p'
nl -ba src/native/port-manager.ts | sed -n '1,160p'
nl -ba README.md | sed -n '648,670p'- Linux install path assumptions:
- manifest:
.config/chromium/NativeMessagingHosts - wrapper dir:
.local/share/surf-cli
- manifest:
- Host and CLI use fixed Linux socket path:
/tmp/surf.sock. - Extension uses
connectNative("surf.browser.host")and logs disconnect reasons. - README marks Linux support as experimental.
- Evidence clearly supports architecture and gap analysis sections.
- N/A.
chromium --version && snap list chromium
surf install jgbccjmbpfinlegbjkomjeoiklaijmmm --browser chromium
surf tab.list || true
snap run --shell chromium -c 'echo HOME=$HOME; echo CHROME_CONFIG_HOME=$CHROME_CONFIG_HOME; echo SNAP_USER_COMMON=$SNAP_USER_COMMON; echo XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR'
snap run --shell chromium -c '/home/manuel/.local/share/surf-cli/host-wrapper.sh </dev/null >/tmp/snap-wrap.out 2>/tmp/snap-wrap.err; echo EXIT:$?; cat /tmp/snap-wrap.err'
snap run --shell chromium -c '/home/manuel/.nvm/versions/node/v22.21.0/bin/node --version; echo EXIT:$?'
stat -c 'host %n inode=%i mtime=%y' /tmp/surf.sock 2>/dev/null || echo 'host /tmp/surf.sock missing'
snap run --shell chromium -c 'stat -c "snap %n inode=%i mtime=%y" /tmp/surf.sock 2>/dev/null || echo "snap /tmp/surf.sock missing"'Chromium 145.0.7632.109 snap- Installer output:
- wrapper:
/home/manuel/.local/share/surf-cli/host-wrapper.sh - manifest:
/home/manuel/.config/chromium/NativeMessagingHosts/surf.browser.host.json
- wrapper:
- CLI failure:
Error: Connection refused. Native host not running.
- Snap env:
HOME=/home/manuel/snap/chromium/3369CHROME_CONFIG_HOME=/home/manuel/snap/chromium/commonXDG_RUNTIME_DIR=/run/user/1000/snap.chromium
- Snap execution failures:
- wrapper:
EXIT:126 ... Permission denied - node in
.nvm:EXIT:126 ... Permission denied
- wrapper:
- Socket inode mismatch:
- host
/tmp/surf.sockinode8995165 - snap
/tmp/surf.sockinode12069922
- host
- Reproduction yielded concrete, repeatable symptoms and failure classes.
- No direct functional connection path from Snap Chromium to current Surf host installation.
- There are multiple independent blockers. Fixing only manifest path does not solve host executable access or socket namespace mismatch.
Used web.search_query, web.open, and web.find to collect primary-source evidence from:
- Chrome Extensions native messaging docs.
- Chromium source docs (
user_data_dir.md). - Snap docs (
snap-confinement,home-interface). - Launchpad Chromium Snap native-messaging bug discussion.
- Firefox portal design doc (as sandboxed native messaging reference model).
- Native host launch is browser-driven; host path rules are strict (absolute path on Linux/macOS).
- Chromium config roots can vary via env (
CHROME_CONFIG_HOME,XDG_CONFIG_HOME). - Snap strict confinement and
homeinterface rules explain hidden-path access issues. - Historical Chromium Snap bug discussion confirms long-running native messaging friction.
- Portal mediation exists in Firefox design docs, but no equivalent proven Chromium path in this investigation.
- Sources aligned with local repro and reduced speculative guidance.
- No single upstream Chromium Snap “drop-in recipe” that solves all Surf-specific needs without app changes.
- Full design doc with:
- executive summary,
- scope,
- evidence-backed current state,
- gap analysis,
- proposed architecture + pseudocode,
- phased implementation plan,
- test strategy,
- risks/alternatives/open questions,
- internal + external references.
- This diary with chronological commands and results.
- User requested a full research report suitable for implementation and distribution.
docmgr doc relate --doc <design-doc> --file-note "..."
docmgr doc relate --doc <diary-doc> --file-note "..."
docmgr changelog update --ticket SURF-20260225-R1 --entry "Completed full research report and diary with evidence-backed recommendations; ready for remarkable upload." --file-note "..."
# vocabulary cleanup if needed
docmgr vocab add --category topics --slug architecture --description "Architecture design and system-structure analysis"
docmgr doctor --ticket SURF-20260225-R1 --stale-after 30docmgr doctorpass required addingarchitecturetopic vocabulary.
- Doctor checks passed after vocabulary alignment.
- Initial doctor run would warn if vocabulary topic slugs are missing.
remarquee status
remarquee cloud account --non-interactive
remarquee upload bundle --dry-run <index> <design-doc> <diary> <changelog> <tasks> <readme> \
--name "SURF-20260225-R1 Snap Chromium Native Messaging Full Research Report" \
--remote-dir "/ai/2026/02/25/SURF-20260225-R1" \
--toc-depth 2
remarquee upload bundle <same files> ...
remarquee cloud ls /ai/2026/02/25/SURF-20260225-R1 --long --non-interactive- Pending at this diary stage. (Upload executed immediately after final validation.)
- Start in the design doc:
.../design-doc/01-snap-chromium-native-messaging-compatibility-research-report.md
- Validate key repository references:
scripts/install-native-host.cjsscripts/uninstall-native-host.cjsnative/host.cjsnative/cli.cjssrc/native/port-manager.ts
- Re-run reproduction commands from Phase 3 to confirm behaviors.
- Final socket-path default strategy in mixed Chrome + Snap Chromium environments.
- Update/upgrade semantics for copied Snap runtime assets.
- Long-term feasibility of portal-based approach for Chromium if ecosystem changes.
- Implement Phase 1 (shared socket path override) first as low-risk foundation.
- Add Snap-aware installer/uninstaller pathing.
- Add explicit
surf doctordiagnostics for native messaging on Linux/Snap. - Add integration test checklist in CI docs for Snap-specific manual verification.
- Design doc:
../design-doc/01-snap-chromium-native-messaging-compatibility-research-report.md - Ticket index:
../index.md - Changelog:
../changelog.md