56 KiB
Host Reboot AI Automation SOP
Last updated: 2026-07-11
Canonical enterprise scope and current work order:
docs/workplans/2026-07-10-agent99-enterprise-ai-automation-master-plan.mddocs/operations/agent99-enterprise-ai-automation-work-items.snapshot.json
This SOP remains the detailed reboot procedure. It cannot mark recovery complete from command success, route HTTP 200, or a Telegram delivery receipt. Completion requires the reboot state machine, all required host/service/product/data gates, mode-specific verifiers and AWOOOI/AwoooP callback readback.
P0 Goal
After host 99 or any VM host is rebooted, the automation must detect the reboot, restore VM reachability, restore critical services, and prove public sites are no longer returning 502.
Target recovery bar:
- Detect 99 / 110 / 112 / 120 / 121 / 188 reboot or down state.
- Ensure VMware Workstation on 99 is running and required VMs are powered on.
- Restore Harbor / registry on 110 before forcing K3s workloads to repull images.
- Restore AWOOOI production pods on 120.
- Verify public HTTP readback for AWOOOI, StockPlatform, FIFA, Gitea, and Harbor.
- Emit operator-visible evidence and Telegram alerts for down, recovering, recovered, and degraded states.
2026-07-09 Incident Findings To Automate
The reboot incident was not a generic 502 problem. The confirmed chain was:
- 110 rebooted and Docker/Harbor did not fully recover.
harbor-coreentered a failed/restarting state because Harbor Redis / Docker DNS dependency was not clean.- K3s on 120 could not pull AWOOOI images from
192.168.0.110:5000. - AWOOOI prod pods stayed in
ImagePullBackOff. - Public nginx returned 502 because upstream pods were unavailable.
- Restarting / rebooting 110 cleared the Docker / systemd / Harbor dependency state.
- Once
harbor-corebecame healthy, 120 pods repulled images and AWOOOI recovered.
This failure mode must be treated as a first-class automated recovery path.
Recovery Priority Order
P0. Control-plane and VM reachability
- 99 Windows host reachable.
- VMware Workstation process running on 99.
- VMs 110, 112, 120, 121, and 188 powered on.
- Hosts 110, 112, 120, 121, and 188 respond to ICMP or SSH.
P1. 110 Harbor and registry dependency chain
- Docker engine active.
- Harbor Redis running.
harbor-corerunning and healthy.- Harbor registry / registryctl running and healthy.
harbor.wooo.workreturns HTTP 200 after redirect.- Internal registry pull path from K3s nodes is reachable.
P2. 120 K3s production workloads
awoooi-proddeployments ready:awoooi-api1/1awoooi-web2/2awoooi-worker1/1awoooi-auto-repair-canary1/1
- No critical pods stuck in
ImagePullBackOff,ErrImagePull,CrashLoopBackOff, orPending. - If image pull failures remain after Harbor is healthy, delete only the failed pods and let controllers recreate them.
P3. Public user-visible surfaces
awoooi.wooo.workreturns HTTP 200 for web.awoooi.wooo.work/api/v1/healthreturns JSON and not 502.stock.wooo.workreturns HTTP 200.2026fifa.wooo.workreturns HTTP 200.gitea.wooo.workreturns HTTP 200.harbor.wooo.workreturns HTTP 200.
P4. Degraded provider follow-up
- AWOOOI health can be
degradedeven when 502 is fixed. - Treat AI provider health separately from user-visible 502 restoration.
- Follow-up checks include
ollama_gcp_a,ollama_gcp_b, andollama_local. - Do not block public-site 502 recovery on non-primary AI provider cooldown unless the app is user-impacting.
Automated Decision Tree
-
Detect reboot / outage.
- Ping 110, 112, 120, 121, 188.
- SSH to 110 and 120 if keys are available.
- Query VMware running VM list on 99 if
vmrun.exeis available.
-
If a VM is not reachable.
- Check VMware VM state.
- Start the VM from 99.
- Wait for guest ping / SSH.
- Alert Telegram:
host_recovering.
-
If AWOOOI public route is 502.
- Check 120
awoooi-proddeployments. - If pods are
ImagePullBackOff, check 110 Harbor first. - Do not repeatedly delete pods before Harbor is healthy.
- Check 120
-
If 110 Harbor is unhealthy.
- Check Docker active state.
- Check
redis,harbor-core,registry, andregistryctl. - Restart Harbor Redis and
harbor-corefirst. - If Docker/systemd/cgroup operations hang, use controlled 110 guest reboot through VMware.
- After 110 returns, wait for Harbor core healthy before touching K3s pods.
-
If Harbor is healthy and pods are still in image pull failure.
- Delete only failed AWOOOI pods in
awoooi-prod. - Wait for deployments to become ready.
- Read back public HTTP.
- Delete only failed AWOOOI pods in
-
If public sites are HTTP 200 but AWOOOI health is degraded.
- Record degraded providers.
- Alert
service_degraded. - Continue provider-specific remediation separately.
99 Windows AI Agent Control Node
99 must become the automation entrypoint for reboot recovery.
Required capabilities:
- Run a local AI Agent service on Windows 99 with least-privilege operator permissions.
- Execute the reboot scorecard on a schedule and on boot.
- Control VMware Workstation VM startup through
vmrun.exe. - Use SSH keys to 110 and 120 for service-level checks and controlled repair.
- Send Telegram alerts for down, recovering, recovered, degraded, failed, and controlled-remediation-result states.
- Do not stop at alerting. Every warning/critical alert must either trigger an allowlisted remediation, record that no remediation matched, or record that the action was skipped by cooldown/min-severity.
- Do not send start/complete/info noise to Telegram by default. Human-facing alerts must be deduped and action-oriented.
- Persist scorecard evidence to a local non-secret log directory.
- Never store raw passwords, tokens, cookies, sessions, or
.envin the repo. - Accept operator commands through the 99 desktop submitter, Telegram
/agent99 ..., and local queue files without depending on Codex quota. - Accept SRE war-room alert JSON at
C:\Wooo\Agent99\alerts\incoming, resolve each alert into an allowlisted mode, and either run controlled remediation or record why no remediation matched.
Candidate implementation layers:
- P0: Windows Task Scheduler runs
host-reboot-scorecard.ps1at startup and every minute for the first 15 minutes after 99 boot. - P1: Install a local Windows service wrapper for the scorecard loop.
- P2: Add an AI Agent runtime that consumes scorecard JSON and chooses approved recovery actions.
- P3: Add a UI/console dashboard on 99 for operator evidence and manual override.
Current command and alert loops:
Wooo-Agent99-Control-Loop: processesC:\Wooo\Agent99\queue, updates the dashboard, and writes execution evidence.Wooo-Agent99-Telegram-Inbox: reads Telegram group commands with Agent99 prefixes and submits allowlisted queue work.Wooo-Agent99-SRE-Alert-Inbox: readsC:\Wooo\Agent99\alerts\incoming, converts actionable alerts into queue work, and triggers the control loop.Wooo-Agent99-SRE-Alert-Relay: runs the 99-side HTTP relay for sanitized AWOOI Alertmanager JSON and writes accepted alerts intoC:\Wooo\Agent99\alerts\incoming.Wooo-Agent99-Performance-Guard: runs every minute and performs allowlisted load shedding before escalating unresolved performance alerts.Wooo-Agent99-Self-Health: verifies the scheduled tasks and evidence freshness for the control plane itself.
AwoooI SRE Telegram command loop:
- Operators and project AI Agents can issue commands in the SRE Telegram group with
/agent99 .... - Agent99 records these as
source=telegram-sre-war-room. - Failed or escalated automated repairs send
operator_command_resultback to Telegram. - Successful automated repairs are evidence-first: they write queue, evidence, problem count, KM, and RAG receipts, then suppress success-only Telegram noise.
- Failure results include source, failure instruction, mode, exit code, evidence path, and problem count.
- The command path must not depend on Codex quota.
- The command path must not depend only on the default
TELEGRAM_CHAT_ID, because that can point to a private chat. Agent99 also accepts command updates from Telegram chats whose title matchesAwoooI SRE|AWOOOI SRE|SRE. - When the command comes from a matched Telegram group, the completion report is sent back to that same Telegram origin; stored evidence redacts the raw chat id as
telegram-origin. - Non-command monitoring alerts in the SRE Telegram group are auto-ingested when they look like Alertmanager/FIRING/critical/warning/502/CPU/disk/Harbor/K3s/backup/host-down/provider-freshness alerts.
- Auto-ingested monitoring alerts use
source=telegram-sre-war-room-monitoringand enter the same SRE alert inbox / queue / recovery / Telegram completion / KM-RAG path.
Alert-to-action routing:
- Public 502 / route down / website down ->
Recover. - Host down / reboot detected / VM not running ->
Recover. - CPU, memory, disk, or load pressure ->
Perfwith controlled apply. - Harbor or registry unhealthy ->
HarborRepair. - AWOOOI K3s, pod, deployment, or image pull failure ->
AwoooRepair. - Backup freshness, snapshot, restore drill, or cron issue ->
BackupCheck. - Provider freshness, last-seen, ingestion, raw signal, or no-false-green risk ->
ProviderFreshness. - Unknown actionable alert ->
Statusevidence first.
Producer-side Agent99 bridge:
- AWOOI API Alertmanager webhook schedules an Agent99 bridge after normalization and fingerprinting.
- Preferred transport: when
AGENT99_SRE_ALERT_RELAY_URLis configured, the bridge POSTs sanitized alert JSON to the 99 relay. Production URL ishttp://192.168.0.99:8787/agent99/sre-alert/. - Fallback transport: when
AGENT99_SRE_ALERT_INBOX_PATHis configured and relay URL is empty, the bridge writes sanitized alert JSON directly to the Agent99 SRE inbox contract. - If relay/path is empty or unavailable, the bridge fails open and logs; it must not cause Alertmanager retries.
- Relay safety: only LAN/local source prefixes are accepted by default; optional
AGENT99_SRE_RELAY_TOKEN/AGENT99_SRE_ALERT_RELAY_TOKENvalues stay in env/Secret and are never stored in repo or evidence. - Provider freshness bridge output must run direct readback, then require provider window, last seen, direct reference, and verifier readback before dashboard green is trusted.
- Provider freshness no-false-green rule: route 200 or dashboard up is not enough. The Agent99 verifier must read
https://awoooi.wooo.work/api/v1/platform/events/dossier/recurrence?project_id=awoooi&limit=20and recordproviderWindowMinutes,lastSeen,directReference, andverifierReadback.
2026-07-11 P0-002 source receipt, runtime deployment pending:
ACTION REQUIREDcards forcold-start-gatenow enter the same Agent99 ingress as Alertmanager and route toRecoverwith the reboot/cold-start scorecard verifier.- Failed
AWOOOI CI/CDcards enter Agent99 ascicd_failureinStatusmode. Agent99 records evidence but waits for the next successful Gitea CD/deploy/runtime receipt before source-event closure. - The producer stores a sanitized relay acceptance receipt in the outbound source envelope before Telegram delivery; Telegram remains a human lifecycle surface, not the only queue or database.
- Cold-start candidates use the Agent99 execution route and never synthesize
kubectl rollout restart deployment/cold-start-gate. - A relay receipt with
accepted=falsereleases the fingerprint single-flight lock and returns failed. This prevents a transport-level response from permanently suppressing an unprocessed incident. - Verification completed in source: 249 focused post-rebase tests and 262 expanded all-Telegram plus Agent99/RepairCandidate tests passed after integrating the Telegram single-owner mainline; the repository static governance suite also passed. This does not prove Windows 99 is running this revision; runtime manifest and exact do-not-page replay are still mandatory.
Approved controlled actions for the 99 agent:
- Start a missing VM.
- Ping and SSH readback.
- Restart Harbor Redis / Harbor core after evidence of Harbor token failure.
- Delete K3s pods stuck in image pull failure only after Harbor is healthy.
- Run public route readback.
- Send Telegram status.
Actions still requiring explicit break-glass:
- Reading or exfiltrating secrets.
- Destructive database operations.
- Firewall cutover.
- Remote delete / prune / force push.
- Production provider route cutover with cost or billing impact.
Evidence Required Before Calling Recovery Complete
Recovery is complete only when all of the following are captured:
- Five VM hosts have reachability evidence.
- 110 Harbor core is healthy.
- 120 AWOOOI deployments are ready.
- Public routes return non-502, preferably HTTP 200.
- Any degraded health components are listed separately with owner / next action.
Current 2026-07-09 Receipts
- 110
harbor-core: recovered toUp ... (healthy). - 120
awoooi-prod:awoooi-api: 1/1awoooi-web: 2/2awoooi-worker: 1/1awoooi-auto-repair-canary: 1/1
- Public readback:
awoooi.wooo.work: HTTP 200 after redirect.stock.wooo.work: HTTP 200 after redirect.2026fifa.wooo.work: HTTP 200 after redirect.gitea.wooo.work: HTTP 200 after redirect.harbor.wooo.work: HTTP 200 after redirect.
- Host reachability:
- 110, 112, 120, 121, 188 responded to ping or SSH.
- Remaining degraded signal:
- AWOOOI health reported degraded AI provider signals including
ollama_gcp_btimeout andollama_localconnection refused / unavailable.
- AWOOOI health reported degraded AI provider signals including
Agent99 Installation Receipt
2026-07-09 16:49 Asia/Taipei:
- 99 host:
WOOO-SUPER. - Agent root:
C:\Wooo\Agent99. - VMware CLI:
C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe. - Live config:
C:\Wooo\Agent99\config\agent99.config.json. - Evidence directory:
C:\Wooo\Agent99\evidence. - Scheduled tasks:
Wooo-Agent99-Heartbeat:LastTaskResult=0, latest status evidenceagent99-Status-20260709-164845.json.Wooo-Agent99-Startup-Recovery:LastTaskResult=0, latest recovery evidenceagent99-Recover-20260709-164937.json.
- Startup recovery readback:
- VM selector: 110, 188, 112, 120, 121 all
host_already_reachable. - Harbor: core, Redis, and registry all healthy.
- AWOOOI: deploy ready, no image pull failure, no crash failure.
- Public routes:
awoooi.wooo.work,stock.wooo.work,2026fifa.wooo.work,gitea.wooo.work, andharbor.wooo.workall HTTP 200 / non-502.
- VM selector: 110, 188, 112, 120, 121 all
Agent99 Performance Guard Receipt
2026-07-09 17:15 Asia/Taipei:
- Scheduled task:
Wooo-Agent99-Performance-Guard. - Trigger interval: every 1 minute.
- Last task result:
0. - Latest evidence:
C:\Wooo\Agent99\evidence\agent99-Perf-20260709-171502.json. - Host performance readback:
- 110: OK.
- 112: OK.
- 120: OK.
- 121: OK.
- 188: OK.
- Controlled load shedding:
- Only allowlisted actions can run.
- Current 110 runner action requires
load_per_core_critical. - Memory/disk pressure alerts do not execute the runner pause action.
- Telegram audit:
- Agent99 emits Telegram attempts for warnings, critical events, failed or escalated operator commands, and load-shed actions.
- Successful operator commands are not Telegram noise; they are recorded in evidence, problem counts, KM, and RAG.
- Agent99 supports local env aliases and an existing-token relay.
- Current relay: 110
stockplatform-v2-api-1, using that container's existingTELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID. - 2026-07-09 17:27 verification:
Wooo-Agent99-Performance-GuardLastTaskResult=0; latest evidenceagent99-Perf-20260709-172712.json;tgSent=2;relayOk=True. - Token and chat id values were not printed, copied into repo files, or written to evidence.
Agent99 Command And SRE Alert Integration Receipt
2026-07-09 23:03 Asia/Taipei:
- Telegram command inbox is deployed and scheduled:
- Script:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1 - Task:
Wooo-Agent99-Telegram-Inbox - Latest evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260709-230031.json - Result:
ok=True,updatesSeen=0,processedCount=0 - Evidence check: no Python code, no token text.
- Script:
- SRE war-room alert inbox is deployed and scheduled:
- Script:
C:\Wooo\Agent99\bin\agent99-sre-alert-inbox.ps1 - Task:
Wooo-Agent99-SRE-Alert-Inbox - Incoming path:
C:\Wooo\Agent99\alerts\incoming - Latest evidence:
C:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260709-230226.json
- Script:
- Synthetic 502 alert test:
- Alert id:
synthetic-public-502-20260709-230107 - Alert source:
awoooi-sre-war-room - Alert kind:
public_route_502 - Resolved mode:
Recover - Queue processor evidence:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260709-230108.json - Processed count:
1 - Mode:
Recover - Exit code:
0 - Telegram relay:
sent=True,relayOk=True
- Alert id:
- Recovery verifier from the synthetic alert:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-Recover-20260709-230108.json - Public route failures:
0 - Host reachability failures:
0 - Harbor core healthy:
True - AWOOOI deploy ready:
True
- Evidence:
- Agent99 self-health after integration:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-SelfCheck-20260709-230223.json - Severity:
ok - Task failures:
0 - Evidence critical:
0 - Evidence warning:
0 - Telegram inbox task: OK
- SRE alert inbox task: OK
- Dashboard queue pending:
0 - Dashboard alert pending:
0
- Evidence:
Agent99 Problem Count / KM / RAG Receipt
2026-07-09 23:12 Asia/Taipei:
- Synthetic AwoooI SRE Telegram command:
- instruction:
檢查所有網站是否恢復正常,若502就自動修復 - source:
telegram-sre-war-room - request id:
request-20260709-231157-d53f53d8 - resolved mode:
Recover - control exit code:
0
- instruction:
- Execution evidence:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260709-231158.json- processed source:
telegram-sre-war-room - processed mode:
Recover - processed ok:
True - processed exit code:
0 - Telegram relay sent:
1 - Telegram evidence contains no Python code.
- Problem counters:
- path:
C:\Wooo\Agent99\state\problem-counts.json - total events:
1 - total resolved:
1 - total failed:
0 - problem key:
telegram-sre-war-room_agent99_operator_instruction - occurrences:
1 - resolved:
1 - failed:
0
- path:
- Knowledge outputs:
- full event ledger:
C:\Wooo\Agent99\playbooks\agent99-incident-records.jsonl - KM summary:
C:\Wooo\Agent99\playbooks\agent99-incident-km.md - RAG import feed:
C:\Wooo\Agent99\playbooks\rag-import\agent99-incidents.jsonl
- full event ledger:
- Dashboard:
- problem events:
1 - resolved:
1 - failed:
0 - queue pending:
0 - alert pending:
0
- problem events:
- SRE Telegram group routing:
- Default relay chat readback was private chat
OoO, not the SRE group. - Live Agent99 config now includes
allowedCommandChatTitlePattern=AwoooI SRE|AWOOOI SRE|SRE. - Telegram inbox readback after the change:
ok=True,updatesSeen=0,processedCount=0. - Next real
/agent99 ...message from the SRE group will be accepted by title match and will reply back to the same Telegram origin.
- Default relay chat readback was private chat
Agent99 SRE Telegram Monitoring Alert Auto-Ingest Receipt
2026-07-09 23:32 Asia/Taipei:
- Runtime behavior:
- SRE Telegram group monitoring alerts are now consumed automatically.
- Prefix
/agent99is no longer required for monitoring alerts. - Auto-ingest is controlled by
autoIngestMonitoringAlerts=True. - Group matching uses
allowedCommandChatTitlePattern=AwoooI SRE|AWOOOI SRE|SRE.
- Loop prevention:
- Agent99's own
Agent99 Alert/operator_command_resultmessages are ignored by monitoring auto-ingest. - Successful operator command results are suppressed from Telegram and kept in evidence/KM/RAG; failed or escalated command results remain alertable.
- Provider freshness signals are not passive dashboard health; they create a read-only freshness candidate, run direct AWOOI readback, and require provider window, last seen, direct reference, and verifier readback.
- Provider freshness guardrail: do not switch provider, call paid model, edit env, or reload.
- Agent99's own
- Synthetic monitoring alert:
Alertmanager FIRING critical public_route_502 service=awoooi host=192.168.0.120 HTTP 502- no
/agent99prefix.
- Evidence chain:
- Telegram inbox:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260709-233230.jsoninboxOk=TruealertedCount=1
- SRE alert inbox:
C:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260709-233231.json- queued count:
1 - failed count:
0
- queued count:
- Control loop:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260709-233232.json- alert source:
telegram-sre-war-room-monitoring - alert kind:
public_route_502 - mode:
Recover - processed ok:
True - exit code:
0 - Telegram attempts:
1 - Telegram sent:
1
- alert source:
- Recovery:
C:\Wooo\Agent99\evidence\agent99-Recover-20260709-233055.json
- Telegram inbox:
- Problem counters:
- total events before:
2 - total events after:
3 - total resolved after:
3 - total failed after:
0 - problem key:
agent99-sre-alert-inbox_awoooi_192.168.0.120_public_route_502 - problem occurrences:
2
- total events before:
Agent99 Alert Noise And Provider Freshness Readback Receipt
2026-07-10 10:00 Asia/Taipei:
- Runtime patch deployed on 99:
- Script:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Parser readback:
parse_ok. - Source commit:
0a7a0115 fix(agent99): reduce alert noise and verify freshness.
- Script:
- Provider freshness behavior:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-ProviderFreshness-20260710-100028.json. - Status:
direct_readback_ok_no_source_events. - Missing fields after automatic readback:
lastSeenonly. providerWindowMinutes=120.directReference=https://awoooi.wooo.work/api/v1/platform/events/dossier/recurrence?project_id=awoooi&limit=20.verifierReadback.ok=True,httpStatus=200,sourceEventTotal=0.
- Evidence:
- Telegram noise control:
- Evidence log:
C:\Wooo\Agent99\evidence\agent99-ProviderFreshness-20260710-100028.log. - Same provider-freshness state was suppressed:
telegram_dedupe_skip type=provider_freshness_triage severity=warning ageMinutes=5.83 cooldown=30. - Evidence log:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260710-100027.log. - Successful operator command was evidence-only:
telegram_operator_success_suppressed type=operator_command_result mode=ProviderFreshness id=operator-suppress-smoke-20260710-100026. - Control evidence:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260710-100027.json,processedCount=1,pendingCount=0,telegram=[].
- Evidence log:
- Scheduled entrypoints verified on 99:
Wooo-Agent99-Control-Loop.Wooo-Agent99-SRE-Alert-Inbox.Wooo-Agent99-Telegram-Inbox.Wooo-Agent99-SRE-Alert-Relayis running.
- Operational rule:
- Do not treat repeated success receipts as user-facing alerts.
- Send user-facing Telegram only for warnings, criticals, unresolved blockers, failed/escalated operator commands, and controlled-remediation actions.
- Keep successful automation in evidence, problem counters, KM, and RAG so repeated incidents trend down without flooding the SRE group.
Agent99 Telegram Alert UX And Noise Freeze Work Items
2026-07-10 10:41 Asia/Taipei:
- Operator requirement:
- AwoooI SRE Telegram alerts must be human-readable, professionally formatted, and action-oriented.
- Important incident updates should include visual context when available: dashboard image, public-route screenshot, service card, or evidence summary image.
- Do not send raw machine fields, empty metrics, repeated success receipts, or text-only alert floods.
- Immediate runtime noise freeze applied on 99:
- Disabled scheduled task:
Wooo-Agent99-Performance-Guard. - Disabled scheduled task:
Wooo-Agent99-Backup-Health. - Disabled scheduled task:
Wooo-Agent99-Self-Health. - Ended running task instance:
Wooo-Agent99-Performance-Guard. - Kept alert intake active:
Wooo-Agent99-SRE-Alert-Relay,Wooo-Agent99-SRE-Alert-Inbox,Wooo-Agent99-Telegram-Inbox, andWooo-Agent99-Control-Loop.
- Disabled scheduled task:
- 2026-07-10 10:47 runtime readback:
Wooo-Agent99-Performance-Guard:Disabled, last result0.Wooo-Agent99-Backup-Health:Disabled, last result0.Wooo-Agent99-Self-Health:Disabled, last result0.Wooo-Agent99-SRE-Alert-Relay:Running.Wooo-Agent99-SRE-Alert-Inbox:Ready, last result0.Wooo-Agent99-Telegram-Inbox:Running.Wooo-Agent99-Control-Loop:Ready, last result0.SecurityTriagesmoke evidence:C:\Wooo\Agent99\evidence\agent99-SecurityTriage-20260710-104456.json.SecurityTriagesmoke result:security_triage_no_recent_alert_body_seen,hitCount=0,telegramCount=0.
- P0 work items added:
- P0-0: keep noisy sensor schedules paused until their alerts have dedupe, clear reason text, and verifier-backed fields.
- P0-1: replace raw Agent99 text alerts with professional Telegram incident cards: title, severity, affected service, user impact, Agent99 action, verifier result, evidence path, repeated count, next action.
- P0-2: add visual attachment support for high-impact alerts: public URL screenshots, dashboard screenshots, and rendered evidence summary images.
- P0-3: suppress alerts with empty metric fields such as blank load/core, memory, disk, age, or maxAge unless a verifier explains why readback failed.
- P0-4: route application config alerts such as Bitan
E_AI_MISSING_KEYto evidence-firstStatus; do not read or print secret values. - P0-5: route IWOOOS/Wazuh/SIEM alerts to
SecurityTriage; collect source log reference, affected host/service, blast radius, repeated count, and allowlisted next action without arbitrary shell or secret exposure. - P0-6: route Gitea repository missing alerts to evidence-first
Statusuntil a dedicated Gitea recovery playbook is verified. - P0-7: run live TG-to-Agent99 end-to-end tests for each alert family before re-enabling the paused sensor schedules.
- P0-8: all Agent99 Telegram alert messages must include Traditional Chinese user-facing labels and human-readable context; professional terms such as
readback_failed,SecurityTriage,directReadback,KM/RAG, and provider names may remain English when translation would reduce precision. - P0-9: Telegram inbox must not force
controlledApply=trueon every monitoring alert.controlledApplyis resolved by SRE mode: remediation modes may run controlled apply, evidence-first modes such asProviderFreshness,BackupCheck,SecurityTriage, andStatusmust remain non-apply unless explicitly allowlisted. - P0-10: Telegram delivery must support actual image/photo delivery through the relay path, not only text plus a local evidence image.
- P0-11: paused Agent99 sensors must pass a no-TG/no-remediation sensor restore gate before schedules are re-enabled. The gate must prove Performance, BackupHealth, and SelfHealth are eligible and must write readback evidence with
sentTelegram=false,controlledApply=false, andranRemediation=false. - P0-12: slow SSH readback after reboot must not be collapsed into "host down". Performance and backup metadata checks must record
elapsedMs, use configurable timeouts, and run a slow retry on timeout before raisingperf_readback_failedor backup readback failure. - P0-13: first-run evidence refresh after a noise freeze must use controlled
-SuppressAlertsfor Perf/Backup/SelfCheck so stale evidence is refreshed without Telegram noise; schedules are then re-enabled without suppression. - P0-14: synthetic or
TEST_DO_NOT_PAGEmonitoring tests must still run the full Telegram -> SRE inbox -> ControlTick -> mode evidence path, butsuppressTelegram=trueandSuppressReason=do_not_pagemust propagate end to end so validation never pages the SRE Telegram group. - P0-15: real SRE alert completion must send a human-readable Traditional Chinese automation result card back to Telegram with action taken, result, evidence, problem count, and KM path. Ordinary successful operator commands remain suppressed unless explicitly configured.
- 2026-07-10 10:54 visual card verifier:
- Runtime script deployed:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-105439. - Parser readback:
parse_ok. - Self-test evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramCardSelfTest-20260710-105440.json. - Visual card:
C:\Wooo\Agent99\evidence\telegram-cards\agent99-card-performance_warning-20260710-105440.png. - Result:
ok=True,visualExists=True,sentTelegram=False,messageFormat=incident_card_v2. - Local visual inspection: PNG is
1040x620, non-blank, formatted as an incident card.
- Runtime script deployed:
- 2026-07-10 11:00 Telegram inbox classifier verifier:
- Runtime script deployed:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1.bak-20260710-110003. - Parser readback:
parse_ok. - Self-test evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramInboxSelfTest-20260710-110004.json. - Result:
ok=True,caseCount=8,passedCount=8,failedCount=0,wroteAlerts=False,sentTelegram=False. - Covered inputs: Agent99 echo suppression, provider freshness, host performance readback failure, backup health, Bitan AI config missing key, IWOOOS/Wazuh/SIEM security, Gitea repository missing, and public 502.
- Severity correction:
readback_failed,missing_key, locale guard, and AI support config failures staywarning; truecritical,P0,emergency,fatal, ordownsignals remaincritical.
- Runtime script deployed:
- 2026-07-10 11:08 bilingual Traditional Chinese card verifier:
- Runtime script deployed with UTF-8 BOM to avoid Windows PowerShell 5 mojibake:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-110842. - Parser readback:
parse_ok. - Self-test evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramCardSelfTest-20260710-110842.json. - Visual card:
C:\Wooo\Agent99\evidence\telegram-cards\agent99-card-performance_warning-20260710-110842.png. - Result:
ok=True,visualExists=True,sentTelegram=False,messageFormat=incident_card_zh_tw_v3. - UTF-8 readback confirmed local preview lines include:
Agent99 事件卡 / Incident Card,嚴重度 Severity,事件 Event,原因 Reason,影響 Impact,Agent99 動作 Action,目前狀態 Current, and時間 Time. - Local visual inspection: PNG is
1040x620, non-blank, and Traditional Chinese text renders correctly.
- Runtime script deployed with UTF-8 BOM to avoid Windows PowerShell 5 mojibake:
- 2026-07-10 11:17 synthetic TG-to-SRE e2e verifier:
- First run found a real bug: Telegram inbox wrote
controlledApply=Truefor aProviderFreshnessalert. - Unsafe test queue was quarantined before ControlTick execution:
C:\Wooo\Agent99\queue\failed\quarantined-e2e-controlled-apply-bug-sre-alert-20260710-111547-face168a.json. - Runtime fix deployed:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1.bak-20260710-111651. - Classifier self-test:
ok=True,caseCount=8,passedCount=8,failedCount=0. - Post-fix synthetic e2e evidence:
- Telegram inbox evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-111728.json. - SRE inbox evidence:
C:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260710-111729.json. - Queue result:
mode=ProviderFreshness,controlledApply=False,wroteTelegram=False,ranControlTick=False. - Test queue quarantined after verification:
C:\Wooo\Agent99\queue\failed\quarantined-e2e-after-verify-sre-alert-20260710-111729-b2712df3.json.
- Telegram inbox evidence:
- First run found a real bug: Telegram inbox wrote
- 2026-07-10 11:25 Telegram relay photo delivery verifier:
- Runtime script deployed with relay
sendPhotosupport:C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-112511. - Self-test evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramDeliverySelfTest-20260710-112512.json. - Result:
ok=True,sentTelegram=True,visualSent=True,relay.photoSent=True,relay.output=photo_sent_ok,messageFormat=incident_card_zh_tw_v3. - Delivery mode: Windows 99 generated the PNG, copied it to host 110, copied it into relay container
stockplatform-v2-api-1, and sent it through TelegramsendPhoto; text-only fallback was not used.
- Runtime script deployed with relay
- 2026-07-10 12:01 sensor restore gate verifier:
- Runtime script deployed:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Backups before deploy:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-114000.C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-114519.C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-114816.C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-115331.C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-115644.
- New verifier mode:
-SelfTestSensorGate. - New controlled refresh switch:
-SuppressAlerts. - SSH readback hardening:
- Performance readback default timeout raised to
45s. - Performance timeout gets slow retry with default
90s. - Backup file and crontab metadata readback default timeout raised to
45s. - SSH evidence now includes
elapsedMs; performance rows includereadTimeoutSeconds,slowReadTimeoutSeconds, andreadbackSlowRetry.
- Performance readback default timeout raised to
- False-negative findings fixed during rollout:
- 110 performance readback was timing out at the previous
25sboundary even though SSH succeeded. - Backup file metadata checks were timing out at the previous
15sboundary. - Backup crontab readback was timing out at the previous
12sboundary.
- 110 performance readback was timing out at the previous
- Suppressed refresh evidence:
- Perf refresh:
C:\Wooo\Agent99\evidence\agent99-refresh-perf-20260710-115704.txt, exit code0. - Backup refresh:
C:\Wooo\Agent99\evidence\agent99-refresh-backup-20260710-115754.txt, exit code0. - Self refresh:
C:\Wooo\Agent99\evidence\agent99-refresh-self-20260710-115858.txt, exit code0.
- Perf refresh:
- Final sensor gate evidence:
C:\Wooo\Agent99\evidence\agent99-SensorGateSelfTest-20260710-115927.json. - Final gate result:
ok=True.readyToEnableAll=True.sentTelegram=False.controlledApply=False.ranRemediation=False.performanceGuard=eligible.backupHealth=eligible.selfHealth=eligible.
- Final host performance readback:
192.168.0.110:ok,loadPerCore=0.44,memAvailPct=59.93,diskUsedPct=83,elapsedMs=25834.192.168.0.112:ok,loadPerCore=0.01,memAvailPct=53.09,diskUsedPct=53,elapsedMs=345.192.168.0.120:ok,loadPerCore=0.07,memAvailPct=90.01,diskUsedPct=47,elapsedMs=709.192.168.0.121:ok,loadPerCore=0.02,memAvailPct=92.75,diskUsedPct=27,elapsedMs=1247.192.168.0.188:ok,loadPerCore=0.26,memAvailPct=83.77,diskUsedPct=88,elapsedMs=974.
- Final backup readback:
backupSeverity=ok.targetCritical=0,targetWarning=0.fileCritical=0,fileWarning=0.cronCritical=0,cronWarning=0.- Coverage:
13snapshot targets,7file checks,6cron patterns.
- Final self-health readback:
selfSeverity=ok.taskFailures=0.evidenceCritical=0,evidenceWarning=0.performanceSeverity=ok,telegramSeverity=ok.
- Restored schedules:
Wooo-Agent99-Performance-Guard: enabled, latest Perf evidenceC:\Wooo\Agent99\evidence\agent99-Perf-20260710-120117.json,latestPerfTelegramSent=0,latestPerfCritical=0,latestPerfWarning=0.Wooo-Agent99-Backup-Health: enabled.Wooo-Agent99-Self-Health: enabled.
- 2026-07-10 12:09 post-restore scheduled-cycle readback:
Wooo-Agent99-Performance-Guard:Running, last run2026-07-10T12:09:16+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-Perf-20260710-120829.json.Wooo-Agent99-Backup-Health:Ready, last run2026-07-10T12:07:17+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-BackupCheck-20260710-120718.json.Wooo-Agent99-Self-Health:Ready, last run2026-07-10T12:06:17+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-SelfCheck-20260710-120618.json.Wooo-Agent99-SRE-Alert-Inbox:Ready, last run2026-07-10T12:09:17+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260710-120917.json.Wooo-Agent99-Telegram-Inbox:Running, last run2026-07-10T12:09:17+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-120818.json.Wooo-Agent99-Control-Loop:Ready, last run2026-07-10T12:09:17+08:00, latest evidenceC:\Wooo\Agent99\evidence\agent99-ControlTick-20260710-120918.json.- Scheduled Perf result:
critical=0,warning=0,sent=0. - Scheduled Backup result:
severity=ok,targetCritical=0,targetWarning=0,fileCritical=0,fileWarning=0,cronCritical=0,cronWarning=0,sent=0. - Scheduled SelfHealth result:
severity=ok,taskFailures=0,evidenceCritical=0,evidenceWarning=0,performanceSeverity=ok,telegramSeverity=ok,sent=0. - Latest host performance after scheduled cycle:
192.168.0.110:ok,loadPerCore=0.48,diskUsedPct=83,elapsedMs=22915.192.168.0.112:ok,loadPerCore=0.01,diskUsedPct=53,elapsedMs=339.192.168.0.120:ok,loadPerCore=0.05,diskUsedPct=47,elapsedMs=699.192.168.0.121:ok,loadPerCore=0.02,diskUsedPct=27,elapsedMs=1183.192.168.0.188:ok,loadPerCore=0.09,diskUsedPct=88,elapsedMs=881.
- 2026-07-10 12:12 Telegram inbox idle readback verifier:
- Runtime script deployed:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1. - Backup before deploy:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1.bak-20260710-121231. - Parser readback:
parse_ok. - Fix: Telegram relay readback now records
timeoutSeconds,elapsedMs, andslowRetry; empty update polling isok=Truewithreason=no_updates, not a false failure. - Self-test run:
C:\Wooo\Agent99\evidence\agent99-telegram-inbox-selftest-run-20260710-121249.txt, exit code0. - Real inbox run evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-121252.json. - Real inbox result:
ok=True,reason=no_updates,updatesSeen=0,processedCount=0,alertedCount=0,ignoredCount=0,sentTelegram=0. - Relay readback: host
192.168.0.110, containerstockplatform-v2-api-1,ok=True,exitCode=0,elapsedMs=2176,timeoutSeconds=60,slowRetry=False. - Scheduled inbox readback:
Wooo-Agent99-Telegram-Inboxlast run2026-07-10T12:14:17+08:00, last task result0, latest evidenceC:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-121418.json. - Scheduled inbox result:
ok=True,reason=no_updates,updatesSeen=0,processedCount=0,alertedCount=0,sentTelegram=0. - Scheduled relay readback:
ok=True,exitCode=0,elapsedMs=35062,timeoutSeconds=60,slowRetry=False.
- Runtime script deployed:
- 2026-07-10 12:31 synthetic do-not-page E2E verifier:
- Runtime scripts deployed:
C:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1, backupC:\Wooo\Agent99\bin\agent99-telegram-inbox.ps1.bak-20260710-122314.C:\Wooo\Agent99\bin\agent99-sre-alert-inbox.ps1, backupsC:\Wooo\Agent99\bin\agent99-sre-alert-inbox.ps1.bak-20260710-122315andC:\Wooo\Agent99\bin\agent99-sre-alert-inbox.ps1.bak-20260710-123108.C:\Wooo\Agent99\bin\agent99-control-plane.ps1, backupsC:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-122315,C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-122800, andC:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-123108.C:\Wooo\Agent99\agent99-run.ps1, backupsC:\Wooo\Agent99\agent99-run.ps1.bak-20260710-122315andC:\Wooo\Agent99\agent99-run.ps1.bak-20260710-122800.
- Parser readback: all deployed PowerShell scripts and launcher parsed OK before write.
- Safety fix:
suppressTelegramnow uses an explicit bool parser so string"false"does not become truthy in Windows PowerShell. - Self-tests:
- Telegram inbox classifier:
ok=True,caseCount=9,passedCount=9,failedCount=0; addedsynthetic provider freshness do not page. - SRE alert routing:
C:\Wooo\Agent99\evidence\agent99-SreAlertRoutingSelfTest-20260710-123126.json,ok=True,caseCount=13,passedCount=13,failedCount=0; addedprovider freshness do not page.
- Telegram inbox classifier:
- E2E alert id:
telegram-monitoring-1783686686. - Telegram inbox evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-123126.json,synthetic=True,alertedCount=1,suppressTelegram=True. - SRE inbox evidence:
C:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260710-123126.json,queuedCount=1,controlExitCode=0, queuesuppressTelegram=True. - ControlTick evidence:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260710-123127.json,processedCount=1,pendingCount=0, commandok=True,exitCode=0, operator resultsent=False,suppressed=True,reason=do_not_page. - ProviderFreshness evidence:
C:\Wooo\Agent99\evidence\agent99-ProviderFreshness-20260710-123128.json,status=candidate_created_waiting_direct_readback, candidateprovider-freshness-20260710-123129. - ProviderFreshness Telegram evidence: both
agent_startandprovider_freshness_triagehavesent=False,suppressed=True,reason=do_not_page. - Problem/KM writeback:
problemKey=agent99-sre-alert-inbox_unknown_provider_freshness_signal,occurrences=6,resolved=5,failed=1,lastStatus=resolved, KM pathC:\Wooo\Agent99\playbooks\agent99-incident-km.md.
- Runtime scripts deployed:
- 2026-07-10 12:42 SRE completion card v4 verifier:
- Runtime script deployed:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1. - Backups before deploy:
C:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-124012andC:\Wooo\Agent99\bin\agent99-control-plane.ps1.bak-20260710-124137. - Runtime bootstrap deployed:
C:\Wooo\Agent99\bin\agent99-bootstrap.ps1, backupC:\Wooo\Agent99\bin\agent99-bootstrap.ps1.bak-20260710-124425. - Runtime config readback:
C:\Wooo\Agent99\config\agent99.config.jsonhastelegram.alertSreCommandResults=True; config backupC:\Wooo\Agent99\config\agent99.config.json.bak-20260710-124351. - New behavior: real
source=agent99-sre-alert-inboxcommand results withalertIdare allowed to send completion cards even when ordinary successful operator commands are suppressed. - Guard:
suppressTelegram=trueorTEST_DO_NOT_PAGEstill suppresses the entire path withreason=do_not_page. - Telegram card self-test evidence:
C:\Wooo\Agent99\evidence\agent99-TelegramCardSelfTest-20260710-124202.json. - Self-test result:
ok=True,messageFormat=incident_card_zh_tw_v4,operatorTextOk=True,operatorDecisionOk=True,operatorVisualExists=True,sentTelegram=False. - Operator completion card image:
C:\Wooo\Agent99\evidence\telegram-cards\agent99-card-operator_command_result-20260710-124202.png. - Do-not-page E2E alert id:
telegram-monitoring-1783687343. - Do-not-page E2E evidence:
- Telegram inbox:
C:\Wooo\Agent99\evidence\agent99-TelegramInbox-20260710-124224.json,alertedCount=1,suppressTelegram=True. - SRE inbox:
C:\Wooo\Agent99\evidence\agent99-SreAlertInbox-20260710-124224.json,queuedCount=1,controlExitCode=0. - ControlTick:
C:\Wooo\Agent99\evidence\agent99-ControlTick-20260710-124225.json,processedCount=1,pendingCount=0, operator resultsent=False,suppressed=True,reason=do_not_page. - ProviderFreshness:
C:\Wooo\Agent99\evidence\agent99-ProviderFreshness-20260710-124226.json,status=direct_readback_ok_no_source_events, candidateprovider-freshness-20260710-124226.
- Telegram inbox:
- Problem/KM writeback after v4 E2E:
problemKey=agent99-sre-alert-inbox_unknown_provider_freshness_signal,occurrences=7,resolved=6,failed=1,lastStatus=resolved.
- Runtime script deployed:
- Runtime script deployed:
Agent99 Monitoring Alert Routing Self-Test Receipt
2026-07-10 10:17 Asia/Taipei:
- Runtime patch deployed on 99:
- Script:
C:\Wooo\Agent99\bin\agent99-sre-alert-inbox.ps1. - New verifier mode:
-SelfTest. - Parser readback:
parse_ok.
- Script:
- Self-test evidence:
C:\Wooo\Agent99\evidence\agent99-SreAlertRoutingSelfTest-20260710-101747.json.ok=True.caseCount=9.passedCount=9.failedCount=0.
- Expanded self-test evidence:
C:\Wooo\Agent99\evidence\agent99-SreAlertRoutingSelfTest-20260710-104455.json.ok=True.caseCount=12.passedCount=12.failedCount=0.- Added routes: IWOOOS/Wazuh/SIEM security alert ->
SecurityTriage; Gitea repository missing ->Status; Bitan AI support missing key / locale guard ->Status.
- Covered alert routes:
- Public route 502 ->
Recover,controlledApply=True. - Host down / reboot / VM not running ->
Recover,controlledApply=True. - CPU / memory / disk / performance pressure ->
Perf,controlledApply=True. - Backup freshness / snapshot / cron ->
BackupCheck,controlledApply=False. - Harbor / registry ->
HarborRepair,controlledApply=True. - K3s / pod / deployment / image pull failure ->
AwoooRepair,controlledApply=True. - Provider freshness / last seen / ingestion / no-false-green ->
ProviderFreshness,controlledApply=False. - Unknown warning ->
Status,controlledApply=False. - Info heartbeat noise -> ignored.
- Public route 502 ->
- Defect found and fixed during self-test:
backup freshnesswas incorrectly routed toProviderFreshnessbecause the generic wordfreshnessmatched too early.- Fix: route backup/snapshot/cron before provider freshness and restrict provider freshness to provider-specific patterns such as
provider_freshness_signal,source_provider_freshness_triage,provider window,last_seen, and ingestion.
OpenClaw Cold-Start Readback
2026-07-09 17:38 Asia/Taipei:
- Production OpenClaw URL:
http://192.168.0.188:8088. - 188 service:
clawbot.serviceisactive. - Health endpoint:
http://192.168.0.188:8088/health. - Health readback:
status=healthy,version=6.0,service=ClawBot,environment=production,telegram_bot=connected. - Agent99 latest status evidence:
C:\Wooo\Agent99\evidence\agent99-Status-20260709-173813.json. - Agent99
aiServices.openclaw:ok=True,status=healthy. - Telegram relay from the Agent99 status run:
tgSent=2,relayOk=2. - Note:
192.168.0.188:8089is not the current production OpenClaw endpoint.
Windows Update No-Surprise-Reboot Policy
2026-07-09 17:39 Asia/Taipei:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-windows-update-policy-20260709-173933.json. NoAutoRebootWithLoggedOnUsers=1.AlwaysAutoRebootAtScheduledTime=0.AUOptions=3.ActiveHoursStart=0,ActiveHoursEnd=23.gpupdateOk=True.
Agent99 Self-Health Receipt
2026-07-09 17:52 Asia/Taipei:
- Scheduled task:
Wooo-Agent99-Self-Health. - Trigger interval: every 5 minutes.
- Task Scheduler trigger verification:
LastTaskResult=0.- Evidence:
C:\Wooo\Agent99\evidence\agent99-SelfCheck-20260709-175218.json. evidenceAfterTrigger=True.
- Self-health checks:
Wooo-Agent99-Startup-Recovery: OK.Wooo-Agent99-Heartbeat: OK.Wooo-Agent99-Performance-Guard: OK.Wooo-Agent99-Self-Health: OK.- Evidence freshness: performance, status, self-health, and startup recovery OK.
- Latest performance evidence: all five hosts OK.
- Telegram delivery:
tgSent=3,relayOk=3. - Updated rule: a quiet interval with no alert attempts is OK; only failed alert attempts are Telegram critical.
110 Load Pressure Incident Readback
2026-07-09 18:07 Asia/Taipei:
- Symptom: 110 host load stayed above warning after all hosts rebooted.
- Initial findings:
giteaandstockplatform-v2-postgres-1were the highest regular service containers./backup/scripts/backup-awoooi.shwas running a remotepg_dumpfrom 188 and local gzip compression.- A random container
mystifying_napierwas runningalpine "tar czf - /data"with no restart policy and no labels, consuming CPU and writing compressed binary output into Docker logs.
- Controlled actions taken:
- Backup pipeline PIDs were reduced to nice 15 / ionice best-effort 7.
mystifying_napierwas stopped and left asDead; it was not deleted, so evidence remains available.
- Agent99 automation added:
stop-110-runaway-alpine-tar-data: stops allowlistedalpinecontainers runningtar czf - /datawhen 110 is at warning or critical load.renice-110-awoooi-backup-pressure: lowers priority forbackup-awoooi.sh,gzip, and remotepg_dumppipeline PIDs when 110 is at warning or critical load.pause-110-ci-runner-pressure: still only runs at critical load withload_per_core_critical; runner is not touched for backup, disk, memory, or warning-only pressure.- Warning-level top CPU capture is enabled with a 10-second timeout to avoid diagnostics becoming a new load source.
- Verification:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-Perf-20260709-180704.json. - 110 load-per-core:
0.67, severityok. - 112, 120, 121, and 188: severity
ok. perfCritical=0,perfWarning=0.- Load-shedding actions skipped because host severity was below threshold.
- Telegram relay:
tgSent=2,relayOk=2.
- Evidence:
Agent99 Backup Health Receipt
2026-07-09 19:07 Asia/Taipei:
- Scheduled task:
Wooo-Agent99-Backup-Health. - Trigger interval: every 15 minutes.
- Task Scheduler trigger verification:
LastTaskResult=0.- Evidence:
C:\Wooo\Agent99\evidence\agent99-BackupCheck-20260709-190617.json. evidenceAfterTrigger=True.
- BackupCheck coverage:
- Snapshot freshness targets:
awoooi,gitea,harbor,momo,langfuse,monitoring,signoz,clawbot,open-webui,sentry,ai-artifacts,configs, andpublic-routes. - File/status checks:
backup.log,backup-status.log, legacystatus.log, legacycron.log, integrity check status, restore drill status, and configs last-status JSON. - Cron contract patterns:
backup-all.sh,backup-awoooi-frequent.sh,backup-health-textfile-exporter.py,check-backup-integrity.sh,sync-offsite-backups.sh --mode status, andbackup-status.sh.
- Snapshot freshness targets:
- Latest result:
backupHealth.severity=ok.targetCritical=0,targetWarning=0.fileCritical=0,fileWarning=0.cronCritical=0,cronWarning=0.targetCount=13,fileCheckCount=7,cronPatternCount=6.- Telegram relay:
tgSent=2,relayOk=2.
- Self-health cross-check:
- Evidence:
C:\Wooo\Agent99\evidence\agent99-SelfCheck-20260709-190714.json. Wooo-Agent99-Backup-Health: OK,LastTaskResult=0.- Backup evidence freshness: OK, latest file
agent99-BackupCheck-20260709-190617.json, age0.5minutes, max age30minutes.
- Evidence:
Alert-to-Remediation / Evidence Sanitization Readback
2026-07-09 22:11 Asia/Taipei:
- Root cause fixed for unreadable Telegram relay messages:
- Relay sender argument index corrected from
sys.argv[1]tosys.argv[2]. - Telegram now receives formatted Agent99 alert text, not embedded Python relay code.
- Relay sender argument index corrected from
- Noise control:
alertAllOperations=false.alertInfoEvents=false.dedupeMinutes=30.agent_completeremains evidence-only and does not alert by default.
- Alert-to-action rule:
Perf -ControlledApplysuppresses immediate performance spam, performs allowlisted remediation first, then alertsload_shed_result.- If no remediation applies, Agent99 alerts the unresolved performance issue.
- 188 disk pressure is now allowlisted through
prune-188-docker-build-cache-disk-pressure. - The 188 action uses
timeoutSeconds=240plus a post-apply verifier;postVerifyMaxDiskUsedPercent=89. - Timeout alone is not final truth; post-verifier success can mark remediation effective.
- Self-health false critical fixed:
- A quiet interval with no recent alerts is OK.
- Telegram health is critical only when recent alert attempts exist and all delivery attempts fail.
- Telegram delivery health now uses a 60-minute lookback across recent evidence files.
- Transient performance warnings are no longer promoted to self-health critical; only missing or critical host performance evidence is critical.
- Backup monitor false critical fixed:
- Backup snapshot readback now supports
snapshotReadTimeoutSeconds. - 99 live config sets
snapshotReadTimeoutSeconds=90. - Harbor backup was verified as present and fresh after a timeout false critical; latest metadata was from 2026-07-09 17:48 Asia/Taipei and within the 1800-minute SLA.
- Backup snapshot readback now supports
- Evidence security fixed:
- Harbor readback now stores selected health fields only: name, running state, health state.
- Raw
docker inspectoutput is not stored. - Existing Status evidence on 99 was sanitized: 77 files checked;
inspectOutputNotRedactedCount=0;unsafeHarborFieldCount=0.
- Latest recovery proof:
- Status evidence:
C:\Wooo\Agent99\evidence\agent99-Status-20260709-221147.json. - Host reachability: 110, 112, 120, 121, and 188 all OK.
- Public routes:
awoooi.wooo.work,stock.wooo.work,2026fifa.wooo.work,gitea.wooo.work, andharbor.wooo.workall HTTP 200 / non-502. - Performance:
perfCritical=0,perfWarning=0; 188 disk used 87%; 110 load-per-core 0.85. - Harbor: core, Redis, and registry healthy with redacted evidence.
- AWOOOI:
deployReady=true,imagePullFailure=false,crashFailure=false. - Backup evidence after timeout fix:
C:\Wooo\Agent99\evidence\agent99-BackupCheck-20260709-221759.json,backupHealth.severity=ok, all target/file/cron critical and warning counts are 0. - Final self-health evidence:
C:\Wooo\Agent99\evidence\agent99-SelfCheck-20260709-222236.json,selfHealth.severity=ok,taskFailures=0,performanceSeverity=ok,telegramSeverity=ok.
- Status evidence:
99 Visible Agent Control Center
2026-07-09 22:33 Asia/Taipei:
- Agent99 is visible and controllable from the 99 Windows desktop.
- New scheduled task:
Wooo-Agent99-Control-Loop.- Runs every 1 minute.
- Updates dashboard and processes queue commands.
- Desktop shortcuts:
C:\Users\Public\Desktop\Agent99 Control Center.lnk.C:\Users\Public\Desktop\Agent99 Queue.lnk.C:\Users\Public\Desktop\Agent99 Evidence.lnk.D:\Desktop\Agent99 Control Center.lnk.D:\Desktop\Agent99 Queue.lnk.D:\Desktop\Agent99 Evidence.lnk.
- Dashboard:
- HTML:
C:\Wooo\Agent99\dashboard\index.html. - JSON:
C:\Wooo\Agent99\dashboard\agent99-control-center.latest.json. - Latest dashboard timestamp readback:
2026-07-09T22:33:26+08:00. - Queue readback:
pending=0,processed=2,failed=0.
- HTML:
- Queue command contract:
- Add a JSON command to
C:\Wooo\Agent99\queue. ControlTickprocesses only allowlisted modes.- Results are written to
C:\Wooo\Agent99\queue\processedorC:\Wooo\Agent99\queue\failed. - Operator command results are sent to Telegram.
- Add a JSON command to
- Verification:
- Command ID:
codex-visible-publicsmoke-20260709-223308. - Mode:
PublicSmoke. - Result:
ok=true,exitCode=0. - Evidence:
C:\Wooo\Agent99\evidence\agent99-PublicSmoke-20260709-223309.json. - Telegram:
operator_command_result,severity=info,sent=true,relayOk=true. - Self-health:
C:\Wooo\Agent99\evidence\agent99-SelfCheck-20260709-223340.json,selfHealth.severity=ok,Wooo-Agent99-Control-Loop=ok. - Latest performance:
C:\Wooo\Agent99\evidence\agent99-Perf-20260709-223419.json,perfCritical=0,perfWarning=0.
- Command ID:
Operator Instruction Intake
2026-07-09 22:41 Asia/Taipei:
- Agent99 accepts text instructions on 99 through:
C:\Wooo\Agent99\bin\agent99-submit-request.ps1.C:\Wooo\Agent99\agent99-submit-request.cmd.Agent99 Submit Request.lnkon the desktop.
- Flow:
- instruction -> request record -> queue command ->
ControlTick-> evidence -> Telegram result.
- instruction -> request record -> queue command ->
- Current allowlisted request router:
- websites / routes / 502 ->
PublicSmoke. - restore / reboot / repair ->
Recover. - VM / VMware ->
StartVMs. - CPU / load / memory / disk / performance ->
Perf. - backup / snapshot / cron ->
BackupCheck. - self health / agent health ->
SelfCheck. - Harbor / registry ->
HarborRepair. - AWOOOI / K3s / pods ->
AwoooRepair.
- websites / routes / 502 ->
- Verification:
- Chinese instruction submitted from Codex to 99: check whether all websites are normal.
- Request ID:
request-20260709-224133-0dc045fe. - Resolved mode:
PublicSmoke. - Processed result:
ok=true,exitCode=0. - Evidence:
C:\Wooo\Agent99\evidence\agent99-PublicSmoke-20260709-224134.json. - Public routes: AWOOOI, StockPlatform, FIFA, Gitea, and Harbor all HTTP 200 / non-502.
- Telegram:
operator_command_result,severity=info,sent=true,relayOk=true.