ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4
, '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

ci: drop package-name so the grouped release PR resolves its component - #68

Merged
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch
Aug 28, 2026
Merged

ci: drop package-name so the grouped release PR resolves its component#68
nadeem4 merged 1 commit into
mainfrom
ci/remove-package-name-component-mismatch

Conversation

@nadeem4

Copy link
Copy Markdown
Owner

Release-please has refused to create the v0.1.0 tag across three cycles. It finds the correct merged release PR (#67) and then aborts:

✔ Merging 1 pull requests
⚠ pullRequestTitlePattern miss the part of '${scope}'
⚠ pullRequestTitlePattern miss the part of '${component}'
⚠ pullRequestTitlePattern miss the part of '${version}'
❯ Found pull request #67: 'chore: release main'
⚠ There are untagged, merged release PRs outstanding - aborting

That abort is a consequence, not the cause. Earlier in the same run, in the Building releases phase, is the real failure:

✔ Building release for path: .
⚠ PR component: undefined does not match configured component: nl2sql-engine

Root cause: getComponent() and getBranchComponent() disagree

release-please v17.3.0, src/strategies/base.ts:

asyncgetComponent(){if(!this.includeComponentInTag)return''; ... }// -> ""asyncgetBranchComponent(){returnthis.component|| ...;}// -> "nl2sql-engine"

getBranchComponent() ignores include-component-in-tag; getComponent() honours it. package-name: "nl2sql-engine" is what populated this.component.

Meanwhile, because separate-pull-requests is false, the Merge plugin names the grouped release branch itself:

headRefName: this.headBranchName??BranchName.ofTargetBranch(this.targetBranch).toString(),

giving release-please--branches--main — no component in it. On the way back, buildRelease compares branchName.component (undefined) against getBranchComponent() (nl2sql-engine), mismatches, and returns without building a release. No tag, ever.

This only bites with exactly one root package, grouping on, package-name set, and include-component-in-tag: false.

Verification

Driven against this repo and PR #67's real body through strategy.buildReleases() on release-please 17.3.0 — the exact version CI runs:

ConfigMerged PR titleResult
currentchore: release mainNO RELEASEPR component: undefined does not match configured component: nl2sql-engine (reproduces CI exactly)
current + group-pull-request-title-patternchore: release 0.1.0NO RELEASE — same component mismatch
this PR (no package-name)chore: release maintag=v0.1.0
no package-name + title patternchore: release mainNO RELEASEBad pull request title

Row 2 is the important one: changing the title pattern does not fix this. Row 4 is why it must not be changed — see below.

The title-pattern warnings are noise

pullRequestTitlePattern miss the part of '${...}' fires unconditionally whenever a pattern omits a placeholder. The built-in grouped-PR default is chore: release ${branch} (src/manifest.ts:295), which omits all three, so these warnings appear on healthy runs too.

A title without ${version} is not fatal. Release-please falls back to the PR body, whose <summary>0.1.0</summary> block carries the version — the documentation says it parses it "either via the pull request title or body format".

Do not strip autorelease: pending from #67

#67's label must be left alone, or 0.1.0 is stranded permanently.

With this fix, #67 tags v0.1.0 from its body, release-please swaps its label to autorelease: tagged, and the abort clears on its own. publish_pypi.yaml then fires on v0.1.0 (tags: ["v*"] — tag naming is unaffected, verified v0.1.0).

Stripping the label instead makes release-please forget #67 entirely. The manifest already reads 0.1.0, so the next release PR would bump 0.1.00.2.0 and 0.1.0 would never be published.

Why removing package-name is safe

It was inert apart from the bug. src/strategies/python.ts sets projectName = pyProject.name, so the __init__.py and changelog.json updaters read the root pyproject.toml — whose name is nl2sql-monorepo, not nl2sql-engine. The set of files release-please updates is unchanged, and getComponent() was already "".

Also in this PR

A troubleshooting section in docs/development/releasing.md recording both traps with their exact greppable symptoms: this component mismatch (including that the pullRequestTitlePattern warnings are not the cause — that misdiagnosis cost a cycle), and that the manifest holds the last released version and must be seeded below the first target.

No version, CHANGELOG.md, or .release-please-manifest.json was touched. Unit 231 passed, 1 skipped, 47 deselected and key-free integration 28 passed, both twice; mkdocs build --strict clean.

@nadeem4
nadeem4 merged commit ebc1162 into mainAug 28, 2026
8 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

@nadeem4