Files
edgeever/docs/browser-clipper-acceptance-588.md
T

88 KiB
Raw Blame History

Browser clipper live acceptance: Issue #588

简体中文

Updated: 2026-10-18. Tracks #588. This is an in-progress record, not a claim of complete cross-browser acceptance.

2026-10-19 addendum: Store-installed testing for #587 found stray brackets and original image URLs around Substack images. The local and store capture scripts are identical, and the existing article fixture reproduces the problem; earlier text and image readback did not check the surrounding formatting. 0.2.1 removes only Substack's textless image-viewer link wrappers, retaining images, captions, and prose links, with regression assertions on the archived document. This does not claim store publication of the fix or expand historical acceptance for other platforms.

Environment and baseline

  • Code: upstream 67f627cc3c702c9cf2fa3fab9fabc67c70206888; local main sync commit 7bd005ec, with the instance-permission, SPA-message, Facebook alias/UI-text, current Jike Web detail, Android initialization and cross-document cancellation fixes applied on top.
  • OS: macOS 27.0.1 (26A434), Apple Silicon; no Windows, Linux or physical Android coverage in the initial run; see the Android section for the USB follow-up status.
  • Extension: 0.1.17, Chromium/Firefox builds from this repository; older development builds with the same version are distinct.
  • Chrome: 155.0.8059.80 installed; current repository build awaits loading.
  • ego lite: 0.6.0.12, source page reports Chrome/154.0.0.0; now loads current repository apps/extension/dist, ID edmkendapkebphaoiiogflldcjllbmca, with no runtime/manifest errors. The older development extension was replaced.
  • Edge: 155.0.4283.62; native extension UI shows 0.1.17 and the same development-path ID. HN/Xiaoyuzhou toolbar saves completed. Firefox 158.0 loads dist-firefox in an isolated temporary test profile.
  • Local instance: http://127.0.0.1:8787, Web http://127.0.0.1:5173; startup/health is recorded separately from successful clipping.
  • Before clipping: 40 memos, 74 resources, one API token, 13 notebooks; clean only IDs created by this run.

Live records span build iterations. Round twelve defines the latest targeted runtime checks and build boundaries; Firefox retains each historical build boundary. Building a new package does not retroactively extend runtime acceptance.

Platform matrix

Historical sample states and expectations come from sources.json and prior records. Historical evidence does not become a current-run pass.

— = current login condition is not applicable, without claiming restricted-state acceptance; P = the specified sample/entry completed save/readback; P* = partial, see limitations; F = native save failed, diagnosis pending; B = external access/browser environment block; T = incomplete. First-browser results are from ego lite, not acceptance of Google Chrome. Historical samples, entries and login states are not exhaustive. Chrome/Chromium does not add a separate native Chrome installation gate.

Platform / source Login state and coverage Expected ego lite / Chromium Edge Firefox
Facebook
facebook
Signed-in detail/feed expansion in ego lite; Edge public detail (one image) and signed-in feed expansion (three images); Firefox public Float detail (three images) and controlled navigation Body, author, time, one image; exclude comments P P* P*
Instagram
instagram / instagram-slide-captions
ego lite/Firefox: NASA 3/3 and Google 20-media; Edge: public Google 20-media Three-image sample / one video cover and 19 photos, full combined caption P P* P
LinkedIn
linkedin / linkedin-ugc / linkedin-ugc-guest / linkedin-person
ego lite signed-in UGC and two neighboring company-feed cards; Firefox guest personal share/UGC; Edge signed-in SDUI UGC detail with eight images passed Distinct activity/ugcPost/share identity, author/job title, complete body and image order P* P* P*
Threads
threads / threads-short-link
ego lite signed-in four-image/short-link samples passed; Firefox signed-in details and exact NASA profile-feed card passed; Edge guest overlay correctly refused; signed-in four-image/short-link details and round eleven text/photo quotes passed Complete caption, four images / one video cover, actual shortened-link destination P* P* P
Bluesky
bluesky / bluesky-feed
Public details and exact quoted feed card passed in ego lite/Firefox; Edge signed-in quoted feed with two images passed Exact card, body, quote and original image; exclude neighboring cards P P* P
Hacker News
hacker-news
Public signed-out detail; toolbar in three browsers, context menu in ego lite jnnnthnn, 92 points, final main-post paragraph and external link; exclude comments P P* P
V2EX
v2ex
Public detail in ego lite via toolbar Main post, both supplements and their times; exclude replies P P P
小宇宙 / Xiaoyuzhou
xiaoyuzhou / xiaoyuzhou-hosts
Public episode; toolbar saves and note reopen in three browsers Complete Show Notes, timeline, explicit hosts and cover; no stale episode after navigation P P* P
雪球 / Xueqiu
xueqiu / xueqiu-feed / xueqiu-feed-detail / xueqiu-feed-detail-second
Public details in three browsers; ego lite truncated public feed fetched complete body; Edge signed-in recommended home card with complete body/eight images passed Exact card, complete article, author, explicit stock tags and images P* P* P*
微信公众号 / WeChat
wechat
Public article in ego lite via toolbar Body hierarchy, author/publication, 21 images; exclude footer widgets P P P
即刻 / Jike
jike / jike-grid / jike-long / jike-feed
Public topic card and signed-in Web detail/gallery; ego lite current feed passed two expanded long posts and one image post; Edge signed-in following card passed; round twelve keeps nine image positions in all browsers, with honest 8/9 archival in Edge Post identity, long-text expansion, grid/original images; never capture whole feed P P* P*
Substack
substack-note / substack-article / substack-paywall
Notes in three browsers; Full article and 3/3 images in all three browsers; user-triggered ego lite toolbar; paid-preview refusal/selection passed Five Note paragraphs / article sections and captions; reject restricted full capture, permit explicit selection P* P* P*
Medium
medium-article / medium-public
Edge current member preview; public full story passed in Edge/Firefox; ego lite public full story/preview card and two images passed Original: 11 visible text blocks/one image; earlier Edge/Firefox public story: 16 text blocks, five list items/one image; final ego lite: subtitle, 17 body/preview blocks and two images; rounds eleven/twelve verify 40 code blocks/highlighting in all three browsers; original member full story remains unclaimed P* P* P*
少数派 / Sspai
sspai
Public article: ego lite/Firefox archive nine images; Edge archives 8/9 with correct feedback and reopening Own authors, update blockquotes, original time and nine images; CDN archival P P* P
掘金 / Juejin
juejin
Public article: ego lite/Firefox toolbar saves, two archived images and reopening Exact code, three-column/four-data-row table, two images and time P P P
豆瓣 / Douban
douban-book / douban-movie / douban-music / douban-note / douban-comments
ego lite/Firefox book/movie/music reviews, diary and exact short comment passed; Edge movie/music/diary/comment now added Book/movie/music reviews, diary, exact short-comment card; book review seven paragraphs/six images; Edge specified other four types now covered P P P
BOSS 直聘 / BOSS Zhipin
boss-login-required / boss
This issue tracks restriction feedback; round twelve Edge refuses the actual preview with zero writes; ego lite is signed in/full-readable Firefox verifies refusal/visible selection; full jobs remain #589 — P* P*

Procedure per browser and source

  1. Record full browser version, extension version/path, code SHA, actual source URL, login state, visible final paragraph and image count. Establish expectations before saving.
  2. Save a real detail page through the native toolbar, then its native context menu. For supported feeds, right-click one exact card. Record entries separately; direct function calls or synthetic DOM events do not replace native actions.
  3. Check feedback, title, beginning/end, author/job title, publication precision, source and tags; exclude neighboring cards, comments and login widgets.
  4. Compare source image inventory with instance attachment URLs, counts, hashes and browser decoding. Block source/CDN domains, close and reopen the memo, and verify body/attachments. This does not establish cold-start offline support.
  5. Record timestamp, entry, memo ID, attachment counts, feedback, result and evidence path. Results may pass, fail or be externally blocked; page readability is not successful clipping.
  6. Delete this run's memos/resources/tokens; compare initial ID sets to preserve existing data. Clean only this run's objects.

Signed-in and failure cases

