fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(opencode:pin): resolve ref from the tag instead of leaving it stale - #222

Merged
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref
Jul 29, 2026
Merged

fix(opencode:pin): resolve ref from the tag instead of leaving it stale#222
jack-champagne merged 1 commit into
mainfrom
jack/pin-resolve-ref

Conversation

@jack-champagne

Copy link
Copy Markdown
Member

pnpm opencode:pin <tag> writes a lock that misreports its own provenance.

pinFromRelease only set ref when --ref was passed explicitly:

m.tag=tag;if(ref){m.ref=ref;}// no else — ref keeps the PREVIOUS value

So the ordinary invocation updates tag and both sha256s but leaves ref pointing at the previous release's commit.

Caught while bumping to v1.17.3-amicode.10 (#221) — the lock came out as:

"tag": "v1.17.3-amicode.10",
"ref": "bbe47b60bd7ffa0fabf96799fc134c57f69e0617", ← amicode.9's commit

Does it matter?

Not for the shipped artifact. In source: "release" — the committed default — ref is never read: fetchFromRelease downloads by tag and verifies by sha256. A wrong ref cannot produce a wrong binary.

It matters in two other ways:

  1. source: "local" validates it.fetchFromLocal compares the clone HEAD against manifest.ref and throws:
    clone … is at <head> but the lock pins <ref> — checkout the pinned ref, update opencode.lock.json, or pass --any-ref
    With a stale ref that message names the wrong commit, so a fork developer following it checks out the previous release.
  2. Provenance. The lock is the record of which fork commit is vendored. Silently wrong on every bump.

Fix

Resolve the tag to its commit when --ref is omitted. amicode-release cuts annotated tags, so git/ref/tags/<tag> yields a tag object that needs dereferencing; lightweight tags point straight at the commit. Both handled.

Explicit --ref still wins. Resolution failure raises a pointed error instead of silently writing a stale value:

pin: could not resolve harmoniqs/opencode@<tag> to a commit (…). Pass --ref <40-hex> explicitly if the tag is not reachable via gh.

Verification

End-to-end, real tag, no --ref:

before: "tag": "v1.17.3-amicode.9", "ref": "bbe47b60bd7…"
$ pnpm --filter amicode opencode:pin v1.17.3-amicode.10
[opencode:pin] opencode.lock.json → v1.17.3-amicode.10 @ e0105cd4d0
after: "tag": "v1.17.3-amicode.10", "ref": "e0105cd4d0d517354daaf47f5fd3d4776d708bf8"

e0105cd4d… is the commit v1.17.3-amicode.10 points at, confirmed by dereferencing the annotated tag.

Unit-level, against an injected resolver (resolveTagCommit is a seam on pinFromRelease, matching the existing download seam):

  • resolves ref from the tag when --ref is omitted
  • explicit --ref still wins
  • never silently leaves a stale ref
  • throws a helpful error when resolution fails
  • rejects a non-40-hex resolved ref

Stacked on nothing — independent of #221, which already carries the correctly-resolved ref because I passed --ref by hand there.

pinFromRelease only wrote `ref` when --ref was passed, so the ordinary
`pnpm opencode:pin <tag>` produced a lock claiming the new tag while `ref`
still pointed at the PREVIOUS release's commit.
Release mode ignores ref (tag drives the download, sha256 verifies it), so
this never shipped a wrong binary. But `source: "local"` validates ref
against the clone HEAD, so a stale ref tells a fork developer to check out
the wrong commit — and the lock misreports its own provenance either way.
Resolve the tag to its commit via gh, dereferencing annotated tags (what
amicode-release cuts). Explicit --ref still wins. Fails with a pointed error
rather than silently writing a stale value.
Caught bumping to v1.17.3-amicode.10: the lock read tag=.10 with
ref=bbe47b60 (.9's commit).
@jack-champagne
jack-champagne merged commit 1cff411 into mainJul 29, 2026
5 checks passed
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

@jack-champagne