diff --git a/agent-builder/.claude/context.md b/agent-builder/.claude/context.md index 613ebda..0fef0fd 100644 --- a/agent-builder/.claude/context.md +++ b/agent-builder/.claude/context.md @@ -504,5 +504,26 @@ Key finding this session: secrets-proxy /shell only accepts target=sandbox or ta **Phase 3** (1 agent): 11. id=155 — required_playbooks precision pass (needs id=154 from Phase 2) +### 2026-06-27 Sprint Day 11 session 1 facts (midnight) +- Phase 1 ALL COMPLETE ✅ — all 5 agents finished: + - id=163: secrets-proxy restarted (jenkins key active) + - id=164: sudo-bridge compose IP fixed (192.168.1.88→192.168.1.90) + - Hermes config: hermes-cli added to platform_toolsets.telegram, Hermes healthy + - container-health-sweep SKILL.md: created on server-01 + - semantic-recall SKILL.md: created on server-01 +- behavior_changes table CREATED in api_business DB +- Bug id=1 LOGGED: Jenkinsfile shell operators (&& and ||) incompatible with secrets-proxy shlex.split — all compound commands fail at secrets-proxy /shell +- PROXY_CALLERS format bug DISCOVERED + FIXED: app.py expects raw keys (not pre-hashed); P1-1 agent pre-hashed them causing double-hash → 403 on all auth; fixed by restart with raw keys +- Jenkins internal URL: http://192.168.1.90:8090 (direct — Cloudflare blocks automated API calls without service token) +- Jellyfin jellyfin verify: FAILED (two bugs — auth now fixed, shell operators still broken) +- agent_prompts.md FIXED: PROXY_CALLERS raw key format corrected in P1-1 and P2-1 +- New anti-patterns added to playbook: PROXY_CALLERS pre-hashing, tier-2 wildcard shadowing, NTFY reliability + +#### After /compact — next session: +1. Fix Jenkinsfile shell operator bug: split compound commands into separate secrets-proxy calls (affects all 34 Jenkins jobs using standard-redeploy.Jenkinsfile) +2. Re-run jellyfin Jenkins verify after fix +3. Launch Phase 2 (5 parallel agents): id=161, id=154, content repurposing, id=135, id=112 +4. After Phase 2 id=154 completes: launch Phase 3 (id=155) + ## Update instructions Update at the end of every agent-builder session. Keep agent status, key decisions, and prereq checklist current. diff --git a/agent-builder/agent_prompts.md b/agent-builder/agent_prompts.md index bc41f2a..dab85cd 100644 --- a/agent-builder/agent_prompts.md +++ b/agent-builder/agent_prompts.md @@ -51,9 +51,11 @@ db = vread(tok, 'postgres/secrets-proxy') ntfy = vread(tok, 'ntfy/secrets-proxy-bot') urllib.request.urlopen(urllib.request.Request(f'{VAULT_ADDR}/v1/auth/token/revoke-self', data=b'{}', headers={'X-Vault-Token': tok, 'Content-Type':'application/json'}, method='POST')) -ch = {n: hashlib.sha256(k.encode()).hexdigest() for n, k in callers.items()} + +# IMPORTANT: store RAW keys — app.py hashes them internally via CALLER_KEY_TO_NAME +# Do NOT pre-hash: storing hashed keys causes double-hash, all auth fails lines = [ - f'PROXY_CALLERS={json.dumps(ch)}', + f'PROXY_CALLERS={json.dumps(callers)}', 'VAULT_PROD_ADDR=http://192.168.1.88:8200', f'VAULT_PROD_ROLE_ID={approle.get("role_id","")}', f'VAULT_PROD_SECRET_ID={approle.get("secret_id","")}', @@ -480,6 +482,7 @@ Write a Python script that: Run the same restart_proxy.py pattern from id=163 (already in your instructions above). The script reads proxy/callers from Vault (now includes hermes) and restarts with updated PROXY_CALLERS. +IMPORTANT: Store raw keys in PROXY_CALLERS (not pre-hashed) — app.py hashes internally. Use json.dumps(callers) not json.dumps({n: sha256(k) for n,k in callers.items()}). Script template is identical to P1-1 — write it fresh to /tmp/restart_proxy_161.py and run it. Verify: curl http://172.16.16.12:8080/health returns 200.