research / index.html
VertRule's picture
Fix wrapper-blocked navigation: artifact links resolve to static-host origin and open in new tab
2dfe2c3 verified
Raw
History Blame Contribute Delete
6.98 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>VertRule Research</title>
<meta
name="description"
content="Public-safe research artifacts: local execution and bounded topology captures with cryptographic receipts."
/>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<header class="hero">
<div class="container">
<h1 class="hero-title">
<span class="bar" aria-hidden="true"></span>
<span>VertRule Research</span>
</h1>
<p class="hero-subtitle">
Admitted execution surfaces and canonical topology artifacts. Each
document records what was measured, what was verified, and what
remains outside scope. Mirrored from
<a href="https://vertrule.com/research" rel="noopener">
vertrule.com/research</a
>.
</p>
</div>
</header>
<section class="section section-charcoal">
<div class="container">
<p class="eyebrow">Technical Notes</p>
<div id="card-list" class="card-list">
<div class="empty">Loading manifest&hellip;</div>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="footer-grid">
<div class="footer-block">
<p class="footer-eyebrow">Source of truth</p>
<p class="footer-line">
<a href="./manifest.json" class="mono">manifest.json</a>
</p>
<p class="footer-line footer-dim">
Each entry carries a BLAKE3 digest of its PDF.
</p>
</div>
<div class="footer-block">
<p class="footer-eyebrow">Canonical home</p>
<p class="footer-line">
<a href="https://vertrule.com/research" rel="noopener"
>vertrule.com/research</a
>
</p>
<p class="footer-line footer-dim">
This Space is a public mirror, not the authoritative copy.
</p>
</div>
<div class="footer-block">
<p class="footer-eyebrow">Scope</p>
<p class="footer-line footer-dim">
Public-safe artifacts only. Drafts, internal compliance
material, and patent/legal documents are excluded by policy.
</p>
</div>
</div>
</div>
</footer>
<script>
(function () {
var listEl = document.getElementById("card-list");
// When the catalog is viewed inside the Hugging Face wrapper iframe,
// relative artifact links navigate the wrapper context and are
// blocked by Chrome's frame-navigation policy. Build artifact hrefs
// against the static-host origin and open in a new top-level tab so
// PDFs / explorer / JSON resolve as a normal browser navigation.
var STATIC_ORIGIN = window.location.hostname.endsWith(
".static.hf.space",
)
? window.location.origin
: "https://vertrule-org-research.static.hf.space";
function assetHref(relPath) {
return STATIC_ORIGIN + "/" + String(relPath).replace(/^\.?\//, "");
}
function escapeHtml(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': "&quot;",
"'": "&#39;",
}[c];
});
}
function shortDigest(d) {
if (!d) return "";
return d.slice(0, 12) + "&hellip;";
}
var LINK_ATTRS = ' target="_blank" rel="noopener noreferrer"';
function renderCard(item) {
var pdfHref = assetHref(item.pdf);
var explorerLink = item.explorer
? '<a class="meta-link" href="' +
escapeHtml(assetHref(item.explorer)) +
'"' +
LINK_ATTRS +
">Explorer</a>"
: "";
var dataLink = item.data
? '<a class="meta-link" href="' +
escapeHtml(assetHref(item.data)) +
'"' +
LINK_ATTRS +
">Data (JSON)</a>"
: "";
var statusClass =
item.status === "experimental"
? "badge-experimental"
: "badge-public";
return (
'<article class="card">' +
'<a class="card-link" href="' +
escapeHtml(pdfHref) +
'"' +
LINK_ATTRS +
">" +
'<div class="card-head">' +
"<div>" +
'<h2 class="card-title">' +
escapeHtml(item.title) +
"</h2>" +
'<p class="card-subtitle">' +
escapeHtml(item.subtitle || "") +
"</p>" +
"</div>" +
'<span class="badge ' +
statusClass +
'">' +
escapeHtml(item.status) +
"</span>" +
"</div>" +
'<p class="card-desc">' +
escapeHtml(item.description) +
"</p>" +
"</a>" +
'<div class="card-meta">' +
'<a class="meta-link" href="' +
escapeHtml(pdfHref) +
'"' +
LINK_ATTRS +
">PDF</a>" +
explorerLink +
dataLink +
'<span class="digest" title="' +
escapeHtml(item.pdf_blake3 || "") +
'">blake3:' +
shortDigest(item.pdf_blake3) +
"</span>" +
"</div>" +
"</article>"
);
}
function render(items) {
var publishable = items.filter(function (i) {
return i.publish === true;
});
publishable.sort(function (a, b) {
return (a.order || 0) - (b.order || 0);
});
if (publishable.length === 0) {
listEl.innerHTML =
'<div class="empty">No public artifacts available.</div>';
return;
}
listEl.innerHTML = publishable.map(renderCard).join("");
}
function fail(msg) {
listEl.innerHTML =
'<div class="empty">Failed to load manifest: ' +
escapeHtml(msg) +
"</div>";
}
fetch("./manifest.json", { cache: "no-store" })
.then(function (r) {
if (!r.ok) throw new Error("HTTP " + r.status);
return r.json();
})
.then(function (m) {
if (!m || !Array.isArray(m.items)) {
throw new Error("manifest missing items array");
}
render(m.items);
})
.catch(function (e) {
fail(e.message || String(e));
});
})();
</script>
</body>
</html>