{
  "format": "driftproof-answers/2",
  "receipt_hash": "6983aa785fcd5d04730835a4a3b24ad45d0692ce4b95521bddaf31150a8e1f86",
  "model_id": "claude-sonnet-5-5",
  "answers": {
    "bcd275f99e1f1e8ba5ce3d42865e3df0bf618b9fe77f7a9b6fba4aab4009e70b": "Based on the facts you gave, here's what I'd propose. Nothing has been written.\n\n**Section A: Issue tracker → Local markdown** (recommended)\nThere's no remote, and you already track requests as markdown under `.scratch/<feature>/`, so this just formalizes your existing convention. It would be recorded in `docs/agents/issue-tracker.md` from the local-markdown template. Accept this, or tell me if you'd rather describe a different workflow.\n\n**Section B: Triage labels → Skipped**\nThe `triage` skill isn't installed, so there are no labels to configure. That means no `docs/agents/triage-labels.md`, no `### Triage labels` sub-block, and no label creation.\n\n**Section C: Domain docs → Single-context**\nIt's a single-package project with no monorepo signals, so I'd use one `GLOSSARY.md` and `docs/adr/` at the repo root, with no `GLOSSARY-MAP.md`. This needs no question from you.\n\n**What would get written (after you review a draft)**\n- `docs/agents/issue-tracker.md` (local markdown)\n- `docs/agents/domain.md` (single-context)\n- An `## Agent skills` block in your `CLAUDE.md` or `AGENTS.md`, with two sub-sections: Issue tracker and Domain docs\n\n**One thing I need from you:** I don't know whether `CLAUDE.md` or `AGENTS.md` exists. If one does, I'll edit it. If neither does, which should I create? I won't pick for you.\n\nAlso note this directory isn't a git repository. That doesn't affect these choices, since local markdown needs no remote, but it's worth knowing if you later want version history for the `docs/agents/` files.\n\nReply \"go\" to accept all of the above, or tell me what to change.",
    "0acac83dc75aa3a26c1bd0d3bd048b65185ffb366c444fa31e84f9f8902e7500": "Based on the facts you gave me, here's what I'd propose. Nothing has been written; this is just the plan for you to confirm or edit.\n\n**Section A: Issue tracker → Local markdown (recommended)**\nThere's no remote, and you already track requests as local markdown, so this just formalizes the existing convention. Issues live as files under `.scratch/<feature>/`. I'd record this in `docs/agents/issue-tracker.md` using the local-markdown template.\n\n**Section B: Triage labels → Skipped**\nThe `triage` skill isn't installed, so there's nothing that would use a label vocabulary. I'd write no `docs/agents/triage-labels.md` and leave the `### Triage labels` sub-block out of the agent skills block.\n\n**Section C: Domain docs → Single-context**\nIt's a single-package project with no monorepo signals, so I'd use one `GLOSSARY.md` and `docs/adr/` at the repo root. No question needed. I'd record it in `docs/agents/domain.md`.\n\n**Planned files**\n- `docs/agents/issue-tracker.md` (local-markdown template)\n- `docs/agents/domain.md` (single-context rules)\n- An `## Agent skills` block with two sub-sections, Issue tracker and Domain docs, added to `CLAUDE.md` or `AGENTS.md`\n\n**Draft block**\n\n```markdown\n## Agent skills\n\n### Issue tracker\n\nIssues are tracked as local markdown files under `.scratch/<feature>/`. See `docs/agents/issue-tracker.md`.\n\n### Domain docs\n\nSingle-context: one `GLOSSARY.md` and `docs/adr/` at the repo root. See `docs/agents/domain.md`.\n```\n\n**Two things I need from you**\n1. **Which file should hold the block?** I don't know yet whether `CLAUDE.md` or `AGENTS.md` exists. If one does, I'll edit that one. If neither does, tell me which to create.\n2. **Do you accept the above?** One word is enough, or tell me what to change.\n\nOne note: the working directory isn't a git repository. That doesn't block this setup, since local markdown needs no remote. It would matter only if you later want to use `/code-review ultra`, which needs a repo (I can `git init` if so).",
    "ef00d007b02310e35f4860328b76aaea765cb0a472e917138ae9370d686108d4": "Based on the facts you gave me, here's what I'd propose. No tools were used and nothing was written.\n\n**Section A: Issue tracker → Local markdown** (recommended)\nThere's no remote, and you already track requests as local markdown, so this just formalizes the existing convention. Issues live as files under `.scratch/<feature>/`. I'd record it in `docs/agents/issue-tracker.md` from the local-markdown template.\n\n**Section B: Triage labels → Skipped**\nThe `triage` skill isn't installed, so there's nothing to label. I'd omit `docs/agents/triage-labels.md` and the `### Triage labels` sub-block entirely.\n\n**Section C: Domain docs → Single-context**\nIt's a single-package project with no monorepo signals, so I'd use one `GLOSSARY.md` plus `docs/adr/` at the repo root, with the layout rules in `docs/agents/domain.md`. No question needed.\n\n**What I'd write**\n\n- `docs/agents/issue-tracker.md` (local markdown)\n- `docs/agents/domain.md` (single-context)\n- An `## Agent skills` block with two sub-sections, Issue tracker and Domain docs, added to `CLAUDE.md` if it exists, otherwise `AGENTS.md`. If neither exists, I'd ask you which to create rather than choosing for you.\n\nDraft block:\n\n```markdown\n## Agent skills\n\n### Issue tracker\n\nIssues are tracked as local markdown files under `.scratch/<feature>/`. See `docs/agents/issue-tracker.md`.\n\n### Domain docs\n\nSingle-context: one `GLOSSARY.md` and `docs/adr/` at the repo root. See `docs/agents/domain.md`.\n```\n\n**Two things to note**\n\n- The working directory isn't a git repository. That doesn't affect the local-markdown setup, but `git init` would be needed if you later want version history for `.scratch/` or want to use `/code-review ultra`.\n- Which of `CLAUDE.md` / `AGENTS.md` already exists wasn't in the facts you gave me, so that's the one open question before writing.\n\nDo you accept these choices, and which file should hold the block?",
    "fbc1c237ab10ed5c318f293be067e94414ccbb642d4505accd456cc4b487ec19": "Here's the setup I'd propose. I don't have the exact option list from the engineering-skills setup, so I'm mapping your facts onto the choices it most likely asks about.\n\n**1. Repository layout: single package**\n- Install skills at the project root with no per-package or workspace scoping.\n- Use one shared config and one set of conventions for the whole repo.\n\n**2. Remote / issue tracker: none (local only)**\n- Skip any GitHub, GitLab, or Linear integration. There's no remote to push to, open PRs against, or sync issues with.\n- Skills that assume a remote (PR creation, CI status checks, issue linking) should be left off or set to produce local artifacts only.\n\n**3. Request tracking: keep local markdown**\n- Keep your existing markdown files as the source of truth rather than migrating to a tracker.\n- Point the skills at the directory where those files live, and follow the existing format (headings, status fields, filenames) instead of imposing a new template.\n- Don't add a second tracking mechanism alongside it.\n\n**4. Triage skill: install it, configured for local markdown**\n- Since none is installed and requests already live in markdown, a triage skill is the main gap.\n- Configure it to read and update those files in place. It would set priority, status, and labels as fields or sections in the markdown, and nothing would go to an external service.\n- Keep it manually invoked at first, so it doesn't rewrite your files unprompted.\n\n**5. Version control: optional `git init`**\n- The directory isn't a git repository. That's fine for the setup, but I'd suggest initializing one (local only, still no remote) so edits to the request files and skill config are reversible. Some review features also need a repo.\n\n**Summary of recommended choices**\n\n| Choice | Selection |\n|---|---|\n| Project shape | Single package |\n| Remote integration | None |\n| Request tracking | Existing local markdown |\n| Triage skill | Install, local-markdown mode |\n| Git | Initialize locally (recommended, optional) |\n\nIf you tell me the actual option names in the setup, or where your request files live, I can map these onto them exactly.",
    "4ac4887235dfdc971c10380948429ea880e1c8228453718cbbbdd7fa4ed34134": "Here is the setup I'd propose, based only on the facts you gave. I don't have a spec for what \"engineering-skills setup\" asks, so I'm assuming the usual choices: repo layout, issue tracking, triage, and where skills live.\n\n**1. Project layout: single package**\n- Keep one root config, with no workspace or monorepo scaffolding.\n- Install skills at the project root, so there's no per-package scoping to manage.\n\n**2. Issue and request tracking: keep the local markdown**\n- Don't migrate to a hosted tracker. There's no remote, and your existing process already works.\n- Point the skills at your existing markdown directory instead of creating a new one.\n- Skills should read and write requests in your current format, so the setup adapts to your convention rather than the reverse.\n\n**3. Triage skill: install one, configured for local markdown**\n- This is the real gap, since none is installed.\n- Configure it to operate on the markdown files: read a request, assign status, priority, and labels (as front matter or a heading convention that matches what you already use), and move or mark it as triaged.\n- Disable anything that assumes a remote, such as GitHub issue sync, PR linking, or label APIs.\n\n**4. Source control: no remote, and currently no git repo**\n- The environment shows this directory isn't a git repository. I'd suggest running `git init` locally so changes to the request files and skills are versioned and reversible. A remote isn't needed.\n- Skills should never attempt to push, open PRs, or call remote APIs.\n\n**5. Skill scope: project-level**\n- Install the skills in the project, not globally, so the setup travels with the code and doesn't affect other work.\n\n**My recommendation:** keep the local markdown tracker, add a markdown-native triage skill, run `git init` for history, and leave remote-dependent features off. If you later add a remote, you can enable sync then.\n\nOne question would change this: what is your markdown format (one file per request, or a single file with sections, and any existing status convention)? That determines how I'd configure the triage skill.",
    "c2a4f3f322b4a584112a8b58f61a5ffa5ac39c4b51b29601a32497225e164202": "Here is my proposed setup, based only on the facts you gave. I don't have the setup's actual option list, so the choices are framed by what those facts imply.\n\n**1. Project layout: single package**\n- Install the skills once at the repo root.\n- Skip monorepo or per-package scoping, per-package config overrides, and workspace-aware path resolution.\n\n**2. Issue and request tracker: local markdown**\n- Keep your existing markdown files as the source of truth, with no migration or import step.\n- Point the skills at the directory where those files already live, and match your current file naming and format (headings, status fields, and so on) rather than imposing a new template.\n- Don't configure GitHub, GitLab, or Linear integrations.\n\n**3. Remote and publishing: none**\n- Leave remote-dependent features off: PR creation, remote branch pushes, CI status checks, and issue sync.\n- Have the skills stop at local commits and local branches.\n- If you add a remote later, rerun the setup to turn on PR-oriented skills.\n\n**4. Triage skill: install it, wired to the markdown tracker**\n- Triage is missing, and a tracker of markdown requests is where it helps most.\n- Configure it to read requests from the markdown directory, then label, prioritize, and mark status by editing those files in place.\n- It shouldn't try to write to an external tracker.\n\n**5. Sensible defaults for the rest**\n- Install the other core skills (planning, implementation, review) at project scope, so they live in the repo and not in your user-level config.\n- Commit the skill config so it's versioned with the code. With no remote, it's your only backup of that setup.\n- Keep everything non-destructive by default, so the skills ask before deleting or overwriting request files.\n\n**What I'd confirm before applying**\n- Where the markdown requests live, and whether they have a consistent structure.\n- Whether you want triage to edit those files directly or only propose changes.\n- Whether skills should be project-scoped (my recommendation) or user-scoped.\n\nIf those match your expectations, the setup is: single-package, local-markdown tracker, no remote, triage installed.",
    "21e3531d4f088d27586562f1140f304a4adf1b8596119b575ee95a2a505d3571": "Here is what I'd pick, based only on the facts you gave me. I don't know the exact option names in the setup flow, so I've described each choice by what it does.\n\n**1. Repo layout: single-package**\n- Use one top-level context for skills and docs, with no per-package scoping or workspace config.\n\n**2. Issue tracker: local markdown**\n- With no remote, a GitHub or GitLab integration has nothing to connect to.\n- Your requests already live as local markdown, so point the skills at that existing location and keep its current format. Don't migrate it.\n- The skills should read and write those files directly. If the files have no consistent frontmatter or status field yet, I'd add a minimal one (status, and optionally type or priority) so triage has something to act on. I'd confirm that with you before changing any existing files.\n\n**3. Triage skill: install it, with local-markdown defaults**\n- None is installed today, and local markdown is the part of the setup that triage depends on most.\n- Keep triage states minimal: `new`, `needs-info`, `ready`, `in-progress`, `done`, `wontfix`. Store them as a status field in each file rather than as labels, since there's no tracker to hold labels.\n- Triage should be a manual, on-request action. Nothing in a local-markdown setup needs it to run automatically.\n\n**4. Remote-dependent features: skip**\n- Leave out PR or issue syncing, remote-based review workflows, and anything that assumes `origin`. If you add a remote later, rerun setup then.\n\n**5. Branching: use `main` as the base**\n- Your git status shows `main` as the main branch, and the current `HEAD` is detached (no branch name). Check out or create a working branch before relying on branch-based skills.\n\n**Open questions that could change the above:**\n- Where do the request files live, and do they share a naming or frontmatter convention?\n- Do you want triage to edit those files in place, or only propose changes for you to approve?\n\nIf you confirm the request directory and say whether in-place edits are fine, the rest of the setup follows from the choices above.",
    "404736d3edbe4b696d25cb72ba0231a4b32a37f07fa960afd15f217603fd5bdb": "Answer \"no\" to the Section B question (\"keep the default triage labels?\"). That tells the setup to collect overrides, so `triage` applies your existing labels instead of creating new ones.\n\n**1. Map the roles you already have**\n\n| Canonical role | Label string |\n|---|---|\n| `needs-triage` | `bug:triage` |\n| `ready-for-agent` or `ready-for-human` | `bug:ready` |\n\n`bug:ready` can only stand in for one ready role, so the maintainer has to choose which. If it means \"an agent can pick this up,\" map it to `ready-for-agent`. If it means \"a person needs to handle it,\" map it to `ready-for-human`. I can't tell from the facts given, so that's their call.\n\n**2. Decide the remaining roles**\n\nYou haven't named labels for `needs-info`, `wontfix`, or the other ready role. For each one, either:\n- Point it at an existing label in the tracker, if one already does that job, or\n- Leave it at its default name (`needs-info`, `wontfix`, `ready-for-human` or `ready-for-agent`).\n\n**3. Record the mapping**\n\nThe mapping goes in `docs/agents/triage-labels.md`, with each canonical role next to the exact label string the tracker uses. The `## Agent skills` block in `CLAUDE.md` (or `AGENTS.md`) gets a one-line summary pointing to that file. The `triage` skill reads this file, so it applies `bug:triage` and `bug:ready` wherever it would have applied `needs-triage` and a ready role.\n\n**4. Avoid duplicates when creating labels**\n\nOn GitHub or GitLab, setup creates each configured label the tracker lacks (`gh label create` / `glab label create`). Because `bug:triage` and `bug:ready` are the configured strings and already exist, nothing is created for them. Only the unmapped roles get new labels, and only if those don't already exist.\n\nTwo things to check before confirming the draft:\n- The label strings must match the tracker's exactly, including case and the colon, or the existence check fails and a near-duplicate gets created.\n- The mapping should be one-to-one. Don't map two roles to the same label, or `triage` can't tell the states apart.\n\nYou can review the drafted `triage-labels.md` before anything is written.",
    "383d0ba664272ba36f878a4abc61fecced5afafa9136dc44411e60cab46bf7f9": "Answer **no** to the Section B question (\"Do you want to keep the default triage labels?\"). Then give the setup skill an override for each canonical role, so `triage` applies the labels that already exist instead of creating new ones.\n\n**Mapping from the facts you gave me**\n\n| Canonical role | Label string to record |\n|---|---|\n| `needs-triage` | `bug:triage` |\n| `ready-for-agent` or `ready-for-human` | `bug:ready` (see below) |\n| `needs-info` | not covered by what you told me |\n| the other `ready-*` role | not covered |\n| `wontfix` | not covered |\n\n**Decisions the maintainer needs to make**\n\n1. **`bug:ready` is ambiguous.** It can map to only one of `ready-for-agent` or `ready-for-human`, and the skill shouldn't guess. If their workflow has no human/agent split, `ready-for-agent` is the likely fit, since that is what the engineering skills pick up automatically. The other role then needs either its own existing label or a new one.\n2. **The three unmapped roles.** For each one, ask whether the repo already has an equivalent label under another name, such as `bug:needs-info` or an existing `wontfix`. If it does, map to it. If not, keep the default string. That label will be created, which is a genuinely new label rather than a duplicate.\n\n**What gets written**\n\n- `docs/agents/triage-labels.md` will list all five roles, each with its actual label string, for example `needs-triage → bug:triage` and `ready-for-agent → bug:ready`.\n- The `### Triage labels` line in the `## Agent skills` block of `CLAUDE.md` (or `AGENTS.md`, whichever already exists) should say the vocabulary is customized and point to that file.\n- You'll see drafts of both before anything is written, so the maintainer can correct the mapping then.\n\n**Why this avoids duplicates**\n\nIn the write step, the skill creates only the configured labels the tracker lacks (`gh label create` or `glab label create`). `bug:triage` and `bug:ready` already exist, so they are skipped. Duplicates would only appear if the maintainer accepted the defaults. Then `needs-triage` and `ready-for-agent` would be created alongside the existing labels, and the workflow would split across two sets.\n\nIf a mapped label's spelling or case differs from what's in the tracker, the skill could create a near-duplicate. Have the maintainer copy the exact strings from the tracker's label list.",
    "9b2f4d9abfad8c3fbe3287fe4db6fb47d62e4965b881614c8f7b742a46a422fc": "Answer **no** to the Section B question (\"keep the default triage labels?\"), then supply overrides so `triage` applies your existing labels instead of creating the canonical names alongside them.\n\n**Mapping**\n\n| Canonical role | Label string to record |\n|---|---|\n| `needs-triage` | `bug:triage` |\n| `ready-for-agent` or `ready-for-human` | `bug:ready` (see below) |\n| `needs-info` | undecided |\n| the other `ready-for-*` role | undecided |\n| `wontfix` | undecided |\n\n**Open decisions**\n\n1. **Which ready role `bug:ready` represents.** The facts only say it's a \"ready\" label, and the two ready roles differ: one means an agent can pick it up, the other means a human must. Mapping it to both would make them indistinguishable, so the maintainer needs to choose.\n2. **The remaining roles.** If the tracker already has labels for `needs-info`, `wontfix`, and the other ready role, record those names. Otherwise they keep their defaults, and setup will create them.\n\n**Avoiding duplicates**\n\n- The override mapping goes in `docs/agents/triage-labels.md`, and the `## Agent skills` block in `CLAUDE.md` (or `AGENTS.md`, whichever already exists) points to it.\n- During the write step, setup creates only labels the tracker lacks (`gh label create` or `glab label create`). Because `bug:triage` and `bug:ready` already exist, they won't be recreated. Only roles mapped to names that don't exist yet get created.\n- If the maintainer doesn't want any new labels, every role must be mapped to an existing label, which means identifying existing equivalents for the roles still undecided above.\n\nI haven't inspected the tracker, so I can't confirm which labels exist there or whether the exact strings (case, colon) match. Check that before the draft is approved.",
    "cb4ddbc77675ebb16fdffd1625a8a1ea51ff046dc610618ae1591ff298604fc1": "Here is how to configure it, based on the skill's Section B (triage label vocabulary) and the label-creation step in Section 4.\n\n**1. Answer \"no\" to the default-labels question.**\nSection B asks, \"Do you want to keep the default triage labels?\" The defaults are `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human` and `wontfix`. Since the maintainer wants to keep `bug:triage` and `bug:ready`, the answer is no, and you then collect overrides. This is the case the skill describes for trackers that already use other names.\n\n**2. Map each existing label to a canonical role.**\nThe role names stay fixed because the `triage` skill reasons in terms of them. Only the label string changes.\n\n| Canonical role | Configured label |\n|---|---|\n| `needs-triage` | `bug:triage` |\n| `ready-for-agent` | `bug:ready` (my assumption, see below) |\n| `needs-info` | default, or an existing label if the repo has one |\n| `ready-for-human` | default, or an existing label if the repo has one |\n| `wontfix` | default, or an existing label if the repo has one |\n\nThe mapping of `bug:triage` to `needs-triage` is straightforward. `bug:ready` is ambiguous, because it could mean `ready-for-agent` or `ready-for-human`. I'd map it to `ready-for-agent`, since that is the role the skills pick up automatically, but the maintainer should confirm. If `bug:ready` is meant for human work, map it to `ready-for-human` instead and decide separately what `ready-for-agent` should be.\n\n**3. Record the mapping in `docs/agents/triage-labels.md`.**\nThis file is seeded from the `triage-labels.md` template. Write each role next to its configured string, for example `needs-triage` → `bug:triage`. The `### Triage labels` summary in the `## Agent skills` block of `CLAUDE.md` (or `AGENTS.md`, whichever already exists) should say the repo uses a custom vocabulary and point to that file.\n\n**4. Why no duplicates get created.**\nIn the write step, the skill creates only labels that are configured and that the tracker lacks (`gh label create` or `glab label create`). Because the config now says `bug:triage` and `bug:ready`, and those already exist, nothing is created for those two roles. The canonical names `needs-triage` and `ready-for-agent` never enter the config, so they are never created.\n\n**5. Watch the remaining three roles.**\nAny role left on its default string (`needs-info`, `ready-for-human`, `wontfix`) will be created if the tracker lacks it. That is expected, but if the repo already has equivalents such as `bug:needs-info` or `wontfix` under another name, map them too. Check the existing label list first so the setup doesn't add near-duplicates.\n\n**6. Review before writing.**\nThe skill shows a draft of the `## Agent skills` block and `docs/agents/triage-labels.md` before writing anything. That is the point to confirm the `bug:ready` mapping and the three other roles.",
    "a826da695a363e5a21dbe73c5d63182f2918abd97211999d920216083cbbf760": "Answer **no** to the Section B question (\"Do you want to keep the default triage labels?\"). That makes the skill collect overrides, so `triage` applies your existing labels instead of creating the defaults next to them.\n\n**Mapping**\n\nThe five canonical roles are `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, and `wontfix`. The mapping is written to `docs/agents/triage-labels.md`, and `triage` reads it.\n\n| Canonical role | Label string |\n|---|---|\n| `needs-triage` | `bug:triage` |\n| `ready-for-agent` or `ready-for-human` | `bug:ready` (see below) |\n| `needs-info` | existing label if there is one, otherwise the default |\n| the other `ready-*` role | existing label if there is one, otherwise the default |\n| `wontfix` | existing label if there is one, otherwise the default |\n\n**Decisions for the maintainer**\n\n1. **Which ready role `bug:ready` maps to.** You have one label but two canonical ready roles. The facts supplied don't say which fits, so the maintainer has to choose. If `bug:ready` means \"an agent can pick this up\", map it to `ready-for-agent`. If it means \"a human should take it\", map it to `ready-for-human`.\n2. **The other ready role.** If the maintainer wants both distinctions, they need a second label for it, either an existing one or a new one. If they only use one, the other role stays unmapped or defaults to its canonical name.\n3. **The remaining roles.** `needs-info` and `wontfix` need an explicit string each. If equivalents already exist in the tracker, map them to those. Otherwise accept the defaults.\n\n**Avoiding duplicates**\n\nWhen Section B runs on GitHub or GitLab, the skill creates only the configured labels that the tracker lacks (`gh label create` / `glab label create`). Since `bug:triage` and `bug:ready` already exist, they won't be recreated. Only labels with no existing counterpart, such as a default `needs-info` or `wontfix`, would be created. Two things keep it clean:\n\n- Type the label strings exactly as they appear in the tracker, including the colon and case, since a mismatch would look like a missing label and get created.\n- Check the tracker for existing equivalents of the remaining roles before accepting any defaults.\n\n**Result**\n\nThe `## Agent skills` block in `CLAUDE.md` (or `AGENTS.md`, whichever exists) gets a `### Triage labels` line summarizing the custom vocabulary and pointing to `docs/agents/triage-labels.md`. Per the skill's draft-and-confirm step, the maintainer can review and edit that file before it's written, and edit it directly later without re-running the skill.\n\nI haven't checked the repo's actual labels, since I was asked not to use tools, so confirm the existing label names against the tracker.",
    "8beb0e431b5b1f0477568c781f5210728ddcb3900f45e136c8437354f958e1b4": "The facts you gave me don't include the workflow's config schema or the names of its canonical roles, so I can't give exact keys. The general approach is below, with placeholders where I'm inferring.\n\n**Approach: map each canonical role onto the existing label name, rather than renaming labels to match the defaults.**\n\n1. **Identify the canonical roles.** From the labels in use, these are most likely a \"needs triage\" role and a \"ready for work\" role. Check the workflow's docs or default config for the exact role identifiers (for example `triage` and `ready`) and their default label names.\n\n2. **Override the label names in the workflow's config.** Look for a labels or label-mapping section, and set each role to the existing name:\n   - triage role → `bug:triage`\n   - ready role → `bug:ready`\n\n   Use the exact strings, including the colon and casing. A mismatch such as `Bug:Triage` is the usual cause of duplicates, because label matching may be case-sensitive in the tool even if the host platform treats names case-insensitively.\n\n3. **Make sure the override applies before any label bootstrap or sync runs.** If the workflow creates missing labels on install or on first run, it will create its defaults (such as `triage` or `ready`) whenever it doesn't find the configured names. Set the mapping first. If the tool has an option to disable automatic label creation, turn it on, since the labels already exist.\n\n4. **Check for pre-existing duplicates before and after.** List the repo's labels and confirm that only `bug:triage` and `bug:ready` exist for these roles. If the workflow has already created default-named labels:\n   - Re-apply them to the issues that carry the stray labels, using the retained names.\n   - Delete the stray labels once nothing references them.\n\n5. **Verify with a dry run.** Apply `bug:triage` to a test issue and confirm the workflow recognizes it and transitions it to `bug:ready` without creating anything new. Then re-check the label list.\n\nIf you share the workflow's config file or its documented role names, I can give you the exact keys and values.",
    "04dcf9fd04ef9ec0ed946634db3699663b40f416658a59a83b5556086765c4e4": "I can't give you exact keys or file names, because the facts supplied don't include the workflow's configuration schema or its canonical role names. What I can say is based on the general approach, and I'm marking where I'm guessing.\n\n**The approach: map roles to your existing labels, don't create new ones**\n\n1. **Identify the canonical roles.** The workflow almost certainly defines a role for \"needs triage\" and one for \"ready to work\". Find where it declares these and what default label names it expects. That's usually a config file, workflow inputs, or repo variables, but I can't tell which from what I have.\n\n2. **Override the label name for each role.** Set the triage role's label to `bug:triage` and the ready role's label to `bug:ready`. The workflow then treats your existing labels as those roles, and nothing needs to be renamed or recreated.\n\n3. **Turn off any automatic label creation or sync.** If the workflow creates missing default labels on install or first run, disable that step or make sure the mapping is in place before it runs. Otherwise it may create its own defaults (for example `triage` or `ready`) next to yours, and you'd end up with duplicates.\n\n4. **Check for existing duplicates.** If the workflow already ran with defaults, look for stray labels. Move the issues on those labels to `bug:triage` or `bug:ready`, then delete the extras. Deleting a label removes it from every issue, so reassign first.\n\n5. **Verify.** Apply `bug:triage` to a test issue and confirm the workflow recognizes it as the triage role. Then confirm that moving it to `bug:ready` triggers the ready behavior and that no new labels appear in the repo's label list.\n\nIf you paste the workflow's config or README section on label settings, I can give you the exact edit.",
    "aa7aac09b1f0d32b0e3b515e249b3639c109c34dfb880efbdd81ad27ce23b00d": "I only have the facts you gave me: the installed triage workflow uses `bug:triage` and `bug:ready`, and the maintainer wants to keep them. I don't know the workflow's config schema or the names of its canonical roles, so the keys below are placeholders, not real option names.\n\n**Approach: map each canonical role to the existing label name, and don't let the workflow create its own defaults.**\n\n1. **Find the role-to-label mapping.** Check the workflow's docs or config for where it names its labels. Typically this is a `labels`, `roles`, or `label_map` block, or inputs or env vars on the workflow. The canonical roles are probably something like \"needs triage\" and \"ready for work\". Confirm which role corresponds to which label.\n\n2. **Point each role at the existing label, character for character.**\n   ```yaml\n   # placeholder keys; use whatever your workflow actually defines\n   labels:\n     triage: \"bug:triage\"\n     ready:  \"bug:ready\"\n   ```\n   Match the exact string, including the colon, case, and any whitespace. GitHub label matching is case-insensitive for lookup, but a different spelling or separator, such as `bug/triage` or `bug-triage`, is treated as a different label.\n\n3. **Turn off automatic label creation or sync.** If the workflow has a bootstrap, setup, or \"ensure labels exist\" step, disable it or make sure it reads the mapped names. Otherwise it may create the default canonical labels alongside yours, which is where duplicates come from.\n\n4. **Check the repo before the first run.** List the existing labels and confirm that `bug:triage` and `bug:ready` exist exactly once, and that no default-named labels (for example `triage` or `ready`) were already created by an earlier install. If any were, merge or delete them in the labels UI after moving their issues to the retained labels.\n\n5. **Verify with a dry run, if the workflow supports one.** Otherwise test on a single issue. Confirm that applying a role uses `bug:triage` or `bug:ready` and that the repo's label count doesn't change.\n\nIf you share the workflow's config file or docs, I can give you the exact keys and values instead of placeholders.",
    "bc08058cb940a0c23456f7a2ab8d964536c7cb5999886079e029a9a27d86aa08": "The facts supplied don't include the workflow's config schema or the names of its canonical roles, so I can't give exact keys or syntax. What follows is the general approach, which you'll need to map onto the workflow's real settings.\n\n**Approach: map roles to the existing labels instead of creating new ones**\n\n1. **Identify the canonical roles.** From the labels in use, there are presumably two: a \"needs triage\" role and a \"ready for work\" role. Check the workflow's docs or default config for their exact identifiers.\n\n2. **Point each role at the existing label name.** Most label-driven workflows have a role-to-label mapping, such as a `labels:` block, inputs, or variables. Set the triage role to `bug:triage` and the ready role to `bug:ready`, and leave the defaults unused.\n\n3. **Don't run any label bootstrap or sync step with the default names.** If the installer or a setup action creates its canonical labels (for example `triage` or `ready`), that is where duplicates come from. Either disable that step or run it only after the mapping is in place, so it finds the labels it expects and creates nothing.\n\n4. **Match names exactly.** Label matching is usually exact, so the colon, case, and any trailing whitespace in `bug:triage` and `bug:ready` must be identical in the config. A mismatch can make the workflow create a new label or silently stop matching.\n\n5. **Check for duplicates afterward.** List the repo's labels and confirm that only `bug:triage` and `bug:ready` exist for these roles. If any duplicates were already created, move their issues to the retained labels and then delete the extras.\n\n6. **Document the choice.** Note in the config or README that the labels are intentionally non-default, so a later upgrade or re-install doesn't reintroduce the canonical names.\n\nIf you share the workflow's config file or docs, I can give the exact mapping.",
    "23b1f336983a55cebcda3c56fb9a135de333740112a3633e7e0af575e024badb": "**Recommendation: multi-context.**\n\nThe workspace has `packages/orders` and `packages/catalog`, each with its own glossary and ADR folder. That's a genuine monorepo signal, and a single root `GLOSSARY.md` would collapse two distinct vocabularies into one (a term like \"product\" or \"item\" can legitimately mean different things in each).\n\n**Proposed layout**\n\n- `GLOSSARY-MAP.md` at the repo root, pointing to each context's glossary:\n  - `orders` → `packages/orders/GLOSSARY.md`, ADRs in `packages/orders/docs/adr/`\n  - `catalog` → `packages/catalog/GLOSSARY.md`, ADRs in `packages/catalog/docs/adr/`\n- `docs/agents/domain.md` seeded from the domain template, with consumer rules saying: read the map first, then the glossary and ADRs for the context being worked on, and only cross into the other context when a task spans both.\n- A `### Domain docs` entry in the `## Agent skills` block of `CLAUDE.md` or `AGENTS.md`, summarised as \"multi-context\", pointing to `docs/agents/domain.md`.\n\n**Confirmation needed from you**\n\n1. **Layout:** Is multi-context right, or do you want a single root `GLOSSARY.md` and `docs/adr/` instead? Since this is a real monorepo, I'd go multi-context.\n2. **Context names and paths:** Are `orders` and `catalog` the names you want in the map, and are the per-package paths above exactly where the glossaries and ADR folders live? (I haven't inspected the filesystem, so I'm going on what you told me.)\n3. **Root-level docs:** Do you want any shared or cross-context glossary at the root, or should the map be the only root-level file?\n4. **Target file:** Which of `CLAUDE.md` or `AGENTS.md` should get the `## Agent skills` block? I'll edit whichever already exists. If neither does, I need you to pick one.\n\nOnce you confirm, I'll show drafts of the `## Agent skills` block and `docs/agents/domain.md` for you to edit before writing anything.",
    "65542a8ee3f826487944412fc76790b54df1fc442f76e2c6f61d1616979e253c": "**Recommendation: multi-context.**\n\nYour facts show two packages, `packages/orders` and `packages/catalog`, each with its own glossary and ADR folder. That is a monorepo signal, so the single-context default doesn't apply. A single root `GLOSSARY.md` would collapse terms that likely mean different things in each context (e.g. \"Product\" or \"Item\" in catalog vs. orders).\n\n**Proposed layout**\n\n- Root `GLOSSARY-MAP.md` that points to each context's glossary:\n  - `packages/orders/GLOSSARY.md` and `packages/orders/docs/adr/`\n  - `packages/catalog/GLOSSARY.md` and `packages/catalog/docs/adr/`\n- `docs/agents/domain.md` records the multi-context consumer rules: read the map first, then the glossary and ADRs for the context being worked on.\n- `CLAUDE.md` (or `AGENTS.md`, whichever already exists) gets the `### Domain docs` line: \"multi-context. See `docs/agents/domain.md`.\"\n\nI'm assuming the glossaries and ADR folders sit at the package root (`packages/<name>/GLOSSARY.md`, `packages/<name>/docs/adr/`). Your facts don't give the exact paths, so I'd check them before writing the map.\n\n**Confirmation needed from you**\n\n1. Is multi-context the layout you want, or would you rather keep a single root glossary and ADR folder?\n2. Are the per-package paths above correct?\n3. Should any root-level or cross-cutting ADRs (spanning both packages) live in `docs/adr/` at the root?\n\nNothing gets written until you confirm. After that I'd show you drafts of the `## Agent skills` block and `docs/agents/domain.md` for editing, before writing them.\n\nThe other sections (issue tracker, triage labels) are separate questions, and I haven't covered them here.",
    "dcadb0d4d181b7a81d633c65dbe28ed82f92001b1021245af9529c30e3571885": "**Proposed layout: multi-context.**\n\nYour workspace has two packages (`packages/orders` and `packages/catalog`), each with its own glossary and ADR folder. That is a genuine monorepo signal, so the single-context default doesn't fit. A single root `GLOSSARY.md` would collapse two vocabularies that already live separately.\n\n**What I'd set up:**\n\n- A root `GLOSSARY-MAP.md` that points to each context's glossary:\n  - `packages/orders/GLOSSARY.md` (orders context)\n  - `packages/catalog/GLOSSARY.md` (catalog context)\n- Per-context ADRs stay where they are (the `docs/adr/` folder in each package), rather than being merged into a root `docs/adr/`.\n- `docs/agents/domain.md` records the multi-context consumer rules: read the map first, then the glossary and ADRs for the context being worked on.\n- The `## Agent skills` block gets a `### Domain docs` line saying \"multi-context\", pointing to `docs/agents/domain.md`.\n\n**Confirmation needed before I write anything:**\n\n1. **Layout:** Do you want multi-context as proposed, or single-context with one root glossary and ADR folder?\n2. **Paths:** Are the per-package glossaries and ADR folders at `packages/<name>/GLOSSARY.md` and `packages/<name>/docs/adr/`? You said each package has them, but not the exact locations, and I'd rather not guess. (The skill's exploration step would normally check, but I'm not running tools in this turn.)\n3. **Contexts:** Are `orders` and `catalog` the only two contexts, or are there others to include in the map?\n4. **Target file:** I'd also need to know whether `CLAUDE.md` or `AGENTS.md` exists, since I edit whichever is there, and ask you before creating one if neither is.\n\nOnce you confirm, I'll show you drafts of `GLOSSARY-MAP.md`, `docs/agents/domain.md`, and the `## Agent skills` block for editing before anything is written. The issue tracker choice (Section A) and triage labels (Section B, only if `triage` is installed) are separate questions I'll take after this one.",
    "e4579668e15a91215dc9c757c8ed89d5c1f65c2ed1599714607518559961622d": "**Proposed layout: multi-context**\n\nYour workspace has `packages/orders` and `packages/catalog`, each with its own glossary and ADR folder. That is a genuine monorepo signal, so the single-context default doesn't fit. I'd recommend:\n\n- A root `GLOSSARY-MAP.md` that points to each context's glossary:\n  - `packages/orders/GLOSSARY.md` (ADRs in `packages/orders/docs/adr/`)\n  - `packages/catalog/GLOSSARY.md` (ADRs in `packages/catalog/docs/adr/`)\n- `docs/agents/domain.md` describing the consumer rules: read the map first, then the glossary and ADRs for the context being touched.\n- A `### Domain docs` line in the `## Agent skills` block saying \"multi-context\", with a pointer to `docs/agents/domain.md`.\n\n**Confirmation needed**\n\n1. **Layout**: Do you want multi-context as proposed? Single-context (one root `GLOSSARY.md` and `docs/adr/`) is the alternative, but it would ignore the per-package glossaries you already have.\n2. **Paths**: The facts say each package has \"its own glossary and ADR folder\", but not the exact paths. Can you confirm that they are `packages/<name>/GLOSSARY.md` and `packages/<name>/docs/adr/`, or give me the real locations so the map is accurate?\n3. **Shared or cross-context material**: Is there anything that belongs to both contexts (e.g. a term like \"product\" used in orders and catalog) that should live at the root, or should the map just link the two contexts?\n\nOnce you confirm, I'd show you drafts of the `GLOSSARY-MAP.md`, `docs/agents/domain.md`, and the `## Agent skills` block for editing before writing anything. The issue tracker and triage label sections are still open and are separate questions.",
    "171caa68e64ef64f12f2c57715eb51a4a437742de08c0b2f1f55f84a5b0f2b20": "**Recommendation: multi-context.**\n\nThe facts you gave show two packages, `packages/orders` and `packages/catalog`, each with its own glossary and ADR folder. That is the monorepo signal that makes multi-context the right choice for Section C. A single root `GLOSSARY.md` + `docs/adr/` would either duplicate or collide with the per-package docs, so single-context doesn't fit.\n\n**Proposed layout**\n\n- Root `GLOSSARY-MAP.md` that points to each context's glossary:\n  - `orders` → `packages/orders/GLOSSARY.md`, ADRs in `packages/orders/docs/adr/`\n  - `catalog` → `packages/catalog/GLOSSARY.md`, ADRs in `packages/catalog/docs/adr/`\n- Optionally, a root `docs/adr/` for decisions that span both packages. Only add this if such decisions exist.\n- `docs/agents/domain.md` records the multi-context consumer rules: read `GLOSSARY-MAP.md` first, then the glossary and ADRs for the context being worked on.\n- The `## Agent skills` block gets a `### Domain docs` line saying \"multi-context\", pointing to `docs/agents/domain.md`.\n\n**Confirmation needed before writing anything**\n\n1. **Layout**: Do you want multi-context as proposed? (recommended: yes)\n2. **Exact paths**: Are the glossary and ADR locations exactly `packages/<name>/GLOSSARY.md` and `packages/<name>/docs/adr/`? I'm inferring those from your description, and I'd want to verify them in the repo once tools are allowed.\n3. **Cross-cutting ADRs**: Do you want a root-level `docs/adr/` for decisions affecting both packages?\n4. **Target file**: Which of `CLAUDE.md` or `AGENTS.md` should get the `## Agent skills` block? I'll edit whichever exists. If neither does, I'll ask you to choose.\n\nI haven't made any changes. Once you confirm, I'll draft the `GLOSSARY-MAP.md`, `docs/agents/domain.md`, and the agent-skills block for your review before writing.\n\nSections A (issue tracker) and B (triage labels) still need answers too, since they depend on your git remote and whether `triage` is installed, and I haven't been able to check either.",
    "2778b3aaacfed044727108d80d206c2c533ee9e5c06d4f3d1bac19923cef2ed8": "## Proposed decision: per-package domain docs, plus a thin root index\n\n**Layout**\n\n```\npackages/\n  orders/\n    docs/\n      GLOSSARY.md\n      adr/\n        0001-....md\n  catalog/\n    docs/\n      GLOSSARY.md\n      adr/\n        0001-....md\ndocs/                      # root, optional and thin\n  README.md                # points to each package's glossary and ADRs\n  adr/                     # only for decisions that span packages\n```\n\nWherever the two packages already keep their glossary and ADR folders, I'd keep them there rather than move anything. The shape above is the default if nothing is settled yet.\n\n**Rationale**\n\n- **Bounded contexts stay separate.** Orders and catalog may use the same word (e.g. \"product\", \"item\", \"SKU\") with different meanings. A single shared glossary would blur that. Separate glossaries let each term be defined in its own context.\n- **ADRs live with the code they govern.** A decision about orders changes alongside `packages/orders`, so review, ownership, and history stay together.\n- **Independent numbering.** Each package numbers its ADRs from 0001, so there are no cross-team collisions.\n- **Cross-package decisions get one home.** Anything affecting both (e.g. the order-to-catalog contract, shared identifiers) goes in the root `docs/adr/`, and each package links to it.\n- **Shared terms are defined once.** If a term truly means the same thing in both, define it in one glossary and link from the other instead of duplicating it.\n\n**Confirmation needed from you**\n\n1. **Per-package vs. single root.** Do you want the glossaries and ADRs kept separate per package, as proposed, or consolidated at the workspace root?\n2. **Root-level cross-package ADRs.** Should I create a root `docs/adr/` for decisions spanning both packages, or do you want to avoid root-level docs entirely?\n3. **Existing locations.** Are the current glossary and ADR folders already at the paths above (e.g. `packages/orders/docs/`), or at some other path? I'd adopt whatever exists rather than relocate it.\n4. **Overlapping terms.** When a term appears in both glossaries, should one package own the definition and the other link to it, or should each define it independently?\n\nOnce you confirm these, I can make any file changes. I haven't touched the workspace.",
    "007f308e298887f005b3ce34873243deb11c87f95ecd3b34dd2bb0ffaca362e1": "## Proposed decision: per-package domain docs, plus a thin root index\n\n**Layout**\n\n```\n/\n├── docs/\n│   └── CONTEXT-MAP.md          # thin: lists contexts, their relationships, and cross-cutting ADRs only\n│   └── adr/                    # only decisions that span packages (e.g. workspace tooling, shared contracts)\n├── packages/\n│   ├── orders/\n│   │   ├── GLOSSARY.md         # orders-only terms\n│   │   └── docs/adr/           # orders-only decisions (0001-*.md, numbered independently)\n│   └── catalog/\n│       ├── GLOSSARY.md         # catalog-only terms\n│       └── docs/adr/           # catalog-only decisions (numbered independently)\n```\n\n**Rationale**\n\n- Each package is its own bounded context, so each owns its glossary and ADRs. This keeps the vocabulary precise: a term like \"Product\" or \"Item\" can legitimately mean different things in orders and catalog, and merging them into one glossary would blur that.\n- ADRs live next to the code they constrain, so they get updated and reviewed in the same changes.\n- Independent numbering per package avoids cross-team collisions.\n- The root holds only a context map and truly cross-cutting ADRs. It does not duplicate package terms. Where orders depends on catalog terms, it links to the catalog glossary rather than redefining them.\n\n**Rules I'd adopt**\n\n1. A term is defined in exactly one glossary, the one for the context that owns it.\n2. Cross-package references use links, not copies.\n3. An ADR affecting both packages goes in root `docs/adr/` and is referenced from both package ADR folders.\n\n## Confirmation needed\n\nBefore I create or move anything, please confirm:\n\n1. **Per-package ownership**: Is it correct that orders and catalog are separate bounded contexts, rather than one shared domain with two code packages? If they share one language, a single root glossary would be better.\n2. **Root additions**: Do you want the root `docs/CONTEXT-MAP.md` and `docs/adr/`, or should the root stay empty and everything live under the packages?\n3. **Naming and location**: Is `GLOSSARY.md` at the package root and `docs/adr/` inside each package acceptable, or do you have existing conventions (e.g. `CONTEXT.md`, `adr/` directly under the package)?\n4. **Existing content**: Do any glossaries or ADRs already exist that need migrating? The git status shows a clean tree with no recent commits, so I'm assuming not, but I haven't inspected the files.\n\nOnce you confirm (or correct) these, I can scaffold the layout.",
    "1051fdd8ca31b689099b80f43260a81f9017f4c30a231c78b9db7253fcd407e1": "## Proposed decision: per-package domain docs, with a thin root index\n\n**Layout**\n\n```\n/\n├── docs/\n│   ├── README.md              # index only: links to each package's docs, lists cross-context relationships\n│   └── adr/                   # only for workspace-wide decisions (tooling, repo layout, cross-package contracts)\n└── packages/\n    ├── orders/\n    │   └── docs/\n    │       ├── glossary.md    # Orders' ubiquitous language\n    │       └── adr/           # Orders-only decisions\n    └── catalog/\n        └── docs/\n            ├── glossary.md    # Catalog's ubiquitous language\n            └── adr/           # Catalog-only decisions\n```\n\n**Rationale**\n\n- Each package is its own bounded context. A term like \"Product\" or \"Item\" can legitimately mean different things in Orders (a line item with price at time of sale) and Catalog (a sellable definition). Separate glossaries keep each definition unambiguous. A single merged glossary would force false unification.\n- ADRs live next to the code they constrain, so they get reviewed and changed with it, and ownership is obvious.\n- Cross-package decisions (e.g., how Orders references Catalog items) need a home that belongs to neither side. That is the root `docs/adr/`, and each package's glossary links to it rather than duplicating.\n- The root `docs/README.md` stays an index, so there is no third glossary to drift out of sync.\n\n**Conventions to keep it from drifting**\n\n- ADR numbering is per folder (`0001-...` in each), and cross-references use relative paths.\n- When a term appears in both glossaries, each entry notes the other context's meaning and links to it.\n- A cross-package ADR is recorded at the root and linked from both packages.\n\n## Confirmation needed\n\nBefore I create or move anything, please confirm:\n\n1. **Folder location:** do the existing glossary and ADR folders sit at `packages/<name>/docs/...`, or at another path (e.g., `packages/<name>/glossary.md` and `packages/<name>/adr/`)? I'd match whatever exists rather than impose `docs/`.\n2. **Root-level docs:** do you want the root `docs/` index and shared `adr/` folder, or should cross-package decisions go in one of the packages instead?\n3. **Shared terms:** should overlapping terms stay separately defined per context (my recommendation), or do you want a shared glossary for the common ones?\n\nIf you confirm 1 and 2 as proposed and 3 as separate definitions, I can proceed on that basis.",
    "ef930e680747a994d6cdc29564b3a5cb5a6be81bb0414947697ca5673984ec4c": "## Recommendation\n\nKeep the documents per package, since each package is its own bounded context. Add one thin root layer for anything that spans both.\n\n```\npackages/orders/    glossary + adr/    (orders-only terms and decisions)\npackages/catalog/   glossary + adr/    (catalog-only terms and decisions)\n<root>/             context-map + adr/ (cross-package decisions only)\n```\n\n**Rules**\n- **Glossaries:** Each package defines its own terms. If both packages use the same word (for example \"product\" or \"item\") with different meanings, each glossary defines it locally and the root context map notes the translation between them. There is no merged global glossary, because that would blur the boundaries.\n- **ADRs:** An ADR lives in the package it affects. An ADR that constrains both packages, such as how orders references catalog data, goes in the root `adr/` and is linked from both packages.\n- **Numbering:** Each ADR folder numbers independently, and cross-references use the package path plus the number (for example `orders/0003`). This avoids cross-team coordination on numbers.\n- **Root layer:** Keep it small. It holds only the context map and the cross-package ADRs, and it should never duplicate package content.\n\n## Confirmation needed\n\n1. **Root layer:** Do you want the root context map and cross-package ADR folder, or strictly per-package docs only? I recommend the root layer, but it's your call.\n2. **Paths:** I've only been given that each package has a glossary and an ADR folder, and I haven't looked at the actual file names or locations. Please confirm the exact paths, or let me inspect the repo, before anything is created or moved.\n3. **Shared terms:** Do orders and catalog share any vocabulary that needs an explicit mapping? If so, which side owns the canonical definition?\n4. **ADR numbering:** Are you fine with independent numbering per folder, or do you need one global sequence?\n\nOnce you confirm these, I can set up or adjust the files accordingly.",
    "949af614273c1b767e72d6da553cc8a7851adddc70ff25973206adde9d0b4ae4": "## Proposed layout decision\n\n**Keep domain documents per package, with each package acting as its own bounded context.** Each package owns its glossary and ADRs, and nothing is merged into a single root-level glossary.\n\n```\npackages/\n  orders/\n    GLOSSARY.md        (or docs/glossary.md, matching what exists)\n    adr/\n      0001-....md\n  catalog/\n    GLOSSARY.md\n    adr/\n      0001-....md\n```\n\n**Why:**\n- The same term (e.g. \"Product\", \"Item\") can legitimately mean different things in orders and catalog. A single shared glossary would force false agreement or constant disambiguation.\n- ADRs stay next to the code they constrain, so they change and get reviewed together with it.\n- ADR numbering is independent per package, which avoids cross-team collisions.\n\n**Rules to go with it:**\n1. A term or decision goes in the package that owns it. Other packages refer to it by link, not by copying.\n2. Where one context uses another's term, the glossary entry states which package is authoritative.\n3. Decisions that span both packages are recorded once in the package that is most affected, with a short pointer from the other.\n\n## Confirmation needed\n\nBefore I create or move anything, please confirm:\n\n1. **Per-package ownership.** Is the per-package layout (no shared root glossary) what you want?\n2. **Cross-cutting docs.** Do you want a root-level location (e.g. `docs/adr/` and a context map) for workspace-wide decisions, or should those live in whichever package is most affected? I recommend skipping the root location until a real cross-cutting decision exists.\n3. **Exact paths and names.** I was told each package has a glossary and an ADR folder, but not their filenames or locations. Should I keep the existing names as they are, or normalize them across the two packages?\n4. **Scope of action.** Is this only a decision to record, or should I also add a short note (for example in a README or contributing doc) that explains the convention?\n\nIf you reply \"yes, per-package, no root docs, keep existing names\", I'll proceed on that basis.",
    "42e6826d302687178128b26d7f27c60035e9466e12d249033e17b9cf66f74b79": "**Proposed decision: keep documents per-package, with a thin root index.**\n\n**Layout**\n\n```\n/\n  docs/\n    README.md            # index: points to each package's glossary and ADRs\n    adr/                 # only cross-cutting ADRs (workspace tooling, shared conventions, inter-package contracts)\n    context-map.md       # optional: how orders and catalog relate, and which terms cross the boundary\n  packages/\n    orders/\n      docs/\n        glossary.md\n        adr/0001-....md\n    catalog/\n      docs/\n        glossary.md\n        adr/0001-....md\n```\n\n**Rationale**\n- Each package already has its own glossary and ADR folder, which suggests each is a bounded context. The same word (e.g. \"Product\", \"Item\", \"SKU\") can legitimately mean different things in orders and catalog, so a single merged glossary would blur or force false agreement.\n- Decisions stay next to the code they affect and can be versioned, moved, or extracted with the package.\n- ADR numbering is independent per package, so there are no cross-team collisions. Cross-cutting decisions go in the root `docs/adr/` with their own numbering, and package ADRs link to them when relevant.\n- The root index and context map give readers and tooling one entry point without duplicating content.\n\n**Rules to go with it**\n1. A term is defined in the glossary of the package that owns it. Other packages link to it rather than redefine it.\n2. An ADR that affects both packages lives at the root, and each package ADR it touches gets a short pointer.\n3. If a term is used in both packages with different meanings, note that in `context-map.md`.\n\n**Confirmation needed from you**\n1. Are orders and catalog meant to be separate bounded contexts with possibly different vocabulary? If they share one ubiquitous language, a single root glossary would be better.\n2. Do you want a root `docs/` at all (index, cross-cutting ADRs, context map), or strictly per-package docs with nothing at the root?\n3. Is the in-package location `packages/<name>/docs/{glossary.md,adr/}` right, or do the existing glossary and ADR folders sit elsewhere (e.g. directly under the package root)? I only know that they exist, not their exact paths, so I'd keep whatever is already there.\n4. Should existing ADR numbering remain per package (my recommendation)?\n\nIf you confirm 1 and 2 as described, and the existing paths are fine, I'd proceed with this layout.",
    "f2f592330866a402c5f5cf784637464aa79a001a4b486f68411771441f0e0b83": "**Proposed decision: per-package domain docs, with a thin root index.**\n\n**Layout**\n\n```\n/\n├── docs/\n│   └── README.md            # index only: links to each package's glossary and ADRs\n│   └── adr/                 # optional: only workspace-wide decisions (tooling, repo layout, cross-package contracts)\n└── packages/\n    ├── orders/\n    │   └── docs/\n    │       ├── glossary.md\n    │       └── adr/0001-*.md\n    └── catalog/\n        └── docs/\n            ├── glossary.md\n            └── adr/0001-*.md\n```\n\n(Exact folder names should follow whatever each package already uses. This is a layout sketch, not a rename plan.)\n\n**Rationale**\n\n- Each package already owns its glossary and ADR folder, so each is treated as a bounded context. Terms like \"product\", \"item\", or \"order line\" can legitimately mean different things in orders and catalog. Merging glossaries would force false agreement or create conflicts.\n- ADR numbering stays independent per package, so there are no cross-team collisions and decisions stay next to the code they affect.\n- Docs move with the package if it is split out, renamed, or versioned.\n- The root index solves discoverability without becoming a second source of truth.\n\n**Rules to go with it**\n\n1. A term is defined in exactly one glossary: the package that owns it. The other package links to it rather than redefining it.\n2. Decisions affecting both packages go in the root `docs/adr/` (or in the owning package, with a link from the other). Pick one and apply it consistently.\n3. Where the two packages use the same word differently, record that explicitly in each glossary with a cross-reference.\n\n**Confirmation needed before I act**\n\n1. **Is per-package ownership the intended model**, i.e., are orders and catalog separate bounded contexts with their own vocabulary? Or do you want one shared workspace-wide glossary?\n2. **Do you want a root `docs/` at all**, with an index only or also workspace-wide ADRs? Or should the root stay empty of domain docs?\n3. **Where should cross-package decisions live**: root ADRs, or the owning package with a link from the other?\n4. **Any existing conventions to preserve**, such as the actual names of the glossary files and ADR folders, ADR numbering or template, or tooling that reads these paths (CI, docs site, lint)?\n\nI have not inspected the repository, so the above relies only on what you described. If you confirm 1–3 (and tell me about 4), I can draft the index and the cross-reference rules, or apply the layout in a follow-up where tools are allowed.",
    "67d66d552bee567e83ffaea5b119aad952ead6802d8b1ace38df45fd37d4e148": "## Proposed layout decision\n\n**Keep documentation per package (bounded-context style), with a thin root index.** Don't merge the two glossaries or ADR folders.\n\n```\n/\n├── docs/\n│   ├── README.md              # index: lists contexts, links to each glossary/ADR folder\n│   ├── context-map.md         # how orders and catalog relate (who depends on whom, shared terms)\n│   └── adr/                   # only for cross-package / workspace-wide decisions\n├── packages/\n│   ├── orders/\n│   │   ├── GLOSSARY.md        # (or existing glossary location)\n│   │   └── docs/adr/\n│   └── catalog/\n│       ├── GLOSSARY.md\n│       └── docs/adr/\n```\n\n(Exact filenames and paths should match whatever the packages already use; I'm only proposing structure, not renaming.)\n\n### Rationale\n- **Terms can legitimately differ across contexts.** \"Product,\" \"item,\" or \"SKU\" often mean different things in catalog vs. orders. A single merged glossary would force false unification or constant disambiguation.\n- **ADRs belong next to the code they constrain.** Package-local ADRs stay discoverable, versioned, and reviewable with the changes they govern.\n- **Ownership and independence.** Each package can evolve, be extracted, or be owned by a different team without untangling shared docs.\n- **A root layer handles the seams.** Cross-cutting decisions (e.g., how orders references catalog items) don't fit either package, so they get a workspace-level ADR folder and a context map.\n\n### Rules to go with it\n1. A term is defined in exactly one glossary. The other package links to it rather than redefining it.\n2. An ADR lives in the package it primarily affects. If it affects both, it goes in the root `docs/adr/` and each package links to it.\n3. Cross-package ADR numbering is independent per folder, with no global sequence.\n\n## Confirmation needed before I act\n\n1. **Root-level layer:** Do you want the root `docs/` (index, context map, shared ADRs), or strictly package-local docs only?\n2. **Existing locations:** Where do the glossaries and ADR folders currently sit in each package, and do they use the same names? I'd conform to existing conventions rather than move files.\n3. **Shared terms:** Are there terms that both packages use today? If so, which package owns each definition?\n4. **Scope of change:** Should this be only a written convention (e.g., in the root README), or should I also create the missing index/context-map files and any link stubs?\n\nOnce you confirm (especially 1 and 4), I can make the changes. No files have been touched so far."
  },
  "draws": [
    {
      "id": "local",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "bcd275f99e1f1e8ba5ce3d42865e3df0bf618b9fe77f7a9b6fba4aab4009e70b",
      "answer_sha256": "bcd275f99e1f1e8ba5ce3d42865e3df0bf618b9fe77f7a9b6fba4aab4009e70b",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Proposes keeping the existing local markdown tracker, uses single-context domain layout, skips triage-label setup since triage is absent, and states nothing is written until a draft is reviewed.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: proposes the existing local markdown tracker, uses single-context domain layout, skips triage-label setup, and states nothing was written pending review of a draft.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response proposes keeping the existing local markdown tracker, uses single-context domain layout, skips triage-label setup since triage is absent, and states nothing has been written with a draft to review first. All four criteria met.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response preserves the existing local markdown tracker, uses single-context domain layout, skips triage-label setup since triage is absent, and presents a draft stating nothing has been written before any changes are claimed.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: preserves local markdown tracker, uses single-context domain layout, skips triage-label setup since triage is absent, and presents a draft with 'Nothing has been written' before any file changes.\"}"
      ]
    },
    {
      "id": "local",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "0acac83dc75aa3a26c1bd0d3bd048b65185ffb366c444fa31e84f9f8902e7500",
      "answer_sha256": "0acac83dc75aa3a26c1bd0d3bd048b65185ffb366c444fa31e84f9f8902e7500",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four rubric points: preserves the local-markdown tracker, uses single-context domain layout, skips triage-label setup, and presents a draft with no files claimed as changed.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Criterion 1 met: proposes keeping the existing local-markdown tracker under .scratch. Criterion 2 met: selects single-context layout with root GLOSSARY.md and docs/adr. Criterion 3 met: skips triage-label setup since triage is absent. Criterion 4 met: presents a draft and states nothing has been written.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Proposes the existing local-markdown tracker, uses the single-context domain layout, skips triage-label setup, and states nothing was written while presenting a draft first, meeting all four rubric points.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Criterion 1 met: preserves local markdown tracker under .scratch/. Criterion 2 met: single-context GLOSSARY.md and docs/adr/ at root. Criterion 3 met: triage-labels setup skipped since triage is absent. Criterion 4 met: explicitly says nothing was written and presents a draft for confirmation.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: preserves local-markdown tracker (Section A, no remote), uses single-context domain layout (Section C), skips triage-label setup (Section B), and presents a draft while stating nothing has been written.\"}"
      ]
    },
    {
      "id": "local",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "ef00d007b02310e35f4860328b76aaea765cb0a472e917138ae9370d686108d4",
      "answer_sha256": "ef00d007b02310e35f4860328b76aaea765cb0a472e917138ae9370d686108d4",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Proposes the existing local-markdown tracker, uses the single-context domain layout, skips triage-label setup, and presents a draft while stating nothing was written.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Criterion 1 met (proposes keeping local markdown tracker, no remote); criterion 2 met (single-context GLOSSARY.md and docs/adr layout); criterion 3 met (triage-label setup skipped entirely); criterion 4 met (presents draft block and asks for acceptance, claims no files written).\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Proposes the existing local-markdown tracker, uses the single-context domain layout, skips triage-label setup, and presents a draft block while stating nothing was written.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: proposes the existing local-markdown tracker, uses the single-context domain layout, skips triage-label setup, and presents a draft while stating nothing was written.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: proposes keeping the existing local-markdown tracker, uses single-context domain layout, skips triage-label setup since triage is absent, and presents a draft block before any file changes (explicitly noting nothing was written).\"}"
      ]
    },
    {
      "id": "local",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "fbc1c237ab10ed5c318f293be067e94414ccbb642d4505accd456cc4b487ec19",
      "answer_sha256": "fbc1c237ab10ed5c318f293be067e94414ccbb642d4505accd456cc4b487ec19",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criteria 1 (keeps local markdown tracker) and 4 (proposes without claiming changes). Missed 2 (no single-context domain layout) and 3 (proposes installing triage with label-style fields).\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets the local tracker preservation, single-layout, and draft-before-changes criteria, but misses skipping triage setup by proposing to install and configure a triage skill with labels.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets 1 (keeps local markdown tracker) and 4 (proposes without claiming changes). Misses 2 (frames layout as single package, not single-context domain) and 3 (proposes installing triage with label setup though triage is absent).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Keeps the existing local markdown tracker and presents a proposal without claiming changes, but never addresses the single-context domain layout and proposes installing triage with labels, which the rubric says to skip.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (keeps local markdown tracker) and 4 (proposes without claiming changes); misses 2 (no single-context domain layout) and 3 (proposes installing triage with label setup).\"}"
      ]
    },
    {
      "id": "local",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "4ac4887235dfdc971c10380948429ea880e1c8228453718cbbbdd7fa4ed34134",
      "answer_sha256": "4ac4887235dfdc971c10380948429ea880e1c8228453718cbbbdd7fa4ed34134",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (keeps the local markdown tracker) and criterion 4 (presents a proposal without claiming changes); misses criterion 3 by proposing triage setup with label configuration, and criterion 2 by not describing a single-context domain layout.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met: keeps the local markdown tracker and presents a proposal without claiming changes. Missed: no single-context domain layout, and it proposes installing and configuring a triage skill with triage labels although triage is absent.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 by keeping the local markdown tracker and criterion 4 by proposing rather than claiming changes; misses criterion 3 by proposing triage-label setup and does not clearly state the single-context layout (criterion 2).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (keeps local markdown tracker) and 4 (proposes without claiming changes); misses 2 (no single-context domain layout) and 3 (still configures triage labels despite no triage skill).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (keeps the local markdown tracker) and 4 (proposes without claiming changes); misses 2 (no single-context domain layout) and 3 (it proposes installing and configuring triage labels despite triage being absent).\"}"
      ]
    },
    {
      "id": "local",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "c2a4f3f322b4a584112a8b58f61a5ffa5ac39c4b51b29601a32497225e164202",
      "answer_sha256": "c2a4f3f322b4a584112a8b58f61a5ffa5ac39c4b51b29601a32497225e164202",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets tracker preservation, single-package layout, and presenting a draft before applying; misses skipping triage setup because it recommends installing and wiring triage despite triage being absent.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Met criteria 1, 2, and 4: it keeps the existing markdown tracker, uses single-package layout, and presents a draft before applying. Missed criterion 3 because it recommends installing triage with label and priority setup despite triage being absent.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 by keeping the existing markdown tracker and criterion 4 by proposing without claiming changes; misses criterion 2 (no single-context domain layout named) and criterion 3 (it recommends installing triage despite triage being absent).\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2, and 4: it keeps the local markdown tracker, uses a single-package root layout, and presents a draft without claiming changes. It misses criterion 3 by proposing to install triage and configure it against the markdown tracker even though triage is absent.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met: keeps the existing local markdown tracker and presents a proposal without claiming changes. Missed: never mentions a single-context domain layout, and proposes installing triage despite it being absent.\"}"
      ]
    },
    {
      "id": "local",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "21e3531d4f088d27586562f1140f304a4adf1b8596119b575ee95a2a505d3571",
      "answer_sha256": "21e3531d4f088d27586562f1140f304a4adf1b8596119b575ee95a2a505d3571",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets preserve-local-tracker, single-context layout, and draft-before-changes; misses skip-triage-label setup because it still recommends installing triage with defined states.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (keeps the existing local markdown tracker), 2 (single top-level context), and 4 (asks before changing files, claims no changes). Misses 3: it recommends installing triage and defining its status states despite triage being absent.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (keeps the existing local markdown tracker) and 2 (single-context layout), but misses 3 by proposing triage installation and triage state setup, and misses 4 by not presenting a draft.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (keeps the existing local markdown tracker) and 2 (single-context layout), and avoids claiming file changes for criterion 4. It misses criterion 3 because it recommends installing triage with a status-field setup even though triage is absent.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (keeps the existing local markdown tracker), 2 (single top-level context layout), and 4 (proposes setup and asks before changing files). Misses 3, since it recommends installing triage and defining triage states despite no triage skill being present.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "404736d3edbe4b696d25cb72ba0231a4b32a37f07fa960afd15f217603fd5bdb",
      "answer_sha256": "404736d3edbe4b696d25cb72ba0231a4b32a37f07fa960afd15f217603fd5bdb",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves both strings, and avoids duplicate creation. It defers the ready-role choice to the maintainer but proposes defaults for needs-info and wontfix rather than asking about them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 3, and 4: it maps bug:triage and bug:ready to canonical roles, keeps the strings, and avoids duplicates. Missed criterion 2: it defaults unmapped roles instead of asking the maintainer about them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 3, and 4: it maps bug:triage and bug:ready to canonical roles, keeps those strings, and avoids creating duplicates. Missed criterion 2: it proposes defaults for needs-info and wontfix instead of asking about unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves exact label strings, and avoids duplicating existing labels. It misses criterion 2 because it proposes defaults for needs-info and wontfix instead of asking about them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves exact label strings, and avoids duplicating configured labels. It gives defaults for the other roles instead of asking the maintainer about them, so criterion 2 is missed.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "383d0ba664272ba36f878a4abc61fecced5afafa9136dc44411e60cab46bf7f9",
      "answer_sha256": "383d0ba664272ba36f878a4abc61fecced5afafa9136dc44411e60cab46bf7f9",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage to needs-triage and bug:ready to a ready role, preserves those strings, asks the maintainer about the unmapped roles, and explains how overrides prevent duplicate default labels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks the maintainer about the unmapped roles and the ambiguous bug:ready, preserves the existing label strings, and avoids creating duplicates of the default labels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks about the unmapped roles before filling them, preserves the existing label strings, and avoids creating duplicate default labels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks about unmapped roles instead of inventing them, keeps existing label strings, and avoids duplicate default labels.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles (criterion 1), asks about unmapped roles instead of inventing a mapping (2), preserves existing label strings (3), and avoids creating duplicates of existing labels (4); the response is solid but the bug:ready-to-role choice is somewhat speculative.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "9b2f4d9abfad8c3fbe3287fe4db6fb47d62e4965b881614c8f7b742a46a422fc",
      "answer_sha256": "9b2f4d9abfad8c3fbe3287fe4db6fb47d62e4965b881614c8f7b742a46a422fc",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles (1), asks about unmapped roles and the ambiguous ready role instead of inventing a full mapping (2), preserves existing label strings (3), and avoids recreating existing labels (4); partially undermined by suggesting new labels may be created for unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves existing label strings, asks about unmapped roles instead of inventing them, and avoids recreating existing labels; but it does not explicitly state that default labels should not be duplicated beyond the existing-label note, so criterion 4 is only partly addressed.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves existing label strings, avoids recreating existing labels, and asks the maintainer about unmapped roles; it misses the required rubric point on not inventing a full mapping, since it leaves roles undecided rather than asking directly, so partial credit is appropriate.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles (criterion 1), asks about unmapped roles instead of inventing them (2), preserves existing label strings (3), and avoids recreating existing labels (4); the response is otherwise well-grounded, though it asserts a create-if-missing behavior not explicitly stated in the supplied facts.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, leaves unmapped roles as open questions, preserves exact label strings, and avoids recreating existing default labels.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "with_skill",
      "draw_index": 3,
      "generation_hash": "cb4ddbc77675ebb16fdffd1625a8a1ea51ff046dc610618ae1591ff298604fc1",
      "answer_sha256": "cb4ddbc77675ebb16fdffd1625a8a1ea51ff046dc610618ae1591ff298604fc1",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage to needs-triage and bug:ready to ready-for-agent, preserves both strings, and avoids creating duplicates. It does not explicitly ask about the three unmapped roles, only defaulting them and deferring to review.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage to needs-triage and bug:ready to ready-for-agent, preserves the existing strings, and avoids duplicate default creation. It flags the bug:ready mapping and remaining roles for maintainer confirmation instead of fully inventing them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves existing strings, and avoids creating duplicate defaults. It only partly meets the ask-about-unmapped-roles criterion, since it fills the other three roles with defaults and defers confirmation to review.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: maps bug:triage and bug:ready to canonical roles, keeps the existing strings, and avoids creating duplicates. Misses criterion 2: it defers the other three roles to defaults and review instead of explicitly asking about them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves both label strings, and avoids creating default duplicates. It defers the other three roles to defaults and review instead of explicitly asking about them, so criterion 2 is only partly met.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "with_skill",
      "draw_index": 4,
      "generation_hash": "a826da695a363e5a21dbe73c5d63182f2918abd97211999d920216083cbbf760",
      "answer_sha256": "a826da695a363e5a21dbe73c5d63182f2918abd97211999d920216083cbbf760",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks the maintainer to decide the ambiguous ready role and unmapped roles, preserves exact label strings, and avoids recreating existing labels.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves exact label strings, and avoids recreating existing labels. Asks the maintainer to choose the ready role, but still proposes default fallbacks for needs-info and wontfix instead of asking.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, preserves exact label strings, and avoids recreating existing labels. It asks the maintainer about the ambiguous ready role but still fills in conditional defaults for the rest.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks the maintainer to decide unmapped roles, preserves exact label strings, and avoids recreating existing labels as duplicates.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to canonical roles, asks the maintainer to decide unmapped roles, preserves exact label strings, and prevents duplicate default labels by reusing existing ones.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "8beb0e431b5b1f0477568c781f5210728ddcb3900f45e136c8437354f958e1b4",
      "answer_sha256": "8beb0e431b5b1f0477568c781f5210728ddcb3900f45e136c8437354f958e1b4",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Maps triage and ready roles to existing bug:triage and bug:ready strings and preserves exact casing (criteria 1 and 3), and addresses duplicate prevention via label-creation ordering (criterion 4); but it never asks about unmapped roles and instead proposes a full mapping, missing criterion 2.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps triage and ready roles onto existing label strings, preserves them exactly, and prevents duplicate default labels via bootstrap ordering and cleanup. It misses the explicit request to ask about unmapped roles, though it does ask for the config or role names at the end.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Maps roles to preserved bug:triage and bug:ready strings and avoids duplicates (criteria 1, 3, 4 met), but never asks about unmapped roles, instead assuming the mapping and giving a generic workflow; criterion 2 missed.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps triage and ready roles to bug:triage and bug:ready (criterion 1), preserves exact label strings (3), and addresses preventing duplicate default labels (4). It does not ask about unmapped roles, only offers to see config later (2 missed).\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps triage and ready roles to the exact existing labels, preserves the strings, and prevents duplicate defaults. It asks for the config only at the end instead of first asking about unmapped roles, and it infers the role set.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "04dcf9fd04ef9ec0ed946634db3699663b40f416658a59a83b5556086765c4e4",
      "answer_sha256": "04dcf9fd04ef9ec0ed946634db3699663b40f416658a59a83b5556086765c4e4",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps bug:triage and bug:ready to roles, preserves label strings, and disables auto-creation to avoid duplicates. It does not clearly ask about unmapped roles, only requests the config at the end.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets mapping to canonical roles, preserving label strings, and avoiding duplicate default labels; weakly meets asking for config instead of inventing a full mapping, since it guesses role names rather than asking about unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets map-to-canonical-roles (bug:triage/bug:ready), preserves label strings, and prevents duplicate default labels; misses the criterion to ask about unmapped roles, instead guessing role names and asking for config only at the end.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps triage and ready roles to existing bug:triage and bug:ready, preserves label strings, and addresses duplicate prevention. It offers to review the config rather than inventing a full mapping, but never explicitly asks about unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: maps bug:triage and bug:ready to roles, preserves label strings, and prevents duplicate defaults. Criterion 2 is weakly met: it avoids inventing a full mapping and asks for the config, but never asks about unmapped roles.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "aa7aac09b1f0d32b0e3b515e249b3639c109c34dfb880efbdd81ad27ce23b00d",
      "answer_sha256": "aa7aac09b1f0d32b0e3b515e249b3639c109c34dfb880efbdd81ad27ce23b00d",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (maps roles to existing labels), 3 (preserves exact label strings), and 4 (disables default label creation and checks for duplicates). Misses criterion 2: it invents placeholder role names and mapping rather than asking about unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps the two roles to the existing labels, preserves exact label strings, and prevents default duplicates. It doesn't explicitly ask about unmapped roles, only speculating on role names and asking for the config.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps the triage and ready roles to the existing bug:triage and bug:ready strings, preserves exact label strings, and addresses avoiding duplicate default labels. It misses criterion 2: it infers role names and offers to review the config rather than asking about unmapped roles.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Maps canonical roles to the existing labels and preserves exact strings, and avoids duplicates, but never asks about unmapped roles and instead guesses role names like 'needs triage' and 'ready for work'.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Maps roles to existing labels and preserves exact label strings (criteria 1 and 3 met), but it never asks about unmapped roles and instead proposes placeholder mappings, and it addresses duplicate prevention only through generic steps, so criteria 2 and 4 are not clearly satisfied.\"}"
      ]
    },
    {
      "id": "labels",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "bc08058cb940a0c23456f7a2ab8d964536c7cb5999886079e029a9a27d86aa08",
      "answer_sha256": "bc08058cb940a0c23456f7a2ab8d964536c7cb5999886079e029a9a27d86aa08",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps the triage and ready roles to bug:triage and bug:ready, preserves exact label strings, and disables the bootstrap step to avoid duplicates; it misses rubric point 2 by assuming two roles rather than asking about unmapped ones.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps triage and ready roles to the existing bug:triage and bug:ready labels, preserves exact strings, and avoids default label bootstrapping; it does not explicitly ask about unmapped roles.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 3, and 4: maps roles to existing bug:triage and bug:ready, preserves exact strings, and avoids default-label duplicates. Missed criterion 2: it never asks about unmapped roles, only assumes two.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Maps roles to the existing bug:triage and bug:ready labels, preserves exact label strings, and avoids default-label bootstrap duplicates. It misses criterion 2: it presumes two roles and offers a mapping rather than asking about unmapped roles.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response maps the triage and ready roles to bug:triage and bug:ready (criterion 1 and 3 met) and avoids creating default-named duplicates (criterion 4 met), but never asks about unmapped roles, instead assuming two roles exist and suggesting a full mapping (criterion 2 missed).\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "23b1f336983a55cebcda3c56fb9a135de333740112a3633e7e0af575e024badb",
      "answer_sha256": "23b1f336983a55cebcda3c56fb9a135de333740112a3633e7e0af575e024badb",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets multi-context recognition, the root GLOSSARY-MAP.md proposal, and confirmation before writing; misses preserving existing locations because it invents ADR and glossary paths it never verified.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the per-package glossaries and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to them in place, and asks for confirmation before writing anything.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2, and 4: it recognizes the two-package monorepo as multi-context, maps a root GLOSSARY-MAP.md to both contexts, and asks for confirmation before writing. Criterion 3 is only partly met because the ADR and glossary paths are guessed, though it flags this.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets multi-context recognition, root glossary map proposal, and confirmation before writing; misses preserving existing locations because it guesses paths like docs/adr/ rather than keeping the existing folders.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 2, and 4: it recognizes the two-package multi-context signal, proposes a root map, and asks for confirmation before writing. Missed criterion 3: it asserts unsupplied ADR paths like packages/orders/docs/adr/ rather than preserving the stated locations.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "65542a8ee3f826487944412fc76790b54df1fc442f76e2c6f61d1616979e253c",
      "answer_sha256": "65542a8ee3f826487944412fc76790b54df1fc442f76e2c6f61d1616979e253c",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two-package monorepo as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing per-package glossaries and ADRs without moving them, and requires confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes two packages each with glossary and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md to existing contexts, avoids relocating existing docs while flagging its assumed paths, and waits for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes two-package multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing per-package glossaries and ADRs without relocating them, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies two packages with their own glossary and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP pointing to existing locations without moving them, and withholds writes until the user confirms.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two-package multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing per-package glossaries and ADRs, keeps those locations, and asks for confirmation before writing.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "dcadb0d4d181b7a81d633c65dbe28ed82f92001b1021245af9529c30e3571885",
      "answer_sha256": "dcadb0d4d181b7a81d633c65dbe28ed82f92001b1021245af9529c30e3571885",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two-package, per-package glossary/ADR setup as genuine multi-context evidence, proposes a root GLOSSARY-MAP.md linking existing contexts, keeps per-context ADRs in place, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two-package monorepo as genuine multi-context evidence, proposes a root GLOSSARY-MAP.md linking each context's glossary, keeps per-context ADRs in place, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes genuine multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to each package glossary, keeps per-context ADRs in place, and asks for confirmation before writing anything.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes multi-context evidence from two packages with separate glossaries and ADRs, proposes a root GLOSSARY-MAP.md pointing to them, keeps ADRs in place, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes multi-context evidence from two packages with separate vocabularies, proposes a root GLOSSARY-MAP.md linking existing glossaries, keeps ADRs in place, and asks for confirmation before writing.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "with_skill",
      "draw_index": 3,
      "generation_hash": "e4579668e15a91215dc9c757c8ed89d5c1f65c2ed1599714607518559961622d",
      "answer_sha256": "e4579668e15a91215dc9c757c8ed89d5c1f65c2ed1599714607518559961622d",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the monorepo multi-context signal (criterion 1), proposes a root GLOSSARY-MAP.md linking both existing contexts (2), keeps existing glossary and ADR folders in place though their exact paths are assumed (3), and asks for confirmation before writing anything (4).\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the monorepo multi-context signal, proposes a root GLOSSARY-MAP.md linking existing per-package glossaries and ADRs without relocating them, and asks for confirmation before writing anything.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the multi-context signal, proposes a root GLOSSARY-MAP.md linking each context's glossary, keeps existing per-package glossaries and ADR folders in place (though the exact paths are guessed and flagged), and asks for confirmation before writing.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes multi-context evidence, proposes a root GLOSSARY-MAP.md linking existing contexts, and asks confirmation before writing; ADR/glossary paths are guessed, though it asks the user to verify them.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the monorepo multi-context signal, proposes a root GLOSSARY-MAP.md linking both contexts, keeps existing locations in place, and asks for confirmation before writing; it flags the guessed ADR paths for verification.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "with_skill",
      "draw_index": 4,
      "generation_hash": "171caa68e64ef64f12f2c57715eb51a4a437742de08c0b2f1f55f84a5b0f2b20",
      "answer_sha256": "171caa68e64ef64f12f2c57715eb51a4a437742de08c0b2f1f55f84a5b0f2b20",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies the two-package monorepo as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing per-package glossaries and ADRs without moving them, and asks for confirmation before any writes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes two packages with their own glossary and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing per-package locations, preserves those locations, and asks for confirmation before writing anything.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Identifies per-package glossaries and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to existing locations without moving them, and asks for confirmation before any writes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two packages with their own glossary and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md pointing to them, keeps existing locations, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two packages with their own glossary and ADR folders as multi-context evidence, proposes a root GLOSSARY-MAP.md to existing contexts, keeps existing locations, and asks for confirmation before writing anything.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "2778b3aaacfed044727108d80d206c2c533ee9e5c06d4f3d1bac19923cef2ed8",
      "answer_sha256": "2778b3aaacfed044727108d80d206c2c533ee9e5c06d4f3d1bac19923cef2ed8",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two packages as separate bounded contexts, proposes a thin root docs/README.md index mapping to each package's glossary and ADRs, preserves existing locations, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four criteria: it treats orders and catalog as separate bounded contexts, proposes a root README mapping to each package's glossary and ADRs, keeps existing locations, and asks for confirmation before writing.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes separate bounded contexts, proposes a root README index pointing to each package's glossary and ADRs, preserves existing locations, and asks for confirmation before any file changes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the bounded-context split between orders and catalog (1), proposes a root docs/README.md mapping to each package's glossary and ADRs (2), keeps existing locations rather than moving them (3), and asks for confirmation before any writes (4).\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes orders and catalog as separate bounded contexts, proposes a root docs/README.md index pointing to each package's glossary and ADRs, preserves existing locations, and asks for confirmation before any writes.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "007f308e298887f005b3ce34873243deb11c87f95ecd3b34dd2bb0ffaca362e1",
      "answer_sha256": "007f308e298887f005b3ce34873243deb11c87f95ecd3b34dd2bb0ffaca362e1",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2 (root context map), and 4 (confirms before writing). Misses 3: it proposes new glossary and ADR locations rather than explicitly preserving the existing ones.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes orders and catalog as separate bounded contexts (met), proposes a root context map linking contexts (met), asks for confirmation before writing (met); misses preserving existing glossary/ADR locations, instead proposing a new layout.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (recognizes orders and catalog as separate bounded contexts) and 4 (asks for confirmation before writing). Misses 2 (root map lists contexts but explicitly omits a glossary map) and 3 (proposes new glossary and ADR locations rather than preserving existing ones).\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2 and 4: it recognizes orders and catalog as separate contexts, proposes a root CONTEXT-MAP, and asks for confirmation before writing. Misses 3: it never commits to preserving existing glossary and ADR locations and floats migration.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (identifies packages as bounded contexts) and criterion 4 (asks confirmation before creating or moving anything). Partly meets criterion 2 with a context map, not a glossary map. Misses criterion 3: it proposes new GLOSSARY.md and docs/adr locations rather than preserving existing ones.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "1051fdd8ca31b689099b80f43260a81f9017f4c30a231c78b9db7253fcd407e1",
      "answer_sha256": "1051fdd8ca31b689099b80f43260a81f9017f4c30a231c78b9db7253fcd407e1",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 2 (root index mapping to each package's glossary), and 4 (explicit confirmation before writing). Criterion 3 is not fully met because the proposed layout imposes new docs/ paths rather than preserving existing locations.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes distinct bounded contexts (1), proposes a root index mapping to each package's docs (2), and asks for confirmation before writing (4). It misses preserving existing locations (3), instead proposing a new docs/ layout.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1 (recognizes Orders and Catalog as separate bounded contexts) and 4 (asks for confirmation before creating or moving anything); criterion 2 is met by the root index linking each context, though it is not a true glossary; criterion 3 is only partly met because the proposed layout imposes docs/ subfolders, deferring to existing locations only conditionally.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets C1 (recognizes Orders and Catalog as distinct contexts) and C4 (asks for confirmation before writing). C2 is weak because the root index explicitly excludes a glossary. C3 is missed because the proposed layout imposes new docs/ folders rather than preserving existing locations.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes Orders and Catalog as separate bounded contexts, proposes a root README index mapping to each, and confirms before creating or moving anything. It partly misses preserving existing locations, since its default layout imposes docs/ folders and only defers to existing paths conditionally.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "ef930e680747a994d6cdc29564b3a5cb5a6be81bb0414947697ca5673984ec4c",
      "answer_sha256": "ef930e680747a994d6cdc29564b3a5cb5a6be81bb0414947697ca5673984ec4c",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes each package as its own bounded context), 3 (keeps existing per-package glossary and ADR locations) and 4 (asks for confirmation before creating or moving files). Misses 2: it proposes a root context map and explicitly rejects a merged global glossary, not a root glossary map.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: it recognizes per-package bounded contexts, keeps existing glossary and ADR locations, and asks for confirmation before creating or moving files. Misses criterion 2: it proposes a root context map and rejects a global glossary rather than a root glossary map.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes each package as a bounded context (criterion 1), keeps existing glossary and ADR locations (3), and confirms before creating or moving files (4). Criterion 2 is only partly met: it proposes a root context map but explicitly rejects a root glossary.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes packages as separate bounded contexts), 3 (keeps existing glossary and ADR locations) and 4 (asks confirmation before creating or moving anything); misses 2 because it proposes a root context map and rejects a merged glossary.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (identifies each package as its own bounded context), 3 (keeps existing per-package glossary and ADR locations) and 4 (asks for confirmation before writing). Misses criterion 2: it proposes a root context map and rejects a global glossary rather than a root glossary map.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 4,
      "generation_hash": "949af614273c1b767e72d6da553cc8a7851adddc70ff25973206adde9d0b4ae4",
      "answer_sha256": "949af614273c1b767e72d6da553cc8a7851adddc70ff25973206adde9d0b4ae4",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: it identifies the packages as bounded contexts, keeps existing glossary and ADR locations, and asks for confirmation before creating or moving anything. Misses criterion 2 because it rejects a root glossary map and recommends skipping root-level context documentation.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes two bounded contexts with a shared-term rationale), 3 (keeps per-package glossary and ADR locations), and 4 (asks for confirmation before writing); misses 2 because it recommends against a root glossary or context map rather than proposing one.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes two bounded contexts, preserves existing locations, and confirms before writing (0.25 each). Misses the root glossary map criterion: it argues against a root glossary and only mentions a context map as an optional, discouraged choice.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criteria 1 (recognizes multi-context need per package), 3 (preserves existing locations, keeps existing names) and 4 (asks confirmation before writing); missed criterion 2 because it explicitly declines a root glossary map and instead proposes no root-level map to existing contexts.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 3, and 4: recognizes two bounded contexts, preserves existing glossary/ADR locations, and asks confirmation before writing. Missed 2: it rejects a root glossary map rather than proposing one.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 5,
      "generation_hash": "42e6826d302687178128b26d7f27c60035e9466e12d249033e17b9cf66f74b79",
      "answer_sha256": "42e6826d302687178128b26d7f27c60035e9466e12d249033e17b9cf66f74b79",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes per-package bounded contexts), 2 (root index maps to each glossary), and 4 (asks for confirmation before proceeding); misses 3, since the proposed layout assumes docs/ subpaths instead of preserving the existing locations.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2 (root index and context map point to each package's glossary), and 4 (asks for confirmation before proceeding); criterion 3 is partial because the proposed docs/ layout may relocate existing glossary and ADR paths.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes multi-context evidence from per-package glossaries and ADRs, proposes a root index mapping to them, and asks for confirmation before proceeding. It partly misses preserving existing locations, since it prescribes a new packages/<name>/docs layout before knowing the real paths.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes per-package glossaries and ADR folders as bounded contexts, proposes a root index and context map, keeps existing paths, and asks for confirmation before proceeding.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes per-package bounded contexts), 2 (root index and context map point to package glossaries), and 4 (asks for confirmation before proceeding). Misses 3: the proposed layout relocates glossary and ADR paths instead of preserving existing ones.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 6,
      "generation_hash": "f2f592330866a402c5f5cf784637464aa79a001a4b486f68411771441f0e0b83",
      "answer_sha256": "f2f592330866a402c5f5cf784637464aa79a001a4b486f68411771441f0e0b83",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes per-package glossaries and ADR folders as separate bounded contexts, proposes a root index mapping to them, preserves existing locations, and asks for confirmation before acting.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Recognizes multi-context evidence (bounded contexts, separate glossaries/ADRs) and asks confirmation before acting, but proposes a new root docs/ index rather than a root glossary map to existing contexts, and its layout sketch relocates locations to docs/ paths instead of preserving them.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes per-package glossaries/ADRs as bounded contexts, proposes a root index mapping to them, and asks for confirmation before acting. Misses preserving existing locations: it sketches new docs/ paths rather than keeping current ones.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (recognizes each package as a bounded context), 2 (root index linking to each package's glossary and ADRs), and 4 (asks for confirmation before acting). Criterion 3 is unclear: it defers to existing folder names but its sketch relocates glossary and ADR paths.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes per-package bounded contexts, proposes a root index linking each package's glossary and ADRs, defers to existing folder names with no rename plan, and asks for confirmation before acting.\"}"
      ]
    },
    {
      "id": "monorepo",
      "mode": "baseline",
      "draw_index": 7,
      "generation_hash": "67d66d552bee567e83ffaea5b119aad952ead6802d8b1ace38df45fd37d4e148",
      "answer_sha256": "67d66d552bee567e83ffaea5b119aad952ead6802d8b1ace38df45fd37d4e148",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the two packages as bounded contexts with separate glossaries, proposes a root index linking each context's glossary and ADRs, preserves existing locations, and asks for confirmation before any writes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes distinct contexts via differing terms, proposes a root index linking existing glossaries, preserves existing locations, and asks for confirmation before any writes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes orders and catalog as distinct contexts with separate glossaries, proposes a root index linking each context's glossary and ADR folders, says existing locations will be kept rather than moved, and asks for confirmation before any writes.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes orders and catalog as separate contexts, proposes a root index linking each glossary, preserves existing locations by not moving files, and asks for confirmation before writing.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes the two bounded contexts, preserves existing glossary and ADR locations, and asks for confirmation before writing. The root index links to each glossary, but it is not explicitly a root glossary map.\"}"
      ]
    }
  ]
}
