diff --git a/.quixos-subtree-source.json b/.quixos-subtree-source.json index 88e9ada..2ad7ed6 100644 --- a/.quixos-subtree-source.json +++ b/.quixos-subtree-source.json @@ -1,7 +1,7 @@ { "version": 1, "sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git", - "sourceCommit": "ce0dd80f56df35bf3db1be01236a949a704cb4c2", + "sourceCommit": "4af89fa7c703d9fecf36b4e97b76658a503dd5aa", "sourcePath": "quixos-protocol", "exportName": "quixos-protocol", "mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git" diff --git a/README.md b/README.md index a4e31ad..bef74d9 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ their exact dependency ports. ## Tests ```sh -nix shell nixpkgs#protobuf -c npm test +nix develop -c yarn test ``` The suite covers parsing/diagnostics, source-order independence, ordinary call diff --git a/proto/camino/api.proto b/proto/camino/api.proto index c4678c0..089dbaa 100644 --- a/proto/camino/api.proto +++ b/proto/camino/api.proto @@ -35,6 +35,10 @@ message StateValueSource { string value_type_json = 3; string storage_policy_json = 4; uint64 revision = 5; + // CRDT-backed state is still read as its materialized Value. The snapshot + // travels with the writable source identity so a client can retain and + // advance a local replica without exposing the document to package code. + CrdtValue crdt_snapshot = 6; } message ValueSource { StateValueSource state = 1; } diff --git a/src/gen/camino/api_pb.ts b/src/gen/camino/api_pb.ts index e54baa7..8397fae 100644 --- a/src/gen/camino/api_pb.ts +++ b/src/gen/camino/api_pb.ts @@ -12,7 +12,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file camino/api.proto. */ export const file_camino_api: GenFile = /*@__PURE__*/ - fileDesc("ChBjYW1pbm8vYXBpLnByb3RvEgZjYW1pbm8iCwoJTnVsbFZhbHVlInwKC09iamVjdFZhbHVlEi8KBmZpZWxkcxgBIAMoCzIfLmNhbWluby5PYmplY3RWYWx1ZS5GaWVsZHNFbnRyeRo8CgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIioKCUxpc3RWYWx1ZRIdCgZ2YWx1ZXMYASADKAsyDS5jYW1pbm8uVmFsdWUiHQoIUmVmVmFsdWUSEQoJb2JqZWN0X2lkGAEgASgJIjwKCUNyZHRWYWx1ZRIMCgR0eXBlGAEgASgJEhAKCGVuY29kaW5nGAIgASgJEg8KB3BheWxvYWQYAyABKAwifgoQU3RhdGVWYWx1ZVNvdXJjZRIRCglvYmplY3RfaWQYASABKAkSDwoHc2xvdF9pZBgCIAEoCRIXCg92YWx1ZV90eXBlX2pzb24YAyABKAkSGwoTc3RvcmFnZV9wb2xpY3lfanNvbhgEIAEoCRIQCghyZXZpc2lvbhgFIAEoBCI2CgtWYWx1ZVNvdXJjZRInCgVzdGF0ZRgBIAEoCzIYLmNhbWluby5TdGF0ZVZhbHVlU291cmNlIvkCCgVWYWx1ZRInCgpudWxsX3ZhbHVlGAEgASgLMhEuY2FtaW5vLk51bGxWYWx1ZUgAEhQKCmJvb2xfdmFsdWUYAiABKAhIABIWCgxudW1iZXJfdmFsdWUYAyABKAFIABIWCgxzdHJpbmdfdmFsdWUYBCABKAlIABIXCg1pbnRlZ2VyX3ZhbHVlGAUgASgJSAASFQoLYnl0ZXNfdmFsdWUYBiABKAxIABIrCgxvYmplY3RfdmFsdWUYByABKAsyEy5jYW1pbm8uT2JqZWN0VmFsdWVIABInCgpsaXN0X3ZhbHVlGAggASgLMhEuY2FtaW5vLkxpc3RWYWx1ZUgAEiUKCXJlZl92YWx1ZRgJIAEoCzIQLmNhbWluby5SZWZWYWx1ZUgAEicKCmNyZHRfdmFsdWUYCiABKAsyES5jYW1pbm8uQ3JkdFZhbHVlSAASIwoGc291cmNlGAsgASgLMhMuY2FtaW5vLlZhbHVlU291cmNlQgYKBGtpbmQiRgodSW5zdGFsbFBlcnNpc3RlbmNlUGxhblJlcXVlc3QSJQoEcGxhbhgBIAEoCzIXLmNhbWluby5QZXJzaXN0ZW5jZVBsYW4iRwoeSW5zdGFsbFBlcnNpc3RlbmNlUGxhblJlc3BvbnNlEiUKBHBsYW4YASABKAsyFy5jYW1pbm8uUGVyc2lzdGVuY2VQbGFuIhsKGUdldFBlcnNpc3RlbmNlUGxhblJlcXVlc3QiQwoaR2V0UGVyc2lzdGVuY2VQbGFuUmVzcG9uc2USJQoEcGxhbhgBIAEoCzIXLmNhbWluby5QZXJzaXN0ZW5jZVBsYW4isAEKE0NyZWF0ZU9iamVjdFJlcXVlc3QSDwoHYXRvbV9pZBgBIAEoCRJECg1pbml0aWFsX3N0YXRlGAIgAygLMi0uY2FtaW5vLkNyZWF0ZU9iamVjdFJlcXVlc3QuSW5pdGlhbFN0YXRlRW50cnkaQgoRSW5pdGlhbFN0YXRlRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASI8ChRDcmVhdGVPYmplY3RSZXNwb25zZRIkCgZvYmplY3QYASABKAsyFC5jYW1pbm8uQ2FtaW5vT2JqZWN0IiUKEEdldE9iamVjdFJlcXVlc3QSEQoJb2JqZWN0X2lkGAEgASgJIjkKEUdldE9iamVjdFJlc3BvbnNlEiQKBm9iamVjdBgBIAEoCzIULmNhbWluby5DYW1pbm9PYmplY3QiJQoSTGlzdE9iamVjdHNSZXF1ZXN0Eg8KB2F0b21faWQYASABKAkiPAoTTGlzdE9iamVjdHNSZXNwb25zZRIlCgdvYmplY3RzGAEgAygLMhQuY2FtaW5vLkNhbWlub09iamVjdCI2ChBSZWFkU3RhdGVSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRIPCgdzbG90X2lkGAIgASgJIjEKEVJlYWRTdGF0ZVJlc3BvbnNlEhwKBXZhbHVlGAEgASgLMg0uY2FtaW5vLlZhbHVlInEKEVdyaXRlU3RhdGVSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRIPCgdzbG90X2lkGAIgASgJEhwKBXZhbHVlGAMgASgLMg0uY2FtaW5vLlZhbHVlEhoKEmNsaWVudF9tdXRhdGlvbl9pZBgEIAEoCSJYChJXcml0ZVN0YXRlUmVzcG9uc2USHAoFdmFsdWUYASABKAsyDS5jYW1pbm8uVmFsdWUSJAoGb2JqZWN0GAIgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdCLAAQoSQ29ubmVjdEVkZ2VSZXF1ZXN0EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJEhEKCW9iamVjdF9pZBgDIAEoCRIYChB0YXJnZXRfb2JqZWN0X2lkGAQgASgJEhQKB29yZGluYWwYBSABKAVIAIgBARIbCg50YXJnZXRfb3JkaW5hbBgGIAEoBUgBiAEBQgoKCF9vcmRpbmFsQhEKD190YXJnZXRfb3JkaW5hbCI3ChNDb25uZWN0RWRnZVJlc3BvbnNlEiAKBGVkZ2UYASABKAsyEi5jYW1pbm8uQ2FtaW5vRWRnZSJUChJSZXNvbHZlRWRnZVJlcXVlc3QSEQoJb2JqZWN0X2lkGAEgASgJEhQKDGVkZ2VfdHlwZV9pZBgCIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAMgASgJIjgKE1Jlc29sdmVFZGdlUmVzcG9uc2USIQoFZWRnZXMYASADKAsyEi5jYW1pbm8uQ2FtaW5vRWRnZSIoChVEaXNjb25uZWN0RWRnZVJlcXVlc3QSDwoHZWRnZV9pZBgBIAEoCSIpChZEaXNjb25uZWN0RWRnZVJlc3BvbnNlEg8KB2VkZ2VfaWQYASABKAkiIwoOTGlzdE9wc1JlcXVlc3QSEQoJb2JqZWN0X2lkGAEgASgJIjAKD0xpc3RPcHNSZXNwb25zZRIdCgNvcHMYASADKAsyEC5jYW1pbm8uQ2FtaW5vT3AiVgoSV2F0Y2hPYmplY3RSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRITCgthZnRlcl9vcF9pZBgCIAEoCRIYChBpbmNsdWRlX3NuYXBzaG90GAMgASgIImsKEFdhdGNoT2JqZWN0RXZlbnQSEQoJb2JqZWN0X2lkGAEgASgJEiYKCHNuYXBzaG90GAIgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdBIcCgJvcBgDIAEoCzIQLmNhbWluby5DYW1pbm9PcCLZAgoMQ2FtaW5vT2JqZWN0EgoKAmlkGAEgASgJEg8KB2F0b21faWQYAiABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAMgASgJEhIKCmNyZWF0ZWRfYXQYBCABKAkSEgoKdXBkYXRlZF9hdBgFIAEoCRIuCgVzdGF0ZRgGIAMoCzIfLmNhbWluby5DYW1pbm9PYmplY3QuU3RhdGVFbnRyeRJBCg9zdGF0ZV9yZXZpc2lvbnMYByADKAsyKC5jYW1pbm8uQ2FtaW5vT2JqZWN0LlN0YXRlUmV2aXNpb25zRW50cnkaOwoKU3RhdGVFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBGjUKE1N0YXRlUmV2aXNpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ASKOAgoKQ2FtaW5vRWRnZRIKCgJpZBgBIAEoCRIUCgxlZGdlX3R5cGVfaWQYAiABKAkSFwoPZmlyc3Rfb2JqZWN0X2lkGAMgASgJEhgKEHNlY29uZF9vYmplY3RfaWQYBCABKAkSGwoTZmlyc3RfcHJvamVjdGlvbl9pZBgFIAEoCRIcChRzZWNvbmRfcHJvamVjdGlvbl9pZBgGIAEoCRIaCg1maXJzdF9vcmRpbmFsGAcgASgFSACIAQESGwoOc2Vjb25kX29yZGluYWwYCCABKAVIAYgBARISCgpjcmVhdGVkX2F0GAkgASgJQhAKDl9maXJzdF9vcmRpbmFsQhEKD19zZWNvbmRfb3JkaW5hbCKZAQoIQ2FtaW5vT3ASCgoCaWQYASABKAkSEQoJb2JqZWN0X2lkGAIgASgJEg8KB29wX2tpbmQYAyABKAkSHgoHcGF5bG9hZBgEIAEoCzINLmNhbWluby5WYWx1ZRINCgVhY3RvchgFIAEoCRISCgpjcmVhdGVkX2F0GAYgASgJEhoKEmNsaWVudF9tdXRhdGlvbl9pZBgHIAEoCTKVBwoNQ2FtaW5vU2VydmljZRJnChZJbnN0YWxsUGVyc2lzdGVuY2VQbGFuEiUuY2FtaW5vLkluc3RhbGxQZXJzaXN0ZW5jZVBsYW5SZXF1ZXN0GiYuY2FtaW5vLkluc3RhbGxQZXJzaXN0ZW5jZVBsYW5SZXNwb25zZRJbChJHZXRQZXJzaXN0ZW5jZVBsYW4SIS5jYW1pbm8uR2V0UGVyc2lzdGVuY2VQbGFuUmVxdWVzdBoiLmNhbWluby5HZXRQZXJzaXN0ZW5jZVBsYW5SZXNwb25zZRJJCgxDcmVhdGVPYmplY3QSGy5jYW1pbm8uQ3JlYXRlT2JqZWN0UmVxdWVzdBocLmNhbWluby5DcmVhdGVPYmplY3RSZXNwb25zZRJACglHZXRPYmplY3QSGC5jYW1pbm8uR2V0T2JqZWN0UmVxdWVzdBoZLmNhbWluby5HZXRPYmplY3RSZXNwb25zZRJGCgtMaXN0T2JqZWN0cxIaLmNhbWluby5MaXN0T2JqZWN0c1JlcXVlc3QaGy5jYW1pbm8uTGlzdE9iamVjdHNSZXNwb25zZRJACglSZWFkU3RhdGUSGC5jYW1pbm8uUmVhZFN0YXRlUmVxdWVzdBoZLmNhbWluby5SZWFkU3RhdGVSZXNwb25zZRJDCgpXcml0ZVN0YXRlEhkuY2FtaW5vLldyaXRlU3RhdGVSZXF1ZXN0GhouY2FtaW5vLldyaXRlU3RhdGVSZXNwb25zZRJGCgtDb25uZWN0RWRnZRIaLmNhbWluby5Db25uZWN0RWRnZVJlcXVlc3QaGy5jYW1pbm8uQ29ubmVjdEVkZ2VSZXNwb25zZRJGCgtSZXNvbHZlRWRnZRIaLmNhbWluby5SZXNvbHZlRWRnZVJlcXVlc3QaGy5jYW1pbm8uUmVzb2x2ZUVkZ2VSZXNwb25zZRJPCg5EaXNjb25uZWN0RWRnZRIdLmNhbWluby5EaXNjb25uZWN0RWRnZVJlcXVlc3QaHi5jYW1pbm8uRGlzY29ubmVjdEVkZ2VSZXNwb25zZRI6CgdMaXN0T3BzEhYuY2FtaW5vLkxpc3RPcHNSZXF1ZXN0GhcuY2FtaW5vLkxpc3RPcHNSZXNwb25zZRJFCgtXYXRjaE9iamVjdBIaLmNhbWluby5XYXRjaE9iamVjdFJlcXVlc3QaGC5jYW1pbm8uV2F0Y2hPYmplY3RFdmVudDABYgZwcm90bzM", [file_camino_schema]); + fileDesc("ChBjYW1pbm8vYXBpLnByb3RvEgZjYW1pbm8iCwoJTnVsbFZhbHVlInwKC09iamVjdFZhbHVlEi8KBmZpZWxkcxgBIAMoCzIfLmNhbWluby5PYmplY3RWYWx1ZS5GaWVsZHNFbnRyeRo8CgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIioKCUxpc3RWYWx1ZRIdCgZ2YWx1ZXMYASADKAsyDS5jYW1pbm8uVmFsdWUiHQoIUmVmVmFsdWUSEQoJb2JqZWN0X2lkGAEgASgJIjwKCUNyZHRWYWx1ZRIMCgR0eXBlGAEgASgJEhAKCGVuY29kaW5nGAIgASgJEg8KB3BheWxvYWQYAyABKAwiqAEKEFN0YXRlVmFsdWVTb3VyY2USEQoJb2JqZWN0X2lkGAEgASgJEg8KB3Nsb3RfaWQYAiABKAkSFwoPdmFsdWVfdHlwZV9qc29uGAMgASgJEhsKE3N0b3JhZ2VfcG9saWN5X2pzb24YBCABKAkSEAoIcmV2aXNpb24YBSABKAQSKAoNY3JkdF9zbmFwc2hvdBgGIAEoCzIRLmNhbWluby5DcmR0VmFsdWUiNgoLVmFsdWVTb3VyY2USJwoFc3RhdGUYASABKAsyGC5jYW1pbm8uU3RhdGVWYWx1ZVNvdXJjZSL5AgoFVmFsdWUSJwoKbnVsbF92YWx1ZRgBIAEoCzIRLmNhbWluby5OdWxsVmFsdWVIABIUCgpib29sX3ZhbHVlGAIgASgISAASFgoMbnVtYmVyX3ZhbHVlGAMgASgBSAASFgoMc3RyaW5nX3ZhbHVlGAQgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgFIAEoCUgAEhUKC2J5dGVzX3ZhbHVlGAYgASgMSAASKwoMb2JqZWN0X3ZhbHVlGAcgASgLMhMuY2FtaW5vLk9iamVjdFZhbHVlSAASJwoKbGlzdF92YWx1ZRgIIAEoCzIRLmNhbWluby5MaXN0VmFsdWVIABIlCglyZWZfdmFsdWUYCSABKAsyEC5jYW1pbm8uUmVmVmFsdWVIABInCgpjcmR0X3ZhbHVlGAogASgLMhEuY2FtaW5vLkNyZHRWYWx1ZUgAEiMKBnNvdXJjZRgLIAEoCzITLmNhbWluby5WYWx1ZVNvdXJjZUIGCgRraW5kIkYKHUluc3RhbGxQZXJzaXN0ZW5jZVBsYW5SZXF1ZXN0EiUKBHBsYW4YASABKAsyFy5jYW1pbm8uUGVyc2lzdGVuY2VQbGFuIkcKHkluc3RhbGxQZXJzaXN0ZW5jZVBsYW5SZXNwb25zZRIlCgRwbGFuGAEgASgLMhcuY2FtaW5vLlBlcnNpc3RlbmNlUGxhbiIbChlHZXRQZXJzaXN0ZW5jZVBsYW5SZXF1ZXN0IkMKGkdldFBlcnNpc3RlbmNlUGxhblJlc3BvbnNlEiUKBHBsYW4YASABKAsyFy5jYW1pbm8uUGVyc2lzdGVuY2VQbGFuIrABChNDcmVhdGVPYmplY3RSZXF1ZXN0Eg8KB2F0b21faWQYASABKAkSRAoNaW5pdGlhbF9zdGF0ZRgCIAMoCzItLmNhbWluby5DcmVhdGVPYmplY3RSZXF1ZXN0LkluaXRpYWxTdGF0ZUVudHJ5GkIKEUluaXRpYWxTdGF0ZUVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEiPAoUQ3JlYXRlT2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdCIlChBHZXRPYmplY3RSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCSI5ChFHZXRPYmplY3RSZXNwb25zZRIkCgZvYmplY3QYASABKAsyFC5jYW1pbm8uQ2FtaW5vT2JqZWN0IiUKEkxpc3RPYmplY3RzUmVxdWVzdBIPCgdhdG9tX2lkGAEgASgJIjwKE0xpc3RPYmplY3RzUmVzcG9uc2USJQoHb2JqZWN0cxgBIAMoCzIULmNhbWluby5DYW1pbm9PYmplY3QiNgoQUmVhZFN0YXRlUmVxdWVzdBIRCglvYmplY3RfaWQYASABKAkSDwoHc2xvdF9pZBgCIAEoCSIxChFSZWFkU3RhdGVSZXNwb25zZRIcCgV2YWx1ZRgBIAEoCzINLmNhbWluby5WYWx1ZSJxChFXcml0ZVN0YXRlUmVxdWVzdBIRCglvYmplY3RfaWQYASABKAkSDwoHc2xvdF9pZBgCIAEoCRIcCgV2YWx1ZRgDIAEoCzINLmNhbWluby5WYWx1ZRIaChJjbGllbnRfbXV0YXRpb25faWQYBCABKAkiWAoSV3JpdGVTdGF0ZVJlc3BvbnNlEhwKBXZhbHVlGAEgASgLMg0uY2FtaW5vLlZhbHVlEiQKBm9iamVjdBgCIAEoCzIULmNhbWluby5DYW1pbm9PYmplY3QiwAEKEkNvbm5lY3RFZGdlUmVxdWVzdBIUCgxlZGdlX3R5cGVfaWQYASABKAkSFQoNcHJvamVjdGlvbl9pZBgCIAEoCRIRCglvYmplY3RfaWQYAyABKAkSGAoQdGFyZ2V0X29iamVjdF9pZBgEIAEoCRIUCgdvcmRpbmFsGAUgASgFSACIAQESGwoOdGFyZ2V0X29yZGluYWwYBiABKAVIAYgBAUIKCghfb3JkaW5hbEIRCg9fdGFyZ2V0X29yZGluYWwiNwoTQ29ubmVjdEVkZ2VSZXNwb25zZRIgCgRlZGdlGAEgASgLMhIuY2FtaW5vLkNhbWlub0VkZ2UiVAoSUmVzb2x2ZUVkZ2VSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRIUCgxlZGdlX3R5cGVfaWQYAiABKAkSFQoNcHJvamVjdGlvbl9pZBgDIAEoCSI4ChNSZXNvbHZlRWRnZVJlc3BvbnNlEiEKBWVkZ2VzGAEgAygLMhIuY2FtaW5vLkNhbWlub0VkZ2UiKAoVRGlzY29ubmVjdEVkZ2VSZXF1ZXN0Eg8KB2VkZ2VfaWQYASABKAkiKQoWRGlzY29ubmVjdEVkZ2VSZXNwb25zZRIPCgdlZGdlX2lkGAEgASgJIiMKDkxpc3RPcHNSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCSIwCg9MaXN0T3BzUmVzcG9uc2USHQoDb3BzGAEgAygLMhAuY2FtaW5vLkNhbWlub09wIlYKEldhdGNoT2JqZWN0UmVxdWVzdBIRCglvYmplY3RfaWQYASABKAkSEwoLYWZ0ZXJfb3BfaWQYAiABKAkSGAoQaW5jbHVkZV9zbmFwc2hvdBgDIAEoCCJrChBXYXRjaE9iamVjdEV2ZW50EhEKCW9iamVjdF9pZBgBIAEoCRImCghzbmFwc2hvdBgCIAEoCzIULmNhbWluby5DYW1pbm9PYmplY3QSHAoCb3AYAyABKAsyEC5jYW1pbm8uQ2FtaW5vT3Ai2QIKDENhbWlub09iamVjdBIKCgJpZBgBIAEoCRIPCgdhdG9tX2lkGAIgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgDIAEoCRISCgpjcmVhdGVkX2F0GAQgASgJEhIKCnVwZGF0ZWRfYXQYBSABKAkSLgoFc3RhdGUYBiADKAsyHy5jYW1pbm8uQ2FtaW5vT2JqZWN0LlN0YXRlRW50cnkSQQoPc3RhdGVfcmV2aXNpb25zGAcgAygLMiguY2FtaW5vLkNhbWlub09iamVjdC5TdGF0ZVJldmlzaW9uc0VudHJ5GjsKClN0YXRlRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ARo1ChNTdGF0ZVJldmlzaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEijgIKCkNhbWlub0VkZ2USCgoCaWQYASABKAkSFAoMZWRnZV90eXBlX2lkGAIgASgJEhcKD2ZpcnN0X29iamVjdF9pZBgDIAEoCRIYChBzZWNvbmRfb2JqZWN0X2lkGAQgASgJEhsKE2ZpcnN0X3Byb2plY3Rpb25faWQYBSABKAkSHAoUc2Vjb25kX3Byb2plY3Rpb25faWQYBiABKAkSGgoNZmlyc3Rfb3JkaW5hbBgHIAEoBUgAiAEBEhsKDnNlY29uZF9vcmRpbmFsGAggASgFSAGIAQESEgoKY3JlYXRlZF9hdBgJIAEoCUIQCg5fZmlyc3Rfb3JkaW5hbEIRCg9fc2Vjb25kX29yZGluYWwimQEKCENhbWlub09wEgoKAmlkGAEgASgJEhEKCW9iamVjdF9pZBgCIAEoCRIPCgdvcF9raW5kGAMgASgJEh4KB3BheWxvYWQYBCABKAsyDS5jYW1pbm8uVmFsdWUSDQoFYWN0b3IYBSABKAkSEgoKY3JlYXRlZF9hdBgGIAEoCRIaChJjbGllbnRfbXV0YXRpb25faWQYByABKAkylQcKDUNhbWlub1NlcnZpY2USZwoWSW5zdGFsbFBlcnNpc3RlbmNlUGxhbhIlLmNhbWluby5JbnN0YWxsUGVyc2lzdGVuY2VQbGFuUmVxdWVzdBomLmNhbWluby5JbnN0YWxsUGVyc2lzdGVuY2VQbGFuUmVzcG9uc2USWwoSR2V0UGVyc2lzdGVuY2VQbGFuEiEuY2FtaW5vLkdldFBlcnNpc3RlbmNlUGxhblJlcXVlc3QaIi5jYW1pbm8uR2V0UGVyc2lzdGVuY2VQbGFuUmVzcG9uc2USSQoMQ3JlYXRlT2JqZWN0EhsuY2FtaW5vLkNyZWF0ZU9iamVjdFJlcXVlc3QaHC5jYW1pbm8uQ3JlYXRlT2JqZWN0UmVzcG9uc2USQAoJR2V0T2JqZWN0EhguY2FtaW5vLkdldE9iamVjdFJlcXVlc3QaGS5jYW1pbm8uR2V0T2JqZWN0UmVzcG9uc2USRgoLTGlzdE9iamVjdHMSGi5jYW1pbm8uTGlzdE9iamVjdHNSZXF1ZXN0GhsuY2FtaW5vLkxpc3RPYmplY3RzUmVzcG9uc2USQAoJUmVhZFN0YXRlEhguY2FtaW5vLlJlYWRTdGF0ZVJlcXVlc3QaGS5jYW1pbm8uUmVhZFN0YXRlUmVzcG9uc2USQwoKV3JpdGVTdGF0ZRIZLmNhbWluby5Xcml0ZVN0YXRlUmVxdWVzdBoaLmNhbWluby5Xcml0ZVN0YXRlUmVzcG9uc2USRgoLQ29ubmVjdEVkZ2USGi5jYW1pbm8uQ29ubmVjdEVkZ2VSZXF1ZXN0GhsuY2FtaW5vLkNvbm5lY3RFZGdlUmVzcG9uc2USRgoLUmVzb2x2ZUVkZ2USGi5jYW1pbm8uUmVzb2x2ZUVkZ2VSZXF1ZXN0GhsuY2FtaW5vLlJlc29sdmVFZGdlUmVzcG9uc2USTwoORGlzY29ubmVjdEVkZ2USHS5jYW1pbm8uRGlzY29ubmVjdEVkZ2VSZXF1ZXN0Gh4uY2FtaW5vLkRpc2Nvbm5lY3RFZGdlUmVzcG9uc2USOgoHTGlzdE9wcxIWLmNhbWluby5MaXN0T3BzUmVxdWVzdBoXLmNhbWluby5MaXN0T3BzUmVzcG9uc2USRQoLV2F0Y2hPYmplY3QSGi5jYW1pbm8uV2F0Y2hPYmplY3RSZXF1ZXN0GhguY2FtaW5vLldhdGNoT2JqZWN0RXZlbnQwAWIGcHJvdG8z", [file_camino_schema]); /** * @generated from message camino.NullValue @@ -133,6 +133,15 @@ export type StateValueSource = Message<"camino.StateValueSource"> & { * @generated from field: uint64 revision = 5; */ revision: bigint; + + /** + * CRDT-backed state is still read as its materialized Value. The snapshot + * travels with the writable source identity so a client can retain and + * advance a local replica without exposing the document to package code. + * + * @generated from field: camino.CrdtValue crdt_snapshot = 6; + */ + crdtSnapshot?: CrdtValue | undefined; }; /** diff --git a/test/fixtures/todo.capabilities.qx b/test/fixtures/todo.capabilities.qx index e9a1405..dfe6e1e 100644 --- a/test/fixtures/todo.capabilities.qx +++ b/test/fixtures/todo.capabilities.qx @@ -3,7 +3,7 @@ workspace Todo id "workspace:todo" revision "workspace:todo@1" commit "111111111 atom Person id "atom:person"; interface Named id "interface:named" revision "interface:named@1" source { - repository "https://repos.quixos.org/interfaces/named.git"; + repository "https://repos.quixos.org/quixos-todo/interface-named.git"; commit "2222222222222222222222222222222222222222"; } { value name id "member:named:name" : string { @@ -14,7 +14,7 @@ workspace Todo id "workspace:todo" revision "workspace:todo@1" commit "111111111 } interface Owned id "interface:owned" revision "interface:owned@1" source { - repository "https://repos.quixos.org/interfaces/owned.git"; + repository "https://repos.quixos.org/quixos-todo/interface-owned.git"; commit "3333333333333333333333333333333333333333"; } { relation owner id "member:owned:owner" : exactly-one interface Named { @@ -26,7 +26,7 @@ workspace Todo id "workspace:todo" revision "workspace:todo@1" commit "111111111 } interface Summary id "interface:summary" revision "interface:summary@1" source { - repository "https://repos.quixos.org/interfaces/summary.git"; + repository "https://repos.quixos.org/quixos-todo/interface-summary.git"; commit "4444444444444444444444444444444444444444"; } { value summary id "member:summary:summary" : string { @@ -35,7 +35,7 @@ workspace Todo id "workspace:todo" revision "workspace:todo@1" commit "111111111 } package TodoRuntime id "package:todo-runtime" revision "package:todo-runtime@1" source { - repository "https://repos.quixos.org/packages/todo-runtime.git"; + repository "https://repos.quixos.org/quixos-todo/package-todo-runtime.git"; commit "5555555555555555555555555555555555555555"; } { operation summaryGet id "export:todo-runtime:summary-get" : unit -> string diff --git a/test/resource-lock.test.ts b/test/resource-lock.test.ts index 153c202..849f55e 100644 --- a/test/resource-lock.test.ts +++ b/test/resource-lock.test.ts @@ -75,7 +75,7 @@ test("rejects mutable revisions, embedded credentials, and duplicate bindings", commit "${namedCommit}"; } interface Named source { - repository "https://repos.example/named.git"; + repository "https://repos.example/named.git?ref=main"; commit "${namedCommit}"; } }`); @@ -87,6 +87,7 @@ test("rejects mutable revisions, embedded credentials, and duplicate bindings", "invalid-git-commit", "embedded-git-credential", "unsupported-git-transport", + "decorated-git-repository", "duplicate-resource-binding", ]), );