~bigbes/agents-dev · parade

main · last commit 13 days ago · 7g0stsfu

← Back to the parade

ah-ydx Stage 3: mem0 memory lifecycle + Context Pack epic Lined Up

status: open P3 epic milestone:v0.1.0
bd update ah-ydx --claim bd close ah-ydx
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-12T23:36:28Z
Updated2026-08-05T00:11:18Z
Description
Per SPEC SS14.3: mem0 REST client (X-API-Key, scoping user_id=proj:<slug>/global, run_id=task:<id> — agent_id filter is buggy upstream); load cascade on claim -> .task/CONTEXT.md section; save on Done; post-run summarizer role; Context Pack builder (task+thread+parent-chain+memory+git, ~40k char budget, deterministic order, truncate-from-tail).
Notes
Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed.

DECISION STILL NEEDED — analysis added 2026-08-05 to make it a one-line call.

RECOMMENDATION: ACCEPT the substitution and close the epic.

Why the substitution is better than the design it replaced, not merely cheaper:
- A summarizer ROLE means a SECOND pi run per task whose only output is prose. That is another model call, another timeout to enforce, another attempt that can crash, stall or be killed — all on the finalize path, which is the one path that must not get more failure modes (see ah-1cx.2 for what a failure there already costs).
- The agent that did the work is the only party that knows WHY it made its choices. A summarizer reading the diff afterwards is reconstructing intent from artifacts; .task/summary.md is the agent stating it directly. The verdict-routing pipeline (ah-4el) already depends on that file's FIRST LINE, so the file is load-bearing regardless — a summarizer role would duplicate a channel that must exist anyway.
- mem0's infer=true already does the extraction step a summarizer would have done, on the server, at the point of storage.

What is actually lost: a run that ends WITHOUT writing summary.md contributes nothing to memory. Those are predominantly the failed, crashed and killed runs — exactly the ones a summarizer would have had least to say about, and where the failure comment already carries the diagnosis. If that gap ever matters, the cheap fix is a fallback that stores the diff stat + commit subjects, not a second agent.

