dev.knotless.getMergeStatus

lexicons.knotless.dev

Schema Diff

+51 -4

From

CID
bafyreihj5bz5y23...
Indexed At
2026-10-28 21:21 UTC
View this version

To

CID
bafyreif5kotqs4j...
Indexed At
2026-10-29 14:35 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 19 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#note", src: "dev.knotless.getMergeStatus#note", tgt: "dev.knotless.getMergeStatus#note.text", kind: "prop", name: Some("text") }
  • ConstraintTightened ConstraintTightened { vertex_id: "dev.knotless.getMergeStatus:output.state", sort: "knownValues", old_value: "[\"clean\",\"conflicting\",\"blocked\"]", new_value: "[\"clean\",\"conflicting\",\"blocked\",\"draft\"]" }
Non-Breaking Changes (19)
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note.text" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviews" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing:items" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsUncounted" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsUncounted:items" }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", kind: "prop", name: Some("codeOwnersWarnings") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviews", kind: "prop", name: Some("reviews") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing", kind: "prop", name: Some("reviewsMissing") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsUncounted", kind: "prop", name: Some("reviewsUncounted") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsUncounted", tgt: "dev.knotless.getMergeStatus:output.reviewsUncounted:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsUncounted:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note.text" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviews" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing:items" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsUncounted" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsUncounted:items" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "dev.knotless.getMergeStatus:output.state", sort: "knownValues", old_value: "[\"clean\",\"conflicting\",\"blocked\"]", new_value: "[\"clean\",\"conflicting\",\"blocked\",\"draft\"]" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#note", src: "dev.knotless.getMergeStatus#note", tgt: "dev.knotless.getMergeStatus#note.text", kind: "prop", name: Some("text") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", kind: "prop", name: Some("codeOwnersWarnings") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviews", kind: "prop", name: Some("reviews") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing", kind: "prop", name: Some("reviewsMissing") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsUncounted", kind: "prop", name: Some("reviewsUncounted") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsUncounted", tgt: "dev.knotless.getMergeStatus:output.reviewsUncounted:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsUncounted:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "conflict": {
5 5
      "description": "A file that both sides changed so that they do not merge.",
6 6
      "properties": {
7 7
        "path": {
8 8
          "description": "From the repository's root.",
9 9
          "type": "string"
10 10
        }
11 11
      },
12 12
      "required": [
13 13
        "path"
14 14
      ],
15 15
      "type": "object"
16 16
    },
