@ibgib/core-gib 0.1.10 → 0.1.11

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 (103) hide show
  1. package/dist/agent-helpers.d.mts +4 -13
  2. package/dist/agent-helpers.d.mts.map +1 -1
  3. package/dist/agent-helpers.mjs +109 -12
  4. package/dist/agent-helpers.mjs.map +1 -1
  5. package/dist/sync/sync-innerspace.respec.d.mts +8 -0
  6. package/dist/sync/sync-innerspace.respec.d.mts.map +1 -0
  7. package/dist/sync/sync-innerspace.respec.mjs +120 -0
  8. package/dist/sync/sync-innerspace.respec.mjs.map +1 -0
  9. package/dist/timeline/timeline-api.respec.d.mts +7 -0
  10. package/dist/timeline/timeline-api.respec.d.mts.map +1 -0
  11. package/dist/timeline/timeline-api.respec.mjs +183 -0
  12. package/dist/timeline/timeline-api.respec.mjs.map +1 -0
  13. package/dist/witness/space/metaspace/metaspace-base.d.mts.map +1 -1
  14. package/dist/witness/space/metaspace/metaspace-base.mjs +33 -5
  15. package/dist/witness/space/metaspace/metaspace-base.mjs.map +1 -1
  16. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
  17. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +3 -2
  18. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
  19. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts +7 -0
  20. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts.map +1 -0
  21. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +67 -0
  22. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -0
  23. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/017DF612D9A86192706EE567B059C489EC8DA0B2B558166EFE61F75D8BF1ECEE/test ib.json +1 -0
  24. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/0EF68E1CA839A24CAEDB224A8AF92F258BD1F364A97E708705150595B3F67985/test ib.json +1 -0
  25. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/12EF728E4F98DDB89990D4CDAF3AC852729E804CE37E2041AF18CBA239328085/test ib.json +1 -0
  26. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/152DD42FA80FA6ABD0B4DAAAE9CE1AFCF94E649B210A08955DB8B86E09AF08BE/test ib.json +1 -0
  27. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/16A46B37492E2688088C69F237E5CDC4F4E8C1015CF8E66D044DC2FE115F6211/test ib.json +1 -0
  28. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/1F7942767491C1D740FFC87E046C2470697FE8D154806B51876C53E607B7F007/test ib.json +1 -0
  29. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/35754C7AD2967D57C34396084F1214343C48F9C1AAF1C11CDFB57B5CB95536F5/test ib.json +1 -0
  30. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/38CFD2C2DFD185FC1E5BEE8C55C8A4FFBD83B03F533B4F92537000C505939E39/test ib.json +1 -0
  31. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/43635745EEAE9EBD3426CC4AD88D2362DE15B2F8E4D1C694B3AE8687E8C6489D/test ib.json +1 -0
  32. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5C4BCD98E1B3494CCFAC355D2C61025DCD43A1D3041E637ABDA83F0E1E7FA0BE/test ib.json +1 -0
  33. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5FC1BCCA0F1EB6E656233401E330A7928BF58C09EF6B6B56EC69FCFAC0B3A47A/test ib.json +1 -0
  34. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/60B8ED34520992236C9E1859FAE4BA9DF206CC6BD75DA574E815EAF7B577C1BD/test ib.json +1 -0
  35. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/68B53978461355B04CA96CEE33E448CBC39CDEFEA8E907879C1D2E6A542672C4/test ib.json +1 -0
  36. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6B62E238B88A3B5050DFF02AB91402C6702A822389315B4150308B774F5A0D01/test ib.json +1 -0
  37. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6F7EC702F1109A564CFE009F634B27E5F82D6A309CF51B11F49846ABEEAD04B1/test ib.json +1 -0
  38. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/7AE69551608DB82E23DBA98CA7D059DF3F5C9E37174E581F7C154935F4362AA7/test ib.json +1 -0
  39. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/8C851E9DD394053BB50716EA6CDD07A48FA76AF5BB55513F898A18B2A4C64D1F/test ib.json +1 -0
  40. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/984DAD369079FEF2F83082F1CD944A432690F1CB0A5ECA9F009D50B385C4061A/test ib.json +1 -0
  41. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C466B016831B11EEEC611208EDB50FD7BACD7E37D0037C0D1D78BD5B3D892794/test ib.json +1 -0
  42. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C5D0AA2C7A2C01C52EFDF70242AA6CAAE06BCA80301A425D4E508E9ACD33DF44/test ib.json +1 -0
  43. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/CDDFD5D61010F7B15CFD78C49865C0134E8E037779DD80C6B4DED7DEB0D4CBB7/test ib.json +1 -0
  44. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/DDFAB26C3991470523BD7543D946A24A9CFEC9D5BEC197B7BD963E1507057A93/test ib.json +1 -0
  45. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E174442450BBA2A570B0166CDF04844C3A5D1F7199DC59E0FA49F1BBACA47F5F/test ib.json +1 -0
  46. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E6CE9621CF266A675DB7E3EBABD5D636E46E8006F116A0F7F0769B87DDDBFBB0/test ib.json +1 -0
  47. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 -1 1766860935000^7978FD0F9DD4EB6208A2D2113011F95E5C7EE80072BA3B7E4AC737CC771D621B.json +1 -0
  48. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 0 1766860935000^013C09075DF303BB5822FEEFE57F26B9F0DEE6DD382B116816FCDC2B7CAF0696.json +1 -0
  49. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 1 1766860935000^4EEBAD21A82BAC51A7B952DA32DACB37A653695D5D512A348CF15DB9B7DED5AC.json +1 -0
  50. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 10 1766860938000^84544F34B1297ED8F5FD4B437FCD4F1044FD0D40A0B270F8C7E79D89AA058DD6.json +1 -0
  51. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 11 1766860938000^023B07336455CD39B03DC52AF523DA19B588FD32ED7A4BB5BBE9ABE59ED75195.json +1 -0
  52. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 12 1766860939000^49685AA6F0064868886EBA984B072F6C63F92FC3315C29DDDF750D5B56E87D6B.json +1 -0
  53. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 13 1766860939000^A2475B1C99AC9F8B9A4D8B2BD8CB39A76FAA2E13AB2F7CEADA4AB02B42FF8BE4.json +1 -0
  54. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 14 1766860939000^2D0C93D837FFF096346E10F276BD1F08ECE4A2EC94BE9BC58759EBABAB1F2E42.json +1 -0
  55. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 15 1766860939000^4FA9AFA0EA50B833B342716C7745B9A39A7C0F9A09B4666CA67080A49EAB611B.json +1 -0
  56. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 16 1766860939000^A65760BEED125117DE7DF2F481A0F7CD250FFB579138ECC1A19C8401DAFCEB51.json +1 -0
  57. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 17 1766860940000^226FA64E1B4591C150F595D8408530502417C7FFEE3915589382F9C3B585053C.json +1 -0
  58. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 18 1766860940000^1ABF20687FB34275E0EE737538E7E5D4F15CDCB128C4F332043CB76AC78B0F05.json +1 -0
  59. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 19 1766860940000^89A44A1912B20AE873402C287CE09C4D41073F0A5B703CB22FD5272BB907FC19.json +1 -0
  60. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 2 1766860936000^A8D1C5244B85155B130EFCA9CF25185A9B7060F549603B993F2CA98FB269B178.json +1 -0
  61. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 20 1766860940000^72905A7F6A0A859003049827534B579BE090F0B6A221D14584745DAE6A999943.json +1 -0
  62. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 21 1766860948000^71168CE7419FFDB6E945655E1B3597A726111666C305EDA9A76D97FD7215E929.json +1 -0
  63. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 22 1766860967000^A5E8805E1AC44CF2A07606613DE14704BC1943268EFF48BF181E7216D8F07AA3.json +1 -0
  64. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 3 1766860936000^66806071E91EAC9E8F90A81700DD37FB56B7DFDE7B32FE47E142BAC58907173C.json +1 -0
  65. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 4 1766860937000^1A097ACE63079C7D91AC964F783834D172C41CD3FAD0D27A5B95DC6E1E5B7D6A.json +1 -0
  66. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 5 1766860937000^746153300B51309B664E4035E092CAE07F487A2B44D5DB79B770C7D9968D45CA.json +1 -0
  67. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 6 1766860937000^3F1EFF11C729D6175922400928667D3391E3D7B4B29CECD67987F3259A5003C5.json +1 -0
  68. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 7 1766860938000^D2867FC7F2A08C6678BAA320EE449F89E56D81EDC3BFFA79F9DA64BF98701014.json +1 -0
  69. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 8 1766860938000^AA9E5246E533F704E42BED13B878B830B91143AE71C8603FFCF187CF39904915.json +1 -0
  70. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 9 1766860938000^E4B12653516EB8690ED18ECFF3EA7AB5EA3FF70881D730F5859F193F5872DF15.json +1 -0
  71. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/test ib.json +1 -0
  72. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/04E79CE54F49DCEA75652ADF674DC9B21BA641944AD97ED7ED1369CF3A880E8D/mut8.json +1 -0
  73. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0647EB78DB2C48AF3AE9D3EF7989A3DDA1A797D04BE18DB1210B3504BC39BA4E/mut8.json +1 -0
  74. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/08B4A7A62BC7DE27C180A3F70FA7C6C8F9728A98E79B200D9B2EE2D11E62CD97/mut8.json +1 -0
  75. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0B2FEF92D3630CDFDD14C453DDDA288478022CEB778E0BB4ACC9C9511C770A39/mut8.json +1 -0
  76. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3757E01592FABCA5D139026F156318A7F86AC097CC10ABA243D4E665EB3550C5/mut8.json +1 -0
  77. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3A66623B180568E2AE3E95BD6C48684E765B6B8C2147A4DD13426B6808AC2567/mut8.json +1 -0
  78. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3EADB84024E06764489225E537F285BF7F7F85C3ACC013F0FCB28B79E227DE2D/mut8.json +1 -0
  79. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/471A5F0BA13425E3412A376452549E5158CD5516C4E005872A50A10D7390CF12/mut8.json +1 -0
  80. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/6E6EA2A701C3AC1B5BCD766F39C59BA7BC5139AAF0EB5E9DE8814F77C4A192A7/mut8.json +1 -0
  81. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/7EF033B1C3C39C05359C89C301DEE7365F6F7A816776F6A0E540CE1A212CD612/mut8.json +1 -0
  82. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/834AECEDC108F37DADA5BD3583FA9C1E612AFA3FFFB1153CA0CD2F51239AD93F/mut8.json +1 -0
  83. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/8CA9BDE2ED96C7C8039D5AF78AEF620A985E32352238DEACACC7E2329006B9B9/mut8.json +1 -0
  84. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/90C61CC1159B21E9FE686C06D5C76FF6F5236F8C7D39CC183B8C81CE36471D9C/fork.json +1 -0
  85. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/A89842F2240358AEC12AE59014A14875AB6FC5C8EF2A5C50D8BD92EB5F54F4B6/mut8.json +1 -0
  86. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B10FBD60588500D94D6CDA19E5E24DF7F4C3EDF66368E5875F13C4BFF9A8FD03/mut8.json +1 -0
  87. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B5A0CAF33ACC64A57647ADD18B4F0CAD820F427819BB4615567131994D0399AB/mut8.json +1 -0
  88. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/C0223AA1B3B147E3AFC4233C60025BE4C975652EBF77C24D8B8FABC413594137/mut8.json +1 -0
  89. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D07097470D6970574C539E1E16AEFCE0A3A67987C7554C9EEFA7204D6D1D81D4/mut8.json +1 -0
  90. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D92466D1FCE56DB0828A2509590DDA0040FF250FD4FCE7F3E45B5D84887C83F0/mut8.json +1 -0
  91. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E035FDD6BDD26B164AF5AD675D0567BC0FFB6E10E14BAFA6617EDB536EE162B9/mut8.json +1 -0
  92. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E8B2955902784AFC4B4A251C771EC770D94234440C8B02C63B12628C29447069/mut8.json +1 -0
  93. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/EF9D3619C817B27EC4402BC215D08CC95A83E5042F4FC35AE2E737AC33B05629/mut8.json +1 -0
  94. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F0D5006EF21791D68460DB0111983602EC450BBFFB3E47134D357A1BCD9FBD15/mut8.json +1 -0
  95. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F15D698186AADD2BA9F3028F4F84630505D06220AB6482381FB35755AFC77E5F/mut8.json +1 -0
  96. package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F1913D9CF3C4F2CDE56C39EA86F8EB9A65D8FA22750DACD2B496EF27D88DE260/mut8.json +1 -0
  97. package/package.json +1 -1
  98. package/src/agent-helpers.mts +119 -18
  99. package/src/sync/sync-innerspace.respec.mts +144 -0
  100. package/src/timeline/timeline-api.respec.mts +237 -0
  101. package/src/witness/space/metaspace/metaspace-base.mts +31 -5
  102. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +4 -2
  103. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +90 -0
