@ibgib/core-gib 0.1.10 → 0.1.12

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 (118) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/agent-helpers.d.mts +4 -13
  3. package/dist/agent-helpers.d.mts.map +1 -1
  4. package/dist/agent-helpers.mjs +109 -12
  5. package/dist/agent-helpers.mjs.map +1 -1
  6. package/dist/sync/sync-innerspace.respec.d.mts +8 -0
  7. package/dist/sync/sync-innerspace.respec.d.mts.map +1 -0
  8. package/dist/sync/sync-innerspace.respec.mjs +242 -0
  9. package/dist/sync/sync-innerspace.respec.mjs.map +1 -0
  10. package/dist/timeline/timeline-api.respec.d.mts +7 -0
  11. package/dist/timeline/timeline-api.respec.d.mts.map +1 -0
  12. package/dist/timeline/timeline-api.respec.mjs +210 -0
  13. package/dist/timeline/timeline-api.respec.mjs.map +1 -0
  14. package/dist/witness/space/inner-space/inner-space-v1.d.mts +1 -1
  15. package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
  16. package/dist/witness/space/inner-space/inner-space-v1.mjs +4 -3
  17. package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
  18. package/dist/witness/space/metaspace/metaspace-base.d.mts.map +1 -1
  19. package/dist/witness/space/metaspace/metaspace-base.mjs +33 -5
  20. package/dist/witness/space/metaspace/metaspace-base.mjs.map +1 -1
  21. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts +18 -0
  22. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
  23. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +42 -12
  24. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
  25. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.d.mts.map +1 -1
  26. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs +2 -1
  27. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs.map +1 -1
  28. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts +7 -0
  29. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts.map +1 -0
  30. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +69 -0
  31. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -0
  32. package/dist/witness/space/space-helper.d.mts.map +1 -1
  33. package/dist/witness/space/space-helper.mjs +1 -0
  34. package/dist/witness/space/space-helper.mjs.map +1 -1
  35. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/017DF612D9A86192706EE567B059C489EC8DA0B2B558166EFE61F75D8BF1ECEE/test ib.json +1 -0
  36. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/0EF68E1CA839A24CAEDB224A8AF92F258BD1F364A97E708705150595B3F67985/test ib.json +1 -0
  37. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/12EF728E4F98DDB89990D4CDAF3AC852729E804CE37E2041AF18CBA239328085/test ib.json +1 -0
  38. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/152DD42FA80FA6ABD0B4DAAAE9CE1AFCF94E649B210A08955DB8B86E09AF08BE/test ib.json +1 -0
  39. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/16A46B37492E2688088C69F237E5CDC4F4E8C1015CF8E66D044DC2FE115F6211/test ib.json +1 -0
  40. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/1F7942767491C1D740FFC87E046C2470697FE8D154806B51876C53E607B7F007/test ib.json +1 -0
  41. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/35754C7AD2967D57C34396084F1214343C48F9C1AAF1C11CDFB57B5CB95536F5/test ib.json +1 -0
  42. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/38CFD2C2DFD185FC1E5BEE8C55C8A4FFBD83B03F533B4F92537000C505939E39/test ib.json +1 -0
  43. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/43635745EEAE9EBD3426CC4AD88D2362DE15B2F8E4D1C694B3AE8687E8C6489D/test ib.json +1 -0
  44. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5C4BCD98E1B3494CCFAC355D2C61025DCD43A1D3041E637ABDA83F0E1E7FA0BE/test ib.json +1 -0
  45. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5FC1BCCA0F1EB6E656233401E330A7928BF58C09EF6B6B56EC69FCFAC0B3A47A/test ib.json +1 -0
  46. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/60B8ED34520992236C9E1859FAE4BA9DF206CC6BD75DA574E815EAF7B577C1BD/test ib.json +1 -0
  47. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/68B53978461355B04CA96CEE33E448CBC39CDEFEA8E907879C1D2E6A542672C4/test ib.json +1 -0
  48. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6B62E238B88A3B5050DFF02AB91402C6702A822389315B4150308B774F5A0D01/test ib.json +1 -0
  49. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6F7EC702F1109A564CFE009F634B27E5F82D6A309CF51B11F49846ABEEAD04B1/test ib.json +1 -0
  50. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/7AE69551608DB82E23DBA98CA7D059DF3F5C9E37174E581F7C154935F4362AA7/test ib.json +1 -0
  51. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/8C851E9DD394053BB50716EA6CDD07A48FA76AF5BB55513F898A18B2A4C64D1F/test ib.json +1 -0
  52. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/984DAD369079FEF2F83082F1CD944A432690F1CB0A5ECA9F009D50B385C4061A/test ib.json +1 -0
  53. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C466B016831B11EEEC611208EDB50FD7BACD7E37D0037C0D1D78BD5B3D892794/test ib.json +1 -0
  54. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C5D0AA2C7A2C01C52EFDF70242AA6CAAE06BCA80301A425D4E508E9ACD33DF44/test ib.json +1 -0
  55. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/CDDFD5D61010F7B15CFD78C49865C0134E8E037779DD80C6B4DED7DEB0D4CBB7/test ib.json +1 -0
  56. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/DDFAB26C3991470523BD7543D946A24A9CFEC9D5BEC197B7BD963E1507057A93/test ib.json +1 -0
  57. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E174442450BBA2A570B0166CDF04844C3A5D1F7199DC59E0FA49F1BBACA47F5F/test ib.json +1 -0
  58. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E6CE9621CF266A675DB7E3EBABD5D636E46E8006F116A0F7F0769B87DDDBFBB0/test ib.json +1 -0
  59. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 -1 1766860935000^7978FD0F9DD4EB6208A2D2113011F95E5C7EE80072BA3B7E4AC737CC771D621B.json +1 -0
  60. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 0 1766860935000^013C09075DF303BB5822FEEFE57F26B9F0DEE6DD382B116816FCDC2B7CAF0696.json +1 -0
  61. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 1 1766860935000^4EEBAD21A82BAC51A7B952DA32DACB37A653695D5D512A348CF15DB9B7DED5AC.json +1 -0
  62. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 10 1766860938000^84544F34B1297ED8F5FD4B437FCD4F1044FD0D40A0B270F8C7E79D89AA058DD6.json +1 -0
  63. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 11 1766860938000^023B07336455CD39B03DC52AF523DA19B588FD32ED7A4BB5BBE9ABE59ED75195.json +1 -0
  64. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 12 1766860939000^49685AA6F0064868886EBA984B072F6C63F92FC3315C29DDDF750D5B56E87D6B.json +1 -0
  65. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 13 1766860939000^A2475B1C99AC9F8B9A4D8B2BD8CB39A76FAA2E13AB2F7CEADA4AB02B42FF8BE4.json +1 -0
  66. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 14 1766860939000^2D0C93D837FFF096346E10F276BD1F08ECE4A2EC94BE9BC58759EBABAB1F2E42.json +1 -0
  67. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 15 1766860939000^4FA9AFA0EA50B833B342716C7745B9A39A7C0F9A09B4666CA67080A49EAB611B.json +1 -0
  68. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 16 1766860939000^A65760BEED125117DE7DF2F481A0F7CD250FFB579138ECC1A19C8401DAFCEB51.json +1 -0
  69. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 17 1766860940000^226FA64E1B4591C150F595D8408530502417C7FFEE3915589382F9C3B585053C.json +1 -0
  70. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 18 1766860940000^1ABF20687FB34275E0EE737538E7E5D4F15CDCB128C4F332043CB76AC78B0F05.json +1 -0
  71. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 19 1766860940000^89A44A1912B20AE873402C287CE09C4D41073F0A5B703CB22FD5272BB907FC19.json +1 -0
  72. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 2 1766860936000^A8D1C5244B85155B130EFCA9CF25185A9B7060F549603B993F2CA98FB269B178.json +1 -0
  73. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 20 1766860940000^72905A7F6A0A859003049827534B579BE090F0B6A221D14584745DAE6A999943.json +1 -0
  74. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 21 1766860948000^71168CE7419FFDB6E945655E1B3597A726111666C305EDA9A76D97FD7215E929.json +1 -0
  75. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 22 1766860967000^A5E8805E1AC44CF2A07606613DE14704BC1943268EFF48BF181E7216D8F07AA3.json +1 -0
  76. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 3 1766860936000^66806071E91EAC9E8F90A81700DD37FB56B7DFDE7B32FE47E142BAC58907173C.json +1 -0
  77. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 4 1766860937000^1A097ACE63079C7D91AC964F783834D172C41CD3FAD0D27A5B95DC6E1E5B7D6A.json +1 -0
  78. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 5 1766860937000^746153300B51309B664E4035E092CAE07F487A2B44D5DB79B770C7D9968D45CA.json +1 -0
  79. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 6 1766860937000^3F1EFF11C729D6175922400928667D3391E3D7B4B29CECD67987F3259A5003C5.json +1 -0
  80. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 7 1766860938000^D2867FC7F2A08C6678BAA320EE449F89E56D81EDC3BFFA79F9DA64BF98701014.json +1 -0
  81. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 8 1766860938000^AA9E5246E533F704E42BED13B878B830B91143AE71C8603FFCF187CF39904915.json +1 -0
  82. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 9 1766860938000^E4B12653516EB8690ED18ECFF3EA7AB5EA3FF70881D730F5859F193F5872DF15.json +1 -0
  83. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/test ib.json +1 -0
  84. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/04E79CE54F49DCEA75652ADF674DC9B21BA641944AD97ED7ED1369CF3A880E8D/mut8.json +1 -0
  85. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0647EB78DB2C48AF3AE9D3EF7989A3DDA1A797D04BE18DB1210B3504BC39BA4E/mut8.json +1 -0
  86. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/08B4A7A62BC7DE27C180A3F70FA7C6C8F9728A98E79B200D9B2EE2D11E62CD97/mut8.json +1 -0
  87. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0B2FEF92D3630CDFDD14C453DDDA288478022CEB778E0BB4ACC9C9511C770A39/mut8.json +1 -0
  88. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3757E01592FABCA5D139026F156318A7F86AC097CC10ABA243D4E665EB3550C5/mut8.json +1 -0
  89. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3A66623B180568E2AE3E95BD6C48684E765B6B8C2147A4DD13426B6808AC2567/mut8.json +1 -0
  90. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3EADB84024E06764489225E537F285BF7F7F85C3ACC013F0FCB28B79E227DE2D/mut8.json +1 -0
  91. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/471A5F0BA13425E3412A376452549E5158CD5516C4E005872A50A10D7390CF12/mut8.json +1 -0
  92. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/6E6EA2A701C3AC1B5BCD766F39C59BA7BC5139AAF0EB5E9DE8814F77C4A192A7/mut8.json +1 -0
  93. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/7EF033B1C3C39C05359C89C301DEE7365F6F7A816776F6A0E540CE1A212CD612/mut8.json +1 -0
  94. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/834AECEDC108F37DADA5BD3583FA9C1E612AFA3FFFB1153CA0CD2F51239AD93F/mut8.json +1 -0
  95. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/8CA9BDE2ED96C7C8039D5AF78AEF620A985E32352238DEACACC7E2329006B9B9/mut8.json +1 -0
  96. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/90C61CC1159B21E9FE686C06D5C76FF6F5236F8C7D39CC183B8C81CE36471D9C/fork.json +1 -0
  97. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/A89842F2240358AEC12AE59014A14875AB6FC5C8EF2A5C50D8BD92EB5F54F4B6/mut8.json +1 -0
  98. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B10FBD60588500D94D6CDA19E5E24DF7F4C3EDF66368E5875F13C4BFF9A8FD03/mut8.json +1 -0
  99. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B5A0CAF33ACC64A57647ADD18B4F0CAD820F427819BB4615567131994D0399AB/mut8.json +1 -0
  100. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/C0223AA1B3B147E3AFC4233C60025BE4C975652EBF77C24D8B8FABC413594137/mut8.json +1 -0
  101. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D07097470D6970574C539E1E16AEFCE0A3A67987C7554C9EEFA7204D6D1D81D4/mut8.json +1 -0
  102. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D92466D1FCE56DB0828A2509590DDA0040FF250FD4FCE7F3E45B5D84887C83F0/mut8.json +1 -0
  103. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E035FDD6BDD26B164AF5AD675D0567BC0FFB6E10E14BAFA6617EDB536EE162B9/mut8.json +1 -0
  104. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E8B2955902784AFC4B4A251C771EC770D94234440C8B02C63B12628C29447069/mut8.json +1 -0
  105. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/EF9D3619C817B27EC4402BC215D08CC95A83E5042F4FC35AE2E737AC33B05629/mut8.json +1 -0
  106. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F0D5006EF21791D68460DB0111983602EC450BBFFB3E47134D357A1BCD9FBD15/mut8.json +1 -0
  107. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F15D698186AADD2BA9F3028F4F84630505D06220AB6482381FB35755AFC77E5F/mut8.json +1 -0
  108. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F1913D9CF3C4F2CDE56C39EA86F8EB9A65D8FA22750DACD2B496EF27D88DE260/mut8.json +1 -0
  109. package/package.json +1 -1
  110. package/src/agent-helpers.mts +119 -18
  111. package/src/sync/sync-innerspace.respec.mts +289 -0
  112. package/src/timeline/timeline-api.respec.mts +255 -0
  113. package/src/witness/space/inner-space/inner-space-v1.mts +5 -3
  114. package/src/witness/space/metaspace/metaspace-base.mts +31 -5
  115. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +43 -12
  116. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mts +2 -1
  117. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +92 -0
  118. package/src/witness/space/space-helper.mts +1 -1
