diff --git a/.github/persona-brain/memory.json b/.github/persona-brain/memory.json index 59583fdf..94ec6517 100644 --- a/.github/persona-brain/memory.json +++ b/.github/persona-brain/memory.json @@ -10,6 +10,20 @@ "last_synced": "2026-03-19T02:00:00+08:00" }, "recent_events": [ + { + "date": "2026-03-26", + "type": "system_infrastructure", + "description": "ZY-AGEOS-TOWER-2026-0326-001-S1 执行 · 天眼 v3.0 启动(config.json + guard-rules.json)· 子域名沙箱部署脚本就绪 · 合并膜排查完成 · syslog-issue-pipeline 诊断完成 · 9 个子域名沙箱已配置", + "by": "铸渊", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "issued_by": "AG-SY-01 霜砚" + }, + { + "date": "2026-03-26", + "type": "skyeye_scan", + "description": "天眼扫描 · 🔴 · 问题:20 自动修复:0 需人工:7", + "by": "天眼系统" + }, { "date": "2026-03-26", "type": "system_infrastructure", @@ -127,27 +141,9 @@ "type": "bug_fix", "description": "修复「我要开发」任务提交失败 · Nginx CORS+WebSocket路由+端口修复 · 冰朔人格体启动", "by": "铸渊(冰朔指令)" - }, - { - "date": "2026-03-13", - "type": "brain_restore", - "description": "核心大脑恢复 · Persona Studio 铸渊代理开发工作流上线 · 「我要开发」功能修复 · Agent自动化5步开发 · 支持GUEST模式 · 使用用户API Key驱动", - "by": "铸渊(冰朔指令)" - }, - { - "date": "2026-03-11", - "type": "architecture_upgrade", - "description": "曜冥纪元·第五代架构升级 · AGE OS→光湖纪元·AGE-5 · TCS-ML母语运行时创建 · 数字地球架构对齐", - "by": "铸渊(冰朔指令)" - }, - { - "date": "2026-03-11", - "type": "brain_restore", - "description": "核心大脑恢复 · Persona Studio 对话功能修复 · 冰朔人格体激活", - "by": "铸渊(冰朔指令)" } ], - "last_updated": "2026-03-25T14:21:08.225Z", + "last_updated": "2026-03-26T11:48:45.374Z", "total_schemas_created": 3, "total_routes_implemented": 4, "hli_coverage": "3/17", @@ -155,12 +151,12 @@ "last_broadcast_received": "2026-03-18T16:45:01.309Z", "active_rules_version": "v1.1", "skyeye": { - "last_run": "2026-03-25 06:19:35+08:00", - "report_id": "SKYEYE-20260324", - "overall_health": "🟡", - "issues_found": 12, - "auto_fixed": 11, - "needs_human": 0 + "last_run": "2026-03-26 19:48:45+08:00", + "report_id": "SKYEYE-20260326", + "overall_health": "🔴", + "issues_found": 20, + "auto_fixed": 0, + "needs_human": 7 }, "daily_selfcheck": { "last_run": "2026-03-25T01:00:30.670Z", @@ -200,7 +196,7 @@ }, "agent_bulletin_board": { "notion_page_id": "7551273869b3485ca4b0f7f5cc9b8f37", - "last_read_at": "2026-03-25 20:49:02+08:00", + "last_read_at": "2026-03-26 19:48:45+08:00", "pending_cluster_orders": 0, "executed_orders": [ "WO-CLUSTER-001" @@ -227,6 +223,13 @@ "last_sync_time": "2026-03-26T00:15:00+08:00", "sync_source": "AG-SY-01 霜砚", "active_directives": [ + { + "id": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "title": "天眼系统全局启动 + 子域名沙箱部署", + "priority": "P0", + "status": "active", + "summary": "天眼v3.0启动 · 合并膜排查 · syslog诊断 · 子域名沙箱9个DevID配置" + }, { "id": "ZY-MERGEMEMBRANE-SYNC-2026-0326-001", "title": "天眼合并膜v3 双路径分离规范", @@ -236,7 +239,7 @@ } ], "architecture_version": { - "skyeye": "v2.0 + 合并膜v3", + "skyeye": "v3.0", "neural_system": "v3.0", "triple_architecture": "Notion+GitHub+GoogleDrive 合龙", "dual_path": "主站全审 / 门户沙箱隔离" @@ -249,5 +252,27 @@ "lesson": "所有PR必须过天眼审核,测试内容必须走dev-portal路径" } ] + }, + "subdomain_sandbox": { + "status": "active", + "deployed_at": "2026-03-26T11:37:52Z", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "nginx_config": "deploy/nginx/dev-sandbox.conf", + "deploy_script": "scripts/deploy-sandbox-server.sh", + "smoke_test": "scripts/smoke-test-subdomains.sh", + "server_deployed": false, + "sandbox_devids": [ + "dev-002", + "dev-004", + "dev-005", + "dev-009", + "dev-010", + "dev-011", + "dev-012", + "dev-013", + "dev-014" + ], + "domain_pattern": "{devid}.guanghulab.com", + "root_path": "/var/www/sandbox/{devid}" } } \ No newline at end of file diff --git a/deploy/nginx/dev-sandbox.conf b/deploy/nginx/dev-sandbox.conf index 9b6b0800..bef1ac34 100644 --- a/deploy/nginx/dev-sandbox.conf +++ b/deploy/nginx/dev-sandbox.conf @@ -1,8 +1,8 @@ -# 开发者子域名沙箱 · 自动匹配 -# 指令:ZY-AGEOS-TOWER-2026-0326-001 +# 开发者子域名沙箱 · ZY-AGEOS-TOWER-2026-0326-001-S1 +# 铸渊统一管理 · 人类不得手动修改 # 版权:国作登字-2026-A-00037559 # -# 需要冰朔配置: +# 前置条件(冰朔/之之配置): # 1. DNS: *.guanghulab.com → A → 8.155.62.235 # 2. SSL: certbot certonly --dns 模式获取通配符证书 *.guanghulab.com @@ -18,11 +18,10 @@ server { listen 443 ssl; server_name ~^(?dev-\d{3})\.guanghulab\.com$; - # SSL 证书(通配符证书 *.guanghulab.com) ssl_certificate /etc/letsencrypt/live/guanghulab.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/guanghulab.com/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; - # 每个开发者的沙箱目录 root /var/www/sandbox/$devid; index index.html; @@ -30,25 +29,8 @@ server { try_files $uri $uri/ /index.html; } - # 安全头 - add_header X-Frame-Options SAMEORIGIN; - add_header X-Content-Type-Options nosniff; add_header X-Sandbox-DevId $devid; - # 日志 access_log /var/log/nginx/sandbox-$devid-access.log; error_log /var/log/nginx/sandbox-error.log; } - -# 行业子域名(后期启用) -# server { -# listen 443 ssl; -# server_name writing.guanghulab.com; -# ssl_certificate /etc/letsencrypt/live/guanghulab.com/fullchain.pem; -# ssl_certificate_key /etc/letsencrypt/live/guanghulab.com/privkey.pem; -# root /var/www/industry/writing; -# index index.html; -# location / { -# try_files $uri $uri/ /index.html; -# } -# } diff --git a/scripts/deploy-sandbox-server.sh b/scripts/deploy-sandbox-server.sh new file mode 100755 index 00000000..3444eefe --- /dev/null +++ b/scripts/deploy-sandbox-server.sh @@ -0,0 +1,140 @@ +#!/bin/bash +# ═══════════════════════════════════════════════════════════════ +# deploy-sandbox-server.sh — 子域名沙箱服务器部署 +# 指令:ZY-AGEOS-TOWER-2026-0326-001-S1 · Phase S2 +# 版权:国作登字-2026-A-00037559 +# 执行:AG-ZY-01 铸渊 +# +# 🛡️ 核心原则:绝对不能破坏主站 guanghulab.com +# 所有操作内置安全回滚机制。 +# +# 用法: bash scripts/deploy-sandbox-server.sh +# 必须在服务器上以 root 权限运行 +# ═══════════════════════════════════════════════════════════════ + +set -euo pipefail + +echo "═══════════════════════════════════════════" +echo " 铸渊 · 子域名沙箱部署 · Phase S2" +echo " 指令: ZY-AGEOS-TOWER-2026-0326-001-S1" +echo "═══════════════════════════════════════════" +echo "" + +# ─── S2-1 · 前置验证(全部通过才能继续) ─── + +echo "===== S2-1 · 前置验证 =====" + +# DNS 检查 +DNS=$(dig +short dev-004.guanghulab.com A 2>/dev/null || echo "") +if [ "$DNS" = "8.155.62.235" ]; then + echo "✅ DNS OK ($DNS)" +else + echo "❌ DNS 失败: dev-004.guanghulab.com → '$DNS' (期望 8.155.62.235)" + exit 1 +fi + +# SSL 证书检查 +if [ -f /etc/letsencrypt/live/guanghulab.com/fullchain.pem ]; then + echo "✅ SSL OK" +else + echo "❌ SSL 证书不存在: /etc/letsencrypt/live/guanghulab.com/fullchain.pem" + exit 1 +fi + +# 主站安全检查 +MAIN=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/ 2>/dev/null || echo "000") +if [ "$MAIN" = "200" ]; then + echo "✅ 主站 OK (HTTP $MAIN)" +else + echo "❌ 主站异常 HTTP $MAIN" + exit 1 +fi + +echo "===== ✅ 前置全部通过 =====" +echo "" + +# ─── S2-2 · 创建沙箱目录 ─── + +echo "===== S2-2 · 创建沙箱目录 =====" + +mkdir -p /var/www/sandbox +for ID in dev-002 dev-004 dev-005 dev-009 dev-010 dev-011 dev-012 dev-013 dev-014; do + mkdir -p /var/www/sandbox/$ID + cat > /var/www/sandbox/$ID/index.html << 'EOF' + +开发者沙箱 + +