17 17
    "main": {
18 18
      "description": "Whether an open pull can merge now, decided as `knotless merge` decides it, without merging: whether its head merges with its target branch as it is now, and, in a repository that names runners, whether each workflow that runs on it passed there. And what the account asking may do to it: merge it, queue it, retarget it or run its checks again. Requires the session cookie the pages' login sets, or a service token from the caller's PDS, audience the appview's DID, for this method.",
19 19
      "errors": [
20 20
        {
21 21
          "description": "No such repository.",
22 22
          "name": "NotFound"
23 23
        },
24 24
        {
25 25
          "description": "No one asked: log in to the pages first.",
26 26
          "name": "AuthenticationRequired"
27 27
        }
28 28
      ],
29 29
      "output": {
30 30
        "encoding": "application/json",
31 31
        "schema": {
32 32
          "properties": {
33 33
            "base": {
34 34
              "description": "The commit its target branch is at, in hex.",
35 35
              "type": "string"
36 36
            },
37 37
            "checks": {
38 38
              "description": "Where its checks stand at its head merged with its base: pending for those not run there; none when the repository names no runners, so a merge waits for none, or when it conflicts.",
39 39
              "knownValues": [
40 40
                "passed",
41 41
                "failed",
42 42
                "running",
43 43
                "pending",
44 44
                "none"
45 45
              ],
46 46
              "type": "string"
47 47
            },
48 +
            "codeOwnersWarnings": {
49 +
              "description": "The lines of the target branch's CODEOWNERS file that were skipped, and why: one naming a team, say.",
50 +
              "items": {
51 +
                "ref": "#note",
52 +
                "type": "ref"
53 +
              },
54 +
              "type": "array"
55 +
            },
48 56
            "conflicts": {
49 57
              "description": "The files that conflict.",
50 58
              "items": {
51 59
                "ref": "#conflict",
52 60
                "type": "ref"
53 61
              },
54 62
              "type": "array"
55 63
            },
56 64
            "deletes": {
57 65
              "description": "Its head branch, which merging deletes unless asked to keep it.",
58 66
              "type": "string"
59 67
            },
60 68
            "head": {
61 69
              "description": "The commit its head branch is at, in hex.",
62 70
              "type": "string"
63 71
            },
64 72
            "may": {
65 73
              "ref": "#permissions",
66 74
              "type": "ref"
67 75
            },
68 76
            "method": {
69 77
              "description": "How it would merge: a fast-forward when the base has not moved since its head branched off, else a merge commit; into a branch protected as linear, one squashed commit.",
70 78
              "knownValues": [
71 79
                "fastForward",
72 80
                "merge",
73 81
                "squash"
74 82
              ],
75 83
              "type": "string"
76 84
            },
77 85
            "queueBlocked": {
78 86
              "description": "Why the merge queue would not land it yet, when this server knows: undelegated when no runner the repository names may push, so its queue lands through this server's gateway, and the owner has not delegated writes to it.",
79 87
              "knownValues": [
80 88
                "undelegated"
81 89
              ],
82 90
              "type": "string"
83 91
            },
84 92
            "queueOnly": {
85 93
              "description": "Its target branch takes pulls only through the merge queue: queue it with dev.knotless.queuePull, as dev.knotless.mergePull refuses it. Absent is false.",
86 94
              "type": "boolean"
87 95
            },
88 96
            "reason": {
89 -
              "description": "Why it cannot merge now, in the words a merge would refuse it with.",
97 +
              "description": "Why it cannot merge now, in the words a merge would refuse it with; and when the account asking may not merge it, that too.",
98 +
              "type": "string"
99 +
            },
100 +
            "reviews": {
101 +
              "description": "Where its reviews stand against what its target branch's rule asks of them (dev.knotless.repo#reviews): none when the rule asks nothing of them, or when it conflicts.",
102 +
              "knownValues": [
103 +
                "passed",
104 +
                "blocked",
105 +
                "none"
106 +
              ],
90 107
              "type": "string"
91 108
            },
109 +
            "reviewsMissing": {
110 +
              "description": "What its reviews lack, each as `knotless merge --check` lists it: `reviews 1 of 2`, `owners of web/: @alice or @bob`, `changes asked by @carol`.",
111 +
              "items": {
112 +
                "ref": "#note",
113 +
                "type": "ref"
114 +
              },
115 +
              "type": "array"
116 +
            },
117 +
            "reviewsUncounted": {
118 +
              "description": "The approvals that do not count toward its target branch's rule, and why: `@dan's approval does not count: only the owner's and collaborators' approvals count`, or one of an earlier head when only approvals of its head as it is now count.",
119 +
              "items": {
120 +
                "ref": "#note",
121 +
                "type": "ref"
122 +
              },
123 +
              "type": "array"
124 +
            },
92 125
            "state": {
93 -
              "description": "clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed.",
126 +
              "description": "clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed, or it is not reviewed as its target branch's rule asks; draft, whatever else holds, while its author has not marked it ready.",
94 127
              "knownValues": [
95 128
                "clean",
96 129
                "conflicting",
97 -
                "blocked"
130 +
                "blocked",
131 +
                "draft"
98 132
              ],
99 133
              "type": "string"
100 134
            }
101 135
          },
102 136
          "required": [
103 137
            "state",
104 138
            "checks",
105 139
            "method",
106 140
            "base",
107 141
            "head",
108 142
            "may"
109 143
          ],
110 144
          "type": "object"
111 145
        }
112 146
      },
113 147
      "parameters": {
114 148
        "properties": {
115 149
          "pull": {
116 150
            "description": "The dev.knotless.pull record.",
117 151
            "format": "at-uri",
118 152
            "type": "string"
119 153
          },
120 154
          "repo": {
121 155
            "description": "The repository's dev.knotless.repo record, as dev.knotless.getRepo takes it.",
122 156
            "format": "at-uri",
123 157
            "type": "string"
124 158
          }
125 159
        },
126 160
        "required": [
127 161
          "repo",
128 162
          "pull"
129 163
        ],
130 164
        "type": "params"
131 165
      },
132 166
      "type": "query"
133 167
    },
168 +
    "note": {
169 +
      "description": "A line of text about the pull's reviews.",
170 +
      "properties": {
171 +
        "text": {
172 +
          "description": "In plain words.",
173 +
          "type": "string"
174 +
        }
175 +
      },
176 +
      "required": [
177 +
        "text"
178 +
      ],
179 +
      "type": "object"
180 +
    },
134 181
    "permissions": {
135 -
      "description": "What the account asking may do to the pull.",
182 +
      "description": "What the account asking may do to the pull: what its part in the repository lets it do, not whether that would work now. state and reason say that: a merge refuses a blocked pull, the owner's merge too, unless the owner forces it.",
136 183
      "properties": {
137 184
        "base": {
138 185
          "description": "Change its target branch: those who may close it.",
139 186
          "type": "boolean"
140 187
        },
141 188
        "force": {
142 189
          "description": "Merge it past its checks: the owner alone.",
143 190
          "type": "boolean"
144 191
        },
145 192
        "head": {
146 193
          "description": "Change its head branch: its author.",
147 194
          "type": "boolean"
148 195
        },
149 196
        "merge": {
150 197
          "description": "Merge it: the owner and collaborators.",
151 198
          "type": "boolean"
152 199
        },
153 200
        "queue": {
154 201
          "description": "Put it in the merge queue or take it out: those who may merge it, in a repository whose runners land a queue.",
155 202
          "type": "boolean"
156 203
        },
157 204
        "rerun": {
158 205
          "description": "Ask the runners to run its checks again: the owner, in a repository that names runners.",
159 206
          "type": "boolean"
160 207
        }
161 208
      },
162 209
      "required": [
163 210
        "merge",
164 211
        "force",
165 212
        "queue",
166 213
        "base",
167 214
        "head",
168 215
        "rerun"
169 216
      ],
170 217
      "type": "object"
171 218
    }
172 219
  },
173 220
  "description": "Whether an open pull can merge now, and what the account asking may do to it.",
174 221
  "id": "dev.knotless.getMergeStatus",
175 222
  "lexicon": 1
176 223
}

Compare Other Versions

Lexicon Garden

@