tools: 将当前执行节点纳入 mesh 测速 - 用 status 首行识别本机(LOCAL_HOST),无需 .ssh/config 别名也强制收编 - 新增 run_on() 辅助:本机用 sh -c 本地执行,其他节点走 ssh - 替换 Phase2/3/4 及 get_iperf_path 的 ssh 调用点为 run_on - 修复:当前节点(mbairm2dong)不再因无 config 别名被排除 Co-Authored-By: Claude Code / deepseek-v4-flash / auto
tools: 使 mesh 测速脚本支持本地 status、config 收编节点、无参数显示 help - 无参数时显示 help 而非静默以 macminidong 运行 - 优先用本机 tailscale status 发现节点,失败才回退 control 节点 - 去掉 chedong@ 账号硬编码,改为 ~/.ssh/config 能把主机名解析为 Host 别名即收编 (liyangche@ 的 mbprolia 等亦可),并把完整域名归一化为 config 短别名 Co-Authored-By: Claude Code / deepseek-v4-flash / auto
v4.10: remove LLM enhancement — batch-enhance, callLLM, enhanceManPage Delete (6 files): cli/batch-enhance.php — batch LLM enhancement CLI start-enhance-all.sh — batch launcher src/enhance.php — callLLM(), callLLMEndpoint(), enhanceManPage(), cleanEmojiHtml() test/unit/test_enhance.php — LLM tests docs/llm-gateway-failure-analysis.md — LLM failure analysis Cleanup (5 files): src/bootstrap.php — remove require 'enhance.php' src/config.php — remove LLM_API_KEY/URL/MODEL/MAX_TOKENS src/web_footer.php — remove 'Enhanced by LLM' footer credit src/format_html.php — remove batch-enhance CLI examples phpMan.php — serve emoji_html from cache (no cleanEmojiHtml pass) Keep: CACHE_FORMAT_EMOJI_MD/HTML — existing ~69% enhanced pages continue to render from cache. No new enhancement generation possible. Rationale: STRATEGY.md §5.2 — AI bots (Meta 9K/day, ClaudeBot 0.9K/day) prefer raw markdown/json/mcp. Emoji adds no value for agent consumption. Co-Authored-By: Claude Code deepseek-v4-pro <noreply@taotoken.net>
feat: add --help / -h to tailscale-mesh-bench.sh Shows usage, options, examples, and node labels.
feat: Tailscale mesh iperf3 bandwidth benchmark script tools/tailscale-mesh-bench.sh — auto-discovers Tailscale nodes, starts iperf3 servers, runs full mesh bandwidth tests, outputs matrix table + optional JSON report. Usage: ./tools/tailscale-mesh-bench.sh [control_node] [options] --port=N iperf3 port (default 5201) --duration=N test duration in seconds (default 4) --json output machines.json --skip=hosts comma-separated hosts to skip --only=hosts comma-separated hosts to test only Co-Authored-By: Claude Code deepseek-v4-pro <noreply@taotoken.net>
fix: emoji cache entries never expire (7d TTL caused mass data loss) The default 7-day cache TTL was silently deleting ~12K emoji entries after they turned 7 days old. Each batch enhance run costs ~¥2K in LLM API calls — losing the results after a week is unacceptable. Set emoji_md/emoji_html TTL to 0 (never expire). HTML content cache and search results still use the standard TTL. Root cause: July 23-enhanced entries expired July 30, causing total emoji_html to drop from 17,751 (65.4%) to 5,049 (18.1%) overnight. Co-Authored-By: Claude <noreply@taotoken.net>
fix: PageCache::set() guards against overwriting valid content with empty not_found Prevents WAL-mode stale reads from causing batch-enhance to destroy existing valid emoji data when LLM calls fail. Before writing a not_found entry, check if valid (non-empty, status=found) content already exists — if so, skip the overwrite. Fixes the man -139 entry and info -21 entry data loss observed during the batch enhance monitoring loop. Co-Authored-By: Claude <noreply@taotoken.net>
feat: generate compressed sitemap during reindex
Docs: CSP nonce + strict-dynamic strategy (#158) + v4.9 PLANDOC entry - docs/01-PRODUCT.md: new §3.2 CSP Strategy — current state, target state, transition plan (3-phase), implementation note for nonce sharing - docs/05-PLAN.md: v4.9 CSP nonce + strict-dynamic entry Co-Authored-By: Claude Code deepseek-v4-pro <noreply@taotoken.net>
fix: --status query excludes NOT_FOUND entries from emoji counts Failed enhancements are now cached as status='not_found' to prevent retries. The --status count query must filter status='found' to avoid counting failures as completed enhancements. Co-Authored-By: Claude <noreply@taotoken.net>