Skip to content

Commit 76d5067

Browse files
alicodingclaude
andauthored
docs: goal 0044 capture-path research recorded + two ADR corrections (#85)
Research verdict source-hardens ADR-0030's two-tier answer (save-page floor shipped; allowlisted self-hosted extension as the gated end-state) and lands the owner's 7-item at-work checklist. ADR-0030's developer-mode-policy 'unconfirmed' upgraded to confirmed- separate; ADR-0003 gains the native-messaging admin-rights scope note (rejection is protocol-authorship-only). Claude-Session: https://claude.ai/code/session_01FJ8wStsHyu7XPLTspNjMnQ Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 01f34a7 commit 76d5067

3 files changed

Lines changed: 74 additions & 6 deletions

File tree

docs/adr/0003-browser-bridge-architecture.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ itself (~30 lines of `encoding/binary` + `encoding/json`) would have to
9696
be Mill-authored either way — exactly what the rule excludes, regardless
9797
of how trivial the protocol is.
9898

99+
Scope note (goal 0044 research, 2026-08-13): this rejection is about
100+
protocol authorship ONLY — it was never an admin-rights problem.
101+
Native-messaging-host manifests register per-user with no admin/root
102+
on both Windows (`HKEY_CURRENT_USER\...\NativeMessagingHosts`) and
103+
macOS (`~/Library/Application Support/.../NativeMessagingHosts/`),
104+
per Chrome's own native-messaging docs. If an adequate Go library
105+
ever appears, admin rights would not be the blocker.
106+
99107
### B. Direct localhost fetch/WebSocket from the extension
100108
Extension calls `http://localhost:8080` directly via `fetch()` or the
101109
`@wailsio/runtime` client with `setTransport()` pointed at that origin.

docs/adr/0030-confluence-capture-mechanism-matrix.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ flagged inline rather than presented as settled.
4949
per-tab session identity — everything §2.1 and the multi-tab problem
5050
need. Two distinct ways in, gated by different policies: (1) unpacked
5151
"Load unpacked" via developer mode — gated by
52-
`ExtensionDeveloperModeSettings` (a dedicated policy; whether
53-
`ExtensionInstallBlocklist "*"` also blocks unpacked loading is
54-
unconfirmed — the dedicated policy's existence suggests they're
55-
separate code paths); (2) the enterprise-legit route — IS&C allowlists
52+
`ExtensionDeveloperModeSettings` (a dedicated policy — CONFIRMED
53+
separate from `ExtensionInstallBlocklist` by goal 0044's research
54+
pass, 2026-08-13, against Edge's own policy docs: once set, the
55+
dedicated policy fully governs the Developer Mode toggle, independent
56+
of the install blocklist); (2) the enterprise-legit route — IS&C allowlists
5657
Mill's extension ID, optionally force-installed from a self-hosted CRX,
5758
no Chrome Web Store listing required. Route 2 is strengthened by Mill
5859
being open-source: IS&C can review the exact code being allowlisted —

docs/goals/0044-m365-bridge-dry-run.md

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,71 @@ extension-policy references). No Mill code changes expected beyond
3434
possibly a seed tweak; if the dry run finds a small fixable gap, it
3535
rides per the below-goal-granularity rule.
3636

37+
## Capture-path research — DELIVERED 2026-08-13 (deliverable 2)
38+
39+
Re-verified ADR-0030 against primary sources (Chrome Enterprise /
40+
Edge policy docs, MV3 docs, Chromium's own save-page design doc);
41+
the ADR's matrix held. New confirmations beyond it, each recorded at
42+
its home: `ExtensionDeveloperModeSettings` confirmed a separate
43+
policy from the install blocklist (ADR-0030 updated from
44+
"unconfirmed"); per-user native-messaging registration needs NO
45+
admin rights on either OS (ADR-0003 scope note added — its
46+
rejection stays protocol-authorship-only); self-hosted CRX
47+
allowlisting via `ExtensionSettings`/`ExtensionInstallForcelist`/
48+
`ExtensionInstallSources` is standard, documented practice with a
49+
live financial-sector precedent (an engineering blog documenting
50+
exactly this internal-CRX flow); `activeTab` is the
51+
permissions-minimal review story for an IT ask (no install-time
52+
warnings, user-gesture-scoped); `DownloadRestrictions=3` (the only
53+
policy that would kill the save-page floor) is explicitly
54+
rare/not-recommended per Google's own guidance; bookmarklets fight
55+
the SITE's CSP (real browser behavior, a documented spec-vs-impl
56+
gap), not just IT policy — last-resort verdict confirmed; a local
57+
TLS-interception proxy is rejected as an architectural non-starter
58+
(collides with the enterprise MITM CA; sees network bytes, never
59+
rendered DOM).
60+
61+
**Verdict (unchanged from ADR-0030, now source-hardened): two-tier.**
62+
Save-page-then-parse is the guaranteed floor and is already shipped;
63+
the ADR-0003 extension (allowlisted, self-hosted) is the target
64+
end-state, gated on one specific IT ask whose outcome is genuinely
65+
unknowable without asking.
66+
67+
**Owner's at-work checklist (the unknowables — nothing here is
68+
researchable further from outside):**
69+
1. Chrome or Edge? (Policies identical either way — just scopes
70+
which console.)
71+
2. `chrome://extensions` / `edge://extensions`: is the Developer
72+
Mode toggle present and flippable? Try "Load unpacked" with a
73+
trivial extension.
74+
3. The precise IS&C ask: "Can an internally-reviewed, open-source
75+
extension be added via `ExtensionSettings`
76+
(`installation_mode: allowed`), self-hosted via
77+
`ExtensionInstallSources` if not store-listed?"
78+
4. Bookmarklet probe on a real Confluence page — CSP refusal in the
79+
console, or a policy block?
80+
5. ⌘S a Confluence page ("Webpage, Complete") — does the saved
81+
`.html` carry the rendered body including dynamic macros/panels?
82+
(The one Confluence-specific fidelity unknown in the save-page
83+
floor.)
84+
6. `chrome://version` build number (Local-Network-Access enforcement
85+
status; affects the bookmarklet path only).
86+
7. Copy a full page and a small selection; run the seeded
87+
"Example: Clipboard inspector" — which `text/html` flavors
88+
actually land?
89+
90+
Full comparison table with per-row confidence and all source URLs is
91+
in the session's research report; the rows' conclusions are the ADR
92+
updates + verdict above.
93+
3794
## Acceptance (checkable)
3895

3996
- [ ] The dry run's gap list is written into this file, each gap
4097
named with what it would take.
41-
- [ ] The capture-path comparison (extension vs. fallback ladder,
98+
- [x] The capture-path comparison (extension vs. fallback ladder,
4299
with policy precedent and sources) is written into this file,
43-
decision-ready for the owner.
100+
decision-ready for the owner — delivered above, 2026-08-13,
101+
with the ADR-0030/ADR-0003 corrections landed in the same
102+
change.
44103
- [ ] Goal 0021's Phase 4 bullet points here and 0021's archival is
45104
unblocked (owner call remains its bar).

0 commit comments

Comments
 (0)