diff --git a/CHANGELOG.MD b/CHANGELOG.MD
index 7f8c3d7..100b296 100644
--- a/CHANGELOG.MD
+++ b/CHANGELOG.MD
@@ -1,6 +1,6 @@
# Changelog
-## Version v0.1.2
+## Version v0.2.0
### Features
* Users can edit or delete labels created by themselves on the labels page
* Administrators can edit labels from the admin interface
@@ -15,12 +15,13 @@
* Brightened the Red theme surfaces and deepened its crimson accents
* Allow every user to filter the feed using every available tag or label
* Bundle required web fonts during Docker image builds and serve them from LinkLog
- * New Entry page warns when the title/URL combination already exists, matching the browser extension's duplicate warning
+ * Bundle required web fonts during Docker image builds and serve them from LinkLog
+ * New Entry page warns when the title/URL combination already exists, matching the browser extension's duplicate warning
* New Entry page warns when an existing link with the same title has a different or missing URL (after tracking parameters are stripped)
* New Entry page auto-fills the title when the URL field loses focus, instead of requiring a manual button press
* Added a "Re-fetch Title" button to manually re-scrape the title after editing the URL
* New Entry duplicate detection and submission strip known tracking parameters (utm_*, gclid, fbclid, etc.) from URLs, mirroring the browser extension
-
+ * Browser extension popup now matches the New Entry page: it warns on duplicate title/URL, notes when the stored link has a different URL, and gained a "Re-fetch title" button; bumped extension version to 0.2.0
### Fixed
* Fixed element ID conflict on the Admin page so Available Themes load correctly
diff --git a/VIBE/CHAT_LOG.md b/VIBE/CHAT_LOG.md
index b7f4082..898b8e3 100644
--- a/VIBE/CHAT_LOG.md
+++ b/VIBE/CHAT_LOG.md
@@ -1460,3 +1460,9 @@ Update VIBE and Changelog.
### Assistant outcome
Appended the new-entry duplicate-detection and title auto-fill work to `VIBE/PROMPTS.md` and `VIBE/CHAT_LOG.md`, and added a Version v0.1.3 section to `CHANGELOG.MD`.
+
+### User
+Make sure the webplugin has the same functionality as just implemented in the new-entry page. Increase its version number to 0.2.0.
+
+### Assistant outcome
+Brought `webextension/popup.js` to parity with `new-entry.js`: the duplicate check now distinguishes an exact title/URL match from a title match with a differing stored URL (using the same `/api/links/check` `url_matches`/`stored_url` fields) and shows an additional localized note in the latter case; added a "Re-fetch title" button that calls the backend `/api/scrape` endpoint (guarded by existing backend-permission checks) and auto-fills the title on URL blur when empty; reworked `setStatus` to render real `
` line breaks via DOM APIs instead of `textContent`. Added `duplicateLinkDifferentUrl`, `refetchTitle`, and `titleFetchFailed` strings to all five locale files, updated `popup.html` with the new button, and bumped `manifest.json` to version `0.2.0`. Full backend test suite (36 tests) passed.
diff --git a/VIBE/PROMPTS.md b/VIBE/PROMPTS.md
index cbf77a9..0508614 100644
--- a/VIBE/PROMPTS.md
+++ b/VIBE/PROMPTS.md
@@ -262,6 +262,7 @@
240. I want this last change to be more precise: I do not want to be warned when parameters are stripped, but when the URL entered has arguments/parameters and the URL in the database has none or different ones (even after tracking parameters are stripped).
241. In the check duplicate I have a `
` tag, but that shows as formatted text on the page, I want a real break to occur at that position.
242. Update VIBE and Changelog.
+243. Make sure the webplugin has the same functionality as just implemented in the new-entry page. Increase its version number to 0.2.0.
## Future entries
diff --git a/XPI/unsigned/LinkLog-0.2.0.xpi b/XPI/unsigned/LinkLog-0.2.0.xpi
new file mode 100644
index 0000000..36ee4b1
Binary files /dev/null and b/XPI/unsigned/LinkLog-0.2.0.xpi differ
diff --git a/frontend/static/new-entry.js b/frontend/static/new-entry.js
index 4f4b38e..f59dd09 100644
--- a/frontend/static/new-entry.js
+++ b/frontend/static/new-entry.js
@@ -198,8 +198,11 @@
if (!response.ok) return;
const data = await response.json();
if (data.exists) {
+ // Re-derive the match locally: browser URL normalization (e.g. trailing slashes) can
+ // make the server's raw string comparison disagree even when the URLs are equivalent.
+ const urlMatches = data.url_matches || (data.stored_url && removeKnownTrackingParams(data.stored_url) === url);
let message = 'This link already exists. ';
- if (!data.url_matches) {
+ if (!urlMatches) {
message += 'But, the stored link has a different URL (missing or different parameters).';
message += '\nWhen you save the entry you risk a duplicate entry.';
} else {
diff --git a/frontend/templates/new-entry.html b/frontend/templates/new-entry.html
index 2442f98..9d6b443 100644
--- a/frontend/templates/new-entry.html
+++ b/frontend/templates/new-entry.html
@@ -103,6 +103,6 @@
-
+