{
  "format": "driftproof-answers/2",
  "receipt_hash": "058af364c80784af746573b4afdc64c4a2af39341ebeb1b640787bc9f793e1e1",
  "model_id": "claude-opus-5-5",
  "answers": {
    "3848508064aedafac3048e65234ec27feb97b936771228619e99e67b4a177f41": "**Conflicting state roles, so triage stops here until you decide.**\n\nThe item has one category role (`bug`), which is fine. But it has two state roles, `needs-info` and `ready-for-agent`, and every triaged item must have exactly one. The skill's rule is to flag the conflict and ask the maintainer before doing anything else. So I won't recommend, verify, grill, post comments, or change labels yet.\n\n**Which state should it keep?**\n\n- **`needs-info`**: we're still waiting on the reporter. You'd remove `ready-for-agent`. Any existing triage notes stay as the record of open questions.\n- **`ready-for-agent`**: it's fully specified, and an agent brief exists or should be written. You'd remove `needs-info`. If there's no brief yet, I'd ask whether you want one written before an agent picks it up.\n- **Neither / re-evaluate**: if you're unsure which is correct, move it back to `needs-triage` and I'll run the normal triage flow: gather context, check for redundancy and prior rejection, recommend, then verify the bug.\n\n**Facts that would settle it:** whether earlier triage notes listed open questions, and whether the reporter has answered them since. If they have, `needs-info` is probably stale. If they haven't, `ready-for-agent` was probably applied too early. I can't check that here without tools, so that call is yours.\n\nTell me which state to keep and I'll confirm the exact label change (and any comment, which would start with the AI-triage disclaimer) before applying it.",
    "844bbdb2833ea4daada513ce7f72ac5b603fcbeeff2a9b62ff0cef9e9657cdcc": "**Conflicting state roles, so triage stops here until you choose one.**\n\nThe item has category `bug` (fine, exactly one category) but two state roles: `needs-info` and `ready-for-agent`. Every triaged item should have exactly one state. When states conflict, the rule is to flag it and ask you before doing anything else. That means I won't recommend, verify, grill, comment, or relabel yet.\n\nThe two labels also contradict each other. `needs-info` says we're waiting on the reporter. `ready-for-agent` says the item is fully specified and has an agent brief. Both can't be true.\n\n**Which one should it be?**\n\n1. **Keep `needs-info`, drop `ready-for-agent`.** Use this if the reporter still hasn't answered questions from earlier triage notes. It stays parked until they reply, then goes back to `needs-triage`.\n2. **Keep `ready-for-agent`, drop `needs-info`.** Use this if the questions were answered and the bug is fully specified. I'd then check that an agent brief comment actually exists, and offer to write one if it doesn't.\n3. **Reset to `needs-triage`.** Use this if you're unsure which is right. I'd then do a full triage pass: read the item and any prior triage notes, reproduce the bug, and recommend a state.\n\nOnce you pick, I'll tell you exactly what I'm about to change (labels, any comment) before doing it. Any comment I post will start with the AI-triage disclaimer.",
    "0994f09ea2b8079e098edb081c11fb7805a85595c39adff058578c144dd40385": "**Next step: stop, flag the conflict, and ask you to resolve it before doing anything else.**\n\nThe item has `bug` (valid, exactly one category) but two state roles, `needs-info` and `ready-for-agent`. Every triaged item must carry exactly one state role, and when state roles conflict the skill says to ask the maintainer first. So I won't gather context, reproduce the bug, grill, post a comment, or change labels yet.\n\n**The conflict:**\n\n- `needs-info` means we're waiting on the reporter for more information.\n- `ready-for-agent` means it's fully specified and an AFK agent can pick it up.\n\nBoth can't be true. An agent picking this up could start work on an underspecified bug, or the reporter could be asked questions that are already answered.\n\n**Which state is right, and what follows:**\n\n1. **`ready-for-agent` is correct.** If the reporter's answers resolved the open questions, I'd remove `needs-info` and check whether an agent brief already exists. If there's no brief, I'd ask whether you want one written, since an agent needs it to act.\n2. **`needs-info` is correct.** If questions are still outstanding, I'd remove `ready-for-agent` and make sure triage notes list the specific open questions for the reporter.\n3. **Neither is clear.** If the reporter has replied since the last triage notes but it's unclear whether that's enough, I'd move it back to `needs-triage` and do a normal triage pass. That means reading the prior notes, reproducing the bug, and recommending a state.\n\n**Your call:** which state should this bug carry? I'd lean toward option 3 if you're unsure, because a re-evaluation is cheaper than an agent working from an incomplete spec. Any label change or comment waits for your answer, and any comment I post will start with the AI-triage disclaimer.",
    "b3a3c965c48676589755fd18d552e26550fcc831a467111e48bb5a947f71680a": "The item is in a **contradictory state**, so it should not proceed to an agent yet. The safe move is to resolve the conflict in favor of `needs-info`.\n\n**Why**\n\n- `needs-info` means the item is blocked on missing information from the reporter.\n- `ready-for-agent` means the item is fully specified and can be picked up.\n- Both can't be true at once. Since the label mapping uses the same strings, this isn't a translation or mapping glitch. Both labels really are applied.\n- Dispatching a bug to an agent with incomplete information risks a wrong or speculative fix. Holding it for a short while costs little. So the blocking state should win.\n\n**What happens next**\n\n1. **Don't dispatch.** Leave the item out of the agent queue while the conflict exists.\n2. **Normalize the labels.** Remove `ready-for-agent` and keep `needs-info` and `bug`.\n3. **Ask for the specific missing info.** Post a comment to the reporter asking for whatever the bug lacks, such as repro steps, expected vs. actual behavior, version or environment, and logs.\n4. **Note the correction.** Briefly record that `ready-for-agent` was removed because it conflicted with `needs-info`. That way whoever or whatever applied it can see why.\n5. **Re-triage when the reporter responds.** Once the info arrives and is enough to act on, remove `needs-info` and apply `ready-for-agent`. If nobody responds, follow your normal stale or close policy for `needs-info` items.\n\n**One exception.** If you can check, and the item's history shows `ready-for-agent` was added after the needed info arrived, then `needs-info` is the stale label. In that case remove `needs-info` and let the item proceed. Without that evidence, default to `needs-info`.",
    "dc98118879ce8932166c1dacb3551ad5a7a795751166ea444b9d6f93d2dcd497": "## Triage result\n\n**Item:** category `bug`, state labels `needs-info` and `ready-for-agent` both present.\n\nThese two states contradict each other. `needs-info` means the item is blocked waiting on the reporter. `ready-for-agent` means it is fully specified and can be picked up. An item can't be both, so the label set is invalid and has to be fixed before anything is dispatched.\n\n### What happens next\n\n1. **Do not hand it to an agent.** The `ready-for-agent` label is unreliable while `needs-info` is also present. Dispatching risks an agent working from an incomplete bug report.\n2. **Let `needs-info` win.** When states conflict, the blocking state should take precedence. It's the safer default, and wrongly holding an item back costs far less than wrongly releasing it.\n3. **Fix the labels.** Remove `ready-for-agent` and keep `needs-info`. Since the label mapping uses the same strings, the label and the state stay in sync and no translation is needed.\n4. **Ask for the missing info.** Comment on the item asking for whatever is missing. For a bug, that's typically repro steps, expected vs. actual behavior, version or environment, and logs.\n5. **Re-triage when the reporter responds.** Once the info arrives and the bug is actionable, swap `needs-info` for `ready-for-agent`, with only that one state label.\n\n### Caveat\n\nThe supplied facts don't say whether your process has a precedence rule for conflicting states. If it does, follow it. If it doesn't, the above is my recommendation. Either way, it's worth adding a rule that state labels are mutually exclusive, so this conflict gets caught automatically. Also check whether someone intentionally marked it ready after the info arrived and just forgot to remove `needs-info`. A quick look at the item's history would tell you, and in that case the right fix is the opposite: drop `needs-info`.",
    "3c71c05cd5e01c59a153d047032d58413819bf6975ea6794fd7033e5ac942479": "The item should **not** go to an agent yet. It should be treated as **needs-info**, and the label conflict should be fixed.\n\n**Why**\n\n- The two state labels contradict each other. `needs-info` means the item is blocked on missing information. `ready-for-agent` means it is fully specified and actionable. Both cannot be true at once.\n- The label mapping uses the same strings, so this isn't a naming or translation mismatch. The item really carries two incompatible states.\n- When states conflict, the blocking state should win. Dispatching a bug that may be missing repro steps, expected behavior, or environment details wastes agent effort and risks a wrong fix. Holding it costs only a short delay.\n\n**Next steps**\n\n1. **Hold dispatch.** Don't pick it up from the `ready-for-agent` queue.\n2. **Normalize to one state.** Remove `ready-for-agent` and keep `needs-info`. If your process doesn't allow automatic label changes, flag the item for a human triager.\n3. **Say what's missing.** Leave a comment asking the reporter for the specific information. For a bug, that's usually repro steps, expected vs. actual behavior, version or environment, and logs.\n4. **Re-triage when the info arrives.** If the bug is then actionable, swap `needs-info` for `ready-for-agent`, and only then hand it off.\n5. **Optionally, find the cause.** Two state labels on one item suggests a gap in the workflow. Examples are a label that wasn't removed during a transition, or two automations racing. Consider adding a rule that state labels are mutually exclusive.\n\n**Short answer:** it stays blocked as `needs-info` until the conflict is resolved and the missing details are supplied.",
    "96d3a6fbcb60afd5c3e83088bbe4dae9a3eaccdcc121aa440390917c3d1d02d2": "**The item is in a conflicting state, so it should not go to an agent yet.**\n\n`needs-info` and `ready-for-agent` contradict each other. One says the item is blocked on missing information. The other says it is fully specified and can be picked up. Since the label mapping uses those exact strings, nothing in the mapping settles which one wins. The conflict has to be resolved before routing.\n\n**What happens next:**\n\n1. **Hold dispatch.** Treat the item as `needs-info` for now, because that is the safer state. Sending an underspecified bug to an agent risks a wrong or wasted fix. Holding it costs only a short delay.\n2. **Work out which label is current.** Check whether the information `needs-info` asked for has since been provided, for example in a reporter reply, repro steps, logs, or version details.\n   - **If it has been answered:** remove `needs-info` and keep `ready-for-agent`. The item can then be routed.\n   - **If it hasn't, or you can't tell:** remove `ready-for-agent` and keep `needs-info`. Leave a comment restating exactly what information is missing.\n3. **If the history is unavailable or ambiguous,** flag the item for a human triager rather than guessing.\n4. **Leave the category as is.** `bug` is not in conflict and stays unchanged.\n\n**Follow-up:** two mutually exclusive states on one item suggests a gap in the workflow. Applying `ready-for-agent` should automatically clear `needs-info`, and the reverse should also hold. Adding a lint or automation rule that rejects both labels together would prevent this from recurring.",
    "fcac799d8681cc4eb598e541d520d07d354ba3d64b6be28d2c601d8adcb72734": "Verification outcome: **insufficient detail**. No steps, no environment, no error output, so the crash couldn't be reproduced. That points to moving the item from `needs-triage` to `needs-info` and keeping the `bug` category. Here is a draft comment for your review. I haven't posted anything or changed any labels.\n\n---\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Triage Notes\n\n**What we've established so far:**\n\n- The report is that the export feature crashes.\n- No reproduction steps, environment details, or error output were included, so we haven't been able to reproduce the crash yet.\n- This is categorised as a bug and is waiting on the details below before we can investigate further.\n\n**What we still need from you (@reporter):**\n\n- **Steps to reproduce:** What did you click or run, in order, right up to the crash? If you used a command, please paste it exactly.\n- **What you were exporting:** Which export format or target (for example CSV, PDF, JSON), and roughly how large or complex the data was. If you can share a small sample that triggers it, that helps most.\n- **What \"crash\" looks like:** Does the app or process exit entirely, freeze, show an error dialog, or produce a broken or empty file?\n- **Error output:** Please paste any error message, stack trace, or relevant log lines in full, not as a screenshot if you can avoid it.\n- **Environment:** Which version of the project you're on (release number or commit), your OS, and anything else relevant to how you run it (browser and version, runtime version, etc.).\n- **Consistency:** Does it crash every time, or only sometimes? Did export ever work for you, and if so, what changed since then?\n```\n\n---\n\n**Proposed actions once you approve:**\n1. Post the comment above.\n2. Replace `needs-triage` with `needs-info`.\n3. Keep `bug`.\n\nBefore posting, you may want to adjust the example formats and environment fields to match what this project actually exports and where it runs. I don't have codebase context, so those parts are generic.",
    "181670b770f548d10f2455985c72fa2f47b82ce6321b07ecb5002761310b870a": "**Recommendation:** keep `bug`, move `needs-triage` → `needs-info`. Verification is blocked because there are no reproduction steps, which is a strong `needs-info` signal. I haven't run any redundancy or prior-rejection checks, since no codebase access was used.\n\nDraft comment (not posted):\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Triage Notes\n\n**What we've established so far:**\n\n- The reporter says the export feature crashes.\n- No reproduction steps, error output, or environment details have been provided yet.\n- We have not been able to reproduce the crash, so we can't yet confirm the bug or find the affected code path.\n\n**What we still need from you (@reporter):**\n\n- **Steps to reproduce:** What did you do, click by click or command by command, right before the crash? Please start from opening the app or project.\n- **Export details:** Which export format or target were you using (e.g. CSV, PDF, JSON, file vs. clipboard), and which options or settings did you choose?\n- **What \"crash\" means here:** Did the whole application close, did it freeze or hang, or did the export fail with an error message? Please paste any error text exactly as shown.\n- **Logs / stack trace:** If there's console output, a log file, or a crash report, please attach it.\n- **Data involved:** Roughly how large is the data being exported (rows, file size, number of items)? Does it contain anything unusual, such as special characters, empty fields, or very long values? If possible, attach a minimal sample that triggers the crash.\n- **Consistency:** Does it crash every time, or only sometimes? Does exporting a different or smaller dataset work?\n- **Environment:** App version (or commit), OS and version, and browser/runtime version if applicable.\n- **Regression:** Did export work for you in an earlier version? If so, which one?\n```\n\nOnce the reporter replies, the item returns to `needs-triage` so we can attempt a reproduction and write the brief. Want me to apply the label change and post this when tools are available?",
    "21d6255f0e64b58dc812fbc13da4c4788a978b3a1eaeba85e426ecd99d7d7bed": "**Recommendation:** keep `bug`, move `needs-triage` → `needs-info`. Verification result: **insufficient detail**. There are no reproduction steps, environment details, or error output, so the crash can't be reproduced or traced to a code path. No redundancy or prior-rejection check was run, because no codebase or `.out-of-scope/` access was available.\n\nDraft comment to post (not posted):\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Triage Notes\n\n**What we've established so far:**\n\n- The report is that export crashes. It's categorised as a bug.\n- We haven't been able to reproduce it yet. The report doesn't include steps, environment details, or error output.\n\n**What we still need from you (@reporter):**\n\n- How do you trigger the export? Please give the exact steps from a fresh start, such as which screen or command and which buttons or flags.\n- What format or target are you exporting to (e.g. CSV, JSON, PDF, file vs. clipboard)?\n- What happens when it crashes? Does the app close, freeze, show an error dialog, or exit the process with a code?\n- Please paste the full error message, stack trace, or log output from around the crash.\n- Which version are you running, and on what OS/platform (plus browser/runtime version if relevant)?\n- Does it crash on every export or only some? If only some, does it depend on data size, specific content (e.g. special characters, empty fields), or a particular file?\n- Did export work for you in an earlier version? If so, which one?\n- If you can, please attach a minimal sample file or dataset that triggers the crash.\n```\n\nOnce the reporter replies, the item returns to `needs-triage` so we can reproduce the crash and write a brief.",
    "7213b28ecee9be191dccfaafb331af82d9e0197efbf308152d70f4a93022b25a": "## Triage Notes: \"Export crashes\"\n\n**Labels:** `bug`, `needs-triage` (keep `needs-triage` until the item can be reproduced)\n\n**Status:** Not reproducible yet. Waiting on the reporter for information.\n\n### What we know\n- The reporter says the export feature crashes.\n- They gave no reproduction steps, environment details, logs, or error output.\n- Nobody has looked at code or tried to reproduce it.\n\n### What we don't know\n- **Which export.** Format or type (e.g., CSV, PDF, JSON), and where it was started (UI, CLI, API).\n- **What \"crash\" means.** The app could have closed or the process died. It could also be an error dialog or message, a hang or freeze, a missing or corrupt output file, or the browser tab dying.\n- **Environment.** App version or build, OS, browser if relevant, and how it was installed or deployed.\n- **Data.** How big the export is (rows, records, file size), and whether there are special characters, empty fields, or unusual content.\n- **How often.** Every time or only sometimes, and whether it ever worked (a regression) or has always failed.\n- **Timing.** When it started, and whether that lines up with an update.\n\n### Questions for the reporter\n1. What exact steps lead to the crash, starting from opening the app?\n2. Which export option or format did you use?\n3. What exactly happens: does the app close, do you see an error, or does it freeze? Please include the full error text or a screenshot.\n4. What app version and OS/browser are you using?\n5. Does it happen every time? Does it happen with a small or different dataset?\n6. Did export work before? If so, around when did it stop?\n7. Can you attach logs, a crash report, or console output? Can you share a sample file or dataset that triggers it, sanitized if needed?\n\n### Initial assessment\n- **Severity:** Unknown. It's potentially high if export fails for all users or loses data, and lower if it's tied to a rare input. Don't assign it until we can reproduce.\n- **Priority:** Hold until the reporter responds. Raise it if more reports come in.\n- **Possible duplicates:** Search existing issues for \"export\" together with \"crash,\" \"error,\" or \"freeze,\" and link any matches.\n\n### Next steps\n- [ ] Post the questions above to the reporter.\n- [ ] Check for duplicate or related issues.\n- [ ] Once details arrive, try to reproduce and record the result here.\n- [ ] If there's no response within the project's usual window (e.g., 14 days), mark it stale or close it as \"cannot reproduce\" with an invitation to reopen.",
    "d2c289c946e3a1d4c46de0ee0ea5c5d61c3eaf03628bd0fa7770f426e5ffc985": "## Triage Notes: \"Export crashes\"\n\n**Labels:** `bug`, `needs-triage`\n**Status:** Not reproduced. The reporter gave no steps, and no code or logs are attached.\n\n### What we know\n- The reporter says the export feature crashes.\n- Nothing else is confirmed. We don't know the export type, format, platform, version, data size, or what \"crash\" means here (app closes, hangs, shows an error, or produces a corrupt or empty file).\n\n### What we don't know (blocking)\n1. **Steps to reproduce:** which export action, from which screen or command, and with what options.\n2. **Expected vs. actual behavior:** what \"crash\" looks like.\n3. **Environment:** app/version or commit, OS, browser or runtime if relevant.\n4. **Input characteristics:** size and type of the data being exported, special characters, empty datasets.\n5. **Frequency:** every time or intermittent, and whether it worked before (a regression?).\n6. **Artifacts:** error message, stack trace, logs, screenshot, or a sample file if it can be shared.\n\n### Assessment\n- **Severity:** unknown. It may be high if export is a core workflow or data is lost, but that can't be judged yet.\n- **Reproducibility:** unconfirmed.\n- **Component/owner:** tentatively export, pending details.\n- **Duplicate check:** look for open issues mentioning export crashes, errors, or hangs before going further.\n\n### Recommended next action\n- Keep `needs-triage`. Consider adding `needs-info` / `awaiting-reporter` if the tracker uses it.\n- Don't assign for a fix or set a priority until it's reproduced.\n- If there's no response within the project's usual window (e.g., 14 days), close as \"cannot reproduce / insufficient info,\" with an invitation to reopen.\n\n### Suggested reply to reporter\n> Thanks for reporting this. To investigate, could you share:\n> - The exact steps you took (which export option, format, and settings)\n> - What happened: did the app close, freeze, or show an error? Please paste any error text.\n> - Your app version and OS (and browser, if applicable)\n> - Roughly how much data you were exporting, and whether it happens every time\n> - Any logs or a screenshot, if available\n>\n> Once we can reproduce it, we'll prioritize accordingly.",
    "4b071d75dedf15fcafbd74aff705afe8f2b10b1d5b2b7d7dde67f3edc6d678af": "## Triage Notes: \"Export crashes\"\n\n**Labels:** `bug`, `needs-triage`\n**Status:** Unconfirmed; not reproducible yet because no steps were provided.\n\n### Summary\nThe reporter says export crashes. The report has no reproduction steps, environment details, error output, or scope. No code has been examined and no reproduction has been attempted, so nothing below is confirmed.\n\n### What we know\n- An export operation reportedly crashes.\n\n### What we don't know\n- **Which export:** the format (CSV, PDF, JSON, etc.) and the entry point (UI button, CLI command, API endpoint).\n- **What \"crash\" means:** an app or process exit, an unhandled exception, a hang, an error dialog, or a failed or empty output file.\n- **Environment:** app version or build, OS, browser if web, and install method.\n- **Data:** dataset size, special characters, empty or malformed records, and whether it happens with any data or only specific data.\n- **Frequency:** always, sometimes, or once, and whether it worked before (a possible regression).\n- **Evidence:** error message, stack trace, logs, screenshots.\n\n### Questions for the reporter\n1. What exact steps lead to the crash, starting from launching the app?\n2. Which export option or format were you using?\n3. What happens when it crashes? Please include any error text, logs, or a screenshot.\n4. Which version are you on, and on what OS or platform?\n5. Does it happen every time? Does it happen with a small or different dataset?\n6. Did export work for you in an earlier version?\n\n### Recommended next steps\n- Add `needs-info` (or the equivalent) and keep `needs-triage` until the reporter responds.\n- Keep `bug` provisionally. It may be reclassified if this turns out to be user error or expected behavior, such as a limit being hit.\n- No severity or priority yet. If confirmed as a hard crash with possible data loss, consider a high priority.\n- Look for duplicate or related export issues before investigating further.\n- Once steps arrive, attempt reproduction and record the result here.\n- If there is no response within the project's usual window, close as \"cannot reproduce / insufficient information\" and invite the reporter to reopen.",
    "93e320050ff966bbe657ed27cec8c97edea8435dedd2e9171498d999c071bcfc": "**Recommendation:** `bug` + `ready-for-agent`. The error is reproduced, the expected behavior is agreed, scope is a single file, and there is a clear regression check. Nothing here needs human judgment or external access.\n\nThe supplied facts don't include the exact input, expected output, or error text, so those are left as `<placeholders>` rather than invented. Fill them in before posting.\n\n---\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Agent Brief\n\n**Category:** bug\n**Status:** ready-for-agent\n\n### Problem\n`parser.js` throws an invalid-date error when given `<triggering input>`. This was reproduced during triage using the reporter's steps.\n\n### Reproduction\n1. Call the date-parsing path in `parser.js` with `<triggering input>`.\n2. Observe: `<error message / thrown error type>`.\n\n### Agreed behavior\n- **Input:** `<input or input class>`\n- **Expected output:** `<agreed output, e.g. parsed date value or defined fallback>`\n- Inputs that are valid today must keep parsing exactly as before.\n\n### Scope\n- **In scope:** the date-handling logic in `parser.js`.\n- **Out of scope:** changes to other modules, public API signatures, or unrelated formats. If the fix seems to need any of these, stop and comment on the issue instead of expanding scope.\n\n### Acceptance criteria\n- [ ] `<triggering input>` produces `<agreed output>` with no error.\n- [ ] A regression test covering the reproduced case is added next to the existing parser tests.\n- [ ] Existing parser tests still pass unchanged.\n\n### Regression check\n`<agreed regression check, e.g. the specific test/command>`. It must fail before the fix and pass after it.\n```\n\n---\n\n**Next step on approval:** apply `bug` and `ready-for-agent`, remove `needs-triage`, and post the brief above with the placeholders filled in.",
    "589dba733a11f26c1a3951114441897d57279a7cf36a1be6b29472f5fefe59b2": "**Recommendation:** category `bug`, state `ready-for-agent`. The bug is reproduced, the expected input/output behavior is agreed, the scope is limited to one file, and there's a regression check an agent can run unattended. Nothing needs human judgment.\n\nPlaceholders in `‹angle brackets›` are details your summary didn't include. Fill them in from the issue before posting rather than letting the agent guess.\n\n---\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Agent Brief\n\n**Category:** bug\n**Status:** ready-for-agent\n\n### Problem\nParsing ‹input format/example› in `parser.js` throws an invalid-date error. This was reproduced during triage with the reporter's steps:\n\n1. ‹step›\n2. ‹step›\n3. Observed: `‹error message›`\n\n### Agreed behavior\n| Input | Expected output |\n|---|---|\n| ‹input 1› | ‹output 1› |\n| ‹input 2 / edge case› | ‹output 2› |\n\nInputs outside this table should keep their current behavior.\n\n### Scope\n- **In scope:** the date-handling path in `parser.js` (‹function name, if known›).\n- **Out of scope:** changes to other files, public API signatures, or unrelated parsing behavior. If the fix seems to need changes elsewhere, stop and comment on this issue instead of widening the change.\n\n### Acceptance criteria\n- [ ] Every row in the table above produces the expected output.\n- [ ] The reproduction steps no longer raise the invalid-date error.\n- [ ] A regression test covering ‹the reproduced case› is added and passes.\n- [ ] The existing test suite passes unchanged.\n\n### Regression check\n‹command or test name, e.g. `npm test -- parser`›\n\n### Notes for the agent\nDescribe the root cause in the PR description, not only the fix.\n```\n\n---\n\nOnce the placeholders are filled in, this is ready to post and label.",
    "08a2a3b76e94ca8d887a7a7394414754c94b91135a01795d0b9144bacf52f82e": "**Recommendation:** category `bug`, state `ready-for-agent`. The error is reproduced, the expected input/output behavior is agreed, the scope is limited to `parser.js`, and there is a concrete regression check. No judgment calls are left for a human.\n\nThe supplied facts don't include the exact input, error message, or agreed output, so those are marked `<…>` placeholders. Fill them in before posting.\n\n---\n\n```markdown\n> *This was generated by AI during triage.*\n\n## Agent Brief\n\n**Category:** bug\n**Summary:** The date parser throws an invalid-date error on input that should parse successfully.\n\n### Current behavior\nParsing `<offending input, e.g. \"2026-02-30\" / \"18/10/2026\">` raises\n`<error message, e.g. \"RangeError: Invalid Date\">` instead of returning a value.\nReproduced during triage using the reporter's steps.\n\n### Expected behavior (agreed)\n- Input `<X>` → returns `<Y>`\n- Input `<genuinely invalid case>` → `<agreed handling: returns null / throws a typed ParseError / etc.>`\n- All currently valid inputs keep their existing output.\n\n### Where to look\n- `parser.js`: the date-parsing path. Find it by the concept \"date parsing / Date construction\", not by line number. The fault is likely in how the input is normalised or validated before it is converted to a date.\n\n### Acceptance criteria\n- [ ] The reproduction input yields the agreed output with no error\n- [ ] Invalid inputs are handled as agreed above\n- [ ] Regression test added covering `<X → Y>` plus at least one invalid-input case\n- [ ] The existing parser test suite passes unchanged\n\n### Out of scope\n- Refactoring unrelated parsing logic\n- Changing output formats for inputs that already parse correctly\n- New locale or format support beyond the agreed cases\n```\n\n---\n\n**Applying it:** post the comment, set the labels to `bug` and `ready-for-agent`, and remove `needs-triage`. I haven't done any of that, as you asked. Tell me when you want it applied.",
    "2b27c68ec82cb3f6b983d6ef84be19f369076b2153ef82ed643ab1d4a8f876d1": "# Agent Brief: Invalid-date error in `parser.js`\n\n**Status recommendation:** `ready-for-agent`. The issue is reproduced, the expected behavior is agreed, the scope is one file, and there's a clear regression check. No open design questions block implementation.\n\n---\n\n## Problem\n`parser.js` throws (or returns) an invalid-date error for input that should parse. The error has been reproduced.\n\n## Reproduction\n- **Input:** `<exact input string from repro>`\n- **Actual:** `<error message / Invalid Date / stack excerpt>`\n- **Environment:** `<runtime/version, timezone if relevant>`\n\n## Agreed behavior\n| Input | Expected output |\n|---|---|\n| `<repro input>` | `<agreed output>` |\n| `<any other agreed cases>` | `<agreed output>` |\n\nInputs outside these cases should behave as they do now.\n\n## Scope\n- **Change:** `parser.js` only.\n- **Do not change:** public API signatures, other parsers or formatters, or unrelated date handling.\n- If the fix appears to need changes outside `parser.js`, stop and report back rather than widening scope.\n\n## Acceptance criteria\n1. The repro input produces the agreed output with no error.\n2. The regression check passes: `<test name / command>`.\n3. The existing test suite passes with no new failures.\n4. A test covering the repro case is added next to the existing `parser.js` tests.\n\n## Deliverable\nA single PR containing:\n- the fix,\n- the new regression test,\n- a short description of the root cause and the before/after output for the repro input.\n\n---\n\n**Note:** The placeholders in angle brackets need the concrete values from the issue (input, error, expected output, and test command). I left them blank rather than inventing them. With those filled in, the brief is ready to hand to an agent.",
    "2a7fbefd70e927a3d848095ac7372c548c7c5bee98cd8eac1bd92ad1d29febb9": "# Agent Brief: Invalid-date error in `parser.js`\n\n**Status recommendation: Ready for agent.** All four readiness criteria are met: the bug is reproduced, the expected behavior is agreed, the scope is a single known file, and there is a defined regression check. No open questions block implementation.\n\n---\n\n## Problem\n`parser.js` raises an invalid-date error on input that should parse successfully. The error has been reproduced.\n\n## Expected behavior\nUse the agreed input/output contract:\n- **Input:** `<agreed input example(s)>`\n- **Expected output:** `<agreed output>`\n- **Current output:** invalid-date error\n\n## Scope\n- **In scope:** `parser.js`, plus the regression test for this case.\n- **Out of scope:** Refactors, changes to other date formats, and API or signature changes. If the fix appears to need anything beyond `parser.js`, stop and report back instead of expanding scope.\n\n## Task\n1. Reproduce the error with the agreed input.\n2. Find the root cause in `parser.js`.\n3. Apply the minimal fix that produces the agreed output.\n4. Add or confirm the regression check, then run it and the existing parser tests.\n\n## Acceptance criteria\n- [ ] The agreed input produces the agreed output with no error.\n- [ ] The regression check fails before the fix and passes after it.\n- [ ] Existing parser tests still pass.\n- [ ] The diff is limited to `parser.js` and the test file.\n\n## Report back\n- Root cause, in one or two sentences.\n- A summary of the diff.\n- Test output, including any failures shown verbatim.\n\n---\n\n*Note: I don't have the concrete input/output values or the regression check command. Fill in the placeholders above before handing this off.*",
    "b3244bcf69dc5239c43e12bd108a361aa01294ba9dc6d37a44d01bd580721ca6": "# Agent-Ready Brief: Invalid-date error in `parser.js`\n\n**Recommended status:** `ready-for-agent`. The bug is reproduced, the expected behavior is agreed, the scope is a single file, and there is a clear regression check. Nothing needs to be clarified before work starts.\n\n---\n\n### Problem\n`parser.js` throws or returns an invalid-date error for input that should parse correctly. The failure has been reproduced.\n\n### Reproduction\n- **Input:** `<reproduced input value>`\n- **Actual:** `<observed error / Invalid Date output>`\n- **Expected:** `<agreed output>`\n\n*(Fill these in from the issue. The facts I was given say they exist but don't include the literal values, so I haven't invented any.)*\n\n### Agreed behavior\n- Valid inputs matching the agreed format parse to the agreed output.\n- Inputs outside the agreed contract keep their current handling unless the issue says otherwise.\n\n### Scope\n- **Change:** `parser.js` only.\n- **Out of scope:** refactors, other date formats, dependency changes, and public API or signature changes.\n\n### Acceptance criteria\n1. The reproduced input produces the agreed output.\n2. A regression test covers the reproduced case, and it fails before the fix and passes after it.\n3. The existing parser tests still pass.\n4. The diff is limited to `parser.js` plus the new or updated test.\n\n### Regression check\nAdd a test that asserts `parse(<reproduced input>) === <agreed output>` and doesn't throw or return an invalid date. Run it together with the full existing parser test suite.\n\n### Agent notes\n- Confirm the root cause before changing anything. Likely candidates are format assumptions, timezone/UTC handling, month off-by-one errors, and locale-dependent parsing.\n- Make the smallest fix that works. Don't widen the accepted input formats.\n- In the PR description, report the root cause, the fix, and the test results (pass/fail output)."
  },
  "draws": [
    {
      "id": "conflict",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "3848508064aedafac3048e65234ec27feb97b936771228619e99e67b4a177f41",
      "answer_sha256": "3848508064aedafac3048e65234ec27feb97b936771228619e99e67b4a177f41",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response identifies the conflicting needs-info and ready-for-agent state roles, asks the maintainer to pick one before any action, keeps bug category separate, and does not silently select a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent state roles, asks the maintainer to choose before any action, keeps the bug category separate from state, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent state roles, asks the maintainer to choose before any action, keeps the bug category separate from state, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent state roles, asks the maintainer to choose before any action, keeps the bug category separate, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Explicitly identifies the conflicting state roles, separates the bug category from state, halts action pending maintainer choice, and offers options without silently picking a state.\"}"
      ]
    },
    {
      "id": "conflict",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "844bbdb2833ea4daada513ce7f72ac5b603fcbeeff2a9b62ff0cef9e9657cdcc",
      "answer_sha256": "844bbdb2833ea4daada513ce7f72ac5b603fcbeeff2a9b62ff0cef9e9657cdcc",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info/ready-for-agent conflict, asks the maintainer to choose before any action, keeps category bug separate from state, and silently selects no state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response identifies the conflicting needs-info and ready-for-agent states, asks the maintainer to choose before acting, keeps category bug separate from state, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response identifies the conflicting needs-info and ready-for-agent states, keeps category bug separate from state, asks the maintainer to choose before any action, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info and ready-for-agent conflict, keeps category bug separate from state, asks the maintainer to choose before any action, and does not silently select a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent roles, asks the maintainer to choose before acting, keeps category bug separate from state, and does not silently pick a state.\"}"
      ]
    },
    {
      "id": "conflict",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "0994f09ea2b8079e098edb081c11fb7805a85595c39adff058578c144dd40385",
      "answer_sha256": "0994f09ea2b8079e098edb081c11fb7805a85595c39adff058578c144dd40385",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info vs ready-for-agent conflict, asks the maintainer to resolve it before any action, keeps 'bug' as the category separate from state, and does not silently pick a state (it offers options and asks the user to choose).\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response identifies the conflicting needs-info and ready-for-agent roles, asks the maintainer to resolve before any action, keeps bug category separate from state, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info vs ready-for-agent conflict, asks the maintainer to resolve it before any action, keeps 'bug' category separate from state, and does not silently pick a state.\", \"criteria\": {\"1_identify_conflict\": 0.25, \"2_ask_maintainer_before_action\": 0.25, \"3_category_separate_from_state\": 0.25, \"4_no_silent_state_selection\": 0.25}}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info and ready-for-agent conflict, asks the maintainer to resolve it before any action, keeps bug category separate from state, and does not silently pick a state.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the needs-info vs ready-for-agent conflict, asks the maintainer to resolve it before any action, keeps bug category separate from state, and does not silently pick a state.\"}"
      ]
    },
    {
      "id": "conflict",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "b3a3c965c48676589755fd18d552e26550fcc831a467111e48bb5a947f71680a",
      "answer_sha256": "b3a3c965c48676589755fd18d552e26550fcc831a467111e48bb5a947f71680a",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent roles and avoids silent selection by noting the correction (criteria 1 and 4), but never asks the maintainer to resolve the conflict, and does not keep category separate from state (criteria 2 and 3).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent states (criterion 1) and records the correction rather than silently choosing (criterion 4). It unilaterally removes ready-for-agent instead of asking the maintainer to resolve the conflict (criterion 2), and never explicitly separates category from state (criterion 3).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Identifies the conflicting state labels and keeps bug category separate, but it silently resolves the conflict by removing ready-for-agent instead of asking the maintainer to resolve it first, missing criteria 2 and 4.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"It identifies the conflicting state roles and keeps the bug category separate, but it unilaterally removes ready-for-agent and picks needs-info instead of asking the maintainer to resolve the conflict first.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Identifies the conflicting state roles and keeps category separate, but silently resolves the conflict by removing ready-for-agent instead of asking the maintainer to resolve it first, and offers a conditional override; criteria 2 and 4 missed.\"}"
      ]
    },
    {
      "id": "conflict",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "dc98118879ce8932166c1dacb3551ad5a7a795751166ea444b9d6f93d2dcd497",
      "answer_sha256": "dc98118879ce8932166c1dacb3551ad5a7a795751166ea444b9d6f93d2dcd497",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response identifies the conflicting state labels (criterion 1) and keeps category separate, but it silently resolves the conflict by choosing needs-info rather than asking the maintainer to resolve it first (criteria 2 and 4 missed), so it earns 0.5.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent roles (1), keeps category separate (3), and states its choice explicitly rather than silently (4). It misses (2): it resolves the conflict itself and says to fix the labels, instead of asking the maintainer first.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Meets criteria 1 (identifies the needs-info/ready-for-agent conflict), 3 (keeps category separate from state), and 4 (selects needs-info openly, not silently). Misses criterion 2: it tells the user to remove a label themselves rather than asking the maintainer to resolve the conflict first.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: it identifies the conflicting states, keeps category separate, and discloses its choice of needs-info. It misses criterion 2 by recommending label changes rather than asking the maintainer to resolve the conflict first.\"}",
        "```json\n{\n  \"score\": 0.75,\n  \"pass\": true,\n  \"reason\": \"Met criteria 1, 3, and 4: it identifies the conflicting states, keeps category separate, and selects needs-info openly rather than silently. Missed criterion 2, since it resolves the conflict itself instead of asking the maintainer to decide first.\"\n}\n```"
      ]
    },
    {
      "id": "conflict",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "3c71c05cd5e01c59a153d047032d58413819bf6975ea6794fd7033e5ac942479",
      "answer_sha256": "3c71c05cd5e01c59a153d047032d58413819bf6975ea6794fd7033e5ac942479",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 by identifying the conflicting state labels and criterion 4 by explaining its choice rather than silently selecting. Misses criterion 2, since it removes a label itself instead of asking the maintainer, and criterion 3, since category 'bug' is not kept separate from state.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Identifies the conflicting state roles (needs-info vs ready-for-agent), keeps category bug separate, and asks for missing info, but silently selects needs-info and removes ready-for-agent rather than asking the maintainer to resolve first.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 by identifying needs-info and ready-for-agent as contradictory states, and criterion 4 by explicitly justifying its choice rather than silently picking one. Misses criterion 2 by resolving the conflict itself instead of asking the maintainer, and criterion 3 by never addressing the bug category.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (identifies needs-info and ready-for-agent as conflicting) and criterion 4 (openly states the chosen state). Misses criterion 2, since it removes ready-for-agent itself rather than asking the maintainer to resolve the conflict, and criterion 3 is never addressed.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"It identifies the conflicting state labels and openly chooses needs-info without silence, but it resolves the conflict itself rather than asking the maintainer first, and it never separates the bug category from state.\"}"
      ]
    },
    {
      "id": "conflict",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "96d3a6fbcb60afd5c3e83088bbe4dae9a3eaccdcc121aa440390917c3d1d02d2",
      "answer_sha256": "96d3a6fbcb60afd5c3e83088bbe4dae9a3eaccdcc121aa440390917c3d1d02d2",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent states, keeps bug category separate, and transparently explains its state choice. Misses criterion 2: it tells the agent to remove labels itself rather than asking the maintainer to resolve the conflict first.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent roles, keeps bug separate from state, and transparently explains its default. It misses asking the maintainer to resolve the conflict, instead having the agent check history and remove a label itself.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Identifies the needs-info/ready-for-agent conflict, keeps bug category separate, and transparently states its state choice. Misses criterion 2: it has the agent resolve the conflict by checking history and removing labels, rather than asking the maintainer to resolve it before action.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Identifies the conflicting needs-info and ready-for-agent roles, keeps the bug category separate, and avoids silent state selection. It misses asking the maintainer to resolve the conflict, proposing instead that the model check history and remove labels itself.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criterion 1 (identifies needs-info and ready-for-agent as conflicting roles) and criterion 3 (keeps category bug unchanged); missed criterion 2 since it resolves the conflict itself rather than asking the maintainer, and criterion 4 is weakened by proposing to remove labels on its own judgment.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "fcac799d8681cc4eb598e541d520d07d354ba3d64b6be28d2c601d8adcb72734",
      "answer_sha256": "fcac799d8681cc4eb598e541d520d07d354ba3d64b6be28d2c601d8adcb72734",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from unverified facts (\\\"No steps... so the crash couldn't be reproduced\\\"), asks specific reproduction questions with steps and error output, recommends needs-info with a stated reason, and never claims reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from the unverified state (\\\"No steps... so the crash couldn't be reproduced\\\"), asks specific reproduction questions, recommends needs-info with a reason, and never claims reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response separates the reported crash from unverified facts, asks specific reproduction questions (steps, format, error output, environment), recommends needs-info with a reason, and explicitly states the crash was not reproduced.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from unverified facts (\\\"No steps... so the crash couldn't be reproduced\\\"), asks specific reproduction questions (steps, format, error output, environment), recommends needs-info with a reason, and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from unverified facts, asks specific reproduction questions (steps, format, error output, environment), recommends needs-info with a reason, and explicitly does not claim reproduction. All four criteria met.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "181670b770f548d10f2455985c72fa2f47b82ce6321b07ecb5002761310b870a",
      "answer_sha256": "181670b770f548d10f2455985c72fa2f47b82ce6321b07ecb5002761310b870a",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified status ('not able to reproduce'), asks specific reproduction questions (steps, export format, error text, environment), recommends needs-info with reason (no repro steps), and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, format, error text, consistency), recommends needs-info with a reason (blocked verification without repro steps), and never claims reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Met all four criteria: it separates the reported crash from unverified facts, asks specific reproduction questions, recommends needs-info with a stated reason, and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, format, error text, consistency), recommends needs-info with the reason that verification is blocked by missing steps, and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, format, error text, logs, consistency), recommends needs-info with a clear reason, and explicitly does not claim reproduction.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "21d6255f0e64b58dc812fbc13da4c4788a978b3a1eaeba85e426ecd99d7d7bed",
      "answer_sha256": "21d6255f0e64b58dc812fbc13da4c4788a978b3a1eaeba85e426ecd99d7d7bed",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from unverified status (\\\"not reproduced\\\", no steps or logs), asks specific reproduction questions, recommends needs-info with a reason, and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from the unverified state (\\\"we haven't been able to reproduce it\\\"), asks specific reproduction questions (steps, format, error output, environment), recommends needs-info with a reason, and does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom from unverified status, asks specific reproduction questions, recommends needs-info with a stated reason, and never claims reproduction; all four criteria met.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported crash from the unverified state (\\\"not been able to reproduce\\\"), asks specific reproduction questions (steps, format, error output, version, sample file), recommends needs-info with a reason (insufficient detail), and never claims reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"The response separates the reported crash from verified facts by stating it could not be reproduced, asks many specific reproduction questions (steps, format, error output, version, sample file), recommends needs-info with a stated reason of insufficient detail, and does not claim reproduction.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "7213b28ecee9be191dccfaafb331af82d9e0197efbf308152d70f4a93022b25a",
      "answer_sha256": "7213b28ecee9be191dccfaafb331af82d9e0197efbf308152d70f4a93022b25a",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response separates 'What we know' (reported symptom, no repro) from 'What we don't know' (verified-unknowns), asks specific reproduction questions, recommends keeping needs-triage with a reason (cannot reproduce yet), and explicitly states it is not reproduced.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Separates reported symptom from verified facts, asks specific reproduction questions, and does not claim reproduction; it misses the rubric's needs-info recommendation, keeping needs-triage instead.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 2, and 4: it separates the reporter's claim from verified facts, asks specific reproduction questions, and does not claim reproduction. Missed criterion 3: it recommends keeping needs-triage and never recommends a needs-info label.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response separates 'What we know' (reported symptom, no verified facts) from 'What we don't know', asks specific numbered reproduction questions, recommends keeping needs-triage pending info with reason, and explicitly states it is not reproducible yet.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response separates 'What we know' (reporter's claim, no steps or evidence) from 'What we don't know', asks specific reproduction questions, recommends keeping needs-triage until reproducible with a stated reason, and explicitly says it is not reproduced.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "d2c289c946e3a1d4c46de0ee0ea5c5d61c3eaf03628bd0fa7770f426e5ffc985",
      "answer_sha256": "d2c289c946e3a1d4c46de0ee0ea5c5d61c3eaf03628bd0fa7770f426e5ffc985",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, expected vs actual, environment), recommends needs-info with reason (awaiting reporter info), and explicitly states 'Not reproduced' without claiming reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, expected vs actual, environment, frequency), recommends keeping needs-triage and adding needs-info/awaiting-reporter with a reason, and explicitly states the bug is not reproduced.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom ('reporter says export crashes') from unverified facts, asks specific reproduction questions (steps, environment, data size), recommends needs-info/awaiting-reporter with reason, and explicitly states 'Not reproduced' without claiming reproduction.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Separates reported symptom ('export crashes') from unconfirmed facts, asks specific reproduction questions, and states 'Not reproduced' without claiming reproduction; misses the rubric's criterion because it recommends 'needs-triage' to stay and only suggests 'needs-info' as optional, with no firm reason tied to it.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reporter's claim from confirmed facts, asks specific reproduction questions, recommends needs-info with the missing-steps reason (hedged), and explicitly states the bug is not reproduced.\"}"
      ]
    },
    {
      "id": "evidence",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "4b071d75dedf15fcafbd74aff705afe8f2b10b1d5b2b7d7dde67f3edc6d678af",
      "answer_sha256": "4b071d75dedf15fcafbd74aff705afe8f2b10b1d5b2b7d7dde67f3edc6d678af",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response separates the reported symptom ('reportedly crashes', 'What we know') from unverified facts, asks specific reproduction questions (steps, format, error text, version, frequency), recommends needs-info with a reason (no steps), and explicitly does not claim reproduction.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"It separates the reported symptom ('What we know') from unverified facts, asks specific numbered reproduction questions, recommends adding needs-info because no steps were given, and states nothing is reproduced.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported symptom (\\\"export crashes\\\") from unverified facts, asks specific reproduction questions (steps, format, error text, version, frequency), recommends needs-info with a reason (no steps provided), and explicitly states nothing is reproduced or confirmed.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates reported symptom from unverified facts, asks specific reproduction questions, recommends needs-info pending reporter response, and explicitly states the bug was not reproduced.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Separates the reported symptom from verified facts with 'What we know'/'What we don't know' and 'nothing below is confirmed'; asks specific reproduction questions; recommends needs-info with reason; explicitly states no reproduction was attempted.\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "93e320050ff966bbe657ed27cec8c97edea8435dedd2e9171498d999c071bcfc",
      "answer_sha256": "93e320050ff966bbe657ed27cec8c97edea8435dedd2e9171498d999c071bcfc",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug and ready-for-agent, includes reproduction and agreed behavior sections, names scope and a regression check, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug and ready-for-agent, carries reproduction and agreed expected behavior (as placeholders), names parser.js scope with a regression check, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug + ready-for-agent, carries reproduction and agreed expected behavior, names scope (parser.js) and a regression check, and marks the draft as AI-generated triage text.\"}",
        "{\n  \"score\": 1.0,\n  \"pass\": true,\n  \"reason\": \"Recommends bug with ready-for-agent, carries reproduction and agreed expected behavior, names scope and a regression check, and marks the draft as AI-generated triage text.\"\n}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug category with ready-for-agent status, carries reproduction and expected behavior sections, names scope and regression check, and marks the draft as AI-generated triage text.\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "589dba733a11f26c1a3951114441897d57279a7cf36a1be6b29472f5fefe59b2",
      "answer_sha256": "589dba733a11f26c1a3951114441897d57279a7cf36a1be6b29472f5fefe59b2",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug category with ready-for-agent status, carries the reproduction and agreed input/output table, names parser.js scope and a regression check, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four rubric points: recommends bug/ready-for-agent, carries reproduction steps and agreed input/output table, names scope and regression check, and labels the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends ready-for-agent with bug category, carries the invalid-date reproduction and expected-behavior table, names parser.js scope and a regression test, and marks the text as AI-generated triage; placeholders are minor.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Met all four: recommends ready-for-agent with bug category, carries reproduction steps and agreed input/output table, names scope (parser.js) and regression check, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four rubric points: recommends ready-for-agent with bug category, carries reproduction steps and agreed input/output table, names scope and regression check, and labels the draft as AI-generated triage text.\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "08a2a3b76e94ca8d887a7a7394414754c94b91135a01795d0b9144bacf52f82e",
      "answer_sha256": "08a2a3b76e94ca8d887a7a7394414754c94b91135a01795d0b9144bacf52f82e",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug and ready-for-agent, carries reproduction and agreed expected behavior, names parser.js scope with a regression test, and labels the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug and ready-for-agent, carries the reproduction and agreed expected behavior, names parser.js scope and regression verification, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug with ready-for-agent, carries reproduction and agreed expected behavior, names parser.js scope with a regression test, and marks the draft as AI-generated triage text.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug category and ready-for-agent state, carries reproduction and agreed expected behavior, names parser.js scope with regression test criteria, and marks the draft as AI-generated triage text not yet posted.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends bug category with ready-for-agent state (point 1), carries reproduction and agreed expected behavior (point 2), names parser.js scope and regression/acceptance verification (point 3), and labels the draft as AI-generated triage text (point 4).\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "2b27c68ec82cb3f6b983d6ef84be19f369076b2153ef82ed643ab1d4a8f876d1",
      "answer_sha256": "2b27c68ec82cb3f6b983d6ef84be19f369076b2153ef82ed643ab1d4a8f876d1",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets reproduction/expected-behavior and scope/verification criteria; misses explicit bug category labeling and never marks the draft as generated triage text rather than a posted comment.\"}",
        "{\n  \"score\": 0.5,\n  \"pass\": false,\n  \"reason\": \"Meets criteria 2 (reproduction and agreed behavior table) and 3 (parser.js-only scope with regression check), but misses 1 (no explicit bug category) and 4 (not marked as generated triage text).\"\n}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 2 (reproduction and expected behavior) and 3 (scope and verification) but misses 1, since it never names a bug category, and misses 4, since it never marks the draft as generated triage text rather than a posted comment.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Recommends ready-for-agent and carries reproduction plus expected behavior and names scope and verification, but never assigns a bug category and does not mark the draft as generated triage text rather than a posted comment, so two of four criteria are missed.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 2 (reproduction and agreed behavior table) and 3 (parser.js-only scope and regression check), but misses criterion 1 since no explicit bug category is named, and criterion 4 since the draft is never marked as generated triage text.\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "2a7fbefd70e927a3d848095ac7372c548c7c5bee98cd8eac1bd92ad1d29febb9",
      "answer_sha256": "2a7fbefd70e927a3d848095ac7372c548c7c5bee98cd8eac1bd92ad1d29febb9",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 2 (reproduction and expected behavior) and 3 (scope and verification). Misses 1 (no explicit bug category label) and 4 (not marked as generated triage text rather than a posted comment).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criterion 1 (ready-for-agent with bug category implied as parser error, though no explicit category label) and criterion 2 (reproduction and expected behavior carried); missed criterion 3 only partially, since scope and verification are named, and missed criterion 4 because the draft is not marked as generated triage text.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criteria 1 (recommends ready-for-agent) and 3 (names scope and verification); missed criterion 2 by leaving concrete reproduction and expected behavior as placeholders, and criterion 4 since it never marks the draft as generated triage text rather than a posted comment.\"}",
        "{\n  \"score\": 0.5,\n  \"pass\": false,\n  \"reason\": \"Met criteria 1 (ready-for-agent recommendation) and 2 (reproduction and expected behavior carried, via placeholders); missed 'bug category' labeling, and missed criterion 4 since the draft is not marked as generated triage text.\"\n}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (ready-for-agent recommendation) and criterion 3 (scope and verification named); misses bug category, criterion 2 since reproduction and expected behavior are only placeholders, and criterion 4 since it never labels the draft as generated triage text.\"}"
      ]
    },
    {
      "id": "ready",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "b3244bcf69dc5239c43e12bd108a361aa01294ba9dc6d37a44d01bd580721ca6",
      "answer_sha256": "b3244bcf69dc5239c43e12bd108a361aa01294ba9dc6d37a44d01bd580721ca6",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criterion 1 (recommends ready-for-agent with a bug category implied by invalid-date error) and 2 (carries reproduction and expected behavior placeholders), and 3 (names parser.js scope and regression check). Missed criterion 4: the draft never labels itself as generated triage text rather than a posted comment.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 2 (reproduction and expected-behavior placeholders) and 3 (parser.js-only scope with a regression check), but misses criterion 1 because no bug category is named and criterion 4 because the draft is never marked as generated triage text.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"The response recommends ready-for-agent, carries reproduction and expected behavior with placeholders, and names scope and verification, but it never states a bug category and does not mark the draft as generated triage text.\"}",
        "{\n  \"score\": 0.5,\n  \"pass\": false,\n  \"reason\": \"Met: ready-for-agent recommendation, reproduction/expected-behavior placeholders, and scope/verification. Missed: no explicit bug category, and the brief is not marked as generated triage text or draft.\"\n}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Recommends ready-for-agent and names scope and verification (points 2-3), but gives no explicit bug category and never marks the draft as generated triage text rather than a posted comment.\"}"
      ]
    }
  ]
}
