{ "CI_job_history_included": false, "approvals": [], "diff_versions": [], "discussions": [ { "id": "a2f2214c1e33d689dc55e8aee99a676d12772903", "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 #54", "commands_changes": {}, "confidential": false, "created_at": "2026-08-30T18:20:18.745Z", "id": 1437, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 324, "noteable_iid": 53, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": true, "type": null, "updated_at": "2026-08-30T18:20:18.746Z" } ], "resolvable": false }, { "id": "6728fb2f3d5d9145bf468ec236a9075a1279a4f3", "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 #55", "commands_changes": {}, "confidential": false, "created_at": "2026-08-30T18:20:19.167Z", "id": 1441, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 324, "noteable_iid": 53, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": true, "type": null, "updated_at": "2026-08-30T18:20:19.168Z" } ], "resolvable": false }, { "id": "304bec503078a068e9b18e4b0ec72ade01482ce6", "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": "Completion audit — 2026-10-02\n\nConflict explanations, named frozen rules, bottleneck reasons, original obligation traces and InvalidInput separation are implemented. The specified regression coverage is incomplete: published explanation tests cover typed capacity, while rendered conflict coverage uses one typed-capacity fixture; there is no equivalent explanation/trace coverage for joint-date and earned-entitlement conflicts. Add/verify those cases before declaring every acceptance criterion done.\n\nEvidence: reviewed issue requirements/discussions and f1f0835 (published application source; live main 57a39c81 only adds Renovate configuration). Tested an isolated checkout of the published source: 20 test files, 157/157 tests passed, including the five benchmark scenarios. Local commit 51978f7 and uncommitted edits were inspected separately and are not evidence of published completion.", "commands_changes": {}, "confidential": false, "created_at": "2026-10-02T12:54:27.109Z", "id": 1756, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 324, "noteable_iid": 53, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": false, "type": null, "updated_at": "2026-10-02T12:54:27.109Z" } ], "resolvable": false }, { "id": "984cc33aa4b31e9596b6301577dde2c330c5f678", "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": "Implemented with $luna-verified-implement and independently verified.\n\nConflict explanations distinguish typed, joint-date, and earned-order conflicts from invalid input and retain the actual explored branch history without fabricating a plan.\n\nValidation: 198/198 tests across 23 files, app/spec TypeScript checks, ESLint, and production build pass. Chromium keyboard, focus-restoration, background comparison, and responsive checks at 375/768/1440 pixels pass with no page errors. Original benchmark outcomes match the pre-change baseline in all five scenarios, with and without tracing.\n\nThe implementation is in the local working tree based on 0ce33cc9d6fe7381965a9162571abe205d0b7350; no commit or push has been made.", "commands_changes": {}, "confidential": false, "created_at": "2026-10-03T13:17:32.869Z", "id": 1872, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 324, "noteable_iid": 53, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": false, "type": null, "updated_at": "2026-10-03T13:17:32.869Z" } ], "resolvable": false }, { "id": "59ddce5a5a7e30ff4a16d0c822d7afc6bfd0057f", "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 #46", "commands_changes": {}, "confidential": false, "created_at": "2026-10-03T14:23:33.171Z", "id": 1884, "imported": false, "imported_from": "none", "internal": false, "noteable_id": 324, "noteable_iid": 53, "noteable_type": "Issue", "project_id": 35, "resolvable": false, "system": true, "type": null, "updated_at": "2026-10-03T14:23:33.172Z" } ], "resolvable": false } ], "format_version": 1, "notes": [ { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-08-30T18:20:18.745094", "discussion_id": "a2f2214c1e33d689dc55e8aee99a676d12772903", "id": 1437, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "mentioned in issue #54", "noteable_id": 324, "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": 53, "source_item_project_id": 35, "st_diff": null, "system": true, "type": null, "updated_at": "2026-08-30T18:20:18.74605", "updated_by_id": null }, { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-08-30T18:20:19.167791", "discussion_id": "6728fb2f3d5d9145bf468ec236a9075a1279a4f3", "id": 1441, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "mentioned in issue #55", "noteable_id": 324, "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": 53, "source_item_project_id": 35, "st_diff": null, "system": true, "type": null, "updated_at": "2026-08-30T18:20:19.16876", "updated_by_id": null }, { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-10-02T12:54:27.10919", "discussion_id": "304bec503078a068e9b18e4b0ec72ade01482ce6", "id": 1756, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "Completion audit — 2026-10-02\n\nConflict explanations, named frozen rules, bottleneck reasons, original obligation traces and InvalidInput separation are implemented. The specified regression coverage is incomplete: published explanation tests cover typed capacity, while rendered conflict coverage uses one typed-capacity fixture; there is no equivalent explanation/trace coverage for joint-date and earned-entitlement conflicts. Add/verify those cases before declaring every acceptance criterion done.\n\nEvidence: reviewed issue requirements/discussions and f1f0835 (published application source; live main 57a39c81 only adds Renovate configuration). Tested an isolated checkout of the published source: 20 test files, 157/157 tests passed, including the five benchmark scenarios. Local commit 51978f7 and uncommitted edits were inspected separately and are not evidence of published completion.", "noteable_id": 324, "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": 53, "source_item_project_id": 35, "st_diff": null, "system": false, "type": null, "updated_at": "2026-10-02T12:54:27.10919", "updated_by_id": null }, { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-10-03T13:17:32.869067", "discussion_id": "984cc33aa4b31e9596b6301577dde2c330c5f678", "id": 1872, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "Implemented with $luna-verified-implement and independently verified.\n\nConflict explanations distinguish typed, joint-date, and earned-order conflicts from invalid input and retain the actual explored branch history without fabricating a plan.\n\nValidation: 198/198 tests across 23 files, app/spec TypeScript checks, ESLint, and production build pass. Chromium keyboard, focus-restoration, background comparison, and responsive checks at 375/768/1440 pixels pass with no page errors. Original benchmark outcomes match the pre-change baseline in all five scenarios, with and without tracing.\n\nThe implementation is in the local working tree based on 0ce33cc9d6fe7381965a9162571abe205d0b7350; no commit or push has been made.", "noteable_id": 324, "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": 53, "source_item_project_id": 35, "st_diff": null, "system": false, "type": null, "updated_at": "2026-10-03T13:17:32.869067", "updated_by_id": null }, { "author_id": 8, "change_position": null, "commit_id": null, "confidential": null, "created_at": "2026-10-03T14:23:33.171965", "discussion_id": "59ddce5a5a7e30ff4a16d0c822d7afc6bfd0057f", "id": 1884, "imported_from": 0, "internal": false, "last_edited_at": null, "line_code": null, "namespace_id": null, "note": "mentioned in issue #46", "noteable_id": 324, "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": 53, "source_item_project_id": 35, "st_diff": null, "system": true, "type": null, "updated_at": "2026-10-03T14:23:33.17293", "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-30T18:20:17.971Z", "source_discussion_locked": null, "source_id": 324, "source_iid": 53, "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-10-03T13:17:33.248Z", "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-30T18:20:17.971Z", "description": "## Parent\n\n#46\n\n## What to build\n\nExplain why valid obligation rules cannot be satisfied jointly. The person first sees a concise conflict explanation naming the conflicting rules and practical bottleneck, then may inspect the original obligation branches actually explored. No plan, date score, or counterfactual matrix is fabricated for a conflict.\n\n## Acceptance criteria\n\n- [ ] `PlanningConflict` displays a concise domain-readable explanation tied to the frozen submitted rules and balances.\n- [ ] The explanation identifies the reported conflicting obligations and the known horizon, capacity, type, availability, or earned-entitlement bottleneck.\n- [ ] The advanced trace contains every obligation branch actually explored before infeasibility was concluded.\n- [ ] Pruned, infeasible, and solution-limit decisions retain their real reason and do not receive invented metrics.\n- [ ] The trace does not include quality phases that were never reached.\n- [ ] No final plan explanation, placement stepper, or counterfactual date matrix is shown for a conflict.\n- [ ] `InvalidInput` continues to show validation reasons without a conflict explanation or calculation trace.\n- [ ] A conflict cannot be produced merely because tracing, trace delivery, or explanation failed.\n- [ ] Public planner and rendered annual-calendar tests cover typed-capacity conflict, joint date conflict, earned-entitlement conflict, and malformed input separation.\n\n## Blocked by\n\n- #49 — Tracer les obligations, le risque et les préférences du calcul original", "discussion_locked": null, "downvotes": 0, "due_date": null, "has_tasks": false, "id": 324, "iid": 53, "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#53", "relative": "#53", "short": "#53" }, "service_desk_reply_to": null, "severity": "UNKNOWN", "start_date": null, "state": "closed", "task_completion_status": { "completed_count": 0, "count": 9 }, "time_stats": { "human_time_estimate": null, "human_total_time_spent": null, "time_estimate": 0, "total_time_spent": 0 }, "title": "Expliquer un conflit d’obligations", "type": "ISSUE", "updated_at": "2026-10-03T13:17:33.254Z", "upvotes": 0, "user_notes_count": 2, "web_url": "https://gitlab.nessar.fr/nessar/vac-optimizer/-/work_items/53" }, "source_kind": "Issue", "source_path": "nessar/vac-optimizer", "source_project_id": 35, "source_reviewers": [], "source_updated_at": "2026-10-03T13:17:33.254Z", "state_events": [ { "close_after_error_tracking_resolve": false, "close_auto_resolve_prometheus_alert": false, "created_at": "2026-10-03T13:17:33.306885+00:00", "epic_id": null, "id": 625, "imported_from": 0, "issue_id": 324, "merge_request_id": null, "namespace_id": 38, "source_commit": null, "source_merge_request_id": null, "state": 2, "user_id": 8 } ], "target_number": 53 }