vqcqd30a7rgukh7vrrunbag5gh7q4mij · 185 rows
| id | issue_id | event_type | actor | old_value | new_value | comment | created_at |
|---|---|---|---|---|---|---|---|
| 019f73e8-6c27-7090-b949-807aa368c32e | ah-6ei | closed | Eugene Blikh | Verified live on project 2 / agent-1. Flushed out the real gap: (1) live config lacked design/review task_types+designer/validator roles+skills_dir; (2) NO CI deploy lane existed (.build.yml) and the agent1-deploy key was lost. Built the CI lane (.build.yml, commit 38dd035, build #226 SUCCESS: builds 3 cmds + ships bin/prompts/skills to /opt/agent-hub + restarts), regenerated+registered the deploy key (builds secret cc6bd011), wired designer/validator into the live config. Then ran the flow: task 2 type:design -> designer -> In Review with ## Design (ae7db66); relabel type:review+Ready -> validator -> ## Review changes-requested on the SAME file/branch (374b583, agent/task-2). Validator even caught a real arithmetic bug in the design's edge-case table. | NULL | 2026-07-18T09:27:19Z | |
| 019f73e8-6f29-7a21-8d89-d6c6ecdd6af9 | ah-943 | created | Eugene Blikh | NULL | 2026-07-18T09:27:20Z | ||
| 019f73eb-2c60-7b2b-bbf9-bf0ec606ee9a | ah-bkr | created | Eugene Blikh | NULL | 2026-07-18T09:30:20Z | ||
| 019f73eb-2ea6-7991-8823-ac8492ca4fab | ah-tz0 | created | Eugene Blikh | NULL | 2026-07-18T09:30:20Z | ||
| 019f73eb-3109-774b-b077-31774b346f29 | ah-4el | created | Eugene Blikh | NULL | 2026-07-18T09:30:21Z | ||
| 019f73eb-336f-792f-b2ff-2893e3883189 | ah-07g | created | Eugene Blikh | NULL | 2026-07-18T09:30:21Z | ||
| 019f73f2-e8c0-7de2-a29d-cf94bf14802a | ah-bkr | claimed | Eugene Blikh | {"id":"ah-bkr","title":"Vikunja comments render literal markdown fences — post HTML instead","description":"The In Review notification comment is built as markdown (internal/reconcile/comments.go successComment: triple-backtick fences around the diff stat, backtick spans). Vikunja stores/renders task comments as HTML (TipTap rich-text), so the markdown shows LITERALLY in the UI (screenshot: raw fences and + diffstat shown verbatim). internal/vikunja Comment() sends the string as-is to PUT /tasks/{id}/comments. Fix: render markdown to HTML (or emit HTML) before posting. Affects every daemon comment.","status":"open","priority":2,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:20Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:30:20Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T09:38:46Z |
| 019f73f2-ea09-7eb5-a4f5-2d758685b21c | ah-tz0 | claimed | Eugene Blikh | {"id":"ah-tz0","title":"Surface agent closing summary / review verdict in the In Review comment","description":"domain.RunSummary carries only DiffStat + Commits, so the comment shows diffstat+commits+link but not what was done. Designer and validator both END with a one-line summary/verdict; that line is lost (only in docs/tasks/slug.md). Capture the agent final summary (from exit.json or last event) into RunSummary and render it in successComment. Prereq for verdict-driven automation.","status":"open","priority":3,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:21Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:30:21Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T09:38:47Z |
| 019f73f4-13b9-7e67-8c7d-c07cea00686a | ah-943 | claimed | Eugene Blikh | {"id":"ah-943","title":"Refresh phoebe-lab agent-hub provisioning template + bootstrap for designer/validator","description":"The live /etc/agent-hub/agenthub.yaml on agent-1 was hand-wired for project 2, repo agent-demo, deepseek model, AND now designer/validator roles + design/review task_types + skills_dir=/opt/agent-hub/skills. The phoebe-lab/agent-hub/config/agenthub.yaml.example (first-boot seed) is stale vs this: still project_id 1, repo demo, coder-only, no skills_dir/task_types. bootstrap.sh also only pre-creates /opt/agent-hub/{bin,prompts} (skills/ gets created by the CI tar overlay, which works but isn't declared). Update the example + bootstrap so a fresh box provisions the full role set. Also: keys/agent1-deploy.pub was regenerated this session (new ed25519, matching builds.sr.ht secret cc6bd011) and is modified-uncommitted in the phoebe-lab repo — commit it or a redeploy/bootstrap reinstalls the OLD dead key.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:27:20Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:27:20Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T09:40:03Z |
| 019f73f5-42a8-79a8-93fe-729d9069431d | ah-943 | closed | Eugene Blikh | Provisioning template (config/agenthub.yaml.example) now scaffolds skills_dir + designer/validator roles + design/review task_types; bootstrap.sh pre-creates /opt/agent-hub/skills. Committed phoebe-lab 34bcec3 (local; deploy via labng). Pubkey rotation committed earlier (abab805). | NULL | 2026-07-18T09:41:21Z | |
| 019f73f5-f38e-7bb4-91d4-89df1389eeb2 | ah-07g | updated | Eugene Blikh | {"id":"ah-07g","title":"Investigate unbounded .task/events.jsonl (202MB for one design run)","description":"task-2/.task/events.jsonl was 202 MB for a single ~2min run producing a 100-line doc. pi event stream persisted verbatim, no truncation/rotation, under work_root. work_root fills fast. Investigate pi verbosity, whether events.jsonl is needed post-run, add rotation/cap or prune-on-Done.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:22Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:30:22Z"} | {"notes":"INVESTIGATION (2026-07-18): events.jsonl is pi's raw event stream, persisted verbatim by pi in \u003cworktree\u003e/.task/. 210MB for task-2's ~2min run; lines up to ~100KB each (full message/context per event). Worktrees are NOT pruned on terminal state (task-1 and task-2 both still on disk under work_root). Two levers: (a) pi-side — reduce event verbosity / don't persist full context per event (pi is external, needs a flag or upstream change); (b) daemon-side — prune the worktree or at least .task/events.jsonl when a task reaches Done (NOT In Review, where zellij-attach/review still want it). Retention policy is a user call: keep-for-debug vs disk. No code changed yet — needs a retention-policy decision."} | NULL | 2026-07-18T09:42:06Z |
| 019f73f7-dca4-7059-8725-f625eb84b6b9 | ah-bkr | closed | Eugene Blikh | markdownToHTML converts outbound comments to HTML at the vikunja Comment() boundary (dep-free, escaping + placeholder-safe). Builders still emit markdown (comments_test green). Verified: 89 subtests pass; live Vikunja round-trip confirmed the API stores <p>/<pre><code>/<ul>/<a> intact (markdown showed literally before). Merged to master (f6098a9). | NULL | 2026-07-18T09:44:11Z | |
| 019f73f9-9709-7e63-a77b-bdabe403a5d8 | ah-tz0 | closed | Eugene Blikh | RunSummary gains a Summary field read from .task/summary.md (runner.readSummaryFile, trim+2000-rune tail-truncate, missing=empty). successComment renders it as a blockquote below the header. designer/validator/coder prompts now write their closing summary/verdict there. Verified: unit tests green in isolation AND combined with ah-bkr on master; full-module build OK. Merged (rebased onto master). NOTE: follow-up needed — the blockquote markdown isn't yet handled by ah-bkr's HTML converter. | NULL | 2026-07-18T09:46:04Z | |
| 019f73fb-8754-700f-bab0-e19243081740 | ah-0iz | created | Eugene Blikh | NULL | 2026-07-18T09:48:11Z | ||
| 019f73fb-88fe-73a9-b111-47216600e38a | ah-0iz | closed | Eugene Blikh | Added <blockquote> handling to markdownToHTML (mirrors the bullet-run logic; bare > = empty line). Unit tests + live Vikunja round-trip confirm blockquote+strong render. Committed on master. | NULL | 2026-07-18T09:48:12Z | |
| 019f7401-a9ef-7ae1-b259-5fa7af5a19ec | ah-a6f | created | Eugene Blikh | NULL | 2026-07-18T09:54:53Z | ||
| 019f7401-ab94-7a35-b6c2-eb65859d4b02 | ah-a6f | closed | Eugene Blikh | Updated 5 e2e comment assertions (branch/worktree/outcome) from markdown backticks to <code> HTML. Full e2e suite passes (10.95s). Root cause: ah-bkr subagent scoped to its own package; build-tagged e2e wasn't exercised until the integration sweep. | NULL | 2026-07-18T09:54:54Z | |
| 019f7402-35c5-7995-865f-81dc2d724d25 | ah-4el | updated | Eugene Blikh | {"id":"ah-4el","title":"Review-verdict-driven transition: changes-requested back to Ready for coder","description":"Every successful run lands In Review; no verdict-aware transition, so a validator changes-requested just sits for a human to drag back. Intentional for now (ah-gs7 human-driven handoff) but user asked for it. Build opt-in loop: parse validator verdict (needs machine-readable verdict), on changes-requested move card back to Ready under coder/fix role with the review as context. Ties into Stage 4 (ah-0ge).","status":"open","priority":3,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:21Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:30:21Z"} | {"notes":"DESIGN PROPOSAL (held for user sign-off — changes the core reconcile state machine; not live-verifiable while pushes/deploy are blocked).\n\nNow unblocked by ah-tz0 (.task/summary.md exists). Proposed:\n1. MACHINE-READABLE VERDICT: don't parse free-text. Have the validator write a structured line the daemon can key on — e.g. a first line 'Verdict: pass' | 'Verdict: changes-requested' in .task/summary.md (update prompts/validator.md + validate skill), and add a domain field Verdict (parsed in runner.Summary, empty for non-validator roles).\n2. OPT-IN CONFIG: task_types.review gains 'on_changes_requested: \u003cbucket|role\u003e' (default: none = current behavior, lands In Review for a human). When set e.g. to role 'coder', a changes-requested validator run moves the card to Ready under that role instead of In Review, carrying the review as context (the ## Review is already on the branch).\n3. LOOP GUARD: reuse the delegation generation cap (max_generation) or add a review_rounds cap so design-\u003ereview-\u003ecoder-\u003ereview can't cycle forever. A 'pass' verdict always lands In Review (human ships it).\n4. STATE MACHINE: this is a new transition in internal/reconcile (finalize path) + internal/domain/transitions.go. Cover with reconcile_test.go (injected clock/fakes) AND an e2e flow before shipping.\n\nOpen questions for user: (a) auto-loop to 'coder' or a dedicated 'fixer' role? (b) opt-in per task_type (proposed) vs global? (c) cap value / mechanism. HOLDING until answered."} | NULL | 2026-07-18T09:55:29Z |
| 019f7563-ebe5-7991-97e3-417042380f48 | ah-4el | claimed | Eugene Blikh | {"id":"ah-4el","title":"Review-verdict-driven transition: changes-requested back to Ready for coder","description":"Every successful run lands In Review; no verdict-aware transition, so a validator changes-requested just sits for a human to drag back. Intentional for now (ah-gs7 human-driven handoff) but user asked for it. Build opt-in loop: parse validator verdict (needs machine-readable verdict), on changes-requested move card back to Ready under coder/fix role with the review as context. Ties into Stage 4 (ah-0ge).","notes":"DESIGN PROPOSAL (held for user sign-off — changes the core reconcile state machine; not live-verifiable while pushes/deploy are blocked).\n\nNow unblocked by ah-tz0 (.task/summary.md exists). Proposed:\n1. MACHINE-READABLE VERDICT: don't parse free-text. Have the validator write a structured line the daemon can key on — e.g. a first line 'Verdict: pass' | 'Verdict: changes-requested' in .task/summary.md (update prompts/validator.md + validate skill), and add a domain field Verdict (parsed in runner.Summary, empty for non-validator roles).\n2. OPT-IN CONFIG: task_types.review gains 'on_changes_requested: \u003cbucket|role\u003e' (default: none = current behavior, lands In Review for a human). When set e.g. to role 'coder', a changes-requested validator run moves the card to Ready under that role instead of In Review, carrying the review as context (the ## Review is already on the branch).\n3. LOOP GUARD: reuse the delegation generation cap (max_generation) or add a review_rounds cap so design-\u003ereview-\u003ecoder-\u003ereview can't cycle forever. A 'pass' verdict always lands In Review (human ships it).\n4. STATE MACHINE: this is a new transition in internal/reconcile (finalize path) + internal/domain/transitions.go. Cover with reconcile_test.go (injected clock/fakes) AND an e2e flow before shipping.\n\nOpen questions for user: (a) auto-loop to 'coder' or a dedicated 'fixer' role? (b) opt-in per task_type (proposed) vs global? (c) cap value / mechanism. HOLDING until answered.","status":"open","priority":3,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:21Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:55:30Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T16:21:50Z |
| 019f7563-ed27-79df-a64a-603a85e435d3 | ah-4el | updated | Eugene Blikh | {"id":"ah-4el","title":"Review-verdict-driven transition: changes-requested back to Ready for coder","description":"Every successful run lands In Review; no verdict-aware transition, so a validator changes-requested just sits for a human to drag back. Intentional for now (ah-gs7 human-driven handoff) but user asked for it. Build opt-in loop: parse validator verdict (needs machine-readable verdict), on changes-requested move card back to Ready under coder/fix role with the review as context. Ties into Stage 4 (ah-0ge).","notes":"DESIGN PROPOSAL (held for user sign-off — changes the core reconcile state machine; not live-verifiable while pushes/deploy are blocked).\n\nNow unblocked by ah-tz0 (.task/summary.md exists). Proposed:\n1. MACHINE-READABLE VERDICT: don't parse free-text. Have the validator write a structured line the daemon can key on — e.g. a first line 'Verdict: pass' | 'Verdict: changes-requested' in .task/summary.md (update prompts/validator.md + validate skill), and add a domain field Verdict (parsed in runner.Summary, empty for non-validator roles).\n2. OPT-IN CONFIG: task_types.review gains 'on_changes_requested: \u003cbucket|role\u003e' (default: none = current behavior, lands In Review for a human). When set e.g. to role 'coder', a changes-requested validator run moves the card to Ready under that role instead of In Review, carrying the review as context (the ## Review is already on the branch).\n3. LOOP GUARD: reuse the delegation generation cap (max_generation) or add a review_rounds cap so design-\u003ereview-\u003ecoder-\u003ereview can't cycle forever. A 'pass' verdict always lands In Review (human ships it).\n4. STATE MACHINE: this is a new transition in internal/reconcile (finalize path) + internal/domain/transitions.go. Cover with reconcile_test.go (injected clock/fakes) AND an e2e flow before shipping.\n\nOpen questions for user: (a) auto-loop to 'coder' or a dedicated 'fixer' role? (b) opt-in per task_type (proposed) vs global? (c) cap value / mechanism. HOLDING until answered.","status":"in_progress","priority":3,"issue_type":"feature","assignee":"Eugene Blikh","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:21Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:21:51Z","started_at":"2026-07-18T13:21:51Z"} | {"design":"DECIDED 2026-07-18 (user): dedicated FIXER role. Generalized routing design:\n- task_types.\u003ct\u003e gains on_success: \u003ctype\u003e and on_changes_requested: \u003ctype\u003e (target is a TASK TYPE name; validated at config load).\n- Routing = swap board label type:\u003cold\u003e -\u003e type:\u003ctarget\u003e (Vikunja label API, lookup by title), move card to Ready, comment 'routed to \u003ctype\u003e (round n/cap)'. Label-swap failure -\u003e fall back In Review + warn comment.\n- Verdict channel: first line of .task/summary.md must be 'Verdict: pass' or 'Verdict: changes-requested' (case-insensitive). Parsed into RunSummary.Verdict. Missing/absent verdict = pass-equivalent (lands In Review as today).\n- changes-requested + on_changes_requested set -\u003e route; pass/none + on_success set -\u003e route; otherwise In Review (current behavior). Failure paths unchanged.\n- Loop guard: per-task auto_routes counter persisted in store, incremented on EVERY automated route (both edges); config routing.max_auto_routes default 4 (design-\u003ereview-\u003efix-\u003ereview = 3). At cap -\u003e In Review + 'routing cap reached' comment. Human manual relabel+Ready still works past cap.\n- New prompts/fixer.md (address ## Review findings on same branch); validator.md updated to mandate the Verdict first line.\n- Intended live pipeline: design --on_success--\u003e review --changes-requested--\u003e fix --on_success--\u003e review --pass--\u003e In Review (human)."} | NULL | 2026-07-18T16:21:50Z |
| 019f7564-0cef-7a68-a953-9969886e28fb | ah-07g | claimed | Eugene Blikh | {"id":"ah-07g","title":"Investigate unbounded .task/events.jsonl (202MB for one design run)","description":"task-2/.task/events.jsonl was 202 MB for a single ~2min run producing a 100-line doc. pi event stream persisted verbatim, no truncation/rotation, under work_root. work_root fills fast. Investigate pi verbosity, whether events.jsonl is needed post-run, add rotation/cap or prune-on-Done.","notes":"INVESTIGATION (2026-07-18): events.jsonl is pi's raw event stream, persisted verbatim by pi in \u003cworktree\u003e/.task/. 210MB for task-2's ~2min run; lines up to ~100KB each (full message/context per event). Worktrees are NOT pruned on terminal state (task-1 and task-2 both still on disk under work_root). Two levers: (a) pi-side — reduce event verbosity / don't persist full context per event (pi is external, needs a flag or upstream change); (b) daemon-side — prune the worktree or at least .task/events.jsonl when a task reaches Done (NOT In Review, where zellij-attach/review still want it). Retention policy is a user call: keep-for-debug vs disk. No code changed yet — needs a retention-policy decision.","status":"open","priority":3,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:22Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T06:42:06Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T16:21:59Z |
| 019f7564-0e1e-7cfc-b6ba-dd3f965fb5dd | ah-07g | updated | Eugene Blikh | {"id":"ah-07g","title":"Investigate unbounded .task/events.jsonl (202MB for one design run)","description":"task-2/.task/events.jsonl was 202 MB for a single ~2min run producing a 100-line doc. pi event stream persisted verbatim, no truncation/rotation, under work_root. work_root fills fast. Investigate pi verbosity, whether events.jsonl is needed post-run, add rotation/cap or prune-on-Done.","notes":"INVESTIGATION (2026-07-18): events.jsonl is pi's raw event stream, persisted verbatim by pi in \u003cworktree\u003e/.task/. 210MB for task-2's ~2min run; lines up to ~100KB each (full message/context per event). Worktrees are NOT pruned on terminal state (task-1 and task-2 both still on disk under work_root). Two levers: (a) pi-side — reduce event verbosity / don't persist full context per event (pi is external, needs a flag or upstream change); (b) daemon-side — prune the worktree or at least .task/events.jsonl when a task reaches Done (NOT In Review, where zellij-attach/review still want it). Retention policy is a user call: keep-for-debug vs disk. No code changed yet — needs a retention-policy decision.","status":"in_progress","priority":3,"issue_type":"task","assignee":"Eugene Blikh","owner":"bigbes@gmail.com","created_at":"2026-07-18T06:30:22Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:21:59Z","started_at":"2026-07-18T13:21:59Z"} | {"design":"DECIDED 2026-07-18 (user): 'remove worktree, but backup .task and additional docs'. Policy:\n- When a card reaches Done or Cancelled and its worktree still exists: archive FIRST, then 'git worktree remove --force'.\n- Archive = tar.gz containing .task/ (PROMPT.md, summary.md, events.jsonl, *.json) PLUS any files in the worktree that are uncommitted relative to the branch head (untracked + modified) — i.e. everything that would be lost with the worktree. Branch itself is the durable artifact and is NOT touched.\n- Archive location: config archive_dir, default \u003cwork_root\u003e/archive/, file task-\u003cid\u003e.tar.gz (overwrite on re-archive).\n- Failed/In Review/etc: untouched (zellij attach + debugging still want the worktree).\n- events.jsonl compresses ~10-20x (repeated JSON context), so backup satisfies keep-for-debug without the 202MB/run disk cost."} | NULL | 2026-07-18T16:21:59Z |
| 019f7565-cdef-7710-92f2-3ab99bb8eddc | ah-0ge.5 | created | Eugene Blikh | NULL | 2026-07-18T16:23:53Z | ||
| 019f7565-d0f5-7d4a-ba42-2ad0a166c52e | ah-0ge.6 | created | Eugene Blikh | NULL | 2026-07-18T16:23:54Z | ||
| 019f7565-d418-70c7-8b6c-b8293f66b855 | ah-ydx.1 | created | Eugene Blikh | NULL | 2026-07-18T16:23:55Z | ||
| 019f7565-d702-740b-ab21-98bd6a53105c | ah-ydx.2 | created | Eugene Blikh | NULL | 2026-07-18T16:23:56Z | ||
| 019f7565-da2c-7a8f-a0c9-2b75d820286f | ah-ydx.3 | created | Eugene Blikh | NULL | 2026-07-18T16:23:57Z | ||
| 019f7566-ecba-7111-9ca8-3513f0257b5b | ah-ydx.1 | claimed | Eugene Blikh | {"id":"ah-ydx.1","title":"internal/mem0: REST client for live mem0.bigb.es","description":"Typed Go client for the self-hosted Mem0 server (LIVE at mem0.bigb.es, phoebe-lab/mem0 stack): X-API-Key auth, add/search/get-all/delete memories. Encode scoping conventions as helpers: user_id='proj:\u003cslug\u003e' | 'global', run_id='task:\u003cid\u003e'; do NOT rely on agent_id filtering (buggy upstream per SPEC §14.3). Stdlib-only, httptest unit tests; live verification (incl. API-key provisioning via dashboard/register) is a follow-up ops step.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:56Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:23:56Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T16:25:07Z |
| 019f7566-edf6-7144-9021-9a291b00ea26 | ah-ydx.2 | claimed | Eugene Blikh | {"id":"ah-ydx.2","title":"internal/ctxpack: Context Pack builder","description":"Deterministic prompt-context assembler per SPEC §14.3: ordered sections (task, comment thread, parent chain, memory, git log/diffstat) under a ~40k char budget, per-section truncate-from-tail with stable ordering so identical inputs render identical packs. Pure package + table tests first; wiring into runner PROMPT.md rendering is a separate integration step after wave 1 merges.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:56Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:23:56Z"} | {"assignee":"Eugene Blikh","status":"in_progress"} | NULL | 2026-07-18T16:25:07Z |
| 019f7571-8032-7ef8-8cc4-d147e18e4c7b | ah-0ge.5 | updated | Eugene Blikh | {"id":"ah-0ge.5","title":"AgentsView: pg push from agent-1 + per-run session deep links in comments","description":"Make agent runs viewable at agentsview.bigb.es (user asked 'can I view agent logs?'). Two halves: (1) OPS on agent-1 — install go.kenn.io/agentsview (v0.37.5+) for user agenthub, ~/.agentsview/config.toml with [pg] url to phoebe LAN :5433 (published for exactly this; allow_insecure lab tradeoff), systemd timer or 'agentsview pg service' running one-shot AGENTSVIEW_NO_DAEMON=1 pg push (notebook launchd pattern proven: NO_DAEMON avoids 0.37.x writer-daemon deadlock). Verify pi-session source is parsed. (2) DAEMON — finalize comments include the session deep link built from stored PiSessionID (verify central URL shape first). Daemon half must wait for ah-4el merge (same comments.go).","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:54Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:23:54Z"} | {"design":"ARCHITECTURE (2026-07-18, after user pushed back on pg-port exposure): use AgentsView's NATIVE HTTP remote sync (v0.37.4+, present in 0.37.5) instead of direct pg push from agent-1 — no fork, no firewall change (phoebe DOCKER-USER allowlists DB ports to 192.168.88.35 only; agent-1 stays out of it).\n- agent-1: agentsview v0.37.5 (upstream release binary, SHA256-verified) as systemd service, User=agenthub (HOME=/var/lib/agenthub so default pi source .pi/agent/sessions is found), 'serve' bound to LAN, require_auth=true, token via AGENTSVIEW_AUTH_TOKEN EnvironmentFile (root-owned 0600). Archive endpoints are bearer-gated ALWAYS.\n- phoebe host: same binary as one-shot COLLECTOR on a systemd timer: [[remote_hosts]] {host='agent-1', transport='http', url, token} pulls sessions over HTTP; then AGENTSVIEW_NO_DAEMON=1 pg push to localhost:5433 (phoebe-\u003eown docker-proxy is the allowed local path). Notebook launchd flow untouched.\n- Central agentsview.bigb.es pg serve container: unchanged at 0.37.5. Version-pin ALL nodes at 0.37.5 (pg schema coupling); coordinated bump to 0.38.1 later ('speed up full HTTP sync' is perf-only).\n- Daemon half (after ah-4el merges): finalize comment gains https://agentsview.bigb.es/sessions/\u003cPiSessionID\u003e deep link, config-gated base URL. VERIFY id shape matches AgentsView session ids once first push lands.\n- Secrets never enter operator transcript: token minted on agent-1 and piped host-to-host; pg password composed phoebe-locally from the stack .env."} | NULL | 2026-07-18T16:36:40Z |
| 019f7575-9f69-781a-a617-97c38d4d2a57 | ah-ydx.1 | closed | Eugene Blikh | internal/mem0 client merged to master (55b9b43); routes confirmed against mem0 v2.0.11 source; live verification against mem0.bigb.es tracked in ah-ydx.3 | NULL | 2026-07-18T16:41:10Z | |
| 019f7575-a18f-7ba8-b324-5127c59eea4a | ah-ydx.2 | closed | Eugene Blikh | internal/ctxpack merged to master (342410e); format contract pinned by golden tests; runner integration tracked in ah-ydx.3 | NULL | 2026-07-18T16:41:11Z | |
| 019f7582-6b97-727c-a5de-343dd33c8fcd | ah-ydx.3 | updated | Eugene Blikh | {"id":"ah-ydx.3","title":"Memory lifecycle: load-on-claim CONTEXT section, save-on-Done","description":"Wire mem0 into the task loop per SPEC §14.3: on claim, search mem0 (proj scope + global) and render a memory section into the prompt context via ctxpack; on Done/Cancelled terminal scan (shares the ah-07g hook), save run summary/verdict facts back to mem0 (run_id='task:\u003cid\u003e'). Depends on the mem0 client, ctxpack, and the ah-07g terminal-state scan.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:57Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:23:57Z"} | {"notes":"MEM0 LIVE STATE (2026-07-18): server DEGRADED, needs one operator command (classifier-blocked for me — see handoff). History: (1) found deployed server 502s on all embed/LLM calls — STORED runtime config (mem0_app.settings key=config_overrides, created via dashboard/configure at some point) carries UNPREFIXED model names (deepseek-v4-flash, nemotron-embed-1b-v2) that LiteLLM rejects; container env has the CORRECT prefixed names. (2) My repair attempt made it worse: GET /configure REDACTS secrets, and POSTing the round-tripped body back overwrote the stored pgvector password with a redacted value — now ALL memory endpoints 502 (pgvector auth fails). (3) Correct fix: delete the single settings row so the server falls back to env-of-truth (prefixed models + correct creds), restart api. LESSON for lifecycle bead: never round-trip /configure GET-\u003ePOST (redaction!); prefer env-only config, no stored overrides. Client-side contract validated live BEFORE breakage: routes flat, X-API-Key admin works, LIST/DELETE-scope 200 envelope {results}/{message}, bogus key 401."} | NULL | 2026-07-18T16:55:09Z |
| 019f7582-6d79-7933-9f3a-0f4d303caead | ah-0ge.5 | updated | Eugene Blikh | {"id":"ah-0ge.5","title":"AgentsView: pg push from agent-1 + per-run session deep links in comments","description":"Make agent runs viewable at agentsview.bigb.es (user asked 'can I view agent logs?'). Two halves: (1) OPS on agent-1 — install go.kenn.io/agentsview (v0.37.5+) for user agenthub, ~/.agentsview/config.toml with [pg] url to phoebe LAN :5433 (published for exactly this; allow_insecure lab tradeoff), systemd timer or 'agentsview pg service' running one-shot AGENTSVIEW_NO_DAEMON=1 pg push (notebook launchd pattern proven: NO_DAEMON avoids 0.37.x writer-daemon deadlock). Verify pi-session source is parsed. (2) DAEMON — finalize comments include the session deep link built from stored PiSessionID (verify central URL shape first). Daemon half must wait for ah-4el merge (same comments.go).","design":"ARCHITECTURE (2026-07-18, after user pushed back on pg-port exposure): use AgentsView's NATIVE HTTP remote sync (v0.37.4+, present in 0.37.5) instead of direct pg push from agent-1 — no fork, no firewall change (phoebe DOCKER-USER allowlists DB ports to 192.168.88.35 only; agent-1 stays out of it).\n- agent-1: agentsview v0.37.5 (upstream release binary, SHA256-verified) as systemd service, User=agenthub (HOME=/var/lib/agenthub so default pi source .pi/agent/sessions is found), 'serve' bound to LAN, require_auth=true, token via AGENTSVIEW_AUTH_TOKEN EnvironmentFile (root-owned 0600). Archive endpoints are bearer-gated ALWAYS.\n- phoebe host: same binary as one-shot COLLECTOR on a systemd timer: [[remote_hosts]] {host='agent-1', transport='http', url, token} pulls sessions over HTTP; then AGENTSVIEW_NO_DAEMON=1 pg push to localhost:5433 (phoebe-\u003eown docker-proxy is the allowed local path). Notebook launchd flow untouched.\n- Central agentsview.bigb.es pg serve container: unchanged at 0.37.5. Version-pin ALL nodes at 0.37.5 (pg schema coupling); coordinated bump to 0.38.1 later ('speed up full HTTP sync' is perf-only).\n- Daemon half (after ah-4el merges): finalize comment gains https://agentsview.bigb.es/sessions/\u003cPiSessionID\u003e deep link, config-gated base URL. VERIFY id shape matches AgentsView session ids once first push lands.\n- Secrets never enter operator transcript: token minted on agent-1 and piped host-to-host; pg password composed phoebe-locally from the stack .env.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:54Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:36:40Z"} | {"notes":"OPS HALF DONE + LIVE (2026-07-18): agent-1 fleet-node daemon (systemd agentsview.service, v0.37.5, token-gated :8080, smoke 401/200 ok) + phoebe host collector (agentsview-collect.timer 10min: HTTP remote sync pull -\u003e pg push loopback 5433). First run pushed 5 agent-1 pi sessions to central pg; id shape agent-1~pi:\u003cpi-session-uuid\u003e =\u003e deep link https://agentsview.bigb.es/sessions/agent-1~pi:\u003cPiSessionID\u003e. Infra-as-code committed phoebe-lab 9d4b157 (units + agentsview-node.sh + collector/provision.sh + CLAUDE.md docs, incl. zsh MULTIOS token-leak caution; leaked token was rotated + verified rejected). REMAINING (daemon half, after ah-4el merge): agentsview.base_url config + deep link line in claim/success comments from RunSummary.PiSessionID; verify link renders for a pushed session."} | NULL | 2026-07-18T16:55:09Z |
| 019f7584-d969-719e-9a42-534849e815fb | ah-ydx.3 | updated | Eugene Blikh | {"id":"ah-ydx.3","title":"Memory lifecycle: load-on-claim CONTEXT section, save-on-Done","description":"Wire mem0 into the task loop per SPEC §14.3: on claim, search mem0 (proj scope + global) and render a memory section into the prompt context via ctxpack; on Done/Cancelled terminal scan (shares the ah-07g hook), save run summary/verdict facts back to mem0 (run_id='task:\u003cid\u003e'). Depends on the mem0 client, ctxpack, and the ah-07g terminal-state scan.","notes":"MEM0 LIVE STATE (2026-07-18): server DEGRADED, needs one operator command (classifier-blocked for me — see handoff). History: (1) found deployed server 502s on all embed/LLM calls — STORED runtime config (mem0_app.settings key=config_overrides, created via dashboard/configure at some point) carries UNPREFIXED model names (deepseek-v4-flash, nemotron-embed-1b-v2) that LiteLLM rejects; container env has the CORRECT prefixed names. (2) My repair attempt made it worse: GET /configure REDACTS secrets, and POSTing the round-tripped body back overwrote the stored pgvector password with a redacted value — now ALL memory endpoints 502 (pgvector auth fails). (3) Correct fix: delete the single settings row so the server falls back to env-of-truth (prefixed models + correct creds), restart api. LESSON for lifecycle bead: never round-trip /configure GET-\u003ePOST (redaction!); prefer env-only config, no stored overrides. Client-side contract validated live BEFORE breakage: routes flat, X-API-Key admin works, LIST/DELETE-scope 200 envelope {results}/{message}, bogus key 401.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-18T13:23:57Z","created_by":"Eugene Blikh","updated_at":"2026-07-18T13:55:09Z"} | {"notes":"MEM0 SERVER HEALTHY (2026-07-18, after user-authorized override delete + restart): /configure now reflects env-of-truth (deepseek/deepseek-v4-flash + nvidia/nemotron-embed-1b-v2). FULL live smoke green: ADD infer=false 200/event=ADD; SEARCH 200 with score (embeddings ok); ADD infer=true 200 (LLM extraction ok); LIST/PURGE/EMPTY clean; bogus key 401. Server-side contract fully verified — lifecycle implementation unblocked once ah-07g lands the terminal-state hook. OPERATIONAL RULE: mem0 config is ENV-ONLY; never POST /configure (GET redacts secrets, round-trip corrupts stored creds — happened + fixed today, backup at phoebe:/root/mem0-settings-backup.sql); if a stored override reappears (dashboard onboarding creates one), delete settings row key=config_overrides + restart."} | NULL | 2026-07-18T16:57:48Z |