Fix: les issues fermées suivies par le board s'affichent dans la colonne Terminé (le merge ne recevait que les issues ouvertes) + test de régression
CI / test (push) Successful in 2m20s

This commit is contained in:
2026-10-20 16:33:28 -04:00
parent 9e2096c9b6
commit 121c59760e
+25 -5
View File
@@ -832,13 +832,25 @@ async def board(request: Request, owner: str, repo: str, milestone: str = ""):
# A kanban:* label changed outside Kanbante wins over local state.
_adopt_label_columns(full_name, open_issues, get_board_state(full_name))
# Closed issues stay visible while the board tracks them as done
# (reconcile_board_state moved their row). Merging open issues only
# made the "Terminé" column permanently empty.
done_numbers = {
c["issue_number"] for c in get_board_state(full_name).get("done", [])
}
closed_display = [
i
for i in issues
if i.get("state") != "open" and i["number"] in done_numbers
]
# Milestone view: filter the board to one milestone (sprint-style),
# with its deadline and completion progress.
milestones: list[dict] = []
selected_milestone = None
milestone_progress = None
milestone_forecast = None
display_issues = open_issues
display_issues = open_issues + closed_display
try:
milestones = await gitea.get_milestones(owner, repo)
except Exception as exc: # milestones are decoration, never fatal
@@ -851,7 +863,7 @@ async def board(request: Request, owner: str, repo: str, milestone: str = ""):
str(ms.get("id")) == milestone or ms.get("title") == milestone
)
display_issues = [i for i in open_issues if _in_milestone(i)]
display_issues = [i for i in display_issues if _in_milestone(i)]
selected_milestone = next(
(
m for m in milestones
@@ -941,7 +953,16 @@ def _board_columns_for(
for number in changes["closed_numbers"]:
log_event(full_name, number, "closed", to_column="done", source="gitea")
_adopt_label_columns(full_name, open_issues, get_board_state(full_name))
display_issues = open_issues
board_state = get_board_state(full_name)
# Closed issues stay visible while the board tracks them as done
# (reconcile_board_state moved their row). Merging open issues only
# made the "Terminé" column permanently empty.
done_numbers = {c["issue_number"] for c in board_state.get("done", [])}
display_issues = open_issues + [
i
for i in issues
if i.get("state") != "open" and i["number"] in done_numbers
]
if milestone:
def _in_ms(issue: dict) -> bool:
ms = issue.get("milestone") or {}
@@ -949,8 +970,7 @@ def _board_columns_for(
str(ms.get("id")) == milestone or ms.get("title") == milestone
)
display_issues = [i for i in open_issues if _in_ms(i)]
board_state = get_board_state(full_name)
display_issues = [i for i in display_issues if _in_ms(i)]
columns = _merge_issues_with_board(display_issues, board_state)
return columns, display_issues, board_state