ID Scenario and expected result Current result
B01 Signed-in social feeds / Jike Web: expand complete text, retain one identity and all images, exclude neighbors. Facebook/Threads signed-in feeds and this round’s Jike Web long/image cards plus neighboring LinkedIn company-feed cards passed; browser/layout limits remain in the matrix
B02 Navigation/card reuse during expansion: cancel stale task without a wrong-identity or partial-text memo. Controlled SPA cancellation passed; after the new fix, real Facebook expansion with controlled cross-document navigation created no memo in ego lite and Firefox. Natural card recycling remains pending
B03 Login/paywall restriction: refuse full capture and hidden content; permit explicit visible selection. Substack full paid-preview refusal passed; explicit 221-character visible selection saved and reopened in ego lite. Firefox BOSS login-preview refusal and explicit 117-character selection/save/reopening passed
B04 Some real image downloads/uploads fail: retain body, report remaining external images, never claim complete archival. Initial Threads 3/4 and follow-up Edge Sspai 8/9 matched partial-image feedback. Threads later passed 4/4; failure causes remain unconfirmed
B05 Reopen after blocking source/CDN: fully archived attachments load from the instance and decode. Specified earlier cases passed; second follow-up decoded 34 Firefox, 33 Edge and 3 ego lite instance images under local-only image/connection policies
B06 Cleanup: preserve initial memo/resource/token ID sets and remove this run's objects. Earlier rounds passed. Second follow-up removed 19 notes, 80 resources and one token, preserving original ID sets and all 40 note content hashes

Firefox Android

The manifest declares gecko_android.strict_min_version = 142.0, and the extension README also declares Android 142+. On 2026-10-17, the Mozilla store API listed public version 0.1.17 for both Firefox Desktop 140+ and Android 142+. Android compatibility is therefore currently declared for the same Firefox extension; this is separate from the EdgeEver Android app. Neither the declaration nor the store listing proves runtime acceptance. The user subsequently connected a physical RMX5200 over USB (Android 17, arm64). Mozilla Firefox 158.0 was installed after APK signature verification. web-ext temporarily loaded extension 0.1.17 from the current workspace. A dedicated token and USB mapping connected to the local instance; after the user granted host access, the extension retrieved 13 notebooks. Temporary loading does not prove store installation or extension upgrades.

The device first reproduced a background initialization failure: Android lacks chrome.contextMenus/chrome.windows, and unconditional desktop listener registration threw TypeError. The popup showed “Unknown,” and saving failed with Receiving end does not exist. Menu/window listeners now register only when the APIs exist, and install-time menu registration checks availability. Extraction, permissions, and saving remain unchanged. A regression failed before the fix and now verifies initialization, capture-mode detection, and saving without these APIs; the existing desktop menu installation regression also passes. These three guards can be reverted independently. The main risk is disabling desktop entry points accidentally, covered by the desktop menu test.

Physical-device case Result and evidence
Sspai: time-management tools Saved from the native extension menu; author 小雨姑娘, date, and source match. The complete body recorded before capture is preserved, with 5/5 images archived.
Jike H5: nine-image post Saved from the native entry; target author 彗星咻咻咻 and body preserved, 9/9 images archived, comments excluded.
Reopen both notes on the phone The actual Web editor displayed matching bodies under a CSP allowing only local images/connections. All 14 instance attachments decoded; external requests produced real CSP violations. File sizes and SHA-256 hashes matched all 14 stored resource records.
Hacker News Source connection timed out on the phone; no note created. This is neither a clipping pass nor a demonstrated clipping failure.

Coverage is limited to “Clip current page” in the Android Firefox extension menu, for an article and a public social detail page. Android has no desktop context-menu/separate-window entry for this extension. Single-card feeds, native selections, signed-in sites, and remaining matrix cases are unverified on the device. After the fix, 453 extension tests passed, 0 failed; Web/mobile type checks, Web build, and both extension builds passed. The 2 test notes, 14 resources, and dedicated token were removed by ID. The phone's test token and 7 copied local-session cookies were removed. All original 40 note content hashes and the exact 40/74/1/13 note/resource/token/notebook ID sets were preserved.

2026-10-18 overall bugfix-review-loop

Scope is all current uncommitted #588 extension code, fixtures, regressions and acceptance records. The unrelated apps/mobile/.gitignore change is preserved; work remains on main. Correctness, simplification and requirement boundaries are checked, with independent read-only reviews of identity/navigation and content conversion.

Three classes of omission are repaired. Jike Web removed button-semantic nodes together with their images, reporting a complete nine-image post with only eight images. It now reuses H5's existing media-preservation rule: confirmed images remain, image buttons are unwrapped and actual controls are removed, through one small shared helper. Jike and Medium rejected whole visibility:hidden body wrappers, losing descendants explicitly restored with visibility:visible; existing platformReadableCopy now filters those descendants individually. Hidden-card and identity protections remain. Medium skipped every h1, losing later body headings; it now skips only its own first readable title.

Five evidenced regressions cover three image/container button variants, Medium restored visibility/body headings, and Jike restored body/media. They reproduce failures before repair and pass afterward. Final review finds no further substantive issue. No permission, API, dependency, retry or required metadata is added. Repairs are confined to the two readers and shared control cleanup and can be reverted independently. Visibility/media filtering remains the main risk, constrained by hidden-content, image-order, completeness, unchanged-source-DOM and existing identity regressions.

The latest complete non-E2E run passes 3,743 tests with zero failures, including 481 extension tests. One real Windows cwd-lock case is skipped on macOS under its existing platform condition. Root/mobile typechecking, Web/Chromium/Firefox builds and diff checks pass. Firefox lint has zero errors, zero notices and seven existing dependency warnings. This is code/automated verification, without repeating native live-site/Android actions or retroactively claiming latest-build hardware acceptance. No business test clip or token is created; login settings remain. No commit, push, deploy, issue update or closure. Evidence: /private/tmp/edgeever-issue-588-review-20261018.

2026-10-18 tenth round: Douban, Medium and formatting repairs

The retained Edge window and local instance are reused. The user authorizes new ego lite space 21 and completes one Medium human verification. Existing signed-in profiles are reused without copying or clearing cookies. All saves use actual toolbars/native context menus; helpers only observe sources and add QA markers.

Case Actual save and source comparison
Edge Douban movie review 17798662 Toolbar save preserves title, author, complete body and 2/2 images.
Edge Douban music review 17855287 Toolbar save preserves title, author, complete body and 3/3 images.
Edge Douban diary 814698224 The live source adds _i; actions use that actual tab URL, while the stored source normalizes correctly. Complete body and 6/6 images are preserved.
Edge Douban book comment 4237804504 Native context-menu save targets the selected card, preserving body, author, rating and own permalink. No image; avatars are excluded. Text-selection misclicks are not counted as card acceptance.
Edge same eight-image Xueqiu article All 96 visible nonempty body blocks are rechecked. The affected span now stores a real bold mark without literal stars. 8/8 images are archived.
Edge same Bluesky quote 3my43eyfzs225 Own/quoted body and 2/2 full-size images remain, including image alt descriptions; the localized alt badges no longer enter prose.
ego lite public Medium story 17d75b342aeb Actual toolbar save finally preserves subtitle, 17 body/preview text blocks, five list items, explicit ending and 2/2 images, including the complete preview destination.

Two formatting repairs are made. CommonMark cannot close bold after Chinese punctuation immediately before unspaced prose; shared HTML conversion moves only that boundary punctuation outside bold, preserving all characters and literal code. The punctuation itself is no longer bold. Bluesky image-viewer buttons retain images and alt descriptions; the observed immediately adjacent, absolutely positioned ALT/localized badge is removed. Ordinary prose containing the same words remains. The first repair affects shared HTML conversion; the second is Bluesky-only. Each can be reverted independently. The worst risk is formatting/caption loss; regressions check stored nodes, literal prose/code, alt descriptions and unchanged source DOM.

Paragraph comparison also exposes a real Medium omission: the in-story preview lacks [data-selectable-paragraph], so existing block selection loses its title, description, destination and CSS cover. A failing regression demonstrates this before adding article-scoped titled link cards. Labels become valid links in source order, with visible CSS background images and existing images retained. Existing visibility/URL sanitation remains, excluding hidden cards and outside recommendations. No paid content or API is added. Upstream structure changes are the main risk; the Medium reader change can be reverted independently. Instance APIs, authentication, storage and migrations are unchanged. The repaired native toolbar save uses the same public article without refreshing it into a verification page.

All six Edge notes reopen in Edge's own editor with source/CDN access blocked, matching stored text and decoding all 21 local images. Main-world probes record 27 blocked connections and 27 blocked image loads for six source pages and 21 CDN addresses. The final Medium note also reopens in ego lite's own editor with its source/two CDN URLs blocked and both local images decoded. The earlier one-image Medium note remains evidence of the omission and is excluded from final completeness acceptance.

This round creates eight notes and 24 resources, including the pre-repair Medium note. All 24 API downloads match resource sizes/SHA-256 and independently downloaded originals byte for byte. The last diary source initially returns 418 to the independent fetch; the correct site Referer produces matching bytes. Product downloading/retry behavior is unchanged. All 40 original content hashes remain intact.

All 476 extension tests pass, with root/mobile typechecking, Web/Chromium/Firefox builds and diff checks passing. Three-view review finds no outstanding substantive issue. The six Edge cases use this round's preceding build containing both formatting repairs. The final build additionally changes only the Medium reader and is tested in ego lite. Firefox's new package only builds; no runtime claim is extended retroactively.

