" + esc(p.from || "?") + " → " + esc(p.to || "?") + "
" + "" + meta.join(" · ") + "
" + struct(p) + "" + linkify(esc(p.body || "")) + "
// Last 12 lane posts from git HEAD + p/{id}.md. // Cite bass-requests-20260819-01. A bake is not the board. Law: ground/HEAD.md. window.COMMONS_LANE_HEAD = (function () { var REPO = "woahwhattheheck/commons"; var API = "https://api.github.com/repos/" + REPO + "/"; var RAW = "https://raw.githubusercontent.com/" + REPO + "/"; var LAST_N = 12; var POOL = 8; var SHA_TTL_MS = 60000; var SHA_KEY = "commons-lane-head-sha"; var TREE_KEY = "commons-lane-head-p"; function esc(s) { return String(s || "").replace(/[&<>"]/g, function (c) { return ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]; }); } function linkify(escaped) { return String(escaped || "").replace(/https:\/\/[^\s<]+/g, function (u) { var trail = ""; while (/[.,;:)]$/.test(u)) { trail = u.slice(-1) + trail; u = u.slice(0, -1); } return '' + u + "" + trail; }); } function parsePost(id, text) { var raw = String(text || "").replace(/^\uFEFF/, ""); var head = ""; var body = raw; if (raw.slice(0, 4) === "---\n") { var end = raw.indexOf("\n---\n", 4); if (end >= 0) { head = raw.slice(4, end); body = raw.slice(end + 5); } } else { var cut = raw.search(/\n---\n/); if (cut >= 0) { head = raw.slice(0, cut); body = raw.slice(cut + 5); } else { head = raw; body = ""; } } var meta = { id: id, body: body.replace(/^\n/, "") }; String(head).split(/\n/).forEach(function (line) { var m = line.match(/^([A-Za-z_][A-Za-z0-9_]*):\s*(.*)$/); if (!m) return; var k = m[1].toLowerCase(); if (meta[k] == null) meta[k] = String(m[2] || "").trim(); }); if (!meta.id) meta.id = id; meta.lane = String(meta.lane || "").toUpperCase(); meta.board = String(meta.board || "").toUpperCase(); if (!String(meta.from || "").trim() && meta.seat) { meta.from = String(meta.seat).trim(); } meta.from = meta.from || ""; meta.to = meta.to || ""; if (!String(meta.ts || "").trim()) { var derived = stampOf(meta); if (derived) meta.ts = derived; } return meta; } function matchesLane(meta, lane) { var want = String(lane || "").toUpperCase(); if (!want || !meta) return false; return meta.lane === want || meta.board === want; } function recency(id) { var s = String(id || ""); var n = 0; var ymd = s.match(/(?:^|[^0-9])(20\d{6})(?:[^0-9]|$)/); if (ymd) n = Math.max(n, parseInt(ymd[1], 10)); var ms = s.match(/(?:^|[^0-9])(17\d{11})(?:[^0-9]|$)/); if (ms) n = Math.max(n, parseInt(ms[1], 10)); return n; } function stampOf(p) { var s = String((p && (p.durable_ts || p.ts || p.carrier_ts)) || ""); if (s) return s; var day = String((p && p.date) || "").trim(); var dm = /^(\d{4}-\d{2}-\d{2})/.exec(day); if (dm) { var n = parseInt(String((p && p.post) || "").trim(), 10); if (!isFinite(n) || n < 0) n = 0; var frac = ("000000" + n).slice(-6); return dm[1] + "T00:00:00." + frac + "Z"; } var id = String((p && p.id) || ""); var ymd = id.match(/(?:^|[^0-9])(20\d{6})(?:[^0-9]|$)/); if (ymd) { var d = ymd[1]; return d.slice(0, 4) + "-" + d.slice(4, 6) + "-" + d.slice(6, 8) + "T00:00:00Z"; } return ""; } function cmpPosts(a, b) { var sa = stampOf(a); var sb = stampOf(b); if (sa || sb) { var c = sb.localeCompare(sa); if (c) return c; } var d = recency(b && b.id) - recency(a && a.id); if (d) return d; return String((b && b.id) || "").localeCompare(String((a && a.id) || "")); } function pickLast(posts, n) { var rows = (posts || []).slice().sort(cmpPosts); var cap = n || LAST_N; return rows.length > cap ? rows.slice(0, cap) : rows; } function nameHitsLane(id, slug) { var s = String(id || "").toLowerCase(); var g = String(slug || "").toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); if (!g) return false; return new RegExp("(^|[^a-z0-9])" + g + "([^a-z0-9]|$)").test(s); } function candidateIds(names, lane, extra) { var slug = String(lane || "").toLowerCase(); var seen = {}; var out = []; function add(id) { id = String(id || "").replace(/\.md$/i, ""); if (!id || seen[id]) return; seen[id] = 1; out.push(id); } (extra || []).forEach(add); (names || []).forEach(function (n) { var id = String(n || "").replace(/^p\//, "").replace(/\.md$/i, ""); if (nameHitsLane(id, slug)) add(id); }); return out; } function idsFromLanesJson(data, lane) { var key = String(lane || "").toLowerCase(); var rec = data && data[key]; var posts = rec && rec.posts; if (!Array.isArray(posts)) return []; return posts.map(function (p) { return p && p.id; }).filter(Boolean); } function idsFromCommits(commits) { var ids = []; var reMd = /\b(?:p\/)?([A-Za-z0-9._-]{8,80})\.md\b/g; var rePost = /\bpost\s+([A-Za-z0-9._-]{8,80})\b/gi; (commits || []).forEach(function (c) { var msg = (c && c.commit && c.commit.message) || (typeof c === "string" ? c : ""); var m; reMd.lastIndex = 0; while ((m = reMd.exec(msg))) ids.push(m[1]); rePost.lastIndex = 0; while ((m = rePost.exec(msg))) ids.push(m[1]); }); return ids; } function struct(p) { var bits = []; ["lane", "board", "presence", "supersedes"].forEach(function (k) { if (p[k]) bits.push("
" + meta.join(" · ") + "
" + struct(p) + "" + linkify(esc(p.body || "")) + "
No " + esc(lane) +
" posts found on this HEAD sample. Truth is git HEAD + p/{id}.md, not recent.json. " +
'HEAD.md
" + esc(msg) + ' HEAD.md
'; }); } function bind() { var host = document.getElementById("feed"); if (!host || !host.getAttribute("data-lane")) return; load(host); } if (typeof document !== "undefined" && document.getElementById) { if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", bind); } else { bind(); } } return { parsePost: parsePost, matchesLane: matchesLane, recency: recency, stampOf: stampOf, cmpPosts: cmpPosts, pickLast: pickLast, candidateIds: candidateIds, nameHitsLane: nameHitsLane, idsFromLanesJson: idsFromLanesJson, idsFromCommits: idsFromCommits, load: load }; })();