@suveren/gateway 0.31.3 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,177 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/deploy@0.12",
3
+ "name": "Deployments",
4
+ "version": "0.12",
5
+ "description": "Authority to make an already-built version live. Successor to deploy@0.6, which gated 'build and deploy this commit'; this gates the act of putting something in front of real users, because building is not consequential and going live is. The action is a RELEASE: it activates bytes that already exist, so the human can look at the artifact before approving and no rebuild can diverge from what was approved. Host-agnostic — the artifact identifier is a Vercel deployment id, a container image digest, an Azure slot — named by the connector manifest, never here.",
6
+ "whatsNew": "Name only: now called \"Deployments\", the area of work it covers (was \"Deploy\"). Limits, scope and gates are unchanged, so a mandate under 0.11 keeps exactly its terms.",
7
+ "boundsSchema": {
8
+ "actionTypes": [
9
+ "release"
10
+ ],
11
+ "keyOrder": [
12
+ "profile",
13
+ "release_daily_max",
14
+ "rollback_allowed"
15
+ ],
16
+ "fields": {
17
+ "profile": {
18
+ "type": "string",
19
+ "required": true
20
+ },
21
+ "release_daily_max": {
22
+ "type": "number",
23
+ "required": true,
24
+ "displayName": "Times per day something may go live",
25
+ "description": "How often the agent may make a build live for real users. Counted by the Authority Server, so a compromised gateway cannot exceed it. Building a preview is NOT counted: previews harm nobody, and charging them against this limit would exhaust it before anything reached anyone.",
26
+ "unit": "count",
27
+ "boundType": {
28
+ "kind": "cumulative_count",
29
+ "window": "daily"
30
+ },
31
+ "appliesTo": [
32
+ "release"
33
+ ]
34
+ },
35
+ "rollback_allowed": {
36
+ "type": "string",
37
+ "required": false,
38
+ "displayName": "May put a previous version back live",
39
+ "description": "Whether the agent may promote a PREVIOUS artifact back to live. Reverting carries different risk from releasing: the artifact being restored was approved for a moment that has passed. NOT CURRENTLY ENFORCED: no executor yet distinguishes a revert from a release — a rollback arrives as a release of older bytes and is counted by release_daily_max. Hidden from the authorization editor until an executor emits action_type \"rollback\" for it; kept in the schema so the distinction stays declared.",
40
+ "enum": [
41
+ "yes",
42
+ "no"
43
+ ],
44
+ "boundType": {
45
+ "kind": "enum",
46
+ "values": [
47
+ "yes",
48
+ "no"
49
+ ]
50
+ },
51
+ "enforced": false
52
+ }
53
+ }
54
+ },
55
+ "scopeSchema": {
56
+ "keyOrder": [
57
+ "allowed_repos",
58
+ "allowed_environments",
59
+ "allowed_workflows",
60
+ "allowed_branches"
61
+ ],
62
+ "fields": {
63
+ "allowed_repos": {
64
+ "type": "string",
65
+ "required": true,
66
+ "displayName": "Allowed repositories",
67
+ "description": "Repositories the agent may deploy from, e.g. humanagencyprotocol/hap",
68
+ "constraint": {
69
+ "type": "string",
70
+ "enforceable": [
71
+ "subset"
72
+ ]
73
+ }
74
+ },
75
+ "allowed_environments": {
76
+ "type": "string",
77
+ "required": true,
78
+ "displayName": "Allowed environments",
79
+ "description": "Deployment targets the agent may reach. Deliberately NOT an enum: hosts disagree — GitHub uses names you define, Vercel has production and preview, Netlify has deploy-preview and branch-deploy. The connector discovers the real list.",
80
+ "constraint": {
81
+ "type": "string",
82
+ "enforceable": [
83
+ "subset"
84
+ ]
85
+ }
86
+ },
87
+ "allowed_workflows": {
88
+ "type": "string",
89
+ "required": true,
90
+ "displayName": "Allowed pipelines",
91
+ "description": "Named pipelines the agent may run, e.g. deploy.yml. Scoping by pipeline rather than by 'deploy' means adding CI later — a migration, an infrastructure apply — is an edit to this list, not a new profile. The limit of this approach: the grant knows a pipeline is permitted, not what it does. The name has to carry that meaning to the human signing.",
92
+ "constraint": {
93
+ "type": "string",
94
+ "enforceable": [
95
+ "subset"
96
+ ]
97
+ }
98
+ },
99
+ "allowed_branches": {
100
+ "type": "string",
101
+ "required": false,
102
+ "displayName": "Allowed branches",
103
+ "description": "Branches a deployable commit may come from. Optional: a host with no branch concept leaves it empty.",
104
+ "constraint": {
105
+ "type": "string",
106
+ "enforceable": [
107
+ "subset"
108
+ ]
109
+ }
110
+ }
111
+ }
112
+ },
113
+ "executionContextSchema": {
114
+ "fields": {
115
+ "action_type": {
116
+ "source": "static",
117
+ "description": "release or rollback — declared by the manifest, never taken from an agent argument",
118
+ "required": true,
119
+ "constraint": {
120
+ "type": "string",
121
+ "enforceable": [
122
+ "equals"
123
+ ]
124
+ }
125
+ },
126
+ "allowed_repos": {
127
+ "source": "declared",
128
+ "description": "Repository this action targets, checked against the authorized set",
129
+ "required": true,
130
+ "constraint": {
131
+ "type": "string",
132
+ "enforceable": [
133
+ "subset"
134
+ ]
135
+ }
136
+ },
137
+ "allowed_environments": {
138
+ "source": "declared",
139
+ "description": "Environment this action targets, checked against the authorized set. Recorded in the ticket, so the proof names where the release went.",
140
+ "required": true,
141
+ "constraint": {
142
+ "type": "string",
143
+ "enforceable": [
144
+ "subset"
145
+ ]
146
+ }
147
+ },
148
+ "allowed_workflows": {
149
+ "source": "declared",
150
+ "description": "Pipeline this action runs, checked against the authorized set. Recorded in the ticket, so the proof names what ran.",
151
+ "required": true,
152
+ "constraint": {
153
+ "type": "string",
154
+ "enforceable": [
155
+ "subset"
156
+ ]
157
+ }
158
+ }
159
+ }
160
+ },
161
+ "requiredGates": [
162
+ "bounds",
163
+ "intent",
164
+ "commitment",
165
+ "mandate_owner"
166
+ ],
167
+ "ttl": {
168
+ "default": 2592000,
169
+ "max": 31536000
170
+ },
171
+ "retention_minimum": 7776000,
172
+ "content_binding": {
173
+ "version": "1",
174
+ "kind": "text"
175
+ },
176
+ "ticket_lookup": true
177
+ }
@@ -45,6 +45,12 @@
45
45
  "github.com/humanagencyprotocol/hap-profiles/reporting@0.3": "reporting/0.3.profile.json",