All eight owned notes and 24 resources are deleted, the dedicated token is revoked and returns 401. Only this round's token is removed from both browsers; other extension settings and site logins remain. Exact original 40/74/1/13 note/resource/token/notebook ID sets and all content hashes match. Temporary helpers/receivers are removed/stopped, product hashes match the final build, and the test space is cleaned up. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/tenth. No commit, push, release or issue closure.

2026-10-18 Edge signed-in feed ninth-round follow-up

The user signed in to Xueqiu, Facebook, Jike and Bluesky in the retained Edge window. This round uses the rebuilt and reloaded Chromium extension. The Firefox package only builds; earlier Firefox runtime results do not become acceptance of this new code.

The signed-in Xueqiu home uses classic .timeline__item__main, .timeline__item__info, a.date-and-source and a.user-name classes without module suffixes. Existing selectors only handled suffixed classes, so exact feed-card targeting failed. The repair adds these four classic selectors; pointer tracking and pre-save checks still share the locator, own-author/permalink checks and same-origin detail reading. Scope is Xueqiu targeting; the worst risk is selecting another card. Reverting the four selector additions rolls it back; regression and live checks verify identity and exclude neighbors. The new classic-layout regression fails before the repair and passes afterward. All 473 extension tests pass, with root/mobile typechecking, Web and both extension builds passing. Correctness, simplification and requirement-boundary review finds no new substantive issue. No API, permission, retry or required metadata is added.

Native single-card context-menu case Source and observed result
Signed-in Xueqiu recommended home feed 1843761023/412754286: the truncated card resolves to its full public detail, with correct title, author and source; text from all 96 visible nonempty body blocks and 8/8 images is preserved. Hidden attribution is excluded from expected body text. This is the recommended feed, not a personal following feed.
Signed-in Facebook NASA feed pfbid0kAjTCFHeSmCB9TePMvGo3PhbNbh5jFVu3iUpC5HodB45dgpke1fCdRZQHaJr7hXYl: initially only the first sentence and expand control are visible; the native action expands and preserves the complete caption and 3/3 images, excluding the neighboring aircraft post and comments.
Signed-in Jike following feed 6ad3ff33b6e171bc9b673a51: current Web card body, eight full external links and four author mentions are retained. Its own picture declaration is empty; link previews/avatars are not counted as post photos. The preceding day's post by the same author is excluded. Body is already presented, so this adds no automatic-expansion claim.
Signed-in Bluesky profile feed bsky.app/post/3my43eyfzs225: own body, Josh Sternberg's quoted body and 2/2 full-size images are retained, excluding neighbors. Edge now has an actual save result rather than a loading block; other detail layouts retain their matrix limits.

All four notes reopen in Edge's own Web editor with text matching stored nodes; all thirteen instance images decode. Each attachment matches an independently downloaded original byte for byte in order; API downloads match resource sizes/SHA-256. A page policy permits only local instance images/connections. Main-world probes record 17 blocked connections and 17 blocked image loads for the four source pages and thirteen CDN URLs while local attachments remain readable. Helpers only observe sources, read back the instance and add QA markers. Every save uses the native context menu; selected-text misclicks and actions that never dispatch are excluded.

Two minor formatting observations remain: one Xueqiu bold span shows literal **, and each Bluesky quoted image includes a localized alt-text badge. Text and images are intact, including image alt descriptions. This is not pixel-perfect or exhaustive formatting acceptance; no translation- or style-dependent guessing rule is introduced to strip those badges.

The four owned notes, thirteen resources and dedicated token are removed; the revoked token returns 401. All original 40 content hashes and exact 40/74/1/13 note/resource/token/notebook ID sets match. Only this round's extension token is removed; other extension settings and site logins remain. Browser cookies were neither replaced nor cleared. Temporary extension helpers and receivers are removed/stopped, and product hashes match this round's final build. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/ninth. No commit, push or release.

2026-10-18 Medium eighth-round follow-up

The user first completed Edge's human verification on scottbatson.dev. The original What Should Programmers Do While the AI Writes Code? now displays “Create an account to read the full story” and a members-only notice, unlike its historical full-body state. Human verification does not establish access to paid content.

  • Edge's native toolbar saved the original sample's currently visible preview: title, subtitle, author, source, all 11 visible text blocks including the caption, and 1/1 image. Terminal feedback confirms all images archived. The hidden original ending is absent and image-viewer prompts are excluded. This verifies visible-content boundaries, not the original full two-image article, code or sections.
  • The same author's profile links to Come to my Medium Day talk, which is fully readable without a membership gate. Edge's native-toolbar save preserves the title, subtitle, author, all 16 distinct text blocks, five list items and explicit ending “Hecklers are permitted but not encouraged”, with 1/1 image archived and complete feedback. Another technical story redirects to medium.engineering and encounters that domain's verification; it is not a save pass.
  • The user separately completed human verification for the same public article in the original Firefox QA profile. Firefox's native-toolbar save preserves the complete source text, five list items, ending and 1/1 image, with all-images-archived feedback. No Cloudflare verification cookie was copied and no site verification was bypassed.

Both Edge notes and the Firefox note reopened in their own Web editors with matching stored bodies and all three instance images decoded. Each attachment matches a fresh independent source download by size/SHA-256; all API downloads also match metadata. Only the QA Web pages restrict external images/connections. Edge's main-world probes record four connect-src and two img-src rejections for both articles and real CDN images. Firefox separately records two connect-src and one img-src rejection for its article and real CDN image. Edge's reopening helper needs the local Web tab foregrounded for UI rendering; earlier operations without returned evidence are excluded and the completed rerun was checked individually.

All three notes and three resources were deleted by ID. The dedicated token was revoked and verified to return 401; only matching extension tokens were removed in Edge/Firefox. Firefox initially had no local session cookie. Its one copied 127.0.0.1 session changed value during Web readback; cleanup removed only that QA host/path/name session and verified none remained, preserving other site logins and verification cookies. Edge's original cookies were not replaced. All ten temporary extension helper files, two helper services and plaintext credentials were removed. Product artifact hashes are exactly unchanged. Original 40 memo content hashes and exact 40/74/1/13 memo/resource/token/notebook ID sets are preserved.

No product code changed; previous 472-test/build results still apply. Nothing was committed, pushed or released. Medium in ego lite was not rechecked this round. The original members-only full story and other Medium layouts such as code do not inherit a pass from the public short article. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/eighth.

2026-10-18 Edge signed-in seventh-round follow-up

The user signed into Threads and LinkedIn in the retained Edge QA window 1529310870. The same profile and host grant were reused. The former ego task space 12 no longer exists, and no replacement space was created. Edge's original local session returned 200 through the actual API; a dedicated token was created through the normal owner API without replacing or copying browser cookies.

  • Threads four-image detail DZceA72Drjf: the login overlay is gone and the native-toolbar save reports all images archived. The complete three-paragraph caption, NASA author, publication time and 4/4 images are preserved.
  • Threads shortened-link detail DeMqtuYgkaL: native-toolbar saving preserves all four caption paragraphs, the go.nasa.gov/Artemis2LunarScience destination, author/publication time and one video cover, with all-images-archived feedback. A cover is not a video-file archive. The source helper's raw innerText.includes prefix boolean is not an integrity criterion; final acceptance compares the complete normalized public source caption with saved text, rather than only checking that potentially incorrect storage reopens consistently.
  • The same LinkedIn UGC detail 7497764716677758977 uses the signed-in SDUI layout. Its own card binds to its activity identity, is not hidden and has no login overlay. Native-toolbar saving preserves the entire source body, Friends of NASA author and 8/8 images, with all-images-archived feedback. Dr. Nancy Grace Roman: remains literal text. This detail is already expanded, so automatic expansion or feed-card coverage is not claimed.

All three notes reopened in Edge's own Web editor with matching stored body nodes and all 13 instance images decoded. Every attachment matches a fresh independent source download in order; all 13 API downloads match metadata sizes/SHA-256. The page allows only instance images/connections. Synchronous main-world probes record four actual connect-src rejections for Threads, LinkedIn and both real CDN images, plus two img-src rejections, while local images still decode. These are the specified detail samples; other feeds, adjacent cards and natural recycling do not inherit a pass.

Edge's Medium sample redirects to scottbatson.dev but remains on Cloudflare security verification. The page is retained for the user to complete verification; no challenge page is clipped as an article. A BOSS guest page was observed only: this visit directly displays its job description, without reproducing the older login-to-view state. No save was triggered and no BOSS acceptance pass is added.