@@ -6,47 +6,132 @@
6
6
  * actions for creating and modifying data.
7
7
  */
8
8
 
9
+ import { extractErrorMsg, getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
9
10
  import { IbGib_V1, IbGibRel8ns_V1, IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
10
- import { IbGibAddr, Ib } from '@ibgib/ts-gib/dist/types.mjs';
11
+
12
+ import { GLOBAL_LOG_A_LOT } from './core-constants.mjs';
11
13
  import { KeystoneService_V1 } from './keystone/keystone-service-v1.mjs';
12
14
  import { IbGibSpaceAny } from './witness/space/space-base-v1.mjs';
15
+ import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
16
+ import { createTimeline } from './timeline/timeline-api.mjs';
17
+ import { persistTransformResult, registerNewIbGib } from './witness/space/space-helper.mjs';
18
+ import { MetaspaceService } from './witness/space/metaspace/metaspace-types.mjs';
19
+ import { TransformResult } from '@ibgib/ts-gib/dist/types.mjs';
20
+
21
+ const logalot = GLOBAL_LOG_A_LOT;
13
22
 
14
23
  /**
15
24
  * Creates a "Stone" ibGib - an immutable, primitive-like data record with no history/timeline.
16
25
  * Useful for static data, configurations, or standalone records.
17
26
  */
18
- export async function createStoneHelper<TData = any>(opts: {
27
+ export async function createStoneHelper<TData extends IbGibData_V1 = any>({
28
+ ib,
29
+ data,
30
+ rel8ns,
31
+ uuid,
32
+ noTimestamp,
33
+ }: {
19
34
  ib: string;
20
35
  data?: TData;
21
36
  rel8ns?: IbGibRel8ns_V1;
22
37
  uuid?: boolean; // If true, generates a UUID in data
38
+ noTimestamp?: boolean;
23
39
  }): Promise<IbGib_V1<TData>> {
24
- throw new Error("Not implemented yet. Agent waiting for user implementation.");
40
+ const lc = `[${createStoneHelper.name}]`;
41
+ try {
42
+ if (logalot) { console.log(`${lc} starting... (I: e4b15ee74de22ec9a917c578adc83425)`); }
43
+
44
+ if (!ib) { throw new Error(`ib required (E: 3d5df8fd5b880e0e0dcedd37dbc3f825)`); }
45
+
46
+ // the parent primitive ib is almost always the atom of the ib.
47
+ const atom = ib.split(' ').at(0)!;
48
+
49
+ if (uuid) {
50
+ if (!data) { data = {} as TData; }
51
+ data.uuid = await getUUID();
52
+ }
53
+
54
+ const stone = await Factory_V1.stone({
55
+ parentPrimitiveIb: atom,
56
+ ib,
57
+ data,
58
+ rel8ns,
59
+ uuid,
60
+ });
61
+
62
+ return stone;
63
+ } catch (error) {
64
+ console.error(`${lc} ${extractErrorMsg(error)}`);
65
+ throw error;
66
+ } finally {
67
+ if (logalot) { console.log(`${lc} complete.`); }
68
+ }
25
69
  }
26
70
 
27
71
  /**
28
72
  * Creates a new "Living" Timeline Root.
29
73
  * This is the starting point for any mutable data structure (a file, a user profile, a post).
30
74
  */
31
- export async function createTimelineRootHelper<TData = any>(opts: {
75
+ export async function createTimelineRootHelper<TData extends IbGibData_V1 = any>({
76
+ ib,
77
+ data,
78
+ space,
79
+ }: {
32
80
  ib: string; // e.g. "comment" or "task"
33
81
  data?: TData; // Initial data
34
82
  space: IbGibSpaceAny; // Where to persist this new root
35
83
  }): Promise<IbGib_V1<TData>> {
36
- throw new Error("Not implemented yet. Agent waiting for user implementation.");
37
- }
84
+ const lc = `[${createTimelineRootHelper.name}]`;
85
+ try {
86
+ if (logalot) { console.log(`${lc} starting... (I: 8f50a8cf0268742048f7c188feb5a825)`); }
38
87
 
39
- /**
40
- * Forks an existing timeline to create a new version (a child).
41
- * Used for updating data, adding a comment to a thread (if threading via timeline), etc.
42
- */
43
- export async function forkTimelineHelper<TData = any>(opts: {
44
- timeline: IbGib_V1<TData>; // The current tip of the timeline
45
- dataToAddOrPatch?: Partial<TData>;
46
- rel8nsToAdd?: IbGibRel8ns_V1; // e.g. linking to another ibGib
47
- space: IbGibSpaceAny;
48
- }): Promise<IbGib_V1<TData>> {
49
- throw new Error("Not implemented yet. Agent waiting for user implementation.");
88
+ // const resTimeline = await createTimeline({
89
+ // ib,
90
+ // data,
91
+ // rel8ns: undefined,
92
+ // metaspace, space
93
+ // });
94
+ // const timeline = resTimeline.newIbGib;
95
+
96
+ // return timeline;
97
+
98
+ // Determine the parent to fork based on the provided options.
99
+ const atom = ib.split(' ').at(0)!;
100
+ const parentIbGib = Factory_V1.primitive({ ib: atom });
101
+
102
+ const resNew = await Factory_V1.firstGen<TData>({
103
+ parentIbGib,
104
+ ib,
105
+ data,
106
+ rel8ns: undefined,
107
+ // these options are what make this a "timeline"
108
+ dna: true,
109
+ nCounter: true,
110
+ tjp: { timestamp: true, uuid: true },
111
+ });
112
+
113
+ // Persist the new timeline and its DNA to the designated space.
114
+ await persistTransformResult({ resTransform: resNew, space });
115
+ await registerNewIbGib({
116
+ ibGib: resNew.newIbGib,
117
+ space,
118
+ /**
119
+ * We don't need to broadcast here because it's a new, independent
120
+ * timeline, so there are no listeners yet.
121
+ */
122
+ fnBroadcast: undefined,
123
+ });
124
+
125
+ // We don't need to lock here because it's a new, independent timeline,
126
+ // so there are no concurrency concerns yet.
127
+
128
+ return resNew.newIbGib as IbGib_V1<TData>;
129
+ } catch (error) {
130
+ console.error(`${lc} ${extractErrorMsg(error)}`);
131
+ throw error;
132
+ } finally {
133
+ if (logalot) { console.log(`${lc} complete.`); }
134
+ }
50
135
  }
51
136
 
52
137
  /**
@@ -54,5 +139,21 @@ export async function forkTimelineHelper<TData = any>(opts: {
54
139
  * This mocks the identity and signing logic needed for Sync operations.
55
140
  */
56
141
  export async function getTestKeystoneServiceHelper(): Promise<KeystoneService_V1> {
57
- throw new Error("Not implemented yet. Agent waiting for user implementation.");
142
+ class MockKeystoneService extends KeystoneService_V1 {
143
+ async getIdentity(): Promise<any> {
144
+ // Return a dummy identity
145
+ // We use the Factory directly here to just get *something* that looks like an ibgib
146
+ const res = await Factory_V1.firstGen({
147
+ parentIbGib: Factory_V1.primitive({ ib: 'identity' }),
148
+ ib: 'identity',
149
+ data: { uuid: await getUUID() },
150
+ dna: true,
151
+ });
152
+ return res.newIbGib;
153
+ }
154
+ // Implement other methods as no-ops or simple mocks
155
+ async sign(args: any): Promise<any> { return args.latestKeystone; /* minimal mock */ }
156
+ async verify(args: any): Promise<any> { return []; /* no errors */ }
157
+ }
158
+ return new MockKeystoneService() as unknown as KeystoneService_V1;
58
159
  }
@@ -0,0 +1,289 @@
1
+ /**
2
+ * @module sync-innerspace.respec
3
+ *
4
+ * Verifies SyncSagaCoordinator using InnerSpace (in-memory/local) spaces.
5
+ * This avoids disk I/O issues and focuses on the synchronization logic.
6
+ */
7
+
8
+ import {
9
+ respecfully, lastOfAll, ifWe, iReckon,
10
+ ifWeMight
11
+ } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
12
+ const maam = `[${import.meta.url}]`, sir = maam;
13
+
14
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
15
+ import { SyncSagaCoordinator } from './sync-saga-coordinator.mjs';
16
+ import { putInSpace, getFromSpace } from '../witness/space/space-helper.mjs';
17
+ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
18
+ import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
19
+ import { createStoneHelper, createTimelineRootHelper, getTestKeystoneServiceHelper } from '../agent-helpers.mjs';
20
+ import { mut8Timeline, appendToTimeline } from '../timeline/timeline-api.mjs';
21
+ import { getDependencyGraph } from '../common/other/graph-helper.mjs';
22
+
23
+ const logalot = true;
24
+ const lc = `[sync-innerspace.respec]`;
25
+
26
+ await respecfully(sir, `Sync InnerSpaces`, async () => {
27
+
28
+ let metaspace: Metaspace_Innerspace;
29
+ let sourceSpace: InnerSpace_V1;
30
+ let destSpace: InnerSpace_V1;
31
+
32
+ // Setup before each test? Or once?
33
+ // For now, let's just do it inside the test block to be safe/simple.
34
+
35
+ await ifWe(sir, `Basic Push Sync (Source -> Dest)`, async () => {
36
+ // 1. Setup Spaces
37
+ metaspace = new Metaspace_Innerspace(undefined);
38
+ await metaspace.initialize({
39
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
40
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
41
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
42
+ });
43
+
44
+ // Create two distinct inner spaces manually or via metaspace if supported
45
+ // Metaspace_Innerspace typically manages one local user space, but we can instantiate InnerSpace_V1 directly.
46
+ sourceSpace = new InnerSpace_V1({ name: 'source', uuid: 'source_uuid' } as any);
47
+ await (sourceSpace as any).initialize();
48
+
49
+ destSpace = new InnerSpace_V1({ name: 'dest', uuid: 'dest_uuid' } as any);
50
+ await (destSpace as any).initialize();
51
+
52
+ // 2. Seed Source Data
53
+
54
+ // 2.1 Create a "Stone"
55
+ console.log(`${lc} Creating Stone...`);
56
+ const stone = await createStoneHelper({
57
+ ib: 'stone_data',
58
+ data: { some: 'data' },
59
+ });
60
+ const stoneAddr = getIbGibAddr({ ibGib: stone });
61
+ await putInSpace({ space: sourceSpace, ibGibs: [stone] });
62
+
63
+ // 2.2 Create a "Living" Timeline (Root)
64
+ console.log(`${lc} Creating Timeline Root...`);
65
+ const root = await createTimelineRootHelper({
66
+ ib: 'timeline_root',
67
+ data: { type: 'root', n: 0 },
68
+ space: sourceSpace,
69
+ });
70
+ const rootAddr = getIbGibAddr({ ibGib: root });
71
+
72
+ // 2.3 Evolve Timeline (Root -> Child)
73
+ // using mut8Timeline to simulate evolution
74
+ console.log(`${lc} Evolving Timeline...`);
75
+ const child = await mut8Timeline({
76
+ timeline: root,
77
+ mut8Opts: {
78
+ dataToAddOrPatch: { type: 'child', n: 1 }
79
+ },
80
+ metaspace,
81
+ space: sourceSpace,
82
+ // We use skipLock=true for simplicity in single-threaded test setup if locking is complex,
83
+ // but timeline-api handles locking. Let's try default first.
84
+ // Actually InnerSpace locking might be no-op or simple.
85
+ });
86
+ const childAddr = getIbGibAddr({ ibGib: child });
87
+
88
+ // 2.4 Rel8 Child to Stone (Dependency)
89
+ console.log(`${lc} Linking Child to Stone...`);
90
+ const childWithRel = await appendToTimeline({
91
+ timeline: child,
92
+ rel8nInfos: [{
93
+ rel8nName: 'linked_stone',
94
+ ibGibs: [stone]
95
+ }],
96
+ metaspace,
97
+ space: sourceSpace,
98
+ });
99
+ const childWithRelAddr = getIbGibAddr({ ibGib: childWithRel });
100
+
101
+ // 3. Setup Sync Coordinator
102
+ console.log(`${lc} Setting up Coordinator...`);
103
+ const mockKeystone = await getTestKeystoneServiceHelper();
104
+ const identity = await (mockKeystone as any).getIdentity();
105
+ const coordinator = new SyncSagaCoordinator(mockKeystone);
106
+
107
+ // 4. Run Sync
108
+ console.log(`${lc} Running Sync...`);
109
+ const syncRes = await coordinator.sync({
110
+ source: sourceSpace,
111
+ dest: destSpace,
112
+ domainIbGibs: [childWithRel], // Sync starting from the tip
113
+ identity
114
+ });
115
+
116
+ // 5. Verify Dest (Full Dependency Graph)
117
+ console.log(`${lc} Verifying Destination (Full Graph)...`);
118
+
119
+ // We expect the graph to contain:
120
+ // 1. childWithRel
121
+ // 2. child (past of childWithRel)
122
+ // 3. root (ancestor of child, past of child)
123
+ // 4. stone (linked to childWithRel)
124
+ // 5. primitives (timeline_root, child, stone_data, identity, fork, mut8, rel8, root^gib, etc.)
125
+
126
+ // Let's get the graph from the source first to know what to expect (ground truth)
127
+ const sourceGraph = await getDependencyGraph({
128
+ ibGibs: [childWithRel],
129
+ space: sourceSpace,
130
+ });
131
+ const sourceAddrs = Object.keys(sourceGraph);
132
+ console.log(`${lc} Source Graph Size: ${sourceAddrs.length}`);
133
+
134
+ // Now get the graph from the destination
135
+ const destGraph = await getDependencyGraph({
136
+ ibGibs: [childWithRel],
137
+ space: destSpace,
138
+ });
139
+ const destAddrs = Object.keys(destGraph);
140
+ console.log(`${lc} Dest Graph Size: ${destAddrs.length}`);
141
+
142
+ // Assert
143
+ iReckon(sir, destAddrs.length).asTo('dest graph size').isGonnaBe(sourceAddrs.length);
144
+
145
+ for (const addr of sourceAddrs) {
146
+ const inDest = !!destGraph[addr];
147
+ if (!inDest) {
148
+ console.error(`${lc} Missing in dest: ${addr}`);
149
+ }
150
+ iReckon(sir, inDest).asTo(`addr present in dest: ${addr}`).isGonnaBeTrue();
151
+ }
152
+
153
+ console.log(`${lc} Verified Full Dependency Graph synced.`);
154
+ });
155
+
156
+ await ifWe(sir, `Idempotency (No-op if already synced)`, async () => {
157
+ // 1. Setup Spaces
158
+ const metaspace = new Metaspace_Innerspace(undefined);
159
+ await metaspace.initialize({
160
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
161
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
162
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
163
+ });
164
+
165
+ const sourceSpace = new InnerSpace_V1({ name: 'source_idem', uuid: 'source_idem_uuid' } as any);
166
+ await (sourceSpace as any).initialize();
167
+
168
+ const destSpace = new InnerSpace_V1({ name: 'dest_idem', uuid: 'dest_idem_uuid' } as any);
169
+ await (destSpace as any).initialize();
170
+
171
+ // 2. Seed Source and Sync ONCE
172
+ const root = await createTimelineRootHelper({
173
+ ib: 'timeline_root',
174
+ data: { type: 'root', n: 0 },
175
+ space: sourceSpace,
176
+ });
177
+
178
+ const mockKeystone = await getTestKeystoneServiceHelper();
179
+ const identity = await (mockKeystone as any).getIdentity();
180
+ const coordinator = new SyncSagaCoordinator(mockKeystone);
181
+
182
+ console.log(`${lc} Running First Sync...`);
183
+ await coordinator.sync({
184
+ source: sourceSpace,
185
+ dest: destSpace,
186
+ domainIbGibs: [root],
187
+ identity
188
+ });
189
+
190
+ // Verify Initial State
191
+ const rootAddr = getIbGibAddr({ ibGib: root });
192
+ const getRoot1 = await getFromSpace({ space: destSpace, addr: rootAddr });
193
+ iReckon(sir, getRoot1.success).asTo('First Sync success').isGonnaBeTrue();
194
+
195
+ // 3. Run Sync AGAIN (Should be No-op)
196
+ console.log(`${lc} Running Second Sync...`);
197
+ await coordinator.sync({
198
+ source: sourceSpace,
199
+ dest: destSpace,
200
+ domainIbGibs: [root],
201
+ identity
202
+ });
203
+
204
+ // 4. Verify State Unchanged / Still Valid
205
+ const getRoot2 = await getFromSpace({ space: destSpace, addr: rootAddr });
206
+ iReckon(sir, getRoot2.success).asTo('Second Sync success').isGonnaBeTrue();
207
+
208
+ // Ensure no duplication or errors in destination (checking count in dependency graph might be good proxy?)
209
+ const destGraph = await getDependencyGraph({
210
+ ibGibs: [root],
211
+ space: destSpace,
212
+ });
213
+ iReckon(sir, Object.keys(destGraph).length).asTo('Dest Graph Size unchanged').isGonnaBe(Object.keys(destGraph).length); // Trivial assertion, mostly checking for no throw
214
+
215
+ console.log(`${lc} Verified Idempotency.`);
216
+ });
217
+
218
+ await ifWeMight(sir, `Dest Ahead (Pull/Fast-Backward)`, async () => {
219
+ // 1. Setup Spaces
220
+ const metaspace = new Metaspace_Innerspace(undefined);
221
+ await metaspace.initialize({
222
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
223
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
224
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
225
+ });
226
+
227
+ const sourceSpace = new InnerSpace_V1({ name: 'source_pull', uuid: 'source_pull_uuid' } as any);
228
+ await (sourceSpace as any).initialize();
229
+
230
+ const destSpace = new InnerSpace_V1({ name: 'dest_pull', uuid: 'dest_pull_uuid' } as any);
231
+ await (destSpace as any).initialize();
232
+
233
+ // 2. Setup Initial Shared State
234
+ // Create root in Source, Sync to Dest
235
+ console.log(`${lc} Seeding initial shared state...`);
236
+ const root = await createTimelineRootHelper({
237
+ ib: 'timeline_pull',
238
+ data: { type: 'root', n: 0, state: 'initial' },
239
+ space: sourceSpace,
240
+ });
241
+ const rootAddr = getIbGibAddr({ ibGib: root });
242
+
243
+ const mockKeystone = await getTestKeystoneServiceHelper();
244
+ const identity = await (mockKeystone as any).getIdentity();
245
+ const coordinator = new SyncSagaCoordinator(mockKeystone);
246
+
247
+ await coordinator.sync({
248
+ source: sourceSpace,
249
+ dest: destSpace,
250
+ domainIbGibs: [root],
251
+ identity
252
+ });
253
+
254
+ // 3. Evolve DESTINATION (Simulate external update)
255
+ // We act "as if" we are on Dest side evolving it
256
+ console.log(`${lc} Evolving Destination (making Source behind)...`);
257
+ const childDest = await mut8Timeline({
258
+ timeline: root, // works because mut8Timeline just needs the ib/data/rel8ns/n, doesn't need to be "in" the space object-wise, but we persist to destSpace
259
+ mut8Opts: { dataToAddOrPatch: { n: 1, state: 'ahead' } },
260
+ metaspace,
261
+ space: destSpace,
262
+ });
263
+ const childDestAddr = getIbGibAddr({ ibGib: childDest });
264
+
265
+ // Verify Source DOES NOT have childDest
266
+ const getChildInSource = await getFromSpace({ space: sourceSpace, addr: childDestAddr });
267
+ iReckon(sir, getChildInSource.success).asTo('Source is behind').isGonnaBeFalse(); // Or success=true/addrsNotFound depending on impl
268
+
269
+ // 4. Run Sync from Source
270
+ // Checks:
271
+ // - Source should detect it is behind (or "conflict" in current generic terms).
272
+ // - Source should Pull 'childDest' from Dest.
273
+ // - Source should update itself.
274
+ console.log(`${lc} Running Sync (Pull)...`);
275
+ await coordinator.sync({
276
+ source: sourceSpace,
277
+ dest: destSpace,
278
+ domainIbGibs: [root], // We start with what Source knows (root)
279
+ identity
280
+ });
281
+
282
+ // 5. Verify Source Caught Up
283
+ const getChildInSourcePost = await getFromSpace({ space: sourceSpace, addr: childDestAddr });
284
+ iReckon(sir, getChildInSourcePost.success).asTo('Source pulled new frame').isGonnaBeTrue();
285
+ iReckon(sir, getChildInSourcePost.ibGibs?.[0]).asTo('Source has childDest').isGonnaBeTruthy();
286
+
287
+ console.log(`${lc} Verified Dest Ahead / Pull.`);
288
+ });
289
+ });