full diff

dev.knotless.getMergeStatus

From
bafyreiedw4i6nacyoxjnvm4umm4vql4ugyneybguk7qhehgtu2xecx35lm indexed 2026-11-07 05:41 UTC View this version
To
bafyreifuvrfzu7wy6fzmbxczu6mhavqdfphu4tlmbrv2larjsyikferm2a indexed 2026-11-08 04:54 UTC View this version

Compatibility

breaking 2 breaking changes, 13 non-breaking changes.

Breaking changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#autoMerge", src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.by", kind: "prop", name: Some("by") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#autoMerge", src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.state", kind: "prop", name: Some("state") }
Non-breaking changes (13)
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#actorView" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.by" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.pushedBy" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.state" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#permissions.autoMerge" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.autoMerge" }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.pushedBy", kind: "prop", name: Some("pushedBy") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge.by", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge.pushedBy", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus#permissions", tgt: "dev.knotless.getMergeStatus#permissions.autoMerge", kind: "prop", name: Some("autoMerge") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.autoMerge", kind: "prop", name: Some("autoMerge") }
  • AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge", kind: "ref", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "dev.knotless.defs#actorView" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.by" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.pushedBy" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#autoMerge.state" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus#permissions.autoMerge" }
  • AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.autoMerge" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#autoMerge", src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.by", kind: "prop", name: Some("by") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#autoMerge", src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.state", kind: "prop", name: Some("state") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge.pushedBy", kind: "prop", name: Some("pushedBy") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge.by", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus#autoMerge.pushedBy", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus#permissions", tgt: "dev.knotless.getMergeStatus#permissions.autoMerge", kind: "prop", name: Some("autoMerge") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.autoMerge", kind: "prop", name: Some("autoMerge") }
  • Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.autoMerge", tgt: "dev.knotless.getMergeStatus#autoMerge", kind: "ref", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
