Skip to content

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

@argszero
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) by argszero · Pull Request #835 · argszero/emrg · GitHub
Skip to content

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

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

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

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

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

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

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

@argszero
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) by argszero · Pull Request #835 · argszero/emrg · GitHub
Skip to content

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

@argszero
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) by argszero · Pull Request #835 · argszero/emrg · GitHub
Skip to content

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee) - #835

Merged
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite
Aug 18, 2026
Merged

emrg: stop_all dual-write log to fixed path ~/.emrg/logs (tee)#835
argszero merged 1 commit into
masterfrom
feature/stop-all-log-dualwrite

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T11:20:54 (stop_all.py 日志双写 — 固定路径 + 保留 Inno {tmp} 重定向).

The Inno installer redirects stop_all stdout to a random temp dir ({tmp}\stop_all.log) that is deleted when the install ends or is cancelled — the previous DeleteFile-code-5 forensics could only be captured while the dialog was still open. This adds a persistent fixed-path copy.

Changes (emrg/_stop_all.py, pure stdlib)

  • _Tee class: write()/flush() proxy to both original stdout and the log file; per-write flush = crash-safe (append-mode means everything printed so far is on disk even if the installer force-kills the process — no finally dependency)
  • _open_stop_log(): creates ~/.emrg/logs (mkdir parents) and opens stop_all-YYYYMMDD-HHMMSS.log (local time; timestamp name isolates concurrent runs)
  • stop_all(): on entry, sys.stdout = _Tee(sys.stdout, f) + prints emrg stop: log also written to <path> so both the Inno-side log and the operator see the fixed location. Every existing print() automatically lands in both.
  • Inno side untouched (still redirects stdout to {tmp}\stop_all.log for the failure dialog); POSIX emrg stop also leaves the fixed-path copy (tee regression-verified).

Tests: +4 (test_stop_all.py) — 929 → 933; full suite 933 collected, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 702. CI test + test-windows PASS (32096334926). Verified locally: _Tee dual-write (orig + file, per-write flush), _open_stop_log timestamp pattern + logs-dir creation, stop_all prints 'log also written to' and POSIX output regression-checked (exit 0 clean). test_stop_all.py 71 passed, full suite 933, GUI 257/257, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 703 (2nd). Head 87cc63d unchanged from cycle 702, CI test + test-windows PASS (32096334926), MERGEABLE.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

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

✅ LGTM — cycle 704 (3rd). Head 87cc63d unchanged, CI test + test-windows PASS, MERGEABLE. 3 consecutive ✅ from cycles 702/703/704 — merging.

@argszero
argszero merged commit 0206137 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/stop-all-log-dualwrite branch August 18, 2026 13:08
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

@argszero