Mirror Markdown-imported issues to the mapped Forgejo repository #83

Open
opened 2026-10-11 13:19:57 +08:00 by Breadway · 3 comments
Owner

Observed while setting up the breadram implementation backlog on 2026-10-11.

Reproduction

  1. Use project RAM, mapped to Breadway/breadram, with repository syncing enabled.
  2. POST /api/import with an outline containing six milestone headings and 33 unchecked issue items.
  3. Read GET /api/issues?project=RAM and list Forgejo issues for Breadway/breadram.
  4. Update the imported cards with full bodies and priorities through the normal issue PATCH API.

Observed

All 33 RAM cards exist in breadboard with their epic assignments and detailed content. Every forgejo_ref is null, and the mapped Forgejo repository has zero issues. Updating the imported cards did not create Forgejo counterparts.

Expected

Importing issues into an enabled, mapped project should use the same Forgejo creation/linking path as normal issue creation, or explicitly expose a recoverable pending-sync state. A successful import should not silently leave the backlog outside the configured repository sync.

Impact

RAM-1 through RAM-33 are usable in breadboard but are not mirrored to Forgejo. Preserve their existing keys, epics, bodies, priorities, and dependency links when repairing them.

Acceptance criteria

  • Import uses the shared create/link behavior for mapped projects and reports writeback failures clearly.
  • Provide a supported, idempotent repair for already-imported unlinked issues without deleting/recreating breadboard cards or changing their keys.
  • Verify successful import, denied Forgejo writes, retry, duplicate prevention, and repository-less project import.
  • Repair and verify RAM-1 through RAM-33 after explicit authorization.

Confidence: high for the observed missing linkage, verified directly through both live APIs. Root cause has not been inspected.

Observed while setting up the breadram implementation backlog on 2026-10-11. ### Reproduction 1. Use project RAM, mapped to Breadway/breadram, with repository syncing enabled. 2. POST /api/import with an outline containing six milestone headings and 33 unchecked issue items. 3. Read GET /api/issues?project=RAM and list Forgejo issues for Breadway/breadram. 4. Update the imported cards with full bodies and priorities through the normal issue PATCH API. ### Observed All 33 RAM cards exist in breadboard with their epic assignments and detailed content. Every forgejo_ref is null, and the mapped Forgejo repository has zero issues. Updating the imported cards did not create Forgejo counterparts. ### Expected Importing issues into an enabled, mapped project should use the same Forgejo creation/linking path as normal issue creation, or explicitly expose a recoverable pending-sync state. A successful import should not silently leave the backlog outside the configured repository sync. ### Impact RAM-1 through RAM-33 are usable in breadboard but are not mirrored to Forgejo. Preserve their existing keys, epics, bodies, priorities, and dependency links when repairing them. ### Acceptance criteria - Import uses the shared create/link behavior for mapped projects and reports writeback failures clearly. - Provide a supported, idempotent repair for already-imported unlinked issues without deleting/recreating breadboard cards or changing their keys. - Verify successful import, denied Forgejo writes, retry, duplicate prevention, and repository-less project import. - Repair and verify RAM-1 through RAM-33 after explicit authorization. Confidence: high for the observed missing linkage, verified directly through both live APIs. Root cause has not been inspected.
Author
Owner

Independent review of PR #98 at head a1a2a28871: CHANGES REQUESTED. Full findings: PR comment 5366. Summary: (1) retry/repair of OLD unlinked cards can duplicate Forgejo issues when the webhook echo or reconcile races the link (claim window is 5 minutes) and link failure orphans the remote issue; (2) identical-title ambiguity is silently resolved; (3) no explicit repair operation or dry-run, repair is only an implicit re-POST of the original outline; (4) CLI, api-client and web UI ignore pending_writebacks; (5) one global import mutex held across unbounded Forgejo calls, client has no timeout; (6) checked items imported as done are not closed remotely. Local tests, clippy, check-docs, web build and the CI check on this SHA pass. Full BB-96 scope is retained: RAM-1..33 repair has not been performed and is not authorized by this review. The PR body Closes #83 reference was replaced with Refs #83 so merge cannot cascade this card to done. Not merged.

