296 lines
12 KiB
JSON
296 lines
12 KiB
JSON
|
|
{
|
|||
|
|
"scan_id": "SKYEYE-DIAG-SITE-20260326-001",
|
|||
|
|
"instruction_id": "ZY-DIAG-SITE-2026-0326-001",
|
|||
|
|
"trigger": "霜砚 AG-SY-01 排查指令",
|
|||
|
|
"executor": "AG-ZY-01 铸渊",
|
|||
|
|
"authorization": "TCS-0002∞ 冰朔",
|
|||
|
|
"priority": "P0",
|
|||
|
|
"timestamp": "2026-03-26T07:50:00Z",
|
|||
|
|
"skyeye_version": "scripts/skyeye/skyeye-main.js v3.0",
|
|||
|
|
|
|||
|
|
"phase_d0_skyeye_startup": {
|
|||
|
|
"status": "✅ 天眼已启动",
|
|||
|
|
"guards_run": [
|
|||
|
|
"scan-workflows.js",
|
|||
|
|
"scan-structure.js",
|
|||
|
|
"scan-brain-health.js",
|
|||
|
|
"scan-security-protocol.js",
|
|||
|
|
"scan-soldier-health.js",
|
|||
|
|
"scan-external-bridges.js"
|
|||
|
|
],
|
|||
|
|
"scan_results": {
|
|||
|
|
"workflows": {
|
|||
|
|
"total": 102,
|
|||
|
|
"syntax_ok": 102,
|
|||
|
|
"syntax_errors": 0,
|
|||
|
|
"using_git_push": 67,
|
|||
|
|
"cron_conflicts": 11,
|
|||
|
|
"potential_loops": 17
|
|||
|
|
},
|
|||
|
|
"structure": {
|
|||
|
|
"core_dirs_ok": true,
|
|||
|
|
"missing_dirs": 0,
|
|||
|
|
"orphan_files": 96,
|
|||
|
|
"readme_ok": true
|
|||
|
|
},
|
|||
|
|
"brain_health": {
|
|||
|
|
"memory_fresh": true,
|
|||
|
|
"routing_map_aligned": true,
|
|||
|
|
"routing_map_fix_applied": "添加 domains 字段(AUTH/BRAIN/REGISTRY/NOTIFICATION 4域 10接口)",
|
|||
|
|
"dev_status_fresh": true,
|
|||
|
|
"knowledge_base_ok": true,
|
|||
|
|
"copilot_instructions_ok": true
|
|||
|
|
},
|
|||
|
|
"security_protocol": {
|
|||
|
|
"status": "✅",
|
|||
|
|
"root_rules_intact": true,
|
|||
|
|
"copyright_anchor": true
|
|||
|
|
},
|
|||
|
|
"soldier_health": {
|
|||
|
|
"total_soldiers": 94,
|
|||
|
|
"healthy": 0,
|
|||
|
|
"needs_optimization": 94,
|
|||
|
|
"failure_rate": 0
|
|||
|
|
},
|
|||
|
|
"external_bridges": {
|
|||
|
|
"notion_api": "🔴 NOTION_TOKEN 未设置(CI环境)",
|
|||
|
|
"github_api": "🟡 403(CI环境权限不足)",
|
|||
|
|
"server_ssh": "🟡 DEPLOY_HOST 未设置(CI环境)",
|
|||
|
|
"note": "以上为 CI runner 本地扫描结果。通过 workflow 日志判断:DEPLOY_HOST/USER/KEY 有效,NOTION_TOKEN 在部分 workflow 为空"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"phase_d1_deployment_chain": {
|
|||
|
|
"d1_1_repository_side": {
|
|||
|
|
"docs_index_html": {
|
|||
|
|
"exists": true,
|
|||
|
|
"size_lines": 3210,
|
|||
|
|
"version": "铸渊助手 v6.0 · 大脑版本 v3.0 · 壳-核分离架构",
|
|||
|
|
"latest_commit": "26025d0a (2026-03-26T06:02:03Z) Sync from WENZHUOXI/guanghu-Awen",
|
|||
|
|
"features_present": [
|
|||
|
|
"API 自动检测 v4.0",
|
|||
|
|
"多种登录方式",
|
|||
|
|
"壳-核分离架构",
|
|||
|
|
"模块导航(14+模块)",
|
|||
|
|
"HLI 协议接口"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"docs_structure": {
|
|||
|
|
"CNAME": "guanghulab.com",
|
|||
|
|
"nojekyll": true,
|
|||
|
|
"subdirs": ["css/", "js/", "daily-reports/", "dashboard/", "dev-portal/"]
|
|||
|
|
},
|
|||
|
|
"recent_merged_prs": [
|
|||
|
|
"PR#202: AGE OS Tower Architecture upgrade (2026-03-26)",
|
|||
|
|
"PR#200: Notion sync via wakeup script (2026-03-26)",
|
|||
|
|
"PR#199: 码字台部署到 dev-portal (2026-03-25)",
|
|||
|
|
"PR#198: SkyEye merge membrane v3 (2026-03-25)",
|
|||
|
|
"PR#196: AI写网文平台 (2026-03-25)",
|
|||
|
|
"PR#194: UI responsive + smart model router (2026-03-25)",
|
|||
|
|
"PR#192: Language-driven OS execution layer (2026-03-25)",
|
|||
|
|
"PR#191: Real data integration + dual-env deploy (2026-03-25)",
|
|||
|
|
"PR#190: Live dynamic dashboard (2026-03-25)",
|
|||
|
|
"PR#189: Nginx hololake→guanghulab migration (2026-03-25)",
|
|||
|
|
"PR#186: 人类使用侧全面修复 (2026-03-25)"
|
|||
|
|
],
|
|||
|
|
"code_completeness": "✅ 所有近期 PR 已合并到 main,代码完整"
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"d1_2_cicd_pipeline": {
|
|||
|
|
"deploy_pages": {
|
|||
|
|
"workflow": "deploy-pages.yml",
|
|||
|
|
"name": "🌀 部署铸渊聊天室 (GitHub Pages)",
|
|||
|
|
"trigger": "push to main on docs/** or persona-studio/frontend/**",
|
|||
|
|
"status": "✅ 正常",
|
|||
|
|
"total_runs": 63,
|
|||
|
|
"last_success": "2026-03-25T23:26:45Z (PR#199)",
|
|||
|
|
"recent_10_runs": "全部成功",
|
|||
|
|
"verdict": "GitHub Pages 部署管道完全正常"
|
|||
|
|
},
|
|||
|
|
"deploy_to_server": {
|
|||
|
|
"workflow": "deploy-to-server.yml",
|
|||
|
|
"name": "🚀 铸渊 CD · 自动部署到 guanghulab.com",
|
|||
|
|
"trigger": "push to main (excludes persona-brain, broadcasts, syslog, signal-log)",
|
|||
|
|
"status": "⚠️ 部署成功但站点返回 404",
|
|||
|
|
"total_runs": 201,
|
|||
|
|
"last_success": "2026-03-26T06:02:06Z (Awen sync)",
|
|||
|
|
"recent_10_runs": "全部成功",
|
|||
|
|
"smoke_test_results": {
|
|||
|
|
"module_smoke_test": "20 通过 / 0 失败(服务器文件存在)",
|
|||
|
|
"human_use_verification": {
|
|||
|
|
"main_site_http": "❌ 404(人类无法访问)",
|
|||
|
|
"persona_studio_http": "⚠️ 404",
|
|||
|
|
"persona_studio_api": "✅ 200(后端 API 健康)"
|
|||
|
|
},
|
|||
|
|
"diagnosis": "文件已同步到服务器但 Nginx 路由返回 404,疑似 Nginx server_name 或 root 目录配置问题"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"deploy_backend": {
|
|||
|
|
"workflow": "deploy-backend.yml",
|
|||
|
|
"name": "🚀 部署后端中间层到阿里云",
|
|||
|
|
"trigger": "push to main on backend/api-server/**",
|
|||
|
|
"status": "✅ 正常",
|
|||
|
|
"total_runs": 3,
|
|||
|
|
"last_success": "2026-03-26 (PR#202)"
|
|||
|
|
},
|
|||
|
|
"syslog_issue_pipeline": {
|
|||
|
|
"workflow": "syslog-issue-pipeline.yml",
|
|||
|
|
"name": "📡 SYSLOG Issue Pipeline",
|
|||
|
|
"trigger": "issues [opened, labeled]",
|
|||
|
|
"status": "🔴 连续失败(conclusion=failure, 0 jobs)",
|
|||
|
|
"total_runs": 463,
|
|||
|
|
"main_branch_failures": "22+ 次",
|
|||
|
|
"root_cause": "workflow 仅由 issues 事件触发,但可能被设为 branch protection 的 required status check。每次 push 到 main 时,GitHub 期望该 check 完成,但 check 从不运行(0 jobs),导致状态显示为 failure。",
|
|||
|
|
"evidence": "run#454-#463 全部 conclusion=failure, total_jobs=0, event=push"
|
|||
|
|
},
|
|||
|
|
"branch_protection_conflict": {
|
|||
|
|
"status": "🔴 严重冲突",
|
|||
|
|
"description": "main 分支保护规则要求 2 个 status checks,但 67 个 workflow 试图直接 git push 到 main",
|
|||
|
|
"affected_workflows": 67,
|
|||
|
|
"error_message": "GH006: Protected branch update failed - 2 of 2 required status checks are expected",
|
|||
|
|
"examples": [
|
|||
|
|
"sync-griddb-to-drive.yml: 同步成功但无法推送日志到 main",
|
|||
|
|
"bridge-heartbeat.yml: 心跳检测完成但无法推送结果到 main"
|
|||
|
|
],
|
|||
|
|
"impact": "所有需要写回日志/状态文件到 main 的 workflow 都会在 git push 步骤失败"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"d1_3_secrets_credentials": {
|
|||
|
|
"deployment_secrets": {
|
|||
|
|
"DEPLOY_HOST": "✅ 存在且有效(deploy-to-server 成功连接)",
|
|||
|
|
"DEPLOY_USER": "✅ 存在且有效",
|
|||
|
|
"DEPLOY_KEY": "✅ 存在且有效(SSH 连接成功)",
|
|||
|
|
"DEPLOY_PATH": "✅ 存在"
|
|||
|
|
},
|
|||
|
|
"notion_secrets": {
|
|||
|
|
"NOTION_TOKEN": "🔴 在 bridge-heartbeat 中为空(secrets.NOTION_API_KEY 引用,可能 secret 名称不匹配)",
|
|||
|
|
"NOTION_API_TOKEN": "⚠️ 未验证(syslog-issue-pipeline 使用此名称)",
|
|||
|
|
"BRIDGE_QUEUE_DB_ID": "🔴 为空",
|
|||
|
|
"evidence": "bridge-heartbeat 日志: ⚠️ NOTION_TOKEN 未配置,跳过 Notion 检测"
|
|||
|
|
},
|
|||
|
|
"llm_secrets": {
|
|||
|
|
"LLM_API_KEY": "⚠️ 状态不确定(syslog-issue-pipeline 从未在 push 事件上运行过)",
|
|||
|
|
"LLM_BASE_URL": "⚠️ 状态不确定"
|
|||
|
|
},
|
|||
|
|
"gdrive_secrets": {
|
|||
|
|
"GDRIVE_CLIENT_ID": "✅ 存在且有效(sync-to-drive OAuth2 成功)",
|
|||
|
|
"GDRIVE_CLIENT_SECRET": "✅ 存在且有效",
|
|||
|
|
"GDRIVE_REFRESH_TOKEN": "✅ 存在且有效",
|
|||
|
|
"DRIVE_MIRROR_FOLDER_ID": "✅ 存在"
|
|||
|
|
},
|
|||
|
|
"smtp_secrets": {
|
|||
|
|
"SMTP_USER": "⚠️ 未验证",
|
|||
|
|
"SMTP_PASS": "⚠️ 未验证"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"d1_4_server_side": {
|
|||
|
|
"server_ip": "8.155.62.235",
|
|||
|
|
"server_stack": "Node.js 20 + PM2 + Nginx",
|
|||
|
|
"file_sync_status": "✅ rsync 同步成功(20/20 模块存在)",
|
|||
|
|
"backend_api_health": "✅ Persona Studio API port 3002 返回 200",
|
|||
|
|
"http_access": {
|
|||
|
|
"main_site": "❌ 404",
|
|||
|
|
"persona_studio": "❌ 404",
|
|||
|
|
"diagnosis": "文件在服务器上存在,后端 API 正常,但 Nginx HTTP 路由返回 404"
|
|||
|
|
},
|
|||
|
|
"nginx_diagnosis": {
|
|||
|
|
"issue": "Nginx 配置可能存在 server_name 或 root 路径不匹配问题",
|
|||
|
|
"evidence": "deploy-to-server 包含 Nginx 配置更新步骤并成功执行,但 HTTP 访问仍返回 404",
|
|||
|
|
"needs_human_check": true,
|
|||
|
|
"check_items": [
|
|||
|
|
"检查 Nginx server_name 是否正确绑定 guanghulab.com",
|
|||
|
|
"检查 root 指令是否指向正确的文件目录",
|
|||
|
|
"检查是否有 default_server 冲突",
|
|||
|
|
"检查 HTTPS/SSL 证书配置(如果启用 HTTPS)",
|
|||
|
|
"运行 nginx -t 检查语法",
|
|||
|
|
"检查 Nginx error log: /var/log/nginx/error.log"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"phase_d1_5_mcp_service": {
|
|||
|
|
"mcp_code_location": "mcp-servers/ (根目录)",
|
|||
|
|
"mcp_files": [
|
|||
|
|
"mcp-servers/github-server.js",
|
|||
|
|
"mcp-servers/notion-server.js"
|
|||
|
|
],
|
|||
|
|
"mcp_purpose": "MCP 服务器工具层(GitHub + Notion 操作)",
|
|||
|
|
"mcp_frontend_integration": "❌ 未集成到 docs/index.html(前端使用 HLI 协议,非 MCP)",
|
|||
|
|
"mcp_deployment_status": {
|
|||
|
|
"has_deploy_workflow": false,
|
|||
|
|
"server_process": "未知(需 SSH 检查)",
|
|||
|
|
"assessment": "MCP 是后端自动化工具(非用户可见的前端功能),代码存在但部署状态未知"
|
|||
|
|
},
|
|||
|
|
"mcp_break_point": {
|
|||
|
|
"ever_successfully_deployed": "不确定",
|
|||
|
|
"likely_scenario": "MCP 代码写完但可能从未作为独立服务部署到服务器",
|
|||
|
|
"note": "MCP 工具由 GitHub Actions 和其他自动化脚本直接引用,可能不需要独立运行的服务进程"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"phase_d2_merge_membrane": {
|
|||
|
|
"branch_protection": {
|
|||
|
|
"status": "⚠️ 配置存在但有副作用",
|
|||
|
|
"rules": "需要 2 个 required status checks",
|
|||
|
|
"issue": "syslog-issue-pipeline.yml 可能是其中一个 required check,但该 workflow 仅触发于 issues 事件,不触发于 push 事件",
|
|||
|
|
"impact": "导致 push 事件的 check 永远处于 pending/expected 状态"
|
|||
|
|
},
|
|||
|
|
"pr_flow": {
|
|||
|
|
"status": "✅ 正常",
|
|||
|
|
"evidence": "PR#186-#202 全部成功通过审核并合并"
|
|||
|
|
},
|
|||
|
|
"deploy_trigger": {
|
|||
|
|
"deploy_pages": "✅ push to main + docs/** → 自动触发 → 成功",
|
|||
|
|
"deploy_to_server": "✅ push to main → 自动触发 → 成功(但站点 404)"
|
|||
|
|
},
|
|||
|
|
"workflow_global_health": {
|
|||
|
|
"total": 102,
|
|||
|
|
"syntax_ok": 102,
|
|||
|
|
"deploy_related_healthy": true,
|
|||
|
|
"syslog_pipeline_broken": true,
|
|||
|
|
"direct_push_workflows_broken": 67,
|
|||
|
|
"broken_list": [
|
|||
|
|
{
|
|||
|
|
"name": "syslog-issue-pipeline.yml",
|
|||
|
|
"issue": "Required status check 但不触发于 push 事件",
|
|||
|
|
"severity": "high"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "sync-griddb-to-drive.yml",
|
|||
|
|
"issue": "git push 被 branch protection 拒绝",
|
|||
|
|
"severity": "medium"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "bridge-heartbeat.yml",
|
|||
|
|
"issue": "NOTION_TOKEN 为空 + git push 被拒绝",
|
|||
|
|
"severity": "medium"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"timeline_retrospective": {
|
|||
|
|
"last_successful_deploy": "2026-03-26T06:02:06Z (deploy-to-server 成功但 HTTP 404)",
|
|||
|
|
"last_deploy_pages_success": "2026-03-25T23:26:45Z (GitHub Pages 正常)",
|
|||
|
|
"branch_protection_break_point": "约 2026-03-25 (PR#198 合并 SkyEye merge membrane v3 后开始出现)",
|
|||
|
|
"http_404_timeline": "需人类 SSH 检查服务器确认具体开始时间",
|
|||
|
|
"syslog_pipeline_failures_start": "连续失败至少从 run#428+ 开始"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
"phase_d3_diagnosis_summary": {
|
|||
|
|
"root_cause": "多因素叠加:1) Nginx 配置导致 HTTP 404;2) Branch protection 与 67 个直推 workflow 冲突;3) syslog-issue-pipeline 作为 required status check 但不触发于 push",
|
|||
|
|
"break_point": "Nginx HTTP 路由层(服务器文件存在,后端 API 正常,但 HTTP 访问 404)",
|
|||
|
|
"break_time": "HTTP 404 具体起始时间需人类确认;branch protection 冲突约从 2026-03-25 开始",
|
|||
|
|
"evidence": [
|
|||
|
|
"deploy-to-server run#201 冒烟测试: 20 通过 / 0 失败(文件在服务器存在)",
|
|||
|
|
"人类使用侧验证: ❌ 主站 HTTP 404, ⚠️ Persona Studio 404, ✅ API 200",
|
|||
|
|
"sync-griddb-to-drive: GH006 Protected branch update failed",
|
|||
|
|
"bridge-heartbeat: NOTION_TOKEN 为空",
|
|||
|
|
"syslog-issue-pipeline: 22+ 次 main 分支上 conclusion=failure, total_jobs=0"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|