All three test notes and 13 resources were deleted by ID. The dedicated token was revoked and verified to return 401. Only the matching extension token was removed, with other settings unchanged. Eight temporary helper files, two local helper services and plaintext cookie/token files were removed; product artifact hashes are exactly unchanged. Original 40 memo content hashes and exact 40/74/1/13 memo/resource/token/notebook ID sets are preserved. Original browser cookies were unchanged; Threads/LinkedIn logins and host grants remain. The QA window retains only both sites and Medium for follow-up.

No product code changed in this round; the previous 472-test/build results still apply. Nothing was committed, pushed or released. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/seventh.

2026-10-18 Firefox and Edge sixth-round follow-up

  • Firefox passed the native-toolbar Google Instagram 20-media sample DeKe6teEpya, with terminal feedback confirming all images archived. The optional public guest-page login prompt was dismissed normally without changing visibility checks. The complete source caption, author, one video cover and 19 photos are preserved. This source places its complete caption in the parent post field, with no separate slide-caption fields; another caption layout is not claimed. All 20 archived files match fresh independent source downloads in order. Reopening in Firefox's own Web editor with external images/connections restricted preserves the body and decodes all 20 local images; an actual Instagram CSP rejection was recorded.
  • Firefox added native-toolbar Douban movie review 17798662, music review 17855287 and diary 814698224, preserving full source bodies, titles and authors with 2/3/6 archived images. Native context-menu capture of short comment 4237804504 was preceded by target-marker verification. It preserves the author, complete 130-character body, list URL and #c-4237804504 fragment, excluding neighboring comment 4259416906. All four notes passed source-blocked reopening in Firefox, with matching bodies and all 11 images decoded. Window activation/right-click fixes affect QA tooling only; pointer actions that missed the card are excluded from product failures.
  • Edge added native-toolbar saves of the same Google Instagram 20-media sample and the NASA public Facebook detail pfbid0dPToN66CzcAHGMoaNe3jszH4FfBKvqkE5gogCNJkTxXDPsSGYrGvcVwsLgByyMQQl, both reporting all images archived. Instagram preserves the complete caption and order, with all 20 files matching fresh independent downloads. Facebook preserves the complete post, author, exact time and one image, excluding comments. Its star emoji is rendered as an image and absent from source innerText; headline and paragraph were checked separately to avoid a false body-loss report.
  • Both Edge notes reopened in Edge's own Web editor with matching bodies and all 21 local images decoded under local-only img-src/connect-src. Isolated-extension probes alone do not establish main-page request blocking. Final synchronous main-world injection starts the probes and a subsequent synchronous read records actual connect-src rejections for Instagram, Facebook and the real source CDN image, plus an img-src rejection for that image. Earlier asynchronous main-world probes did not return usable evidence and are excluded. Global browser security settings were unchanged.
  • Edge Threads has a guest login overlay: native saving refuses with login guidance and creates no note. LinkedIn initially renders its full guest body, then displays a login overlay and marks main as aria-hidden="true"; the actual native save safely refuses with no new note. Background innerText does not establish readability, and established visibility checks were preserved. Both login pages remain in the dedicated window for user sign-in; Edge signed-in acceptance is pending. One earlier mouse action did not dispatch saving; the real native AX refusal is recorded separately.
  • Firefox's specified Medium sample remains on Cloudflare verification without an article body. This is an access block, not a clipping failure or save pass.

This round has seven qualified test notes and 52 archived resources: Firefox 31, Edge 21. The 40 Instagram files additionally match independent source downloads in order. All 52 API downloads match metadata sizes/SHA-256. Seven notes and 52 resources were removed by ID; the dedicated token was revoked and verified to return 401. Only matching extension tokens were removed. Firefox's seven copied local cookies were removed while website logins and host grants remain. Edge's original local session cookie was restored and verified through browser readback. All 18 temporary extension helper files, two helper services and plaintext credential files were removed/stopped; product artifact hashes are exactly unchanged. Original 40 memo content hashes and exact 40/74/1/13 memo/resource/token/notebook ID sets are preserved.

This round adds acceptance evidence and documentation only, retaining the previous 472-test/build results. Nothing was committed, pushed or released. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/sixth.

2026-10-18 ego lite native-toolbar follow-up

In the same task space, the user manually opened the extension and supplied a supported-page screenshot, then clicked Save current page. The instance received two test notes for The Dot and the Swarm. Both retain the title, author, publication time and all 26 current source body/section fragments, with 3/3 images archived each. Source collection excludes two explicit book-order/share buttons and uses the article title rather than the site-navigation heading. The final notification text was not supplied, so this case does not claim its wording was verified.

Both notes were reopened in ego lite's own Web editor and matched stored body nodes. A policy limited external images/connections only on that Web page; actual source-site and Substack CDN probes were blocked by CSP while all six instance images decoded. API downloads of all six attachments matched metadata sizes and SHA-256 digests. The earlier Unavailable status occurs when automation targets the native toolbar; it remains an automation window-targeting limitation. Recognition, saving and source-blocked reopening through the manually triggered native entry now pass, without parser or permission changes.

Both test notes and six resources were removed by ID. The dedicated token was revoked and verified to return 401; only the matching extension token was removed, and the plaintext credential file was deleted. All original 40 memo content hashes and exact 40/74/1/13 memo/resource/token/notebook ID sets are preserved. This follow-up changes acceptance documentation only and retains the previous 472-test/build results. Nothing has been committed, pushed or released.

2026-10-18 fourth follow-up: feeds and full articles

  • Three signed-in Jike Web feed cards passed native context-menu saves: same-author originals 6ad2adab709f50754cbd2921 and neighboring 6ad15c2977477d8a9f97733b, plus topic image post 6ad399f0141b85b29268b593. The extension clicked the real expand control for both long posts, preserving complete bodies, mention/topic links and their own identities while excluding neighbors and collapse controls. The image post preserved its author/caption and archived 1/1 original image. Independent source bytes matched the instance hash; the 1179×2556 instance image decoded after source/CDN blocking. Its first save retained an external image; a separate recheck succeeded. The first failure remains unexplained; no speculative retry was added.
  • Current Jike feed cards have no own DOM permalink. Earlier checks correctly refused body-reference or Fiber/alternate guesses. New evidence identifies each selected card's committed DOM-host __reactProps$…, following element props.children to its own public original post. The reader returns only whitelisted ID/type/body/author identifier/image URLs, without account state or authenticated APIs. Complete visible body, author link and images must match, and the same marked node's current ID is checked again before writing. Only verified ORIGINAL_POST cards are supported; reposts, conflicts and missing state are refused. React internals remain an upstream-layout risk: changed structures fail closed rather than capturing the whole page.
  • A controlled identity change during the real expansion click, leaving the original DOM marker/body in place, produced zero notes from the native context-menu action. This is controlled identity-change coverage, not natural scrolling/recycling acceptance. Live Chromium also exposed rejection of executeScript.args = [undefined]; initial calls now use an empty array, and the integration harness enforces this JSON argument constraint.
  • Jike mention/topic layout divs produced invalid Markdown links containing blank paragraphs. After completeness validation, plain text labels now become inline content. Fresh native saves were compared with complete source bodies and parsed links, instead of merely reopening incorrect stored content.
  • Public Bluesky profile feed post bsky.app/3mxzez2m7wk2r passed native context-menu saves in ego lite and Firefox, retaining the complete main/quoted text, preview title/description/destination and 1/1 original image without neighbors. Live checks exposed literal Markdown syntax around a block preview link. The repair keeps its complete label inline, separates its image and preserves spaces between text blocks. The real fixture failed before the repair and passed afterward. Final saves reopened in each browser under source blocking, with image hashes matching independent source downloads. An earlier zero-image read occurred before asynchronous archival finished; final states were subsequently checked.
  • A public truncated Xueqiu home-feed card saved through its native context menu as 8378622539/412716009, obtaining the complete public same-origin detail and explicit SZ300308, SZ002384, SZ300476 tags. Source/author matched and neighbors were excluded. Source-blocked reopening passed. Existing stock inlineMath attributes and KaTeX annotations were checked separately before removing duplicated render text for body comparison. Signed-in home feeds were not tested in this round.
  • Two same-author neighboring cards in NASA's signed-in LinkedIn company feed passed native context-menu saves: activity:7516859007463047169 and activity:7516590973359931392. The extension expanded their real controls, which then disappeared. Complete bodies, distinct sources, author and 1/1 image each were retained without mixing posts. Both images matched independent downloads, and both notes reopened under source blocking. Only an informational website modal was dismissed; page-view visibility settings were unchanged.
  • The complete public Substack article The Dot and the Swarm passed native toolbar saves in Firefox and Edge: title, author, date, all 24 independently recorded body/section fragments and 3/3 images were retained. Both browsers reported complete archival; each reopened its own note under source/CDN blocking with matching body and three decoded instance images. Audio/video files were not archived.
  • During fourth-round automation the same article showed Unavailable in ego lite's native toolbar, producing no note. Diagnostics show the target article window has the correct active tab while the browser API reports another normal window as last focused, with no URL on its active tab; automated native-toolbar interaction returns to that window even after explicit target-window focus. The user then manually opened the extension in the same task space and supplied a screenshot showing the supported-page status. Manual recognition passed; actual saving and source-blocked reopening were still pending at that point and subsequently passed as recorded above. Edge/Firefox passes do not extend ego lite acceptance or justify changing the established article parser or broadening permissions. This browser-window environment limitation remains under investigation.
  • The final ten qualified notes and eleven archived attachments reopened in their own browsers with sources blocked: four images in ego lite, four in Firefox and three in Edge. Six reproduction/intermediate-build notes and three attachments are excluded from qualified results. All sixteen test notes and fourteen resources were cleaned by ID; all fourteen API downloads matched stored size/SHA-256. The original forty note hashes and exact 40/74/1/13 memo/resource/token/notebook ID sets were preserved.
  • The dedicated token was revoked and returned 401; each browser removed only its matching QA token. Firefox's seven copied local cookies were removed while Threads login and host grants were retained. Edge's original local session value was restored and read back, and its owned window closed. Four temporary extension QA files and two local helper servers were removed/stopped, with product build hashes unchanged. Plaintext credential files were deleted. Ego lite retains the diagnostic page in task space 12 for continuation in the same space.
  • The local Web session proxy temporarily timed out, and Wrangler's asset map remained stale after the Web rebuild. Restarting this task's bun run dev restored service. Production API/authentication/storage were unchanged. The final 472 extension tests passed with zero failures; Web/mobile typechecks, Web build and both extension builds passed. New code is confined to the extension; Web/mobile checks do not imply new browser acceptance. Changes remain uncommitted, unpushed and unpublished.

