Fix v0.2 worker queue and status contract blockers #98

Description

@joryirving

Problem

Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

The queue/status path has several inconsistencies:

  1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
  2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
  3. /api/issues/move mutates GitHub labels without bearer auth.
  4. Claim/status transition behavior is ambiguous.

These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

Current risks

Queue payload is incomplete

Queue issue items need to include:

  • type: "issue"
  • issueId
  • repoFullName
  • number
  • title
  • url
  • labels
  • lane
  • status
  • priority
  • rankingReason
  • decomposed

Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

Worker migration docs do not match the API

The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

Mutation endpoint auth gap

/api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

Claim behavior needs clarification

Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

Preferred behavior:

  • Claim assigns only.
  • Status transition is explicit through a worker-friendly authenticated status endpoint.

Acceptance criteria

  • Queue issue items include type: "issue".
  • Queue issue items include issueId.
  • Queue issue items include repoFullName.
  • Queue issue items include status and priority metadata.
  • PR-fix queue items still appear before issue queue items.
  • Legacy lane=gpt alias still maps to escalated.
  • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
  • Status endpoint accepts:
    • issueId
    • repoFullName
    • issueNumber
    • status
    • optional actor or agentName
  • Status endpoint replaces existing status/* labels safely.
  • Status endpoint updates GitHub labels.
  • Status endpoint updates local Prisma issue cache.
  • Status endpoint writes AuditLog.
  • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
  • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
  • Claim behavior is documented clearly.
  • Worker migration docs match the actual worker-facing API.
  • Tests cover queue payload shape.
  • Tests cover PR-fix items appearing before issue items.
  • Tests cover status endpoint auth.
  • Tests cover status label replacement.
  • Tests cover docs/API consistency where practical.

Validation

Run:

  • npm ci
  • npx prisma generate
  • npm run lint
  • npm run typecheck
  • npm run test
  • npm run build
  • Docker build if available

Notes

Do not cut a release in this issue.
Do not touch home-ops.
Do not edit agent workspace files.
This is a Mission Control app hardening task before v0.2.0 release.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
      Skip to content

      Fix v0.2 worker queue and status contract blockers #98

      Description

      @joryirving

      Problem

      Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

      The queue/status path has several inconsistencies:

      1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
      2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
      3. /api/issues/move mutates GitHub labels without bearer auth.
      4. Claim/status transition behavior is ambiguous.

      These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

      Current risks

      Queue payload is incomplete

      Queue issue items need to include:

      • type: "issue"
      • issueId
      • repoFullName
      • number
      • title
      • url
      • labels
      • lane
      • status
      • priority
      • rankingReason
      • decomposed

      Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

      Worker migration docs do not match the API

      The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

      Mutation endpoint auth gap

      /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

      Claim behavior needs clarification

      Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

      Preferred behavior:

      • Claim assigns only.
      • Status transition is explicit through a worker-friendly authenticated status endpoint.

      Acceptance criteria

      • Queue issue items include type: "issue".
      • Queue issue items include issueId.
      • Queue issue items include repoFullName.
      • Queue issue items include status and priority metadata.
      • PR-fix queue items still appear before issue queue items.
      • Legacy lane=gpt alias still maps to escalated.
      • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
      • Status endpoint accepts:
        • issueId
        • repoFullName
        • issueNumber
        • status
        • optional actor or agentName
      • Status endpoint replaces existing status/* labels safely.
      • Status endpoint updates GitHub labels.
      • Status endpoint updates local Prisma issue cache.
      • Status endpoint writes AuditLog.
      • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
      • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
      • Claim behavior is documented clearly.
      • Worker migration docs match the actual worker-facing API.
      • Tests cover queue payload shape.
      • Tests cover PR-fix items appearing before issue items.
      • Tests cover status endpoint auth.
      • Tests cover status label replacement.
      • Tests cover docs/API consistency where practical.

      Validation

      Run:

      • npm ci
      • npx prisma generate
      • npm run lint
      • npm run typecheck
      • npm run test
      • npm run build
      • Docker build if available

      Notes

      Do not cut a release in this issue.
      Do not touch home-ops.
      Do not edit agent workspace files.
      This is a Mission Control app hardening task before v0.2.0 release.

      Activity

      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        Type

        No type

        Projects

        No projects

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          Fix v0.2 worker queue and status contract blockers #98

          Description

          @joryirving

          Problem

          Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

          The queue/status path has several inconsistencies:

          1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
          2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
          3. /api/issues/move mutates GitHub labels without bearer auth.
          4. Claim/status transition behavior is ambiguous.

          These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

          Current risks

          Queue payload is incomplete

          Queue issue items need to include:

          • type: "issue"
          • issueId
          • repoFullName
          • number
          • title
          • url
          • labels
          • lane
          • status
          • priority
          • rankingReason
          • decomposed

          Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

          Worker migration docs do not match the API

          The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

          Mutation endpoint auth gap

          /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

          Claim behavior needs clarification

          Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

          Preferred behavior:

          • Claim assigns only.
          • Status transition is explicit through a worker-friendly authenticated status endpoint.

          Acceptance criteria

          • Queue issue items include type: "issue".
          • Queue issue items include issueId.
          • Queue issue items include repoFullName.
          • Queue issue items include status and priority metadata.
          • PR-fix queue items still appear before issue queue items.
          • Legacy lane=gpt alias still maps to escalated.
          • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
          • Status endpoint accepts:
            • issueId
            • repoFullName
            • issueNumber
            • status
            • optional actor or agentName
          • Status endpoint replaces existing status/* labels safely.
          • Status endpoint updates GitHub labels.
          • Status endpoint updates local Prisma issue cache.
          • Status endpoint writes AuditLog.
          • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
          • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
          • Claim behavior is documented clearly.
          • Worker migration docs match the actual worker-facing API.
          • Tests cover queue payload shape.
          • Tests cover PR-fix items appearing before issue items.
          • Tests cover status endpoint auth.
          • Tests cover status label replacement.
          • Tests cover docs/API consistency where practical.

          Validation

          Run:

          • npm ci
          • npx prisma generate
          • npm run lint
          • npm run typecheck
          • npm run test
          • npm run build
          • Docker build if available

          Notes

          Do not cut a release in this issue.
          Do not touch home-ops.
          Do not edit agent workspace files.
          This is a Mission Control app hardening task before v0.2.0 release.

          Activity

          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            Type

            No type

            Projects

            No projects

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Fix v0.2 worker queue and status contract blockers #98

              Description

              @joryirving

              Problem

              Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

              The queue/status path has several inconsistencies:

              1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
              2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
              3. /api/issues/move mutates GitHub labels without bearer auth.
              4. Claim/status transition behavior is ambiguous.

              These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

              Current risks

              Queue payload is incomplete

              Queue issue items need to include:

              • type: "issue"
              • issueId
              • repoFullName
              • number
              • title
              • url
              • labels
              • lane
              • status
              • priority
              • rankingReason
              • decomposed

              Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

              Worker migration docs do not match the API

              The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

              Mutation endpoint auth gap

              /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

              Claim behavior needs clarification

              Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

              Preferred behavior:

              • Claim assigns only.
              • Status transition is explicit through a worker-friendly authenticated status endpoint.

              Acceptance criteria

              • Queue issue items include type: "issue".
              • Queue issue items include issueId.
              • Queue issue items include repoFullName.
              • Queue issue items include status and priority metadata.
              • PR-fix queue items still appear before issue queue items.
              • Legacy lane=gpt alias still maps to escalated.
              • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
              • Status endpoint accepts:
                • issueId
                • repoFullName
                • issueNumber
                • status
                • optional actor or agentName
              • Status endpoint replaces existing status/* labels safely.
              • Status endpoint updates GitHub labels.
              • Status endpoint updates local Prisma issue cache.
              • Status endpoint writes AuditLog.
              • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
              • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
              • Claim behavior is documented clearly.
              • Worker migration docs match the actual worker-facing API.
              • Tests cover queue payload shape.
              • Tests cover PR-fix items appearing before issue items.
              • Tests cover status endpoint auth.
              • Tests cover status label replacement.
              • Tests cover docs/API consistency where practical.

              Validation

              Run:

              • npm ci
              • npx prisma generate
              • npm run lint
              • npm run typecheck
              • npm run test
              • npm run build
              • Docker build if available

              Notes

              Do not cut a release in this issue.
              Do not touch home-ops.
              Do not edit agent workspace files.
              This is a Mission Control app hardening task before v0.2.0 release.

              Activity

              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                Type

                No type

                Projects

                No projects

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  Fix v0.2 worker queue and status contract blockers #98

                  Description

                  @joryirving

                  Problem

                  Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

                  The queue/status path has several inconsistencies:

                  1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
                  2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
                  3. /api/issues/move mutates GitHub labels without bearer auth.
                  4. Claim/status transition behavior is ambiguous.

                  These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

                  Current risks

                  Queue payload is incomplete

                  Queue issue items need to include:

                  • type: "issue"
                  • issueId
                  • repoFullName
                  • number
                  • title
                  • url
                  • labels
                  • lane
                  • status
                  • priority
                  • rankingReason
                  • decomposed

                  Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

                  Worker migration docs do not match the API

                  The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

                  Mutation endpoint auth gap

                  /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

                  Claim behavior needs clarification

                  Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

                  Preferred behavior:

                  • Claim assigns only.
                  • Status transition is explicit through a worker-friendly authenticated status endpoint.

                  Acceptance criteria

                  • Queue issue items include type: "issue".
                  • Queue issue items include issueId.
                  • Queue issue items include repoFullName.
                  • Queue issue items include status and priority metadata.
                  • PR-fix queue items still appear before issue queue items.
                  • Legacy lane=gpt alias still maps to escalated.
                  • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
                  • Status endpoint accepts:
                    • issueId
                    • repoFullName
                    • issueNumber
                    • status
                    • optional actor or agentName
                  • Status endpoint replaces existing status/* labels safely.
                  • Status endpoint updates GitHub labels.
                  • Status endpoint updates local Prisma issue cache.
                  • Status endpoint writes AuditLog.
                  • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
                  • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
                  • Claim behavior is documented clearly.
                  • Worker migration docs match the actual worker-facing API.
                  • Tests cover queue payload shape.
                  • Tests cover PR-fix items appearing before issue items.
                  • Tests cover status endpoint auth.
                  • Tests cover status label replacement.
                  • Tests cover docs/API consistency where practical.

                  Validation

                  Run:

                  • npm ci
                  • npx prisma generate
                  • npm run lint
                  • npm run typecheck
                  • npm run test
                  • npm run build
                  • Docker build if available

                  Notes

                  Do not cut a release in this issue.
                  Do not touch home-ops.
                  Do not edit agent workspace files.
                  This is a Mission Control app hardening task before v0.2.0 release.

                  Activity

                  Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    Type

                    No type

                    Projects

                    No projects

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      Fix v0.2 worker queue and status contract blockers #98

                      Description

                      @joryirving

                      Problem

                      Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

                      The queue/status path has several inconsistencies:

                      1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
                      2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
                      3. /api/issues/move mutates GitHub labels without bearer auth.
                      4. Claim/status transition behavior is ambiguous.

                      These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

                      Current risks

                      Queue payload is incomplete

                      Queue issue items need to include:

                      • type: "issue"
                      • issueId
                      • repoFullName
                      • number
                      • title
                      • url
                      • labels
                      • lane
                      • status
                      • priority
                      • rankingReason
                      • decomposed

                      Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

                      Worker migration docs do not match the API

                      The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

                      Mutation endpoint auth gap

                      /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

                      Claim behavior needs clarification

                      Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

                      Preferred behavior:

                      • Claim assigns only.
                      • Status transition is explicit through a worker-friendly authenticated status endpoint.

                      Acceptance criteria

                      • Queue issue items include type: "issue".
                      • Queue issue items include issueId.
                      • Queue issue items include repoFullName.
                      • Queue issue items include status and priority metadata.
                      • PR-fix queue items still appear before issue queue items.
                      • Legacy lane=gpt alias still maps to escalated.
                      • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
                      • Status endpoint accepts:
                        • issueId
                        • repoFullName
                        • issueNumber
                        • status
                        • optional actor or agentName
                      • Status endpoint replaces existing status/* labels safely.
                      • Status endpoint updates GitHub labels.
                      • Status endpoint updates local Prisma issue cache.
                      • Status endpoint writes AuditLog.
                      • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
                      • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
                      • Claim behavior is documented clearly.
                      • Worker migration docs match the actual worker-facing API.
                      • Tests cover queue payload shape.
                      • Tests cover PR-fix items appearing before issue items.
                      • Tests cover status endpoint auth.
                      • Tests cover status label replacement.
                      • Tests cover docs/API consistency where practical.

                      Validation

                      Run:

                      • npm ci
                      • npx prisma generate
                      • npm run lint
                      • npm run typecheck
                      • npm run test
                      • npm run build
                      • Docker build if available

                      Notes

                      Do not cut a release in this issue.
                      Do not touch home-ops.
                      Do not edit agent workspace files.
                      This is a Mission Control app hardening task before v0.2.0 release.

                      Activity

                      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        Type

                        No type

                        Projects

                        No projects

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          Fix v0.2 worker queue and status contract blockers #98

                          Description

                          @joryirving

                          Problem

                          Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

                          The queue/status path has several inconsistencies:

                          1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
                          2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
                          3. /api/issues/move mutates GitHub labels without bearer auth.
                          4. Claim/status transition behavior is ambiguous.

                          These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

                          Current risks

                          Queue payload is incomplete

                          Queue issue items need to include:

                          • type: "issue"
                          • issueId
                          • repoFullName
                          • number
                          • title
                          • url
                          • labels
                          • lane
                          • status
                          • priority
                          • rankingReason
                          • decomposed

                          Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

                          Worker migration docs do not match the API

                          The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

                          Mutation endpoint auth gap

                          /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

                          Claim behavior needs clarification

                          Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

                          Preferred behavior:

                          • Claim assigns only.
                          • Status transition is explicit through a worker-friendly authenticated status endpoint.

                          Acceptance criteria

                          • Queue issue items include type: "issue".
                          • Queue issue items include issueId.
                          • Queue issue items include repoFullName.
                          • Queue issue items include status and priority metadata.
                          • PR-fix queue items still appear before issue queue items.
                          • Legacy lane=gpt alias still maps to escalated.
                          • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
                          • Status endpoint accepts:
                            • issueId
                            • repoFullName
                            • issueNumber
                            • status
                            • optional actor or agentName
                          • Status endpoint replaces existing status/* labels safely.
                          • Status endpoint updates GitHub labels.
                          • Status endpoint updates local Prisma issue cache.
                          • Status endpoint writes AuditLog.
                          • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
                          • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
                          • Claim behavior is documented clearly.
                          • Worker migration docs match the actual worker-facing API.
                          • Tests cover queue payload shape.
                          • Tests cover PR-fix items appearing before issue items.
                          • Tests cover status endpoint auth.
                          • Tests cover status label replacement.
                          • Tests cover docs/API consistency where practical.

                          Validation

                          Run:

                          • npm ci
                          • npx prisma generate
                          • npm run lint
                          • npm run typecheck
                          • npm run test
                          • npm run build
                          • Docker build if available

                          Notes

                          Do not cut a release in this issue.
                          Do not touch home-ops.
                          Do not edit agent workspace files.
                          This is a Mission Control app hardening task before v0.2.0 release.

                          Activity

                          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            Type

                            No type

                            Projects

                            No projects

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              Fix v0.2 worker queue and status contract blockers #98

                              Description

                              @joryirving

                              Problem

                              Mission Control is close to v0.2.0, but the worker-facing assignment contract is not safe enough to migrate agents yet.

                              The queue/status path has several inconsistencies:

                              1. GET /api/agents/[agentName]/queue issue items do not include enough data for workers to claim work cleanly.
                              2. docs/worker-cron-prompt-migration.md documents an /api/issues/move payload that does not match the actual route.
                              3. /api/issues/move mutates GitHub labels without bearer auth.
                              4. Claim/status transition behavior is ambiguous.

                              These need to be fixed before cutting v0.2.0 or migrating workers onto Mission Control queues.

                              Current risks

                              Queue payload is incomplete

                              Queue issue items need to include:

                              • type: "issue"
                              • issueId
                              • repoFullName
                              • number
                              • title
                              • url
                              • labels
                              • lane
                              • status
                              • priority
                              • rankingReason
                              • decomposed

                              Without issueId and repoFullName, workers cannot call claim/status endpoints cleanly.

                              Worker migration docs do not match the API

                              The docs currently imply workers can call /api/issues/move with a lane payload, but the actual route expects oldLabels and newLabels.

                              Mutation endpoint auth gap

                              /api/issues/move mutates GitHub labels and writes audit logs, but should require MISSION_CONTROL_AGENT_TOKEN bearer auth if it remains part of the worker path.

                              Claim behavior needs clarification

                              Decide whether claim should also move issues to status/in-progress, or whether claim only assigns and workers must explicitly call a status endpoint.

                              Preferred behavior:

                              • Claim assigns only.
                              • Status transition is explicit through a worker-friendly authenticated status endpoint.

                              Acceptance criteria

                              • Queue issue items include type: "issue".
                              • Queue issue items include issueId.
                              • Queue issue items include repoFullName.
                              • Queue issue items include status and priority metadata.
                              • PR-fix queue items still appear before issue queue items.
                              • Legacy lane=gpt alias still maps to escalated.
                              • Add a worker-friendly authenticated status endpoint, preferred: POST /api/issues/status.
                              • Status endpoint accepts:
                                • issueId
                                • repoFullName
                                • issueNumber
                                • status
                                • optional actor or agentName
                              • Status endpoint replaces existing status/* labels safely.
                              • Status endpoint updates GitHub labels.
                              • Status endpoint updates local Prisma issue cache.
                              • Status endpoint writes AuditLog.
                              • Status endpoint requires MISSION_CONTROL_AGENT_TOKEN bearer auth.
                              • /api/issues/move either requires bearer auth or is clearly not used by worker migration docs.
                              • Claim behavior is documented clearly.
                              • Worker migration docs match the actual worker-facing API.
                              • Tests cover queue payload shape.
                              • Tests cover PR-fix items appearing before issue items.
                              • Tests cover status endpoint auth.
                              • Tests cover status label replacement.
                              • Tests cover docs/API consistency where practical.

                              Validation

                              Run:

                              • npm ci
                              • npx prisma generate
                              • npm run lint
                              • npm run typecheck
                              • npm run test
                              • npm run build
                              • Docker build if available

                              Notes

                              Do not cut a release in this issue.
                              Do not touch home-ops.
                              Do not edit agent workspace files.
                              This is a Mission Control app hardening task before v0.2.0 release.

                              Activity

                              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                Type

                                No type

                                Projects

                                No projects

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions