full diff

org.cairnsproto.draft.policy

cairnsproto.org +43 −0
From
bafyreih5phgm7g6vrdpsxew54x65n7cs2g7nx3f7n2xoqck3hriodypwxe indexed 2026-11-05 18:56 UTC View this version
To
bafyreifnkx3rzckkt7ozjczfamf5ugxlcsqsg24htkvdtlti72trletp2e indexed 2026-11-06 01:44 UTC View this version

Compatibility

breaking 2 breaking changes, 14 non-breaking changes.

Breaking changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.cairnsproto.draft.policy#calibrationStep", src: "org.cairnsproto.draft.policy#calibrationStep", tgt: "org.cairnsproto.draft.policy#calibrationStep.weightPpm", kind: "prop", name: Some("weightPpm") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.cairnsproto.draft.policy#calibrationStep", src: "org.cairnsproto.draft.policy#calibrationStep", tgt: "org.cairnsproto.draft.policy#calibrationStep.goldPasses", kind: "prop", name: Some("goldPasses") }
Non-breaking changes (14)
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep.goldPasses" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep.weightPpm" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.calibration" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.calibration:items" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.dormancy" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.mergeOrgs" }
  • AddedVertex AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.snapshotCadence" }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.calibration", kind: "prop", name: Some("calibration") }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.dormancy", kind: "prop", name: Some("dormancy") }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.mergeOrgs", kind: "prop", name: Some("mergeOrgs") }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.snapshotCadence", kind: "prop", name: Some("snapshotCadence") }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body.calibration", tgt: "org.cairnsproto.draft.policy:body.calibration:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "org.cairnsproto.draft.policy:body.calibration:items", tgt: "org.cairnsproto.draft.policy#calibrationStep", kind: "ref", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep.goldPasses" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy#calibrationStep.weightPpm" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.calibration" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.calibration:items" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.dormancy" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.mergeOrgs" }
  • AddedVertex { vertex_id: "org.cairnsproto.draft.policy:body.snapshotCadence" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "org.cairnsproto.draft.policy#calibrationStep", src: "org.cairnsproto.draft.policy#calibrationStep", tgt: "org.cairnsproto.draft.policy#calibrationStep.weightPpm", kind: "prop", name: Some("weightPpm") }
  • Breaking: RequiredEdgeAdded { vertex_id: "org.cairnsproto.draft.policy#calibrationStep", src: "org.cairnsproto.draft.policy#calibrationStep", tgt: "org.cairnsproto.draft.policy#calibrationStep.goldPasses", kind: "prop", name: Some("goldPasses") }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.calibration", kind: "prop", name: Some("calibration") }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.dormancy", kind: "prop", name: Some("dormancy") }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.mergeOrgs", kind: "prop", name: Some("mergeOrgs") }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body", tgt: "org.cairnsproto.draft.policy:body.snapshotCadence", kind: "prop", name: Some("snapshotCadence") }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body.calibration", tgt: "org.cairnsproto.draft.policy:body.calibration:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "org.cairnsproto.draft.policy:body.calibration:items", tgt: "org.cairnsproto.draft.policy#calibrationStep", kind: "ref", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "builtinCanonicalizer": {
55 "description": "Built-in steps applied in order to every string value in the payload. Object keys, $type, $link and $bytes are never changed.",
66 "properties": {
77 "steps": {
88 "items": {
99 "knownValues": [
1010 "identity",
1111 "text",
1212 "integerStrings",
1313 "lowercase"
1414 ],
1515 "maxLength": 64,
1616 "type": "string"
1717 },
1818 "maxLength": 8,
1919 "minLength": 1,
2020 "type": "array"
2121 }
2222 },
2323 "required": [
2424 "steps"
2525 ],
2626 "type": "object"
2727 },
28 "calibrationStep": {
29 "properties": {
30 "goldPasses": {
31 "minimum": 0,
32 "type": "integer"
33 },
34 "weightPpm": {
35 "maximum": 1000000,
36 "minimum": 0,
37 "type": "integer"
38 }
39 },
40 "required": [
41 "goldPasses",
42 "weightPpm"
43 ],
44 "type": "object"
45 },
2846 "canonicalizer": {
2947 "description": "How payloads of one schema become candidate values. Stones whose canonical values are equal are the same candidate. Schemas without an entry use identity.",
3048 "properties": {
3149 "schema": {
3250 "ref": "org.cairnsproto.draft.defs#hash",
3351 "type": "ref"
3452 },
3553 "using": {
3654 "refs": [
3755 "#checkCanonicalizer",
3856 "#builtinCanonicalizer"
3957 ],
4058 "type": "union"
4159 }
4260 },
4361 "required": [
4462 "schema",
4563 "using"
4664 ],
4765 "type": "object"
4866 },
4967 "checkCanonicalizer": {
5068 "description": "A WASM check that maps a payload to its canonical value.",
5169 "properties": {
5270 "check": {
5371 "ref": "com.atproto.repo.strongRef",
5472 "type": "ref"
5573 }
5674 },
5775 "required": [
5876 "check"
5977 ],
6078 "type": "object"
6179 },
6280 "courseSelector": {
6381 "properties": {
6482 "course": {
6583 "description": "A course id from the project.",
6684 "maxLength": 128,
6785 "type": "string"
6886 }
6987 },
7088 "required": [
7189 "course"
7290 ],
7391 "type": "object"
7492 },
7593 "credit": {
7694 "properties": {
7795 "attemptWeightPpm": {
7896 "default": 50000,
7997 "maximum": 1000000,
8098 "minimum": 0,
8199 "type": "integer"
82100 },
83101 "dedup": {
84102 "default": false,
85103 "description": "Open-scope dedup: a new site earns placement credit only if no earlier site matches it.",
86104 "type": "boolean"
87105 },
88106 "flowBack": {
89107 "ref": "#flowBack",
90108 "type": "ref"
91109 },
92110 "pebbleWeightPpm": {
93111 "default": 500000,
94112 "maximum": 1000000,
95113 "minimum": 0,
96114 "type": "integer"
97115 },
98116 "volunteeredWeightPpm": {
99117 "default": 500000,
100118 "maximum": 1000000,
101119 "minimum": 0,
102120 "type": "integer"
103121 }
104122 },
105123 "type": "object"
106124 },
107125 "draw": {
108126 "properties": {
109127 "drawnToRaise": {
110128 "default": 1,
111129 "description": "Agreeing drawn retraces needed before the low bound can rise without an anchor.",
112130 "minimum": 1,
113131 "type": "integer"
114132 },
115133 "epochRounds": {
116134 "default": 1200,
117135 "description": "drand quicknet rounds per epoch. 1200 rounds of 3 seconds is one hour.",
118136 "minimum": 1,
119137 "type": "integer"
120138 },
121139 "startThresholdPpm": {
122140 "default": 31250,
123141 "description": "Starting draw threshold T; doubles each epoch without a drawn retrace.",
124142 "maximum": 1000000,
125143 "minimum": 0,
126144 "type": "integer"
127145 },
128146 "volunteeredWeightPpm": {
129147 "default": 500000,
130148 "maximum": 1000000,
131149 "minimum": 0,
132150 "type": "integer"
133151 },
134152 "windowEpochs": {
135153 "default": 24,
136154 "description": "How long a drawn sponsor has to deliver.",
137155 "minimum": 1,
138156 "type": "integer"
139157 }
140158 },
141159 "type": "object"
142160 },
143161 "flowBack": {
144162 "properties": {
145163 "capMultiple": {
146164 "default": 5,
147165 "description": "Flow-back is capped at this multiple of a stone's own credit.",
148166 "minimum": 0,
149167 "type": "integer"
150168 },
151169 "sharePpm": {
152170 "default": 250000,
153171 "maximum": 1000000,
154172 "minimum": 0,
155173 "type": "integer"
156174 }
157175 },
158176 "type": "object"
159177 },
160178 "judge": {
161179 "properties": {
162180 "minJudges": {
163181 "default": 1,
164182 "minimum": 1,
165183 "type": "integer"
166184 },
167185 "prompt": {
168186 "ref": "org.cairnsproto.draft.defs#hash",
169187 "type": "ref"
170188 },
171189 "schema": {
172190 "ref": "org.cairnsproto.draft.defs#hash",
173191 "type": "ref"
174192 }
175193 },
176194 "required": [
177195 "schema",
178196 "prompt"
179197 ],
180198 "type": "object"
181199 },
182200 "labeler": {
183201 "properties": {
184202 "did": {
185203 "format": "did",
186204 "type": "string"
187205 },
188206 "labels": {
189207 "description": "Label values honored from this labeler, such as bad-actor, exclude, recheck, unsafe or tag:<name>.",
190208 "items": {
191209 "maxLength": 128,
192210 "type": "string"
193211 },
194212 "maxLength": 64,
195213 "minLength": 1,
196214 "type": "array"
197215 }
198216 },
199217 "required": [
200218 "did",
201219 "labels"
202220 ],
203221 "type": "object"
204222 },
205223 "main": {
206224 "description": "The rules that turn evidence into confidence and credit. A policy that extends another overrides only the fields it sets.",
207225 "key": "tid",
208226 "record": {
209227 "properties": {
210228 "activationDelay": {
211229 "default": 24,
212230 "description": "Epochs after a timekeeper first sees a version before additions to its executable surface take effect.",
213231 "minimum": 0,
214232 "type": "integer"
215233 },
216234 "blind": {
217235 "default": false,
218236 "description": "Payloads are timelock-encrypted to the round that closes the epoch.",
219237 "type": "boolean"
220238 },
239 "calibration": {
240 "description": "A per-setup weight curve from gold passes: each stone's model weight is multiplied by the weightPpm of the step with the most goldPasses its setup has reached. A setup below every step keeps full weight. Absent, gold scores only inform.",
241 "items": {
242 "ref": "#calibrationStep",
243 "type": "ref"
244 },
245 "maxLength": 32,
246 "type": "array"
247 },
221248 "canonicalizers": {
222249 "items": {
223250 "ref": "#canonicalizer",
224251 "type": "ref"
225252 },
226253 "maxLength": 256,
227254 "type": "array"
228255 },
229256 "confidence": {
230257 "description": "Check that maps tallies to [low, high] per candidate. Absent means the built-in Beta-share interval.",
231258 "ref": "com.atproto.repo.strongRef",
232259 "type": "ref"
233260 },
234261 "createdAt": {
235262 "format": "datetime",
236263 "type": "string"
237264 },
238265 "credit": {
239266 "ref": "#credit",
240267 "type": "ref"
241268 },
242269 "deny": {
243270 "description": "Weight 0 in this reading, including agents through sponsor links.",
244271 "items": {
245272 "format": "did",
246273 "type": "string"
247274 },
248275 "maxLength": 10000,
249276 "type": "array"
250277 },
278 "dormancy": {
279 "default": 720,
280 "description": "Epochs maintainer-only work may wait unanswered before the project is dormant.",
281 "minimum": 1,
282 "type": "integer"
283 },
251284 "draw": {
252285 "ref": "#draw",
253286 "type": "ref"
254287 },
255288 "escalation": {
256289 "items": {
257290 "format": "did",
258291 "type": "string"
259292 },
260293 "maxLength": 64,
261294 "type": "array"
262295 },
263296 "extends": {
264297 "ref": "com.atproto.repo.strongRef",
265298 "type": "ref"
266299 },
267300 "judges": {
268301 "items": {
269302 "ref": "#judge",
270303 "type": "ref"
271304 },
272305 "maxLength": 64,
273306 "type": "array"
274307 },
275308 "labelers": {
276309 "description": "Labelers the policy trusts, and which of each one's labels it honors with their standard effects.",
277310 "items": {
278311 "ref": "#labeler",
279312 "type": "ref"
280313 },
281314 "maxLength": 64,
282315 "type": "array"
283316 },
317 "mergeOrgs": {
318 "default": false,
319 "description": "Members of one organization count as one sponsor: draws are keyed on the org, an org with a stone at a site can't be drawn for it, and agreeing reads from its members count once. Orgs that share a member count as one.",
320 "type": "boolean"
321 },
284322 "models": {
285323 "ref": "#models",
286324 "type": "ref"
287325 },
288326 "nullSampling": {
289327 "ref": "#nullSampling",
290328 "type": "ref"
291329 },
292330 "priorities": {
293331 "items": {
294332 "ref": "#priority",
295333 "type": "ref"
296334 },
297335 "maxLength": 1024,
298336 "type": "array"
299337 },
300338 "requiredChecks": {
301339 "description": "A candidate that fails a required check has a low bound of 0.",
302340 "items": {
303341 "ref": "com.atproto.repo.strongRef",
304342 "type": "ref"
305343 },
306344 "maxLength": 64,
307345 "type": "array"
308346 },
309347 "retraceBudget": {
310348 "default": 3,
311349 "description": "Automatic retraces per site. A new distinct value schedules more.",
312350 "minimum": 0,
313351 "type": "integer"
314352 },
353 "snapshotCadence": {
354 "description": "Epochs a maintainer may go without a snapshot while the values past the export bar differ from the latest snapshot's. Absent, snapshots are never due.",
355 "minimum": 1,
356 "type": "integer"
357 },
315358 "thresholds": {
316359 "ref": "#thresholds",
317360 "type": "ref"
318361 },
319362 "timekeepers": {
320363 "items": {
321364 "format": "did",
322365 "type": "string"
323366 },
324367 "maxLength": 16,
325368 "type": "array"
326369 }
327370 },
328371 "required": [
329372 "createdAt"
330373 ],
331374 "type": "object"
332375 },
333376 "type": "record"
334377 },
335378 "modelWeight": {
336379 "properties": {
337380 "family": {
338381 "maxLength": 256,
339382 "type": "string"
340383 },
341384 "thinking": {
342385 "items": {
343386 "maxLength": 64,
344387 "type": "string"
345388 },
346389 "maxLength": 16,
347390 "type": "array"
348391 },
349392 "versions": {
350393 "items": {
351394 "maxLength": 128,
352395 "type": "string"
353396 },
354397 "maxLength": 64,
355398 "type": "array"
356399 },
357400 "weightPpm": {
358401 "maximum": 1000000,
359402 "minimum": 0,
360403 "type": "integer"
361404 }
362405 },
363406 "required": [
364407 "family",
365408 "weightPpm"
366409 ],
367410 "type": "object"
368411 },
369412 "models": {
370413 "properties": {
371414 "accept": {
372415 "items": {
373416 "ref": "#modelWeight",
374417 "type": "ref"
375418 },
376419 "maxLength": 256,
377420 "type": "array"
378421 },
379422 "defaultWeightPpm": {
380423 "default": 0,
381424 "description": "Weight for stones from unlisted models.",
382425 "maximum": 1000000,
383426 "minimum": 0,
384427 "type": "integer"
385428 },
386429 "sameSetupWeightPpm": {
387430 "default": 1000000,
388431 "description": "Extra weight on each agreeing read beyond the first from one setup (model, modelVersion and config hash) at a site.",
389432 "maximum": 1000000,
390433 "minimum": 0,
391434 "type": "integer"
392435 }
393436 },
394437 "type": "object"
395438 },
396439 "nullSampling": {
397440 "description": "Sampling for nulls without segments: initialPpm at first, then sampleNumerator/n after n passes, never below floorPpm.",
398441 "properties": {
399442 "floorPpm": {
400443 "default": 100000,
401444 "maximum": 1000000,
402445 "minimum": 0,
403446 "type": "integer"
404447 },
405448 "initialPpm": {
406449 "default": 1000000,
407450 "maximum": 1000000,
408451 "minimum": 0,
409452 "type": "integer"
410453 },
411454 "poolClearSamples": {
412455 "default": 60,
413456 "description": "Passing samples that clear a pool for final credit.",
414457 "minimum": 1,
415458 "type": "integer"
416459 },
417460 "sampleNumerator": {
418461 "default": 3,
419462 "minimum": 1,
420463 "type": "integer"
421464 }
422465 },
423466 "type": "object"
424467 },
425468 "priority": {
426469 "properties": {
427470 "need": {
428471 "description": "Relative need. Weights routing and placement credit.",
429472 "minimum": 0,
430473 "type": "integer"
431474 },
432475 "selector": {
433476 "refs": [
434477 "#courseSelector",
435478 "#siteSelector"
436479 ],
437480 "type": "union"
438481 }
439482 },
440483 "required": [
441484 "selector",
442485 "need"
443486 ],
444487 "type": "object"
445488 },
446489 "siteSelector": {
447490 "properties": {
448491 "site": {
449492 "description": "Site key.",
450493 "ref": "org.cairnsproto.draft.defs#hash",
451494 "type": "ref"
452495 }
453496 },
454497 "required": [
455498 "site"
456499 ],
457500 "type": "object"
458501 },
459502 "thresholds": {
460503 "description": "Bars on the low bound of the leading candidate's interval.",
461504 "properties": {
462505 "exportPpm": {
463506 "default": 950000,
464507 "maximum": 1000000,
465508 "minimum": 0,
466509 "type": "integer"
467510 },
468511 "finalizeCreditPpm": {
469512 "default": 900000,
470513 "maximum": 1000000,
471514 "minimum": 0,
472515 "type": "integer"
473516 },
474517 "minFamilies": {
475518 "default": 1,
476519 "description": "Model families a candidate's agreeing reads must come from before it clears the open-children or export bar. A read that declares no model is a family of its own sponsor.",
477520 "minimum": 1,
478521 "type": "integer"
479522 },
480523 "openChildrenPpm": {
481524 "default": 800000,
482525 "maximum": 1000000,
483526 "minimum": 0,
484527 "type": "integer"
485528 },
486529 "stopRoutingPpm": {
487530 "default": 990000,
488531 "maximum": 1000000,
489532 "minimum": 0,
490533 "type": "integer"
491534 }
492535 },
493536 "type": "object"
494537 }
495538 },
496539 "description": "Fractions are parts per million (0 to 1000000).",
497540 "id": "org.cairnsproto.draft.policy",
498541 "lexicon": 1
499542}

Compare other versions