The final review covered correctness, removable complexity and requirement boundaries, with no further evidenced substantive code findings. Jike feed reading and both link-normalization repairs can be reverted independently. The main risks are identity mistakes after upstream layout changes and altered link formatting; identity/body/image checks and actual document-parsing regressions constrain them. Browser-window environment limits and untested matrix entries remain explicit.

2026-10-17 third follow-up live acceptance

  • ego lite added Douban movie review, music review, diary, exact short-comment card, and the Threads shortened-link detail. Complete review/diary bodies and 2/3/6 images were preserved. Comment 4237804504 retained its author, complete body, working list URL and #c-4237804504 fragment, excluding neighbor 4259416906. Two native context-menu actions each saved one correct comment. Threads retained all four caption paragraphs, go.nasa.gov/Artemis2LunarScience and one video cover, excluding replies.
  • Firefox added public signed-out Bluesky detail, the Instagram NASA three-image detail, and LinkedIn guest UGC. Bluesky preserved its body, author, publication time and original image, excluding the author's subsequent reply. Instagram preserved the full caption and three images without comments. Its terminal popup feedback was not captured, so feedback acceptance is not claimed; the saved result, archival and reopening were checked. After closing the visible optional sign-in modal, LinkedIn preserved the complete body, author, publication time and eight images. Its normalized source retained the same UGC ID, checked against the card's own data-attributed-urn and activity alias. An old QA helper mistakenly rejected the absence of the full slug after valid URL normalization; this was not a product defect.
  • These eight qualified scenarios produced nine notes (including the two comment saves) and 24 instance attachments. All notes reopened in their own browsers under local-only source policies; bodies matched stored nodes, actual CSP violations proved external image/connection blocking, and all 24 images decoded. LinkedIn was additionally compared with the source paragraph by paragraph, preserving Dr. after the repair. An earlier LinkedIn note that lost the honorific is a defect reproduction, excluded from passes. All 10 notes and 32 resources from this round were cleaned; all 32 downloads matched size/SHA-256. Original content hashes for 40 notes and memo/resource/notebook ID sets were preserved. The dedicated token and local test session were temporarily retained pending Threads login; see the completed follow-up cleanup below.
  • Firefox Threads has a sign-in modal that could not be dismissed normally; the background post is aria-hidden. The extension refused and created no memo. The user was asked to sign in in the isolated test window; visibility checks were not relaxed. Signed-in follow-up results appear below.
  • Build chronology: the three Douban details preceded this round's new fixes; Threads/comments and Firefox Bluesky/Instagram used the shortened-link repair build; final LinkedIn was saved again on the literal-prefix repair build. Builds do not retroactively expand other acceptance claims. The final 457 extension tests passed with zero failures; Web/mobile typechecks, Web build and both extension builds passed. Changes remain uncommitted and unpushed.

Firefox Threads signed-in follow-up

After Firefox was restarted, the original debugger connection and temporary extension exited, while the daily window used a different profile. The same QA profile and build were restored with its local host grant intact; the user completed login in the restored QA window. Daily Firefox site sessions were neither cleared nor copied.

  • Native toolbar, shortened-link detail DeMqtuYgkaL: the live href actually used https://l.threads.com/?u=…. All four caption paragraphs, destination link, author/publication time and one video cover were preserved, with complete-archival feedback.
  • Native toolbar, four-image detail DZceA72Drjf: complete caption and four archived images, excluding replies.
  • Native context menu, exact card Decc755lYhC in the signed-in NASA profile feed: its timestamp link and context target marker were checked before saving. The full “space jellyfish” caption, author/time, four images and target URL matched, excluding the pinned podcast and neighboring second thread Decc8jiFYaY. This is not acceptance of natural card recycling.
  • All three notes reopened in Firefox's own Web editor with actual CSP blocking of external source/CDN images and connections. Bodies matched the source and stored nodes; all nine instance attachments decoded and matched stored sizes/SHA-256 hashes.

The entire third round covers 11 qualified scenarios, 12 qualified notes (including two comment saves), and 33 source-blocked decoded attachments. One earlier note with the missing honorific is reproduction evidence only. All 13 test notes and 41 resources were cleaned by ID; all 41 files matched size/hash metadata. The original 40 note content hashes and memo/resource/token/notebook ID sets (40/74/1/13) were fully preserved. The dedicated token was revoked and verified to return 401; its Firefox setting and seven copied local cookies were removed. The new Threads login and host grant remain. After ego lite's original QA space 9 disappeared, the user explicitly authorized a new cleanup space. Only the local test instance's token was checked: it returned 401 and was removed, with every other extension setting verified unchanged. The cleanup space was closed. The temporary plaintext credential file was deleted.

The Firefox guest DOM uses https://l.threads.com/?u=<encoded destination>, while the existing shortened-link fixture uses a direct destination. Replaying the isolated live target card reproduced rejection; restoring only that link's destination allowed the full caption to match. The reader now unwraps u only for the observed HTTPS host/root path, validates it through the existing safe-URL rules, and compares it with the full caption. It never visits the redirect. The regression failed before the fix and passed afterward, with unrelated destinations, invalid schemes, missing destinations, lookalike hosts, other paths and truncated bodies still refused. Signed-in Chromium passed the live shortened-link sample with its direct href. The wrapped form first had live-DOM replay and regression evidence, then passed native saving and source-blocked reopening with the actual wrapped href after Firefox login.

Fixed: literal text becoming alphabetic list markers

The live LinkedIn Markdown retained Dr. Nancy Grace Roman:, but the instance's contentJson interpreted it as an ordered list and lost Dr.. Reopening matched those incorrect stored nodes, showing that storage/readback equality alone cannot establish complete source preservation. TipTap recognizes alphabetic/Roman markers beyond Turndown's default text escaping. The extension's HTML-to-Markdown text boundary now escapes line-leading alphabetic marker punctuation. Server parsing, storage schema and existing notes are unchanged; already-saved content is not automatically repaired. Real HTML lists remain converter-generated, and code blocks retain their bytes.

A regression first reproduced loss of Dr., Mr. and II., then verified literal text, a real ordered list and code. The existing Bluesky quoted author Mr. Joshua is checked through actual document parsing. This patch can be reverted independently; list/code formatting is the main risk, covered by these checks. A new native Firefox save of the same guest post on the final build preserved the entire source body, including Dr., with eight archived images and source-blocked reopening.

