~bigbes/agents-dev · parade

main · last commit 13 days ago · 7g0stsfu

← Back to the parade

ah-xuc.8 reconcile: spec-driven claim, Triage bounce, parked buckets, per-run timeout Past Stand

status: closed P2 feature @Eugene Blikh
bd reopen ah-xuc.8
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-13T05:16:00Z
Started2026-07-13T06:23:38Z
Updated2026-07-13T06:57:17Z
Closed2026-07-13T06:57:17Z
Description
Claim-path integration of Stage 2. Same-package constraint: this bead owns the internal/reconcile edits for the claim path; the finalize-path bead must not start until this one is committed.

iterate(): canonical buckets triage/blocked/question become parked buckets — superviseRuntime only (detached supervision persists runtime truth; no claim, no kill, no card moves, no comments). They are never claim sources and never terminal targets. Blocked and Question get real semantics in Stage 4; Stage 2 only reserves and parks them.

claim(): resolve the Task Spec via internal/spec from BoardTask.Labels plus Description. A validation failure bounces: MoveToBucket(triage) first, then one diagnostic comment listing the problems verbatim plus a hint to fix the spec and drag back to Ready, then event spec_rejected — move-then-comment discipline so a persistent move failure cannot spam comments; appendEvent dedup applies. No record is persisted and the card never goes to Failed for spec problems. Warnings (unknown fields) never block: append them to the claim comment.

Success path: the spec role name resolves through cfg.Roles; model override applies; the prompt renders over the frontmatter-stripped Body; resolved SkillPaths go into StartSpec.Skills; the effective timeout (spec override or config default) goes into StartSpec.Timeout and is persisted as Run.Timeout.

check(): deadline enforcement uses run.Timeout when positive, else cfg.Timeout — in both the running arm and the degraded neither-state arm.

Extend fakes_test.go (fake runner captures Skills and Timeout; board tasks carry Labels) and cover: each bounce class end to end, merge precedence reaching StartSpec, parked buckets neither claim nor kill while detached supervision still finalizes a finished runtime, per-run timeout enforced at the right boundary with the fake clock — both shorter and longer than the config default.
Acceptance criteria
go test ./internal/reconcile/... green, go vet clean; bounce tests assert move-before-comment ordering and zero Failed transitions; parked-bucket tests assert no board writes; timeout tests cover run.Timeout smaller and larger than the config default
Notes
Additional: pre-existing gofmt drift in internal/reconcile/reconcile_test.go (comment alignment around lines 983-984 and 1345, present since before Stage 2) — run gofmt -w on the files you touch and fold the fix into this bead's commit.

Depends on

  • ah-xuc.2 — internal/spec: Task Spec frontmatter parse, type-label defaults, validation blocks closed
  • ah-xuc — Stage 2: webhooks, Task Spec, full buckets, Telegram, srht push, watchdog parent-child closed
  • ah-xuc.3 — vikunja: fetch task labels into BoardTask.Labels blocks closed
  • ah-xuc.4 — store: migration v2 — per-run timeout column blocks closed

Depended on by

  • ah-xuc.9 — reconcile: publish review branch, watchdog on stale events, Telegram notifications blocks

Prerequisite chain — everything this waits on, transitively

  • ah-xuc.2 — internal/spec: Task Spec frontmatter parse, type-label defaults, validation blocks closed
  • ah-xuc — Stage 2: webhooks, Task Spec, full buckets, Telegram, srht push, watchdog parent-child closed
  • ah-xuc.1 — Stage 2 foundation: domain buckets/outcome, ports contracts, config surface blocks closed
  • ah-xuc.3 — vikunja: fetch task labels into BoardTask.Labels blocks closed
  • ah-xuc.4 — store: migration v2 — per-run timeout column blocks closed

Unblocks — everything waiting on this, transitively

  • ah-xuc.9 — reconcile: publish review branch, watchdog on stale events, Telegram notifications blocks closed
  • ah-xuc.12 — docs: sync SPEC with Stage 2 behavior blocks closed
  • ah-xuc.10 — cmd/agenthubd: wire webhook secret and Telegram notifier blocks closed
  • ah-xuc.11 — e2e: Stage 2 flows — webhook poke, Triage bounce, skills, publish, watchdog, Telegram blocks closed

