seon
ac2afea4d0
chore(ai-env): Claude WIF rule/service-account ids and ai image 684e70b
...
Claude Console 에서 만든 Workload Identity Federation 리소스의 ID(규칙 gcp-selfheal-ai-vm,
서비스 계정 selfheal-ai-vm, Default 워크스페이스)를 ai.env 에 넣고, 페더레이션을 지원하는
ai 이미지 684e70b 로 올린다. ID 는 비밀이 아니다.
2026-10-15 20:42:19 +09:00
seon
7967f7a320
chore(ai-env): add the Claude Workload Identity Federation id settings (empty until the Console rule exists)
...
ai.env 에 ANTHROPIC_FEDERATION_RULE_ID 등 4개 설정 키를 추가한다. 값은 Console 위자드로
규칙을 만든 뒤 채운다. 비어 있는 동안 에이전트는 기존 키 파일 경로로 동작한다.
2026-10-15 11:48:36 +09:00
seon
d7ecd59b4c
chore: ai/harness images 53ff243 (per-run model, usage, Claude provider) and the Anthropic key file
...
ai-env·harness 이미지를 53ff243 로 올린다. apply.sh 가 Secret Manager 의
selfheal-anthropic-api-key 를 받아 /run/secrets/anthropic-api-key 로 두고 compose 가
ANTHROPIC_KEY_FILE 로 넘긴다. 값이 없으면 기존처럼 저하 모드로 기동한다.
2026-10-14 23:21:50 +09:00
seon
d390b6a5d4
chore(ai-env): ai images fa9c08c (hitl re-reads the full row before mirroring API approvals)
2026-10-09 10:19:33 +09:00
seon
602c53d5e6
chore: harness and ai images f8e0aa9 (alert dedupe, proposal state API, HITL API-approval sync, Jev recovered_now)
2026-10-09 08:41:15 +09:00
seon
fd08c32501
feat(ai-env,alerting): reference queries per alert in slo.md, rule expression as alert annotation
...
第 4 回 V-G1 で LLM が route フィルタのない 5 分窓の p95(0.017 秒)を根拠に
「遅延なし」と結論した。slo.md にアラートごとの基準クエリ(規則と同じ式、
legacy のインスタンス別遅延と要求率を含む)を書き、確かめ直すときは同じ式を
使わせる。各規則の annotations.condition に式をそのまま入れ、AI 側が
「アラート条件が解消したか」を計算できるようにする(Jev の recovering 再定義)。
2026-10-09 08:33:22 +09:00
seon
3f686c1aea
fix(alerting): ApiLatencyHigh on the 1-minute p95, ApiMemoryPressure for 1m, C-G2 at 225MB
...
第 3 回キャンペーンの実測を反映する。V-G1 では ILB が 1 分以内に api の接続を
遅いインスタンスから逃がすため 5 分窓の p95 が 0.5 秒を越えず、ApiLatencyHigh が
発火しなかった(1 分窓の p95 は 3 分半 2.3 秒)。式を 1 分窓にし 2 分継続に変える。
C-G2 は 200MB で working set が limit の 0.797〜0.803 を行き来して閾値 0.8 を
保てなかったため 225MB にし、ApiMemoryPressure の継続を 1 分にする。
2026-10-08 21:27:24 +09:00
seon
e64e24bdb1
feat(ai-env): switch the Jev review gate to enforce
...
shadow での 2 回のキャンペーンで review ゲートが LLM と食い違う判定を出さなかった
ことを確認したうえで、JEV_MODE を enforce にする。best_action が確信度 0.9 以上で
提案と異なる場合と target_valid が 0.5 未満の場合に、提案を escalate に格下げする。
2026-10-08 19:22:06 +09:00
seon
1e0e17b33c
fix(alerting): evaluate the replay-paused branch of DbReplicationLag, add ApiMemoryPressure; retarget grey-zone scenarios
...
DbReplicationLag の式は PromQL の or が左辺のサンプル(常に 0)を残すため
pg_is_wal_replay_paused の分岐が評価されず、第 1・2 回とも発火しなかった。2 つの
bool を加算して clamp する式に直す。api コンテナのメモリが limit の 80% を超えて
2 分続いたときの ApiMemoryPressure(第 2 層)を追加する。C-G2 の StressChaos は
size "80%"(ノード基準)で即 OOM になっていたため 200MB に、V-G1 の対象は
トラフィックを受けているインスタンス legacy:busy に変更する。slo.md に新ルールを追記。
2026-10-08 19:20:50 +09:00
seon
b2e10cf300
chore: bump harness and ai images to 13797e5 (1-minute p95 in the judge, Jev triage state v2, enforce mode)
...
ハーネスは復旧判定に 1 分窓の p95 を加えた版、ai-agent は Jev triage の state を
作り直し JEV_MODE=enforce を実装した版へ更新する。JEV_MODE は shadow のまま。
2026-10-08 17:53:08 +09:00
seon
bbb2817854
chore(ai-env): bump ai images to 91cdd9a (Jev shadow gates)
...
Jev shadow ゲートを含む ai-agent / ai-hitl のイメージへ更新する。
2026-10-08 15:18:08 +09:00
seon
d050c6d54b
feat(ai-env): wire the TypeSafe key and enable Jev shadow gates
...
AI VM の apply.sh が Secret Manager の selfheal-typesafe-api-key を取得し、
agent コンテナに JEV_KEY_FILE として渡す。ai.env で JEV_MODE=shadow、
JEV_MODEL=jev-1.13.0 を設定し、鍵が未登録でも agent は通常どおり動く
(ゲートは鍵未登録を記録するだけ)。
2026-10-08 15:10:25 +09:00
seon
73ac63f989
chore(ai-env): bump ai images to af1cb4f (hitl i18n)
...
Discord の文言を HITL_LANG で切り替えられる ai-agent / ai-hitl のイメージへ更新する。
2026-10-08 14:41:07 +09:00
seon
364654bb2c
feat(ai-env): write runbooks and prompt context in Japanese, set HITL_LANG=ja
...
ランブック 11 本と prompts/topology.md・slo.md を日本語で書き直し、
system.md に「根拠と判断理由は日本語で書く」指示を追加した。
Discord ボットの文言も HITL_LANG=ja で日本語になる。
識別子(action id、ラベル、メトリクス名、オブジェクト名)は英語のまま。
2026-10-08 14:34:10 +09:00
seon
027e896f30
chore(ai-env): gpt-6.1-sol for the comparison run (C-G1, C-I1, V-I1)
...
luna 캠페인에서 2층 진단이 발생한 3건을 sol로 재실행해 라벨·조치·비용·소요를 비교한다(설계서 11.1).
2026-10-08 14:00:30 +09:00
seon
d3c7f32a20
chore(ai-env): image 8b403c5
...
usage 누적 기록 수정이 든 이미지로 올린다.
2026-10-08 11:00:25 +09:00
seon
4886c97f9e
chore(ai-env): run the first live checks on gpt-6-luna
...
잔고 한도(약 $8) 안에서 WP-12 라이브 판정과 캠페인 1회차를 돌리기 위해 기본 모델을
gpt-6-luna(입력 $0.10/출력 $0.50 per 1M, 공식 가격 페이지 2026-10-08)로 둔다.
정확도 비교가 필요한 시나리오는 뒤에 gpt-6.1-sol로 재실행한다(설계서 11.1).
2026-10-08 10:33:41 +09:00
seon
11a60796a5
chore(ai-env): image 9bc3a3b
...
hitl_messages diagnosis 컬럼 멱등 ALTER가 든 이미지로 올린다.
2026-10-08 02:42:13 +09:00
seon
4f3188b491
fix: short host name for the instance label; AI VM images 683a2de
...
GCE의 hostname은 FQDN이라 Mimir의 instance 라벨이 legacy-2n1c.asia-northeast1-b.c....internal로
들어왔다(실측). hostname -s로 VM 이름만 쓴다. vm/ai-env/image.tag를 683a2de(hitl 진단 보존 수정)로.
2026-10-08 01:57:04 +09:00
seon
a500c3d40c
fix: Alloy block syntax, dpkg lock wait, hitl local bind, ai-reader nodes RBAC, harness image f30af2a
...
- Alloy 설정 3종: rule 블록을 한 줄 쉼표 나열에서 줄바꿈 속성으로 수정(실측: k8s DaemonSet
CrashLoopBackOff, db-replica alloy.service "expected TERMINATOR, got ,"). alloy fmt로 3종 파싱 확인.
- vm/postgres-common/alloy.sh: apt에 DPkg::Lock::Timeout=600(db-primary에서 unattended-upgrades 잠금으로 100 종료).
- vm/ai-env/compose.yaml: hitl 8081을 127.0.0.1에만 바인딩(agent는 compose 네트워크로 접근).
- workloads/rbac/ai-reader.yaml: nodes get/list/watch ClusterRole 추가(agent get_k8s(nodes) selfcheck 거부 해소).
- vm/harness/image.tag: f30af2a(POST /proposals/{token}/approve·reject 포함 러너).
2026-10-08 01:53:06 +09:00
seon
7ce2dc68fe
feat: AI VM stack (WP-12) and Alloy telemetry on k8s, legacy and DB VMs (WP-15)
...
WP-12(실험 설계서 6장) vm/ai-env: apply.sh(시크릿 4종을 Secret Manager에서 파일로, 미등록이면
성능 저하 모드로 기동), compose(agent 8080·hitl 8081·rag-db pgvector 0.8.7-pg16), ai.env(Discord
서버 Selfheal Lab 1557424985793101824, approvals 1557425140302872698, escalation 1557425282363691048,
OPENAI_MODEL gpt-6.1-sol 후보), 프롬프트 3종, 러너북 11종(조치별·토폴로지·3층 절차).
WP-15(실험 설계서 4.1·4.3): apps/alloy.yaml(Alloy Helm 1.13.0 DaemonSet, 클러스터링으로 KSM·Argo CD·
cadvisor 스크랩 분산, demo 등 파드 로그 → Loki), apps/kube-state-metrics.yaml(Helm 8.6.0).
legacy-api compose에 Alloy 사이드카(up{job="legacy-api"}, 컨테이너 로그). DB VM은
vm/postgres-common/alloy.sh로 apt 설치 + prometheus.exporter.postgres(pg_replication_lag_seconds)
+ custom query pg_is_wal_replay_paused + PostgreSQL 로그.
vm/harness/apply.sh: 준비 대기 루프의 curl에 || true(러너 재기동 순간 curl 56으로 중단되던 문제,
2026-10-08 harness-sync 실측).
2026-10-08 01:47:38 +09:00
seon
2fc6305e1b
chore: scaffold gitops repository layout
...
Terraform 설계서 2장의 디렉터리 구조대로 뼈대만 만든다. 각 디렉터리의 내용은
해당 WP(07·08~12·14·15)에서 채운다. VM 디렉터리 이름은 Terraform이 VM
메타데이터로 넘기는 role 값(postgres-primary/-replica 포함)과 일치시킨다.
저장소는 공개이며 시크릿은 두지 않는다(값은 Secret Manager).
2026-09-23 20:38:25 +09:00