2026-10-17 second follow-up live acceptance

  • Firefox added native saves and reopening for V2EX, WeChat, Xueqiu, Douban book review, Substack Note, Facebook public Float detail and a LinkedIn personal share guest page. The first five used the Android-initialization repair build; Facebook, LinkedIn and cross-document rechecks used this round's final build. All 34 instance images decoded under Firefox's local-only source policy. Checks covered both V2EX supplements, WeChat body, Xueqiu stock markers, seven Douban paragraphs and five Note paragraphs. LinkedIn preserved the complete long text, author and publication time without the website's AI-generated summary heading or comments. Its source normalized to urn:li:share with the same ID; valid normalization was not treated as an identity failure.
  • Edge's final build added V2EX, Juejin, WeChat, Douban book review, Xueqiu and Substack Note through the native toolbar. All six bodies matched after reopening in Edge's Web editor with external images/connections blocked. All 33 instance images decoded: Juejin/WeChat 2/21 and Douban/Xueqiu/Note 6/3/1. A refusal before Note finished loading was not classified as a product failure; saving and readback passed after loading.
  • In ego lite, the native selection context menu saved exactly the explicitly selected 221-character paid-preview paragraph plus source/capture time, without the full article. Reopening matched with external sources blocked. Normal Facebook feed expansion still saved the complete body and three images on the final build; source-blocked reopening also passed.
  • The current Jike Web feed was retested through its native context menu: safe refusal, no new memo. The target card lacks its own stable DOM post permalink; Jike links inside its body reference other posts. Private React objects are not a stable DOM contract. Detail-page passes do not cover this feed layout.
  • This round's 15 qualified save cases decoded 70 instance attachments in their own browsers (Firefox 34, Edge 33, ego lite 3). Four other notes from race reproductions or non-target probes are excluded from acceptance passes. All 19 notes and 80 resources were cleaned by ID; all 80 files matched actual sizes and SHA-256 hashes. The original 40 memo content hashes and memo/resource/token/notebook ID sets (40/74/1/13) were preserved.
  • Edge's original local Web session returned http_500; only the 127.0.0.1 edgeever_session cookie was temporarily replaced for QA. Its backed-up original value was restored and verified through the browser's request. Authentication code and other sites' sessions were unchanged. Temporary browser readback helpers did not invoke capture functions; actual saves used native entries. Helper/collector cleanup, dedicated-token revocation and credential cleanup have separate receipts. The isolated Firefox profile and host grant remain available.

Fixed: cross-document departure during expansion

Two live reproductions before the fix assigned location.assign inside the actual Facebook expansion button's click callback. The old page still saved the original post about 52 ms later. Identity and body were correct, but expected cancellation was missed. The tab URL updated only about 350 ms later, so a final URL comparison could not detect an already-started cross-document departure. An isolated-world beforeunload signal fired about 1 ms after the navigation request.

The platform capture script now listens to beforeunload only during the current read, treats departure as a changed page, and removes the listener when finished. Existing URL, sender and post-identity checks remain; no permissions were added. A regression first reproduced the old implementation returning complete content, then verified departure rejection and successful normal expansion. The same real expansion/navigation sequence in ego lite now creates no memo; normal expansion saves successfully. Firefox's public NASA feed also used the native context menu to trigger actual expansion and controlled cross-document navigation, creating no memo. These are controlled navigation checks, not proof of natural card recycling. A Xiaoyuzhou probe never triggered expansion and is excluded from cancellation passes.

The patch affects only cancellation during platform reads and can be reverted independently. Its main risk is false cancellation, checked through normal expansion and real saves. The final 455 extension tests passed with zero failures; Web/mobile typechecks, Web build and both extension builds passed. Fixes remain uncommitted and unpushed.

2026-10-17 follow-up live acceptance

  • Latest reviewed build in ego lite: native toolbar saves and source-blocked reopening passed for NASA Threads (4/4 images), NASA Instagram (3/3), signed-in Jike Web long text (1/1) and gallery (9/9). The Google Instagram 20-media case also passed: one video cover and 19 photos, preserving the author, full combined caption and image order. All 37 files matched independently downloaded originals. Earlier natural partial failures did not recur; their records remain and their cause is unknown. Two early operations retained a text selection and saved only that selection; they do not count as full-post passes.
  • Latest build in Firefox 158.0: native toolbar saves passed for Sspai (9/9 images), Juejin (2/2) and the public Jike H5 gallery (9/9). All three notes reopened in Firefox with matching bodies and 20 decoded instance images. Every cell of Juejin's three-column, five-row table matched. All five code blocks retained internal text and blank lines, omitting only one terminal formatting newline each.
  • Latest build in Edge 155.0.4283.62: the Xiaoyuzhou cover (1/1) and public Jike H5 gallery (9/9) were fully archived. Sspai archived eight of nine image positions and correctly reported the remaining external image. The three notes reopened in Edge with matching bodies and 18 decoded instance files; policy blocked the remaining external image. That image downloaded independently with a Referer, while a request without one returned 403. The extension already configures this site's Referer; this does not establish the cause of the browser failure.
  • Edge/Firefox readback used img-src/connect-src policies limited to the acceptance Web page, with actual CSP violations proving external requests were blocked. Global browser security settings were unchanged. With Edge's Apple Events page-script interface disabled, two temporary extension test pages read only the local instance tab in the same acceptance window; all saves still used native entry points. The pages and local receiver were removed/stopped, and product background/capture bundle hashes remain unchanged. Edge Bluesky stayed on the site's loading screen; clipping refused with no new note, so this is neither a captured-post pass nor an established clipping defect.
  • On the real NASA Facebook feed, native context-menu saving triggered the actual expansion control. Controlled history.pushState navigation ran inside its click callback. Evidence records collapsed text, the programmatic expansion click, before/after URLs and timestamps. Feedback said the page changed during clipping and nothing was saved; no memo was created. This covers SPA cancellation at a known point, not cross-document navigation or natural scroll-driven card recycling.
  • The actual signed-out BOSS page in Firefox showed a login requirement. The toolbar reported it and refused full capture with no new note. Explicit selection of a complete visible 117-character paragraph then saved only that paragraph, excluding other requirements and restricted-content UI; Firefox reopening matched. Signed-in full-job acceptance was not performed.
  • All 14 follow-up test notes, 75 files and one dedicated token were removed by ID. All 75 files passed API-download size/SHA-256 checks and decoded in their source-blocked browser readback cases: ego lite 37, Firefox 20, Edge 18. Original ID sets (40 notes, 74 resources, one token, 13 notebooks) and original note content hashes are unchanged.
  • Only settings matching this round's dedicated token were removed in each browser. The server token was revoked and confirmed to return 401. The plaintext credential file, temporary extension pages and receiver were removed; the ego lite acceptance space and dedicated Edge window were closed. The isolated Firefox test profile and host grant remain for continued acceptance, with its token and copied local session cookies removed and its page blank. Ordinary Firefox was untouched.

Observations in this run

  • ego lite native toolbar: HN, Xiaoyuzhou, Sspai, Juejin, WeChat, V2EX, Douban book review, Substack Note, Xueqiu and Bluesky detail saved and reopened with source domains blocked. HN also passed the real detail-page context menu. These results apply only to the named samples, not other Douban types, full Substack articles or feeds.
  • Jike: a real single-card context menu saved current public topic-feed post 6ad22db3a1af2007be120932. Author, body, one original image and identity matched, excluding the next post; source-blocked reopen passed. After the user completed QR login, native toolbar saves passed for the current Web long post and nine-image gallery: author/date precision, complete ending and one/nine originals were preserved, excluding mention avatars/comments. All ten files matched independent source downloads and passed source-blocked reopen. Current details show full text without an expand control; current Web feed targeting/expansion remains pending and is not replaced by detail/mobile Web results.
  • Edge: initial HN/Xiaoyuzhou toolbar saves passed; Xiaoyuzhou reopened in Edge with the full body ending and a decoded 300×300 instance cover. After loading the repair build at that stage, HN toolbar and native context-menu saves passed. Another Xiaoyuzhou save retained its one cover externally with accurate feedback, so final image acceptance is partial. HN retained visible text generated by the user's existing Immersive Translate.
  • Firefox: after the port fix, connection returned 13 notebooks and HN/Xiaoyuzhou toolbar saves passed, with all Xiaoyuzhou images archived. Both notes reopened in Firefox itself, showing the HN/Show Notes endings and a decoded 300×300 instance cover. HN native context-menu capture and a toolbar save on the repair build at that stage also passed. Signed-in social/feed cases and blocking inside Firefox itself remain pending.
  • Facebook: initial capture refused an unrecognized page-declared pfbid alias. After the fix, native toolbar save preserved the NASA author, precise publication time 2026-10-10 04:54:33, full body and one instance image. Text/image readback passed with the source blocked. A real single-card context menu on the signed-in NASA feed also expanded and saved the correct post, full text and three images, passing source-blocked reopen. Initial capture included its See less control; after the fix, native readback excludes the control while regression tests retain matching literal body words.
  • LinkedIn: the activity URL redirected to ugcPost, initially causing a false navigation error. Captured evidence shows matching current tab/DOM URLs while extension sender.url retained the initial address. After the fix, native capture preserved author/headline, full text and all eight images; source-blocked reopen passed. Other activity/share/guest cases remain pending.
  • Threads: signed-in NASA detail saved text/four image positions, archiving three and retaining one externally with accurate feedback. Instagram: NASA detail preserved the complete caption/three image positions, archiving two and retaining one externally with accurate feedback. Archived images decoded with sources blocked; full-image acceptance failed for both. The missing Threads image later downloaded independently and inside the extension; its initial cause remains unknown and no speculative retry was added.
  • Medium redirected to a custom domain behind a Cloudflare challenge; no bypass/save attempted. Native capture of a Substack paid preview refused the full article without creating a memo; explicit visible selection remains pending. BOSS was signed in with full content and saved, so it does not prove login-overlay rejection. Full-job acceptance is tracked separately.
  • Independent attachment audit: 30 test memos and 77 archived resources; every file's actual bytes/SHA-256 matched instance metadata. All 77 decoded from instance URLs in ego lite with source/CDN domains blocked. Initial Xiaoyuzhou covers from all three browsers were 70,133 bytes and matched an independent source-CDN download. This excludes external images and does not establish cold offline support in every client.
  • Body comparison accounts for stored node/UI types: Sspai's three PDF link cards were checked separately. Xueqiu's three stock labels use existing inlineMath nodes; stored attributes matched KaTeX annotations, and text matched after excluding duplicate MathML/HTML representations. Editor controls/non-text attributes were not misreported as body loss.

