borgmcp-shared 1.0.1 → 1.2.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.
Files changed (38) hide show
  1. package/CONTRIBUTING.md +4 -1
  2. package/README.md +37 -8
  3. package/RELEASES.md +2 -3
  4. package/dist/conformance/adapter.d.ts +6 -101
  5. package/dist/conformance/adapter.d.ts.map +1 -1
  6. package/dist/conformance/adapter.js +546 -281
  7. package/dist/conformance/adapter.js.map +1 -1
  8. package/dist/conformance/index.d.ts +5 -42
  9. package/dist/conformance/index.d.ts.map +1 -1
  10. package/dist/conformance/index.js +16 -52
  11. package/dist/conformance/index.js.map +1 -1
  12. package/dist/protocol/contract.d.ts +2 -2
  13. package/dist/protocol/contract.d.ts.map +1 -1
  14. package/dist/protocol/contract.js +2 -2
  15. package/dist/protocol/contract.js.map +1 -1
  16. package/dist/protocol/errors.d.ts +0 -14
  17. package/dist/protocol/errors.d.ts.map +1 -1
  18. package/dist/protocol/errors.js +0 -8
  19. package/dist/protocol/errors.js.map +1 -1
  20. package/dist/protocol/version.d.ts +1 -1
  21. package/dist/protocol/version.js +1 -1
  22. package/dist/templates.d.ts +0 -1
  23. package/dist/templates.d.ts.map +1 -1
  24. package/dist/templates.js +1 -2
  25. package/dist/templates.js.map +1 -1
  26. package/docs/compatibility.md +11 -0
  27. package/docs/enrollment.md +6 -9
  28. package/docs/releases/1.1.0.md +19 -0
  29. package/docs/releases/1.2.0.md +20 -0
  30. package/docs/releasing.md +13 -23
  31. package/package.json +1 -2
  32. package/src/conformance/adapter.ts +822 -640
  33. package/src/conformance/index.ts +24 -75
  34. package/src/protocol/contract.ts +2 -2
  35. package/src/protocol/errors.ts +0 -17
  36. package/src/protocol/version.ts +2 -2
  37. package/src/templates.ts +1 -3
  38. package/docs/release-records.json +0 -261
@@ -465,7 +465,7 @@ const CREATE_CUBE_INITIAL: CreateCubeRequest = {
465
465
  name: 'Repository One',
466
466
  working_repo_name: 'repository-one',
467
467
  repository: { kind: 'origin', value: 'https://github.com/Byte-Ventures/repository-one' },
468
- template: 'default',
468
+ template: 'software-dev',
469
469
  };
470
470
 
471
471
  export interface CubeTemplateAcceptanceConformanceVector {
@@ -474,13 +474,13 @@ export interface CubeTemplateAcceptanceConformanceVector {
474
474
  accepts: boolean;
475
475
  }
476
476
 
477
- /** Protocol v6's complete closed acceptance set for cube-creation templates. */
477
+ /** Protocol v13's complete closed acceptance set for cube-creation templates. */
478
478
  export const CUBE_TEMPLATE_ACCEPTANCE_CONFORMANCE:
479
479
  readonly CubeTemplateAcceptanceConformanceVector[] = [
480
- { name: 'accepts the legacy default template', template: 'default', accepts: true },
481
480
  { name: 'accepts the software-development template', template: 'software-dev', accepts: true },
482
481
  { name: 'accepts the starter template', template: 'starter', accepts: true },
483
482
  { name: 'accepts the local-model template', template: 'local-model', accepts: true },
483
+ { name: 'rejects the removed default template', template: 'default', accepts: false },
484
484
  { name: 'rejects an unknown template name', template: 'custom', accepts: false },
485
485
  { name: 'rejects a non-string template', template: null, accepts: false },
486
486
  ];
@@ -508,7 +508,7 @@ export const CREATE_CUBE_RETRY_CONFORMANCE: readonly CreateCubeRetryConformanceV
508
508
  {
509
509
  name: 'template mismatch is rejected',
510
510
  initial: CREATE_CUBE_INITIAL,
511
- retry: { ...CREATE_CUBE_INITIAL, template: 'software-dev' },
511
+ retry: { ...CREATE_CUBE_INITIAL, template: 'starter' },
512
512
  expected: { outcome: 'retry_tuple_mismatch', status: 409, error: 'INVALID_INPUT' },
513
513
  },
514
514
  {
@@ -536,17 +536,8 @@ export interface CreateCubeAssociationConformanceVector {
536
536
  created: CreateCubeRequest;
537
537
  request: CreateCubeRequest;
538
538
  expected:
539
- | { outcome: 'resolved'; authority_state_delta: Record<string, never> }
540
- | {
541
- outcome: 'created';
542
- authority_state_delta: {
543
- cubes: 1;
544
- roles: 2;
545
- grants: 1;
546
- cube_create_bindings: 1;
547
- repository_associations: 1;
548
- };
549
- };
539
+ | { outcome: 'resolved' }
540
+ | { outcome: 'created' };
550
541
  }
551
542
 
552
543
  /** A creator-scoped repository association resolves independently of operation retry keys. */
@@ -562,7 +553,7 @@ readonly CreateCubeAssociationConformanceVector[] = [
562
553
  working_repo_name: 'ignored-new-display',
563
554
  template: 'starter',
564
555
  },
565
- expected: { outcome: 'resolved', authority_state_delta: {} },
556
+ expected: { outcome: 'resolved' },
566
557
  },
567
558
  {
568
559
  name: 'fresh retry for a different repository may create',
@@ -574,16 +565,7 @@ readonly CreateCubeAssociationConformanceVector[] = [
574
565
  working_repo_name: 'repository-two',
575
566
  repository: { kind: 'origin', value: 'https://github.com/Byte-Ventures/repository-two' },
576
567
  },
577
- expected: {
578
- outcome: 'created',
579
- authority_state_delta: {
580
- cubes: 1,
581
- roles: 2,
582
- grants: 1,
583
- cube_create_bindings: 1,
584
- repository_associations: 1,
585
- },
586
- },
568
+ expected: { outcome: 'created' },
587
569
  },
588
570
  ];
589
571
 
@@ -595,12 +577,11 @@ export interface DeleteCubeConformanceVector {
595
577
  error?: 'ACCESS_DENIED' | 'NOT_FOUND' | 'CUBE_DELETED';
596
578
  response?: { deleted: true };
597
579
  terminal_sse?: { event: 'error'; error: 'CUBE_DELETED'; closes_after_event: true };
598
- durable_after_restart?: true;
599
580
  mutation: 'cascade' | 'none';
600
581
  };
601
582
  }
602
583
 
603
- /** Cube deletion is manage-gated, cascading, terminal, and durable across authority restart. */
584
+ /** Cube deletion is manage-gated and protocol-terminal for every formerly authorized caller. */
604
585
  export const DELETE_CUBE_CONFORMANCE: readonly DeleteCubeConformanceVector[] = [
605
586
  {
606
587
  name: 'non-member managing parent deletes the cube atomically',
@@ -627,16 +608,6 @@ export const DELETE_CUBE_CONFORMANCE: readonly DeleteCubeConformanceVector[] = [
627
608
  mutation: 'none',
628
609
  },
629
610
  },
630
- {
631
- name: 'former authorized credentials retain the typed terminal state after restart',
632
- request: {},
633
- expected: {
634
- status: 410,
635
- error: 'CUBE_DELETED',
636
- durable_after_restart: true,
637
- mutation: 'none',
638
- },
639
- },
640
611
  ];
641
612
 
642
613
  export interface ResolveRepositoryCubeConformanceVector {
@@ -644,8 +615,8 @@ export interface ResolveRepositoryCubeConformanceVector {
644
615
  request: ResolveRepositoryCubeRequest;
645
616
  associated: boolean;
646
617
  expected:
647
- | { outcome: 'none'; status: 200; authority_state_delta: Record<string, never> }
648
- | { outcome: 'resolved'; status: 200; authority_state_delta: Record<string, never> };
618
+ | { outcome: 'none'; status: 200 }
619
+ | { outcome: 'resolved'; status: 200 };
649
620
  }
650
621
 
651
622
  const REPOSITORY_CUBE_ONE = '00000000-0000-4000-8000-000000000131';
@@ -665,13 +636,13 @@ readonly ResolveRepositoryCubeConformanceVector[] = [
665
636
  name: 'unassociated repository resolves explicit none without mutation',
666
637
  request: REPOSITORY_ONE,
667
638
  associated: false,
668
- expected: { outcome: 'none', status: 200, authority_state_delta: {} },
639
+ expected: { outcome: 'none', status: 200 },
669
640
  },
670
641
  {
671
642
  name: 'associated repository resolves authoritative stored fields without mutation',
672
643
  request: { ...REPOSITORY_ONE, working_repo_name: 'ignored-new-display' },
673
644
  associated: true,
674
- expected: { outcome: 'resolved', status: 200, authority_state_delta: {} },
645
+ expected: { outcome: 'resolved', status: 200 },
675
646
  },
676
647
  ];
677
648
 
@@ -683,15 +654,12 @@ export interface AssociateRepositoryCubeConformanceVector {
683
654
  | {
684
655
  outcome: 'resolved';
685
656
  status: 200;
686
- initial_authority_state_delta: { repository_associations: 1 };
687
- retry_authority_state_delta: Record<string, never>;
688
657
  }
689
658
  | {
690
- outcome: 'repository_conflict' | 'cube_conflict';
659
+ outcome: 'repository_conflict';
691
660
  status: 409;
692
- error: 'REPOSITORY_ALREADY_ASSOCIATED' | 'CUBE_ALREADY_ASSOCIATED';
661
+ error: 'REPOSITORY_ALREADY_ASSOCIATED';
693
662
  diagnostic_disclosure: 'none';
694
- retry_authority_state_delta: Record<string, never>;
695
663
  };
696
664
  }