No comments.

Close reason

9823250 + 06_pin commit; review merge-ready (all SPEC section-10 invariants traced clean); validator 10/10 incl. e2e byte-identical for spec-less tasks; adopt-over-bounce coverage gap closed
  • Eugene Blikh added under epic ah-xuc · 2026-07-13T08:15:59Z
  • Eugene Blikh created the issue · 2026-07-13T08:15:59Z
  • Eugene Blikh added dependency on ah-xuc.2 · 2026-07-13T08:16:50Z
  • Eugene Blikh added dependency on ah-xuc.3 · 2026-07-13T08:16:51Z
  • Eugene Blikh added dependency on ah-xuc.4 · 2026-07-13T08:16:51Z
  • Eugene Blikh ah-xuc.9 now depends on this · 2026-07-13T08:16:52Z
  • Eugene Blikh updated notes to Additional: pre-existing gofmt drift in internal/reconcile/reconcile_test.go (comment alignment around lines 983-984 and 1345, present since before Stage 2) — run gofmt -w on the files you touch and fold the fix into this bead's commit. · 2026-07-13T08:41:03Z
  • Eugene Blikh claimed · 2026-07-13T09:23:38Z
  • Eugene Blikh closed the issue · 2026-07-13T09:57:16Z
    9823250 + 06_pin commit; review merge-ready (all SPEC section-10 invariants traced clean); validator 10/10 incl. e2e byte-identical for spec-less tasks; adopt-over-bounce coverage gap closed
  • Eugene Blikh added label milestone:stage-2 · 2026-07-20T03:08:47Z
  • Eugene Blikh removed label milestone:stage-2 · 2026-07-20T03:10:26Z
