test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner
, '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

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green) - #55

Merged
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection
Jul 2, 2026
Merged

test: assert the real OPENCODE_CONFIG_CONTENT injection + merge (close boot_smoke false-green)#55
jack-champagne merged 2 commits into
mainfrom
rchari/25-boot-smoke-config-injection

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Closes #25.

boot_smoke.mjs is the only server-booting test and it boots withoutOPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission injection were removed entirely — a false-green surfaced in #12 review.

Where the fix lives

The real fix must use the realbuildOpencodeConfigContent (a transcribed copy would just drift — the thing #25 warns about). A .mjs boot script can't import the TS builder, so the assertion belongs in opencode_config.test.ts, which already runs the real binary via opencode debug config (resolves the merged config ≈ GET /config) with the real builder.

Change

  • test/opencode_config.test.ts — hardened the real-binary merge test to a full injection+merge assertion. It now writes a user global config with a distinctive model + permission key and asserts:
  • test/boot_smoke.mjs — documented its scope: binary /event liveness only; the injection + merge coverage lives in opencode_config.test.ts.

Validation

  • Full suite green (80 pass); test:smoke PASS.
  • Genuine catcher: temporarily dropping instructions from the builder reds this test at the instructions assertion (and the unit test) — proving it now catches the regression the false-green allowed.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 1, 2026 12:22
…(close boot_smoke false-green)
boot_smoke.mjs is the only server-booting test and boots WITHOUT
OPENCODE_CONFIG_CONTENT, so it stayed green even if the instructions/permission
injection were removed entirely (false-green surfaced in #12 review).
The real fix belongs where the REAL buildOpencodeConfigContent can be imported
(a .mjs can't import the TS builder without re-deriving it → drift). So harden the
existing real-binary test in opencode_config.test.ts: it already runs
`opencode debug config` (resolves the merged config, ≈ GET /config) with the real
builder; now it also
- writes a user global config with a distinctive `model` + `permission` key,
- asserts the injected `instructions` (AGENTS.md path) is present — the exact
regression the false-green missed,
- asserts the global `model` survives the deep-merge (Q129 provider selection),
- keeps the #22 permission deep-merge assertions (user key survives + ours added).
Verified it's a real catcher: dropping `instructions` from the builder reds this
test (and the unit test) at the `instructions` assertion.
boot_smoke.mjs: documented its scope (binary /event liveness only; the injection
+ merge coverage lives in opencode_config.test.ts) so the split is explicit.
80 extension tests green; test:smoke PASS. Closes#25.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (not skips)
The opencode config injection+merge integration test is skipIf(!OC_BIN), and the
fast job never fetched the vendored binary before vitest — so it self-skipped in
CI. That was the false-green ONE level up: even with the test added, a real
injection/merge regression would pass CI because the test didn't run. Fetch
opencode before `pnpm -r run test` so it executes and gates.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@jack-champagnejack-champagne left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed — right fix, and cleaner than re-deriving the config in the .mjs. Closes the false-green at both levels: (1) the injection assertion (instructions land + permission merge) now exists in opencode_config.test.ts against the real buildOpencodeConfigContent (no drift), and (2) CI fetches opencode before the suite so the OC_BIN-gated integration test actually runs instead of self-skipping — the deeper false-green. Folds in the #22 permission-merge check and adds global-model preservation (Q129). debug-config vs live GET /config is a fine call (same resolution path). Verified green.

@jack-champagne
jack-champagne merged commit 60549c4 into mainJul 2, 2026
4 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.

3 participants

@Rchari1@jack-champagne@kateebonner