forge: follow-ups to the outbox and reconciliation (late webhook r+, truncated cursor, stuck candidate config, live pending at startup) #24
Loading…
Reference in a new issue
No description provided.
Delete branch "lu/forge-followups"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Review follow-ups to #14 (forge outbox + reconciliation, SPEC §8.3). Builds on #14 — until it lands this diff includes it.
r+is bound to the head like a reconciled one. Anissue_commentwebhook whose comment is more than 60 s old (redelivered by hand, stuck in Forgejo's backlog) no longer approves the current head outright: the head must have been recorded inforge_refsat least 5 s (CLOCK_SKEW_SECS) before the comment'screated_at— the same rule reconciled comments use (strict: when clocks disagree, refuse); otherwise the bot asks forr+again..kb/ci.tomlcan't be read fails visibly: apendingkrisbuild/queuestatus explains the retry, and aftermerge_queue_stall_secs(new, default 900) and ≥ 3 attempts the entry fails with aretryhint.pendingstatuses spares live subjects: kept while the graph is still running or the queue entry still approved/testing.Tests:
reconcile::a_late_webhook_r_plus_is_bound_like_a_reconciled_one,reconcile::a_truncated_comment_listing_still_advances,merge_queue::a_persistently_unreadable_candidate_config_fails_visibly,outbox::stale_pending_is_dropped_only_when_its_subject_is_over.🤖 Generated with Claude Code
Conflicts: SPEC.md and db.rs (agent_enrollments beside the forge tables; both kept), state.rs and scheduler/status.rs. The node-health status behaviour — infra vs verdict descriptions, a requeued attempt re-posting `pending` ("... (retrying on another node)") — now runs through the outbox sweep: the per-task bookkeeping is keyed on (state, attempt), and completion enqueues the final statuses in its own transaction as before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>@krisbuild r+
Merged as
c5d5f2de35.