@@ -2348,7 +2348,24 @@ https://github.com/nodeca/pako/blob/main/LICENSE
for (var i = 0; i < entries.length; i++) {
var e = entries[i];
var rawName = stripSlash(e.name);
- var childUrl = joinUrl(url, rawName, e.is_dir);
+ // Listing entries can carry an explicit URL for virtual
+ // links (e.g. the reviewing-aggregator's received/+staged/
+ // entries point to canonical archive/+staging paths).
+ // Use it when present so navigation follows the listing's
+ // own routing rather than computing a synthetic child URL
+ // off the parent. Caddy-shape listings don't set url
+ // (or set it to a relative form) — joinUrl handles those.
+ var childUrl;
+ if (e.url && /^https?:\/\/|^\//.test(e.url)) {
+ // Absolute or root-relative: use as-is, normalised against origin.
+ var u = e.url;
+ if (u[0] === '/') {
+ u = location.origin + u;
+ }
+ childUrl = u;
+ } else {
+ childUrl = joinUrl(url, rawName, e.is_dir);
+ }
if (e.is_dir) {
yield new HttpDirectoryHandle(childUrl, rawName);
} else {
diff --git a/zddc/internal/apps/embedded/index.html b/zddc/internal/apps/embedded/index.html
index d92faf0..5ca00db 100644
--- a/zddc/internal/apps/embedded/index.html
+++ b/zddc/internal/apps/embedded/index.html
@@ -988,7 +988,7 @@ body {
@@ -2587,7 +2587,24 @@ body.help-open .app-header {
for (var i = 0; i < entries.length; i++) {
var e = entries[i];
var rawName = stripSlash(e.name);
- var childUrl = joinUrl(url, rawName, e.is_dir);
+ // Listing entries can carry an explicit URL for virtual
+ // links (e.g. the reviewing-aggregator's received/+staged/
+ // entries point to canonical archive/+staging paths).
+ // Use it when present so navigation follows the listing's
+ // own routing rather than computing a synthetic child URL
+ // off the parent. Caddy-shape listings don't set url
+ // (or set it to a relative form) — joinUrl handles those.
+ var childUrl;
+ if (e.url && /^https?:\/\/|^\//.test(e.url)) {
+ // Absolute or root-relative: use as-is, normalised against origin.
+ var u = e.url;
+ if (u[0] === '/') {
+ u = location.origin + u;
+ }
+ childUrl = u;
+ } else {
+ childUrl = joinUrl(url, rawName, e.is_dir);
+ }
if (e.is_dir) {
yield new HttpDirectoryHandle(childUrl, rawName);
} else {
diff --git a/zddc/internal/apps/embedded/transmittal.html b/zddc/internal/apps/embedded/transmittal.html
index 1b688c8..3ae7124 100644
--- a/zddc/internal/apps/embedded/transmittal.html
+++ b/zddc/internal/apps/embedded/transmittal.html
@@ -2263,7 +2263,7 @@ dialog.modal--narrow {