fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools
, '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(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors - #189

Merged
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse
Jun 7, 2026
Merged

fix(loops): sandbox live-path — sandbox 0.4.3 (SSE reconnect) + poll session-id + fail-loud infra errors#189
drewstone merged 1 commit into
mainfrom
fix/sandbox-live-path-sse

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

What

The in-box agentic batch path (runLoop → sandbox → benchmark) was losing its SSE prompt stream on long quiet turns (clone/build/test), surfacing as Stream dropped without terminal eventReplay endpoint 404. Root cause: the bench resolved @tangle-network/sandbox0.4.2, which drops the stream on a long tail. 0.4.3's reconnect-backoff survives it.

Verified

A commit0 in-box rollout (clone real repo → opencode implements → repo pytest judges) streamed >520s with zero drops on 0.4.3, completed end-to-end, wrote real RunRecords. On 0.4.2 the same path dropped at ~256s.

Changes

  • bench: @tangle-network/sandbox^0.4.0^0.4.3.
  • experiment.ts: surface the underlying iter0.error (an [infra-cause] line) instead of hiding every failure behind a generic INFRA-ERROR label — a swallowed-error fail-loud gap that cost real debugging time.
  • sandbox-lineage.ts poll-mode: follow the session id dispatchPrompt actually assigned (DispatchedSession.sessionId), not the client-minted one. Polling the wrong id 404s the session-events endpoint.

Residual (not fixed here)

Poll-mode (dispatchPrompt + session().result()) is still gated on a platform session-events endpoint for dispatched sessions (result()_sessionEvents→404 on all SDK versions). SSE is the working batch path; poll-mode remains opt-in and currently unusable until the platform serves events for dispatched sessions.

…, poll follows assigned session id, surface infra errors
The in-box agentic batch path (runLoop -> sandbox -> benchmark) lost its SSE
stream on long quiet turns (clone/build/test): the bench resolved
@tangle-network/sandbox 0.4.2, which drops the prompt stream without a terminal
event on a long tail. 0.4.3's reconnect-backoff survives it — a commit0 in-box
rollout streamed >520s with zero drops on 0.4.3.
- bench: @tangle-network/sandbox ^0.4.0 -> ^0.4.3
- experiment.ts: surface the underlying iter0 error instead of hiding it behind a
generic INFRA-ERROR (a swallowed-error fail-loud gap)
- sandbox-lineage poll-mode: follow the session id dispatchPrompt assigned
(DispatchedSession.sessionId), not the client-minted one — polling the wrong id
404s the session-events endpoint. Poll-mode still needs a platform session-events
endpoint for dispatched sessions; SSE is the working batch path.
@tangletools

Copy link
Copy Markdown
Contributor

⚠️ Review Incomplete — 2b23c33a

At least one required reviewer lane failed closed. No approval or request-changes review was published. Trigger a fresh review on the current PR head.

tangletools · 2026-06-07T00:46:41Z

@tangletools

Copy link
Copy Markdown
Contributor

✅ No Blockers — 2b23c33a

Readiness 92/100 · Confidence 80/100 · 1 finding (1 low)

deepseek: Correctness 92 · Security 92 · Testing 92 · Architecture 92

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

🟡 LOW No test coverage for the platform-session-remap scenario — src/runtime/sandbox-lineage.ts

The poll-mode test at tests/loops/sandbox-lineage.test.ts:167-221 uses a fake dispatchPrompt that returns o?.sessionId ?? 'minted' — always echoing the supplied ID. The core fix (using the platform-assigned sessionId) has no test where dispatchPrompt returns a different ID than the one supplied. Adding a test with a divergent sessionId would cover the exact bug this PR fixes. Impact: low — the fix is straightforward and the existing test proves dispatchPrompt fires and the result path works end-to-end.


tangletools · 2026-06-07T01:09:23Z · trace

@tangletoolstangletools left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Approved — 1 non-blocking finding — 2b23c33a

Full multi-shot audit completed 4/4 planned shots over 4 changed files. Global verifier still owns final merge decision.

Full immutable report for this review: trace

Summary comment for this run: full summary


tangletools · 2026-06-07T01:09:23Z · immutable trace

@drewstone
drewstone merged commit cb1029a into mainJun 7, 2026
1 check 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.

2 participants

@drewstone@tangletools