4 "autoMerge": {
5 "description": "Where the pull's merge when checks pass stands, if it was ever set and not cancelled by someone: a runner the repository names merges it once it would merge.",
6 "properties": {
7 "by": {
8 "description": "Who set it.",
9 "ref": "dev.knotless.defs#actorView",
10 "type": "ref"
11 },
12 "pushedBy": {
13 "description": "For pushed, the owner of the head repository pushed to.",
14 "ref": "dev.knotless.defs#actorView",
15 "type": "ref"
16 },
17 "state": {
18 "description": "set while it stands; pushed once someone who may not merge it pushed to its head since, and retargeted once it moved to another branch, either of which cancels it.",
19 "knownValues": [
20 "set",
21 "pushed",
22 "retargeted"
23 ],
24 "type": "string"
25 }
26 },
27 "required": [
28 "state",
29 "by"
30 ],
31 "type": "object"
32 },
433 "conflict": {
534 "description": "A file that both sides changed so that they do not merge.",
635 "properties": {
736 "path": {
837 "description": "From the repository's root.",
938 "type": "string"
1039 }
1140 },
1241 "required": [
1342 "path"
1443 ],
1544 "type": "object"
1645 },
1746 "main": {
1847 "description": "Whether an open pull can merge now, decided as `knotless pull 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.",
1948 "errors": [
2049 {
2150 "description": "No such repository.",
2251 "name": "NotFound"
2352 },
2453 {
2554 "description": "No one asked: log in to the pages first.",
2655 "name": "AuthenticationRequired"
2756 }
2857 ],
2958 "output": {
3059 "encoding": "application/json",
3160 "schema": {
3261 "properties": {
62 "autoMerge": {
63 "ref": "#autoMerge",
64 "type": "ref"
65 },
3366 "base": {
3467 "description": "The commit its target branch is at, in hex.",
3568 "type": "string"
3669 },
3770 "checks": {
3871 "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.",
3972 "knownValues": [
4073 "passed",
4174 "failed",
4275 "running",
4376 "pending",
4477 "none"
4578 ],
4679 "type": "string"
4780 },
4881 "codeOwnersWarnings": {
4982 "description": "The lines of the target branch's CODEOWNERS file that were skipped, and why: one naming a team, say.",
5083 "items": {
5184 "ref": "#note",
5285 "type": "ref"
5386 },
5487 "type": "array"
5588 },
5689 "conflicts": {
5790 "description": "The files that conflict.",
5891 "items": {
5992 "ref": "#conflict",
6093 "type": "ref"
6194 },
6295 "type": "array"
6396 },
6497 "deletes": {
6598 "description": "Its head branch, which merging deletes unless asked to keep it.",
6699 "type": "string"
67100 },
68101 "head": {
69102 "description": "The commit its head branch is at, in hex.",
70103 "type": "string"
71104 },
72105 "may": {
73106 "ref": "#permissions",
74107 "type": "ref"
75108 },
76109 "method": {
77110 "description": "How it would merge: a merge commit naming the pull; into a branch protected as linear, one squashed commit. fastForward is no longer made.",
78111 "knownValues": [
79112 "fastForward",
80113 "merge",
81114 "squash"
82115 ],
83116 "type": "string"
84117 },
85118 "queueBlocked": {
86119 "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.",
87120 "knownValues": [
88121 "undelegated"
89122 ],
90123 "type": "string"
91124 },
92125 "queueOnly": {
93126 "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.",
94127 "type": "boolean"
95128 },
96129 "reason": {
97130 "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.",
98131 "type": "string"
99132 },
100133 "reviews": {
101134 "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.",
102135 "knownValues": [
103136 "passed",
104137 "blocked",
105138 "none"
106139 ],
107140 "type": "string"
108141 },
109142 "reviewsMissing": {
110143 "description": "What its reviews lack, each as `knotless pull merge --check` lists it: `reviews 1 of 2`, `owners of web/: @alice or @bob`, `changes asked by @carol`.",
111144 "items": {
112145 "ref": "#note",
113146 "type": "ref"
114147 },
115148 "type": "array"
116149 },
117150 "reviewsUncounted": {
118151 "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.",
119152 "items": {
120153 "ref": "#note",
121154 "type": "ref"
122155 },
123156 "type": "array"
124157 },
125158 "state": {
126159 "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.",
127160 "knownValues": [
128161 "clean",
129162 "conflicting",
130163 "blocked",
131164 "draft"
132165 ],
133166 "type": "string"
134167 }
135168 },
136169 "required": [
137170 "state",
138171 "checks",
139172 "method",
140173 "base",
141174 "head",
142175 "may"
143176 ],
144177 "type": "object"
145178 }
146179 },
147180 "parameters": {
148181 "properties": {
149182 "pull": {
150183 "description": "The dev.knotless.pull record.",
151184 "format": "at-uri",
152185 "type": "string"
153186 },
154187 "repo": {
155188 "description": "The repository's dev.knotless.repo record, as dev.knotless.getRepo takes it.",
156189 "format": "at-uri",
157190 "type": "string"
158191 }
159192 },
160193 "required": [
161194 "repo",
162195 "pull"
163196 ],
164197 "type": "params"
165198 },
166199 "type": "query"
167200 },
168201 "note": {
169202 "description": "A line of text about the pull's reviews.",
170203 "properties": {
171204 "text": {
172205 "description": "In plain words.",
173206 "type": "string"
174207 }
175208 },
176209 "required": [
177210 "text"
178211 ],
179212 "type": "object"
180213 },
181214 "permissions": {
182215 "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.",
183216 "properties": {
217 "autoMerge": {
218 "description": "Set it to merge by itself once its checks pass, with dev.knotless.setAutoMerge: those who may merge it, in a repository that names runners, into a branch with no merge queue. Cancelling that, those and its author may. Absent is false.",
219 "type": "boolean"
220 },
184221 "base": {
185222 "description": "Change its target branch: those who may close it.",
186223 "type": "boolean"
187224 },
188225 "force": {
189226 "description": "Merge it past its checks: the owner alone.",
190227 "type": "boolean"
191228 },
192229 "head": {
193230 "description": "Change its head branch: its author.",
194231 "type": "boolean"
195232 },
196233 "merge": {
197234 "description": "Merge it: the owner and collaborators.",
198235 "type": "boolean"
199236 },
200237 "queue": {
201238 "description": "Put it in the merge queue or take it out: those who may merge it, in a repository whose runners land a queue, while the branch it lands on takes pulls through the queue or it is already queued.",
202239 "type": "boolean"
203240 },
204241 "rerun": {
205242 "description": "Ask the runners to run its checks again: the owner, in a repository that names runners.",
206243 "type": "boolean"
207244 }
208245 },
209246 "required": [
210247 "merge",
211248 "force",
212249 "queue",
213250 "base",
214251 "head",
215252 "rerun"
216253 ],
217254 "type": "object"
218255 }
219256 },
220257 "description": "Whether an open pull can merge now, and what the account asking may do to it.",
221258 "id": "dev.knotless.getMergeStatus",
222259 "lexicon": 1
223260}

Compare other versions