Fixed: Firefox instance permission with nondefault ports

Firefox does not support ports in WebExtension match patterns. The old http://127.0.0.1:8787/* pattern appeared granted while requests failed with NetworkError. Permission requests, background checks and diagnostics now share a port-free host pattern; HTTP requests retain the complete configured endpoint. Permission covers all ports on the same protocol/host, while the instance setting still determines where the token is sent. Users may need to grant host permission again after upgrading: both Firefox and ego lite prompted in this run; denied permission prevents saving. API CORS, authentication and storage are unchanged. See Mozilla documentation.

Regression coverage checks nondefault HTTP/HTTPS ports and IPv6: connection retains the configured port after permission. Existing synchronous user-gesture and denied-capture cases still pass. Real Firefox connection, save and image readback passed after the fix. Rollback is limited to the shared helper and its three permission consumers; ordinary HTTPS instances still need continued cross-browser coverage.

Fixed: SPA message URL and Facebook post aliases

  • SPA: no longer treats the message's initial sender.url as the live address. Extension ID, target tab, top frame and request ID checks remain; the page reader checks live URL before/after capture and the save path checks the tab URL before creation. Regression coverage includes stale sender URL acceptance, rejection of real navigation, and existing spoofed-sender/expansion/queued-cancellation cases.
  • Facebook: accepts a story_token alias only from a CometSinglePostDialogRoute whose declared URL matches the requested post. Existing numeric-ID mapping remains. Author/time/image-completeness checks use the same confirmed identities. Regression coverage includes valid aliases and unrelated posts, wrong routes and invalid aliases; no whole-page/neighbor-post fallback.
  • Both changes are limited to extension capture, with no API/schema/authentication change. The worst case would be accepting an old/adjacent post, so the identity/navigation boundaries above are retained and rejection paths tested. Each patch can be reverted independently. Live cross-platform limits remain as recorded in the matrix.

Fixed: current Jike Web detail and Facebook collapse controls

  • Signed-in Jike Web uses /u/<user>/post/<id>. The reader recognizes this detail route and binds a single visible detail card to its top-level author link. It keeps body line breaks, mention text, links/preview cover, excluding avatars/comments. Dates retain only the source's day precision.
  • For the verified cdnv2.ruguoapp.com gallery-viewer paths only, pure imageMogr2 thumbnail queries are removed to retain originals in order; queries with other signature parameters are untouched. All nine originals were downloaded independently and compared byte-for-byte with instance files.
  • Two redacted public-card fixtures record provenance. Coverage includes full long text/originals, wrong author, ambiguous/hidden/missing cards, wrong post, preview-header impersonation and navigation before saving. No authenticated API is read. Current Web feeds lack a reliable DOM post ID, so there is no whole-page/positional fallback.
  • Facebook removes only semantic See less/收起 buttons from body content, retaining matching literal words. Real expansion/recapture and two regressions passed. Each patch can be reverted independently; site layout changes require renewed acceptance.

Follow-up review: Jike detail visibility

  • Regression fixtures reproduced two omissions: hidden author links could bind the route identity, and hidden author/date values could enter metadata. Identity links now use the shared visibility check; metadata comes from a readable header copy so hidden information is omitted.
  • Six regressions cover hidden, aria-hidden and display:none; all failed before the fix and pass afterward. Existing logic already ignores hidden expansion controls, so no extra mechanism was added. This patch only affects the Jike detail reader and can be reverted independently. It has not been rechecked live and adds no browser acceptance claims.
  • Correctness, simplification and requirement-boundary review covered permissions, SPA messages, Facebook aliases and Jike reads, with no other evidenced substantive findings left untreated. Exact navigation timing and same-author card recycling remain live-verification gaps below.

Local checks and findings

  • bun run typecheck, bun run typecheck:mobile and bun run build:web pass. Initial typechecks mixed old ProseMirror links; bun install --frozen-lockfile --force resolved this without changing the lockfile or dependency versions.
  • Chromium/Firefox extension builds pass; builds do not count as live acceptance.
  • After the follow-up review fix, the full extension suite reports 452 passed, zero failures. All three checks above and both Chromium/Firefox extension builds passed again.
  • bun run test:extension twice reports 424 pass / 3 fail: the first React popup test exceeds five seconds, followed by overlapping act() calls and incorrect DOM state. The original isolated popup run passed seven tests; with the port regression, bun test apps/extension/popup.test.mjs passed eight. With the new port regression, the latest full run passed 446 tests, zero failures without timeout changes; the earlier intermittent failure remains unattributed.
  • After restarting bun run dev, both Web/API session endpoints return HTTP 200. Initial startup overlapped dependency reinstallation and failed dependency resolution; separate logs retained.
  • Created a dedicated least-scope API token and configured local instance access in all three browsers. Instance permission and Jike Web login completed. All 30 test memos, 77 resources and the dedicated token were removed by explicit IDs. The temporary Firefox profile/credential file were deleted and the acceptance task space closed. Original IDs (40 memos, 74 resources, one token, 13 notebooks) and original memo content hashes were preserved.

Delivery state

This macOS acceptance round and fixes are documented, with cleanup completed. Fixes are not committed/pushed; no GitHub comment or issue closure was performed. Runtime evidence stays local; public records must omit tokens, sessions and private memo content.

The ninth round additionally verifies the specified Edge signed-in Xueqiu, Facebook, Jike and Bluesky feed cards. The tenth round resolves both formatting observations and the Medium preview omission, adding Edge Douban four-type coverage and ego lite public Medium. Rounds eleven/twelve close the targeted gaps; unsampled layouts and natural card recycling remain explicit limits. The specified public Medium full story passes in Edge/Firefox; Edge also covers only the original sample’s current visible preview. The specified Edge Threads details and signed-in LinkedIn UGC detail now pass. The specified current Jike Web feed, signed-in LinkedIn company feed, Bluesky quoted feed and complete Substack article samples in all three browsers are now covered. Chrome/Chromium does not add a separate native Chrome installation gate. Android USB’s two cases and support declarations are verified without claiming every phone layout. Historical intermittent external images remain observations: partial-failure feedback and successful attachment readback are verified, without inventing an additional root-cause repair gate. Signed-in full BOSS jobs are tracked separately. Complete acceptance across all browsers/layouts is not claimed.

2026-10-18 round eleven: #493 Medium code and Threads quotes

Reuse signed-in Edge window 1529310870 (155.0.4283.62), the local instance and existing host grant. Reload the current Chromium build and save through the actual toolbar. Read-only helper pages never invoke capture/save APIs. The seven original signed-in tabs remain.

Live testing exposed two defects. Medium uses pre with highlighted hljs-* descendants but no language class; its already-loaded Apollo Paragraph.codeBlockMetadata.lang declares the language, while br represents newlines. The reader now converts readable-copy breaks to newlines and supplements language only when paragraph identity and exact visible code match, preserving existing declarations. It only parses bounded JSON assignments, never executes scripts or recovers hidden/paid text. Threads uses nested data-pressable-container quote cards; a second quoted timestamp caused parent rejection. Timestamps now belong to their own container, and quote containers cannot establish readability of a hidden parent caption.

This restores requested highlighting and quote capture. Scope is the Medium reader and Threads card identity; worst cases are an incorrect language match or card boundary, independently reversible. No instance authentication, storage, migration, API, host permission or dependency changes. Two real-layout regressions cover code/newlines/language, state text not replacing visible content, unchanged source DOM, and quote/neighbor/hidden-parent isolation.