If ACCEPTED: update this epic's body and SPEC §14.3's wording to describe the delivered design (SPEC §14 was already re-marked delivered in 119b84d and records the substitution as this epic's open decision — that sentence is what needs replacing), then close. That is a ~15 minute docs change and it is the last thing standing between v0.1.0 and its tag, alongside ah-1cx.8.

If REJECTED: the summarizer role is the one remaining piece of Stage 3, and it needs its own bead with a prompt, a role entry and a place on the finalize path.

Subtasks 4 of 4 done

  • ah-ydx.1 — internal/mem0: REST client for live mem0.bigb.es P2 closed @Eugene Blikh
  • ah-ydx.2 — internal/ctxpack: Context Pack builder P2 closed @Eugene Blikh
  • ah-ydx.3 — Memory lifecycle: load-on-claim CONTEXT section, save-on-Done P2 closed @Eugene Blikh
  • ah-ydx.4 — Full Context Pack: thread comments, parent chain, git log sections in prompt P3 closed @Eugene Blikh

Depends on

No outgoing dependencies.

Depended on by

  • ah-ydx.4 — Full Context Pack: thread comments, parent chain, git log sections in prompt parent-child
  • ah-ydx.1 — internal/mem0: REST client for live mem0.bigb.es parent-child
  • ah-ydx.3 — Memory lifecycle: load-on-claim CONTEXT section, save-on-Done parent-child
  • ah-ydx.2 — internal/ctxpack: Context Pack builder parent-child

Unblocks — everything waiting on this, transitively

  • ah-ydx.4 — Full Context Pack: thread comments, parent chain, git log sections in prompt parent-child closed
  • ah-ydx.1 — internal/mem0: REST client for live mem0.bigb.es parent-child closed
  • ah-ydx.3 — Memory lifecycle: load-on-claim CONTEXT section, save-on-Done blocks closed
  • ah-ydx.2 — internal/ctxpack: Context Pack builder parent-child closed

No comments.

  • Eugene Blikh created the issue · 2026-07-13T02:36:28Z
  • Eugene Blikh added subtask ah-ydx.1 · 2026-07-18T16:23:55Z
  • Eugene Blikh added subtask ah-ydx.2 · 2026-07-18T16:23:56Z
  • Eugene Blikh added subtask ah-ydx.3 · 2026-07-18T16:23:57Z
  • Eugene Blikh added subtask ah-ydx.4 · 2026-07-18T19:22:34Z
  • Eugene Blikh updated notes to Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed. DECISION NEEDED: if the substitution is accepted, update the epic body + SPEC 14.3 wording and close this epic; otherwise the summarizer role is the one remaining piece. · 2026-07-20T02:38:22Z
  • Eugene Blikh added label milestone:stage-3 · 2026-07-20T03:08:44Z
  • Eugene Blikh removed label milestone:stage-3 · 2026-07-20T03:10:26Z
  • Eugene Blikh added label milestone:v0.1.0 · 2026-07-20T03:11:24Z
  • Eugene Blikh updated notes to Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed. DECISION STILL NEEDED — analysis added 2026-08-05 to make it a one-line call. RECOMMENDATION: ACCEPT the substitution and close the epic. Why the substitution is better than the design it replaced, not merely cheaper: - A summarizer ROLE means a SECOND pi run per task whose only output is prose. That is another model call, another timeout to enforce, another attempt that can crash, stall or be killed — all on the finalize path, which is the one path that must not get more failure modes (see ah-1cx.2 for what a failure there already costs). - The agent that did the work is the only party that knows WHY it made its choices. A summarizer reading the diff afterwards is reconstructing intent from artifacts; .task/summary.md is the agent stating it directly. The verdict-routing pipeline (ah-4el) already depends on that file's FIRST LINE, so the file is load-bearing regardless — a summarizer role would duplicate a channel that must exist anyway. - mem0's infer=true already does the extraction step a summarizer would have done, on the server, at the point of storage. What is actually lost: a run that ends WITHOUT writing summary.md contributes nothing to memory. Those are predominantly the failed, crashed and killed runs — exactly the ones a summarizer would have had least to say about, and where the failure comment already carries the diagnosis. If that gap ever matters, the cheap fix is a fallback that stores the diff stat + commit subjects, not a second agent. If ACCEPTED: update this epic's body and SPEC §14.3's wording to describe the delivered design (SPEC §14 was already re-marked delivered in 119b84d and records the substitution as this epic's open decision — that sentence is what needs replacing), then close. That is a ~15 minute docs change and it is the last thing standing between v0.1.0 and its tag, alongside ah-1cx.8. If REJECTED: the summarizer role is the one remaining piece of Stage 3, and it needs its own bead with a prompt, a role entry and a place on the finalize path. · 2026-08-05T03:11:17Z
Stored rows — what this pane was built from, as read
issues 1 row
id ah-ydx
content_hash 8735805091c14831debfbdb26c8f324f6832e8b80ebcc313e05201a7bd3c85f8
title Stage 3: mem0 memory lifecycle + Context Pack
description Per SPEC SS14.3: mem0 REST client (X-API-Key, scoping user_id=proj:<slug>/global, run_id=task:<id> — agent_id filter is buggy upstream); load cascade on claim -> .task/CONTEXT.md section; save on Done; post-run summarizer role; Context Pack builder (task+thread+parent-chain+memory+git, ~40k char budget, deterministic order, truncate-from-tail).
design
acceptance_criteria
notes Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed. DECISION STILL NEEDED — analysis added 2026-08-05 to make it a one-line call. RECOMMENDATION: ACCEPT the substitution and close the epic. Why the substitution is better than the design it replaced, not merely cheaper: - A summarizer ROLE means a SECOND pi run per task whose only output is prose. That is another model call, another timeout to enforce, another attempt that can crash, stall or be killed — all on the finalize path, which is the one path that must not get more failure modes (see ah-1cx.2 for what a failure there already costs). - The agent that did the work is the only party that knows WHY it made its choices. A summarizer reading the diff afterwards is reconstructing intent from artifacts; .task/summary.md is the agent stating it directly. The verdict-routing pipeline (ah-4el) already depends on that file's FIRST LINE, so the file is load-bearing regardless — a summarizer role would duplicate a channel that must exist anyway. - mem0's infer=true already does the extraction step a summarizer would have done, on the server, at the point of storage. What is actually lost: a run that ends WITHOUT writing summary.md contributes nothing to memory. Those are predominantly the failed, crashed and killed runs — exactly the ones a summarizer would have had least to say about, and where the failure comment already carries the diagnosis. If that gap ever matters, the cheap fix is a fallback that stores the diff stat + commit subjects, not a second agent. If ACCEPTED: update this epic's body and SPEC §14.3's wording to describe the delivered design (SPEC §14 was already re-marked delivered in 119b84d and records the substitution as this epic's open decision — that sentence is what needs replacing), then close. That is a ~15 minute docs change and it is the last thing standing between v0.1.0 and its tag, alongside ah-1cx.8. If REJECTED: the summarizer role is the one remaining piece of Stage 3, and it needs its own bead with a prompt, a role entry and a place on the finalize path.
status open
priority 3
issue_type epic
assignee NULL
estimated_minutes NULL
created_at 2026-07-12T23:36:28Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-08-05T00:11:18Z
closed_at NULL
closed_by_session
external_ref NULL
spec_id
compaction_level 0
compacted_at NULL
compacted_at_commit NULL
original_size NULL
sender
ephemeral 0
wisp_type
pinned 0
is_template 0
mol_type
work_type
source_system
metadata �{}
source_repo
close_reason
event_kind
actor
target
payload
await_type
await_id
timeout_ns 0
waiters
hook_bead
role_bead
agent_state
last_activity NULL
role_type
rig
due_at NULL
defer_until NULL
no_history 0
started_at NULL
is_blocked 0
labels 1 row
issue_id ah-ydx
label milestone:v0.1.0
dependencies 4 rows
id 009fff20-73db-5b19-ae19-ffc0df92a7a8
issue_id ah-ydx.4
type parent-child
created_at 2026-07-18T19:22:34Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-ydx
depends_on_wisp_id NULL
depends_on_external NULL
id 2e39c703-6167-596b-98fb-9af66b96cae8
issue_id ah-ydx.1
type parent-child
created_at 2026-07-18T16:23:55Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-ydx
depends_on_wisp_id NULL
depends_on_external NULL
id 3125ac59-cda6-57f7-9a1a-88ec421121e4
issue_id ah-ydx.3
type parent-child
created_at 2026-07-18T16:23:57Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-ydx
depends_on_wisp_id NULL
depends_on_external NULL
id bb87d723-c711-5998-98e2-191cec2ed2ec
issue_id ah-ydx.2
type parent-child
created_at 2026-07-18T16:23:56Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-ydx
depends_on_wisp_id NULL
depends_on_external NULL
events 6 rows
id 019f58b0-7a39-74fd-ae5f-365c75d5aab6
issue_id ah-ydx
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-07-13T02:36:28Z
id 019f7cbe-baaa-769f-9fff-c7e58ddde3fc
issue_id ah-ydx
event_type updated
actor Eugene Blikh
old_value {"id":"ah-ydx","title":"Stage 3: mem0 memory lifecycle + Context Pack","description":"Per SPEC SS14.3: mem0 REST client (X-API-Key, scoping user_id=proj:\u003cslug\u003e/global, run_id=task:\u003cid\u003e — agent_id filter is buggy upstream); load cascade on claim -\u003e .task/CONTEXT.md section; save on Done; post-run summarizer role; Context Pack builder (task+thread+parent-chain+memory+git, ~40k char budget, deterministic order, truncate-from-tail).","status":"open","priority":3,"issue_type":"epic","owner":"bigbes@gmail.com","created_at":"2026-07-12T23:36:28Z","created_by":"Eugene Blikh","updated_at":"2026-07-12T23:36:28Z"}
new_value {"notes":"Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed. DECISION NEEDED: if the substitution is accepted, update the epic body + SPEC 14.3 wording and close this epic; otherwise the summarizer role is the one remaining piece."}
comment NULL
created_at 2026-07-20T02:38:22Z
id 019f7cda-891b-7737-8967-e678cdd61df5
issue_id ah-ydx
event_type label_added
actor Eugene Blikh
old_value NULL
new_value NULL
comment Added label: milestone:stage-3
created_at 2026-07-20T03:08:44Z
id 019f7cdc-1843-7591-9c7a-0f4c4e8d64e0
issue_id ah-ydx
event_type label_removed
actor Eugene Blikh
old_value NULL
new_value NULL
comment Removed label: milestone:stage-3
created_at 2026-07-20T03:10:26Z
id 019f7cdc-faf0-7877-96dc-95718e698a7f
issue_id ah-ydx
event_type label_added
actor Eugene Blikh
old_value NULL
new_value NULL
comment Added label: milestone:v0.1.0
created_at 2026-07-20T03:11:24Z
id 019fcf42-9fdc-743d-9ac2-ffa1b4b105ed
issue_id ah-ydx
event_type updated
actor Eugene Blikh
old_value {"id":"ah-ydx","title":"Stage 3: mem0 memory lifecycle + Context Pack","description":"Per SPEC SS14.3: mem0 REST client (X-API-Key, scoping user_id=proj:\u003cslug\u003e/global, run_id=task:\u003cid\u003e — agent_id filter is buggy upstream); load cascade on claim -\u003e .task/CONTEXT.md section; save on Done; post-run summarizer role; Context Pack builder (task+thread+parent-chain+memory+git, ~40k char budget, deterministic order, truncate-from-tail).","notes":"Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed. DECISION NEEDED: if the substitution is accepted, update the epic body + SPEC 14.3 wording and close this epic; otherwise the summarizer role is the one remaining piece.","status":"open","priority":3,"issue_type":"epic","owner":"bigbes@gmail.com","created_at":"2026-07-12T23:36:28Z","created_by":"Eugene Blikh","updated_at":"2026-07-19T23:38:22Z","labels":["milestone:v0.1.0"]}
new_value {"notes":"Audit note (2026-07-20): the SPEC 14.3 'post-run summarizer role' was never implemented as a role — the shipped design substitutes the agent-authored .task/summary.md + mem0 infer=true LLM extraction at Done-time (memory.go). All four ah-ydx children are closed.\n\nDECISION STILL NEEDED — analysis added 2026-08-05 to make it a one-line call.\n\nRECOMMENDATION: ACCEPT the substitution and close the epic.\n\nWhy the substitution is better than the design it replaced, not merely cheaper:\n- A summarizer ROLE means a SECOND pi run per task whose only output is prose. That is another model call, another timeout to enforce, another attempt that can crash, stall or be killed — all on the finalize path, which is the one path that must not get more failure modes (see ah-1cx.2 for what a failure there already costs).\n- The agent that did the work is the only party that knows WHY it made its choices. A summarizer reading the diff afterwards is reconstructing intent from artifacts; .task/summary.md is the agent stating it directly. The verdict-routing pipeline (ah-4el) already depends on that file's FIRST LINE, so the file is load-bearing regardless — a summarizer role would duplicate a channel that must exist anyway.\n- mem0's infer=true already does the extraction step a summarizer would have done, on the server, at the point of storage.\n\nWhat is actually lost: a run that ends WITHOUT writing summary.md contributes nothing to memory. Those are predominantly the failed, crashed and killed runs — exactly the ones a summarizer would have had least to say about, and where the failure comment already carries the diagnosis. If that gap ever matters, the cheap fix is a fallback that stores the diff stat + commit subjects, not a second agent.\n\nIf ACCEPTED: update this epic's body and SPEC §14.3's wording to describe the delivered design (SPEC §14 was already re-marked delivered in 119b84d and records the substitution as this epic's open decision — that sentence is what needs replacing), then close. That is a ~15 minute docs change and it is the last thing standing between v0.1.0 and its tag, alongside ah-1cx.8.\n\nIf REJECTED: the summarizer role is the one remaining piece of Stage 3, and it needs its own bead with a prompt, a role entry and a place on the finalize path."}
comment NULL
created_at 2026-08-05T03:11:17Z