697
665
 
@@ -705,8 +673,6 @@ readonly AssociateRepositoryCubeConformanceVector[] = [
705
673
  expected: {
706
674
  outcome: 'resolved',
707
675
  status: 200,
708
- initial_authority_state_delta: { repository_associations: 1 },
709
- retry_authority_state_delta: {},
710
676
  },
711
677
  },
712
678
  {
@@ -718,19 +684,15 @@ readonly AssociateRepositoryCubeConformanceVector[] = [
718
684
  status: 409,
719
685
  error: 'REPOSITORY_ALREADY_ASSOCIATED',
720
686
  diagnostic_disclosure: 'none',
721
- retry_authority_state_delta: {},
722
687
  },
723
688
  },
724
689
  {
725
- name: 'cube already bound to another repository conflicts without mutation',
690
+ name: 'a second repository may associate with the same explicit cube',
726
691
  initial: { cube_id: REPOSITORY_CUBE_ONE, ...REPOSITORY_ONE },
727
692
  retry: { cube_id: REPOSITORY_CUBE_ONE, ...REPOSITORY_TWO },
728
693
  expected: {
729
- outcome: 'cube_conflict',
730
- status: 409,
731
- error: 'CUBE_ALREADY_ASSOCIATED',
732
- diagnostic_disclosure: 'none',
733
- retry_authority_state_delta: {},
694
+ outcome: 'resolved',
695
+ status: 200,
734
696
  },
735
697
  },
736
698
  ];
@@ -739,19 +701,18 @@ export const REPOSITORY_CUBE_PERMISSION_CONFORMANCE = [
739
701
  {
740
702
  name: 'association denies an inaccessible explicit cube without mutation',
741
703
  request: { cube_id: REPOSITORY_CUBE_ONE, ...REPOSITORY_ONE },
742
- expected: { status: 403, error: 'ACCESS_DENIED', authority_state_delta: {} },
704
+ expected: { status: 403, error: 'ACCESS_DENIED' },
743
705
  },
744
706
  {
745
707
  name: 'same-client binding to an inaccessible cube is non-enumerating',
746
708
  request: { cube_id: REPOSITORY_CUBE_ONE, ...REPOSITORY_ONE },
747
709
  precondition: 'repository_bound_to_inaccessible_cube',
748
710
  expected: {
749
- resolve: { status: 200, outcome: 'none', authority_state_delta: {} },
711
+ resolve: { status: 200, outcome: 'none' },
750
712
  associate: {
751
713
  status: 403,
752
714
  error: 'ACCESS_DENIED',
753
715
  diagnostic_disclosure: 'none',
754
- authority_state_delta: {},
755
716
  },
756
717
  },
757
718
  },
@@ -760,11 +721,10 @@ export const REPOSITORY_CUBE_PERMISSION_CONFORMANCE = [
760
721
  request: { cube_id: REPOSITORY_CUBE_ONE, ...REPOSITORY_ONE },
761
722
  precondition: 'repository_bound_by_another_client',
762
723
  expected: {
763
- resolve: { status: 200, outcome: 'none', authority_state_delta: {} },
724
+ resolve: { status: 200, outcome: 'none' },
764
725
  associate: {
765
726
  status: 200,
766
727
  outcome: 'resolved',
767
- authority_state_delta: { repository_associations: 1 },
768
728
  },
769
729
  },
770
730
  },
@@ -778,29 +738,26 @@ export const REPOSITORY_CUBE_AUTHORITATIVE_STATE_CONFORMANCE = [
778
738
  status: 409,
779
739
  error: 'INVALID_INPUT',
780
740
  diagnostic_disclosure: 'none',
781
- authority_state_delta: {},
782
741
  },
783
742
  },
784
743
  ] as const;
785
744
 
786
745
  export const ENROLLMENT_AUTHORITY_CONFORMANCE = [
787
746
  {
788
- name: 'ordinary enrollment creates no authority or cube state',
747
+ name: 'ordinary enrollment returns no server capability',
789
748
  response: {
790
749
  purpose: 'client',
791
750
  client_id: '00000000-0000-4000-8000-000000000111',
792
751
  server_capabilities: [],
793
752
  },
794
- expected_state_delta: { cubes: 0, roles: 0, grants: 0, server_capabilities: 0 },
795
753
  },
796
754
  {
797
- name: 'owner enrollment grants create-cube authority without cube state',
755
+ name: 'owner enrollment returns create-cube authority',
798
756
  response: {
799
757
  purpose: 'owner',
800
758
  client_id: '00000000-0000-4000-8000-000000000111',
801
759
  server_capabilities: ['create_cube'],
802
760
  },
803
- expected_state_delta: { cubes: 0, roles: 0, grants: 0, server_capabilities: 1 },
804
761
  },
805
762
  ] as const;