Stored rows — what this pane was built from, as read
issues 1 row
id ah-xuc.8
content_hash d48513a80bea7b4ebcfc74514ea6d2a7079500b44f1b1eebca7b445db6e316b7
title reconcile: spec-driven claim, Triage bounce, parked buckets, per-run timeout
description Claim-path integration of Stage 2. Same-package constraint: this bead owns the internal/reconcile edits for the claim path; the finalize-path bead must not start until this one is committed. iterate(): canonical buckets triage/blocked/question become parked buckets — superviseRuntime only (detached supervision persists runtime truth; no claim, no kill, no card moves, no comments). They are never claim sources and never terminal targets. Blocked and Question get real semantics in Stage 4; Stage 2 only reserves and parks them. claim(): resolve the Task Spec via internal/spec from BoardTask.Labels plus Description. A validation failure bounces: MoveToBucket(triage) first, then one diagnostic comment listing the problems verbatim plus a hint to fix the spec and drag back to Ready, then event spec_rejected — move-then-comment discipline so a persistent move failure cannot spam comments; appendEvent dedup applies. No record is persisted and the card never goes to Failed for spec problems. Warnings (unknown fields) never block: append them to the claim comment. Success path: the spec role name resolves through cfg.Roles; model override applies; the prompt renders over the frontmatter-stripped Body; resolved SkillPaths go into StartSpec.Skills; the effective timeout (spec override or config default) goes into StartSpec.Timeout and is persisted as Run.Timeout. check(): deadline enforcement uses run.Timeout when positive, else cfg.Timeout — in both the running arm and the degraded neither-state arm. Extend fakes_test.go (fake runner captures Skills and Timeout; board tasks carry Labels) and cover: each bounce class end to end, merge precedence reaching StartSpec, parked buckets neither claim nor kill while detached supervision still finalizes a finished runtime, per-run timeout enforced at the right boundary with the fake clock — both shorter and longer than the config default.
design
acceptance_criteria go test ./internal/reconcile/... green, go vet clean; bounce tests assert move-before-comment ordering and zero Failed transitions; parked-bucket tests assert no board writes; timeout tests cover run.Timeout smaller and larger than the config default
notes Additional: pre-existing gofmt drift in internal/reconcile/reconcile_test.go (comment alignment around lines 983-984 and 1345, present since before Stage 2) — run gofmt -w on the files you touch and fold the fix into this bead's commit.
status closed
priority 2
issue_type feature
assignee Eugene Blikh
estimated_minutes NULL
created_at 2026-07-13T05:16:00Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-07-13T06:57:17Z
closed_at 2026-07-13T06:57:17Z
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 9823250 + 06_pin commit; review merge-ready (all SPEC section-10 invariants traced clean); validator 10/10 incl. e2e byte-identical for spec-less tasks; adopt-over-bounce coverage gap closed
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 2026-07-13T06:23:38Z
is_blocked 0
dependencies 5 rows
id 356d9515-68da-5d7b-a5cd-bd71da198917
issue_id ah-xuc.8
type blocks
created_at 2026-07-13T08:16:50Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-xuc.2
depends_on_wisp_id NULL
depends_on_external NULL
id 3fba1fe9-f3a2-5360-8b0a-f344c7e79be6
issue_id ah-xuc.8
type parent-child
created_at 2026-07-13T08:15:59Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-xuc
depends_on_wisp_id NULL
depends_on_external NULL
id 7766244e-039d-5420-8a40-8c6443c17506
issue_id ah-xuc.9
type blocks
created_at 2026-07-13T08:16:52Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-xuc.8
depends_on_wisp_id NULL
depends_on_external NULL
id 841187d0-e80a-5291-95fb-583ea60fc977
issue_id ah-xuc.8
type blocks
created_at 2026-07-13T08:16:51Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-xuc.3
depends_on_wisp_id NULL
depends_on_external NULL
id ac3cce7b-41cc-57f3-8c73-11f6866b23bb
issue_id ah-xuc.8
type blocks
created_at 2026-07-13T08:16:51Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-xuc.4
depends_on_wisp_id NULL
depends_on_external NULL
events 6 rows
id 019f59e7-50cc-78f1-b52d-8e918c02e62a
issue_id ah-xuc.8
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-07-13T08:15:59Z
id 019f59fe-4220-7271-929f-b4b825b88931
issue_id ah-xuc.8
event_type updated
actor Eugene Blikh
old_value {"id":"ah-xuc.8","title":"reconcile: spec-driven claim, Triage bounce, parked buckets, per-run timeout","description":"Claim-path integration of Stage 2. Same-package constraint: this bead owns the internal/reconcile edits for the claim path; the finalize-path bead must not start until this one is committed.\n\niterate(): canonical buckets triage/blocked/question become parked buckets — superviseRuntime only (detached supervision persists runtime truth; no claim, no kill, no card moves, no comments). They are never claim sources and never terminal targets. Blocked and Question get real semantics in Stage 4; Stage 2 only reserves and parks them.\n\nclaim(): resolve the Task Spec via internal/spec from BoardTask.Labels plus Description. A validation failure bounces: MoveToBucket(triage) first, then one diagnostic comment listing the problems verbatim plus a hint to fix the spec and drag back to Ready, then event spec_rejected — move-then-comment discipline so a persistent move failure cannot spam comments; appendEvent dedup applies. No record is persisted and the card never goes to Failed for spec problems. Warnings (unknown fields) never block: append them to the claim comment.\n\nSuccess path: the spec role name resolves through cfg.Roles; model override applies; the prompt renders over the frontmatter-stripped Body; resolved SkillPaths go into StartSpec.Skills; the effective timeout (spec override or config default) goes into StartSpec.Timeout and is persisted as Run.Timeout.\n\ncheck(): deadline enforcement uses run.Timeout when positive, else cfg.Timeout — in both the running arm and the degraded neither-state arm.\n\nExtend fakes_test.go (fake runner captures Skills and Timeout; board tasks carry Labels) and cover: each bounce class end to end, merge precedence reaching StartSpec, parked buckets neither claim nor kill while detached supervision still finalizes a finished runtime, per-run timeout enforced at the right boundary with the fake clock — both shorter and longer than the config default.","acceptance_criteria":"go test ./internal/reconcile/... green, go vet clean; bounce tests assert move-before-comment ordering and zero Failed transitions; parked-bucket tests assert no board writes; timeout tests cover run.Timeout smaller and larger than the config default","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-13T05:16:00Z","created_by":"Eugene Blikh","updated_at":"2026-07-13T05:16:00Z"}
new_value {"notes":"\nAdditional: pre-existing gofmt drift in internal/reconcile/reconcile_test.go (comment alignment around lines 983-984 and 1345, present since before Stage 2) — run gofmt -w on the files you touch and fold the fix into this bead's commit."}
comment NULL
created_at 2026-07-13T08:41:03Z
id 019f5a25-3e77-79a0-9c9b-7f4c714863d5
issue_id ah-xuc.8
event_type claimed
actor Eugene Blikh
old_value {"id":"ah-xuc.8","title":"reconcile: spec-driven claim, Triage bounce, parked buckets, per-run timeout","description":"Claim-path integration of Stage 2. Same-package constraint: this bead owns the internal/reconcile edits for the claim path; the finalize-path bead must not start until this one is committed.\n\niterate(): canonical buckets triage/blocked/question become parked buckets — superviseRuntime only (detached supervision persists runtime truth; no claim, no kill, no card moves, no comments). They are never claim sources and never terminal targets. Blocked and Question get real semantics in Stage 4; Stage 2 only reserves and parks them.\n\nclaim(): resolve the Task Spec via internal/spec from BoardTask.Labels plus Description. A validation failure bounces: MoveToBucket(triage) first, then one diagnostic comment listing the problems verbatim plus a hint to fix the spec and drag back to Ready, then event spec_rejected — move-then-comment discipline so a persistent move failure cannot spam comments; appendEvent dedup applies. No record is persisted and the card never goes to Failed for spec problems. Warnings (unknown fields) never block: append them to the claim comment.\n\nSuccess path: the spec role name resolves through cfg.Roles; model override applies; the prompt renders over the frontmatter-stripped Body; resolved SkillPaths go into StartSpec.Skills; the effective timeout (spec override or config default) goes into StartSpec.Timeout and is persisted as Run.Timeout.\n\ncheck(): deadline enforcement uses run.Timeout when positive, else cfg.Timeout — in both the running arm and the degraded neither-state arm.\n\nExtend fakes_test.go (fake runner captures Skills and Timeout; board tasks carry Labels) and cover: each bounce class end to end, merge precedence reaching StartSpec, parked buckets neither claim nor kill while detached supervision still finalizes a finished runtime, per-run timeout enforced at the right boundary with the fake clock — both shorter and longer than the config default.","acceptance_criteria":"go test ./internal/reconcile/... green, go vet clean; bounce tests assert move-before-comment ordering and zero Failed transitions; parked-bucket tests assert no board writes; timeout tests cover run.Timeout smaller and larger than the config default","notes":"\nAdditional: pre-existing gofmt drift in internal/reconcile/reconcile_test.go (comment alignment around lines 983-984 and 1345, present since before Stage 2) — run gofmt -w on the files you touch and fold the fix into this bead's commit.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-07-13T05:16:00Z","created_by":"Eugene Blikh","updated_at":"2026-07-13T05:41:03Z"}
new_value {"assignee":"Eugene Blikh","status":"in_progress"}
comment NULL
created_at 2026-07-13T09:23:38Z
id 019f5a44-0c63-7e3c-805b-1be979864ba7
issue_id ah-xuc.8
event_type closed
actor Eugene Blikh
old_value
new_value 9823250 + 06_pin commit; review merge-ready (all SPEC section-10 invariants traced clean); validator 10/10 incl. e2e byte-identical for spec-less tasks; adopt-over-bounce coverage gap closed
comment NULL
created_at 2026-07-13T09:57:16Z
id 019f7cda-9350-7927-9070-565ee26c4ff2
issue_id ah-xuc.8
event_type label_added
actor Eugene Blikh
old_value NULL
new_value NULL
comment Added label: milestone:stage-2
created_at 2026-07-20T03:08:47Z
id 019f7cdc-1648-73a1-bc08-ee3ba49e8489
issue_id ah-xuc.8
event_type label_removed
actor Eugene Blikh
old_value NULL
new_value NULL
comment Removed label: milestone:stage-2
created_at 2026-07-20T03:10:26Z