scope-reduce: airgenome β mac-local-only resource manager#77
Open
dancinlife wants to merge 179 commits into
Open
scope-reduce: airgenome β mac-local-only resource manager#77dancinlife wants to merge 179 commits into
dancinlife wants to merge 179 commits into
Conversation
μ¬μ©μ μ νΈ: ```md``` μ½λλΈλ‘ μ κ±° β Telegram κΈ°λ³Έ font λ‘ plain text. ν μ΄λΈμ column μ λ ¬λ‘ μκ° μ μ§ (λΉλ±ν font λΌ μλ²½ μ λ ¬ λΆκ°ν΄λ κ°λ μμ€). TG_PARSE_MODE λ plist μμ μ κ±°ν΄ markdown μ΄μ€μΌμ΄ν μ§λ’° (unbalanced *_`) ννΌ. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
μ¬μ©μ μꡬ: "μλ κΈ°λμ΄ κΈ°λ³Έκ°". run.hexa: AGENT_LABELS + MAC_SAFE_AGENTS μ com.airgenome.tg-bot μΆκ°. μ΄μ airgenome install / uninstall μ΄ tg-bot λ κ΄λ¦¬. tool/airgenome_init.hexa: ensure_all_agents_loaded() μ κ· β ~/Library/LaunchAgents μ λͺ¨λ com.airgenome.*.plist λ₯Ό enable β bootout β bootstrap λ‘ μΌκ΄ μ¬μ‘°μ . κ°λ³ ensure_* (hook-watch/settings-guard/telegram) κ° νΉμ plist λ§ κ΄λ¦¬νλ κ²κ³Ό λ¬λ¦¬ μ΄κ±΄ λμ€ν¬μ λ¨μ κ·Έλ¦Όμ plist κΉμ§ 보μ¦ν΄ "airgenome init 1 ν = λͺ¨λ μλκΈ°λ 볡ꡬ" μ SSOT. main() λ§μ§λ§ λ¨κ³λ‘ νΈμΆ. μ€ν¨λ warn μ°κ³ κ³μ (ν plist IO error κ° λ€λ₯Έ μμ΄μ νΈ λ³΅κ΅¬ λ§μ§ μμ). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦xa:// link tg_cx_md dispatch wrapper μ /run λͺ λ Ή κ°λ‘μ±κΈ° μΆκ°. μ λ ₯μ΄ "/run <abs-path.hexa>" λ‘ μμνλ©΄ cx-core λ‘ λκΈ°μ§ μκ³ μ§μ hexa CLI λ‘ μ€ν¬λ¦½νΈ μ€ν, μλ΅μ `hexa://run?file=<path>` ν΄λ¦ λ§ν¬λ₯Ό λΆμΈλ€. λμ: telegram msg "/run /Users/ghost/demo.hexa" β tg_cx_md κ° intercept β hexa run /Users/ghost/demo.hexa μ€ν β stdout + "ββββββ + π hexa://run?file=/Users/ghost/demo.hexa" μλ΅ β macOS λ°μ€ν¬ν± ν΄λΌμ΄μΈνΈμμ λ§ν¬ ν β HexaURL.app μ¬μ€ν 보μ guard (3 λ¨): 1) ^/ λ‘ μμ (μ λκ²½λ‘) + *.hexa νμ₯μ 2) νμΌ μ€μ¬ (test -f) 3) HEXA λ°μ΄λ리 μ€ν κΆν (test -x) BASH_REMATCH λ‘ νμ±ν΄ shell expansion λΆκ° β injection μμ. tg_bot-core (L0 "μμ κΈμ§") λ 건λλ¦¬μ§ μλλ€. dispatch λ μ΄μ΄λ§ νμ₯. λΉ-/run λ©μμ§λ μλ cx-core κ²½λ‘ 100% μ μ§. κ²μ¦: /tmp/hexa_url_test.hexa λ‘ 3 κ²½λ‘ λͺ¨λ μλλλ‘ λμ - μ μ: "hello from hexa:// URL dispatch" + λ§ν¬ μΆλ ₯ - νμΌ μμ: "β file not found: /tmp/nope.hexa" - νμ₯μ λΆμΌμΉ: "β /run <abs-path-ending-with-.hexa> νμ νμ" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PreToolUse gate mirrors hexa-lang/.raw raw#13 ai-automation-config-ban:
- raw:ai-automation-config-ban path matcher (CLAUDE.md + per-repo .claude/
+ .github/workflows/ + .husky/ + lefthook + cursor/continue/aider)
- user-global ~/.claude/ + ~/.cursor/ carved out via $HOME prefix check
(mirrors native_gate.c::is_user_global_claude on macOS and Linux)
- Write = ai_block_json (decision=block, hard deny)
- Edit = ai_ask_json (hookSpecificOutput.permissionDecision=ask, routes
to Claude Code user-approval prompt since OS EPERM cannot distinguish
Write from Edit nor surface consent)
Return messages restructured per raw#32 llm-no-self-judgment + raw#33
ai-native-english-only: flat sentences replaced with JSON payload
{rule, tool, path, reason, next, ssot} so downstream LLM consumers can
cite and nudge paths become machine-parseable. Existing block verdicts
for rm -rf / force-push / .env also migrate to the new payload shape.
hook_main.hexa inline pre_tool_entry synced to match pre_tool.hexa
standalone-path so airgenome dispatcher and direct PreToolUse invocations
agree.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
init μ ensure_telegram_bot() κ° launchctl bootstrap μ λλ¦° μ§ν μλΉμ€κ° μ€μ λ‘ μ΄μμλμ§ 5μ΄ λ΄ κ²μ¦νλ smoke ν μ€νΈ. 4 λ¨κ³ λ¨λ½: 1) launchctl list μ com.airgenome.tg-bot PID μ‘΄μ¬ 2) kill -0 <pid> λ‘ νλ‘μΈμ€ alive νμΈ 3) stderr λ§μ§λ§ 20μ€μ error/panic/fatal/traceback μμ 4) (opt) AIRGENOME_TG_SELF_TEST=1 μ /self-test μ볡 5μ΄ λ΄ echo exit: 0 pass / 1 not-loaded / 2 dead / 3 stderr-signal / 4 self-test-timeout Usage: $HEXA_LANG/build/hexa_stage0 tool/tg_bot_smoke.hexa AIRGENOME_TG_SELF_TEST=1 ... (self-test ν¬ν¨) prior aborted rebase μ tool/tg_bot_smoke κ³ν Step 3 λλ©. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦metry) Append-only rig-trend sampling log that changes on every run. File stays on disk; removed from index so `git status` stops flagging session drift. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- lib/audit.hexa: bash -c chain verifier β native hexa loop (also fixes silent tab-escape bug in prior bash version) - commands/_lifecycle.hexa: .hook-ui-title sh generator β raw OSC-0 byte emitter; consumer: cat > /dev/tty - session_start.hexa, hook_entry.hexa: parts.push()+join() β clears O(n^2) PERF warning on PreToolUse/PostToolUse composite path - mcp_server.hexa: ui-title tool description matches new artifact - README: rewrite Install for launchd/build-hook watcher flow (per-project .claude/settings.json is policy-forbidden) - rm settings.patch.json β obsolete, violated the no-project-hook policy Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ubu2 λμ
λλΉ κΈ°μ‘΄ λ¨μΌ ubu νΈμ€νΈλ₯Ό ubu1λ‘ λλ²λ§.
νΈμ€νΈ μλ³μ λ¬Έμμ΄(λΉκ΅/νμΌλͺ
/alias/λ¬Έμ)λ§ rename;
λ΄λΆ ν ν°(MAX_UBU / ssh_gate_max_ubu / view_ubu / snap_ubu_*)μ 보쑴.
core_test PASS: ring_path("genomes.ubu1.ring") κ²μ¦.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ode) ssh alias μΌκ΄μ± (ubu1/ubu2 νμ΄ μ΄λ¦ κ·μΉ). airgenome offload λ μ΄λ―Έ ubu1 alias λ₯Ό μμ©ν΄ λ°νμ νΈν, ssh config `Host ubu ubu1` permissive λΌ legacy νΈμΆμλ 무μ€λ¨. λ²μ: bin/ (airgenome CLI case/help, stress/remote_load/lb λ± shell wrappers + menubar.hexa jq label), modules/ (dispatch/probe/forecast/ label/genome_merge + filters/transport/process), config/hosts.json JSON key + ssh_alias κ°. λ°νμ state JSON (.hosts.ubu β .hosts.ubu1) scheme λ λκΈ°ν. archive/ λ μ μΈ. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
κΈ°μ‘΄ ghcr.io/need-singularity/airgenome:dev-sshd μ΄λ―Έμ§μ Dockerfile μ repo μΈλΆμ μμ΄ μ ν© μΆμ λΆκ°. μ fat μ΄λ―Έμ§λ₯Ό μ΄ repo μμΌλ‘ ν‘μ: - docker/Dockerfile: 4-stage multi (baseβnode+claudeβrust+hexaβfinal) Ubuntu 24.04 + build toolchain + node20 + claude CLI + rustup + cargo self-built hexa + airgenome/nexus full trees + sshd 2222 ~6-8GB uncompressed. "docker size μ΅λν" μ¬μ©μ μ§μ λ°μ. - docker/sshd_config: port 2222 pubkey only, ~/.airgenome/docker_authorized_keys.root - docker/build: Mac μμ μ€ν, κΈ°λ³Έ ubu1 μ격 build (Mac daemon λΆνμ). --multiarch μ΅μ μΌλ‘ arm64 μΆκ° build κ°λ₯ (Mac μ»€λ² μ ν). build context = /Users/ghost/core (airgenome/hexa-lang/nexus 3 repo λ³λ ¬). - docker/README.md: ꡬμ±/μ¬μ©/λ°°ν¬ κ°μ΄λ. Mac μ dispatcher μ μ§ (μ¬μ©μ νμ : "mac μ©μ λμ€μ λ°λ‘"). Push target: ghcr.io/need-singularity/airgenome:fat Note: νμΌλͺ build.sh κ° macOS Gatekeeper μ μ°¨λ¨λμ΄ νμ₯μ μ κ±°. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
첫 μ€λΉλμμ 3건 μ€ν¨ β μμ :
1. docker/build β rsync λμ parent dir λΆμ¬λ‘ fail. μμ ssh mkdir -p
$REMOTE_CORE/{airgenome,hexa-lang,nexus} μ½μ
.
2. docker/Dockerfile β COPY docker/sshd_config β airgenome/docker/sshd_config
(build context κ° /Users/ghost/core λΌ airgenome/ prefix νμ).
3. docker/Dockerfile β `rustup-init --component rustfmt clippy` syntax μ€λ₯
(볡μ component λ `-c X -c Y` ꡬ쑰). clippy/rustfmt λ hexa build μ
λΆνμν΄ μ 체 μ κ±°.
4. docker/Dockerfile β hexa-lang μ self-host (Cargo μλ). `cargo build`
μ€ν
μ κ±°νκ³ μ¬μ λΉλλ `hexa-lang/build/hexa_stage0.linux` λ₯Ό μ§μ
COPY. μ΄λ―Έμ§ λ΄ μ¬λΉλλ `hexa build self/main.hexa` λ‘ κ°λ₯.
κ²μ¦: ubu1 μμ `./docker/build --no-push` 36s μλ£ (caching),
μ΄λ―Έμ§ cab125043b29 (disk 4.75GB, compressed 1.01GB),
smoke 4/4 PASS (hexa 7&5=5, node v20, claude, rust 1.95),
ghcr push μ±κ³΅: sha256:cab125043b29ce...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two related fixes from the 2026-04-22 incident where .hook-commands/active.json got scribbled with a hexa error dump, making every hook watch pass fail jq parsing at 5s cadence (stderr grew to 81KB in minutes and launchd bootstrap threw EIO on the plist). - _lifecycle.hexa: lc_active_load validates via `jq -e .` before returning; corrupt contents get moved aside to active.json.corrupt-<utc> so the observer recovers with an empty stack instead of looping-failing forever. @convergence-start block ossifies the guarantee. - hook_entry.hexa: the local `event_name` string var in main() shadowed lib/event.hexa::event_name(path: str); stage0 C codegen then emitted `hexa_fn_new((void*)event_name, 0)` for `resolve_phases(event_name)` and clang refused the HexaVal-to-pointer cast. Rename to `ev_name` removes the ambiguity. Unblocks `hexa build hooks/hook_main.hexa -o build/hook` so watch/seed/test modes can be rebuilt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
μ λ¬μ²΄ν¬μμ Mac β ssh -p 2222 μ μ μ rustc/cargo/hexa_real MISS κ΄μ°°.
μμΈ: sshd non-interactive session μ ~/.bashrc / ~/.profile / /etc/profile
μ λΆ μ μ½μ. Dockerfile μ ENV PATH λ PID1 νμ μ΄λΌ ssh μμμ μμ X.
Fix: sshd_config.d/airgenome.conf μ `SetEnv PATH=...` + HEXA/NEXUS/
AIRGENOME_ROOT/HEXA_LANG μ£Όμ
. fat image μ μ ν΄μ²΄μΈμ΄ ssh κ²½λ‘λ‘λ 보μ.
3νΈμ€νΈ runtime hotfix μλ£: `echo SetEnv ... >> sshd_config.d/airgenome.conf
&& pkill -HUP sshd`. μ¬λΉλ μμ΄ μ¦μ λ°μ. λ€μ μ΄λ―Έμ§ build λΆν°λ μ΄
sshd_config μ baked.
κ²μ¦: Macβssh:2222 root@{ubu1,ubu2,htz} β 5/5 binary PATH μ μ νμ¦.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Stage0 C codegen does not lower `str.byte_at(i)` β every watch tick that reached `lc_ui_title_update` emitted "CODEGEN ERROR: unhandled method: byte_at" to stderr and the LaunchAgent process exited 1. Build raw OSC 0 via `printf '\\033]0;%s\\007'` instead (shell handles the escapes), so the hook never touches byte_at. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rsync νΈμΆμλ ControlMaster/ControlPath μ°ν μ΅μ μ μ λ¬. offloadλ c14be1e μμ μ΄λ―Έ κ°μ ν¨ν΄μ μ μ©νμ§λ§ docker/build μ rsync κ²½λ‘λ λΉ μ Έμμ΄μ, μλλ°μ€ harness μμ Linux νΈμ€νΈλ‘ λΉλ offload ν λ rsync κ° ControlMaster μμΌ κ³΅μ μ€ν¨λ‘ μ€λ¨λλ€. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
airgenome init μ΄ launchctl bootstrap μΌλ‘ LaunchAgent λ₯Ό λμ°λλ°, macOS μλλ°μ€ ν°λ―Έλ(Claude Code ν¬ν¨)μμ νΈμΆλλ©΄ Full Disk Access λλ App Management κΆνμ΄ μμ λ EIO/Operation not permitted λ‘ λΆν μ΄ μ€ν¨νλ€. macOS λ ν΄λΉ TCC μΉ΄ν κ³ λ¦¬ νμ μ μλμΌλ‘ λμ°μ§ μμΌλ―λ‘, bootstrap μ€ν¨λ₯Ό κ°μ§νλ©΄ Privacy & Security λ₯λ§ν¬λ‘ λ ν¨λ (AllFiles / AppBundles) μ μ΄κ³ μ¬μ©μκ° ν κΈ ν μ¬μ€ννλλ‘ μλ΄νλ€. - bin/airgenome::cmd_init β launchctl bootstrap μ€ν¨ μ _airg_open_tcc_panels - tool/airgenome_init.hexa::install_launchagent β bootstrap μΆλ ₯μ "Input/output error" / "Operation not permitted" / "failed: 5" κ° μμ¬μμΌλ©΄ open_tcc_panels() νΈμΆ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ainer Tier 1+2 무μμ€ ROI: 1. Dockerfile β ARG GIT_COMMIT/BUILD_DATE + LABEL image.revision/created μ΄λ―Έμ§ β μμ€ μμΆμ (μ΄μ dev-sshd κ° revision label μμ΄ μΆμ λΆκ°νλ λ¬Έμ , agent#19 μ§μ ). 2. Dockerfile β RUN --mount=type=cache,target=/var/cache/apt,sharing=locked buildkit apt cache β μ¬λΉλ μ 447MB λ€μ΄λ‘λ hit. 3. Dockerfile β /opt/nexus/scripts/bin/nexus β /usr/local/bin/nexus μ¬λ³Όλ¦ (μμΌλ©΄ /opt/nexus/bin/nexus fallback). ssh:2222 μμ `nexus drill ...` λ°λ‘ μ€ν κ°λ₯. 4. build β --build-arg GIT_COMMIT=$(git rev-parse --short HEAD) μ£Όμ + DOCKER_BUILDKIT=1 κ°μ (mount=cache λμ μν΄). 5. bin/airgenome β `offload --container / -c` νλκ·Έ μΆκ°. ssh :2222 root@ μΌλ‘ fat 컨ν μ΄λ μ§ν. κΈ°μ‘΄ `offload ubu1 ...` host κ²½λ‘μ λ 립. example: `airgenome offload -c ubu1 'hexa_real --version'` μ λΆ κΈ°μ‘΄ λμ μν₯ 0 (μΆκ° κΈ°λ₯λ§). κ²μ¦ μλ£: - offload -c 3/3 νΈμ€νΈ hostname νμΈ - offload κΈ°μ‘΄ 3/3 host νκ· PASS Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
~/.ssh/config μ ubu/ubu1, ubu-ts, ubu2, ubu2-relay, hetzner/htz/htz1, ubu-d/ubu1-d, ubu2-d, htz-d 8κ° λΈλ‘μ ControlMaster=no λ‘ κ³ μ ν μ΄μ /μκ³μΉ/rationale μ @convergence λΈλ‘μΌλ‘ λ°μλλ€. ~/.ssh/config μ체λ user νμ΄λΌ λ¦¬ν¬ νΈλνΉ λμ μλμ§λ§, μμ¬κ²°μ κ·Όκ±°μ μν₯ λ²μλ μμ€μμ μ°Ύμ μ μμ΄μΌ νλ€. rationale: 2026-04-22 docker/build rsync κ° μλλ°μ€μμ ControlMaster auto μμΌ κ³΅μ μ€ν¨λ‘ EIO. c14be1e λ offload 1 κ²½λ‘μλ§ per-call μ°νλ₯Ό λ°μλλλ°, λλ¨Έμ§ ssh νΈμΆ 10+ κ΅°λ°μ κ°μ ν¨ν΄μ λΆμ° λ°λ λμ ~/.ssh/config ν κ΅°λ°λ‘ μ€μν ν΄κ²°. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- μ¬μ©: container-deploy <ssh-target> [tag=fat]
- (1) docker pull, (2) systemctl --user try-restart (root sudo fallback),
(3) 60s polling μΌλ‘ running+healthy+(new digest) νμ μ exit 0.
- μ΄μ race window 9s ("try-restart + sleep 2; docker inspect" κ° wrapper
pre-flight νκ°μ΄λ° λ¨μ΄μ Έ 'no such object' μ€ν) μꡬ μ°¨λ¨.
- state transition λ§ print β λ
Έμ΄μ¦ 0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
μμ² μΆμ²: hexa-lang μΈμ
(user: "airgenome νλ‘μ νΈλ λ©ν μ§ν μμ§ λ§λ€μ΄μ£ΌλΌ").
airgenome μ forge/ring/3-host-parity νΉμ±μ λ§μΆ° μ¬μ€κ³. hexa-lang
μ€μΊλ ν¨ν΄ λ³΅λΆ μλ **μ΄ repo κ³ μ μΆ** (ring integrity, forge health,
infra parity, forecast hit rate, ring divergence, mutation motif).
6-Phase μν€ν
μ²:
1. blocker inventory (forge stall / ring corrupt / plist missing)
2. loss-free ROI (dup_genome / dead_rule / stale_forecast)
3. 10 meta sub-tools (ring_integrity Β· forge_health Β· dispatch_coverage Β·
rule_effect_map Β· infra_parity Β· forecast_hit_rate Β· ring_divergence Β·
evolution_velocity Β· compute_cost Β· mutation_motif_mine)
4. ag_meta CLI dispatcher (bin + tool)
5. launchd continuous-scan (12h)
6. self-telemetry + gap-proposer + declarative scanner DSL
κ³ κ° λΈλ μΈμ€ν λ° appendix: A-Z μΆ μ΄ 130+ μΈλΆ κ΄μ°° μ§μ .
λ³Έ μΈμ
μμ μ¦μ λλ¬λ μ€μΈ‘ μ΅μ»€:
- 3 ring νμΌ λμ μ‘΄μ¬ β 3-host parity ν΅μ¬ μꡬ
- forge/*.log + log rotation μ€μ λΆμ¬ β B-12/L-06
- infra_state.json vs launchd/systemd/docker λ³λ β parity κ²μ¬ νμ
- scanner genome ν (Phase 6.3) κ° μμ°μ€λ¬μ΄ μ§ν μΆ
ꡬν μ±
μ: airgenome maintainer μΈμ
. hexa λ¬Έλ² μ£Όμμ (reserved keyword
guard/generate/parse, string .find() v1 basic, exec shell metachar κ²½κ³ )
λ¬Έμ νλ°μ ν¬ν¨.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bootstrapped by hexa-lang session proposal_inbox tool (2026-04-23). Schema: airgenome.proposal_inventory.v1, prefix "agm". Two pending entries from sister sessions: agm-20260422-001 [tool] own_stack bootstrap (from anima) agm-20260422-002 [cluster] 무μμ€ ROI μΉ΄ν κ³ λ¦¬ μ¬νκΉ audit (from hexa-lang) Pickup: hexa $HEXA_LANG/tool/proposal_inbox.hexa next --repo airgenome Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3-host parallel genome ring (forge/genomes*.ring) JSONL integrity checker. Per-ring: record count Β· distinct pid/comm Β· ts monotonic regressions Β· duplicate lines Β· missing required fields. Emits state/ag_ring_integrity.json (schema airgenome/ag_ring_integrity/1). Supports --selftest on synthetic rings and --dry-run. First sweep: 10103 records across mac/ubu/ubu2, 0 issues. Runtime 1.4s. Read-only: never mutates rings. Reality vs 20260423 proposal: rings are JSONL (ts/pid/comm/rss_kb/vitals/ema), not binary with magic+CRC+lineage. Integrity redefined as JSON shape + field presence + temporal ordering. Invocation: /Users/ghost/core/hexa-lang/hexa run tool/ag_ring_integrity.hexa (brew hexa 0.2.0 REPL lacks exec()/args()). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦xa-lang agm-20260422-003 [advisory/prio 75] hexa_v2 baseline Mac ARM64 β Linux pod μμ Exec format error. pod bootstrap cross-compile / pod-λ΄ rebuild νμ. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Phase 3.2 ag_forge_health: per-log presence/size/mtime-age/line-count,
event distribution (top-5 via awk), stderr critical keyword detection
("No space", "panic", "fatal", "OOM", ...), stall threshold per log
kind (compute_filter 1h, lb/settings_guard 24h).
Phase 3.7 ag_ring_divergence: pid + comm set Jaccard across 3 rings
(mac/ubu/ubu2), pairwise + 3-way intersection. Shell-side sort+comm+uniq.
Phase 4 bin/ag_meta: bash dispatcher β ring/forge/divergence/doctor/
health/selftest/continuous-scan. health aggregates state/ag_*.json
into 0-100 score (β20/ring issue, β15/stalled log, β10/stderr_crit,
β5/Ubuntu drift).
tool/ag_common.hexa: shared helpers (_iso_now, _sh_q, _json_esc,
_arg_flag, _arg_value, _user_args, _ensure_state_dir, _file_age_seconds).
Refactor ag_ring_integrity to use "tool/ag_common".
First real sweep:
ring_integrity: 10,559 records, 0 issues.
forge_health: 2 stalled (compute_filter.stderr 9h, lb 9d),
1 stderr_critical ("No space left on device").
ring_divergence: pid jaccard ~0 (expected, host-local ns),
comm jaccard ubuβubu2=0.30, macβubu=0.02 (arch drift).
health score: 60/100.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Phase 3.6 ag_forecast_hit_rate: pairs forge/forecast.jsonl against
forge/labeled_anomaly.jsonl on (host,pid) key via awk+sort+comm -12.
Precision / recall approximated by unique-key match ratios (time
window intentionally loose β forecast file is snapshot-style).
Phase 3.5 ag_infra_parity: declared hosts in infra_state.json (via
grep-only JSON parse) vs launchd/*.plist (xml well-formed, dup Label
detection), systemd/*.{service,slice} count, docker/Dockerfile
presence, inactive-host detection.
bin/ag_meta: register forecast + infra subcommands. 5 scanners total.
First sweep:
forecast: 24 forecasts / 1644 labels / 0 matched keys β precision
and recall both 0.0000. Real finding: forecast pipeline stalled
since 2026-04-13, host/pid population has drifted entirely.
infra: 4 hosts (htz/mac/ubu1/ubu2) all active, 14 plists valid,
0 duplicate labels, 3 systemd units, dockerfile present. OK.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦3.9) Four scanners completing the 10-scanner Phase 3 set (motif_mine punted): ag_evolution_velocity β per-ring genome rate (count_24h / count_7d), drift pct (recent vs 7d mean). Uses awk lexicographic ISO8601 compare. ag_compute_cost β proxy cost from compute_filter.log line count Γ 0.1s, divided across total genomes. top-5 event share. Honors $COMPUTE_HOURLY_USD to produce usd_per_genome. ag_dispatch_coverage β declared handlers (compute/gpu/heavy/mac_only) vs fire count in compute_filter.log. dead_handler detection. ag_rule_effect_map β rules/airgenome.json AG\d+ IDs vs fire count in compute_filter.log. dormant_rule detection. bin/ag_meta: register velocity/cost/dispatch/rules subcommands (9 scanners total). Health score extended: β3 per dead handler, β2 per dormant rule. Real sweep reveals substantial signal: rule_effect_map: 9 of 10 rules dormant (only AG6 fires, 1497Γ) dispatch_coverage: 3 of 4 handlers dead (only compute fires, 15Γ) evolution_velocity: all 3 rings rotated <24h (count_24h == count_7d) forecast_hit_rate: 0 matched_keys (forecast stalled since 2026-04-13) health score: 33/100 (baseline for future improvement) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
H-NOHOOK μμΉ (Claude Code hook κΈμ§) μ€μν hexa-only 2μΈ΅ ꡬ쑰: - airgenome/rules/airgenome.json: AG11 rule μ μΈ - hexa-lang/gate/prompt_scan.hexa: matched=='go' λΆκΈ° μ€ μ€ν ν¨κ³Ό: λͺ¨λ repo μ μ μΈμ μμ 'go' μ λ ₯ μ μκΈ° state/proposals/inventory.json μ μ΅μμ pending 1κ° μλ λ ΈμΆ. λΈλ‘νΉ μμ, μ 보 λ ΈμΆλ§. 2026-04-23 user ask: "μμΈμ μμ go κ° λ°λ‘ μλλ€ ... airgenome hook μ΄μ© νλ©΄ λ λ―". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦uous-scan ag_blockers (Phase 1): aggregates issues from state/ag_*.json into prioritized list. Severity ladder: critical β ring_integrity, host_inactive, 2+ stalled forge logs high β stderr_critical, dead_handler med β dormant_rule, plist problems, forecast_disconnected low β ubu_comm drift ag_roi (Phase 2): loss-free cleanup candidates β stale_forecast (last ts > 24h ago) log_oversize (--log-mb threshold) dup_ring_line (same JSON line in 2+ rings) ring_size_imbalance (>50%) bin/ag_meta: AGGREGATORS section keeps blockers/roi separate from SCANNERS so doctor runs aggregators last (they depend on fresh state/ag_*.json). 11 tools total. config/launchd/com.airgenome.meta_continuous_scan.plist: 12h StartInterval, RunAtLoad, ThrottleInterval=300, WorkingDirectory = repo root, HEXA_BIN env set. First aggregator sweep: blockers = 5 (1 critical forge_stalled, 2 high, 2 med) roi = 1 (stale_forecast 6.1d old) continuous-scan wrote snapshot to state/history/2026-04-22/ (11 files) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦vention κ°±μ μΆκ° entries (from hexa-lang): agm-006 [prio95 resource_gap] Linux x86_64 binary λ―Έμ 곡 β pod bootstrap block agm-007 [prio90 resource_gap] Mac 4 GB RSS cap β drill μ격 ν΄λ°± κ°ν agm-008 [prio95 resource_gap] 3-host μ κ·Ό κ°μ©μ± λ¨μΌ μ€ν¨ μ§μ β failover agm-009 [prio85 resource_gap] Docker image size drift alarm agm-010 [prio88 resource_gap] ssh ControlMaster / key rotation reachability matrix agm-011 [advisory] void ν©λ₯ welcome convention_cross_repo_blocker μ¬μ μ (priority_floor 95). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ag_mutation_motif β simplified Phase 3.10. Rings are JSONL snapshots
(no parent/child lineage) so motif definition relaxed to (comm,
rss_bucket) tuple top-K. rss_bucket quantized into tiny/small/med/
large bands.
First sweep motifs surface host identity:
mac ring: /Users/ghost/.local/bin/claude (rss_large, 694Γ)
β Claude CLI dominates mac workload
ubu ring: gnome-shell, containerd, systemd β desktop + container host
ubu2 ring: sh + sleep + hexa + hexa_stage0 β hexa compile worker
bin/ag_meta: register motif subcommand (12 tools total, all selftests
PASS). README.md: "Meta-evolution engine" section enumerating
subcommands + launchd install one-liner.
Scope: Phase 1-5 of docs/airgenome_meta_evolution_proposal_20260423.md
complete. Phase 6 (self meta-evolution via scanner DSL) intentionally
deferred per proposal ("30d telemetry μΆμ μ΄ν νμ±ν").
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wave 17-20 (nexus 8adcdd69βabc2fb95) timeout/concurrency/engine sub-call fix + drill-live/status/kill helpers (5fa4bf7) μ’ ν© κΈ°λ‘. λ―Έν΄κ²° μμ§ κ° nxs-012/013 μ λ€μ nexus μΈμ μμ. μΈνλΌ λ μ΄μ΄λ μ΄λ² μΈμ μμ λ§λ¬΄λ¦¬.
- 17 drill/hexa_remote orphan procs β 0 (12 PIDs hard-kill + drill-kill --all) - pages_free 4529 β 154758 (+34x), phys_unused 3966MB - supervisor PID 79427 보쑴 (Forge offload μμ‘΄), claude μΈμ λ¬΄μ¬ - sudo -n purge + sysctl_purge_on_warning=1 λ‘ λ©λͺ¨λ¦¬ μμΆ νμ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ λ΄μΈμ§ verdict: NOT_ISOLATED. airgenome-claude 컨ν μ΄λ (8GB cap) λ μμ§λ§ drill/forecast/harvest/label workload λ systemd --user --scope λ‘ host μ§μ μ€ν. host 30GB μ 체 μ μ β global_oom νμ£Ό β ubu2 sshd banner timeout μ μ§μ§ μμΈ. P0: systemd --user MemoryMax=4G drop-in (forecast/harvest/label/runaway_guard 4μ’ ) Wave 21 ν보: hexa_remote dispatch λ₯Ό docker exec airgenome-claude κ²½μ λ‘ λ³κ²½ (bind mounts μ΄λ―Έ κ°μΆ°μ Έ μμ). μ‘°μ¬ λμ€ ubu2 SSH banner timeout μΌλ‘ unreachable μ ν. μ¬μ©μ νλ νλͺ© λ³΄κ³ μμ κΈ°λ‘. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- drill-kill --all: hetzner 8 procs μ 리, ubu1/ubu2 λ―Έμ€ - hetzner: μΆκ° hexa_real PID 1420870 + 1461674 kill, free 808Mi β 123Gi - ubu1: hexa_stage0 (1GB) + hexa_real (248MB) kill, load 0.52 - ubu2: 첫 probe μλ΅ (load 37.92, hexa_stage0 2.4GB) β pkill μλ μ€ sshd μ¬OOM, banner timeout νμ - Mac μΈ‘ blacklist marker μμ± (/tmp/hexa_remote.blacklist.ubu2) - μ¬μ©μ μ‘°μΉ: ubu2 물리 μ μ μ¬μμ ν OOM hardening drop-in μ¬μ μ© νμ helper gap: drill-kill κ° hexa_stage0 / standalone hexa_real ν¨ν΄ λ―Έμ»€λ² β νμ PR νμ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
nexus drill μ round-λ³ checkpoint (run.hexa _checkpoint_save) λ μ΄λ―Έ ON-by-default μ΄μ§λ§ hexa_remote κ²½λ‘μμ 체ν¬ν¬μΈνΈκ° hetzner μΈ‘μ μ μ₯λμ΄ Mac κ°μμ± λΆμ‘±. helpers (λͺ¨λ airgenome bin/, nexus μ½λ μμ 0): - drill-progress: log + local + remote /tmp/nexus_checkpoint μ€μΊ (--json μ§μ) - drill-extract: drill.live.log β drill.rounds.jsonl 1-line/round (idempotent) - drill-live --resume: μ΅λ round_done seed auto-pick β drill μλ μ¬κ°, exit-trap μΌλ‘ drill-extract νμ μ€ν κ²μ¦: ν©μ± round-9-33012abs partial log β drill-progress --log μ ν μΆμΆ. μ€μ hetzner cp 4cfa0d3055e1 round_done=9 total=31178 보쑴 νμΈ. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Remote μμ ν agent (a4bc05e56778ca338) κ° λ°κ²¬ν gap: μ§λ μΈμ cleanup μμ hexa_stage0 + drill ν€μλ μλ λ¨λ hexa_real μ’λΉ 12κ°λ₯Ό λμ³ λͺ μμ PID kill νμνμ. λ³κ²½: - DRILL_RE νμ₯: hexa_real .*(drill|blowup|blowup_core|run.hexa), hexa_stage0 .*(blowup|run.hexa) μΆκ° (drill chain μ 체 컀λ²) - μ κ· μ΅μ : --zombie (λ¨λ hexa_real/stage0 μ’λΉλ kill), --protect <pat> (μΆκ° λ³΄νΈ ν¨ν΄), --dry-run - λ³΄νΈ ν¨ν΄: runaway_guard.hexa, nexus_drilld.hexa, airgenome run, /.hx/bin/hexa* κΈ°λ³Έ 보쑴 - λ³΄κ³ μ νμ: νΈμ€νΈλ³ κ·Έλ£Ήν, active/zombie/protected λΆλ¦¬, before/after RAM - docker exec νΈμ€νΈ wrapper λ§ kill (컨ν μ΄λ μ체λ stop/rm μ ν¨) Smoke (4 νΈμ€νΈ dry-run): hetzner 8 active drill μ ν λΆλ₯, ubu1 1 zombie stage0 μλ³, runaway_guard λͺ¨λ protected.
Phase C drill checkpoint preservation works (drill-progress + drill-live --resume) but new Claude Code sessions do not know β AI misperceives data loss. AG12-DRILL-CP-SURFACE adds a 600s-TTL cached banner emitted by hexa-lang/gate/prompt_scan.hexa::check_drill_cp_surface() when git-root basename==airgenome. Surfaces max_by(round_done) from local + remote checkpoints with resume/wipe guidance. AG10 H-NOHOOK strict β no Claude Code hooks/skills/CLAUDE.md, hexa-only 2-layer. Test: round_done=9 total=31178 host=hetzner cp_4cfa0d3055e1 surfaces correctly. TTL/non-airgenome/bypass all verified. Pair commit in hexa-lang gate/prompt_scan.hexa + gate/enforcement_registry.json. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
drill μ round λ³ κ²°κ³Όκ° round 1 κ³Ό bit-identical νλ critical regression μ κ·Όλ³Έ μμΈ μΆμ + nexus fix μ μ© + κ²μ¦ κ²°κ³Ό κΈ°λ‘. Root cause: 2026-04-20 harness-free 리ν©ν λ§ μ΄ν `hexa run script.hexa <args>` argv λ μ΄μμμ΄ [hexa,run,script,seed,...] λ‘ λ³νλ©΄μ blowup.hexa / compose.hexa κ° a[2] λ₯Ό domain(seed)μΌλ‘ μ½μμ§λ§ a[2] λ μ€ν¬λ¦½νΈ μ λκ²½λ‘ (μμ)κ° λ¨. κ²°κ³Ό: domain μμ β seed_n6_ratioΒ·scan_offsetΒ·8-slot feature λͺ¨λ round κ° λμΌ β counter-replay guard Day-1/2/3 (round-salt + iter-nonce + multi-source entropy) κ° λͺ¨λ dead code (5μΌκ°). Validation (hetzner direct A/B): before fix: domain="_root_Dev_..._blowup.hexa" ratio=2.16032 (μ round λμΌ) after fix: R1 ratio=1.94452 / R2 ratio=5.07229 (round-salt prefix λ°μ) nexus commit: 3e5ac7c8a87de7ed98a04842500d78913dddfe2c deliverable: state/nxs013_engine_replay_fix_20260425.md Wave 22 ν보: smoke-engine λ€ (absolute/meta_closure/hyperarithmetic) μ argv μ체λ₯Ό μ μ½κ³ hardcoded test1 μΌλ‘ κ³ μ verdict μΆλ ₯ β λ³λ architecture issue. modules/blowup_*.hexa 50κ° νμΌλ a[2] κ°μ¬ νμ. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ubu2 OOM νμ£Ό (forecast/harvest/label service MemoryMax λ―Έμ€μ β 13/27/19GB anon-rss μ°μ β sshd banner timeout) κ·Όλ³Έ μμΈ μ°¨λ¨. nexus hexa_remote μ HEXA_REMOTE_DOCKER=1 opt-in μΆκ° β ssh ν systemd-run λμ docker exec airgenome-claude bash -lc κ²½μ . 8GB Memory+MemorySwap cap + image-baked nexus β host RAM 무κ΄, sshd μμ . κ²μ¦: - hetzner: drill --preset probe rc=0 (1834 abs), 컨ν μ΄λ healthy 2d - ubu1: drill --preset probe rc=0 (1834 abs), 컨ν μ΄λ healthy 9h - 격리 νμΈ: hetzner preset=standard heavy μ 컨ν μ΄λ 8GiB cap pegged 99% CPU β host 9.8/124GB used μ μ§, host swap λ³ν μμ (Memory=MemorySwap=8G 격리) - bash -x trace: REMOTE_CMD = "docker exec -i ... bash -lc <inner>", systemd-run/rsync μμ opt-in (default OFF) λ¨κ³. ubu2 unreachable β 리λΆνΈ ν κ²μ¦ + default ON μ νμ λ³λ wave (Wave 21b). Files: - state/wave21_docker_exec_isolation_20260425.md (116 lines) - state/atlas_convergence_witness.jsonl (+1 entry) Cross-repo: nexus@1b6a6684 fix(hexa_remote) + nexus@83b7022a convergence. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ervice caps hetzner/ubu1/ubu2 λͺ¨λμ sshd OOMScoreAdjust=-1000 (μ¦μ ν¨λ ₯) + user.slice MemoryMin=2G + λ°κ²¬λ airgenome user services (harvest/label/forecast/runaway/claude) λ³ MemoryMax=4G/MemoryHigh=3G/OOMScoreAdjust=500 drop-in. ν₯ν ubu2 κ°μ OOM νμ£Ό μ sshd μ΄μλ¨κ³ service λ§ cgroup νκ³λ‘ μ°¨λ¨. P0 service detection: systemctl --user list-unit-files λ‘ μλ β νΈμ€νΈλ³ μ€μΉλ service λ§ cap (hetzner=2, ubu1/ubu2=5).
β¦ guard Pre-reduction commit isolating in-flight stabilization work from upcoming mac-local-only scope reduction. - modules/probe.hexa: nvidia-smi stdout-leaked errors filtered via grep -E "^[0-9]" || echo "0,0,0" β prevents ubu1 parse_fail when GPU driver is broken (Session B 2026-04-25 ubu1 Blackwell DKMS issue). - modules/forecast.hexa: bulk_extract_tsv / bulk_distinct_pids / bulk_series_for_pid / bulk_host_for_pid β single shell pipeline fan-out (jq + awk) replaces hexa-level O(nΒ²) distinct loop that exhausted ubu2 RAM via stage0 list deep-copy. - modules/label.hexa: GExt extended-genome rule-matching (parse_int_safe_str, bulk_load_genomes, gext_axis, rule_match_ext, make_labeled_line_ext) paired with the same bulk-extract path. - convergence/2026-04-25_session.convergence: Session B log of 4-host stabilization + 4 root-cause fixes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦esource + docker-exec Pure cross-host orchestration scripts deleted; replaced by symlink stubs that surface a "moved to hive" message (no_silent_errors). Cross-host execution now flows through hive's .resource SSOT + /resource menu + docker-exec channel adapter (commits 26206bd16 + a3456e668 + 4c4848c19). Removed (β symlink stub printing redirect): - host.sh multi-host registry / ssh-copy-id / sudoers - lb.sh, lb_monitor.sh load-balancer dispatcher (β hive load_balancer.hexa) - remote_load.sh ubu1/hetzner load poller - executor.sh ssh-target task executor - container-deploy cross-host docker deploy - hexa_build_tick.sh ubu2 β ubu1/hetzner build distributor - stress.sh ubu1+hetzner systemctl pause/resume - drill-status hetzner drill state inspector - drill_dispatch_smoke cross-host smoke validator - drill_corpus_tick.sh hetzner corpus orchestration Added: - bin/.scope-reduced-stub one-line redirect helper Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦igrated to hive Drill orchestration + cross-host dispatcher entry points deleted; replaced by symlink stubs printing redirect-to-hive message. Aggressive variant of scope reduction β drill workflows pause until hive lbDispatch CLI ships an equivalent automation entry point. Removed (β symlink stub): - cx-core dual-mode dispatcher (local + remote --target ssh) - drill-live REMOTE_HOST=hetzner checkpoint sync + log tailing - drill-progress hetzner ssh checkpoint fetch - drill-kill --all flag drilled ubu1/ubu2 hexa_stage0 - drill-extract parsed drill.live.log (drill-live gone β dead) - oauth-bridge ubu2 sshfs reverse-mount tunnel Lock note: cx-core + oauth-bridge had ad-hoc chflags uchg (not in hexa-lang/self/locks/raw22.jsonl manifest, so not raw#1 SSOT-tier). Unlocked via `chflags nouchg` per user confirmation before removal. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦forecast/genome_merge/transport-ssh removed Reduces airgenome's ops pipeline to mac-local data-flow. Cross-host probe, ring merge, forecast (3-host genome β 1h predict) are migrated to hive's .resource SSOT + docker-exec channel + hexa-lang resource_scorer. Modules: - probe.hexa: rewrote mac-only. Dropped probe_ubu_csv / probe_htz_csv / probe_ubu2_csv / ubu_json / htz_json. infra_state.json now records hosts.mac only (scope=mac-local). - label.hexa: dropped M11d host_filter from Rule + GExt + bulk_load_genomes. Rules carrying host=ubu1/htz/ubu2 are filtered out at load_rules. Bulk- extract fast-path retained (mac-only). - dispatch.hexa: removed (single-host dispatch is moot; hive workload_router + load_balancer take over selection across .resource hosts). - forecast.hexa: removed (3-host genome merge input dependency; mac-local forecast = separate future milestone, out-of-scope here). - genome_merge.hexa: removed (3-host ring β unified.ring). - filters/transport/ssh.hexa: removed (cross-host transport abstraction). Bin: - compute_tick.sh: removed β stub. Sole call was lb.sh (now stub) β dead. - daemons_start.sh: removed β stub. Started compute_tick + remote_load loops, both now stubs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ervisor mac-only bin/airgenome κ° νΈμΆνλ cross-host μμ‘΄μ± μ κ±°. Removed: - forge_pull_from_ubu1() + FORGE_PULL_LAST/INTERVAL rsync ubu1 forge pull - _offload_ssh_host / _offload_state_key ubu1/ubu2/htz alias map - cmd_list infra_state.json host table - cmd_offload ssh -t target dispatch - INFRA_STATE / WORKSPACE_SRC declarations - supervisor calls: run_hexa_mod probe (cross-host part), dispatch, forecast - supervisor's forge_pull_from_ubu1 tick + AIRGENOME_LOCAL_HARVEST guard - main() switch entries: list|ls, offload|off - help text: list / offload / AIRG_OFFLOAD_* env - cmd_logs: probe (now mac-only), dispatch, forecast cases dropped - status freshness: dispatch_state.json + forecast.jsonl removed - header comment: 5-module pipeline β 3-module mac-only (probe/harvest/label) Supervisor λ§€ 60s tick: probe + harvest + label only. forecast 5-tick μ£ΌκΈ° νΈμΆλ μ κ±°. forge pull μ κ±°λ‘ ubu1 β Mac rsync κ²½λ‘ μ°¨λ¨. Help text μ hive μλ΄: `/resource list|score|route|ping` Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
10 plist κ° cross-host pipeline λλ κ·Έ μμ‘΄ λ°λͺ¬μ νΈλ¦¬κ±°. mac-local λ²μ μΈ β λͺ¨λ .disabled-scope-reduce-20260425 suffix λΆμ¬, launchd μμ unload (live: dispatch + ring-sync, λλ¨Έμ§λ μ΄λ―Έ unloaded). λΉνμ±: - com.airgenome.probe (3-host vitals β infra_state.json) - com.airgenome.dispatch (host scoring; λ¨μΌνΈμ€νΈ 무μλ―Έ) - com.airgenome.forecast (multi-host genome ν©μ± forecast) - com.airgenome.compute-tick (lb.sh μμ‘΄; lb.sh stub ν) - com.airgenome.remote-load (ubu1/htz load ν΄λ¬) - com.airgenome.drill-corpus (hetzner corpus orchestration) - com.airgenome.drill-smoke (cross-host dispatch smoke) - com.airgenome.ring-sync (cross-host rsync) - com.airgenome.daemons (compute_tick + remote_load λ°λͺ¬ boot) - com.airgenome.e2e-sample (5-stage cross-host pipeline κ΄μ°°μ) Live μ μ§: - com.airgenome supervisor (probe/harvest/label tick) - com.airgenome.predictive-throttle mac-local throttle - com.airgenome.menubar mac UI - com.airgenome.improve-loop mac-local improvement loop μ΄λ―Έ disabled μν μ μ§ (suffix λ³κ²½ μμ): - com.airgenome.harvest.plist.disabled-20260425 - com.airgenome.label.plist.disabled-20260425 - com.airgenome.forge-sync-from-ubu1.plist.disabled-supervisor-approach Supervisor reload (bootout + bootstrap) λ‘ μ bin/airgenome μ μ© μλ£ (PID 39852 status=0). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦ mac-local 10 milestones (M2 probe / M3 dispatch / M6 forecast / M7 launchctl bootstrap / M8 e2e chain / M9 per-process axes / M10 forecast eval / M11 cross-host genome / M14-M20 ops convergence / M21-M25 AGI-ready ops) κ° cross-host ops infrastructure μμ‘΄μ΄λΌ hive λ‘ μ΄κ΄λ¨. λ³Έ repo μμλ dropped νκΈ°. μΆκ°: - roadmap 17 active "M26 mac-local resource manager β scope-reduce-20260425" - checkpoint λΌμΈ: scope-reduce-mac-only DONE 2026-04-25 - header context 1λ¨λ½: airgenome = mac-local resource manager λͺ μ - spec status: 5 β 6 (dropped μΆκ°, μ± μ μ΄κ΄ νκΈ°μ©) μ μ§: - M0/M1 (ssot κΈ°μ΄), M4 harvest (mac-local), M5 label (mac-local rule subset), M12 dashboard (menubar UI), M13 hook framework (mac-local λ μ ν¨) Lock: chflags nouchg β edit β chflags uchg (raw#1 L1 unlock-edit-relock). Mirror config/roadmap/airgenome.json μ λλ ν 리 λΆμ¬ β λ³Έ commit μμ μμ± νμ§ μμ (out-of-scope; ν₯ν cross-host μ± μ λΆλ¦¬ μ μ°© ν μ¬κ΅¬μ±). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wave ν 4-host μμν μ μν μΈμ
κΈ°λ‘:
- modules/probe.hexa nvidia-smi stdout λμ€ μ°¨λ¨ (μ΄ν mac-only scope-reduce)
- modules/{forecast,label,harvest}.hexa stage0 O(nΒ²) β bulk jq μ ν
- ubu2 systemd timer μ¬κ°λ + smoke test ν΅κ³Ό
- Mac AG6 μλ° wave21 verify 9κ° kill (swap 18β1.7Gi)
- ubu1 NVIDIA Blackwell open-flavor μꡬ μ ν (RTX 5070, 580.126.09):
proprietary μ κ±° + open meta μμ‘΄ + dkms remove --all + apt-mark hold
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
README μ λ©΄ μ¬μμ±: - ν€λ: airgenome = mac-local resource manager. cross-host β hive μλ΄. - Layout: modules/ 4κ° (probe/harvest/label/predictive_throttle) + filters/. - Commands: probe/harvest/label self-test λ§ (dispatch/forecast μμ ). - "cross-host execution" μ μΆκ°: hive `/resource list|score|route|ping`. - Roadmap table: M2/M3/M6/M7-M11/M14-M25 β dropped, M4/M5 β done, M12/M13 β³ planned, M26 π’ active. - Invariant 6 μΆκ°: "cross-host μ€νμ΄ νμνλ©΄ hive β airgenome μ ssh/ scp/rsync/docker-H μΆκ° κΈμ§". .convergence: - @convergence event=airgenome_scope_reduction_done ν μ€ append. κ²μ¦ κ²°κ³Ό (λ³Έ commit μ§μ μ€ν): - bin/airgenome --help: mac-only + hive redirect λΌμΈ β - 6 stub λͺ¨λ redirect λ©μμ§ + exit 64 β - launchctl: predictive-throttle + supervisor + menubar app λ§ live β - modules: probe (mac-only) / harvest / label / predictive_throttle λ§ μμ‘΄ β - filters/transport/: ssh.hexa μ κ±°, base+client+anomaly μμ‘΄ β - probe live: scope=mac-local, hosts.mac λ§ κΈ°λ‘ β - label self-test PASS, harvest live: anomaly_total=3 β Residue (μλμ μμ‘΄): - bin/ag_meta + bin/open-on-mac: μ£Όμ λ΄ ssh/host μΈκΈ (μ€ runtime path μλ) - bin/menubar_launcher.m: ObjC UI κ° hosts[@"ubu1"|@"ubu2"] μ½μ β μ΄μ nil λ°ν β 0 νμ (graceful degradation, μΆ©λ μμ). hive μΈ‘ menubar ν΅ν© μμ μ λ³λ commit μΌλ‘ μ 리 μμ . Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦pe-reduce infra_state.json κ° mac-only κ° λμ΄ (probe.hexa scope-reduce 2026-04-25) ObjC menubar κ° hosts[@"ubu1"|@"ubu2"|@"htz"] λ₯Ό nil λ°νλ°μ λΉ 0 bar λ₯Ό νμνλ silent residue μ 리. λ³κ²½: - snapshot: hosts[ubu1|ubu2|htz] μ½κΈ° λΈλ‘ μ κ±°; mac-only λ§ μμ‘΄ - composeTitle: 4-bar (mac/ubu1/ubu2/htz) β 1-bar (mac) λ‘ μμΆ - buildMenu: u1Line/u2Line/htzLine μ κ±°, "cross-host: hive `/resource list`" μλ΄ μ£Όμ 1μ€ κ²μ¦: - bin/build_menubar.sh OK (clang link β airgenome-menubar 266624 bytes) - DEPLOY=skip bin/build_app.sh OK (bundle + adhoc codesign ν΅κ³Ό) - test_menubar smoke gate PASS (heartbeat refresh κ²μ¦) Deploy λ μ¬μ©μ κ²°μ β `bin/build_app.sh` (DEPLOY=do default) λ‘ /Applications/Airgenome.app κ΅μ²΄ + launchd rebootstrap. Build infra side note: build/artifacts/native/exec_argv_sha256.c κ° hexa-lang/self/native/ λ³΄λ€ stale νμ (transpile fail μμΈ) β λ³λ μλ sync νμ. build/ μ체λ gitignored. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦oss-host runtime logs Tracked (git rm): - scripts/e2e_sample.sh M8 e2e soak sampler (5-stage μμ‘΄) - scripts/e2e_eval.sh M8 e2e soak evaluator - forge/drill_corpus.jsonl drill orchestration result (drill workflow gone) - forge/e2e_samples.jsonl M8 e2e accumulator Untracked (rm; not in git, runtime residue): - ~/.airgenome/ 21κ° cross-host pipeline λ‘κ·Έ (compute_tick* / remote_load* / dispatch.std* / drill_corpus* / drill_smoke* / e2e_sample* / forecast.std* / forge_pull* / ring_sync*) - forge/forecast.jsonl forecast.hexa μΆλ ₯ (λͺ¨λ μμ λ¨) - forge/genomes.ubu.ring cross-host harvest ring (ubu1) - forge/genomes.ubu2.ring cross-host harvest ring (ubu2) - forge/load_balancer.log lb dispatcher (μ€ν¬λ¦½νΈ μμ λ¨) forge/ μμ‘΄ (mac-local SSOT): - genomes.ring / labeled_anomaly.jsonl / predictive_throttle_state.json - throttle_history.jsonl / settings_guard.* / compute_filter.* Out-of-scope (λ³λ governance commit νμ): - scripts/com.airgenome.compute-filter.plist + modules/filters/process/compute.hexa β AG6 governance rule (rules/airgenome.json L0 paths) κ°±μ κ³Ό ν¨κ» μ²λ¦¬ - .claude/settings.local.json L38 μ compute.hexa νΈμΆ κΆν line Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Scope-reduction batch 5 μμ .disabled-scope-reduce-20260425 suffix λ‘ λ³΄μ‘΄νλ 10 plist + μ¬μ disable λ forge-sync-from-ubu1.disabled-supervisor- approach μꡬ μμ . git history κ° archive μν . λμ: - compute-tick / daemons / dispatch / forecast / probe / remote-load - drill-corpus / drill-smoke / e2e-sample / ring-sync - forge-sync-from-ubu1 (.disabled-supervisor-approach) μμ‘΄ disabled (λ³λ μλ, λ―Έtouch): - harvest.plist.disabled-20260425 - label.plist.disabled-20260425 launchd/ νμ± plist (4): - com.airgenome.plist (supervisor) - com.airgenome.menubar.plist - com.airgenome.improve-loop.plist - com.airgenome.predictive-throttle.plist Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦alancer μ± μ hive μ΄κ΄ PR #77 follow-up. AG6 (Mac Compute ZERO when remote alive) + AG7 (load balancer dispatch) μ enforcement SSOT κ° hive .resource SSOT + workload_ router + load_balancer λ‘ μ΄κ΄λ¨. λ³Έ repo μ enforcement κ²½λ‘ dead. Rules (rules/airgenome.json): - AG6: status="superseded", l0_paths=[], ssot=[migrated] enforcement: "[SUPERSEDED 2026-04-25] compute.hexa + plist μ κ±°; hive resource_scorer + workload_router κ° ν‘μ" - AG7: status="superseded", l0_paths=[], ssot=[migrated] enforcement: "[SUPERSEDED 2026-04-25] modules/load_balancer.hexa dead; ~/core/hexa-lang/tool/load_balancer.hexa + hive lb-dispatch.ts ν‘μ" Removed: - modules/filters/process/compute.hexa (AG6 enforcer; cross-host alive-check) - scripts/com.airgenome.compute-filter.plist (30s μ£ΌκΈ° launchd; λ―Έload μν) - forge/compute_filter.{log,stderr,stdout} (untracked, runtime residue) - .claude/settings.local.json L29+L38 (compute-filter Bash κΆν; gitignored, local-only edit) AG2/AG3/AG4/AG8/AG9 λ missing module μ°Έμ‘° (ubu_bridge / load_balancer / ssh_gate / resource_ceiling λ±) β λ³λ governance commit κΆμ₯. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦t enforcement μ± μ hive μ΄κ΄ cdd8f87 follow-up. AG6/AG7 supersede ν¨ν΄μ cross-host μ μ± 5κ°μ μΌκ΄ μ μ©. enforcement λͺ¨λμ΄ λͺ¨λ dead μνμ΄λ©° λλ± μ± μμ hive .resource SSOT + workload_router + load_balancer + docker-exec channel λ‘ μ΄κ΄λ¨. Rules β status="superseded" + l0_paths=[] + ssot=[migrated]: - AG2 Mac CPU μ μ½ (Ubuntu μ€νλ‘λ) by: hive workload_router + resource_scorer evidence: modules/dispatch.hexa + ubu_bridge νΈμΆμ μ κ±° (commits e0c644e / 692bfbb / 18370b6 / 8acdb23) - AG3 Ubuntu-First heavy compute by: hive workload_router + .resource SSOT evidence: modules/{dispatch,forecast,genome_merge}.hexa + filters/ transport/ssh.hexa μ κ±° (commit 18370b6) - AG4 Hetzner μ격 launcher μΊ‘ by: hive lb-dispatch.ts (concurrency cap + protected-PID κ²μ¦) evidence: bin/cx-core + drill-* + hexa_build_tick.sh μ κ±° (commit 692bfbb) - AG8 SSH κ²μ΄νΈ by: hive docker-exec channel + lb-dispatch evidence: modules/filters/transport/ssh.hexa μ κ±° (18370b6), bin/{host,executor,remote_load,lb,lb_monitor}.sh μ κ±° (e0c644e) - AG9 λͺ¨λν°λ§ λ°μ΄ν° μ νμ± by: hive .resource SSOT + resource_scorer evidence: cross-host probe μ κ±°, modules/probe.hexa mac-only μΆμ½ (commit 18370b6). resource_ceiling/coordinator/ infra_probe/monitor_test/load_balancer λͺ¨λ dead. filter_taxonomy λμ μ 리: - A_process_gate impl μ΄λ¦ ννν: safari_gateβmodules/filters/process/ safari.hexa λ± (6κ° λͺ¨λ _gate μ λ―Έ μ κ±°λ νμ¬ κ²½λ‘) - B_host_balancing β status="superseded" (impl=[]), hive ν‘μ - C_transport β status="superseded" (impl=[]), hive ν‘μ - D_genome β status="historical" (archive/v1/forge/ λ§ μμ‘΄) - E_data_reinterpret β λ³λ μμ (active in modules/filters/data/) _meta.updated 2026-04-23 β 2026-04-25. active rules (5): AG1, AG5, AG10, AG11, AG12-DRILL-CP-SURFACE superseded (7): AG2, AG3, AG4, AG6, AG7, AG8, AG9 λ³Έ commitμΌλ‘ airgenome μΈ‘ governance scope-reduce μλ£. hive μΈ‘ drill-helper λ§μ΄κ·Έλ μ΄μ (drill-progress/extract/resume/kill/live 5 λꡬ) + /resource dispatch wiring κ° λ³Έ μ νΈλ₯Ό νΈλ¦¬κ±°λ‘ μ§ν κ°λ₯. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
μ¬μ©μ directive 2026-04-25: 'airgenome μ λ―Έλλ©λ‘, κ²μ΄νΈ νν°λ§ λλκ³ '.
KEEP (26 files outside archive):
- modules/filters/process/ (6) β process gates (safari/claude/finder/memo/mail/calendar)
- modules/filters/data/ (9) β byte-reinterpret filters (claude_*/safari_*/sqlite_vacuum/quantum/vacuum_watcher)
- rules/ (2) β governance SSOT
- archive/v1/ β frozen, untouched
- repo basics: .github/, .gitignore, LICENSE, README.md, .mcp.json
- governance markers: .own, .raw-ref, .metadata_never_index
DROP (223 files):
- bin/ (32) β supervisor, drill helpers, build scripts, init
- core/ (2) β core.hexa engine
- modules/{harvest,label,probe,predictive_throttle}.hexa (4)
- modules/filters/transport/ (3) β cross-host transport (post-scope-reduce dead)
- tool/ag_*.hexa (29) β governance scanners
- scanners/ (8) β meta scanners
- launchd/ (6) β mac-local plists (LaunchAgents λμ unload + symlink rm)
- systemd/ docker/ hooks/ nexus/ state/ config/ convergence/ docs/ .playwright-mcp/
- install.hexa run.hexa project.hexa
- .roadmap .loop .hexa-init .convergence .prev_margin
Governance updated:
- AG1 (6μΆ probe): superseded β probe.hexa μ κ±°, hive resource_scorer ν‘μ
- AG12-DRILL-CP-SURFACE: superseded β bin/drill-* μ κ±°, hive λ§μ΄κ·Έλ μ΄μ
μμ
- _meta.scope = "minimal β gates/filters only"
Active rules (3): AG5 (filter taxonomy), AG10 (no hooks/skills), AG11 (proposal_inbox preflight)
Superseded (9): AG1/AG2/AG3/AG4/AG6/AG7/AG8/AG9/AG12
Runtime side-effects:
- launchctl bootout: com.airgenome.* 17 jobs unloaded
- ~/Library/LaunchAgents/com.airgenome.* symlinks: removed (52 files)
- airgenome supervisor + label.hexa background processes: terminated
- airgenome MCP server: disconnected (drill_release/drill_status/drill_touch/hooks_list/roadmap_*/rollback_to_last_green tools no longer available)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
build/mcp λ°μ΄λ리λ minimal reduction μμ μ κ±°λ¨ (commit 01e6161). .mcp.json μ airgenome server μνΈλ¦¬λ dead pointer. minimal scope ν active rules (AG5/AG10/AG11) κ° λ―Έμ€μνλ hook/skill/ MCP μλμ°κ²°λ λΆμ¬ β MCP server μμ²΄κ° λΆνμ. νλͺ© μ 체 νκΈ°. tracked outside archive: 26 β 25. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
μ¬μ©μ directive 2026-04-25: 'νν°λ μμ, no kill, μ€λ‘μ§ λ°μ΄ν° μ¬ν΄μ'.
Removed:
- modules/filters/process/{safari,claude,finder,memo,mail,calendar}.hexa (6)
process gate λ kill/recall μ‘μ
β 'no kill' μλ°.
Rules β status="superseded":
- AG11 (inbox preflight): state/proposals/inventory.json λΆμ¬. λ³Έ repo μΈλΆ
μμ
μμ μ±
μ μμ (data filter μ체μκ²°).
- filter_taxonomy.types.A_process_gate: implementations=[], 'no kill'
directive λ‘ μ±
μ νκΈ°.
_meta.scope = "minimal β data filters only post 2026-04-25 reduction.
process gates μ κ±° ('no kill' directive). cross-host execution β hive."
active rules (2): AG5 (filter taxonomy), AG10 (no hooks/skills)
superseded (10): AG1/AG2/AG3/AG4/AG6/AG7/AG8/AG9/AG11/AG12-DRILL-CP-SURFACE
KNOWN BLOCKER (λ³κ±΄):
- modules/filters/data/*.hexa 9κ° λͺ¨λ try/catch expression μ¬μ©
(μ: `try { exec(x) } catch e { fallback }`).
- ν hexa 0.1.0-stage1 νμ λ―Έμ§μ β 9/9 parse error.
- μ΄μ hexa λ²μ μμ‘΄. μ΅μ
:
(a) 9 νμΌ try-less refactor
(b) hexa-lang try/catch lang_gap proposal
- μ¬μ©μ κ²°μ λκΈ° β λ³Έ commit scope μΈ.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
β¦age1 Blocker resolved (commit bc38600 λ©μμ§μμ μλ³): - 9κ° filter νμΌ λͺ¨λ `try { exec(x) } catch e { fb }` ννμ μ¬μ© - hexa 0.1.0-stage1 νμλ try/catch expression λ―Έμ§μ β 9/9 parse fail - 'no kill, μμ' directive μΆ©μ‘± λͺ»ν¨ Refactor: - Pattern A: `try { exec(...) } catch e { fb }` β `exec(...)` hexa exec() λ throw μ ν¨ (μ€ν¨ μ λΉ λ¬Έμμ΄ λ°ν). catch λΆκΈ° dead. - Pattern B: `try { s.to_int() } catch e { 0 }` β `safe_int(s, 0)` to_int μ non-int μ λ ₯μ fatal-error. μ ν¬νΌ safe_int(s, default) μΆκ° (digit/`-` κ²μ¦ ν to_int νΈμΆ). vacuum_watcher.hexa μλ§ helper μΆκ°. - Pattern C: λ€μ€λΌμΈ `try { ... } catch e { ... }` β λ³Έμ²΄λ§ - Pattern D: `to_int(try { exec(...).trim() } catch e { "0" })` β unwrap Files changed (9): modules/filters/data/{claude_bytes, claude_compress, claude_quantum, claude_runtime, quantum_bench, safari_bench, safari_mmap, sqlite_vacuum, vacuum_watcher}.hexa Verification: hexa parse modules/filters/data/*.hexa β 9/9 OK hexa run modules/filters/data/*.hexa β 9/9 startup OK (no parse/codegen errors) active rules unchanged: AG5 (filter taxonomy), AG10 (no hooks/skills) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Reduces airgenome to mac-local resource management only. All cross-host execution (probe / dispatch / forecast / drill orchestration / multi-host roster / docker -H ssh paths) migrates to hive β receiving infrastructure already shipped (commits 26206bd16 + a3456e668 + 4c4848c19): `.resource` SSOT, `/resource` interactive menu, docker-exec channel, hexa-lang `tool/{resource_scorer,workload_router,load_balancer}.hexa`.
12 commits, 45 files changed (+347 / -4753 lines). Aggressive variant β drill workflows pause until hive lbDispatch CLI ships an equivalent automation entry point.
What changed
Removed (β symlink stub printing redirect to hive):
Edited:
Added:
Pre-flight:
Verification
```sh
cross-host runtime path 0 건 (residue: μ£Όμ / graceful-degradation menubar UI λ§)
grep -rEn "ssh |scp |rsync |docker -H|docker --host" bin/ modules/
CLI μ μ
bin/airgenome --help # mac-only + hive redirect μλ΄
hexa run modules/probe.hexa # β infra_state.json {scope:"mac-local", hosts.mac}
hexa run modules/label.hexa self-test # β PASS
hexa run modules/harvest.hexa # β anomaly_total=N
stub λμ
bin/cx-core # β ERR: cx-core moved to hive β ... exit 64
bin/lb.sh # β ERR: lb.sh moved to hive β ... exit 64
launchctl: 4 mac-only jobs only (supervisor / harvest disabled / label disabled / predictive-throttle / menubar app)
launchctl list | grep airgenome
build
DEPLOY=skip bin/build_app.sh # β test_menubar smoke PASS
```
Out-of-scope (follow-up)
Hive coordination
Hive μΈμ μ΄ λμμ cross-host smoke (ubu1/ubu2/hetzner/local docker exec round-trip) + lbDispatch CLI μμ΄μ΄λ§ μ§ν μ€. PR merge μ hive smoke κ²°κ³Ό μ²¨λΆ μμ .
π€ Generated with Claude Code