fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

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

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests) - #1077

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci
Jul 16, 2026
Merged

fix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)#1077
Astro-Han merged 2 commits into
mainfrom
fix/runtime-compaction-ci

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

CI on main has been red since #1066/#986 landed. Two independent breakages were masking each other — the runtime failure halted the sequential workspace chain before the CLI suite ran, so the CLI failure only surfaced once the runtime one was fixed. Neither fix can go CI-green alone, so both land here as two independently revertable commits.

1. fix(runtime): mid-turn capacity prune regression (#986)

#986 changed collectPrunablePrepareStepToolCallIds to unconditionally exclude the newest completed step from active tool-result pruning, so a freshly fetched result stays raw for one request. That default is right for the proactive token-saving path, but applied unconditionally it broke three pre-existing reviewed invariants that all require pruning the newest step when mid-turn capacity compaction is active:

  • the final-payload verdict must be able to rescue an oversized newest result to a placeholder instead of declaring context_budget_exhausted (mid-turn review finding C)
  • capacity/recovery rebuilds re-materialize raw bodies from the ledger, and the prune must re-archive them (capacity-replacement re-convergence)
  • an actively pruned tool result must stay a placeholder in the overflow retry request (overflow review round-3 P1)

The fix makes the newest-step exclusion conditional: the prune covers every completed step exactly when mid-turn capacity compaction is wired (midTurnState !== undefined), keeping #986's keep-newest-raw default for every other configuration. #986's semantic/attention compaction feature and its new tests are untouched; no test expectations changed. Isolation evidence: the two failing test files were not modified by #986, steps.slice(0, -1) was the only behavioral change on this path, and toggling that condition alone flips all 5 failures. #986's own newest-kept-raw tests only cover configurations without mid-turn capacity, which is why the conditional satisfies both contracts.

2. test(cli): non-hermetic ANSI color assertions (#1064/#1066)

tui-ansi.ts detects color capability from TERM/COLORTERM at module load and caches it. The pi-transcript and pi-tui-runner ANSI assertions never pinned the level, so they inherited ambient terminal capability: truecolor locally (macOS shells set COLORTERM=truecolor even with piped stdout), level 0 on Actions runners (no TERM/COLORTERM), where every color function is a no-op and the color assertions fail deterministically. The fix pins level 3 in both test files via the existing _setColorLevelForTesting seam, matching tui-ansi.test.ts's convention. Product detection is untouched and no assertion is weakened.

Verification

  • packages/runtimenpm test: 1963 pass, 0 fail, 7 skipped (was 5 fail); npm run typecheck clean
  • packages/clinpm test: 393 pass, 0 fail; npm run typecheck clean
  • CLI cluster under the reproducing condition: env -u COLORTERM TERM=dumb CI=true node --test → 0 fail across 10/10 iterations (pre-fix: 8 fail, proven by stashing the fix)
  • Repo-root npm run test:dist under CI-like env (env -u TERM -u COLORTERM CI=true): exit 0, 0 failures across all workspaces

Root cause of the masking

Runs 29477460801/29478404301 "passed" the CLI suite only because test:dist's sequential && chain halted at the runtime workspace; grep for the CLI suite names in those logs returns nothing. Every CI run that actually reached packages/cli since #1066 failed the color cluster.

…apacity
#986 unconditionally excluded the newest completed step from active
tool-result pruning, breaking three reviewed capacity-rescue invariants
(mid-turn finding C, capacity-replacement re-convergence, overflow
round-3 P1) and CI on main. Include the newest step exactly when
mid-turn capacity compaction is active, keeping the keep-newest-raw
default for every other configuration.
tui-ansi detects color capability from TERM/COLORTERM at module load, so
the pi-transcript and pi-tui-runner ANSI assertions inherited ambient
terminal capability: truecolor locally, level 0 on CI runners with no
TERM/COLORTERM, where every color function is a no-op and the #1064/#1066
color assertions fail deterministically. Pin level 3 via the existing
_setColorLevelForTesting seam, matching tui-ansi.test.ts.
@Astro-HanAstro-Han changed the title fix(runtime): let active prune cover the newest step under mid-turn capacityfix: restore green CI on main (runtime prune regression + non-hermetic CLI color tests)Jul 16, 2026
@Astro-Han
Astro-Han merged commit ca1ccaf into mainJul 16, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/runtime-compaction-ci branch July 25, 2026 15:14
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

@Astro-Han