com.publicdomainrelay.temp.tangled.spindle.trigger

johnandersen777.bsky.social

Schema Diff

+24 -17

From

CID
bafyreifwztarqgx...
Indexed At
2026-06-08 04:09 UTC
View this version

To

CID
bafyreiauklk3e6i...
Indexed At
2026-06-11 14:13 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

9 breaking changes, 7 non-breaking changes.

Breaking Changes (9)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow", kind: "prop", name: Some("workflow") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow", kind: "prop", name: Some("workflow") }
  • RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl" }
  • RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl" }
  • RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow" }
  • RemovedEdge RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl", kind: "prop", name: Some("logsUrl") }
  • RemovedEdge RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl", kind: "prop", name: Some("statusUrl") }
  • KindChanged KindChanged { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", old_kind: "object", new_kind: "ref" }
  • ConstraintAdded ConstraintAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", sort: "ref", value: "#workflowResult" }
Non-Breaking Changes (7)
  • AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult" }
  • AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl" }
  • AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl" }
  • AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow" }
  • AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl", kind: "prop", name: Some("logsUrl") }
  • AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl", kind: "prop", name: Some("statusUrl") }
  • AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", kind: "ref", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl" }
  • RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl" }
  • RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow" }

Added Elements

  • AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult" }
  • AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl" }
  • AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl" }
  • AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", sort: "ref", value: "#workflowResult" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow", kind: "prop", name: Some("workflow") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow", kind: "prop", name: Some("workflow") }
  • Breaking: RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl", kind: "prop", name: Some("logsUrl") }
  • Breaking: RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl", kind: "prop", name: Some("statusUrl") }
  • Breaking: KindChanged { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", old_kind: "object", new_kind: "ref" }
  • Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl", kind: "prop", name: Some("logsUrl") }
  • Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl", kind: "prop", name: Some("statusUrl") }
  • Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "Manually trigger a pipeline run on a Tangled spindle. Intended to be called via PDS service proxying (the 'atproto-proxy' header, pointed at the spindle's did:web service entry), so the user's PDS mints and signs the inter-service auth token; the spindle verifies the token's issuer against their DID document and requires it to match the trigger's 'actor'. Mirrors the sh.tangled.pipeline fields a knot dispatches on a push/PR event.",
6 6
      "errors": [
7 7
        {
8 8
          "description": "Malformed body or missing required fields.",
9 9
          "name": "InvalidRequest"
10 10
        },
11 11
        {
12 12
          "description": "Missing or invalid inter-service auth token.",
13 13
          "name": "Unauthorized"
14 14
        },
15 15
        {
16 16
          "description": "Token issuer does not match actor, or repo is not authorized for this spindle.",
17 17
          "name": "Forbidden"
18 18
        }
19 19
      ],
20 20
      "input": {
21 21
        "encoding": "application/json",
22 22
        "schema": {
23 23
          "properties": {
24 24
            "actor": {
25 25
              "description": "DID of the actor the run is attributed to. Must equal the issuer of the service-auth token.",
26 26
              "format": "did",
27 27
              "type": "string"
28 28
            },
29 29
            "inputs": {
30 30
              "description": "Optional workflow_dispatch-style inputs, as a map of string keys to string values.",
31 31
              "type": "unknown"
32 32
            },
33 33
            "knot": {
34 34
              "description": "Knot hostname that hosts the repo, e.g. knot1.tangled.sh.",
35 35
              "type": "string"
36 36
            },
37 37
            "pipelineRkey": {
38 38
              "description": "Record key identifying this pipeline run; only needs to be unique per run.",
39 39
              "type": "string"
40 40
            },
41 41
            "ref": {
42 42
              "description": "Commit SHA to run at. The spindle fetches .github/workflows/*.yml at this exact commit, so it must be a real commit, not a branch name.",
43 43
              "type": "string"
44 44
            },
45 45
            "repoDid": {
46 46
              "description": "DID of the repo (the owner DID used for sh.tangled.repo.blob lookups).",
47 47
              "format": "did",
48 48
              "type": "string"
49 49
            },
50 50
            "repoName": {
51 51
              "description": "Human-readable repo name, e.g. myrepo.",
52 52
              "type": "string"
53 53
            }
54 54
          },
55 55
          "required": [
56 56
            "knot",
57 57
            "pipelineRkey",
58 58
            "actor",
59 59
            "repoDid",
60 60
            "repoName",
61 61
            "ref"
62 62
          ],
63 63
          "type": "object"
64 64
        }
65 65
      },
66 66
      "output": {
67 67
        "encoding": "application/json",
68 68
        "schema": {
69 69
          "properties": {
70 70
            "knot": {
71 71
              "type": "string"
72 72
            },
73 73
            "pipelineRkey": {
74 74
              "type": "string"
75 75
            },
76 76
            "ref": {
77 77
              "type": "string"
78 78
            },
79 79
            "submitted": {
80 80
              "description": "True once the trigger was accepted and workflow submission started.",
81 81
              "type": "boolean"
82 82
            },
83 83
            "workflows": {
84 84
              "description": "The workflow stems that were submitted, with their log/status stream URLs.",
85 85
              "items": {
86 -
                "properties": {
87 -
                  "logsUrl": {
88 -
                    "format": "uri",
89 -
                    "type": "string"
90 -
                  },
91 -
                  "statusUrl": {
92 -
                    "format": "uri",
93 -
                    "type": "string"
94 -
                  },
95 -
                  "workflow": {
96 -
                    "type": "string"
97 -
                  }
98 -
                },
99 -
                "required": [
100 -
                  "workflow"
101 -
                ],
102 -
                "type": "object"
86 +
                "ref": "#workflowResult",
87 +
                "type": "ref"
103 88
              },
104 89
              "type": "array"
105 90
            }
106 91
          },
107 92
          "required": [
108 93
            "submitted",
109 94
            "knot",
110 95
            "pipelineRkey",
111 96
            "ref",
112 97
            "workflows"
113 98
          ],
114 99
          "type": "object"
115 100
        }
116 101
      },
117 102
      "type": "procedure"
103 +
    },
104 +
    "workflowResult": {
105 +
      "properties": {
106 +
        "logsUrl": {
107 +
          "description": "URL to the log stream for this workflow run.",
108 +
          "format": "uri",
109 +
          "type": "string"
110 +
        },
111 +
        "statusUrl": {
112 +
          "description": "URL to the status stream for this workflow run.",
113 +
          "format": "uri",
114 +
          "type": "string"
115 +
        },
116 +
        "workflow": {
117 +
          "description": "Workflow stem that was submitted.",
118 +
          "type": "string"
119 +
        }
120 +
      },
121 +
      "required": [
122 +
        "workflow"
123 +
      ],
124 +
      "type": "object"
118 125
    }
119 126
  },
120 127
  "id": "com.publicdomainrelay.temp.tangled.spindle.trigger",
121 128
  "lexicon": 1
122 129
}

Compare Other Versions

Lexicon Garden

@