@@ -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,144 @@
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
+
22
+ const logalot = true;
23
+ const lc = `[sync-innerspace.respec]`;
24
+
25
+ await respecfully(sir, `Sync InnerSpaces`, async () => {
26
+
27
+ let metaspace: Metaspace_Innerspace;
28
+ let sourceSpace: InnerSpace_V1;
29
+ let destSpace: InnerSpace_V1;
30
+
31
+ // Setup before each test? Or once?
32
+ // For now, let's just do it inside the test block to be safe/simple.
33
+
34
+ await ifWe(sir, `Basic Push Sync (Source -> Dest)`, async () => {
35
+ // await ifWeMight(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
117
+ console.log(`${lc} Verifying Destination...`);
118
+
119
+ // Check Stone
120
+ const getStone = await getFromSpace({ space: destSpace, addr: stoneAddr });
121
+ iReckon(sir, getStone.success).asTo('getStone.success').isGonnaBeTrue();
122
+ iReckon(sir, getStone.ibGibs?.[0]).asTo('stone in dest').isGonnaBeTruthy();
123
+ console.log(`${lc} Verified Stone synced.`);
124
+
125
+ // Check Root (Dependency of Child)
126
+ const getRoot = await getFromSpace({ space: destSpace, addr: rootAddr });
127
+ iReckon(sir, getRoot.success).asTo('getRoot.success').isGonnaBeTrue();
128
+ iReckon(sir, getRoot.ibGibs?.[0]).asTo('root in dest').isGonnaBeTruthy();
129
+ console.log(`${lc} Verified Root synced.`);
130
+
131
+ // Check Child (Dependency of ChildWithRel)
132
+ const getChild = await getFromSpace({ space: destSpace, addr: childAddr });
133
+ iReckon(sir, getChild.success).asTo('getChild.success').isGonnaBeTrue();
134
+ iReckon(sir, getChild.ibGibs?.[0]).asTo('child in dest').isGonnaBeTruthy();
135
+ console.log(`${lc} Verified Child synced.`);
136
+
137
+ // Check ChildWithRel (The Tip)
138
+ const getChildWithRel = await getFromSpace({ space: destSpace, addr: childWithRelAddr });
139
+ iReckon(sir, getChildWithRel.success).asTo('getChildWithRel.success').isGonnaBeTrue();
140
+ iReckon(sir, getChildWithRel.ibGibs?.[0]).asTo('childWithRel in dest').isGonnaBeTruthy();
141
+ console.log(`${lc} Verified Timeline Tip synced.`);
142
+
143
+ });
144
+ });
@@ -0,0 +1,237 @@
1
+ /**
2
+ * @module timeline-api.respec
3
+ *
4
+ * specs for the high-level timeline api.
5
+ */
6
+
7
+ import {
8
+ firstOfEach, firstOfAll, ifWe,
9
+ lastOfEach, lastOfAll,
10
+ ifWeMight, iReckon, respecfully, respecfullyDear
11
+ } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
12
+
13
+ import { IbGib_V1, IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
14
+ import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
15
+ import { DEFAULT_INNER_SPACE_DATA_V1 } from '../witness/space/inner-space/inner-space-types.mjs';
16
+ import {
17
+ getLatestAddrs, persistTransformResult, registerNewIbGib, getFromSpace
18
+ } from '../witness/space/space-helper.mjs';
19
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
20
+ import {
21
+ createTimeline, mut8Timeline, appendToTimeline, getHistory
22
+ } from './timeline-api.mjs';
23
+ import { MetaspaceService } from '../witness/space/metaspace/metaspace-types.mjs';
24
+ import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
25
+ import { IbGibSpaceAny } from '../witness/space/space-base-v1.mjs';
26
+
27
+ import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
28
+
29
+ const maam = `[${import.meta.url}]`, sir = maam;
30
+
31
+ interface TestData extends IbGibData_V1 {
32
+ note?: string;
33
+ testId?: string;
34
+ uniq?: number;
35
+ }
36
+
37
+ respecfully(sir, `[timeline-api]`, async () => {
38
+
39
+ let space: InnerSpace_V1;
40
+ let metaspace: Metaspace_Innerspace;
41
+
42
+ firstOfEach(sir, async () => {
43
+ metaspace = new Metaspace_Innerspace(undefined);
44
+ await metaspace.initialize({
45
+ getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
46
+ getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
47
+ getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
48
+ });
49
+ space = metaspace.zeroSpace as InnerSpace_V1;
50
+ });
51
+
52
+ await ifWe(sir, `createTimeline`, async () => {
53
+ const res = await createTimeline<TestData>({
54
+ space,
55
+ metaspace,
56
+ data: { note: 'first timeline' },
57
+ ib: 'timeline',
58
+ });
59
+
60
+ const newTimeline = res.newIbGib;
61
+ iReckon(sir, newTimeline).asTo('newTimeline').isGonnaBeTruthy();
62
+ const addr = getIbGibAddr({ ibGib: newTimeline });
63
+
64
+ // verify persistence
65
+ const resGet = await getFromSpace({ addr, space });
66
+ iReckon(sir, resGet.success).asTo('persisted success').isGonnaBeTrue();
67
+ iReckon(sir, resGet.ibGibs![0]).asTo('persisted ibGib').isGonnaBe(newTimeline);
68
+ });
69
+
70
+ await ifWe(sir, `mut8Timeline`, async () => {
71
+ // Arrange
72
+ const resCreate = await createTimeline<TestData>({
73
+ space,
74
+ metaspace,
75
+ data: { note: 'orig' },
76
+ ib: 'timeline',
77
+ });
78
+ const timeline = resCreate.newIbGib;
79
+ console.log(`[mut8Timeline] created timeline n=${timeline.data!.n}`);
80
+ const initialPastLength = timeline.rel8ns?.past?.length || 0;
81
+ console.log(`[mut8Timeline] created timeline past length=${initialPastLength}`);
82
+
83
+ // Act
84
+ const mutatedTimeline = await mut8Timeline<TestData>({
85
+ timeline,
86
+ metaspace,
87
+ space,
88
+ mut8Opts: {
89
+ dataToAddOrPatch: { note: 'mutated' },
90
+ }
91
+ });
92
+ console.log(`[mut8Timeline] mutated timeline n=${mutatedTimeline.data!.n}`);
93
+
94
+
95
+ // Assert
96
+ iReckon(sir, mutatedTimeline).asTo('mutatedTimeline').isGonnaBeTruthy();
97
+ iReckon(sir, mutatedTimeline.data!.note).asTo('data.note').isGonnaBe('mutated');
98
+
99
+ // n should increment by 1
100
+ const expectedN = (timeline.data!.n || 0) + 1;
101
+ iReckon(sir, mutatedTimeline.data!.n).asTo('data.n').isGonnaBe(expectedN);
102
+
103
+ iReckon(sir, mutatedTimeline.rel8ns!.past).asTo('past').isGonnaBeTruthy();
104
+ // past length should include the previous frame + whatever it had
105
+ iReckon(sir, mutatedTimeline.rel8ns!.past!.length).asTo('past length').isGonnaBe(initialPastLength + 1);
106
+ iReckon(sir, mutatedTimeline.rel8ns!.past!.at(-1)).asTo('past addr').isGonnaBe(getIbGibAddr({ ibGib: timeline }));
107
+ });
108
+
109
+ await ifWe(sir, `appendToTimeline`, async () => {
110
+ // Arrange
111
+ const resCreate = await createTimeline<TestData>({
112
+ space,
113
+ metaspace,
114
+ data: { n: 0 },
115
+ ib: 'timeline',
116
+ });
117
+ let timeline = resCreate.newIbGib;
118
+ const rel8nInfos = [{
119
+ rel8nName: 'attachment',
120
+ ibGibs: [timeline] // just attaching itself as a test, weird but valid structure
121
+ }];
122
+ const timelinePastLength = timeline.rel8ns?.past?.length || 0;
123
+
124
+ // Act
125
+ const appendedTimeline = await appendToTimeline({
126
+ timeline,
127
+ rel8nInfos,
128
+ metaspace,
129
+ space,
130
+ });
131
+
132
+ // Assert
133
+ iReckon(sir, appendedTimeline).asTo('appendedTimeline').isGonnaBeTruthy();
134
+ iReckon(sir, appendedTimeline.rel8ns!.attachment).asTo('attachment').isGonnaBeTruthy();
135
+ iReckon(sir, appendedTimeline.rel8ns!.past?.length).asTo('past').isGonnaBe(timelinePastLength + 1);
136
+ });
137
+
138
+ await ifWe(sir, `getHistory`, async () => {
139
+ // Arrange
140
+ let t0 = (await createTimeline<TestData>({ space, metaspace, data: { n: 0 }, ib: 'timeline' })).newIbGib;
141
+ let t1 = await mut8Timeline<TestData>({ timeline: t0, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 1 } } });
142
+ let t2 = await mut8Timeline<TestData>({ timeline: t1, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 2 } } });
143
+
144
+ // Act
145
+ const history = await getHistory({
146
+ timeline: t2,
147
+ metaspace,
148
+ space,
149
+ });
150
+
151
+ // Assert
152
+ // t0 is actually 2nd frame (fork -> mut8).
153
+ // so history is [genesis, t0, t1]. length 3.
154
+ iReckon(sir, history.orderedPastIbGibs.length).asTo('history length').isGonnaBe(3);
155
+ // index 0 is genesis (the fork)
156
+ // index 1 is t0
157
+ // index 2 is t1
158
+ iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[1] })).asTo('t0').isGonnaBe(getIbGibAddr({ ibGib: t0 }));
159
+ iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[2] })).asTo('t1').isGonnaBe(getIbGibAddr({ ibGib: t1 }));
160
+ iReckon(sir, getIbGibAddr({ ibGib: history.headIbGib })).asTo('head').isGonnaBe(getIbGibAddr({ ibGib: t2 }));
161
+ });
162
+
163
+ await ifWe(sir, `Concurrency & Locking (Stress Test)`, async () => {
164
+ // const concurrencyLevels = [1, 2, 5, 50, 1000]; // too slow, because the locking mechanism doesn't scale well.
165
+ const concurrencyLevels = [1, 2, 5, 50];
166
+
167
+ for (const N of concurrencyLevels) {
168
+ console.log(`[Stress Test] Testing concurrency level: ${N}`);
169
+
170
+ // Arrange: Baseline
171
+ let tInitial = (await createTimeline<TestData>({
172
+ space,
173
+ metaspace,
174
+ data: { n: 0, testId: `concurrent-${N}` },
175
+ ib: 'timeline',
176
+ })).newIbGib;
177
+
178
+ // Initial state check
179
+ const initialN = (tInitial.data!.n || 0); // should be 1
180
+ const historyInitial = await getHistory({ timeline: tInitial, metaspace, space });
181
+ const initialHistoryLength = historyInitial.orderedPastIbGibs.length; // should be 1 (genesis)
182
+
183
+ // Act: Launch N mutations simultaneously
184
+ const promises: Promise<any>[] = [];
185
+ for (let i = 0; i < N; i++) {
186
+ promises.push(mut8Timeline<TestData>({
187
+ timeline: tInitial, // All start referencing the same initial frame (or logically the timeline itself)
188
+ // Note: In reality, if we pass the *same* object tInitial, mut8Timeline should
189
+ // resolve the *latest* inside the function.
190
+ metaspace,
191
+ space,
192
+ mut8Opts: {
193
+ dataToAddOrPatch: {
194
+ uniq: i, // distinct data to ensure unique hashes if needed
195
+ }
196
+ }
197
+ // No skipLock! We want them to contend.
198
+ }));
199
+ }
200
+
201
+ try {
202
+ // Wait for all to complete
203
+ await Promise.all(promises);
204
+
205
+ // Verification
206
+ // 1. Get Latest Address
207
+ const resLatest = await getLatestAddrs({ ibGibs: [tInitial], space });
208
+ const latestAddr = resLatest.data!.latestAddrsMap![getIbGibAddr({ ibGib: tInitial })] as string;
209
+
210
+ iReckon(sir, latestAddr).asTo(`[N=${N}] latestAddr exists`).isGonnaBeTruthy();
211
+
212
+ // 2. Load the latest frame
213
+ const resGet = await getFromSpace({ addr: latestAddr, space });
214
+ const latestIbGib = resGet.ibGibs![0];
215
+
216
+ // 3. Verify data.n
217
+ // Initial n=1. We did N mutations.
218
+ // Each mutation increments nCounter.
219
+ const expectedN = initialN + N;
220
+ iReckon(sir, latestIbGib.data!.n).asTo(`[N=${N}] data.n should be ${expectedN}`).isGonnaBe(expectedN);
221
+
222
+ // 4. Verify Lineage (no divergence)
223
+ // History length should be initialHistoryLength + N
224
+ const history = await getHistory({ timeline: latestIbGib, metaspace, space });
225
+ const expectedHistoryLength = initialHistoryLength + N;
226
+ iReckon(sir, history.orderedPastIbGibs.length).asTo(`[N=${N}] history length`).isGonnaBe(expectedHistoryLength);
227
+
228
+ console.log(`[Stress Test] [N=${N}] SUCCESS. Final n=${latestIbGib.data!.n}`);
229
+
230
+ } catch (err) {
231
+ console.error(`[Stress Test] [N=${N}] FAILED:`, err);
232
+ throw err;
233
+ }
234
+ }
235
+ });
236
+
237
+ });
@@ -1539,11 +1539,37 @@ export abstract class MetaspaceBase implements MetaspaceService {
1539
1539
  if (!resGetLatest) { throw new Error(`resGetLatest falsy (E: 3851bbe4427ae11771f222234e8c6622)`); }
1540
1540
  if (!resGetLatest.data) { throw new Error(`invalid resGetLatest: data falsy (E: 134e0f1f65edc69c6951c32e00a4bb22)`); }
1541
1541
  if (resGetLatest.data.success) {
1542
- if (resGetLatest.data.addrs?.length === 1) {
1543
- return resGetLatest.data.addrs[0];
1544
- } else if (resGetLatest.data.addrsNotFound?.length === 1) {
1545
- return undefined;
1546
- } else if (resGetLatest.data.addrsErrored?.length === 1) {
1542
+ // Should have addrs map
1543
+ const latestAddrsMap = resGetLatest.data.latestAddrsMap;
1544
+ if (!latestAddrsMap) {
1545
+ // fallback to old way just in case? Or just error.
1546
+ // The error I saw had latestAddrsMap but no addrs.
1547
+ // So we should look at the map.
1548
+ if (resGetLatest.data.addrs?.length === 1) {
1549
+ return resGetLatest.data.addrs[0];
1550
+ } else if (resGetLatest.data.addrsNotFound?.length === 1) {
1551
+ return undefined;
1552
+ }
1553
+ } else {
1554
+ // We have the map. Ideally we want the one entry.
1555
+ const keys = Object.keys(latestAddrsMap);
1556
+ if (keys.length === 1) {
1557
+ return latestAddrsMap[keys[0]] || undefined;
1558
+ } else if (keys.length === 0) {
1559
+ // could be not found?
1560
+ if (resGetLatest.data.addrsNotFound?.length === 1) {
1561
+ return undefined;
1562
+ } else {
1563
+ // If we didn't find it, and success is true, maybe it's just undefined?
1564
+ // But usually getLatestAddrs returns map entries for found ones.
1565
+ return undefined;
1566
+ }
1567
+ } else {
1568
+ throw new Error(`(UNEXPECTED) latestAddrsMap has multiple entries? We only asked for one. (E: 790518290f6b46729017684698539222)`);
1569
+ }
1570
+ }
1571
+
1572
+ if (resGetLatest.data.addrsErrored?.length === 1) {
1547
1573
  const emsg = resGetLatest.data.errors?.join('|') ?? "[unspecified error(s)] (E: 24f338036aa84ac99e3c39a660207222)";
1548
1574
  throw new Error(`resGetLatest had error(s): ${emsg}`);
1549
1575
  } else {
@@ -9,6 +9,7 @@ import { DEFAULT_LOCAL_SPACE_POLLING_INTERVAL_MS, } from "../../../../witness/sp
9
9
  import { InnerSpace_V1, } from "../../inner-space/inner-space-v1.mjs";
10
10
  import { InnerSpaceData_V1 } from "../../inner-space/inner-space-types.mjs";
11
11
 
12
+
12
13
  const innerSpaces: { [tjpGib: string]: IbGibSpaceAny } = {};
13
14
 
14
15
  export const fnCreateNewLocalSpace: LocalSpaceFactoryFunction = async ({
@@ -96,10 +97,11 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
96
97
  if ((spaceDto as InnerSpace_V1).ibGibs) {
97
98
  return spaceDto as InnerSpace_V1;
98
99
  } else {
99
- console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`);
100
+ // test is outputting a lot of these logs
101
+ // console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`); // I want to keep this in if we need to turn the logging back on
100
102
 
101
103
  if (!spaceDto.data) { throw new Error(`invalid spaceDto. InnerSpace_V1 should have truthy data. (E: d402fda7a6a53668b655c2885029a423)`); }
102
- console.dir(spaceDto);
104
+ // console.dir(spaceDto); // I want to keep this in if we need to turn the logging back on
103
105
 
104
106
  const gibInfo = getGibInfo({ gib: spaceDto.gib });
105
107
  const tjpGib = gibInfo.tjpGib ?? spaceDto.gib!;