@ray-js/robot-map-sdk 0.0.17-beta.2 → 0.0.17-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/bin/mcp-server.js +31 -15
  2. package/dist/constant/methods.js +1 -1
  3. package/dist/index.d.ts +278 -29
  4. package/dist/index.rjs.js +1 -1
  5. package/dist-app/assets/index-Bju2ykDd.js +1 -0
  6. package/dist-app/index.html +1 -1
  7. package/dist-docs/404.html +2 -2
  8. package/dist-docs/assets/{app.BKcB-q3l.js → app.C5xCc25N.js} +1 -1
  9. package/dist-docs/assets/chunks/@localSearchIndexroot.JKj3B6eW.js +1 -0
  10. package/dist-docs/assets/chunks/{BitmapFont.BVQlrRID.js → BitmapFont.CfNZJWQu.js} +1 -1
  11. package/dist-docs/assets/chunks/{BufferResource.ccuOZM7p.js → BufferResource.U7KmcJEb.js} +1 -1
  12. package/dist-docs/assets/chunks/{CanvasRenderer.BjafRf72.js → CanvasRenderer.V8PvjkXK.js} +1 -1
  13. package/dist-docs/assets/chunks/{RenderTargetSystem.CNtSJQIT.js → RenderTargetSystem.CIN4IDnj.js} +1 -1
  14. package/dist-docs/assets/chunks/{VPLocalSearchBox.BraJ5EBN.js → VPLocalSearchBox.BXtgZMz6.js} +1 -1
  15. package/dist-docs/assets/chunks/{WebGLRenderer.IUUQ0Lkd.js → WebGLRenderer.9sqpUvol.js} +1 -1
  16. package/dist-docs/assets/chunks/{WebGPURenderer.CLtb2XY4.js → WebGPURenderer.B8iy8W66.js} +1 -1
  17. package/dist-docs/assets/chunks/{browserAll.BeYySQdg.js → browserAll.Curl4kc3.js} +1 -1
  18. package/dist-docs/assets/chunks/index.BPYuggut.js +744 -0
  19. package/dist-docs/assets/chunks/theme.DdcAePki.js +4 -0
  20. package/dist-docs/assets/chunks/{webworkerAll.Dyo1xVCt.js → webworkerAll.9SOLh1Dq.js} +1 -1
  21. package/dist-docs/assets/{guide_advanced-usage.md.dxD8u9v3.js → guide_advanced-usage.md.BsGRhEuG.js} +12 -9
  22. package/dist-docs/assets/{guide_advanced-usage.md.dxD8u9v3.lean.js → guide_advanced-usage.md.BsGRhEuG.lean.js} +1 -1
  23. package/dist-docs/assets/{guide_getting-started.md.ItwGZAsG.js → guide_getting-started.md.Ca_k5NRJ.js} +1 -1
  24. package/dist-docs/assets/guide_mcp.md.BYlNOxMG.js +1 -0
  25. package/dist-docs/assets/{guide_mcp.md.CabCiX8Z.lean.js → guide_mcp.md.BYlNOxMG.lean.js} +1 -1
  26. package/dist-docs/assets/reference_callbacks.md.BP78Z1wN.js +33 -0
  27. package/dist-docs/assets/{reference_callbacks.md.Cm_LNx97.lean.js → reference_callbacks.md.BP78Z1wN.lean.js} +1 -1
  28. package/dist-docs/assets/{reference_config.md.CXZBV81d.js → reference_config.md.DHyraAQF.js} +5 -5
  29. package/dist-docs/assets/reference_config.md.DHyraAQF.lean.js +1 -0
  30. package/dist-docs/assets/{reference_data.md.DL6rfzez.js → reference_data.md.f7vBtzcn.js} +20 -7
  31. package/dist-docs/assets/{reference_data.md.DL6rfzez.lean.js → reference_data.md.f7vBtzcn.lean.js} +1 -1
  32. package/dist-docs/assets/{reference_methods.md.yWEfqPKf.js → reference_methods.md.D2L6f98h.js} +14 -4
  33. package/dist-docs/assets/{reference_methods.md.yWEfqPKf.lean.js → reference_methods.md.D2L6f98h.lean.js} +1 -1
  34. package/dist-docs/assets/reference_runtime.md.g-NWJXS6.js +20 -0
  35. package/dist-docs/assets/reference_runtime.md.g-NWJXS6.lean.js +1 -0
  36. package/dist-docs/assets/{reference_types.md.ZQU03iAA.js → reference_types.md.B2PPyukT.js} +25 -9
  37. package/dist-docs/assets/{reference_types.md.ZQU03iAA.lean.js → reference_types.md.B2PPyukT.lean.js} +1 -1
  38. package/dist-docs/guide/advanced-usage.html +15 -12
  39. package/dist-docs/guide/concepts.html +3 -3
  40. package/dist-docs/guide/getting-started.html +5 -5
  41. package/dist-docs/guide/mcp.html +5 -5
  42. package/dist-docs/guide/spot-room-binding.html +3 -3
  43. package/dist-docs/hashmap.json +1 -1
  44. package/dist-docs/index.html +3 -3
  45. package/dist-docs/plans/2026-03-04-detected-objects-visibility-design.html +3 -3
  46. package/dist-docs/plans/2026-03-04-show-detected-objects-implementation-plan.html +3 -3
  47. package/dist-docs/plans/2026-03-10-simulator-debug-design.html +3 -3
  48. package/dist-docs/plans/2026-03-10-simulator-events-console-design.html +3 -3
  49. package/dist-docs/plans/2026-03-10-simulator-events-console-implementation-plan.html +3 -3
  50. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-design.html +3 -3
  51. package/dist-docs/plans/2026-03-10-simulator-runtime-controls-implementation-plan.html +3 -3
  52. package/dist-docs/plans/2026-03-10-testing-rollout-next-steps-plan.html +3 -3
  53. package/dist-docs/plans/2026-03-11-simulator-logger-dump-implementation-plan.html +3 -3
  54. package/dist-docs/reference/callbacks.html +5 -5
  55. package/dist-docs/reference/config.html +8 -8
  56. package/dist-docs/reference/data.html +23 -10
  57. package/dist-docs/reference/methods.html +17 -7
  58. package/dist-docs/reference/runtime.html +5 -5
  59. package/dist-docs/reference/types.html +28 -12
  60. package/dist-docs/reference/utils.html +3 -3
  61. package/dist-docs/simulator/index.html +3 -3
  62. package/package.json +1 -1
  63. package/dist-app/assets/index-BK1e_Ra7.js +0 -1
  64. package/dist-docs/adr/0001-threshold-mirrors-virtual-wall.html +0 -25
  65. package/dist-docs/adr/0002-threshold-edit-surface-quad-family.html +0 -25
  66. package/dist-docs/adr/0003-beautify-derived-presentation-geometry.html +0 -25
  67. package/dist-docs/adr/0004-beautify-shells-enclose-never-subtract.html +0 -25
  68. package/dist-docs/agents/domain.html +0 -39
  69. package/dist-docs/agents/issue-tracker.html +0 -25
  70. package/dist-docs/agents/triage-labels.html +0 -25
  71. package/dist-docs/assets/adr_0001-threshold-mirrors-virtual-wall.md.BGtyf9GS.js +0 -1
  72. package/dist-docs/assets/adr_0001-threshold-mirrors-virtual-wall.md.BGtyf9GS.lean.js +0 -1
  73. package/dist-docs/assets/adr_0002-threshold-edit-surface-quad-family.md.BlvHYJT5.js +0 -1
  74. package/dist-docs/assets/adr_0002-threshold-edit-surface-quad-family.md.BlvHYJT5.lean.js +0 -1
  75. package/dist-docs/assets/adr_0003-beautify-derived-presentation-geometry.md.BIaPCTDJ.js +0 -1
  76. package/dist-docs/assets/adr_0003-beautify-derived-presentation-geometry.md.BIaPCTDJ.lean.js +0 -1
  77. package/dist-docs/assets/adr_0004-beautify-shells-enclose-never-subtract.md.PRaaUF5r.js +0 -1
  78. package/dist-docs/assets/adr_0004-beautify-shells-enclose-never-subtract.md.PRaaUF5r.lean.js +0 -1
  79. package/dist-docs/assets/agents_domain.md.CYB9yWEy.js +0 -15
  80. package/dist-docs/assets/agents_domain.md.CYB9yWEy.lean.js +0 -1
  81. package/dist-docs/assets/agents_issue-tracker.md.CrjzmXmc.js +0 -1
  82. package/dist-docs/assets/agents_issue-tracker.md.CrjzmXmc.lean.js +0 -1
  83. package/dist-docs/assets/agents_triage-labels.md.Cmw0b5xB.js +0 -1
  84. package/dist-docs/assets/agents_triage-labels.md.Cmw0b5xB.lean.js +0 -1
  85. package/dist-docs/assets/chunks/@localSearchIndexroot.BiQ_oQbs.js +0 -1
  86. package/dist-docs/assets/chunks/index.vn3lfis1.js +0 -744
  87. package/dist-docs/assets/chunks/theme.CAU4HwNY.js +0 -4
  88. package/dist-docs/assets/guide_mcp.md.CabCiX8Z.js +0 -1
  89. package/dist-docs/assets/reference_callbacks.md.Cm_LNx97.js +0 -33
  90. package/dist-docs/assets/reference_config.md.CXZBV81d.lean.js +0 -1
  91. package/dist-docs/assets/reference_runtime.md.BfmrB9c5.js +0 -20
  92. package/dist-docs/assets/reference_runtime.md.BfmrB9c5.lean.js +0 -1
  93. /package/dist-docs/assets/{guide_getting-started.md.ItwGZAsG.lean.js → guide_getting-started.md.Ca_k5NRJ.lean.js} +0 -0
