{
  "expand": "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations",
  "id": "14336",
  "self": "https://mandeng.atlassian.net/rest/api/2/issue/14336",
  "key": "QUE-310",
  "fields": {
    "statuscategorychangedate": "2026-08-08T14:56:36.334-0400",
    "issuetype": {
      "self": "https://mandeng.atlassian.net/rest/api/2/issuetype/10002",
      "id": "10002",
      "description": "Bugs track problems or errors.",
      "iconUrl": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium",
      "name": "Bug",
      "subtask": false,
      "avatarId": 10303,
      "entityId": "02a3a074-6701-4d75-8b0c-c5b30183339c",
      "hierarchyLevel": 0
    },
    "parent": {
      "id": "10001",
      "key": "QUE-2",
      "self": "https://mandeng.atlassian.net/rest/api/2/issue/10001",
      "fields": {
        "summary": "Metrics Search",
        "status": {
          "self": "https://mandeng.atlassian.net/rest/api/2/status/10000",
          "description": "",
          "iconUrl": "https://mandeng.atlassian.net/",
          "name": "To Do",
          "id": "10000",
          "statusCategory": {
            "self": "https://mandeng.atlassian.net/rest/api/2/statuscategory/2",
            "id": 2,
            "key": "new",
            "colorName": "blue-gray",
            "name": "To Do"
          }
        },
        "priority": {
          "self": "https://mandeng.atlassian.net/rest/api/2/priority/3",
          "iconUrl": "https://mandeng.atlassian.net/images/icons/priorities/medium_new.svg",
          "name": "Medium",
          "id": "3"
        },
        "issuetype": {
          "self": "https://mandeng.atlassian.net/rest/api/2/issuetype/10004",
          "id": "10004",
          "description": "Epics track collections of related bugs, stories, and tasks.",
          "iconUrl": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10307?size=medium",
          "name": "Epic",
          "subtask": false,
          "avatarId": 10307,
          "entityId": "f44b822b-e272-4d2c-b853-830cc3b80919",
          "hierarchyLevel": 1
        }
      }
    },
    "timespent": null,
    "project": {
      "self": "https://mandeng.atlassian.net/rest/api/2/project/10000",
      "id": "10000",
      "key": "QUE",
      "name": "Quberai",
      "projectTypeKey": "software",
      "simplified": true,
      "avatarUrls": {
        "48x48": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10409",
        "24x24": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10409?size=small",
        "16x16": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10409?size=xsmall",
        "32x32": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10409?size=medium"
      },
      "projectCategory": {
        "self": "https://mandeng.atlassian.net/rest/api/2/projectCategory/10000",
        "id": "10000",
        "description": "Quber Analyst",
        "name": "Analyst"
      }
    },
    "fixVersions": [],
    "aggregatetimespent": null,
    "customfield_10034": null,
    "statusCategory": {
      "self": "https://mandeng.atlassian.net/rest/api/2/statuscategory/4",
      "id": 4,
      "key": "indeterminate",
      "colorName": "yellow",
      "name": "In Progress"
    },
    "customfield_10035": null,
    "resolution": null,
    "resolutiondate": null,
    "workratio": -1,
    "issuerestriction": {
      "issuerestrictions": {},
      "shouldDisplay": true
    },
    "watches": {
      "self": "https://mandeng.atlassian.net/rest/api/2/issue/QUE-310/watchers",
      "watchCount": 1,
      "isWatching": true
    },
    "lastViewed": null,
    "created": "2026-07-27T23:27:30.187-0400",
    "customfield_10020": [
      {
        "id": 671,
        "name": "2026 Sprint 17",
        "state": "closed",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-07-26T16:00:07.416Z",
        "endDate": "2026-08-02T16:00:00.000Z",
        "completeDate": "2026-08-02T16:00:09.862Z"
      },
      {
        "id": 704,
        "name": "2026 Sprint 18",
        "state": "closed",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-08-02T16:00:02.041Z",
        "endDate": "2026-08-09T16:00:00.000Z",
        "completeDate": "2026-08-09T16:01:56.734Z"
      },
      {
        "id": 705,
        "name": "2026 Sprint 19",
        "state": "closed",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-08-09T05:34:51.039Z",
        "endDate": "2026-08-16T05:34:00.000Z",
        "completeDate": "2026-08-16T05:34:08.909Z"
      },
      {
        "id": 706,
        "name": "2026 Sprint 20",
        "state": "closed",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-08-16T18:43:51.000Z",
        "endDate": "2026-08-23T18:43:00.000Z",
        "completeDate": "2026-08-23T18:43:42.909Z"
      },
      {
        "id": 707,
        "name": "2026 Sprint 21",
        "state": "closed",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-08-23T20:41:35.388Z",
        "endDate": "2026-08-30T20:41:00.000Z",
        "completeDate": "2026-08-30T20:41:13.882Z"
      },
      {
        "id": 708,
        "name": "2026 Sprint 22",
        "state": "active",
        "boardId": 1,
        "goal": "",
        "startDate": "2026-09-05T23:05:15.279Z",
        "endDate": "2026-09-13T16:00:00.000Z"
      }
    ],
    "customfield_10021": null,
    "priority": {
      "self": "https://mandeng.atlassian.net/rest/api/2/priority/2",
      "iconUrl": "https://mandeng.atlassian.net/images/icons/priorities/high_new.svg",
      "name": "High",
      "id": "2"
    },
    "customfield_10103": null,
    "labels": [
      "breakfix",
      "quber"
    ],
    "customfield_10016": null,
    "customfield_10019": "0|i002bj:",
    "timeestimate": null,
    "aggregatetimeoriginalestimate": null,
    "versions": [],
    "issuelinks": [
      {
        "id": "10629",
        "self": "https://mandeng.atlassian.net/rest/api/2/issueLink/10629",
        "type": {
          "id": "10003",
          "name": "Relates",
          "inward": "relates to",
          "outward": "relates to",
          "self": "https://mandeng.atlassian.net/rest/api/2/issueLinkType/10003"
        },
        "inwardIssue": {
          "id": "14399",
          "key": "QUE-341",
          "self": "https://mandeng.atlassian.net/rest/api/2/issue/14399",
          "fields": {
            "summary": "Evaluate full-coverage ADE scanning of 99-2 decks with a dpt-2 vs dpt-3 page sample",
            "status": {
              "self": "https://mandeng.atlassian.net/rest/api/2/status/10002",
              "description": "",
              "iconUrl": "https://mandeng.atlassian.net/",
              "name": "Done",
              "id": "10002",
              "statusCategory": {
                "self": "https://mandeng.atlassian.net/rest/api/2/statuscategory/3",
                "id": 3,
                "key": "done",
                "colorName": "green",
                "name": "Done"
              }
            },
            "priority": {
              "self": "https://mandeng.atlassian.net/rest/api/2/priority/3",
              "iconUrl": "https://mandeng.atlassian.net/images/icons/priorities/medium_new.svg",
              "name": "Medium",
              "id": "3"
            },
            "issuetype": {
              "self": "https://mandeng.atlassian.net/rest/api/2/issuetype/10001",
              "id": "10001",
              "description": "Tasks track small, distinct pieces of work.",
              "iconUrl": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium",
              "name": "Task",
              "subtask": false,
              "avatarId": 10318,
              "entityId": "d33eb013-f02b-4a53-9d41-a23448058047",
              "hierarchyLevel": 0
            }
          }
        }
      },
      {
        "id": "10678",
        "self": "https://mandeng.atlassian.net/rest/api/2/issueLink/10678",
        "type": {
          "id": "10003",
          "name": "Relates",
          "inward": "relates to",
          "outward": "relates to",
          "self": "https://mandeng.atlassian.net/rest/api/2/issueLinkType/10003"
        },
        "outwardIssue": {
          "id": "14360",
          "key": "QUE-334",
          "self": "https://mandeng.atlassian.net/rest/api/2/issue/14360",
          "fields": {
            "summary": "Infographic slide values never reach retrieval (capture gating and orphaned figure values)",
            "status": {
              "self": "https://mandeng.atlassian.net/rest/api/2/status/10002",
              "description": "",
              "iconUrl": "https://mandeng.atlassian.net/",
              "name": "Done",
              "id": "10002",
              "statusCategory": {
                "self": "https://mandeng.atlassian.net/rest/api/2/statuscategory/3",
                "id": 3,
                "key": "done",
                "colorName": "green",
                "name": "Done"
              }
            },
            "priority": {
              "self": "https://mandeng.atlassian.net/rest/api/2/priority/4",
              "iconUrl": "https://mandeng.atlassian.net/images/icons/priorities/low_new.svg",
              "name": "Low",
              "id": "4"
            },
            "issuetype": {
              "self": "https://mandeng.atlassian.net/rest/api/2/issuetype/10002",
              "id": "10002",
              "description": "Bugs track problems or errors.",
              "iconUrl": "https://mandeng.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium",
              "name": "Bug",
              "subtask": false,
              "avatarId": 10303,
              "entityId": "02a3a074-6701-4d75-8b0c-c5b30183339c",
              "hierarchyLevel": 0
            }
          }
        }
      }
    ],
    "assignee": {
      "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
      "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
      "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
      "avatarUrls": {
        "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
        "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
        "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
        "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
      },
      "displayName": "Xavier Mandeng",
      "active": true,
      "timeZone": "America/New_York",
      "accountType": "atlassian"
    },
    "updated": "2026-09-09T23:12:24.594-0400",
    "status": {
      "self": "https://mandeng.atlassian.net/rest/api/2/status/10001",
      "description": "This work item is being actively worked on at the moment by the assignee.",
      "iconUrl": "https://mandeng.atlassian.net/",
      "name": "In Progress",
      "id": "10001",
      "statusCategory": {
        "self": "https://mandeng.atlassian.net/rest/api/2/statuscategory/4",
        "id": 4,
        "key": "indeterminate",
        "colorName": "yellow",
        "name": "In Progress"
      }
    },
    "components": [],
    "timeoriginalestimate": null,
    "description": "h2. The Ask\n\n{{graft_figures}} in {{src/quber/core/figures/graft.py}} turns every figure that overlaps no picture in the parse into an error string (lines 158-162) and never adds it to {{pairs}}, so {{_attach}} never runs and no element in the document ever carries that figure's text. The module's own docstring states the intended behaviour and contradicts the code: \"A figure over no picture at all is surfaced as an error and never dropped, since a figure the scan read that nothing holds is a value that vanishes.\"\n\nIt is worse than a plain drop. The correction step in {{src/quber/core/figures/correct.py}}, around line 116, deletes the printed text fragments that sit under any figure the scan returned, including the unmatched ones. The printed labels are removed from the parse on the strength of a figure whose text is then thrown away. The page ends up holding less than if the figure scan had never run.\n\nh3. Reproduce\n\nDocument: {{s3://qubera-docs/rj.reit/SEVN-Q1-2026-Earnings-Presentation.pdf}}, 23 pages, put through the playground's quber workflow on 2026-07-27. Artifacts in {{experiments/ade_rag_playground/data/uploads/sevn-q1-2026-aarnings-pres-artifacts/}}.\n\nThe figure stage nominated 7 pages (6, 7, 8, 9, 10, 11, 17), scanned all 7, spent 21 credits, and produced 11 figure records plus 1 table read off a page image. {{SEVN-Q1-2026-Earnings-Presentation.figure.complete.json}} records 3 errors, all of the unmatched kind: two on page 9 and one on page 17.\n\nPage 9 of the deck prints a stacked bar chart on the left and two donut charts down the right side. \"Geographic Region\" reads South 32%, East 31%, West 23%, Midwest 14%. \"Property Type\" reads Office 23%, Hotel 17%, Student Housing 16%, Industrial 15%, Multifamily 12%, Other 10%, Self Storage 7%. Both are, per the footnote, based on principal balance of loans held for investment as of March 31, 2026.\n\nADE read both donuts correctly. Their text is in {{SEVN-Q1-2026-Earnings-Presentation.figures.json}} under chunk ids {{6624116f-8d51-4b8e-8b1b-3605daf55c8e}} and {{f095af71-2fc4-476d-8a3c-5aa9d95c3b5c}}, both with {{picture_ref: null}}. Docling detected no picture over either donut, so the graft had nothing to attach them to.\n\nThe correction step then removed 22 text fragments from page 9, every donut segment label and percentage, listed in the {{removed}} array of the same file with reasons such as \"Donut chart segment label for East region\".\n\nh3. Actual\n\nIn the document that gets ingested:\n\n* Page 9 of {{SEVN-Q1-2026-Earnings-Presentation.unified.json}} holds 9 text items: the slide title, the two donut headings, the footnote, the page furniture and the page number. No segment label, no percentage.\n* No picture on page 9 carries a description for either donut. Only {{#/pictures/11}}, the bar chart, has one.\n* In the playground's Postgres store ({{ade_playground.chunks}}, document_id 173, slug {{sevn-q1-2026-aarnings-pres}}, 328 chunks) the string \"Midwest\" appears zero times. The geographic breakdown is unreachable by retrieval.\n\nThe values survive only in {{SEVN-Q1-2026-Earnings-Presentation.figures.json}} and the raw page response {{SEVN-Q1-2026-Earnings-Presentation.p9.ade.json}}, neither of which the ingest reads for figure text.\n\nThe third error, on page 17, is the decorative green banner at the foot of the page. Nothing is lost there.\n\nh3. Expected\n\nA figure that matches no picture in the parse should be inserted into the document as a new picture at the box the scan drew, and then carry its text the same way a matched figure does. The pieces already exist in the same function for the split case: {{_prov}} builds the provenance, {{_crop}} cuts the bitmap, {{document.insert_picture(sibling=..., after=True)}} places it, and {{_attach}} puts the text and the scan's identity on it. What is missing is the anchor for a figure that has no surviving sibling on its page, and the decision of where it sits in reading order.\n\nh3. Severity\n\nHigh. This is a financial document. A chart the scan read, and for which the pipeline then deleted the printed labels, leaves the document holding neither reading. Any deck whose charts docling misses on detection loses that content silently, and the only trace is an error string in the run record.\n\nh2. Why now / What's open\n\nThe fix has to settle five points that are not decided yet:\n\n# Where the injected picture sits in the body's reading order, given there is no picture on the page to anchor to.\n# Whether it carries a bitmap cut from the page, and at what resolution when no picture on the page supplies a dpi.\n# The parse classifies nothing for an injected picture, so the furniture check that drops logos and wordmarks has no class to read. Page 17's decorative banner would be injected as a described picture. Decide whether that is accepted or filtered another way.\n# Idempotency: on a second run over the enriched parse the injected picture should match the same figure's box and be filled rather than duplicated.\n# Whether the run record keeps surfacing the unmatched case in {{errors}} once it is handled, reworded to say the figure was injected. It should stay visible, since it is still a gap in the parse.\n\nh2. Acceptance Criteria\n\nSharpened 2026-09-09 after QUE-334 resolved the retrieval half of this defect. AC2 is met and stays as a regression check; AC1 and AC3 to AC6 are the work this ticket still owes.\n\nh3. AC1: An unmatched figure's reading reaches the document\n\n* *Verify by:* rerun the quber workflow over {{SEVN-Q1-2026-Earnings-Presentation.pdf}} (hosted playground document 265).\n* *Expected:* page 9 of the unified document carries a picture for each donut chart, each holding the text the scan read, with {{picture_ref}} set on the figure record.\n* *Show:* the page 9 picture list before and after, and the descriptions traced back to the two donut figure records.\n\nh3. AC2: The printed labels are retrievable (met by QUE-334, kept as regression)\n\n* *Status:* met on 2026-09-09. The hosted playground, on document 265, answered \"What percentage of the loan portfolio by principal balance is in the Midwest region?\" with 14%, citing {{fv-54}} on page 9 with status reconciled, retrieved through the per-page record {{figure-values-p9}} that QUE-334 added for values no picture claims.\n* *Verify by:* after this ticket's fix, reingest document 265 and ask the same question.\n* *Expected:* the same answer and citation, now resolved through the injected picture's chunk rather than the per-page record. The value must stay retrievable throughout; a fix that injects the picture but loses the per-page fallback is a regression.\n\nh3. AC3: Nothing that was already working regresses\n\n* *Verify by:* the same run, over all scanned pages.\n* *Expected:* matched and split figures attach exactly as before; page 17's decorative banner does not introduce spurious content.\n* *Show:* per page counts of pictures and attached descriptions, and the page 17 elements.\n\nh3. AC4: A second pass does not duplicate\n\n* *Verify by:* run the workflow twice over the same document.\n* *Expected:* the second run matches the injected picture to the same figure box and fills it, rather than adding another picture.\n* *Show:* picture counts and refs from both runs.\n\nh3. AC5: The gap stays visible in the run record\n\n* *Verify by:* read {{SEVN-Q1-2026-Earnings-Presentation.figure.complete.json}} after the fix.\n* *Expected:* the unmatched figures are still surfaced, worded to say the figure was injected rather than that it failed.\n* *Show:* the three entries for pages 9 and 17.\n\nh3. AC6: An injected figure keeps its footnote markers\n\n* *Why added (2026-09-09):* {{_record_markers}} in {{src/quber/core/figures/correct.py}} writes a figure's footnote markers and printed notes onto its picture, and for a figure with no picture it logs a warning and drops them. Page 9's donuts carry the footnote that scopes both charts to principal balance of loans held for investment as of March 31, 2026; today that qualification is lost for them.\n* *Verify by:* the same run over document 265.\n* *Expected:* each injected donut picture carries the page 9 footnote marker and its text in its metadata, the same as a matched figure.\n* *Show:* the two pictures' metadata after the run.\n\nh2. Current State\n\nIn Progress, no code yet. Reassessed 2026-09-09 against main at ce13cfe.\n\n*Resolved by QUE-334* (merged 2026-08-20, PR #199): the retrieval half. {{src/quber/playground/ingest_fusion.py}} now writes every figure value with no {{picture_ref}} into a searchable per-page record ({{figure-values-p<page>}}) with its own {{fv-<n>}} grounding, so a value the graft never placed is still found and cited. Verified live on 2026-09-09 on the ticket's own document (hosted playground document 265): the Midwest question answers 14%, cited to page 9, reconciled. The original Actual, \"Midwest appears zero times in the store\", no longer holds. The AC2 wording that read \"reingest and query the store\" is superseded by the evidence above.\n\n*Still owed by this ticket* (parse-level, all confirmed in main on 2026-09-09):\n# {{graft_figures}} still turns an unmatched figure into an error string only. No picture is inserted, {{_attach}} never runs, and the unified document holds no description for the chart.\n# The correction step still removes the printed labels under any figure the scan returned, matched or not, so the parse holds neither the printed labels nor the scan's reading for such a chart.\n# The footnote markers and printed notes of an unmatched figure are logged and dropped, since there is no picture to carry them (new AC6).\n\nWhat that costs today: anything that reads the unified document rather than the playground store sees nothing for such a chart, and the footnote qualification on its values is lost everywhere. The per-page record carries the values only, not the chart's description or its footnotes.\n\n*Settled approach:* the plan-review on branch {{bugfix/QUE-310-inject-unmatched-figures}} (commit 56b0ad5, 2026-08-08) decides the five open points: reading-order anchor by the same down-then-across key the graft already uses; bitmap cut at the dpi of the page's first imaged picture, box only when none; the page 17 banner is injected as a described picture rather than judged from prose; a second run matches the injected box one to one, so idempotency needs no new code; the run record keeps the entry, reworded. The plan predates QUE-334 and its \"ingest the Q1 deck\" default for AC2 is moot: the deck is document 265 in the hosted library. Its test list needs AC6 added. The branch holds only the plan and is 85 commits behind main; rebase before implementing.\n\n*Descoped:* nothing.\n\nh2. Links\n\n* Epic: QUE-2 (Metrics Search), per the parent field. The remaining work is parse-level; reassign to QUE-1 (Document Processing) if the team agrees.\n* Resolved the retrieval half: QUE-334\n* Related: QUE-341 (coverage evaluation, Done)\n* Plan: branch {{bugfix/QUE-310-inject-unmatched-figures}}, {{.plan-review/QUE-310-inject-unmatched-figures-review.html}} at commit 56b0ad5\n* Standards: see docs/ENGINEERING_STANDARDS.md",
    "timetracking": {},
    "customfield_10015": null,
    "security": null,
    "attachment": [],
    "aggregatetimeestimate": null,
    "summary": "A figure the scan reads that matches no picture in the parse is dropped from the document",
    "creator": {
      "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
      "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
      "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
      "avatarUrls": {
        "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
        "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
        "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
        "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
      },
      "displayName": "Xavier Mandeng",
      "active": true,
      "timeZone": "America/New_York",
      "accountType": "atlassian"
    },
    "subtasks": [],
    "reporter": {
      "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
      "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
      "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
      "avatarUrls": {
        "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
        "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
        "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
        "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
      },
      "displayName": "Xavier Mandeng",
      "active": true,
      "timeZone": "America/New_York",
      "accountType": "atlassian"
    },
    "aggregateprogress": {
      "progress": 0,
      "total": 0
    },
    "customfield_10000": "{repository={count=1, dataType=repository}, build={count=1, dataType=build, failedBuildCount=0, successfulBuildCount=1, unknownBuildCount=0}, json={\"cachedValue\":{\"errors\":[],\"summary\":{\"build\":{\"overall\":{\"count\":1,\"lastUpdated\":\"2026-08-08T14:56:40.000-0400\",\"failedBuildCount\":0,\"successfulBuildCount\":1,\"unknownBuildCount\":0,\"dataType\":\"build\"},\"byInstanceType\":{\"cloud-providers\":{\"count\":1,\"name\":\"Other providers\"}}},\"repository\":{\"overall\":{\"count\":1,\"lastUpdated\":\"2026-08-08T14:56:26.000-0400\",\"dataType\":\"repository\"},\"byInstanceType\":{\"oAuth-com.github.integration.production\":{\"count\":1,\"name\":\"GitHub\"}}}}},\"isStale\":true}}",
    "customfield_10001": null,
    "customfield_10202": null,
    "environment": null,
    "duedate": null,
    "progress": {
      "progress": 0,
      "total": 0
    },
    "votes": {
      "self": "https://mandeng.atlassian.net/rest/api/2/issue/QUE-310/votes",
      "votes": 0,
      "hasVoted": false
    },
    "comment": {
      "comments": [
        {
          "self": "https://mandeng.atlassian.net/rest/api/2/issue/14336/comment/15853",
          "id": "15853",
          "author": {
            "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
            "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
            "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
            "avatarUrls": {
              "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
              "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
              "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
              "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
            },
            "displayName": "Xavier Mandeng",
            "active": true,
            "timeZone": "America/New_York",
            "accountType": "atlassian"
          },
          "body": "Branch created: bugfix/QUE-310-inject-unmatched-figures",
          "updateAuthor": {
            "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
            "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
            "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
            "avatarUrls": {
              "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
              "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
              "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
              "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
            },
            "displayName": "Xavier Mandeng",
            "active": true,
            "timeZone": "America/New_York",
            "accountType": "atlassian"
          },
          "created": "2026-08-08T14:56:36.827-0400",
          "updated": "2026-08-08T14:56:36.827-0400",
          "jsdPublic": true
        },
        {
          "self": "https://mandeng.atlassian.net/rest/api/2/issue/14336/comment/16036",
          "id": "16036",
          "author": {
            "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
            "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
            "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
            "avatarUrls": {
              "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
              "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
              "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
              "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
            },
            "displayName": "Xavier Mandeng",
            "active": true,
            "timeZone": "America/New_York",
            "accountType": "atlassian"
          },
          "body": "Reassessed 2026-09-09 against main at ce13cfe. The retrieval half of this defect was resolved by QUE-334 (merged 2026-08-20): figure values that no picture claims now get a searchable per-page record and their own grounding. Verified on the hosted playground against this ticket's own document (document 265, the SEVN Q1 2026 deck): the Midwest question answers 14%, cited to page 9 as reconciled, through the per-page record figure-values-p9.\n\nThe parse-level half is unchanged in main and stays on this ticket: graft_figures still emits an error string and no picture for an unmatched figure, the correction step still removes the printed labels beneath it, and its footnote markers are dropped because there is no picture to carry them. The description's Acceptance Criteria and Current State are rewritten in place to record what is met, what is still owed, and the new AC6 for footnote markers. Linked to QUE-334. The plan on branch bugfix/QUE-310-inject-unmatched-figures (commit 56b0ad5) still stands, needs a rebase and AC6 added to its tests.",
          "updateAuthor": {
            "self": "https://mandeng.atlassian.net/rest/api/2/user?accountId=712020%3A28a47715-9133-4c72-8ad3-70b13d6a805d",
            "accountId": "712020:28a47715-9133-4c72-8ad3-70b13d6a805d",
            "emailAddress": "hcfffjcgcx@privaterelay.appleid.com",
            "avatarUrls": {
              "48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/48",
              "24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/24",
              "16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/16",
              "32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/712020:28a47715-9133-4c72-8ad3-70b13d6a805d/9e0262c9-5e21-45a3-a189-ebdced75efeb/32"
            },
            "displayName": "Xavier Mandeng",
            "active": true,
            "timeZone": "America/New_York",
            "accountType": "atlassian"
          },
          "created": "2026-09-09T23:12:24.594-0400",
          "updated": "2026-09-09T23:12:24.594-0400",
          "jsdPublic": true
        }
      ],
      "self": "https://mandeng.atlassian.net/rest/api/2/issue/14336/comment",
      "maxResults": 2,
      "total": 2,
      "startAt": 0
    },
    "worklog": {
      "startAt": 0,
      "maxResults": 20,
      "total": 0,
      "worklogs": []
    }
  }
}