Independent review of PR https://git.breadway.dev/Breadway/breadboard/pulls/98 at head a1a2a28871ac30929d706a4077b28114fef41216: CHANGES REQUESTED. Full findings: PR comment 5366. Summary: (1) retry/repair of OLD unlinked cards can duplicate Forgejo issues when the webhook echo or reconcile races the link (claim window is 5 minutes) and link failure orphans the remote issue; (2) identical-title ambiguity is silently resolved; (3) no explicit repair operation or dry-run, repair is only an implicit re-POST of the original outline; (4) CLI, api-client and web UI ignore pending_writebacks; (5) one global import mutex held across unbounded Forgejo calls, client has no timeout; (6) checked items imported as done are not closed remotely. Local tests, clippy, check-docs, web build and the CI check on this SHA pass. Full BB-96 scope is retained: RAM-1..33 repair has not been performed and is not authorized by this review. The PR body Closes #83 reference was replaced with Refs #83 so merge cannot cascade this card to done. Not merged.
Author
Owner

PR98 rework pushed at 4e404eca9a. All seven findings addressed in code/docs/tests; local locked checks pass, exact-head CI is pending. RAM-1..33 live repair remains unauthorized and untouched. PR body remains Refs #83; existing closed-by PR986 board link was preserved.

PR98 rework pushed at 4e404eca9af67e4f0b6a7b2d890bfc3fd2f27179. All seven findings addressed in code/docs/tests; local locked checks pass, exact-head CI is pending. RAM-1..33 live repair remains unauthorized and untouched. PR body remains Refs #83; existing closed-by PR986 board link was preserved.
Author
Owner

Provider slice merged and verified.

  • PR #98 head 4e404eca9a was independently reviewed (all seven findings from comment 5366 verified, including the marker-retry branch proven by a scratch test) and merged as 2a538f089a.
  • Merge tree 11afce2b23 equals the reviewed head tree. cargo test --workspace --locked passed (15 suites), xtask check-docs passed, clippy with -D warnings was clean on the head.
  • The PR body stays Refs #83, so the merge does not cascade this card.

This card stays doing. Its acceptance requires repairing the live RAM-1..33 cards by mirroring them to Breadway/breadram with keys, epics, bodies, priorities and dependencies preserved. That live repair is not authorized, so the card cannot be completed.

Follow-ups filed: BB-112 (the committed marker-retry test does not reach the marker branch) and BB-113 (a Done card retried through an existing remote issue is linked but not closed; find_import_issue only reads page 1).

Provider slice merged and verified. - PR https://git.breadway.dev/Breadway/breadboard/pulls/98 head 4e404eca9af67e4f0b6a7b2d890bfc3fd2f27179 was independently reviewed (all seven findings from comment 5366 verified, including the marker-retry branch proven by a scratch test) and merged as 2a538f089aca78df9b192dacd1b97da807d820b5. - Merge tree 11afce2b2324e78ad48da49bebffb168ca73464f equals the reviewed head tree. `cargo test --workspace --locked` passed (15 suites), `xtask check-docs` passed, clippy with `-D warnings` was clean on the head. - The PR body stays `Refs #83`, so the merge does not cascade this card. This card stays doing. Its acceptance requires repairing the live RAM-1..33 cards by mirroring them to Breadway/breadram with keys, epics, bodies, priorities and dependencies preserved. That live repair is not authorized, so the card cannot be completed. Follow-ups filed: BB-112 (the committed marker-retry test does not reach the marker branch) and BB-113 (a Done card retried through an existing remote issue is linked but not closed; find_import_issue only reads page 1).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Breadway/breadboard#83
No description provided.