@@ -1 +0,0 @@
1
- import{_ as t,c as a,o as n,aq as o}from"./chunks/framework.CBLqO2Q1.js";const u=JSON.parse('{"title":"Beautify shells enclose, never subtract","description":"","frontmatter":{},"headers":[],"relativePath":"adr/0004-beautify-shells-enclose-never-subtract.md","filePath":"adr/0004-beautify-shells-enclose-never-subtract.md","lastUpdated":1785228213000}'),s={name:"adr/0004-beautify-shells-enclose-never-subtract.md"};function i(l,e,r,d,h,c){return n(),a("div",null,[...e[0]||(e[0]=[o('<h1 id="beautify-shells-enclose-never-subtract" tabindex="-1">Beautify shells enclose, never subtract <a class="header-anchor" href="#beautify-shells-enclose-never-subtract" aria-label="Permalink to &quot;Beautify shells enclose, never subtract&quot;">​</a></h1><p>The first shipped beautify fitting (T2, 2026-07-21) was <em>best-fit</em>: each wall sat on the length-weighted mean line of its edge run, so the shell straddled the original outline and the footprint mask silently discarded roughly half of the genuinely mapped area along every wall. Field feedback on real maps (2026-07-22) rejected this: the outline is real device-collected data and the presentation layer was amputating it.</p><p>We replaced the fitting&#39;s core contract:</p><ul><li><p><strong>The original outline is ground truth. Beautify may only add presentation area around it, never subtract mapped area.</strong> A shell is the minimal-edge-count <em>enclosing</em> rectilinear polygon of the room outline in the dominant frame; the bounding rectangle is the limit case.</p><blockquote><p><strong>Update (2026-07-22):</strong> the dominant-frame rotation was disabled (θ=0). Shells are now enclosed in the SCREEN frame — the SDK no longer straightens device-tilted maps (that is the navigation stack&#39;s job). The enclose-never- subtract contract and the strict raw-outline containment below are unchanged; only the frame the enclosure is computed in changed (dominant → screen).</p></blockquote></li><li><p>Containment is a <strong>strict guarantee against the raw outline, not a tolerance</strong> (Round 3, 2026-07-22): the shell encloses every raw point with zero clipping (only float noise from the rotation round-trip, ~1e-6 px, is slack). The raw outline is device-scanned reachable area — the robot can physically get there — so it is rendered verbatim and unclipped; clipping it could make the robot appear to leave the map. Sub-<code>minNotch</code> features are smoothed <em>outward</em> only (dents fill, bumps lift their local wall); the RDP chord that grazes inside a real bump is corrected by an outward-expansion pass before the notch guard runs. <code>containTolerance</code> is removed.</p></li><li><p>The shared wall between two shells is welded along the <strong>gap corridor</strong>, not a single line: per row, the weld position must lie outside both rooms&#39; material, and where no common straight line exists (interlocked steps, weaving outlines) the overlap is segmented into a shared polyline so each room keeps its own steps — the previously structural clips (interlocked steps ~6 px, weaving outlines ~80 px²) are gone (all baselines now ≤ 1 px post-snap). The one principled residual clip is a <strong>true T-junction</strong>: a wall already welded to one neighbour, pinned across a third room&#39;s data on the same line — that span takes the locked line (the geometric floor of three-room co-linearity).</p></li><li><p>The fallback criterion follows the semantics: area <em>inflation ratio</em> (enclosing shells only grow), defaulted so that all baseline rooms stay rectilinear (worst 78%) while pathological diagonal shapes (≥ 100%) fall back. A fallback room carries <strong>no beautify geometry</strong> (<code>shell === null</code>) and renders its original geometry — conformal smoothing was removed in Round 3 because it altered the raw-outline shape.</p></li></ul><h2 id="consequences" tabindex="-1">Consequences <a class="header-anchor" href="#consequences" aria-label="Permalink to &quot;Consequences&quot;">​</a></h2><ul><li>Enclosing shells run visibly larger than the outline on wavy walls (baselines: 4–78% area inflation). This is the intended look: the light shell margin is presentation slack around the honest footprint, which is never visibly cut on exterior walls.</li><li>The footprint mask clip (ADR 0003) is <strong>retired</strong> (Round 3): containment is a pipeline invariant (the shell provably encloses every raw point), so the footprint renders in full with no render-time clip. Removing the mask is what makes any residual clipping visible — hence the strict guarantee.</li><li>Any future beautify geometry (curved shells, diagonal support) must keep the strict containment guarantee against the raw outline; a proposal that clips mapped area at all (beyond float noise) is a redesign of this ADR, not a parameter tweak.</li><li>Shapes that best-fit could not close (a triangle&#39;s ring cannot alternate) now produce their enclosing box via U-turn cap runs and are governed by the inflation fallback instead of returning null.</li><li>Wall-snap can emit <strong>polylines</strong>, not just moved straight edges: welded shells may gain vertices where a shared wall is segmented along the gap corridor. Downstream consumers (border split, doorway inference) must treat a shell edge as possibly subdivided.</li></ul><h2 id="update-2026-07-28-shell-levels-and-the-no-engulfment-guard" tabindex="-1">Update (2026-07-28): shell levels and the no-engulfment guard <a class="header-anchor" href="#update-2026-07-28-shell-levels-and-the-no-engulfment-guard" aria-label="Permalink to &quot;Update (2026-07-28): shell levels and the no-engulfment guard&quot;">​</a></h2><p>Field feedback: real rooms are mostly neat rectangles, so the <em>tightest</em> enclosing polygon renders a room whose honest shape is one rectangle as a 14–66 edge C or L, because every unscanned void stays carved out. This ADR already named the target — &quot;minimal-edge-count … the bounding rectangle is the limit case&quot; — so the fix is a budget, not a redesign.</p><p><code>map.beautify.level</code> selects between two fitting strengths:</p><ul><li><strong><code>faithful</code></strong> (default): today&#39;s tight fit, byte-identical output.</li><li><strong><code>boxy</code></strong>: on top of the faithful fit, keep applying the <strong>cheapest</strong> remaining notch merge (least added area) until the edge target is reached or an internal inflation budget is spent. Ordering by added area rather than edge length is what protects narrow-but-deep features: a 5 px wide, 40 px deep corridor bite is expensive and is filled last or not at all, while a shallow dent along a long wall is cheap and goes first.</li></ul><p>Two invariants make this safe, both verified against all five baselines:</p><ul><li><strong>Enclose-never-subtract is unchanged.</strong> Boxy only ever adds area; the strict raw-outline containment guarantee holds exactly (measured escape: 0 px).</li><li><strong>New clause — a shell may never <em>newly</em> contain another room&#39;s raw outline point.</strong> Pre-existing overlap stays tolerated (enclosing shells of interlocked rooms already collide and wall-snap welds them); only new engulfment is rejected. This clause is load-bearing, not defensive: without it shells swallow their neighbours, the shared wall ceases to exist, and doorway inference loses it (mockMapData2 16 → 12 doorways, raster-normal 12 → 8). It is what makes boxy shells <em>tile</em> the floorplan instead of stacking.</li></ul><p>Ordering matters and is part of the contract: the boxy pass must run <strong>after</strong> the tight pass, never instead of it. The tight pass is unbounded in inflation during smoothing (only the fallback threshold caps the result), so a budget-capped pass alone stops earlier and yields <em>more</em> edges. Composing them makes boxy edge counts monotonically ≤ faithful and keeps the O(m²) boxy scan on an already-shortened run list.</p><p>The boxy level carries its own, looser fallback threshold. Relaxing notch smoothing without relaxing the fallback would make the holey rooms this feature targets render <em>raw</em> — strictly worse than before.</p><p>Consequence, accepted: on a <strong>diagonal</strong> shared wall the polyline weld staircases down the diagonal and the post-snap vertex count grows well past the fitted count (mockMapData1: 7 → 33). That is the correct answer, not a defect — in a rectilinear system no single weld line can separate two diagonally-abutting rooms without clipping one of them, and capping the vertex count would buy a cosmetic number by clipping mapped area, which this ADR forbids.</p><h3 id="refinement-2026-07-28-the-inflation-budget-is-split-in-two" tabindex="-1">Refinement (2026-07-28): the inflation budget is split in two <a class="header-anchor" href="#refinement-2026-07-28-the-inflation-budget-is-split-in-two" aria-label="Permalink to &quot;Refinement (2026-07-28): the inflation budget is split in two&quot;">​</a></h3><p>Field question right after the boxy level landed: a room whose bottom-left notch was plainly free to expand still rendered as an L. Diagnosis: the general inflation budget, not the neighbour guard — the room&#39;s raw footprint is a thin snaking blob, so its bounding rectangle costs 118% inflation against an 80% cap.</p><p>The obvious fix (raise the general budget) is the wrong one. Measured across all five baselines, a global budget of 1.5 produces <strong>exactly the same number of rectangles</strong> as the alternative below, while additionally manufacturing rooms that are both heavily inflated <em>and</em> still lumpy — mockMapData3 room 0 goes from 10 edges / 76% to 8 edges / 133%, paying 57 points of invented area and still not reaching a rectangle.</p><p>So the budget is split: a general cap, plus a <strong>looser cap that applies only to the one merge that lands the room exactly on 4 edges</strong>. A rectangle is this level&#39;s goal state, so spending extra to land exactly on it is worth more than spending the same amount to stop halfway. The rectangle cap is still a cap, not a blank cheque — a thin L whose bounding rectangle would cost 170% keeps its notch. (2.5 was measured too and yields the same rectangles as 1.5, so 1.5 is where the curve flattens.)</p><p>The consequence is explicit and intended: a room can now render as a rectangle where <strong>more than half the drawn area was never scanned</strong> (the room above is 118% inflated). That is the trade this level exists to make; <code>faithful</code> remains the default for callers who will not take it. What has <em>not</em> changed is the guard — every remaining non-rectangular room on that baseline is held by real neighbour data, not by budget.</p>',20)])])}const p=t(s,[["render",i]]);export{u as __pageData,p as default};
@@ -1 +0,0 @@
1
- import{_ as t,c as a,o as n,aq as o}from"./chunks/framework.CBLqO2Q1.js";const u=JSON.parse('{"title":"Beautify shells enclose, never subtract","description":"","frontmatter":{},"headers":[],"relativePath":"adr/0004-beautify-shells-enclose-never-subtract.md","filePath":"adr/0004-beautify-shells-enclose-never-subtract.md","lastUpdated":1785228213000}'),s={name:"adr/0004-beautify-shells-enclose-never-subtract.md"};function i(l,e,r,d,h,c){return n(),a("div",null,[...e[0]||(e[0]=[o("",20)])])}const p=t(s,[["render",i]]);export{u as __pageData,p as default};
@@ -1,15 +0,0 @@
1
- import{_ as s,c as a,o as n,aq as t}from"./chunks/framework.CBLqO2Q1.js";const u=JSON.parse('{"title":"Domain Docs","description":"","frontmatter":{},"headers":[],"relativePath":"agents/domain.md","filePath":"agents/domain.md","lastUpdated":1780284181000}'),o={name:"agents/domain.md"};function i(r,e,l,c,p,d){return n(),a("div",null,[...e[0]||(e[0]=[t(`<h1 id="domain-docs" tabindex="-1">Domain Docs <a class="header-anchor" href="#domain-docs" aria-label="Permalink to &quot;Domain Docs&quot;">​</a></h1><p>How the engineering skills should consume this repo&#39;s domain documentation when exploring the codebase.</p><h2 id="before-exploring-read-these" tabindex="-1">Before exploring, read these <a class="header-anchor" href="#before-exploring-read-these" aria-label="Permalink to &quot;Before exploring, read these&quot;">​</a></h2><ul><li><strong><code>CONTEXT.md</code></strong> at the repo root, or</li><li><strong><code>CONTEXT-MAP.md</code></strong> at the repo root if it exists — it points at one <code>CONTEXT.md</code> per context. Read each one relevant to the topic.</li><li><strong><code>docs/adr/</code></strong> — read ADRs that touch the area you&#39;re about to work in. In multi-context repos, also check <code>src/&lt;context&gt;/docs/adr/</code> for context-scoped decisions.</li></ul><p>If any of these files don&#39;t exist, <strong>proceed silently</strong>. Don&#39;t flag their absence; don&#39;t suggest creating them upfront. The producer skill (<code>/grill-with-docs</code>) creates them lazily when terms or decisions actually get resolved.</p><h2 id="file-structure" tabindex="-1">File structure <a class="header-anchor" href="#file-structure" aria-label="Permalink to &quot;File structure&quot;">​</a></h2><p>Single-context repo (most repos):</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span>
2
- <span class="line"><span>├── CONTEXT.md</span></span>
3
- <span class="line"><span>├── docs/adr/</span></span>
4
- <span class="line"><span>│ ├── 0001-event-sourced-orders.md</span></span>
5
- <span class="line"><span>│ └── 0002-postgres-for-write-model.md</span></span>
6
- <span class="line"><span>└── src/</span></span></code></pre></div><p>Multi-context repo (presence of <code>CONTEXT-MAP.md</code> at the root):</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/</span></span>
7
- <span class="line"><span>├── CONTEXT-MAP.md</span></span>
8
- <span class="line"><span>├── docs/adr/ ← system-wide decisions</span></span>
9
- <span class="line"><span>└── src/</span></span>
10
- <span class="line"><span> ├── ordering/</span></span>
11
- <span class="line"><span> │ ├── CONTEXT.md</span></span>
12
- <span class="line"><span> │ └── docs/adr/ ← context-specific decisions</span></span>
13
- <span class="line"><span> └── billing/</span></span>
14
- <span class="line"><span> ├── CONTEXT.md</span></span>
15
- <span class="line"><span> └── docs/adr/</span></span></code></pre></div><h2 id="use-the-glossary-s-vocabulary" tabindex="-1">Use the glossary&#39;s vocabulary <a class="header-anchor" href="#use-the-glossary-s-vocabulary" aria-label="Permalink to &quot;Use the glossary&#39;s vocabulary&quot;">​</a></h2><p>When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in <code>CONTEXT.md</code>. Don&#39;t drift to synonyms the glossary explicitly avoids.</p><p>If the concept you need isn&#39;t in the glossary yet, that&#39;s a signal — either you&#39;re inventing language the project doesn&#39;t use (reconsider) or there&#39;s a real gap (note it for <code>/grill-with-docs</code>).</p><h2 id="flag-adr-conflicts" tabindex="-1">Flag ADR conflicts <a class="header-anchor" href="#flag-adr-conflicts" aria-label="Permalink to &quot;Flag ADR conflicts&quot;">​</a></h2><p>If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:</p><blockquote><p><em>Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…</em></p></blockquote>`,16)])])}const g=s(o,[["render",i]]);export{u as __pageData,g as default};
@@ -1 +0,0 @@
1
- import{_ as s,c as a,o as n,aq as t}from"./chunks/framework.CBLqO2Q1.js";const u=JSON.parse('{"title":"Domain Docs","description":"","frontmatter":{},"headers":[],"relativePath":"agents/domain.md","filePath":"agents/domain.md","lastUpdated":1780284181000}'),o={name:"agents/domain.md"};function i(r,e,l,c,p,d){return n(),a("div",null,[...e[0]||(e[0]=[t("",16)])])}const g=s(o,[["render",i]]);export{u as __pageData,g as default};
@@ -1 +0,0 @@
1
- import{_ as t,c as o,o as s,aq as a}from"./chunks/framework.CBLqO2Q1.js";const g=JSON.parse('{"title":"Issue tracker: GitLab","description":"","frontmatter":{},"headers":[],"relativePath":"agents/issue-tracker.md","filePath":"agents/issue-tracker.md","lastUpdated":1780284497000}'),i={name:"agents/issue-tracker.md"};function l(r,e,c,n,d,u){return s(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="issue-tracker-gitlab" tabindex="-1">Issue tracker: GitLab <a class="header-anchor" href="#issue-tracker-gitlab" aria-label="Permalink to &quot;Issue tracker: GitLab&quot;">​</a></h1><p>Issues and PRDs for this repo live as GitLab issues on the company&#39;s self-hosted GitLab instance (the host shown by <code>git remote -v</code> in this clone). Use the <a href="https://gitlab.com/gitlab-org/cli" target="_blank" rel="noreferrer"><code>glab</code></a> CLI for all operations.</p><h2 id="self-hosted-host" tabindex="-1">Self-hosted host <a class="header-anchor" href="#self-hosted-host" aria-label="Permalink to &quot;Self-hosted host&quot;">​</a></h2><p>This is <strong>not</strong> gitlab.com. <code>glab</code> must be pointed at the company host (read it from <code>git remote -v</code>). Either:</p><ul><li>Authenticate once: <code>glab auth login --hostname &lt;gitlab-host&gt;</code>, or</li><li>Set <code>GITLAB_HOST=&lt;gitlab-host&gt;</code> in the environment for one-off commands.</li></ul><p>Once authenticated, <code>glab</code> infers the project from <code>git remote -v</code> when run inside this clone.</p><h2 id="conventions" tabindex="-1">Conventions <a class="header-anchor" href="#conventions" aria-label="Permalink to &quot;Conventions&quot;">​</a></h2><ul><li><strong>Create an issue</strong>: <code>glab issue create --title &quot;...&quot; --description &quot;...&quot;</code>. Use a heredoc for multi-line descriptions. Pass <code>--description -</code> to open an editor.</li><li><strong>Read an issue</strong>: <code>glab issue view &lt;number&gt; --comments</code>. Use <code>-F json</code> for machine-readable output.</li><li><strong>List issues</strong>: <code>glab issue list -F json</code> with appropriate <code>--label</code> filters.</li><li><strong>Comment on an issue</strong>: <code>glab issue note &lt;number&gt; --message &quot;...&quot;</code>. GitLab calls comments &quot;notes&quot;.</li><li><strong>Apply / remove labels</strong>: <code>glab issue update &lt;number&gt; --label &quot;...&quot;</code> / <code>--unlabel &quot;...&quot;</code>. Multiple labels can be comma-separated or by repeating the flag.</li><li><strong>Close</strong>: <code>glab issue close &lt;number&gt;</code>. <code>glab issue close</code> does not accept a closing comment, so post the explanation first with <code>glab issue note &lt;number&gt; --message &quot;...&quot;</code>, then close.</li><li><strong>Merge requests</strong>: GitLab calls PRs &quot;merge requests&quot;. Use <code>glab mr create</code>, <code>glab mr view</code>, <code>glab mr note</code>, etc. — the same shape as <code>gh pr ...</code> with <code>mr</code> in place of <code>pr</code> and <code>note</code>/<code>--message</code> in place of <code>comment</code>/<code>--body</code>.</li></ul><h2 id="when-a-skill-says-publish-to-the-issue-tracker" tabindex="-1">When a skill says &quot;publish to the issue tracker&quot; <a class="header-anchor" href="#when-a-skill-says-publish-to-the-issue-tracker" aria-label="Permalink to &quot;When a skill says &quot;publish to the issue tracker&quot;&quot;">​</a></h2><p>Create a GitLab issue.</p><h2 id="when-a-skill-says-fetch-the-relevant-ticket" tabindex="-1">When a skill says &quot;fetch the relevant ticket&quot; <a class="header-anchor" href="#when-a-skill-says-fetch-the-relevant-ticket" aria-label="Permalink to &quot;When a skill says &quot;fetch the relevant ticket&quot;&quot;">​</a></h2><p>Run <code>glab issue view &lt;number&gt; --comments</code>.</p>',12)])])}const b=t(i,[["render",l]]);export{g as __pageData,b as default};
@@ -1 +0,0 @@
1
- import{_ as t,c as o,o as s,aq as a}from"./chunks/framework.CBLqO2Q1.js";const g=JSON.parse('{"title":"Issue tracker: GitLab","description":"","frontmatter":{},"headers":[],"relativePath":"agents/issue-tracker.md","filePath":"agents/issue-tracker.md","lastUpdated":1780284497000}'),i={name:"agents/issue-tracker.md"};function l(r,e,c,n,d,u){return s(),o("div",null,[...e[0]||(e[0]=[a("",12)])])}const b=t(i,[["render",l]]);export{g as __pageData,b as default};
@@ -1 +0,0 @@
1
- import{_ as t,c as a,o as d,aq as r}from"./chunks/framework.CBLqO2Q1.js";const g=JSON.parse('{"title":"Triage Labels","description":"","frontmatter":{},"headers":[],"relativePath":"agents/triage-labels.md","filePath":"agents/triage-labels.md","lastUpdated":1781077102000}'),l={name:"agents/triage-labels.md"};function o(i,e,s,n,c,h){return d(),a("div",null,[...e[0]||(e[0]=[r('<h1 id="triage-labels" tabindex="-1">Triage Labels <a class="header-anchor" href="#triage-labels" aria-label="Permalink to &quot;Triage Labels&quot;">​</a></h1><p>The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo&#39;s issue tracker.</p><table tabindex="0"><thead><tr><th>Label in mattpocock/skills</th><th>Label in our tracker</th><th>Meaning</th></tr></thead><tbody><tr><td><code>needs-triage</code></td><td><code>needs-triage</code></td><td>Maintainer needs to evaluate this issue</td></tr><tr><td><code>needs-info</code></td><td><code>needs-info</code></td><td>Waiting on reporter for more information</td></tr><tr><td><code>ready-for-agent</code></td><td><code>ready-for-agent</code></td><td>Fully specified, ready for an AFK agent</td></tr><tr><td><code>ready-for-human</code></td><td><code>ready-for-human</code></td><td>Requires human implementation</td></tr><tr><td><code>wontfix</code></td><td><code>wontfix</code></td><td>Will not be actioned</td></tr></tbody></table><p>When a skill mentions a role (e.g. &quot;apply the AFK-ready triage label&quot;), use the corresponding label string from this table.</p><p>Edit the right-hand column to match whatever vocabulary you actually use.</p><h2 id="type-labels" tabindex="-1">Type labels <a class="header-anchor" href="#type-labels" aria-label="Permalink to &quot;Type labels&quot;">​</a></h2><table tabindex="0"><thead><tr><th>Label</th><th>Meaning</th></tr></thead><tbody><tr><td><code>prd</code></td><td>Context-only parent issue (PRD). Never implemented directly; excluded from agent dispatch batches</td></tr><tr><td><code>task</code></td><td>Implementable work item (a slice produced by issue breakdown)</td></tr></tbody></table><h3 id="creation-time-rules-for-issue-producing-skills" tabindex="-1">Creation-time rules (for issue-producing skills) <a class="header-anchor" href="#creation-time-rules-for-issue-producing-skills" aria-label="Permalink to &quot;Creation-time rules (for issue-producing skills)&quot;">​</a></h3><p>When publishing an issue to the tracker:</p><ul><li>A <strong>PRD / parent issue</strong> gets <code>prd</code>. Type labels are orthogonal to triage labels — a PRD keeps whatever triage label applies; the <code>prd</code> label alone excludes it from dispatch.</li><li>A <strong>work item</strong> (an implementable slice) gets <code>task</code> plus the triage label that reflects its state (normally <code>ready-for-agent</code>).</li></ul><h2 id="agent-lifecycle-labels-agent-prefix" tabindex="-1">Agent lifecycle labels (<code>agent::</code> prefix) <a class="header-anchor" href="#agent-lifecycle-labels-agent-prefix" aria-label="Permalink to &quot;Agent lifecycle labels (`agent::` prefix)&quot;">​</a></h2><p>Applied and removed automatically by the <code>/dispatch</code> pipeline (canonical <code>implement-issues</code> workflow). Humans normally never set these.</p><table tabindex="0"><thead><tr><th>Label</th><th>Meaning</th></tr></thead><tbody><tr><td><code>agent::implementing</code></td><td>An agent is implementing this issue in an isolated worktree</td></tr><tr><td><code>agent::reviewing</code></td><td>Adversarial review of the pushed branch is in progress</td></tr><tr><td><code>agent::fixing</code></td><td>Fix round (max 1) is addressing review findings</td></tr><tr><td><code>agent::merging</code></td><td>Serial rebase + full gate re-run + merge is in progress</td></tr><tr><td><code>agent::stalled</code></td><td>The pipeline gave up; the latest issue note explains why</td></tr></tbody></table><p>Rules:</p><ul><li>Success leaves <strong>no</strong> lifecycle label: the merged MR closes the issue via <code>Closes #N</code>.</li><li>Dispatch discovery skips any issue carrying an <code>agent::*</code> label (in-flight or stalled) or the <code>prd</code> label (context-only parent).</li><li>To retry a stalled issue: fix the cause, remove <code>agent::stalled</code>, keep <code>ready-for-agent</code>.</li></ul>',15)])])}const u=t(l,[["render",o]]);export{g as __pageData,u as default};
@@ -1 +0,0 @@
1
- import{_ as t,c as a,o as d,aq as r}from"./chunks/framework.CBLqO2Q1.js";const g=JSON.parse('{"title":"Triage Labels","description":"","frontmatter":{},"headers":[],"relativePath":"agents/triage-labels.md","filePath":"agents/triage-labels.md","lastUpdated":1781077102000}'),l={name:"agents/triage-labels.md"};function o(i,e,s,n,c,h){return d(),a("div",null,[...e[0]||(e[0]=[r("",15)])])}const u=t(l,[["render",o]]);export{g as __pageData,u as default};