{ "CI_job_history_included": false, "approvals": [], "diff_versions": [], "discussions": [ { "id": "87d43b58172a0ae249b227e9266309402d545f35", "individual_note": true, "notes": [ { "author": { "avatar_url": "https://secure.gravatar.com/avatar/4657567e632c1ae9940f03534ba102a8a0321e4278100cbef34f0ff2d5e4eb72?s=80&d=identicon", "id": 8, "locked": false, "name": "nessar", "public_email": null, "state": "active", "username": "nessar", "web_url": "https://gitlab.nessar.fr/nessar" }, "body": "mentioned in issue #42", "commands_changes": {}, "confidential": false, "created_at": "2026-08-28T14:50:48.146Z", "id": 1400, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 312, "noteable_iid": 41, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": true, "type": null, "updated_at": "2026-08-28T14:50:48.147Z" } ], "resolvable": false }, { "id": "40daa711edd9008128efa70e558f8dbb1257a5c5", "individual_note": true, "notes": [ { "author": { "avatar_url": "https://secure.gravatar.com/avatar/4657567e632c1ae9940f03534ba102a8a0321e4278100cbef34f0ff2d5e4eb72?s=80&d=identicon", "id": 8, "locked": false, "name": "nessar", "public_email": null, "state": "active", "username": "nessar", "web_url": "https://gitlab.nessar.fr/nessar" }, "body": "Verified merged time-off periods, adjacent non-working dates at horizon boundaries, distinct non-working-day gain, returned periods, and calendar rendering. Planner and presentation tests pass; full checks pass: 157 tests, lint, typechecks, and production build.", "commands_changes": {}, "confidential": false, "created_at": "2026-09-25T08:58:48.094Z", "id": 1710, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 312, "noteable_iid": 41, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": false, "type": null, "updated_at": "2026-09-25T08:58:48.094Z" } ], "resolvable": false } ], "format_version": 1, "notes": [ { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-08-28T14:50:48.146344", "discussion_id": "87d43b58172a0ae249b227e9266309402d545f35", "id": 1400, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "mentioned in issue #42", "noteable_id": 312, "noteable_type": "Issue", "organization_id": null, "original_position": null, "position": null, "project_id": 35, "resolved_at": null, "resolved_by_id": null, "resolved_by_push": null, "review_id": null, "source_iid": 41, "source_item_project_id": 35, "st_diff": null, "system": true, "type": null, "updated_at": "2026-08-28T14:50:48.147291", "updated_by_id": null }, { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-09-25T08:58:48.09419", "discussion_id": "40daa711edd9008128efa70e558f8dbb1257a5c5", "id": 1710, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "Verified merged time-off periods, adjacent non-working dates at horizon boundaries, distinct non-working-day gain, returned periods, and calendar rendering. Planner and presentation tests pass; full checks pass: 157 tests, lint, typechecks, and production build.", "noteable_id": 312, "noteable_type": "Issue", "organization_id": null, "original_position": null, "position": null, "project_id": 35, "resolved_at": null, "resolved_by_id": null, "resolved_by_push": null, "review_id": null, "source_iid": 41, "source_item_project_id": 35, "st_diff": null, "system": false, "type": null, "updated_at": "2026-09-25T08:58:48.09419", "updated_by_id": null } ], "preexisting_missing_alternate_head": false, "source_assignees": [], "source_author": { "avatar_url": "https://secure.gravatar.com/avatar/4657567e632c1ae9940f03534ba102a8a0321e4278100cbef34f0ff2d5e4eb72?s=80&d=identicon", "id": 8, "locked": false, "name": "nessar", "public_email": null, "state": "active", "username": "nessar", "web_url": "https://gitlab.nessar.fr/nessar" }, "source_created_at": "2026-08-28T14:50:47.435Z", "source_discussion_locked": null, "source_id": 312, "source_iid": 41, "source_item_metadata": { "assignee": null, "assignees": [], "author": { "avatar_url": "https://secure.gravatar.com/avatar/4657567e632c1ae9940f03534ba102a8a0321e4278100cbef34f0ff2d5e4eb72?s=80&d=identicon", "id": 8, "locked": false, "name": "nessar", "public_email": null, "state": "active", "username": "nessar", "web_url": "https://gitlab.nessar.fr/nessar" }, "closed_at": "2026-09-25T08:58:55.905Z", "closed_by": { "avatar_url": "https://secure.gravatar.com/avatar/4657567e632c1ae9940f03534ba102a8a0321e4278100cbef34f0ff2d5e4eb72?s=80&d=identicon", "id": 8, "locked": false, "name": "nessar", "public_email": null, "state": "active", "username": "nessar", "web_url": "https://gitlab.nessar.fr/nessar" }, "confidential": false, "created_at": "2026-08-28T14:50:47.435Z", "description": "## Parent\n\n#11\n\n## What to build\n\nConstruire les périodes de repos réelles du plan et utiliser leur gain de jours non ouvrés comme premier critère de qualité du calendrier après les préférences. Les périodes affichées doivent refléter leurs week-ends et jours fériés, y compris aux bords de l’horizon.\n\n## Acceptance criteria\n\n- [ ] Une période de repos fusionne les placements contigus avec les week-ends et jours fériés immédiatement adjacents.\n- [ ] Les jours non ouvrés adjacents juste avant le début ou après la fin de l’horizon appartiennent à la période, sans autoriser de placement hors horizon.\n- [ ] Le gain compte les dates distinctes de week-end et de jour férié contenues dans les périodes.\n- [ ] Les dates de placement ne contribuent jamais au gain.\n- [ ] Le gain est maximisé après toutes les préférences et ne peut dégrader aucun critère supérieur.\n- [ ] Les périodes et leur durée sont restituées par le `PlanningOutcome` et rendues correctement par le calendrier.\n- [ ] Les tests couvrent fusion, chevauchement, jours fériés en semaine, week-ends, déduplication et les deux bords de l’horizon.\n\n## Blocked by\n\n- #40", "discussion_locked": null, "downvotes": 0, "due_date": null, "has_tasks": false, "id": 312, "iid": 41, "imported": false, "imported_from": "none", "issue_type": "issue", "labels": [], "merge_requests_count": 0, "milestone": null, "moved_to_id": null, "project_id": 35, "references": { "full": "nessar/vac-optimizer#41", "relative": "#41", "short": "#41" }, "service_desk_reply_to": null, "severity": "UNKNOWN", "start_date": null, "state": "closed", "task_completion_status": { "completed_count": 0, "count": 7 }, "time_stats": { "human_time_estimate": null, "human_total_time_spent": null, "time_estimate": 0, "total_time_spent": 0 }, "title": "Optimiser les périodes et le gain de jours non ouvrés", "type": "ISSUE", "updated_at": "2026-10-02T12:54:35.215Z", "upvotes": 0, "user_notes_count": 1, "web_url": "https://gitlab.nessar.fr/nessar/vac-optimizer/-/work_items/41" }, "source_kind": "Issue", "source_path": "nessar/vac-optimizer", "source_project_id": 35, "source_reviewers": [], "source_updated_at": "2026-10-02T12:54:35.215Z", "state_events": [ { "close_after_error_tracking_resolve": false, "close_auto_resolve_prometheus_alert": false, "created_at": "2026-09-25T08:58:56.133828+00:00", "epic_id": null, "id": 596, "imported_from": 0, "issue_id": 312, "merge_request_id": null, "namespace_id": 38, "source_commit": null, "source_merge_request_id": null, "state": 2, "user_id": 8 } ], "target_number": 41 }