806
763
 
@@ -922,7 +879,6 @@ export interface RoleDeleteConformanceVector {
922
879
  status: 200;
923
880
  response: { deleted: true };
924
881
  mutation: 'delete-role';
925
- evicted_drone_retarget?: 'default-role';
926
882
  activity_log_attribution?: 'preserved';
927
883
  }
928
884
  | {
@@ -942,13 +898,12 @@ export const ROLE_DELETE_CONFORMANCE: readonly RoleDeleteConformanceVector[] = [
942
898
  expected: { status: 200, response: { deleted: true }, mutation: 'delete-role' },
943
899
  },
944
900
  {
945
- name: 'retargets evicted drones without losing existing log attribution',
901
+ name: 'deletes an evicted drone role without losing existing log attribution',
946
902
  fixture: 'evicted-drone',
947
903
  expected: {
948
904
  status: 200,
949
905
  response: { deleted: true },
950
906
  mutation: 'delete-role',
951
- evicted_drone_retarget: 'default-role',
952
907
  activity_log_attribution: 'preserved',
953
908
  },
954
909
  },
@@ -992,7 +947,6 @@ export interface RoleRationaleConformanceVector {
992
947
  | 'unknown-role'
993
948
  | 'inaccessible-role'
994
949
  | 'unknown-section'
995
- | 'ambiguous-role-name'
996
950
  | 'invalid-selector';
997
951
  expected:
998
952
  | { status: 200; canonical_heading: true; exact_body: true; mutation: 'none' }
@@ -1027,11 +981,6 @@ export const ROLE_RATIONALE_CONFORMANCE: readonly RoleRationaleConformanceVector
1027
981
  fixture: 'unknown-section',
1028
982
  expected: { status: 404, error: 'ROLE_SECTION_NOT_FOUND', mutation: 'none' },
1029
983
  },
1030
- {
1031
- name: 'rejects a role name with multiple case-insensitive matches',
1032
- fixture: 'ambiguous-role-name',
1033
- expected: { status: 400, error: 'INVALID_INPUT', mutation: 'none' },
1034
- },
1035
984
  {
1036
985
  name: 'rejects malformed or ambiguous selectors',
1037
986
  fixture: 'invalid-selector',
@@ -13,7 +13,7 @@ import type {
13
13
  } from './types.js';
14
14
 
15
15
  export const SHARED_PACKAGE_NAME = 'borgmcp-shared' as const;
16
- export const SHARED_PACKAGE_VERSION = '1.0.1' as const;
16
+ export const SHARED_PACKAGE_VERSION = '1.2.0' as const;
17
17
  /** Maximum UTF-8 payload for each newly recorded decision text field. */
18
18
  export const DECISION_TEXT_MAX_BYTES = 512 as const;
19
19
  /** Maximum UTF-8 size of role detailed-description text and any returned section slice. */
@@ -192,7 +192,7 @@ export type EnrollmentExchangeResponse =
192
192
  | ClientEnrollmentExchangeResponse
193
193
  | OwnerEnrollmentExchangeResponse;
194
194
 
195
- export const CUBE_TEMPLATES = ['default', 'software-dev', 'starter', 'local-model'] as const;
195
+ export const CUBE_TEMPLATES = ['software-dev', 'starter', 'local-model'] as const;
196
196
  export type CubeTemplate = (typeof CUBE_TEMPLATES)[number];
197
197
 
198
198
  export type CreateCubeRepository =
@@ -2,15 +2,10 @@
2
2
  export enum ErrorCode {
3
3
  AUTH_MISSING = 'AUTH_MISSING',
4
4
  AUTH_INVALID = 'AUTH_INVALID',
5
- SUBSCRIPTION_REQUIRED = 'SUBSCRIPTION_REQUIRED',
6
5
  ACCESS_DENIED = 'ACCESS_DENIED',
7
6
  INVALID_INPUT = 'INVALID_INPUT',
8
- MISSING_PARAMETER = 'MISSING_PARAMETER',
9
7
  CONTENT_TOO_LARGE = 'CONTENT_TOO_LARGE',
10
- RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',
11
8
  INTERNAL_ERROR = 'INTERNAL_ERROR',
12
- DATABASE_ERROR = 'DATABASE_ERROR',
13
- EXTERNAL_SERVICE_ERROR = 'EXTERNAL_SERVICE_ERROR',
14
9
  NOT_FOUND = 'NOT_FOUND',
15
10
  REPOSITORY_ALREADY_ASSOCIATED = 'REPOSITORY_ALREADY_ASSOCIATED',
16
11
  CUBE_ALREADY_ASSOCIATED = 'CUBE_ALREADY_ASSOCIATED',
@@ -21,7 +16,6 @@ export enum ErrorCode {
21
16
  ROLE_REQUIRED = 'ROLE_REQUIRED',
22
17
  ROLE_NOT_FOUND = 'ROLE_NOT_FOUND',
23
18
  ROLE_SECTION_NOT_FOUND = 'ROLE_SECTION_NOT_FOUND',
24
- ROLE_HAS_FROZEN_DRONES = 'ROLE_HAS_FROZEN_DRONES',
25
19
  DOCUMENT_NOT_FOUND = 'DOCUMENT_NOT_FOUND',
26
20
  DOCUMENT_CONTENT_TYPE_UNSUPPORTED = 'DOCUMENT_CONTENT_TYPE_UNSUPPORTED',
27
21
  DOCUMENT_BUDGET_EXCEEDED = 'DOCUMENT_BUDGET_EXCEEDED',
@@ -29,9 +23,7 @@ export enum ErrorCode {
29
23
  DOCUMENT_REMOVE_DENIED = 'DOCUMENT_REMOVE_DENIED',
30
24
  CUBE_DELETED = 'CUBE_DELETED',
31
25
  DRONE_EVICTED = 'DRONE_EVICTED',
32
- DRONE_FROZEN = 'DRONE_FROZEN',
33
26
  UNSUPPORTED_PROTOCOL_VERSION = 'UNSUPPORTED_PROTOCOL_VERSION',
34
- CURSOR_INVALID = 'CURSOR_INVALID',
35
27
  CURSOR_EXPIRED = 'CURSOR_EXPIRED',
36
28
  SESSION_REVOKED = 'SESSION_REVOKED',
37
29
  /**
@@ -42,12 +34,3 @@ export enum ErrorCode {
42
34
  */
43
35
  SESSION_REJECTED = 'SESSION_REJECTED',
44
36
  }
45
-
46
- /** @deprecated Wire failures use the versioned ProtocolErrorEnvelope. */
47
- export interface ErrorResponse {
48
- code: ErrorCode;
49
- message: string;
50
- details?: string;
51
- /** Number of seconds a rate-limited caller should wait. */
52
- retryAfter?: number;
53
- }
@@ -1,4 +1,4 @@
1
- /** Current Borg coordination protocol generation. Clean-slate v12. */
2
- export const PROTOCOL_VERSION = '12' as const;
1
+ /** Current Borg coordination protocol generation. Clean-slate v13. */
2
+ export const PROTOCOL_VERSION = '13' as const;
3
3
 
4
4
  export type ProtocolVersion = typeof PROTOCOL_VERSION;
package/src/templates.ts CHANGED
@@ -36,8 +36,6 @@ export interface Template {
36
36
  message_taxonomy?: MessageTaxonomy;
37
37
  }
38
38
 
39
- export const LEGACY_DEFAULT_TEMPLATE_LABEL = 'Default (legacy)';
40
-
41
39
  export const NEW_CUBE_TEMPLATE_PRESENTATIONS = [
42
40
  {
43
41
  name: 'software-dev',
@@ -790,7 +788,7 @@ export const TEMPLATES: Record<string, Template> = {
790
788
  };
791
789
 
792
790
  export function getTemplate(name: string): Template | null {
793
- return TEMPLATES[name] ?? null;
791
+ return Object.hasOwn(TEMPLATES, name) ? TEMPLATES[name] : null;
794
792
  }
795
793
 
796
794
  export function listTemplateNames(): string[] {
@@ -1,261 +0,0 @@
1
- [
2
- {
3
- "outcome": "published",
4
- "version": "0.6.3",
5
- "tag": "v0.6.3",
6
- "tag_object": "fd6aa8858e6565ad49a69144736e8fe12a8295bb",
7
- "commit": "f9d79866e1f7fe0f9ea31099bce1b36af9388ecc",
8
- "tree": "2fd38cc7b1a0332e987cb95881c2ca8ffe2a28e3",
9
- "workflow_run_id": 30096375533,
10
- "workflow_run_attempt": 1,
11
- "workflow_conclusion": "success",
12
- "verify_job_id": null,
13
- "publish_job_id": null,
14
- "artifact_integrity": "sha512-9osP68zH3a2IbyZr4BHiiz9SF+F4kqqxkwUQiun0GXUzu8Vw/+JorCG8OnyRFm8KpXNZ2Yh3KQxqcRD583l1NA==",
15
- "reconstructed": true
16
- },
17
- {
18
- "outcome": "published",
19
- "version": "0.6.4",
20
- "tag": "v0.6.4",
21
- "tag_object": "f79b0683686d3c359023a17f6e8a92efd888104a",
22
- "commit": "fa8a2dc072d4ffe2a16d5f02576fead822a2f72e",
23
- "tree": "2efa6d9553ca7f80c5c477ca39cf35bef55ad01c",
24
- "workflow_run_id": 30169732628,
25
- "workflow_run_attempt": 1,
26
- "workflow_conclusion": "success",
27
- "verify_job_id": null,
28
- "publish_job_id": null,
29
- "artifact_integrity": "sha512-Wm4b0uoOAw9JCz5OTHD0Q2uXKkeWYdkVksdeZvRG8l62XGMY+G8GkNEsZT9L533LbVbQ29GhgF0htjDenQThDg==",
30
- "reconstructed": true
31
- },
32
- {
33
- "outcome": "published",
34
- "version": "0.7.0",
35
- "tag": "v0.7.0",
36
- "tag_object": "5ddaf5821c49ac0893fdffbac6115b48d0795281",
37
- "commit": "30af2629052014feba3f3ebf4d9eb29e977e38a7",
38
- "tree": "da7b7d67f2d00403d3536923897bd52b73a479db",
39
- "workflow_run_id": 30337670996,
40
- "workflow_run_attempt": 1,
41
- "workflow_conclusion": "success",
42
- "verify_job_id": null,
43
- "publish_job_id": null,
44
- "artifact_integrity": "sha512-CLpQo3P/fE9GzC/R7Xw61LWxxsgcVLwmpGb5Ot5PDRe1Bvnf+EB31kiBdU5rvyvvPhiK4oUQtJAZE4ULFRAA2A==",
45
- "reconstructed": true
46
- },
47
- {
48
- "outcome": "published",
49
- "version": "0.7.1",
50
- "tag": "v0.7.1",
51
- "tag_object": "672423566ed75cf7704775cb480a75767e7c6851",
52
- "commit": "f4870596ba79702f2e4eb3a6620802d5e538052d",
53
- "tree": "ed3117008afede794a71620b6dfb4430ee4123a2",
54
- "workflow_run_id": 30625736845,
55
- "workflow_run_attempt": 1,
56
- "workflow_conclusion": "success",
57
- "verify_job_id": null,
58
- "publish_job_id": null,
59
- "artifact_integrity": "sha512-d4GE7ezGyoFN0uwA62gvRPUMfMdJ1kxhTunqU8dW3Qhy1n2SlNXZWr1Nthm6Goo0bAgvax8KEywyReodA6FyQA=="
60
- },
61
- {
62
- "outcome": "published",
63
- "version": "0.8.0",
64
- "tag": "v0.8.0",
65
- "tag_object": "b43710281df47f9a6f3d1dafd8ef6b2b527e718d",
66
- "commit": "24d260cd882b306b48c5c9397b6c3eb21b8b4990",
67
- "tree": "3067a71b57ec96041269282ce3d71f38ec624cc5",
68
- "workflow_run_id": 30720286941,
69
- "workflow_run_attempt": 1,
70
- "workflow_conclusion": "success",
71
- "verify_job_id": null,
72
- "publish_job_id": null,
73
- "artifact_integrity": "sha512-0p/ZC03Y6G4N6bfBjMD5b+WcQXcLalhU/3QqGjSWYCFKa3q2/183O53w6Tu6y8h2DkhTw5prnamsOozmVpXZew==",
74
- "reconstructed": true
75
- },
76
- {
77
- "outcome": "published",
78
- "version": "0.8.1",
79
- "tag": "v0.8.1",
80
- "tag_object": "cc690f6d41aa34b3f2884db500bc9979ab2de1db",
81
- "commit": "d29c5cf9285dc62b01258b640102f8cf21a9ec21",
82
- "tree": "b2134c0e54041554e87bf4b4d044e3f476cb1f2b",
83
- "workflow_run_id": 30853413999,
84
- "workflow_run_attempt": 1,
85
- "workflow_conclusion": "success",
86
- "verify_job_id": null,
87
- "publish_job_id": null,
88
- "artifact_integrity": "sha512-0+UfSDnAO0mWYIqxzzppekatya1gCF9ntZmuk7VVr2Hnf9QeM1S7uPLP/TWwDSTLtczB4EUoKA71E1WZJH2mbg==",
89
- "reconstructed": true
90
- },
91
- {
92
- "outcome": "published",
93
- "version": "0.9.0",
94
- "tag": "v0.9.0",
95
- "tag_object": "4e9a1d2d62494efc0e4d9e3f3d7e1f142dac12c7",
96
- "commit": "f57c9d9fffb8875830f65f12104c661b1e66fba6",
97
- "tree": "b8e1825accee5bb619fca00e60a080f4ca973990",
98
- "workflow_run_id": 30924764414,
99
- "workflow_run_attempt": 1,
100
- "workflow_conclusion": "success",
101
- "verify_job_id": null,
102
- "publish_job_id": null,
103
- "artifact_integrity": "sha512-bfZPP9JGgBQrCFoZetabqKHc8HLaUqHVR3GJLb/1F1oon7z/B4el4aeBHVvXlxN9+2G7kU/ymPZ/K25nVQapmQ=="
104
- },
105
- {
106
- "outcome": "published",
107
- "version": "0.10.0",
108
- "tag": "v0.10.0",
109
- "tag_object": "1a7639f5c26082ecbe562a4e48d2a10a7aa632b1",
110
- "commit": "8e5bd088b8069951a687156c35cf68d44985ddc1",
111
- "tree": "1eda6cf7f378c2fcdf50510ec3b64acd968fff6e",
112
- "workflow_run_id": 31255563527,
113
- "workflow_run_attempt": 1,
114
- "workflow_conclusion": "success",
115
- "verify_job_id": null,
116
- "publish_job_id": null,
117
- "artifact_integrity": "sha512-NYZJi6z0g/Txb6ge+5NgRPNRszVEi0eNmICxkoZq5bGkJWm5qEvNSt3ws90Xz8IOKuWcyHC9i6sAK6cbZxwYDw=="
118
- },
119
- {
120
- "outcome": "published",
121
- "version": "0.10.1",
122
- "tag": "v0.10.1",
123
- "tag_object": "7fbf92b057988c6893ad4ff2af13dfa7bc50c131",
124
- "commit": "691c9498c6248363a6f7d056178321443d12cf43",
125
- "tree": "331d100770eb2d23f6e06d56a595141a6a9c1749",
126
- "workflow_run_id": 31265832036,
127
- "workflow_run_attempt": 1,
128
- "workflow_conclusion": "success",
129
- "verify_job_id": null,
130
- "publish_job_id": null,
131
- "artifact_integrity": "sha512-IAESc6+VpUGECNabFkO60agvga0B8Fx0hk2RMUkSDCnlIjMvDodMFKlqw+TOzdXtjf0Uk9LJi9ZCU4HfRYRRhw=="
132
- },
133
- {
134
- "outcome": "published",
135
- "version": "0.11.0",
136
- "tag": "v0.11.0",
137
- "tag_object": "9086deca3f3d05b4702a415c6d50b19c54bcc7f2",
138
- "commit": "c1df96a858ff7c587d42508d388aa517a0b8545c",
139
- "tree": "84a5599afba05d9630e0e41beb401f700d83cd68",
140
- "workflow_run_id": 31531549256,
141
- "workflow_run_attempt": 1,
142
- "workflow_conclusion": "success",
143
- "verify_job_id": null,
144
- "publish_job_id": null,
145
- "artifact_integrity": "sha512-I8mixCbSrLKyOAAyqEI/HZJ8cML2rz3r812Up8pr547OdAk9LxZevdCo7ojG42ZwrUmS5u7iKQPg7Vk1XvtX1g=="
146
- },
147
- {
148
- "outcome": "published",
149
- "version": "0.12.0",
150
- "tag": "v0.12.0",
151
- "tag_object": "472253fc4a6831c7d6261f89010575d942a87367",
152
- "commit": "05cf130baf7698ebc8fdda600d684402bc4e3635",
153
- "tree": "79fcf641d8ec441f78bcaebd2a36e9b2c151037f",
154
- "workflow_run_id": 31717612793,
155
- "workflow_run_attempt": 1,
156
- "workflow_conclusion": "success",
157
- "verify_job_id": null,
158
- "publish_job_id": null,
159
- "artifact_integrity": "sha512-kUYhiQCw6xd1cwfrRK+zLIAuMIn8LjqavUymvE37BwEnzR3GbMs+2awoEVzBETZ5APSwsn94U1Lox9LW056X6w=="
160
- },
161
- {
162
- "outcome": "failed-superseded",
163
- "version": "0.12.1",
164
- "tag": "v0.12.1",
165
- "tag_object": "7645a7a1b69db347f5129615a86180a222d2bbc8",
166
- "commit": "4ee852e1f279d6f97aa8663e187a57aec5ff96ec",
167
- "tree": "7f93e4bbaabf160724e397285c1b59ae69c6f751",
168
- "workflow_run_id": 31731633686,
169
- "workflow_run_attempt": 1,
170
- "workflow_conclusion": "failure",
171
- "verify_job_id": 94553258088,
172
- "publish_job_id": 94553258088,
173
- "artifact_integrity": null
174
- },
175
- {
176
- "outcome": "published",
177
- "version": "0.12.2",
178
- "tag": "v0.12.2",
179
- "tag_object": "9366da7a529f703020e6b4baac2ce2088c706cdc",
180
- "commit": "149b3721c8702f63ecf025bc21c6acd9e2480ff8",
181
- "tree": "f4db835093cf5554a1414acad262e0bc227c09b0",
182
- "workflow_run_id": 31741935953,
183
- "workflow_run_attempt": 1,
184
- "workflow_conclusion": "success",
185
- "verify_job_id": null,
186
- "publish_job_id": null,
187
- "artifact_integrity": "sha512-l459XEeqk0cSz1+Z8yk8cCVWik4/CX4OBTRZqj6n1SZYvDpzWJksUz82FA9k4taf//rs43Tfl1tpWXnRHAqxOQ=="
188
- },
189
- {
190
- "outcome": "published",
191
- "version": "0.12.3",
192
- "tag": "v0.12.3",
193
- "tag_object": "e410256092974dcef9619415ebdf74acde3e4484",
194
- "commit": "9bfa43ced2af772d7a60f7be7828baaa146b4fd4",
195
- "tree": "7605783c749615e13d9eb541c498856833ab690c",
196
- "workflow_run_id": 31779837930,
197
- "workflow_run_attempt": 1,
198
- "workflow_conclusion": "success",
199
- "verify_job_id": null,
200
- "publish_job_id": null,
201
- "artifact_integrity": "sha512-3GPQ1U7tBxg8Jp1Uac31CKKXQjMv4UNPhs5P6N83CyDXGJvkI88yowVJZGlLuo30eEk6jhERZ9AQWOjHst/sFA==",
202
- "reconstructed": true
203
- },
204
- {
205
- "outcome": "published",
206
- "version": "0.13.0",
207
- "tag": "v0.13.0",
208
- "tag_object": "90022823ec91f4bc7964b2f1be1ef11c5f0e69dd",
209
- "commit": "e9b37697e4f265872d071d738740ee1eaded2ff9",
210
- "tree": "efc4603d44fde3121af7fff7cec4affa77405e44",
211
- "workflow_run_id": 31897497966,
212
- "workflow_run_attempt": 1,
213
- "workflow_conclusion": "success",
214
- "verify_job_id": null,
215
- "publish_job_id": null,
216
- "artifact_integrity": "sha512-6t25in3kpkVZTQqbeP65HgObU8GpOY3ewtY2SoaHDtIcJEtoe1LRwh3rguE6VqcqPWBUtmXdOaTMdtBErx5+oA==",
217
- "reconstructed": true
218
- },
219
- {
220
- "outcome": "published",
221
- "version": "0.13.1",
222
- "tag": "v0.13.1",
223
- "tag_object": "90bd5de306f0261369a49665f1fadd8ff4ca920a",
224
- "commit": "6a2f852e84161b0e1599bdd50ad18a5aea732643",
225
- "tree": "81ef75c03a5e54fe99fb78a30bcc5c97fdce5387",
226
- "workflow_run_id": 31943064299,
227
- "workflow_run_attempt": 1,
228
- "workflow_conclusion": "success",
229
- "verify_job_id": null,
230
- "publish_job_id": null,
231
- "artifact_integrity": "sha512-AT5xOpd99U1Xd2waRJs01i2fz9ApMzd+NXQh0WMwTUknSsHpaQaEtGjcxtEDZG6MbB6nWfhoWG1ZZm9Fdkoytg=="
232
- },
233
- {
234
- "outcome": "published",
235
- "version": "0.14.0",
236
- "tag": "v0.14.0",
237
- "tag_object": "4ecd4e54bbf5a3dd719855ccc4d6f9db3939800f",
238
- "commit": "a69926023d53268131e95b63efd141a17c634e2d",
239
- "tree": "9074b05b687178fadc6d7cb40e55d8e5cf9cf248",
240
- "workflow_run_id": 31957839605,
241
- "workflow_run_attempt": 1,
242
- "workflow_conclusion": "success",
243
- "verify_job_id": null,
244
- "publish_job_id": null,
245
- "artifact_integrity": "sha512-rKRMxnxTnW+o3WOqtAFoih9IeRKCZw/lltqz7CbjC1riNq52CsZ871o1Fo7Fdk0WqwuzdFQmRJ7qOzPi08Q/QA=="
246
- },
247
- {
248
- "outcome": "published",
249
- "version": "1.0.0",
250
- "tag": "v1.0.0",
251
- "tag_object": "dfb8d029278cd4c13f5507181edd7466bf187e11",
252
- "commit": "0196421f2cfeda6b495481f48f879a2dd6d720d2",
253
- "tree": "7a073275d77ca6876e025a67b6629f28ddd30c52",
254
- "workflow_run_id": 31968518032,
255
- "workflow_run_attempt": 1,
256
- "workflow_conclusion": "success",
257
- "verify_job_id": null,
258
- "publish_job_id": null,
259
- "artifact_integrity": "sha512-c55kxgfpo3GWXQB2pxy65CV4zjgoWRLZKidVfdR7/k8kKX9m5cqV7gUckUJ15BuvkIGrha5PFO7NAz5xPUXaeQ=="
260
- }
261
- ]