Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading
, '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); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: evolution_prompt quick-ref — add #589 G129 stale-check exception narrowing entry by argszero · Pull Request #590 · argszero/emrg · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions emrg/server/evolution_prompt.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -363,6 +363,7 @@ When reading rants, follow these rules:
> - GUI test port-file isolation + scheduler connect-failure alert (#583 外部贡献 pm25coder,G129 rant 2026-08-09T08:03:46:Windows 测试 setupTempHome 只设 HOME 不设 USERPROFILE,os.homedir() 仍读 USERPROFILE → 假 port/token 写进真实 ~/.emrg/emrgd.port → 演化周期 10h 连不上 daemon(WinError 1225);修复=①daemon_client.js PORT_FILE(projectDir=os.homedir()) 参数化,全部调用点传 this.projectDir,生产默认不变;②测试隔离守卫 assertPortFileInTmp(写 port 文件前断言路径在 tmpHome 内)+ setupTempHome 一并重定向 USERPROFILE;③integration findPython 上溯 3 级(test→gui→emrg→仓库根,此前 2 级解析到 emrg/ 包目录找不到 .venv → 回退 PATH 损坏 python.exe);④scheduler `_CONNECT_FAIL_ALERT=3` 连续连接失败计数器:达阈值 WARNING→ERROR 升级 + 可操作提示(检查 emrgd.port),成功连接归零,失败不写 log 不计空循环;⑤doc-count guard 纳入 README.cn.md(CJK 全角括号/「N 项」归一化);+2 pytest 634→636,GUI 96 全绿) ✅
> - Saturation halt → low-frequency heartbeat full cycles (#585 宿主 rant 2026-08-09T09:35:55,覆盖 #559 完全停机:保护=降频不是停止,**永不停机**——≥30 空轮后不 skip,按 heartbeat 间隔继续跑完整六步循环;`_heartbeat_interval()` = max(interval, min(interval×8, 8h))(60s 任务→480s=8 分钟 / 10min→80min / 1h→8h / ≥8h 任务不变);run loop wait_timeout 饱和时用 heartbeat,manual trigger / 上游 ls-remote 推进立即恢复正常频率(计数清零);`_saturation_halt_active()` → `_saturation_heartbeat_active()`,日志 "never halting";新 rant 最迟一个心跳周期内处理;持久化语义不变;+3 pytest 636→639(公式 7 例 / 饱和 tick 仍跑完整 cycle / 日志无 "skipping" / 上游恢复 / 无 git 仓库不崩),639 全绿,README/Agent/README.cn 计数同步) ✅
> - Windows integration-test tree-kill (#587 外部贡献 pm25coder,G130 同族于 G129 rant 2026-08-09T08:03:46:Windows 集成测试 `process.kill(-pid)` 进程组杀是 no-op(负 PID 不受支持,抛 ESRCH)→ 被 kill 的 daemon 变孤儿进程残留,G43 stale-port 重连测试本地必挂;修复=新增 `killProcessTree` 帮助函数(win32 分支 `taskkill /PID <pid> /T /F` 树杀+强杀,windowsHide:true + stdio:ignore + 错误吞掉;POSIX 分支保持既有 group-kill),killDaemon SIGTERM→3s→SIGKILL 回退链与 stale-port 测试两处调用点全部改走帮助函数;纯测试改动(21+/3-,GUI 96 / pytest 639 计数不变);判别力=负 PID 语义平台差异,win32 分支由本地实跑验证,POSIX 分支 CI 31289054189 SUCCESS 无回归) ✅
> - Stale-check exception narrowing (#589 外部贡献 pm25coder,G129 同族续:`check_and_restart_if_stale()` 裸 `except Exception` 吞掉一切——AuthError(token 不匹配=配置/安装问题,用户必须看到)与编程错误(AttributeError 等真 bug)被静默隐藏,掩盖 #583 家族根因;修复=收窄为仅瞬态清单(ConnectionRefusedError/FileNotFoundError/OSError/JSONDecodeError/TimeoutError/**ConnectionClosed**——websockets 握手后 ping 中途断线场景),AuthError 与编程错误向上传播给 ensure_connected 调用者;+2 测试 639→641(AuthError 传播 / AttributeError 传播,负态 test_server_unreachable_silent 仍吞瞬态),三处文档计数同步;判别力=删 `not error` 即红/删 return 即 "log" not in captured 红) ✅

#### 2.2 Latest GitHub code changes

Expand Down
Loading