Native source Save/source comparison Source-blocked reopen
Medium JavaScript Fundamentals-Part 1 All characters/newlines in 40 code blocks match; 38 JavaScript/two XML languages; one body image archived Same Edge editor body/code/language match, 551 actual syntax spans with distinct computed colors, local 512×512 image decodes
Threads text quote Main caption, techmeme quote caption/actor/permalink preserved Editor body matches storage; this sample has no quoted photo
Threads photo quote Main and quoted captions, quoted identity/link and original photo preserved Body matches and local 1206×1692 image decodes

The editor only allows local connections/images. MAIN-world probes prove all five fetches and five image loads to the three sources/two CDNs are blocked by CSP. Three resources (two final images and the pre-fix Medium comparison) match API byte counts/SHA-256 and independent source downloads byte-for-byte. The pre-fix sample is excluded from acceptance.

483 extension tests pass, zero fail. Root/mobile typechecks, Web/Chromium/Firefox builds and diff check pass; Firefox lint has zero errors/notices and seven existing dependency warnings. The full 3,743 non-E2E results belong to the prior review; this round does not claim a fresh full-suite run. Firefox is built, not newly verified at runtime.

Both targeted gaps are closed; other historical #588 limits and #587/#589 scope remain explicit. Four test notes, three resources and the dedicated token are removed; the revoked token returns 401. Original ID sets of 40 notes/74 resources/one token/13 notebooks and 40 content hashes match exactly. Only this round's browser token is removed; other settings and site logins remain. Six helpers, two credential files and two receivers are removed; all 52 product files match the final build. No commit, push, deployment or GitHub update/closure. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/eleventh.

2026-10-18 round twelve: final-build cross-browser targeted acceptance

Reuse Firefox 158.0’s original test profile and Edge’s seven-tab window. The user authorizes the sole new ego lite space 23 and completes separate Medium human checks in Firefox/ego lite; the space is finished afterward. Firefox reloads the current dist-firefox/manifest.json; ego lite reloads the current Chromium extension. Version numbers do not replace artifact hashes. No product code, permissions, dependencies or runtime configuration changes. The prior 483 extension tests, typechecks and builds are retained without claiming a fresh automated run.

Browser/source Native save, independent source comparison and own-editor reopen
Firefox/ego lite: Medium 1a538c9389fe Native toolbar save; all 40 code blocks match source characters/newlines with language preserved. Source/CDN-blocked reopening produces 551 actual syntax spans with different computed colors; body and one local image remain readable.
Firefox/ego lite: Threads @mkbhd/DehHSaCnEmU Native save preserves main/quoted captions, quoted identity/link and original photo; source-blocked reopen matches and decodes the local image. Edge passes this same build in round eleven.
Firefox/ego lite/Edge: Jike Web grid 6715e824d9dc81724c2ec74d All keep actor/date, both caption lines and nine original-image positions, excluding comments. Firefox/ego lite archive/decode all nine in their own restricted editor. Edge archives eight and retains one external image with accurate partial feedback; only the eight local files pass decoding, while the external image is blocked.
Edge: BOSS login preview The actual page says login is required for full content. Native toolbar explains login/visible selection; clicking full save refuses with zero new notes. Site selection styling prevents a completed native selection save this round; Firefox’s earlier 117-character selection evidence remains.
ego lite: current BOSS state The user is still signed in and the full text is readable. No logout/visibility manipulation to manufacture a refusal, and no restricted-save pass is claimed. Full jobs remain #589.

Firefox/ego lite each prove all 14 connection/image probes (three sources and eleven image URLs) blocked by CSP, while their eleven local images decode. Edge proves ten source/image URLs blocked and its eight archived images decode. All 30 successful resources from seven notes match API byte counts/SHA-256 and independently downloaded source bytes. Both Medium code sources, both Threads main/quoted captions and three Jike captions/image orders are independently compared; storage/reopen equality alone is not source completeness.

Seven notes, 30 resources and the dedicated token are removed; revoked access returns 401. Original ID sets (40 notes/74 resources/one token/13 notebooks) and 40 content hashes match exactly. Only this round’s token is removed from each browser; other settings/site logins remain. Firefox’s test tab is restored blank and Edge’s original seven tabs remain. Eight helpers, two credential files and two receivers are removed. All 52 Chromium and 52 Firefox product files match the final build. No commit, push, deployment or GitHub write. Evidence: /private/tmp/edgeever-issue-588-20261017-uz6mqhpj/evidence/twelfth.

Delivery check against #588 completion conditions

Issue condition Evidence and allowed boundary
All-platform matrix with environment/login/expectations/results/unknowns Matrix and round records exist; not exhaustive coverage of every layout.
Chrome/Chromium real toolbar, detail context menus and supported feed cards ego lite native entry/card evidence exists; no extra native Chrome installation gate.
Edge/Firefox loaded extension, entry points, content/metadata, real images and reopening Historical platform evidence plus final targeted Medium/Threads/Jike checks; other historical samples are not retroactively assigned the latest build.
Signed-in feeds/Jike Web, expansion, identity, images, navigation cancellation and restricted refusal Named Facebook/Threads/LinkedIn/Bluesky/Xueqiu/Jike cases and controlled real navigation are evidenced. Natural virtual-list recycling remains untested. Identical BOSS preview states in every browser are not a separate original gate; actual Edge/Firefox BOSS and Substack restrictions are recorded.
Firefox Android scope and USB hardware Android 142+ declaration verified; USB Firefox 158.0 passes two cases/14 images/reopening. Scope is extension-menu articles/public social details, excluding every mobile layout or store install/update claims.
Partial-image feedback, source-blocked archival readback, cleanup and linked repairs Current/historical evidence covers these; honest Edge 8/9 feedback and successful-file readback satisfy the condition without adding a CDN root-cause gate.

All six conditions now have corresponding evidence within the original issue scope, ready for maintainer closure review. Natural card recycling, unsampled layouts and per-round builds remain explicit. #587 store delivery/update and #589 full BOSS jobs stay separate. This is not a claim that every browser/layout or all clients’ cold-start offline behavior passes. GitHub has not been updated or closed.

2026-10-18 round thirteen: final change review-loop

Review all uncommitted #588 extension changes and relevant consumers for correctness, simplification and requirement boundaries. Identity/permissions/cancellation and content reading receive independent read-only reviews. Work stays on main, preserving unrelated apps/mobile/.gitignore.

Medium normalized code only when the chosen node itself was pre. If a quote/container was selected first, existing deduplication skipped its nested pre, losing newlines/language. A paragraph identity on pre[data-selectable-paragraph] itself was also missed. A regression first reproduces nested newline loss; the repair applies existing normalization to code within the chosen readable copy and recognizes the root paragraph identity. HTML→Markdown→stored-node checks verify both paths’ language, characters and blank lines, with unchanged source DOM. Exact visible-code/state matching and existing language priority remain; no new body source is introduced. The unsupported 40-character language-label limit is removed while retaining the character grammar already used for Markdown code languages.

Scope is the Medium reader and regression, independently reversible. The worst risk is incorrect code language/newline handling; existing visibility/state-not-replacing-body/exact-code/language regressions and the new consumer checks constrain it. Both independent reviewers and the primary reviewer finish all three views without untreated substantive findings.

Latest full non-E2E: 3,746 pass, zero fail (3705 + 17 + 24), including 484 extension tests. One real Windows cwd-lock case skips under its existing macOS platform condition. Root/mobile typechecks, Web/Chromium/Firefox builds, Firefox lint and diff check pass; lint reports zero errors/notices and seven existing dependency warnings. This is code/automated review, with no new native browser/Android operation, memo or token. Round twelve runtime evidence remains tied to its recorded build, not retroactively to these new packages. No commit, push, deployment or GitHub write. Evidence: /private/tmp/edgeever-issue-588-review-final-20261018.

Contribution-branch pre-submission verification

Following the contribution guide, create fix/issue-588-browser-acceptance from official upstream/main at df22f55d and submit through the matching Fork contribution branch, without pushing deployment main. The patch and ten new files match their pre-migration versions exactly, without conflicts; the unrelated mobile .gitignore change is excluded.

After lockfile installation on the new baseline, full non-E2E: 3,760 pass, zero fail (3719 + 17 + 24, including 484 extension tests). One Windows-specific case skips under its existing macOS condition. Root/mobile typechecks, Web/Chromium/Firefox builds, Firefox lint and diff check pass; lint retains seven existing dependency warnings. No new native operations or expansion of historical build-specific runtime coverage.

The first PR CI root bun run lint flags the Jike CDN query-prefix regex under the startsWith rule; it is replaced with an equivalent string-prefix check. Root lint, 484 extension tests, root/mobile typechecks and Web build pass locally. Firefox add-on lint and root lint are separate checks; remote CI status remains the PR checks result.