') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); feat: certify npm releases across operating systems by heimanba · Pull Request #17 · modelstudioai/OpenAgentPack · GitHub
Skip to content

feat: certify npm releases across operating systems - #17

Merged
heimanba merged 1 commit into
mainfrom
codex/npm-cross-os-release-verification
Jul 17, 2026
Merged

feat: certify npm releases across operating systems#17
heimanba merged 1 commit into
mainfrom
codex/npm-cross-os-release-verification

Conversation

@heimanba

Copy link
Copy Markdown
Contributor

What changed

  • Split the release workflow into preflight, npm publish/tag, registry readiness, post-release certification, and final GitHub Release stages.
  • Certify the exact published npm versions on Ubuntu, Windows, and macOS with Node.js 22 and 24.
  • Add a weekly Node.js 26 compatibility canary across all three operating systems.
  • Add a real consumer smoke test for npm provenance/signatures, SDK entry points, CLI help/version/offline validation, and Playground HTTP startup.
  • Raise the maintained Node.js baseline to 22 and align CI/documentation with Node.js 22/24.
  • Use npm pack --dry-run for registry-independent package inspection so an idempotent retry is not rejected when the version already exists.

Why

A successful npm publish only proves that the registry accepted the tarball. It does not prove that the exact public package can be installed and executed by consumers on the operating systems and Node.js versions we claim to support. The GitHub Release is now the certification signal: it is created only after the public registry artifacts pass the cross-platform matrix.

Impact

  • Supported Node.js baseline becomes >=22.
  • GitHub Release creation waits for post-publish consumer certification.
  • A failed OS/Node combination leaves the npm artifact published but prevents it from being presented as a certified GitHub Release.

Verification

  • bun run verify:release in a clean worktree
  • repository pre-push verify:push profile
  • public npm 0.0.2 consumer smoke on macOS with Node.js 24
  • workflow YAML parse and targeted release/governance tests

Change-Id: I1826efe4bf8457db7fd976b779aade310a8d2c2b
@heimanba
heimanba marked this pull request as ready for review July 17, 2026 02:51
@heimanba
heimanba merged commit 06f8527 into mainJul 17, 2026
15 checks passed
@heimanba
heimanba deleted the codex/npm-cross-os-release-verification branch July 17, 2026 02:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@heimanba