issues: close wave-1 fixes 14,15,16,17,20,21,22
Message
issues: close wave-1 fixes 14,15,16,17,20,21,22
Diff
.forge/issues/3e9dd37e-8323-4d42-a247-f4a93aad5194/issue.md+2 −2
--- a/.forge/issues/3e9dd37e-8323-4d42-a247-f4a93aad5194/issue.md+++ b/.forge/issues/3e9dd37e-8323-4d42-a247-f4a93aad5194/issue.md@@ -1,12 +1,12 @@11 ---22 id: 3e9dd37e-8323-4d42-a247-f4a93aad519433 title: 'task create: --body/--column flags (feature)'4-state: open4+state: closed55 labels:66 - dogfood77 assignees: []88 milestone: null99 created: 2026-09-08T04:42:15Z10-updated: null10+updated: 2026-09-08T05:58:05Z1111 ---1212 task create is title-only; body + column are file edits after. Add --body and --column (todo|doing|blocked|done per spec §task); update spec/schema.md + fixtures + -h within budget. Acceptance: 'f0rge task create --title X --body B --column doing' → task with body, status doing, correct column in list; budgets hold.
.forge/issues/6285a06f-dfa3-413e-98ad-f2d64e0abee9/issue.md+2 −2
--- a/.forge/issues/6285a06f-dfa3-413e-98ad-f2d64e0abee9/issue.md+++ b/.forge/issues/6285a06f-dfa3-413e-98ad-f2d64e0abee9/issue.md@@ -1,13 +1,13 @@11 ---22 id: 6285a06f-dfa3-413e-98ad-f2d64e0abee933 title: 'merge branch: merge record links to fresh uuid, not the PR'4-state: open4+state: closed55 labels:66 - dogfood77 - pri88 assignees: []99 milestone: null1010 created: 2026-09-08T04:42:15Z11-updated: null11+updated: 2026-09-08T05:58:05Z1212 ---1313 Evidence: 'f0rge merge dog-boot' wrote record pr:2a2f1add.. while the real PR was e769d904..; 'f0rge merge dog-pr' wrote pr:5c99b18d.., real PR 78e0c97e.. (folder payloads link correctly; branch payloads generate a fresh uuid because pr_by_head finds nothing on main). Fix in cmd/merge.rs from_branch: when a PR whose head == <branch> exists (reachable via the patch or a known list), use its uuid; fresh uuid only as last resort. Acceptance: 'f0rge merge <branch>' writes record pr: <canonical pr uuid> (temp-repo test). Bitter-lesson: pure resolution, no locks, no new stored state.
.forge/issues/943e9b22-141a-4cd2-8c55-5eda2ba0b398/issue.md+2 −2
--- a/.forge/issues/943e9b22-141a-4cd2-8c55-5eda2ba0b398/issue.md+++ b/.forge/issues/943e9b22-141a-4cd2-8c55-5eda2ba0b398/issue.md@@ -1,14 +1,14 @@11 ---22 id: 943e9b22-141a-4cd2-8c55-5eda2ba0b39833 title: 'skill has two sources: --skill const vs skill/skill.md diverged; help/contract openings confusable'4-state: open4+state: closed55 labels:66 - dogfood77 - pri88 assignees: []99 milestone: null1010 created: 2026-09-08T05:04:38Z11-updated: null11+updated: 2026-09-08T05:58:05Z1212 ---1313 INCIDENT: an agent burned ~12 tool calls convinced `f0rge --skill` printed generic help. Current binary is fine (--skill=549B/10ln contract, root=150B/5ln help — distinct, verified md5==target/release). But digging found a REAL design smell: two documents both present as "the skill" and they have drifted:1414 - cmd/skill.rs SKILL_TEXT (549B): id/number/frontmatter/ci-verdict/never-delete/usage/json
.forge/issues/a2697032-69ca-4561-9acf-ff3fd7be08d9/issue.md+2 −2
--- a/.forge/issues/a2697032-69ca-4561-9acf-ff3fd7be08d9/issue.md+++ b/.forge/issues/a2697032-69ca-4561-9acf-ff3fd7be08d9/issue.md@@ -1,12 +1,12 @@11 ---22 id: a2697032-69ca-4561-9acf-ff3fd7be08d933 title: 'issue list⇄close round-trip: list renders #1, close wants 1'4-state: open4+state: closed55 labels:66 - dogfood77 assignees: []88 milestone: null99 created: 2026-09-08T04:42:15Z10-updated: 2026-09-08T04:44:54Z10+updated: 2026-09-08T05:58:05Z1111 ---1212 Evidence: "f0rge issue list" prints "#1 open .."; "f0rge issue close #1" -> usage error. Copy-paste from list never works. Fix: set_state verbs (close/reopen/view/comment/assign/label/edit) accept "#N", "N", and uuid; or render list ids copy-safe. Acceptance: close "$(f0rge issue list | awk "NR==2{print \$1}")" round-trips verbatim.
.forge/issues/b873332e-737f-442e-be74-d83732fab9ad/issue.md+2 −2
--- a/.forge/issues/b873332e-737f-442e-be74-d83732fab9ad/issue.md+++ b/.forge/issues/b873332e-737f-442e-be74-d83732fab9ad/issue.md@@ -1,13 +1,13 @@11 ---22 id: b873332e-737f-442e-be74-d83732fab9ad33 title: 'merge hardening: base-aware branch diff + collision assistance (bitter-lesson guardrails)'4-state: open4+state: closed55 labels:66 - dogfood77 - pri88 assignees: []99 milestone: null1010 created: 2026-09-08T04:45:13Z11-updated: null11+updated: 2026-09-08T05:58:05Z1212 ---1313 Umbrella for the merge-flow debt; coordinate with #15/#17 (likely one agent, one PR in cmd/merge.rs). Goals: (a) branch merges compute the diff against a base that preserves already-landed forge state (base-aware), (b) fork-drift surfaces as a precise conflict list (extend SEC-05 file listing to .forge deletions) instead of silent loss, (c) record links to the real PR (see #15). EXPLICIT NON-GOALS so the philosophy holds: no locks, no claim protocols, no auto-resolvers, no merge engine, no CI framework — the CLI only lists what conflicted and stops; the reconciling agent decides. Acceptance: merging fork-drifted branches never silently loses state; conflicts = one line + file list; non-goals enforced in review.
.forge/issues/e221d8ed-d5c8-4aed-8873-8acb0d6f02c2/issue.md+2 −2
--- a/.forge/issues/e221d8ed-d5c8-4aed-8873-8acb0d6f02c2/issue.md+++ b/.forge/issues/e221d8ed-d5c8-4aed-8873-8acb0d6f02c2/issue.md@@ -1,13 +1,13 @@11 ---22 id: e221d8ed-d5c8-4aed-8873-8acb0d6f02c233 title: 'merge branch: fork-drifted diff can silently delete shared .forge/prs records'4-state: open4+state: closed55 labels:66 - dogfood77 - pri88 assignees: []99 milestone: null1010 created: 2026-09-08T04:42:15Z11-updated: null11+updated: 2026-09-08T05:58:05Z1212 ---1313 Evidence: dog-issue forked before dog-pr merged; its main..head diff contained deletions of already-landed PR records (t1/t2/78e0c97e folders); orchestrator avoided data loss by merging the folder payload (disjoint range) instead of the branch diff. Acceptance: merging a branch whose base predates other landings must NOT silently delete forge state; deletions of .forge/prs/* surface as conflicts (file list + stop), never applied silently. File: cmd/merge.rs (base-aware diff / deletion surfacing). Bitter-lesson: no merge engine, no auto-resolution — surface the conflict, list files, stop; the reconciling agent decides.
.forge/issues/ef796fed-f96d-480e-af29-4f22e46fd72c/issue.md+2 −2
--- a/.forge/issues/ef796fed-f96d-480e-af29-4f22e46fd72c/issue.md+++ b/.forge/issues/ef796fed-f96d-480e-af29-4f22e46fd72c/issue.md@@ -1,13 +1,13 @@11 ---22 id: ef796fed-f96d-480e-af29-4f22e46fd72c33 title: 'merge conflict output: file names only; reconciler needs hunks/context'4-state: open4+state: closed55 labels:66 - dogfood77 - pri88 assignees: []99 milestone: null1010 created: 2026-09-08T04:52:27Z11-updated: null11+updated: 2026-09-08T05:58:05Z1212 ---1313 Evidence: `f0rge merge` conflict path parses `git apply --check` stderr into a filename list, then one-line error "merge conflict: <files>". The reconciling agent must re-derive both sides by hand (git diff base..head, manual 3-way). Fix within cmd/merge.rs conflict path, NO machinery (bitter lesson: no auto-resolve, no merge engine): attach per-file conflict context to the merge record body (both sides"\ hunks / 3-way context) so the resolving agent can act on the record alone. Error line stays one line; richer detail lives in the merge record body (+ optional conflict sidecar in the record). Acceptance: after a conflicted merge, the fail record body contains per-file conflict context and a fresh agent can resolve without re-running git diff. Cross-refs #15/#17/#20 (same merge-flow cluster, coordinate — likely one PR).