ro 4.4.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +42 -16
  3. data/MIGRATION.md +320 -0
  4. data/README.md +31 -19
  5. data/a.yml +60 -0
  6. data/bin/ro +10 -0
  7. data/lib/ro/_lib.rb +1 -1
  8. data/lib/ro/asset.rb +48 -6
  9. data/lib/ro/collection.rb +51 -13
  10. data/lib/ro/migrator.rb +285 -0
  11. data/lib/ro/node.rb +53 -13
  12. data/lib/ro/root.rb +75 -1
  13. data/lib/ro/script/migrate.rb +204 -0
  14. data/lib/ro/script/server.rb +1 -1
  15. data/lib/ro.rb +1 -0
  16. data/public/api/ro/index-1.json +82 -148
  17. data/public/api/ro/index.json +82 -148
  18. data/public/api/ro/nerd/fastest-possible-embeddings/index.json +7 -8
  19. data/public/api/ro/nerd/ima/index.json +3 -4
  20. data/public/api/ro/nerd/index/index.json +5 -6
  21. data/public/api/ro/nerd/index-1.json +15 -18
  22. data/public/api/ro/nerd/index.json +15 -18
  23. data/public/api/ro/pages/contact/index.json +4 -5
  24. data/public/api/ro/pages/cv/index.json +3 -4
  25. data/public/api/ro/pages/disco/index.json +9 -10
  26. data/public/api/ro/pages/index/index.json +2 -3
  27. data/public/api/ro/pages/index-1.json +25 -82
  28. data/public/api/ro/pages/index.json +25 -82
  29. data/public/api/ro/pages/jess/index.json +4 -5
  30. data/public/api/ro/pages/now/index.json +3 -4
  31. data/public/api/ro/posts/almost-died-in-an-ice-cave/index.json +21 -22
  32. data/public/api/ro/posts/facebook-and-global-extremism/index.json +8 -9
  33. data/public/api/ro/posts/index-1.json +42 -48
  34. data/public/api/ro/posts/index.json +42 -48
  35. data/public/api/ro/posts/lemmings-considered-harmful/index.json +3 -4
  36. data/public/api/ro/posts/lost-in-the-desert/index.json +3 -4
  37. data/public/api/ro/posts/mission/index.json +3 -4
  38. data/public/api/ro/posts/return-your-laptop/index.json +4 -5
  39. data/ro.gemspec +247 -18
  40. data/specs/001-simplify-asset-structure/IMPLEMENTATION_SUMMARY.md +212 -0
  41. data/specs/001-simplify-asset-structure/checklists/requirements.md +36 -0
  42. data/specs/001-simplify-asset-structure/contracts/collection_api.md +407 -0
  43. data/specs/001-simplify-asset-structure/contracts/migrator_api.md +461 -0
  44. data/specs/001-simplify-asset-structure/contracts/node_api.md +294 -0
  45. data/specs/001-simplify-asset-structure/data-model.md +381 -0
  46. data/specs/001-simplify-asset-structure/plan.md +90 -0
  47. data/specs/001-simplify-asset-structure/quickstart.md +575 -0
  48. data/specs/001-simplify-asset-structure/research.md +333 -0
  49. data/specs/001-simplify-asset-structure/spec.md +127 -0
  50. data/specs/001-simplify-asset-structure/tasks.md +349 -0
  51. data/test/fixtures/new_structure/mixed/test-json.json +5 -0
  52. data/test/fixtures/new_structure/mixed/test-yaml.yml +3 -0
  53. data/test/fixtures/new_structure/posts/metadata-only.yml +7 -0
  54. data/test/fixtures/new_structure/posts/nested-test/assets/subdirectory/image.png +2 -0
  55. data/test/fixtures/new_structure/posts/nested-test.yml +7 -0
  56. data/test/fixtures/new_structure/posts/sample-post/assets/body.md +5 -0
  57. data/test/fixtures/new_structure/posts/sample-post/assets/image.jpg +2 -0
  58. data/test/fixtures/new_structure/posts/sample-post.yml +7 -0
  59. data/test/fixtures/old_structure/posts/assets-only/assets/test.txt +1 -0
  60. data/test/fixtures/old_structure/posts/sample-post/assets/body.md +5 -0
  61. data/test/fixtures/old_structure/posts/sample-post/assets/image.jpg +2 -0
  62. data/test/fixtures/old_structure/posts/sample-post/attributes.yml +2 -0
  63. data/test/integration/ro_integration_test.rb +165 -0
  64. data/test/test_helper.rb +149 -0
  65. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/assets/image.jpg +2 -0
  66. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/attributes.yml +7 -0
  67. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/body.md +5 -0
  68. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/assets/image.jpg +2 -0
  69. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/attributes.yml +7 -0
  70. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/body.md +5 -0
  71. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/assets/image.jpg +2 -0
  72. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/attributes.yml +7 -0
  73. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/body.md +5 -0
  74. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/assets/image.jpg +2 -0
  75. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/attributes.yml +7 -0
  76. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/body.md +5 -0
  77. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/assets/image.jpg +2 -0
  78. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/attributes.yml +7 -0
  79. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/body.md +5 -0
  80. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/assets/image.jpg +2 -0
  81. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/attributes.yml +7 -0
  82. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/body.md +5 -0
  83. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/body.md +5 -0
  84. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/image.jpg +2 -0
  85. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post.yml +7 -0
  86. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/body.md +5 -0
  87. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/image.jpg +2 -0
  88. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post.yml +7 -0
  89. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/body.md +5 -0
  90. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/image.jpg +2 -0
  91. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/attributes.yml +2 -0
  92. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/body.md +5 -0
  93. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/image.jpg +2 -0
  94. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/attributes.yml +2 -0
  95. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/body.md +5 -0
  96. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/image.jpg +2 -0
  97. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/attributes.yml +2 -0
  98. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/body.md +5 -0
  99. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/image.jpg +2 -0
  100. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/attributes.yml +2 -0
  101. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only/assets/test.txt +1 -0
  102. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/body.md +5 -0
  103. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/image.jpg +2 -0
  104. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/attributes.yml +2 -0
  105. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only/assets/test.txt +1 -0
  106. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/body.md +5 -0
  107. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/image.jpg +2 -0
  108. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/attributes.yml +2 -0
  109. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only/assets/test.txt +1 -0
  110. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/body.md +5 -0
  111. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/image.jpg +2 -0
  112. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/attributes.yml +2 -0
  113. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only/assets/test.txt +1 -0
  114. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/body.md +5 -0
  115. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/image.jpg +2 -0
  116. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/attributes.yml +2 -0
  117. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only/assets/test.txt +1 -0
  118. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/body.md +5 -0
  119. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/image.jpg +2 -0
  120. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/attributes.yml +2 -0
  121. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only/assets/test.txt +1 -0
  122. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/body.md +5 -0
  123. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/image.jpg +2 -0
  124. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/attributes.yml +2 -0
  125. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only/assets/test.txt +1 -0
  126. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/body.md +5 -0
  127. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/image.jpg +2 -0
  128. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/attributes.yml +2 -0
  129. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only/assets/test.txt +1 -0
  130. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/body.md +5 -0
  131. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/image.jpg +2 -0
  132. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/attributes.yml +2 -0
  133. data/test/tmp/new_structure_test_1760746452/mixed/test-json.json +5 -0
  134. data/test/tmp/new_structure_test_1760746452/mixed/test-yaml.yml +3 -0
  135. data/test/tmp/new_structure_test_1760746452/posts/metadata-only.yml +7 -0
  136. data/test/tmp/new_structure_test_1760746452/posts/nested-test/subdirectory/image.png +2 -0
  137. data/test/tmp/new_structure_test_1760746452/posts/nested-test.yml +7 -0
  138. data/test/tmp/new_structure_test_1760746452/posts/sample-post/body.md +5 -0
  139. data/test/tmp/new_structure_test_1760746452/posts/sample-post/image.jpg +2 -0
  140. data/test/tmp/new_structure_test_1760746452/posts/sample-post.yml +7 -0
  141. data/test/unit/asset_test.rb +90 -0
  142. data/test/unit/collection_test.rb +127 -0
  143. data/test/unit/migrator_test.rb +209 -0
  144. data/test/unit/node_test.rb +138 -0
  145. metadata +127 -19
  146. data/public/api/ro/pages/about/index.json +0 -60
  147. /data/public/ro/nerd/{fastest-possible-embeddings/attributes.yml → fastest-possible-embeddings.yml} +0 -0
  148. /data/public/ro/nerd/{ima/attributes.yml → ima.yml} +0 -0
  149. /data/public/ro/nerd/{index/attributes.yml → index.yml} +0 -0
  150. /data/public/ro/pages/{contact/attributes.yml → contact.yml} +0 -0
  151. /data/public/ro/pages/{cv/attributes.yml → cv.yml} +0 -0
  152. /data/public/ro/pages/{disco/attributes.yml → disco.yml} +0 -0
  153. /data/public/ro/pages/{index/attributes.yml → index.yml} +0 -0
  154. /data/public/ro/pages/{jess/attributes.yml → jess.yml} +0 -0
  155. /data/public/ro/pages/{now/attributes.yml → now.yml} +0 -0
  156. /data/public/ro/posts/{almost-died-in-an-ice-cave/attributes.yml → almost-died-in-an-ice-cave.yml} +0 -0
  157. /data/public/ro/posts/{facebook-and-global-extremism/attributes.yml → facebook-and-global-extremism.yml} +0 -0
  158. /data/public/ro/posts/{lemmings-considered-harmful/attributes.yml → lemmings-considered-harmful.yml} +0 -0
  159. /data/public/ro/posts/{lost-in-the-desert/attributes.yml → lost-in-the-desert.yml} +0 -0
  160. /data/public/ro/posts/{mission/attributes.yml → mission.yml} +0 -0
  161. /data/public/ro/posts/{return-your-laptop/attributes.yml → return-your-laptop.yml} +0 -0
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "body": "<div class=\"ro markdown\">\n <h5 id=\"the-rise-and-fall-of-the-lemmings\">the rise and fall of the lemmings</h5>\n\n<p><img src='/ro/posts/lemmings-considered-harmful/assets/lemming.jpeg' alt=\"\" /></p>\n\n<p>in the heart of the tundra, a forgotten corner of the world, a small colony of lemmings thrived. these furry creatures, with their insatiable appetite for grass and their unwavering determination to reproduce, had long been a part of the delicate ecosystem. however, a series of fortunate events, or perhaps unfortunate coincidences, led to an unprecedented boom in their population.</p>\n\n<p>the lemmings, once a modest presence, began to multiply at an alarming rate.\ntheir numbers swelled, their burrows multiplied, and their insatiable hunger\nfor grass depleted the once-abundant fields. the other creatures of the\ntundra, the foxes, the owls, and the hares, watched in growing alarm as\ntheir food sources dwindled. the foxes and owls, simply outnumbered, were\nunable to compete with the overwhelming numbers of lemmings and the hares\nsimply could not find enough food.</p>\n\n<p>the lemmings, oblivious to the plight of their fellow inhabitants, continued their relentless pursuit of reproduction. their population grew exponentially, their tunnels crisscrossing the landscape like a network of subterranean highways. the once-verdant tundra began to show signs of strain, the grass patches turning brown and barren.</p>\n\n<p>the hares, once the dominant herbivores of the tundra, were now forced to compete with the insatiable lemmings for the dwindling food supply. their numbers dwindled, their once-proud herds reduced to scattered individuals.</p>\n\n<p>the lemmings, however, remained unconcerned. their focus remained firmly on reproduction, their tunnels expanding further, their hunger growing more insatiable. the tundra, once a vibrant ecosystem, was now a desolate wasteland, a victim of the lemmings’ unchecked growth.</p>\n\n<p>as the food supply dwindled, the lemmings began to turn on each other. fights erupted over scraps of grass, burrows were invaded, and the once-united colony fractured into warring factions. disease, a consequence of overcrowding and malnutrition, spread through the weakened population.</p>\n\n<p>amidst the chaos, a small group of lemmings emerged, driven by a sense of compassion and a desire to save their kind.</p>\n\n<hr />\n\n<p><strong>these enlightened lemmings, known as the “reformers,” sought to address the issues of overpopulation, disease, and infighting.</strong></p>\n\n<hr />\n\n<p>the reformers, armed with a deep understanding of their society, implemented a series of reforms aimed at improving living conditions and promoting harmony. they established communal granaries to ensure fair distribution of food, constructed improved burrows to prevent disease outbreaks, and promoted peaceful coexistence among the different factions.</p>\n\n<p>the reformers’ efforts yielded positive results. the death rate decreased, the incidence of disease declined, and the overall quality of life for the lemmings improved. however, the underlying problems of overpopulation and resource depletion remained unresolved.</p>\n\n<p>the reformers, blinded by their focus on short-term gains, failed to recognize the long-term consequences of their actions. their interventions, while seemingly beneficial, only served to prolong the inevitable collapse of the lemming population.</p>\n\n<p>as the tundra’s carrying capacity was exceeded, the lemmings’ numbers continued to rise, their impact on the ecosystem intensifying. the once-vibrant ecosystem, now dominated by the lemmings, could no longer sustain life. the foxes, the owls, and the hares, unable to compete with the overwhelming numbers of lemmings, perished.</p>\n\n<p>the lemmings, once a vital part of the tundra’s ecosystem, had become its destroyers. their unchecked growth, fueled by a relentless pursuit of reproduction, had led to the demise of their own kind and the destruction of their habitat.</p>\n\n<blockquote>\n <p>frozen tundra lies<br />\nlemmings’ ghostly shadows dance <br />\nnature’s balance lost</p>\n</blockquote>\n\n</div>\n",
12
12
  "assets": {
13
- "assets/lemming.jpeg": {
13
+ "lemming.jpeg": {
14
14
  "url": "/ro/posts/lemmings-considered-harmful/assets/lemming.jpeg",
15
15
  "path": "posts/lemmings-considered-harmful/assets/lemming.jpeg",
16
16
  "size": 8,
@@ -28,11 +28,10 @@
28
28
  "id": "lemmings-considered-harmful",
29
29
  "urls": [
30
30
  "/ro/posts/lemmings-considered-harmful/assets/lemming.jpeg",
31
- "/ro/posts/lemmings-considered-harmful/attributes.yml",
32
31
  "/ro/posts/lemmings-considered-harmful/body.md"
33
32
  ],
34
- "created_at": "2025-04-23 04:38:29 +0000",
35
- "updated_at": "2025-04-23 04:38:29 +0000",
33
+ "created_at": "2025-10-18 03:05:00 +0000",
34
+ "updated_at": "2025-10-18 03:05:00 +0000",
36
35
  "rel": {
37
36
  "curr": "posts/lemmings-considered-harmful",
38
37
  "prev": "posts/facebook-and-global-extremism",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "body": "<div class=\"ro markdown\">\n <p>following is an AI generated summary of this article, so you won’t have to read it!</p>\n\n<blockquote>\n <h3>”</h3>\n <h1 id=\"fixme\">FIXME</h1>\n <h3 id=\"-1\">”</h3>\n</blockquote>\n\n<h1 id=\"writeme\">WRITEME</h1>\n\n</div>\n",
12
12
  "assets": {
13
- "assets/og.jpg": {
13
+ "og.jpg": {
14
14
  "url": "/ro/posts/lost-in-the-desert/assets/og.jpg",
15
15
  "path": "posts/lost-in-the-desert/assets/og.jpg",
16
16
  "size": 8,
@@ -28,11 +28,10 @@
28
28
  "id": "lost-in-the-desert",
29
29
  "urls": [
30
30
  "/ro/posts/lost-in-the-desert/assets/og.jpg",
31
- "/ro/posts/lost-in-the-desert/attributes.yml",
32
31
  "/ro/posts/lost-in-the-desert/body.md"
33
32
  ],
34
- "created_at": "2025-04-23 04:38:29 +0000",
35
- "updated_at": "2025-04-23 04:38:29 +0000",
33
+ "created_at": "2025-10-18 03:05:00 +0000",
34
+ "updated_at": "2025-10-18 03:05:00 +0000",
36
35
  "rel": {
37
36
  "curr": "posts/lost-in-the-desert",
38
37
  "prev": "posts/lemmings-considered-harmful",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "body": "<div class=\"ro markdown\">\n <p>everyone should have a mission statement. here is mine.</p>\n\n<ul>\n <li><a href=\"/jess\">jess</a> and i wanna shower with tomatoes growing in it, and a dirt\nfloor. like this one.</li>\n</ul>\n\n</div>\n",
12
12
  "assets": {
13
- "assets/og.jpg": {
13
+ "og.jpg": {
14
14
  "url": "/ro/posts/mission/assets/og.jpg",
15
15
  "path": "posts/mission/assets/og.jpg",
16
16
  "size": 8,
@@ -28,11 +28,10 @@
28
28
  "id": "mission",
29
29
  "urls": [
30
30
  "/ro/posts/mission/assets/og.jpg",
31
- "/ro/posts/mission/attributes.yml",
32
31
  "/ro/posts/mission/body.md"
33
32
  ],
34
- "created_at": "2025-04-23 04:38:29 +0000",
35
- "updated_at": "2025-04-23 04:38:29 +0000",
33
+ "created_at": "2025-10-18 03:05:00 +0000",
34
+ "updated_at": "2025-10-18 03:05:00 +0000",
36
35
  "rel": {
37
36
  "curr": "posts/mission",
38
37
  "prev": "posts/lost-in-the-desert",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "body": "<div class=\"ro markdown\">\n <p>following is an AI generated summary of this article, so you won’t have to read it!</p>\n\n<blockquote>\n <h3>”</h3>\n <p>A user on LinkedIn suggested that terminated employees should <strong>always</strong>\nreturn thier laptops, and that issue was cut and dried.</p>\n\n <p><a href=\"/disco\">disco</a>, a tool for bringing real human subjectivity to AI was then\nused to examine public sentiment about this statement.</p>\n\n <p>The responses varied, with some people feeling that employees should keep the\nlaptops as a small consolation or to help with job searching, while others felt\nthat keeping company property was unethical or a security risk.</p>\n\n <p>Some people suggested that companies offer a buyout option for the laptops,\nwhile others felt that a clean break was best.</p>\n\n <p>The responses highlight the complex and multifaceted nature of the issue, with\nno easy answers or universal agreement.</p>\n <h3 id=\"-1\">”</h3>\n</blockquote>\n\n<p>i recently saw this unsolicited and undirected “suggestion” on linked-in (home\nof the weak sauce), suggesting that the <strong>only</strong> ethical move is to return your\nlaptop when you’ve been fired.</p>\n\n<p><img src='/ro/posts/return-your-laptop/assets/return-your-laptop.png' alt=\"return your laptop\" /></p>\n\n<p>while i do not condone brazen theft or just being a jerk, i personally\nconsidered this post astonishingly tone deaf, in light of the fear so many who\nhave recently been laid off are feeling. for many, a computer, and the\ninternet, are their only lifelines to a potential future.</p>\n\n<p>this situation is one i have experienced personally. i’ve been laid off, a\nfew years back, and went through a very, very difficult period (still to some\ndegree) where getting a job was a strangely recursive scenario - that is to\nsay, i needed money to buy a computer capable enough, to keep up with the\ntimes, to stay sharp, to get a job. this is a real phenomenon experienced by\nmany. a nice laptop for a developer costs a cool $4k.</p>\n\n<p>dan seemed pretty sure of himself so, i decided to run his theory through my\nnew thing, which i am calling <a href=\"/disco\">disco</a>. as you can read for yourself,\ni think the issue is more nuanced than he suggests, and that, in this period\nof history, considering the massive ill will the general public is\nsnowballing, and getting ready to toss at corporations, it’s worth seeing what\nothers might think. fwiw, <a href=\"/disco\">disco</a> lets you ask any question, and then\nget back answers that are informed by real human beings, at scale.</p>\n\n<p>it’s my little attempt to use their weapons against them.</p>\n\n<p>take some time, to review <a href=\"https://gist.github.com/ahoward/9696f63c118f7b9f102b04e5b4196ca5\">these results</a></p>\n\n<p><a href=\"/contact\">what do you think?</a></p>\n\n<p>ps. in a future post, i’ll show you how you can do way, way, way better with\nyour development environment by ditching apple, microsoft, etc. and moving to\nlinux and a chromebook. my current dev box costs me $320 at best buy and i’m\nmore productive than ever.</p>\n\n<p><img src='/ro/posts/return-your-laptop/assets/og.jpg' alt=\"\" /></p>\n\n</div>\n",
12
12
  "assets": {
13
- "assets/og.jpg": {
13
+ "og.jpg": {
14
14
  "url": "/ro/posts/return-your-laptop/assets/og.jpg",
15
15
  "path": "posts/return-your-laptop/assets/og.jpg",
16
16
  "size": 8,
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "src": null
23
23
  },
24
- "assets/return-your-laptop.png": {
24
+ "return-your-laptop.png": {
25
25
  "url": "/ro/posts/return-your-laptop/assets/return-your-laptop.png",
26
26
  "path": "posts/return-your-laptop/assets/return-your-laptop.png",
27
27
  "size": 8,
@@ -40,11 +40,10 @@
40
40
  "urls": [
41
41
  "/ro/posts/return-your-laptop/assets/og.jpg",
42
42
  "/ro/posts/return-your-laptop/assets/return-your-laptop.png",
43
- "/ro/posts/return-your-laptop/attributes.yml",
44
43
  "/ro/posts/return-your-laptop/body.md"
45
44
  ],
46
- "created_at": "2025-04-23 04:38:29 +0000",
47
- "updated_at": "2025-04-23 04:38:29 +0000",
45
+ "created_at": "2025-10-18 03:05:00 +0000",
46
+ "updated_at": "2025-10-18 03:05:00 +0000",
48
47
  "rel": {
49
48
  "curr": "posts/return-your-laptop",
50
49
  "prev": "posts/mission",
data/ro.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "ro"
6
- spec.version = "4.4.0"
6
+ spec.version = "5.1.0"
7
7
  spec.required_ruby_version = '>= 3.0'
8
8
  spec.platform = Gem::Platform::RUBY
9
9
  spec.summary = "all your content in github, as god intended"
@@ -14,9 +14,11 @@ Gem::Specification::new do |spec|
14
14
  ["Gemfile",
15
15
  "Gemfile.lock",
16
16
  "LICENSE",
17
+ "MIGRATION.md",
17
18
  "README.md",
18
19
  "README.md.erb",
19
20
  "Rakefile",
21
+ "a.yml",
20
22
  "bin",
21
23
  "bin/ro",
22
24
  "lib",
@@ -33,6 +35,7 @@ Gem::Specification::new do |spec|
33
35
  "lib/ro/html_safe.rb",
34
36
  "lib/ro/klass.rb",
35
37
  "lib/ro/methods.rb",
38
+ "lib/ro/migrator.rb",
36
39
  "lib/ro/model.rb",
37
40
  "lib/ro/node.rb",
38
41
  "lib/ro/pagination.rb",
@@ -42,6 +45,7 @@ Gem::Specification::new do |spec|
42
45
  "lib/ro/script.rb",
43
46
  "lib/ro/script/builder.rb",
44
47
  "lib/ro/script/console.rb",
48
+ "lib/ro/script/migrate.rb",
45
49
  "lib/ro/script/server.rb",
46
50
  "lib/ro/slug.rb",
47
51
  "lib/ro/template",
@@ -63,8 +67,6 @@ Gem::Specification::new do |spec|
63
67
  "public/api/ro/nerd/index.json",
64
68
  "public/api/ro/nerd/index/index.json",
65
69
  "public/api/ro/pages",
66
- "public/api/ro/pages/about",
67
- "public/api/ro/pages/about/index.json",
68
70
  "public/api/ro/pages/contact",
69
71
  "public/api/ro/pages/contact/index.json",
70
72
  "public/api/ro/pages/cv",
@@ -97,6 +99,7 @@ Gem::Specification::new do |spec|
97
99
  "public/ro",
98
100
  "public/ro/nerd",
99
101
  "public/ro/nerd/fastest-possible-embeddings",
102
+ "public/ro/nerd/fastest-possible-embeddings.yml",
100
103
  "public/ro/nerd/fastest-possible-embeddings/assets",
101
104
  "public/ro/nerd/fastest-possible-embeddings/assets/giraffe.jpeg",
102
105
  "public/ro/nerd/fastest-possible-embeddings/assets/let-me-in.jpg",
@@ -104,19 +107,18 @@ Gem::Specification::new do |spec|
104
107
  "public/ro/nerd/fastest-possible-embeddings/assets/src/fastembed.js",
105
108
  "public/ro/nerd/fastest-possible-embeddings/assets/src/fastembed.rs",
106
109
  "public/ro/nerd/fastest-possible-embeddings/assets/terminal.jpg",
107
- "public/ro/nerd/fastest-possible-embeddings/attributes.yml",
108
110
  "public/ro/nerd/fastest-possible-embeddings/body.md",
109
111
  "public/ro/nerd/ima",
112
+ "public/ro/nerd/ima.yml",
110
113
  "public/ro/nerd/ima/assets",
111
114
  "public/ro/nerd/ima/assets/og.jpeg",
112
- "public/ro/nerd/ima/attributes.yml",
113
115
  "public/ro/nerd/ima/body.md",
114
116
  "public/ro/nerd/index",
117
+ "public/ro/nerd/index.yml",
115
118
  "public/ro/nerd/index/assets",
116
119
  "public/ro/nerd/index/assets/giraffe.jpeg",
117
120
  "public/ro/nerd/index/assets/let-me-in.jpg",
118
121
  "public/ro/nerd/index/assets/terminal.jpg",
119
- "public/ro/nerd/index/attributes.yml",
120
122
  "public/ro/nerd/index/body.md",
121
123
  "public/ro/pages",
122
124
  "public/ro/pages/about",
@@ -125,16 +127,17 @@ Gem::Specification::new do |spec|
125
127
  "public/ro/pages/about/assets/speak-english-pulp-fiction.gif",
126
128
  "public/ro/pages/about/body.md",
127
129
  "public/ro/pages/contact",
130
+ "public/ro/pages/contact.yml",
128
131
  "public/ro/pages/contact/assets",
129
132
  "public/ro/pages/contact/assets/giraffe.jpeg",
130
- "public/ro/pages/contact/attributes.yml",
131
133
  "public/ro/pages/contact/body.md",
132
134
  "public/ro/pages/cv",
135
+ "public/ro/pages/cv.yml",
133
136
  "public/ro/pages/cv/assets",
134
137
  "public/ro/pages/cv/assets/ara.jpg",
135
- "public/ro/pages/cv/attributes.yml",
136
138
  "public/ro/pages/cv/body.md",
137
139
  "public/ro/pages/disco",
140
+ "public/ro/pages/disco.yml",
138
141
  "public/ro/pages/disco/assets",
139
142
  "public/ro/pages/disco/assets/disco.jpg",
140
143
  "public/ro/pages/disco/assets/disco.png",
@@ -144,7 +147,6 @@ Gem::Specification::new do |spec|
144
147
  "public/ro/pages/disco/assets/src/fortune-500.md",
145
148
  "public/ro/pages/disco/assets/src/greed.md",
146
149
  "public/ro/pages/disco/assets/src/up-at-night.md",
147
- "public/ro/pages/disco/attributes.yml",
148
150
  "public/ro/pages/disco/body.md",
149
151
  "public/ro/pages/disco/samples",
150
152
  "public/ro/pages/disco/samples/environment.md",
@@ -152,21 +154,22 @@ Gem::Specification::new do |spec|
152
154
  "public/ro/pages/disco/samples/greed.md",
153
155
  "public/ro/pages/disco/samples/up-at-night.md",
154
156
  "public/ro/pages/index",
155
- "public/ro/pages/index/attributes.yml",
157
+ "public/ro/pages/index.yml",
156
158
  "public/ro/pages/index/body.md",
157
159
  "public/ro/pages/jess",
160
+ "public/ro/pages/jess.yml",
158
161
  "public/ro/pages/jess/assets",
159
162
  "public/ro/pages/jess/assets/og.jpg",
160
163
  "public/ro/pages/jess/assets/speak-english-pulp-fiction.gif",
161
- "public/ro/pages/jess/attributes.yml",
162
164
  "public/ro/pages/jess/body.md",
163
165
  "public/ro/pages/now",
166
+ "public/ro/pages/now.yml",
164
167
  "public/ro/pages/now/assets",
165
168
  "public/ro/pages/now/assets/speak-english-pulp-fiction.gif",
166
- "public/ro/pages/now/attributes.yml",
167
169
  "public/ro/pages/now/body.md",
168
170
  "public/ro/posts",
169
171
  "public/ro/posts/almost-died-in-an-ice-cave",
172
+ "public/ro/posts/almost-died-in-an-ice-cave.yml",
170
173
  "public/ro/posts/almost-died-in-an-ice-cave/assets",
171
174
  "public/ro/posts/almost-died-in-an-ice-cave/assets/image1.png",
172
175
  "public/ro/posts/almost-died-in-an-ice-cave/assets/image10.png",
@@ -187,9 +190,9 @@ Gem::Specification::new do |spec|
187
190
  "public/ro/posts/almost-died-in-an-ice-cave/assets/levi-rawr.png",
188
191
  "public/ro/posts/almost-died-in-an-ice-cave/assets/og.jpg",
189
192
  "public/ro/posts/almost-died-in-an-ice-cave/assets/purple-heart.jpg",
190
- "public/ro/posts/almost-died-in-an-ice-cave/attributes.yml",
191
193
  "public/ro/posts/almost-died-in-an-ice-cave/body.md",
192
194
  "public/ro/posts/facebook-and-global-extremism",
195
+ "public/ro/posts/facebook-and-global-extremism.yml",
193
196
  "public/ro/posts/facebook-and-global-extremism/assets",
194
197
  "public/ro/posts/facebook-and-global-extremism/assets/background.html",
195
198
  "public/ro/posts/facebook-and-global-extremism/assets/background.md",
@@ -197,32 +200,258 @@ Gem::Specification::new do |spec|
197
200
  "public/ro/posts/facebook-and-global-extremism/assets/prompt.txt",
198
201
  "public/ro/posts/facebook-and-global-extremism/assets/results.md",
199
202
  "public/ro/posts/facebook-and-global-extremism/assets/survey.txt",
200
- "public/ro/posts/facebook-and-global-extremism/attributes.yml",
201
203
  "public/ro/posts/facebook-and-global-extremism/body.md",
202
204
  "public/ro/posts/lemmings-considered-harmful",
205
+ "public/ro/posts/lemmings-considered-harmful.yml",
203
206
  "public/ro/posts/lemmings-considered-harmful/assets",
204
207
  "public/ro/posts/lemmings-considered-harmful/assets/lemming.jpeg",
205
- "public/ro/posts/lemmings-considered-harmful/attributes.yml",
206
208
  "public/ro/posts/lemmings-considered-harmful/body.md",
207
209
  "public/ro/posts/lost-in-the-desert",
210
+ "public/ro/posts/lost-in-the-desert.yml",
208
211
  "public/ro/posts/lost-in-the-desert/assets",
209
212
  "public/ro/posts/lost-in-the-desert/assets/og.jpg",
210
- "public/ro/posts/lost-in-the-desert/attributes.yml",
211
213
  "public/ro/posts/lost-in-the-desert/body.md",
212
214
  "public/ro/posts/mission",
215
+ "public/ro/posts/mission.yml",
213
216
  "public/ro/posts/mission/assets",
214
217
  "public/ro/posts/mission/assets/og.jpg",
215
- "public/ro/posts/mission/attributes.yml",
216
218
  "public/ro/posts/mission/body.md",
217
219
  "public/ro/posts/return-your-laptop",
220
+ "public/ro/posts/return-your-laptop.yml",
218
221
  "public/ro/posts/return-your-laptop/assets",
219
222
  "public/ro/posts/return-your-laptop/assets/og.jpg",
220
223
  "public/ro/posts/return-your-laptop/assets/return-your-laptop.png",
221
- "public/ro/posts/return-your-laptop/attributes.yml",
222
224
  "public/ro/posts/return-your-laptop/body.md",
223
225
  "ro.gemspec",
224
226
  "scripts",
225
227
  "scripts/speedtest.rb",
228
+ "specs",
229
+ "specs/001-simplify-asset-structure",
230
+ "specs/001-simplify-asset-structure/IMPLEMENTATION_SUMMARY.md",
231
+ "specs/001-simplify-asset-structure/checklists",
232
+ "specs/001-simplify-asset-structure/checklists/requirements.md",
233
+ "specs/001-simplify-asset-structure/contracts",
234
+ "specs/001-simplify-asset-structure/contracts/collection_api.md",
235
+ "specs/001-simplify-asset-structure/contracts/migrator_api.md",
236
+ "specs/001-simplify-asset-structure/contracts/node_api.md",
237
+ "specs/001-simplify-asset-structure/data-model.md",
238
+ "specs/001-simplify-asset-structure/plan.md",
239
+ "specs/001-simplify-asset-structure/quickstart.md",
240
+ "specs/001-simplify-asset-structure/research.md",
241
+ "specs/001-simplify-asset-structure/spec.md",
242
+ "specs/001-simplify-asset-structure/tasks.md",
243
+ "test",
244
+ "test/fixtures",
245
+ "test/fixtures/new_structure",
246
+ "test/fixtures/new_structure/mixed",
247
+ "test/fixtures/new_structure/mixed/test-json.json",
248
+ "test/fixtures/new_structure/mixed/test-yaml.yml",
249
+ "test/fixtures/new_structure/posts",
250
+ "test/fixtures/new_structure/posts/metadata-only.yml",
251
+ "test/fixtures/new_structure/posts/nested-test",
252
+ "test/fixtures/new_structure/posts/nested-test.yml",
253
+ "test/fixtures/new_structure/posts/nested-test/assets",
254
+ "test/fixtures/new_structure/posts/nested-test/assets/subdirectory",
255
+ "test/fixtures/new_structure/posts/nested-test/assets/subdirectory/image.png",
256
+ "test/fixtures/new_structure/posts/sample-post",
257
+ "test/fixtures/new_structure/posts/sample-post.yml",
258
+ "test/fixtures/new_structure/posts/sample-post/assets",
259
+ "test/fixtures/new_structure/posts/sample-post/assets/body.md",
260
+ "test/fixtures/new_structure/posts/sample-post/assets/image.jpg",
261
+ "test/fixtures/old_structure",
262
+ "test/fixtures/old_structure/posts",
263
+ "test/fixtures/old_structure/posts/assets-only",
264
+ "test/fixtures/old_structure/posts/assets-only/assets",
265
+ "test/fixtures/old_structure/posts/assets-only/assets/test.txt",
266
+ "test/fixtures/old_structure/posts/sample-post",
267
+ "test/fixtures/old_structure/posts/sample-post/assets",
268
+ "test/fixtures/old_structure/posts/sample-post/assets/body.md",
269
+ "test/fixtures/old_structure/posts/sample-post/assets/image.jpg",
270
+ "test/fixtures/old_structure/posts/sample-post/attributes.yml",
271
+ "test/integration",
272
+ "test/integration/ro_integration_test.rb",
273
+ "test/test_helper.rb",
274
+ "test/tmp/migration_test_1760746513.backup.20251018001513",
275
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513",
276
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts",
277
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post",
278
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/assets",
279
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/assets/image.jpg",
280
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/attributes.yml",
281
+ "test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/body.md",
282
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts",
283
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post",
284
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/assets",
285
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/assets/image.jpg",
286
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/attributes.yml",
287
+ "test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/body.md",
288
+ "test/tmp/migration_test_1760746556.backup.20251018001556",
289
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556",
290
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts",
291
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post",
292
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/assets",
293
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/assets/image.jpg",
294
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/attributes.yml",
295
+ "test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/body.md",
296
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts",
297
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post",
298
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/assets",
299
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/assets/image.jpg",
300
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/attributes.yml",
301
+ "test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/body.md",
302
+ "test/tmp/migration_test_1760755248.backup.20251018024048",
303
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248",
304
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts",
305
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post",
306
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/assets",
307
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/assets/image.jpg",
308
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/attributes.yml",
309
+ "test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/body.md",
310
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts",
311
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post",
312
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/assets",
313
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/assets/image.jpg",
314
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/attributes.yml",
315
+ "test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/body.md",
316
+ "test/tmp/migration_test_1760758803.backup.20251018034003",
317
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803",
318
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts",
319
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post",
320
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post.yml",
321
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/body.md",
322
+ "test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/image.jpg",
323
+ "test/tmp/migration_test_1760758803.backup.20251018034003/posts",
324
+ "test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post",
325
+ "test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post.yml",
326
+ "test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/body.md",
327
+ "test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/image.jpg",
328
+ "test/tmp/migration_test_1760758869.backup.20251018034109",
329
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869",
330
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts",
331
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post",
332
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets",
333
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/body.md",
334
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/image.jpg",
335
+ "test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/attributes.yml",
336
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts",
337
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post",
338
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets",
339
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/body.md",
340
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/image.jpg",
341
+ "test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/attributes.yml",
342
+ "test/tmp/migration_test_1760758920.backup.20251018034200",
343
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920",
344
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts",
345
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post",
346
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets",
347
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/body.md",
348
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/image.jpg",
349
+ "test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/attributes.yml",
350
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts",
351
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post",
352
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets",
353
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/body.md",
354
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/image.jpg",
355
+ "test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/attributes.yml",
356
+ "test/tmp/migration_test_1760824728.backup.20251018215848",
357
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728",
358
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts",
359
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only",
360
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only/assets",
361
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only/assets/test.txt",
362
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post",
363
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets",
364
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/body.md",
365
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/image.jpg",
366
+ "test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/attributes.yml",
367
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts",
368
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only",
369
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only/assets",
370
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only/assets/test.txt",
371
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post",
372
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets",
373
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/body.md",
374
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/image.jpg",
375
+ "test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/attributes.yml",
376
+ "test/tmp/migration_test_1760844153.backup.20251019032233",
377
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153",
378
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts",
379
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only",
380
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only/assets",
381
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only/assets/test.txt",
382
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post",
383
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets",
384
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/body.md",
385
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/image.jpg",
386
+ "test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/attributes.yml",
387
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts",
388
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only",
389
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only/assets",
390
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only/assets/test.txt",
391
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post",
392
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets",
393
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/body.md",
394
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/image.jpg",
395
+ "test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/attributes.yml",
396
+ "test/tmp/migration_test_1760940939.backup.20251020061539",
397
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939",
398
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts",
399
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only",
400
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only/assets",
401
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only/assets/test.txt",
402
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post",
403
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets",
404
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/body.md",
405
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/image.jpg",
406
+ "test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/attributes.yml",
407
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts",
408
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only",
409
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only/assets",
410
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only/assets/test.txt",
411
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post",
412
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets",
413
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/body.md",
414
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/image.jpg",
415
+ "test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/attributes.yml",
416
+ "test/tmp/migration_test_1760941048.backup.20251020061728",
417
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048",
418
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts",
419
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only",
420
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only/assets",
421
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only/assets/test.txt",
422
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post",
423
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets",
424
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/body.md",
425
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/image.jpg",
426
+ "test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/attributes.yml",
427
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts",
428
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only",
429
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only/assets",
430
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only/assets/test.txt",
431
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post",
432
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets",
433
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/body.md",
434
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/image.jpg",
435
+ "test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/attributes.yml",
436
+ "test/tmp/new_structure_test_1760746452",
437
+ "test/tmp/new_structure_test_1760746452/mixed",
438
+ "test/tmp/new_structure_test_1760746452/mixed/test-json.json",
439
+ "test/tmp/new_structure_test_1760746452/mixed/test-yaml.yml",
440
+ "test/tmp/new_structure_test_1760746452/posts",
441
+ "test/tmp/new_structure_test_1760746452/posts/metadata-only.yml",
442
+ "test/tmp/new_structure_test_1760746452/posts/nested-test",
443
+ "test/tmp/new_structure_test_1760746452/posts/nested-test.yml",
444
+ "test/tmp/new_structure_test_1760746452/posts/nested-test/subdirectory",
445
+ "test/tmp/new_structure_test_1760746452/posts/nested-test/subdirectory/image.png",
446
+ "test/tmp/new_structure_test_1760746452/posts/sample-post",
447
+ "test/tmp/new_structure_test_1760746452/posts/sample-post.yml",
448
+ "test/tmp/new_structure_test_1760746452/posts/sample-post/body.md",
449
+ "test/tmp/new_structure_test_1760746452/posts/sample-post/image.jpg",
450
+ "test/unit",
451
+ "test/unit/asset_test.rb",
452
+ "test/unit/collection_test.rb",
453
+ "test/unit/migrator_test.rb",
454
+ "test/unit/node_test.rb",
226
455
  "tmp/gem-details.oe"]
227
456
 
228
457
  spec.executables = ["ro"]