46
46
  "github.com/humanagencyprotocol/hap-profiles/sales@0.4": "sales/0.4.profile.json",
47
47
  "github.com/humanagencyprotocol/hap-profiles/customers@0.10": "customers/0.10.profile.json",
48
- "github.com/humanagencyprotocol/hap-profiles/delegation@0.4": "delegation/0.4.profile.json"
48
+ "github.com/humanagencyprotocol/hap-profiles/delegation@0.4": "delegation/0.4.profile.json",
49
+ "github.com/humanagencyprotocol/hap-profiles/customers@0.11": "customers/0.11.profile.json",
50
+ "github.com/humanagencyprotocol/hap-profiles/publish@0.7": "publish/0.7.profile.json",
51
+ "github.com/humanagencyprotocol/hap-profiles/deploy@0.12": "deploy/0.12.profile.json",
52
+ "github.com/humanagencyprotocol/hap-profiles/purchase@0.8": "purchase/0.8.profile.json",
53
+ "github.com/humanagencyprotocol/hap-profiles/reporting@0.4": "reporting/0.4.profile.json",
54
+ "github.com/humanagencyprotocol/hap-profiles/delegation@0.5": "delegation/0.5.profile.json"
49
55
  }
50
56
  }
@@ -0,0 +1,187 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/publish@0.7",
3
+ "name": "Publishing",
4
+ "version": "0.7",
5
+ "description": "Publishing authority — governs posting public content to social media, blogs, and other platforms",
6
+ "whatsNew": "Name only: now called \"Publishing\", the area of work it covers (was \"Content Publishing\"). Limits, scope and gates are unchanged, so a mandate under 0.6 keeps exactly its terms.",
7
+ "boundsSchema": {
8
+ "actionTypes": [
9
+ "delete",
10
+ "post"
11
+ ],
12
+ "keyOrder": [
13
+ "profile",
14
+ "post_daily_max",
15
+ "post_monthly_max"
16
+ ],
17
+ "fields": {
18
+ "profile": {
19
+ "type": "string",
20
+ "required": true
21
+ },
22
+ "post_daily_max": {
23
+ "type": "number",
24
+ "required": true,
25
+ "displayName": "Daily post limit",
26
+ "description": "Maximum posts published per day",
27
+ "unit": "count",
28
+ "boundType": {
29
+ "kind": "cumulative_count",
30
+ "window": "daily"
31
+ },
32
+ "appliesTo": [
33
+ "post"
34
+ ]
35
+ },
36
+ "post_monthly_max": {
37
+ "type": "number",
38
+ "required": true,
39
+ "displayName": "Monthly post limit",
40
+ "description": "Maximum posts published per month",
41
+ "unit": "count",
42
+ "boundType": {
43
+ "kind": "cumulative_count",
44
+ "window": "monthly"
45
+ },
46
+ "appliesTo": [
47
+ "post"
48
+ ]
49
+ }
50
+ }
51
+ },
52
+ "scopeSchema": {
53
+ "keyOrder": [
54
+ "allowed_platforms",
55
+ "content_type",
56
+ "audience"
57
+ ],
58
+ "fields": {
59
+ "allowed_platforms": {
60
+ "type": "string",
61
+ "required": true,
62
+ "displayName": "Platforms",
63
+ "description": "Authorized publishing platforms",
64
+ "enum": [
65
+ "linkedin"
66
+ ],
67
+ "constraint": {
68
+ "type": "string",
69
+ "enforceable": [
70
+ "subset"
71
+ ]
72
+ }
73
+ },
74
+ "content_type": {
75
+ "type": "string",
76
+ "required": true,
77
+ "displayName": "Content types",
78
+ "description": "Authorized content formats",
79
+ "enum": [
80
+ "text",
81
+ "image",
82
+ "article"
83
+ ],
84
+ "constraint": {
85
+ "type": "string",
86
+ "enforceable": [
87
+ "subset"
88
+ ]
89
+ }
90
+ },
91
+ "audience": {
92
+ "type": "string",
93
+ "required": true,
94
+ "displayName": "Audience",
95
+ "description": "Authorized audience visibility",
96
+ "enum": [
97
+ "public",
98
+ "connections"
99
+ ],
100
+ "constraint": {
101
+ "type": "string",
102
+ "enforceable": [
103
+ "subset"
104
+ ]
105
+ }
106
+ }
107
+ }
108
+ },
109
+ "executionContextSchema": {
110
+ "fields": {
111
+ "allowed_platforms": {
112
+ "source": "declared",
113
+ "description": "Platform being published to (checked against authorized platforms)",
114
+ "required": true,
115
+ "constraint": {
116
+ "type": "string",
117
+ "enforceable": [
118
+ "subset"
119
+ ]
120
+ }
121
+ },
122
+ "content_type": {
123
+ "source": "declared",
124
+ "description": "Content format being published",
125
+ "required": true,
126
+ "constraint": {
127
+ "type": "string",
128
+ "enforceable": [
129
+ "subset"
130
+ ]
131
+ }
132
+ },
133
+ "audience": {
134
+ "source": "declared",
135
+ "description": "Audience visibility for this post",
136
+ "required": true,
137
+ "constraint": {
138
+ "type": "string",
139
+ "enforceable": [
140
+ "subset"
141
+ ]
142
+ }
143
+ },
144
+ "post_count_daily": {
145
+ "source": "cumulative",
146
+ "cumulativeField": "_count",
147
+ "window": "daily",
148
+ "description": "Running daily post count (resolved from execution log)",
149
+ "required": true,
150
+ "constraint": {
151
+ "type": "number",
152
+ "enforceable": [
153
+ "max"
154
+ ]
155
+ }
156
+ },
157
+ "post_count_monthly": {
158
+ "source": "cumulative",
159
+ "cumulativeField": "_count",
160
+ "window": "monthly",
161
+ "description": "Running monthly post count (resolved from execution log)",
162
+ "required": true,
163
+ "constraint": {
164
+ "type": "number",
165
+ "enforceable": [
166
+ "max"
167
+ ]
168
+ }
169
+ }
170
+ }
171
+ },
172
+ "requiredGates": [
173
+ "bounds",
174
+ "intent",
175
+ "commitment",
176
+ "mandate_owner"
177
+ ],
178
+ "ttl": {
179
+ "default": 86400,
180
+ "max": 31536000
181
+ },
182
+ "retention_minimum": 7776000,
183
+ "content_binding": {
184
+ "version": "1",
185
+ "kind": "text"
186
+ }
187
+ }
@@ -0,0 +1,235 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/purchase@0.8",
3
+ "name": "Purchasing",
4
+ "version": "0.8",
5
+ "description": "Purchase authority — governs spending company money: subscriptions, supplies, services, advertising",
6
+ "whatsNew": "Name only: now called \"Purchasing\", the area of work it covers (was \"Purchase\"). Limits, scope and gates are unchanged, so a mandate under 0.7 keeps exactly its terms.",
7
+ "boundsSchema": {
8
+ "actionTypes": [
9
+ "purchase"
10
+ ],
11
+ "keyOrder": [
12
+ "profile",
13
+ "spend_max",
14
+ "spend_daily_max",
15
+ "spend_monthly_max",
16
+ "transaction_count_daily_max"
17
+ ],
18
+ "fields": {
19
+ "profile": {
20
+ "type": "string",
21
+ "required": true
22
+ },
23
+ "spend_max": {
24
+ "type": "number",
25
+ "required": true,
26
+ "displayName": "Max per transaction",
27
+ "description": "Maximum spend per transaction in currency units",
28
+ "unit": "currency:EUR",
29
+ "boundType": {
30
+ "kind": "per_transaction",
31
+ "of": "spend",
32
+ "requiredFor": [
33
+ "purchase"
34
+ ]
35
+ }
36
+ },
37
+ "spend_daily_max": {
38
+ "type": "number",
39
+ "required": true,
40
+ "displayName": "Daily spend limit",
41
+ "description": "Maximum cumulative spend per day in currency units",
42
+ "unit": "currency:EUR",
43
+ "boundType": {
44
+ "kind": "cumulative_sum",
45
+ "of": "spend",
46
+ "window": "daily"
47
+ }
48
+ },
49
+ "spend_monthly_max": {
50
+ "type": "number",
51
+ "required": true,
52
+ "displayName": "Monthly spend limit",
53
+ "description": "Maximum cumulative spend per month in currency units",
54
+ "unit": "currency:EUR",
55
+ "boundType": {
56
+ "kind": "cumulative_sum",
57
+ "of": "spend",
58
+ "window": "monthly"
59
+ }
60
+ },
61
+ "transaction_count_daily_max": {
62
+ "type": "number",
63
+ "required": true,
64
+ "displayName": "Daily transaction limit",
65
+ "description": "Maximum number of purchase transactions per day",
66
+ "unit": "count",
67
+ "boundType": {
68
+ "kind": "cumulative_count",
69
+ "window": "daily"
70
+ },
71
+ "appliesTo": [
72
+ "purchase"
73
+ ]
74
+ }
75
+ }
76
+ },
77
+ "scopeSchema": {
78
+ "keyOrder": [
79
+ "currency",
80
+ "category",
81
+ "allowed_vendors"
82
+ ],
83
+ "fields": {
84
+ "currency": {
85
+ "type": "string",
86
+ "required": true,
87
+ "displayName": "Currency",
88
+ "description": "Permitted currency code",
89
+ "constraint": {
90
+ "type": "string",
91
+ "enforceable": [
92
+ "enum"
93
+ ]
94
+ },
95
+ "enum": [
96
+ "USD",
97
+ "EUR",
98
+ "GBP",
99
+ "CHF",
100
+ "JPY",
101
+ "CAD",
102
+ "AUD"
103
+ ]
104
+ },
105
+ "category": {
106
+ "type": "string",
107
+ "required": true,
108
+ "displayName": "Purchase category",
109
+ "description": "Authorized purchase category",
110
+ "constraint": {
111
+ "type": "string",
112
+ "enforceable": [
113
+ "enum"
114
+ ]
115
+ },
116
+ "enum": [
117
+ "subscription",
118
+ "supply",
119
+ "service",
120
+ "advertising"
121
+ ]
122
+ },
123
+ "allowed_vendors": {
124
+ "type": "string",
125
+ "required": false,
126
+ "displayName": "Allowed vendors",
127
+ "description": "Comma-separated list of approved vendor names",
128
+ "constraint": {
129
+ "type": "string",
130
+ "enforceable": [
131
+ "subset"
132
+ ]
133
+ }
134
+ }
135
+ }
136
+ },
137
+ "executionContextSchema": {
138
+ "fields": {
139
+ "spend": {
140
+ "source": "declared",
141
+ "description": "Purchase amount in currency units",
142
+ "required": true,
143
+ "constraint": {
144
+ "type": "number",
145
+ "enforceable": [
146
+ "max"
147
+ ]
148
+ }
149
+ },
150
+ "currency": {
151
+ "source": "declared",
152
+ "description": "Currency code",
153
+ "required": true,
154
+ "constraint": {
155
+ "type": "string",
156
+ "enforceable": [
157
+ "enum"
158
+ ]
159
+ }
160
+ },
161
+ "category": {
162
+ "source": "declared",
163
+ "description": "Purchase category",
164
+ "required": true,
165
+ "constraint": {
166
+ "type": "string",
167
+ "enforceable": [
168
+ "enum"
169
+ ]
170
+ }
171
+ },
172
+ "allowed_vendors": {
173
+ "source": "declared",
174
+ "description": "Vendor name for this purchase (checked against approved list)",
175
+ "required": false,
176
+ "constraint": {
177
+ "type": "string",
178
+ "enforceable": [
179
+ "subset"
180
+ ]
181
+ }
182
+ },
183
+ "spend_daily": {
184
+ "source": "cumulative",
185
+ "cumulativeField": "spend",
186
+ "window": "daily",
187
+ "description": "Running daily spend total (resolved from execution log)",
188
+ "required": true,
189
+ "constraint": {
190
+ "type": "number",
191
+ "enforceable": [
192
+ "max"
193
+ ]
194
+ }
195
+ },
196
+ "spend_monthly": {
197
+ "source": "cumulative",
198
+ "cumulativeField": "spend",
199
+ "window": "monthly",
200
+ "description": "Running monthly spend total (resolved from execution log)",
201
+ "required": true,
202
+ "constraint": {
203
+ "type": "number",
204
+ "enforceable": [
205
+ "max"
206
+ ]
207
+ }
208
+ },
209
+ "transaction_count_daily": {
210
+ "source": "cumulative",
211
+ "cumulativeField": "_count",
212
+ "window": "daily",
213
+ "description": "Running daily transaction count (resolved from execution log)",
214
+ "required": true,
215
+ "constraint": {
216
+ "type": "number",
217
+ "enforceable": [
218
+ "max"
219
+ ]
220
+ }
221
+ }
222
+ }
223
+ },
224
+ "requiredGates": [
225
+ "bounds",
226
+ "intent",
227
+ "commitment",
228
+ "mandate_owner"
229
+ ],
230
+ "ttl": {
231
+ "default": 86400,
232
+ "max": 2592000
233
+ },
234
+ "retention_minimum": 7776000
235
+ }