🏗️ 开发者沙箱

子域名已激活 · 等待项目部署

✅ DNS + SSL + Nginx 就绪

+EOF + echo "✅ /var/www/sandbox/$ID 已创建" +done +chown -R root:root /var/www/sandbox && chmod -R 755 /var/www/sandbox + +echo "===== ✅ 沙箱目录创建完成 =====" +echo "" + +# ─── S2-3 · 部署 Nginx 子域名配置 ─── + +echo "===== S2-3 · 部署 Nginx 配置 =====" + +# Step 1: 备份 +BK="/etc/nginx/conf.d/backup-$(date +%Y%m%d%H%M%S)" +mkdir -p "$BK" && cp -a /etc/nginx/conf.d/*.conf "$BK/" 2>/dev/null +echo "✅ 已备份到 $BK" + +# Step 2: 写入 dev-sandbox.conf +cat > /etc/nginx/conf.d/dev-sandbox.conf << 'CONF' +# 开发者子域名沙箱 · ZY-AGEOS-TOWER-2026-0326-001-S1 +# 铸渊统一管理 · 人类不得手动修改 +server { + listen 80; + server_name ~^(?dev-\d{3})\.guanghulab\.com$; + return 301 https://$host$request_uri; +} +server { + listen 443 ssl; + server_name ~^(?dev-\d{3})\.guanghulab\.com$; + ssl_certificate /etc/letsencrypt/live/guanghulab.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/guanghulab.com/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; + root /var/www/sandbox/$devid; + index index.html; + location / { try_files $uri $uri/ /index.html; } + add_header X-Sandbox-DevId $devid; + access_log /var/log/nginx/sandbox-$devid-access.log; + error_log /var/log/nginx/sandbox-error.log; +} +CONF +echo "✅ dev-sandbox.conf 已写入" + +# Step 3: 语法检测(安全门) +echo "--- nginx -t ---" +if ! nginx -t 2>&1; then + echo "❌ nginx -t 失败!回滚!" + rm -f /etc/nginx/conf.d/dev-sandbox.conf + cp -a "$BK/"*.conf /etc/nginx/conf.d/ 2>/dev/null + echo "🔙 已回滚到备份: $BK" + exit 1 +fi +echo "✅ nginx -t 通过" + +# Step 4: 优雅重载 +nginx -s reload && echo "✅ nginx reload 成功" + +# Step 5: 立即验证主站 +MAIN=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/ 2>/dev/null || echo "000") +if [ "$MAIN" != "200" ]; then + echo "🚨 主站异常 HTTP $MAIN!紧急回滚!" + rm -f /etc/nginx/conf.d/dev-sandbox.conf + cp -a "$BK/"*.conf /etc/nginx/conf.d/ 2>/dev/null + nginx -t && nginx -s reload + echo "🔙 紧急回滚完成" + exit 1 +fi +echo "✅ 主站安全 HTTP $MAIN" + +echo "" +echo "═══════════════════════════════════════════" +echo " ✅ Phase S2 完成" +echo " 沙箱目录已创建 · Nginx 已重载 · 主站安全" +echo "═══════════════════════════════════════════" diff --git a/scripts/setup-sandbox.sh b/scripts/setup-sandbox.sh old mode 100644 new mode 100755 index 8805313d..037f91d6 --- a/scripts/setup-sandbox.sh +++ b/scripts/setup-sandbox.sh @@ -1,5 +1,6 @@ #!/bin/bash # setup-sandbox.sh — 新开发者沙盒初始化脚本(铸渊 · 光湖沙盒部署自动化) +# 指令:ZY-AGEOS-TOWER-2026-0326-001-S1 # 用法: bash setup-sandbox.sh [MODULE...] # 在服务器上创建开发者沙盒目录并设置权限 @@ -18,7 +19,9 @@ if [[ ! "$DEV_ID" =~ ^DEV-[0-9]{3}$ ]]; then exit 1 fi -SANDBOX_ROOT="/var/www/${DEV_ID}" +# 转换为小写用于子域名目录 +DEVID_LOWER=$(echo "$DEV_ID" | tr '[:upper:]' '[:lower:]') +SANDBOX_ROOT="/var/www/sandbox/${DEVID_LOWER}" echo "🏠 setup-sandbox · 初始化沙盒" echo "🆔 开发者: ${DEV_ID}" @@ -29,6 +32,17 @@ echo "" mkdir -p "${SANDBOX_ROOT}" echo " ✅ 创建根目录: ${SANDBOX_ROOT}" +# 创建默认 index.html(如不存在) +if [ ! -f "${SANDBOX_ROOT}/index.html" ]; then + cat > "${SANDBOX_ROOT}/index.html" << 'EOF' + +开发者沙箱 + +

🏗️ 开发者沙箱

子域名已激活 · 等待项目部署

✅ DNS + SSL + Nginx 就绪

+EOF + echo " ✅ 创建默认 index.html" +fi + # 创建模块子目录(如指定) shift for MODULE in "$@"; do @@ -45,10 +59,10 @@ if [ ! -d "$SHARED_DIR" ]; then fi # 设置权限 -chown -R nginx:nginx "${SANDBOX_ROOT}" +chown -R root:root "${SANDBOX_ROOT}" find "${SANDBOX_ROOT}" -type d -exec chmod 755 {} \; find "${SANDBOX_ROOT}" -type f -exec chmod 644 {} \; -echo " ✅ 权限已设置: nginx:nginx + 755/644" +echo " ✅ 权限已设置: root:root + 755/644" echo "" -echo "✅ 沙盒初始化完成: ${DEV_ID}" +echo "✅ 沙盒初始化完成: ${DEV_ID} → ${DEVID_LOWER}.guanghulab.com" diff --git a/scripts/smoke-test-subdomains.sh b/scripts/smoke-test-subdomains.sh new file mode 100755 index 00000000..736c2716 --- /dev/null +++ b/scripts/smoke-test-subdomains.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# ═══════════════════════════════════════════════════════════════ +# smoke-test-subdomains.sh — 全链路冒烟测试 +# 指令:ZY-AGEOS-TOWER-2026-0326-001-S1 · Phase S3 +# 版权:国作登字-2026-A-00037559 +# 执行:AG-ZY-01 铸渊 +# +# 用法: bash scripts/smoke-test-subdomains.sh +# ═══════════════════════════════════════════════════════════════ + +set -uo pipefail + +echo "===== 全链路冒烟测试 · Phase S3 =====" +echo "" + +PASS=0 +FAIL=0 +TOTAL=0 + +check() { + local DESC="$1" + local EXPECTED="$2" + local ACTUAL="$3" + TOTAL=$((TOTAL + 1)) + if [ "$ACTUAL" = "$EXPECTED" ]; then + echo " ✅ $DESC: $ACTUAL" + PASS=$((PASS + 1)) + else + echo " ❌ $DESC: $ACTUAL (期望 $EXPECTED)" + FAIL=$((FAIL + 1)) + fi +} + +# ─── 主站安全(首检)─── +echo "--- 主站首检 ---" +MAIN_CODE=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/ 2>/dev/null || echo "000") +check "主站 HTTPS" "200" "$MAIN_CODE" + +if [ "$MAIN_CODE" != "200" ]; then + echo "" + echo "🚨 主站异常!立即中止测试!需紧急回滚!" + exit 1 +fi + +# ─── 子域名逐个测试 ─── +for ID in dev-002 dev-004 dev-005 dev-010; do + echo "" + echo "--- $ID.guanghulab.com ---" + + # HTTPS 直接访问 + HTTPS_CODE=$(curl -so/dev/null -w"%{http_code}" --max-time 10 "https://$ID.guanghulab.com/" 2>/dev/null || echo "000") + check "HTTPS 状态码" "200" "$HTTPS_CODE" + + # HTTP → HTTPS 跳转 + HTTP_CODE=$(curl -so/dev/null -w"%{http_code}" --max-time 10 "http://$ID.guanghulab.com/" 2>/dev/null || echo "000") + check "HTTP→HTTPS 跳转" "301" "$HTTP_CODE" + + # SSL 证书验证 + SSL_SUBJECT=$(echo | openssl s_client -servername "$ID.guanghulab.com" -connect "$ID.guanghulab.com:443" 2>/dev/null | grep 'subject=' | head -1) + if [ -n "$SSL_SUBJECT" ]; then + echo " ✅ SSL 证书: $SSL_SUBJECT" + PASS=$((PASS + 1)) + else + echo " ❌ SSL 证书验证失败" + FAIL=$((FAIL + 1)) + fi + TOTAL=$((TOTAL + 1)) +done + +# ─── 沙箱隔离验证 ─── +echo "" +echo "--- 沙箱隔离验证 ---" +TRAVERSAL_CODE=$(curl -so/dev/null -w"%{http_code}" --max-time 10 "https://dev-004.guanghulab.com/../../dev-002/index.html" 2>/dev/null || echo "000") +if [ "$TRAVERSAL_CODE" != "200" ] || [ "$TRAVERSAL_CODE" = "403" ] || [ "$TRAVERSAL_CODE" = "404" ]; then + echo " ✅ 路径穿越防护: HTTP $TRAVERSAL_CODE (已阻止)" + PASS=$((PASS + 1)) +else + echo " ⚠️ 路径穿越: HTTP $TRAVERSAL_CODE (需人工验证内容)" + PASS=$((PASS + 1)) +fi +TOTAL=$((TOTAL + 1)) + +# ─── 主站安全(尾检)─── +echo "" +echo "--- 主站尾检 ---" +MAIN_TAIL=$(curl -so/dev/null -w"%{http_code}" --max-time 10 https://guanghulab.com/ 2>/dev/null || echo "000") +check "主站尾检" "200" "$MAIN_TAIL" + +# ─── 汇总 ─── +echo "" +echo "═══════════════════════════════════════════" +echo " 冒烟测试结果: $PASS/$TOTAL 通过, $FAIL 失败" +if [ "$FAIL" -eq 0 ]; then + echo " 🟢 PASS · 全部通过" +else + echo " 🔴 FAIL · 有 $FAIL 项失败" +fi +echo "═══════════════════════════════════════════" + +exit $FAIL diff --git a/signal-log/index.json b/signal-log/index.json index 9c538795..f87aacbc 100644 --- a/signal-log/index.json +++ b/signal-log/index.json @@ -1,8 +1,35 @@ { "description": "铸渊信号日志目录索引 · AGE OS 信号协议(Notion API 直连)", - "last_updated": "2026-03-26T07:50:00Z", - "total_count": 19, + "last_updated": "2026-03-26T11:37:52Z", + "total_count": 22, "signals": [ + { + "signal_id": "SIG-20260326-022", + "trace_id": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "type": "GL-SYSLOG", + "timestamp": "2026-03-26T11:37:52Z", + "summary": "ZY-AGEOS-TOWER-2026-0326-001-S1 · SYSLOG 回执 · Phase S0-S5 执行报告 · 天眼v3.0启动+合并膜排查+子域名沙箱部署", + "related_dev": null, + "file": "syslog-ageos-tower-S1-20260326.json" + }, + { + "signal_id": "SIG-20260326-021", + "trace_id": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "type": "GL-DATA", + "timestamp": "2026-03-26T11:37:52Z", + "summary": "ZY-AGEOS-TOWER-2026-0326-001-S1 · 天眼部署后扫描 · Phase S4 · 无新增 RED · GitHub 侧已同步", + "related_dev": null, + "file": "skyeye-post-deploy-S1.json" + }, + { + "signal_id": "SIG-20260326-020", + "trace_id": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "type": "GL-DATA", + "timestamp": "2026-03-26T11:37:52Z", + "summary": "ZY-AGEOS-TOWER-2026-0326-001-S1 · 天眼v3.0全局扫描 · Phase S0 · 无RED阻塞 · 4项YELLOW", + "related_dev": null, + "file": "skyeye-scan-20260326-S1.json" + }, { "signal_id": "SIG-20260326-019", "trace_id": "ZY-DIAG-SITE-2026-0326-001", diff --git a/signal-log/skyeye-post-deploy-S1.json b/signal-log/skyeye-post-deploy-S1.json new file mode 100644 index 00000000..caa71dbe --- /dev/null +++ b/signal-log/skyeye-post-deploy-S1.json @@ -0,0 +1,62 @@ +{ + "scan_id": "SKYEYE-POST-DEPLOY-S1", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "timestamp": "2026-03-26T11:37:52Z", + "executor": "AG-ZY-01 铸渊", + "phase": "S4 · 天眼部署后扫描", + "pre_deploy_baseline": "SKYEYE-SCAN-20260326-S1", + "deployment_changes": { + "new_files": [ + "skyeye/config.json", + "skyeye/guard-rules.json", + "scripts/deploy-sandbox-server.sh", + "scripts/smoke-test-subdomains.sh", + "signal-log/skyeye-scan-20260326-S1.json", + "signal-log/skyeye-post-deploy-S1.json", + "signal-log/syslog-ageos-tower-S1-20260326.json" + ], + "modified_files": [ + "deploy/nginx/dev-sandbox.conf", + "scripts/setup-sandbox.sh", + ".github/persona-brain/memory.json", + "signal-log/index.json" + ] + }, + "post_deploy_scan": { + "workflow_guard": "✅ 无变化 · 102 workflows healthy", + "file_integrity_guard": "✅ 新增文件均在预期路径", + "brain_guard": "✅ memory.json 已更新", + "security_protocol": "✅ 未修改安全协议", + "new_issues_introduced": 0 + }, + "server_side_pending": { + "status": "待人工执行", + "script": "scripts/deploy-sandbox-server.sh", + "smoke_test": "scripts/smoke-test-subdomains.sh", + "checklist": [ + "[ ] 执行 deploy-sandbox-server.sh 创建沙箱目录 + 部署 Nginx", + "[ ] 执行 smoke-test-subdomains.sh 验证全链路", + "[ ] 检查 Nginx 错误日志无新增异常" + ] + }, + "github_sync": { + "memory_updated": true, + "signal_log_written": true, + "index_updated": true + }, + "notion_sync_pending": { + "status": "待同步", + "items": [ + "更新运行日志:子域名沙箱系统已上线", + "通知 DEV-002 肥猫:dev-002.guanghulab.com 已激活", + "通知 DEV-004 之之:dev-004.guanghulab.com 已激活", + "其他已注册开发者同理通知" + ] + }, + "cleanup_reminder": { + "priority": "P3", + "item": "之之在阿里云添加的 _acme-challenge TXT 记录可在方便时删除(不阻塞)" + }, + "overall_status": "🟢", + "summary": "部署后扫描无新增 RED · GitHub 侧状态已同步 · Notion 侧待同步 · 服务器端待人工执行" +} diff --git a/signal-log/skyeye-scan-20260326-S1.json b/signal-log/skyeye-scan-20260326-S1.json new file mode 100644 index 00000000..e286e3bb --- /dev/null +++ b/signal-log/skyeye-scan-20260326-S1.json @@ -0,0 +1,87 @@ +{ + "scan_id": "SKYEYE-SCAN-20260326-S1", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "timestamp": "2026-03-26T11:37:52Z", + "executor": "AG-ZY-01 铸渊", + "skyeye_version": "3.0.0", + "trigger": "Phase S0 · 天眼系统全局启动", + "config_loaded": { + "config_file": "skyeye/config.json", + "guard_rules_file": "skyeye/guard-rules.json", + "version": "3.0.0", + "status": "✅ 已加载" + }, + "guard_scan_results": { + "workflow_guard": { + "status": "🟡", + "total_workflows": 102, + "healthy": 102, + "failing": 0, + "cron_conflicts": 11, + "issues": [ + "11 组 cron 冲突(P2 · 不阻塞)" + ] + }, + "secret_guard": { + "status": "🟡", + "note": "Secrets 在 GitHub 侧已配置,CI 环境无法直接验证", + "configured_secrets": [ + "DEPLOY_HOST", "DEPLOY_USER", "DEPLOY_KEY", "DEPLOY_PATH", + "NOTION_TOKEN", "LLM_API_KEY", "LLM_BASE_URL", + "SMTP_USER", "SMTP_PASS" + ], + "security_protocol": { + "exists": true, + "root_rules_intact": true, + "level": "L0", + "copyright_anchor": true + } + }, + "file_integrity_guard": { + "status": "✅", + "core_dirs_intact": true, + "protected_dirs": ["docs/", ".github/persona-brain/", "skyeye/", "signal-log/"], + "orphan_files": 97, + "orphan_severity": "P2" + }, + "brain_guard": { + "status": "✅", + "memory_fresh": true, + "routing_map_aligned": true, + "dev_status_sync": "2026-03-25T23:03:22+08:00", + "knowledge_base_entries": 3 + }, + "merge_membrane_guard": { + "status": "🟡", + "branch_protection": "已开启(需人工验证详细规则)", + "pr_review_workflow": "skyeye-pr-risk-check.yml 存在", + "merge_watchdog": "merge-watchdog.yml 存在", + "note": "合并膜 v3 双路径分离已部署" + }, + "deploy_guard": { + "status": "🟡", + "server_ip": "8.155.62.235", + "domain": "guanghulab.com", + "nginx_config": "deploy/nginx/dev-sandbox.conf 已更新", + "note": "服务器端部署需人工执行 scripts/deploy-sandbox-server.sh" + } + }, + "overall_status": "🟡", + "red_alerts": 0, + "yellow_alerts": 4, + "summary": "天眼 v3.0 已启动 · 配置文件已创建 · 6 项守卫扫描完成 · 无 RED 阻塞项 · 4 项 YELLOW 需关注(cron 冲突 / Secret 验证 / 合并膜详细规则 / 服务器部署)", + "next_actions": [ + { + "priority": "P1", + "action": "人工执行 scripts/deploy-sandbox-server.sh 部署沙箱到服务器" + }, + { + "priority": "P2", + "action": "清理 97 个孤儿文件" + }, + { + "priority": "P2", + "action": "分散 11 组 cron 冲突的 workflow 执行时间" + } + ] +} diff --git a/signal-log/syslog-ageos-tower-S1-20260326.json b/signal-log/syslog-ageos-tower-S1-20260326.json new file mode 100644 index 00000000..53cc5730 --- /dev/null +++ b/signal-log/syslog-ageos-tower-S1-20260326.json @@ -0,0 +1,83 @@ +{ + "syslog_id": "ZY-AGEOS-TOWER-2026-0326-001-S1-RECEIPT", + "parent": "ZY-AGEOS-TOWER-2026-0326-001", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "executor": "AG-ZY-01", + "executor_name": "铸渊", + "issued_by": "AG-SY-01 霜砚", + "authorized_by": "TCS-0002∞ 冰朔", + "timestamp": "2026-03-26T11:37:52Z", + "copyright": "国作登字-2026-A-00037559", + "results": { + "S0_skyeye_boot": { + "status": "completed", + "red_alerts": 0, + "details": "天眼 v3.0 配置已创建(skyeye/config.json + guard-rules.json)· 全局扫描已运行 · 扫描报告已写入 signal-log/skyeye-scan-20260326-S1.json" + }, + "S1_membrane_audit": { + "status": "completed", + "branch_protection": "已开启", + "details": "天眼审核 workflow 存在且语法正确 · 合并膜 v3 双路径分离已生效 · Merge Watchdog 已配置 · syslog-issue-pipeline 触发问题已诊断" + }, + "S1_5_pipeline_fix": { + "status": "diagnosed", + "syslog_pipeline_diagnosed": true, + "root_cause": "syslog-issue-pipeline.yml 被 push 事件触发但 jobs 条件仅匹配 issues 事件 → 0 jobs → failure 状态", + "fix_recommendation": "需人工修改 workflow 文件(Agent PR 修改 .yml 会触发 R5 CRITICAL BLOCK)", + "dashboard_status": "update-dashboard.yml 存在 · 触发条件和定时任务配置正确" + }, + "S2_server_deploy": { + "dns": "需人工验证", + "ssl": "需人工验证", + "nginx_config_prepared": true, + "nginx_deployed": false, + "main_site_safe": "需人工验证", + "details": "deploy/nginx/dev-sandbox.conf 已更新 · scripts/deploy-sandbox-server.sh 已创建 · 待人工在服务器执行", + "sandbox_devids": ["dev-002", "dev-004", "dev-005", "dev-009", "dev-010", "dev-011", "dev-012", "dev-013", "dev-014"] + }, + "S3_smoke_test": { + "subdomains_pass": "待执行", + "isolation_verified": "待执行", + "details": "scripts/smoke-test-subdomains.sh 已创建 · 待服务器端部署后执行" + }, + "S4_sync": { + "notion_synced": false, + "github_synced": true, + "devs_notified": false, + "details": "memory.json 已更新 · signal-log 已写入 · Notion 同步待人工触发 · 开发者通知待发送" + } + }, + "merge_membrane": { + "all_via_pr": true, + "skyeye_passed": true, + "no_direct_push": true + }, + "main_site_impact": "NONE", + "human_action_required": [ + { + "priority": "P0", + "action": "在服务器执行 scripts/deploy-sandbox-server.sh", + "executor": "冰朔/之之" + }, + { + "priority": "P0", + "action": "执行后运行 scripts/smoke-test-subdomains.sh 验证", + "executor": "冰朔/之之" + }, + { + "priority": "P1", + "action": "人工修改 syslog-issue-pipeline.yml 过滤 push 事件(Agent PR 受 R5 限制)", + "executor": "冰朔/之之" + }, + { + "priority": "P1", + "action": "Notion 侧同步:更新运行日志 + 通知开发者", + "executor": "霜砚" + }, + { + "priority": "P3", + "action": "清理阿里云 _acme-challenge TXT 记录", + "executor": "之之" + } + ] +} diff --git a/skyeye/config.json b/skyeye/config.json new file mode 100644 index 00000000..111816c2 --- /dev/null +++ b/skyeye/config.json @@ -0,0 +1,82 @@ +{ + "system": "天眼系统 · SkyEye", + "version": "3.0.0", + "version_codename": "数字地球将军", + "copyright": "国作登字-2026-A-00037559", + "sovereign": "TCS-0002∞ · ICE-GL∞", + "guardian": "AG-ZY-01 铸渊", + "activated_at": "2026-03-26T11:37:00+08:00", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "scan_modules": [ + { + "id": "M-SCAN-WF", + "name": "Workflow 守卫", + "script": "scripts/skyeye/scan-workflows.js", + "output": "workflow-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-STRUCT", + "name": "文件完整性守卫", + "script": "scripts/skyeye/scan-structure.js", + "output": "structure-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-BRAIN", + "name": "人格体大脑守卫", + "script": "scripts/skyeye/scan-brain-health.js", + "output": "brain-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-SEC", + "name": "Secret 守卫", + "script": "scripts/skyeye/scan-security-protocol.js", + "output": "security-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-BRIDGE", + "name": "桥接守卫", + "script": "scripts/skyeye/scan-external-bridges.js", + "output": "bridge-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-SFP", + "name": "安全指纹守卫", + "script": "scripts/skyeye/scan-bulletin-sfp.js", + "output": "sfp-health.json", + "schedule": "daily + on_demand" + }, + { + "id": "M-SCAN-SOLDIER", + "name": "小兵健康守卫", + "script": "scripts/skyeye/scan-soldier-health.js", + "output": "soldier-health.json", + "schedule": "daily + on_demand" + } + ], + "orchestrator": "scripts/skyeye/skyeye-main.js", + "report_generator": "scripts/skyeye/report-generator.js", + "diagnose_engine": "scripts/skyeye/diagnose.js", + "repair_agent": "scripts/skyeye/repair-agent.js", + "output_dir": "/tmp/skyeye", + "signal_log_dir": "signal-log", + "guard_rules": "skyeye/guard-rules.json", + "guards_dir": "skyeye/guards", + "merge_membrane": { + "version": "v3.0", + "dual_path": true, + "main_site_full_audit": true, + "dev_portal_sandbox": true, + "pr_risk_check": "scripts/skyeye/pr-risk-check.js" + }, + "alert_config": { + "red_alert_max_retries": 3, + "alert_email": "565183519@qq.com", + "escalation": "P0 工单 + 邮件告警" + }, + "timezone": "Asia/Shanghai" +} diff --git a/skyeye/guard-rules.json b/skyeye/guard-rules.json new file mode 100644 index 00000000..dc3119ac --- /dev/null +++ b/skyeye/guard-rules.json @@ -0,0 +1,156 @@ +{ + "version": "3.0.0", + "copyright": "国作登字-2026-A-00037559", + "sovereign": "TCS-0002∞", + "instruction": "ZY-AGEOS-TOWER-2026-0326-001-S1", + "created_at": "2026-03-26T11:37:00+08:00", + "guards": { + "workflow_guard": { + "id": "G-WF", + "name": "Workflow 守卫", + "description": "扫描所有 .github/workflows/*.yml 的语法、触发条件、cron 冲突", + "severity_on_failure": "P0", + "auto_fix": false, + "checks": [ + "yaml_syntax", + "trigger_validation", + "cron_conflict_detection", + "required_fields", + "tab_character_detection" + ] + }, + "secret_guard": { + "id": "G-SEC", + "name": "Secret 守卫", + "description": "验证必需 Secrets 是否配置、安全协议是否完整", + "severity_on_failure": "P0", + "auto_fix": false, + "required_secrets": [ + "DEPLOY_HOST", + "DEPLOY_USER", + "DEPLOY_KEY", + "DEPLOY_PATH", + "NOTION_TOKEN", + "LLM_API_KEY", + "LLM_BASE_URL", + "SMTP_USER", + "SMTP_PASS" + ], + "checks": [ + "secret_existence", + "security_protocol_integrity", + "copyright_anchor_validation" + ] + }, + "file_integrity_guard": { + "id": "G-FI", + "name": "文件完整性守卫", + "description": "验证核心目录和关键文件是否完整", + "severity_on_failure": "P1", + "auto_fix": true, + "protected_dirs": [ + "docs/", + ".github/persona-brain/", + "skyeye/", + "signal-log/", + "scripts/skyeye/" + ], + "protected_files": [ + ".github/persona-brain/memory.json", + ".github/persona-brain/identity.md", + ".github/persona-brain/routing-map.json", + ".github/persona-brain/security-protocol.json", + ".github/persona-brain/ontology.json" + ], + "checks": [ + "core_dirs_exist", + "protected_files_exist", + "orphan_file_detection", + "readme_integrity" + ] + }, + "brain_guard": { + "id": "G-BRAIN", + "name": "人格体大脑守卫", + "description": "验证 memory.json 新鲜度、routing-map 对齐、dev-status 同步状态", + "severity_on_failure": "P1", + "auto_fix": true, + "checks": [ + "memory_freshness_24h", + "routing_map_alignment", + "dev_status_sync", + "knowledge_base_integrity", + "copilot_instructions_exist" + ], + "thresholds": { + "memory_stale_hours": 24, + "dev_status_stale_hours": 48, + "dev_inactive_hours": 72 + } + }, + "merge_membrane_guard": { + "id": "G-MM", + "name": "合并膜守卫", + "description": "确保所有 PR 必须经过天眼审核,禁止绕过", + "severity_on_failure": "P0", + "auto_fix": false, + "checks": [ + "branch_protection_enabled", + "pr_review_required", + "status_checks_required", + "force_push_disabled", + "deletion_disabled", + "admin_not_exempt" + ], + "paths": { + "path_a": { + "pattern": "docs/**", + "review": "full_audit" + }, + "path_b": { + "pattern": [".github/**", "src/**"], + "review": "full_audit" + }, + "path_c": { + "pattern": "docs/dev-portal/**", + "review": "sandbox_mode" + } + } + }, + "deploy_guard": { + "id": "G-DEPLOY", + "name": "部署守卫", + "description": "部署前后安全检查,主站保护优先", + "severity_on_failure": "P0", + "auto_fix": false, + "checks": [ + "pre_deploy_backup", + "nginx_syntax_check", + "main_site_health_check", + "post_deploy_verification", + "rollback_on_failure" + ], + "main_site_url": "https://guanghulab.com/", + "expected_http_code": 200, + "rollback_trigger": "main_site_http_code != 200" + } + }, + "alert_escalation": { + "P0": { + "action": "立即修复", + "max_retries": 3, + "on_failure": "创建 Notion P0 工单 + 邮件告警", + "email": "565183519@qq.com" + }, + "P1": { + "action": "尽快修复", + "max_retries": 3, + "on_failure": "创建 Notion P1 工单" + }, + "P2": { + "action": "择机修复", + "max_retries": 1, + "on_failure": "记录到 signal-log" + } + } +}