Add a deterministic PullRequest workflow effect #295

Description

@taras

Story

As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

Contract

PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

Acceptance

  • PullRequest performs no implicit commit or push.
  • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
  • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
  • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
  • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
  • With a number and no requested field changes, PullRequest records a no-op result.
  • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
  • Replay cannot create a duplicate pull request.
  • Existing compatible state resolves to the same pull request.
  • Conflicting head, base, repository, or pull-request state is diagnosed.
  • Interruption after remote creation or update reconciles by provider observation.
  • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
  • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
  • Review verdicts bind to the head SHA they actually inspect.
  • Provider-specific payloads do not leak into the public component contract.

Dependencies

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

    No labels
    No labels

    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

      Add a deterministic PullRequest workflow effect #295

      Description

      @taras

      Story

      As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

      Contract

      PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

      The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

      PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

      The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

      The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

      Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

      Acceptance

      • PullRequest performs no implicit commit or push.
      • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
      • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
      • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
      • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
      • With a number and no requested field changes, PullRequest records a no-op result.
      • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
      • Replay cannot create a duplicate pull request.
      • Existing compatible state resolves to the same pull request.
      • Conflicting head, base, repository, or pull-request state is diagnosed.
      • Interruption after remote creation or update reconciles by provider observation.
      • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
      • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
      • Review verdicts bind to the head SHA they actually inspect.
      • Provider-specific payloads do not leak into the public component contract.

      Dependencies

      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

        No labels
        No labels

        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

          Add a deterministic PullRequest workflow effect #295

          Description

          @taras

          Story

          As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

          Contract

          PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

          The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

          PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

          The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

          The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

          Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

          Acceptance

          • PullRequest performs no implicit commit or push.
          • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
          • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
          • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
          • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
          • With a number and no requested field changes, PullRequest records a no-op result.
          • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
          • Replay cannot create a duplicate pull request.
          • Existing compatible state resolves to the same pull request.
          • Conflicting head, base, repository, or pull-request state is diagnosed.
          • Interruption after remote creation or update reconciles by provider observation.
          • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
          • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
          • Review verdicts bind to the head SHA they actually inspect.
          • Provider-specific payloads do not leak into the public component contract.

          Dependencies

          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

            No labels
            No labels

            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

              Add a deterministic PullRequest workflow effect #295

              Description

              @taras

              Story

              As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

              Contract

              PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

              The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

              PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

              The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

              The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

              Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

              Acceptance

              • PullRequest performs no implicit commit or push.
              • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
              • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
              • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
              • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
              • With a number and no requested field changes, PullRequest records a no-op result.
              • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
              • Replay cannot create a duplicate pull request.
              • Existing compatible state resolves to the same pull request.
              • Conflicting head, base, repository, or pull-request state is diagnosed.
              • Interruption after remote creation or update reconciles by provider observation.
              • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
              • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
              • Review verdicts bind to the head SHA they actually inspect.
              • Provider-specific payloads do not leak into the public component contract.

              Dependencies

              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

                No labels
                No labels

                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

                  Add a deterministic PullRequest workflow effect #295

                  Description

                  @taras

                  Story

                  As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

                  Contract

                  PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

                  The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

                  PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

                  The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

                  The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

                  Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

                  Acceptance

                  • PullRequest performs no implicit commit or push.
                  • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
                  • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
                  • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
                  • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
                  • With a number and no requested field changes, PullRequest records a no-op result.
                  • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
                  • Replay cannot create a duplicate pull request.
                  • Existing compatible state resolves to the same pull request.
                  • Conflicting head, base, repository, or pull-request state is diagnosed.
                  • Interruption after remote creation or update reconciles by provider observation.
                  • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
                  • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
                  • Review verdicts bind to the head SHA they actually inspect.
                  • Provider-specific payloads do not leak into the public component contract.

                  Dependencies

                  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

                    No labels
                    No labels

                    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

                      Add a deterministic PullRequest workflow effect #295

                      Description

                      @taras

                      Story

                      As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

                      Contract

                      PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

                      The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

                      PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

                      The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

                      The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

                      Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

                      Acceptance

                      • PullRequest performs no implicit commit or push.
                      • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
                      • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
                      • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
                      • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
                      • With a number and no requested field changes, PullRequest records a no-op result.
                      • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
                      • Replay cannot create a duplicate pull request.
                      • Existing compatible state resolves to the same pull request.
                      • Conflicting head, base, repository, or pull-request state is diagnosed.
                      • Interruption after remote creation or update reconciles by provider observation.
                      • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
                      • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
                      • Review verdicts bind to the head SHA they actually inspect.
                      • Provider-specific payloads do not leak into the public component contract.

                      Dependencies

                      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

                        No labels
                        No labels

                        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

                          Add a deterministic PullRequest workflow effect #295

                          Description

                          @taras

                          Story

                          As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

                          Contract

                          PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

                          The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

                          PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

                          The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

                          The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

                          Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

                          Acceptance

                          • PullRequest performs no implicit commit or push.
                          • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
                          • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
                          • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
                          • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
                          • With a number and no requested field changes, PullRequest records a no-op result.
                          • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
                          • Replay cannot create a duplicate pull request.
                          • Existing compatible state resolves to the same pull request.
                          • Conflicting head, base, repository, or pull-request state is diagnosed.
                          • Interruption after remote creation or update reconciles by provider observation.
                          • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
                          • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
                          • Review verdicts bind to the head SHA they actually inspect.
                          • Provider-specific payloads do not leak into the public component contract.

                          Dependencies

                          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

                            No labels
                            No labels

                            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

                              Add a deterministic PullRequest workflow effect #295

                              Description

                              @taras

                              Story

                              As a workflow author, I want PullRequest to create or reconcile one pull request for an explicitly pushed branch, so review operates on known remote state without hiding a push inside pull-request creation.

                              Contract

                              PullRequest uses the contextual Repository and Git-host provider. title is required, number defaults to undefined, base defaults to the Repository's recorded initial branch, draft defaults to false, and rendered children form the body.

                              The contextual Repository's current named branch is the pull request head. PullRequest never commits or pushes, and direct remote observation is not a substitute for authorization to create or update one: the run must already hold a compatible Git.Push result from #370 for the same Repository identity, head branch, full destination ref and head SHA. A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.

                              PullRequest is an upsert over one explicit pull-request identity. When number is undefined, the effect creates a pull request for the current head and base; if an interrupted earlier attempt already created that same request, the compatible remote pull request is adopted instead of duplicated. When number is present, the effect updates that exact pull request's mutable fields to the requested title, body, draft state and base; its existing head must already be the current head, and if those fields already match, it records a no-op result. A supplied number whose existing pull request belongs to another Repository, head or base is a conflict rather than a rewrite to unrelated state.

                              The effect derives stable identity from the WorkflowRun and expansion and reconciles through #297. Its natural key identifies either the supplied Repository pull-request number or, when no number was supplied, the Repository's creation request for that head branch and base branch; the complete request fingerprint still discriminates title, body, draft and number changes.

                              The first production as result is stable creation/update evidence, not a live pull-request snapshot. It includes the filtered Repository identity, the provider's stable pull-request identity, number, URL, state, head SHA and base SHA. Reviews, comments, checks, labels, reviewers, merge state and later title, body, draft or branch movement are separate reads or effects rather than freshness embedded in the creation result.

                              Provider-specific payloads, credentials and host-local paths do not leak into the public component contract or filtered history.

                              Acceptance

                              • PullRequest performs no implicit commit or push.
                              • PullRequest requires retained compatible pushed-head evidence for the same Repository identity, head branch, destination ref and head SHA.
                              • A missing, conflicting or unreadable Push result fails before pull-request creation or update is observed.
                              • With no number, PullRequest creates one pull request for the current head and base, or adopts a compatible creation left by an interrupted earlier attempt.
                              • With a number, PullRequest updates that exact pull request's title, body, draft state and base when its existing head is the current head.
                              • With a number and no requested field changes, PullRequest records a no-op result.
                              • A supplied number for another Repository, head or base is a conflict rather than an unrelated rewrite.
                              • Replay cannot create a duplicate pull request.
                              • Existing compatible state resolves to the same pull request.
                              • Conflicting head, base, repository, or pull-request state is diagnosed.
                              • Interruption after remote creation or update reconciles by provider observation.
                              • The result identifies the exact head and base SHA and remains valid as the recorded creation/update outcome.
                              • The public as value is structured creation/update evidence, not only a URL and not a live freshness snapshot.
                              • Review verdicts bind to the head SHA they actually inspect.
                              • Provider-specific payloads do not leak into the public component contract.

                              Dependencies

                              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

                                No labels
                                No labels

                                Projects

                                No projects

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions