docs: publish Preview 19 dogfood evidence
Export the reviewed allowlisted snapshot from private source commit 05928cebd01b586cf9e9d4b8c8537a7605a6068c. This records the exact candidate, bounded capacity result, stateful migration scratch requirement, authenticated batch identity proof, and immediate live acceptance evidence. AI-Assisted: OpenAI Codex Signed-off-by: Cole Speelman <crspeelman@gmail.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title description">
|
||||
<title id="title">Gamertan Observatory</title>
|
||||
<desc id="description">Three calm observation rings around one bright point.</desc>
|
||||
<rect width="512" height="512" rx="96" fill="#111715"/>
|
||||
<g fill="none" stroke="#b5e3c5" stroke-width="24">
|
||||
<circle cx="256" cy="256" r="168"/>
|
||||
<ellipse cx="256" cy="256" rx="168" ry="72"/>
|
||||
<ellipse cx="256" cy="256" rx="72" ry="168"/>
|
||||
</g>
|
||||
<circle cx="256" cy="256" r="28" fill="#f7c873"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 610 B |
@@ -0,0 +1,37 @@
|
||||
/* SPDX-License-Identifier: AGPL-3.0-only */
|
||||
:root{color-scheme:dark;--ink:#f6f0e2;--muted:#bfb8aa;--paper:#111715;--panel:#18221f;--line:#4f665e;--accent:#b5e3c5;--focus:#f7c873;font:100%/1.6 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
|
||||
*{box-sizing:border-box}
|
||||
html{background:var(--paper);color:var(--ink)}
|
||||
body{margin:0;min-width:18rem}
|
||||
a{color:var(--accent);text-underline-offset:.2em}
|
||||
a:hover{text-decoration-thickness:.16em}
|
||||
button,input,select,textarea{font:inherit}
|
||||
button,.button{display:inline-block;border:.12rem solid var(--ink);border-radius:.2rem;background:var(--ink);color:var(--paper);padding:.65rem 1rem;font-weight:700;text-decoration:none;cursor:pointer}
|
||||
button.secondary,.secondary{background:transparent;color:var(--ink)}
|
||||
:focus-visible{outline:.2rem solid var(--focus);outline-offset:.2rem}
|
||||
.skip-link{position:absolute;left:1rem;top:-8rem;background:var(--ink);color:var(--paper);padding:.6rem;z-index:10}.skip-link:focus{top:1rem}
|
||||
.site-header,.site-footer,main{width:min(92rem,100%);margin-inline:auto;padding-inline:clamp(1rem,4vw,3rem)}
|
||||
.site-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-block:1.25rem;border-bottom:.08rem solid var(--line)}
|
||||
.site-header nav{display:flex;gap:1rem}.wordmark{color:var(--ink);font-weight:800;text-decoration:none;letter-spacing:.02em}
|
||||
.site-footer{margin-top:4rem;padding-block:2rem;border-top:.08rem solid var(--line);color:var(--muted)}
|
||||
.hero{padding-block:clamp(4rem,12vw,9rem);max-width:72rem}.hero h1{font-size:clamp(3rem,10vw,8rem);line-height:.9;letter-spacing:-.055em;max-width:11ch;margin:.15em 0}.lede{font-size:clamp(1.15rem,2vw,1.5rem);max-width:48rem;color:var(--muted)}
|
||||
.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-size:.78rem;font-weight:800;color:var(--accent)}
|
||||
.section-grid{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(0,2fr);gap:clamp(2rem,6vw,7rem);padding-block:clamp(3rem,7vw,6rem);border-top:.08rem solid var(--line)}
|
||||
h1,h2,h3,h4{line-height:1.1;text-wrap:balance}h2{font-size:clamp(2rem,5vw,4.5rem);margin:.15em 0}h3{font-size:1.4rem}.prose{max-width:52rem}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.cards article,.auth-card,.signal-card,.saved-grid>section,.live-status{background:var(--panel);border:.08rem solid var(--line);padding:clamp(1rem,3vw,2rem)}
|
||||
.auth-shell{min-height:70vh;display:grid;place-items:center}.auth-card{width:min(34rem,100%);margin-block:4rem}.auth-card h1{font-size:clamp(2.3rem,8vw,4rem)}
|
||||
form{display:grid;gap:.55rem}label{font-weight:700;margin-top:.6rem}input,select,textarea{width:100%;border:.1rem solid var(--line);background:var(--paper);color:var(--ink);padding:.7rem;border-radius:.2rem}textarea{min-height:7rem;resize:vertical}.form-error{border-left:.3rem solid #ff9b8f;padding:.7rem;background:#301b1b}
|
||||
.app-intro{display:flex;align-items:end;justify-content:space-between;gap:2rem;padding-block:3rem}.app-intro h1{font-size:clamp(2.6rem,7vw,6rem);margin:.1em 0}.logout{display:block}.organization-nav{display:flex;flex-wrap:wrap;gap:.7rem 1rem;align-items:center;border-block:.08rem solid var(--line);padding-block:1rem}.organization-nav a[aria-current="page"]{color:var(--ink);font-weight:800}
|
||||
.live-status{margin-block:1rem}.live-status p{margin:0}.signal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;padding-block:2rem}.signal-card{min-width:0}.signal-card h2{font-size:clamp(1.8rem,4vw,3rem)}
|
||||
details{margin-block:1rem}pre{max-width:100%;overflow:auto;background:#0a0f0d;border:.08rem solid var(--line);padding:.8rem;white-space:pre-wrap;overflow-wrap:anywhere}
|
||||
.table-scroll{max-width:100%;overflow:auto;border:.08rem solid var(--line)}table{width:100%;border-collapse:collapse;min-width:40rem}caption{text-align:left;padding:.7rem;font-weight:800}th,td{text-align:left;vertical-align:top;border-top:.06rem solid var(--line);padding:.55rem .7rem;overflow-wrap:anywhere}th{color:var(--accent)}.unit{font-weight:400;color:var(--muted)}
|
||||
.saved-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.saved-grid article+article{border-top:.08rem solid var(--line);margin-top:1rem;padding-top:1rem}
|
||||
.editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.editor-card{background:var(--panel);border:.08rem solid var(--line);padding:clamp(1rem,3vw,2rem)}.builder-card{grid-column:1/-1}.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem 1rem}.optional{color:var(--muted);font-size:.9em;font-weight:400}button:disabled{cursor:not-allowed;opacity:.55}.breadcrumbs{display:flex;flex-wrap:wrap;gap:.5rem;padding-top:1.5rem}.dashboard-panels{display:grid;gap:1rem}.stat{font-size:clamp(2rem,8vw,5rem);font-weight:800;line-height:1;margin:.5em 0}
|
||||
.meter-figure{margin:1.5rem 0}.meter-figure figcaption{font-weight:800;margin-bottom:.75rem}.meter-chart{display:grid;gap:.7rem;list-style:none;margin:0;padding:0}.meter-chart li{display:grid;grid-template-columns:minmax(8rem,1fr) minmax(10rem,3fr) minmax(5rem,auto);gap:.8rem;align-items:center}.meter-label,.meter-value{overflow-wrap:anywhere}.meter-value{font-variant-numeric:tabular-nums;text-align:right}meter{width:100%;height:1.2rem;accent-color:var(--accent)}
|
||||
.incident-list{display:grid;gap:1rem}.incident-card{background:var(--panel);border:.08rem solid var(--line);border-left:.35rem solid var(--accent);padding:clamp(1rem,3vw,2rem)}.incident-card[data-state="firing"]{border-left-color:#ff9b8f}.incident-card[data-state="resolved"]{opacity:.78}.incident-card dl,.saved-grid dl{display:grid;gap:.5rem;margin-block:1rem}.incident-card dl div,.saved-grid dl div{display:grid;grid-template-columns:minmax(8rem,1fr) minmax(0,2fr);gap:1rem}.incident-card dt,.saved-grid dt{font-weight:800}.incident-card dd,.saved-grid dd{margin:0}.incident-actions{display:flex;align-items:end;flex-wrap:wrap;gap:.75rem}.incident-actions form{display:flex;align-items:end;gap:.45rem}.incident-actions label{margin:0}.incident-actions select{width:auto;min-width:10rem}
|
||||
.offline-control{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(0,2fr);gap:clamp(2rem,6vw,7rem);margin-block:1rem;padding:clamp(1rem,3vw,2rem);border:.08rem solid var(--line);background:var(--panel)}.offline-control h2{font-size:clamp(1.5rem,3vw,2.5rem)}.offline-control [role="status"]{color:var(--muted)}
|
||||
.explore-layout{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(0,2fr);gap:clamp(2rem,6vw,7rem);padding-block:2rem;border-top:.08rem solid var(--line)}.explore-layout h2,.query-results h2{font-size:clamp(2rem,5vw,4rem)}.query-workbench textarea{min-height:14rem;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.field-help{color:var(--muted)}.quick-queries{display:flex;flex-wrap:wrap;gap:.6rem;margin-block:1.5rem}.quick-queries form{display:block}.query-results{padding-block:3rem;border-top:.08rem solid var(--line)}.query-results-heading{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(0,2fr);gap:clamp(2rem,6vw,7rem);align-items:end}.query-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;margin:0}.query-stats div{border-left:.18rem solid var(--line);padding-left:.75rem}.query-stats dt{color:var(--muted);font-size:.82rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.query-stats dd{margin:.15rem 0 0;font-size:1.15rem;font-variant-numeric:tabular-nums;font-weight:800}
|
||||
@media(max-width:55rem){.section-grid,.cards,.signal-grid,.saved-grid,.editor-grid,.field-grid,.offline-control,.explore-layout,.query-results-heading{grid-template-columns:1fr}.query-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.app-intro{align-items:start;flex-direction:column}.hero h1{letter-spacing:-.035em}.site-header{align-items:flex-start;flex-direction:column}.site-header nav{flex-wrap:wrap}.meter-chart li{grid-template-columns:1fr}.meter-value{text-align:left}.incident-card dl div{grid-template-columns:1fr;gap:.1rem}.incident-actions,.incident-actions form{align-items:stretch;flex-direction:column}.incident-actions select{width:100%}}
|
||||
@media(max-width:24rem){:root{font-size:95%}.hero h1{font-size:2.75rem;letter-spacing:-.025em}.site-header,.site-footer,main{padding-inline:.8rem}}
|
||||
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
|
||||
@media(forced-colors:active){button,.button,.auth-card,.signal-card,.saved-grid>section,.editor-card,.live-status,.incident-card,.offline-control,.query-stats div{border:1px solid CanvasText}.eyebrow,a{color:LinkText}}
|
||||
@media print{*{color:#000!important;background:#fff!important}.site-header nav,.logout,.live-status,.button,script{display:none!important}.site-header,.site-footer,.section-grid{border-color:#777}.signal-grid,.section-grid{display:block}.signal-card{break-inside:avoid;margin-block:1rem}.table-scroll{overflow:visible}table{min-width:0;font-size:9pt}}
|
||||
@@ -0,0 +1,146 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
(() => {
|
||||
"use strict";
|
||||
const serviceWorker = "serviceWorker" in navigator
|
||||
? navigator.serviceWorker.register("/service-worker.js", {scope: "/"})
|
||||
: Promise.reject(new Error("service workers unavailable"));
|
||||
|
||||
const messageWorker = async message => {
|
||||
const registration = await serviceWorker;
|
||||
const worker = registration.active || registration.waiting || registration.installing;
|
||||
if (!worker) throw new Error("service worker unavailable");
|
||||
return await new Promise((resolve, reject) => {
|
||||
const channel = new MessageChannel();
|
||||
const timeout = window.setTimeout(() => reject(new Error("service worker timeout")), 5000);
|
||||
channel.port1.onmessage = event => {
|
||||
window.clearTimeout(timeout);
|
||||
event.data && event.data.ok ? resolve(event.data) : reject(new Error("service worker request failed"));
|
||||
};
|
||||
worker.postMessage(message, [channel.port2]);
|
||||
});
|
||||
};
|
||||
|
||||
const decodeURLBase64 = value => {
|
||||
const normalized = value.replace(/-/g, "+").replace(/_/g, "/");
|
||||
const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
|
||||
const decoded = window.atob(padded);
|
||||
return Uint8Array.from(decoded, character => character.charCodeAt(0));
|
||||
};
|
||||
|
||||
const pushRequest = async (button, action, subscription) => {
|
||||
const serialized = subscription.toJSON();
|
||||
const status = action === "status";
|
||||
const response = await fetch(status ? "/api/v1/push/subscription/status" : "/api/v1/push/subscription", {
|
||||
method: action === "delete" ? "DELETE" : "POST",
|
||||
credentials: "same-origin",
|
||||
cache: "no-store",
|
||||
headers: {"Content-Type": "application/json", "X-CSRF-Token": button.dataset.pushCsrf},
|
||||
body: JSON.stringify({
|
||||
organization_id: button.dataset.pushOrganization,
|
||||
endpoint: subscription.endpoint,
|
||||
keys: action === "save" ? serialized.keys : {p256dh: "", auth: ""}
|
||||
})
|
||||
});
|
||||
if (!response.ok) throw new Error("push subscription request failed");
|
||||
return await response.json();
|
||||
};
|
||||
|
||||
for (const button of document.querySelectorAll("[data-cache-inbox]")) {
|
||||
const status = document.querySelector("[data-cache-status]");
|
||||
serviceWorker.then(() => {
|
||||
button.disabled = false;
|
||||
if (status) status.textContent = "No private incident copy has been saved by this control yet.";
|
||||
}).catch(() => {
|
||||
if (status) status.textContent = "Offline saving is unavailable in this browser.";
|
||||
});
|
||||
button.addEventListener("click", async () => {
|
||||
button.disabled = true;
|
||||
if (status) status.textContent = "Saving a private, read-only incident snapshot…";
|
||||
try {
|
||||
await messageWorker({type: "cache-inbox", source: button.dataset.offlineSource, target: button.dataset.offlineTarget});
|
||||
if (status) status.textContent = "This incident inbox is available offline on this browser.";
|
||||
} catch (_) {
|
||||
if (status) status.textContent = "The offline incident snapshot could not be saved.";
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (const form of document.querySelectorAll('form[action="/logout/"]')) {
|
||||
form.addEventListener("submit", async event => {
|
||||
if (form.dataset.privateCacheCleared === "true") return;
|
||||
event.preventDefault();
|
||||
try { await messageWorker({type: "clear-private"}); } catch (_) {}
|
||||
form.dataset.privateCacheCleared = "true";
|
||||
form.requestSubmit();
|
||||
});
|
||||
}
|
||||
|
||||
for (const button of document.querySelectorAll("[data-push-toggle]")) {
|
||||
const status = document.querySelector("[data-push-status]");
|
||||
const ready = serviceWorker.then(async registration => {
|
||||
if (!("PushManager" in window) || !("Notification" in window)) throw new Error("push unavailable");
|
||||
const existing = await registration.pushManager.getSubscription();
|
||||
const registered = existing ? (await pushRequest(button, "status", existing)).subscribed === true : false;
|
||||
button.dataset.pushRegistered = registered ? "true" : "false";
|
||||
button.textContent = registered ? "Disable private incident nudges" : "Enable private incident nudges";
|
||||
button.disabled = false;
|
||||
if (status) status.textContent = registered ? "This browser is subscribed for this organization." : "This browser is not subscribed for this organization.";
|
||||
return registration;
|
||||
});
|
||||
ready.catch(() => { if (status) status.textContent = "Web Push is unavailable in this browser."; });
|
||||
button.addEventListener("click", async () => {
|
||||
button.disabled = true;
|
||||
try {
|
||||
const registration = await ready;
|
||||
let subscription = await registration.pushManager.getSubscription();
|
||||
if (subscription && button.dataset.pushRegistered === "true") {
|
||||
const result = await pushRequest(button, "delete", subscription);
|
||||
if (!result.remaining) await subscription.unsubscribe();
|
||||
button.dataset.pushRegistered = "false";
|
||||
button.textContent = "Enable private incident nudges";
|
||||
if (status) status.textContent = "This browser is no longer subscribed for this organization.";
|
||||
} else {
|
||||
let createdNow = false;
|
||||
if (!subscription) {
|
||||
const permission = await Notification.requestPermission();
|
||||
if (permission !== "granted") throw new Error("notification permission not granted");
|
||||
subscription = await registration.pushManager.subscribe({userVisibleOnly: true, applicationServerKey: decodeURLBase64(button.dataset.pushPublicKey)});
|
||||
createdNow = true;
|
||||
}
|
||||
try {
|
||||
await pushRequest(button, "save", subscription);
|
||||
} catch (error) {
|
||||
if (createdNow) await subscription.unsubscribe();
|
||||
throw error;
|
||||
}
|
||||
button.dataset.pushRegistered = "true";
|
||||
button.textContent = "Disable private incident nudges";
|
||||
if (status) status.textContent = "This browser will receive generic incident nudges.";
|
||||
}
|
||||
} catch (_) {
|
||||
if (status) status.textContent = "The browser push setting could not be changed.";
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const incidentCount = document.querySelector("[data-open-incident-count]");
|
||||
if (incidentCount && "setAppBadge" in navigator) {
|
||||
const count = Number.parseInt(incidentCount.dataset.openIncidentCount, 10);
|
||||
if (Number.isSafeInteger(count) && count >= 0) {
|
||||
const update = count === 0 && "clearAppBadge" in navigator ? navigator.clearAppBadge() : navigator.setAppBadge(count);
|
||||
Promise.resolve(update).catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
for (const status of document.querySelectorAll(".live-status[data-events-url]")) {
|
||||
const source = new EventSource(status.dataset.eventsUrl);
|
||||
source.addEventListener("refresh", () => {
|
||||
status.hidden = false;
|
||||
});
|
||||
window.addEventListener("pagehide", () => source.close(), {once: true});
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user