synthra 0.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 (302) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +4 -0
  3. data/.rubocop.yml +40 -0
  4. data/.yardopts +18 -0
  5. data/ACCESS_DOCS.md +116 -0
  6. data/ADVANCED_FEATURES_SUMMARY.md +245 -0
  7. data/CHANGELOG.md +498 -0
  8. data/CODE_OF_CONDUCT.md +122 -0
  9. data/CONTRIBUTING.md +307 -0
  10. data/DOCUMENTATION.md +204 -0
  11. data/DOCUMENTATION_GUIDE.md +194 -0
  12. data/LICENSE +22 -0
  13. data/README.md +1458 -0
  14. data/Rakefile +128 -0
  15. data/benchmark/README.md +591 -0
  16. data/benchmark/batch_generation.rb +63 -0
  17. data/benchmark/engine_comparison.rb +295 -0
  18. data/benchmark/single_record.rb +108 -0
  19. data/benchmark/streaming.rb +74 -0
  20. data/docs/ACTIVERECORD_INFERENCE.md +524 -0
  21. data/docs/API_SERVER.md +278 -0
  22. data/docs/CONFIG_FILE.md +315 -0
  23. data/docs/DATA_CONTRACTS.md +312 -0
  24. data/docs/ENHANCED_REPL.md +304 -0
  25. data/docs/FACTORY_BOT.md +271 -0
  26. data/docs/GITHUB_ACTION.md +420 -0
  27. data/docs/GRAPHQL_EXPORT.md +303 -0
  28. data/docs/GRAPHQL_FEDERATION.md +651 -0
  29. data/docs/HOW_TO_GENERATE_DOCS.md +252 -0
  30. data/docs/LSP.md +189 -0
  31. data/docs/MIGRATION_GENERATOR.md +547 -0
  32. data/docs/MOCK_SERVER.md +280 -0
  33. data/docs/NATIVE_ENGINE.md +298 -0
  34. data/docs/OPENAPI_EXPORT.md +252 -0
  35. data/docs/PERFORMANCE_MODE.md +228 -0
  36. data/docs/PERSONAS.md +547 -0
  37. data/docs/PROPERTY_TESTING.md +284 -0
  38. data/docs/PROTOBUF_EXPORT.md +276 -0
  39. data/docs/QUALITY_METRICS.md +555 -0
  40. data/docs/QUICK_REFERENCE.md +88 -0
  41. data/docs/RAILS_ENGINE.md +404 -0
  42. data/docs/RAILS_INTEGRATION.md +454 -0
  43. data/docs/README.md +175 -0
  44. data/docs/REPL_QUICK_REFERENCE.md +149 -0
  45. data/docs/RUST_INTEGRATION_GUIDE.md +1376 -0
  46. data/docs/SCENARIOS.md +576 -0
  47. data/docs/SECURITY_TESTING.md +318 -0
  48. data/docs/SNAPSHOT_TESTING.md +308 -0
  49. data/docs/STRING_TEXT_TYPES_REFERENCE.md +512 -0
  50. data/docs/TERRAFORM_EXPORT.md +447 -0
  51. data/docs/TIME_TRAVEL.md +507 -0
  52. data/docs/USAGE_GUIDE.md +980 -0
  53. data/docs/WEBHOOK_SIMULATOR.md +579 -0
  54. data/docs/advanced_features.md +183 -0
  55. data/docs/api_reference.md +153 -0
  56. data/docs/behaviors.md +138 -0
  57. data/docs/best_practices.md +191 -0
  58. data/docs/dsl_reference.md +172 -0
  59. data/docs/examples.md +162 -0
  60. data/docs/generation_modes.md +125 -0
  61. data/docs/getting_started.md +92 -0
  62. data/docs/index.html +177 -0
  63. data/docs/strategic/CLOUD_REGISTRY_ARCHITECTURE.md +268 -0
  64. data/docs/strategic/SIMD_OPTIMIZATION_STRATEGY.md +153 -0
  65. data/docs/troubleshooting.md +215 -0
  66. data/docs/type_reference.md +224 -0
  67. data/examples/hostile_mode_demo.rb +64 -0
  68. data/exe/synthra +6 -0
  69. data/ext/synthra_native/Cargo.lock +972 -0
  70. data/ext/synthra_native/Cargo.toml +46 -0
  71. data/ext/synthra_native/extconf.rb +41 -0
  72. data/ext/synthra_native/src/generator.rs +397 -0
  73. data/ext/synthra_native/src/lib.rs +229 -0
  74. data/ext/synthra_native/src/types.rs +1485 -0
  75. data/lib/generators/synthra/install_generator.rb +86 -0
  76. data/lib/generators/synthra/templates/api_response.dsl +15 -0
  77. data/lib/generators/synthra/templates/fake_data.rake +116 -0
  78. data/lib/generators/synthra/templates/synthra.yml +31 -0
  79. data/lib/generators/synthra/templates/synthra_support.rb +19 -0
  80. data/lib/generators/synthra/templates/user.dsl +11 -0
  81. data/lib/synthra/activerecord_inference.rb +394 -0
  82. data/lib/synthra/api.rb +381 -0
  83. data/lib/synthra/api_server.rb +718 -0
  84. data/lib/synthra/behaviors/applicator.rb +165 -0
  85. data/lib/synthra/behaviors/base.rb +155 -0
  86. data/lib/synthra/behaviors/close_connection.rb +60 -0
  87. data/lib/synthra/behaviors/deprecated.rb +100 -0
  88. data/lib/synthra/behaviors/failure.rb +69 -0
  89. data/lib/synthra/behaviors/latency.rb +103 -0
  90. data/lib/synthra/behaviors/partial_data.rb +83 -0
  91. data/lib/synthra/behaviors/randomize_order.rb +74 -0
  92. data/lib/synthra/behaviors/registry.rb +238 -0
  93. data/lib/synthra/behaviors/simulate_error.rb +79 -0
  94. data/lib/synthra/cli/commands/base.rb +105 -0
  95. data/lib/synthra/cli/commands/diff.rb +227 -0
  96. data/lib/synthra/cli/commands/docs.rb +67 -0
  97. data/lib/synthra/cli/commands/export.rb +150 -0
  98. data/lib/synthra/cli/commands/generate.rb +72 -0
  99. data/lib/synthra/cli/commands/import.rb +80 -0
  100. data/lib/synthra/cli/commands/lint.rb +53 -0
  101. data/lib/synthra/cli/commands/live.rb +57 -0
  102. data/lib/synthra/cli/commands/seed.rb +99 -0
  103. data/lib/synthra/cli/commands/validate.rb +28 -0
  104. data/lib/synthra/cli.rb +2471 -0
  105. data/lib/synthra/config_file.rb +129 -0
  106. data/lib/synthra/configuration.rb +281 -0
  107. data/lib/synthra/contracts_registry.rb +408 -0
  108. data/lib/synthra/database_seeder.rb +268 -0
  109. data/lib/synthra/deterministic_ids.rb +218 -0
  110. data/lib/synthra/documentation_generator.rb +414 -0
  111. data/lib/synthra/engine.rb +251 -0
  112. data/lib/synthra/errors.rb +1169 -0
  113. data/lib/synthra/export/base.rb +85 -0
  114. data/lib/synthra/export/csv.rb +101 -0
  115. data/lib/synthra/export/graphql.rb +266 -0
  116. data/lib/synthra/export/graphql_federation.rb +377 -0
  117. data/lib/synthra/export/graphviz.rb +258 -0
  118. data/lib/synthra/export/javascript.rb +327 -0
  119. data/lib/synthra/export/json_data.rb +61 -0
  120. data/lib/synthra/export/json_schema.rb +290 -0
  121. data/lib/synthra/export/openapi.rb +514 -0
  122. data/lib/synthra/export/protobuf.rb +483 -0
  123. data/lib/synthra/export/python.rb +560 -0
  124. data/lib/synthra/export/sql.rb +381 -0
  125. data/lib/synthra/export/sql_insert.rb +152 -0
  126. data/lib/synthra/export/terraform.rb +501 -0
  127. data/lib/synthra/export/type_mapping.rb +389 -0
  128. data/lib/synthra/export/typescript.rb +300 -0
  129. data/lib/synthra/export/xml_data.rb +104 -0
  130. data/lib/synthra/export/yaml_data.rb +56 -0
  131. data/lib/synthra/export.rb +404 -0
  132. data/lib/synthra/factory_bot_integration.rb +157 -0
  133. data/lib/synthra/field.rb +440 -0
  134. data/lib/synthra/functions/registry.rb +104 -0
  135. data/lib/synthra/generator/context.rb +372 -0
  136. data/lib/synthra/generator/engine.rb +336 -0
  137. data/lib/synthra/generator/faker_adapter.rb +425 -0
  138. data/lib/synthra/generator/modes.rb +444 -0
  139. data/lib/synthra/generator/resolver.rb +256 -0
  140. data/lib/synthra/generator/rng.rb +273 -0
  141. data/lib/synthra/generator/streamer.rb +63 -0
  142. data/lib/synthra/generator/uniqueness.rb +118 -0
  143. data/lib/synthra/initializer.rb +97 -0
  144. data/lib/synthra/limits.rb +279 -0
  145. data/lib/synthra/live_preview.rb +518 -0
  146. data/lib/synthra/loader_config.rb +78 -0
  147. data/lib/synthra/lsp/server.rb +689 -0
  148. data/lib/synthra/migration_generator.rb +301 -0
  149. data/lib/synthra/mixin.rb +174 -0
  150. data/lib/synthra/mock_server.rb +458 -0
  151. data/lib/synthra/native_engine.rb +304 -0
  152. data/lib/synthra/openapi_importer.rb +228 -0
  153. data/lib/synthra/output/json_formatter.rb +40 -0
  154. data/lib/synthra/output/ndjson_formatter.rb +55 -0
  155. data/lib/synthra/parser/ast.rb +1287 -0
  156. data/lib/synthra/parser/lexer.rb +1152 -0
  157. data/lib/synthra/parser/parser.rb +1664 -0
  158. data/lib/synthra/parser/tokens.rb +461 -0
  159. data/lib/synthra/performance_mode.rb +364 -0
  160. data/lib/synthra/personas.rb +397 -0
  161. data/lib/synthra/property_testing.rb +172 -0
  162. data/lib/synthra/quality_metrics.rb +405 -0
  163. data/lib/synthra/rails_test_helper.rb +248 -0
  164. data/lib/synthra/registry.rb +533 -0
  165. data/lib/synthra/relationships.rb +193 -0
  166. data/lib/synthra/repl/enhanced_repl.rb +607 -0
  167. data/lib/synthra/repl/formatter.rb +191 -0
  168. data/lib/synthra/scenarios.rb +423 -0
  169. data/lib/synthra/schema.rb +605 -0
  170. data/lib/synthra/schema_inheritance.rb +104 -0
  171. data/lib/synthra/schema_versioning.rb +212 -0
  172. data/lib/synthra/snapshot_testing.rb +199 -0
  173. data/lib/synthra/time_travel.rb +338 -0
  174. data/lib/synthra/type_definitions.rb +274 -0
  175. data/lib/synthra/types/address_location/addresses.rb +125 -0
  176. data/lib/synthra/types/address_location/airports.rb +200 -0
  177. data/lib/synthra/types/address_location/banks_hospitals.rb +207 -0
  178. data/lib/synthra/types/address_location/locations.rb +406 -0
  179. data/lib/synthra/types/base.rb +48 -0
  180. data/lib/synthra/types/commerce_products/commerce.rb +119 -0
  181. data/lib/synthra/types/commerce_products/companies.rb +71 -0
  182. data/lib/synthra/types/commerce_products/construction.rb +126 -0
  183. data/lib/synthra/types/commerce_products/products.rb +205 -0
  184. data/lib/synthra/types/core/collections.rb +513 -0
  185. data/lib/synthra/types/core/defaults.rb +76 -0
  186. data/lib/synthra/types/core/enums.rb +102 -0
  187. data/lib/synthra/types/core/identifiers.rb +445 -0
  188. data/lib/synthra/types/core/primitives.rb +586 -0
  189. data/lib/synthra/types/core/references.rb +466 -0
  190. data/lib/synthra/types/core/sequences.rb +304 -0
  191. data/lib/synthra/types/crypto/crypto.rb +162 -0
  192. data/lib/synthra/types/date_time/dates.rb +387 -0
  193. data/lib/synthra/types/finance_banking/banking.rb +424 -0
  194. data/lib/synthra/types/finance_banking/credit_cards.rb +24 -0
  195. data/lib/synthra/types/finance_banking/identifiers.rb +93 -0
  196. data/lib/synthra/types/formula.rb +184 -0
  197. data/lib/synthra/types/health_medical/medical.rb +150 -0
  198. data/lib/synthra/types/hostile_payloads.rb +122 -0
  199. data/lib/synthra/types/json_array.rb +51 -0
  200. data/lib/synthra/types/media_entertainment/media.rb +62 -0
  201. data/lib/synthra/types/naughty_string.rb +30 -0
  202. data/lib/synthra/types/personal_names/chinese.rb +41 -0
  203. data/lib/synthra/types/personal_names/identifiers.rb +187 -0
  204. data/lib/synthra/types/personal_names/names.rb +246 -0
  205. data/lib/synthra/types/personal_names/national_id.rb +89 -0
  206. data/lib/synthra/types/personal_names/titles_suffixes.rb +41 -0
  207. data/lib/synthra/types/regex.rb +248 -0
  208. data/lib/synthra/types/registry.rb +182 -0
  209. data/lib/synthra/types/repeating_element.rb +50 -0
  210. data/lib/synthra/types/scenario.rb +29 -0
  211. data/lib/synthra/types/technology_internet/apps.rb +67 -0
  212. data/lib/synthra/types/technology_internet/communication.rb +162 -0
  213. data/lib/synthra/types/technology_internet/devices.rb +80 -0
  214. data/lib/synthra/types/technology_internet/formats.rb +139 -0
  215. data/lib/synthra/types/technology_internet/networking.rb +143 -0
  216. data/lib/synthra/types/template.rb +92 -0
  217. data/lib/synthra/types/text_content/business.rb +128 -0
  218. data/lib/synthra/types/text_content/colors.rb +70 -0
  219. data/lib/synthra/types/text_content/misc.rb +237 -0
  220. data/lib/synthra/types/text_content/security.rb +130 -0
  221. data/lib/synthra/types/text_content/text_generation.rb +532 -0
  222. data/lib/synthra/types/travel/travel.rb +150 -0
  223. data/lib/synthra/utils/string_distance.rb +133 -0
  224. data/lib/synthra/validator/dsl_validator.rb +339 -0
  225. data/lib/synthra/validator/path_validator.rb +615 -0
  226. data/lib/synthra/version.rb +35 -0
  227. data/lib/synthra/webhook_simulator.rb +341 -0
  228. data/lib/synthra.rb +259 -0
  229. data/schemas/address.dsl +16 -0
  230. data/schemas/api_response.dsl +8 -0
  231. data/schemas/error_payload.dsl +9 -0
  232. data/schemas/order.dsl +10 -0
  233. data/schemas/order_item.dsl +8 -0
  234. data/schemas/payment.dsl +11 -0
  235. data/schemas/social_post.dsl +13 -0
  236. data/schemas/user.dsl +10 -0
  237. data/scripts/batch_fix_all.rb +96 -0
  238. data/scripts/delete_old_files.rb +32 -0
  239. data/scripts/fix_all_grouped_files.rb +137 -0
  240. data/scripts/fix_all_indentation.rb +48 -0
  241. data/scripts/fix_all_syntax.rb +124 -0
  242. data/scripts/fix_grouped_files.rb +184 -0
  243. data/scripts/fix_syntax_errors.rb +108 -0
  244. data/scripts/group_domain_types.rb +112 -0
  245. data/scripts/group_domain_types_fixed.rb +150 -0
  246. data/scripts/merge_domains_to_one_file.rb +68 -0
  247. data/scripts/move_existing_types.rb +130 -0
  248. data/scripts/split_grouped_types.rb +142 -0
  249. data/tech_docs/README.md +134 -0
  250. data/tech_docs/advanced/streaming.md +405 -0
  251. data/tech_docs/advanced/thread_safety.md +253 -0
  252. data/tech_docs/api/overview.md +485 -0
  253. data/tech_docs/appendices/type_chart.md +193 -0
  254. data/tech_docs/basic_concepts.md +383 -0
  255. data/tech_docs/behaviors/overview.md +346 -0
  256. data/tech_docs/dsl/complex_types.md +790 -0
  257. data/tech_docs/dsl/core_types.md +464 -0
  258. data/tech_docs/dsl/datetime_types.md +325 -0
  259. data/tech_docs/dsl/field_modifiers.md +414 -0
  260. data/tech_docs/dsl/grammar.md +431 -0
  261. data/tech_docs/dsl/schema_definition.md +399 -0
  262. data/tech_docs/export/README.md +276 -0
  263. data/tech_docs/installation.md +273 -0
  264. data/tech_docs/integration/ci_cd.md +707 -0
  265. data/tech_docs/integration/ci_cd_guide.md +579 -0
  266. data/tech_docs/integration/factory_bot.md +485 -0
  267. data/tech_docs/integration/rails.md +630 -0
  268. data/tech_docs/integration/rspec.md +449 -0
  269. data/tech_docs/modes/overview.md +350 -0
  270. data/tech_docs/performance/NATIVE_RUST_EXTENSION.md +1270 -0
  271. data/tech_docs/performance/OPTIMIZATION_GUIDE.md +901 -0
  272. data/tech_docs/quick_start.md +256 -0
  273. data/tech_docs/templates/README.md +805 -0
  274. data/tech_docs/tutorials/advanced.md +371 -0
  275. data/tech_docs/tutorials/getting_started.md +189 -0
  276. data/tech_docs/tutorials/intermediate.md +231 -0
  277. data/tech_docs/tutorials/template_gallery.md +569 -0
  278. data/tech_example/01_basic_usage.rb +238 -0
  279. data/tech_example/02_types_demo.rb +336 -0
  280. data/tech_example/04_cli_usage.md +429 -0
  281. data/tech_example/05_database_seeding.rb +283 -0
  282. data/tech_example/07_rspec_integration.rb +359 -0
  283. data/tech_example/10_custom_types.rb +387 -0
  284. data/tech_example/12_behaviors.rb +372 -0
  285. data/tech_example/13_twitter_dm_example.rb +120 -0
  286. data/tech_example/14_exact_json_structure.rb +253 -0
  287. data/tech_example/16_lsp_server.rb +56 -0
  288. data/tech_example/17_property_testing.rb +92 -0
  289. data/tech_example/18_enhanced_repl.rb +120 -0
  290. data/tech_example/19_security_fuzzing.rb +145 -0
  291. data/tech_example/NEW_FEATURES.md +169 -0
  292. data/tech_example/README.md +118 -0
  293. data/tech_example/schemas/api_response.dsl +123 -0
  294. data/tech_example/schemas/ecommerce.dsl +121 -0
  295. data/tech_example/schemas/twitter_dm.dsl +109 -0
  296. data/tech_example/schemas/user.dsl +36 -0
  297. data/vscode-extension/README.md +246 -0
  298. data/vscode-extension/language-configuration.json +31 -0
  299. data/vscode-extension/package.json +55 -0
  300. data/vscode-extension/snippets/fakedatadsl.json +198 -0
  301. data/vscode-extension/syntaxes/fakedatadsl.tmLanguage.json +128 -0
  302. metadata +478 -0
@@ -0,0 +1,312 @@
1
+ # Data Contracts Registry
2
+
3
+ Version, publish, and manage your schemas centrally with the **Data Contracts Registry**.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Publish a schema version
9
+ fake_data_dsl contracts publish User -v 1.0.0 -s schemas/ -m "Initial release"
10
+
11
+ # List all contracts
12
+ fake_data_dsl contracts list
13
+
14
+ # Check compatibility
15
+ fake_data_dsl contracts diff User 1.0.0 2.0.0
16
+ ```
17
+
18
+ ## CLI Commands
19
+
20
+ ### Publish
21
+
22
+ ```bash
23
+ fake_data_dsl contracts publish <Schema> -v <version> [options]
24
+
25
+ Options:
26
+ -s, --schema-dir DIR Schema directory
27
+ -m, --message MSG Changelog message
28
+ -d, --dir DIR Contracts directory (default: contracts)
29
+ ```
30
+
31
+ Example:
32
+ ```bash
33
+ fake_data_dsl contracts publish User -v 1.0.0 -s schemas/ -m "Initial User schema"
34
+ ```
35
+
36
+ ### Deprecate
37
+
38
+ ```bash
39
+ fake_data_dsl contracts deprecate <Schema> -v <version> [options]
40
+
41
+ Options:
42
+ --sunset DATE Sunset date (YYYY-MM-DD)
43
+ -m, --message MSG Deprecation message
44
+ ```
45
+
46
+ Example:
47
+ ```bash
48
+ fake_data_dsl contracts deprecate User -v 1.0.0 --sunset 2026-06-01 -m "Use v2.0.0 instead"
49
+ ```
50
+
51
+ ### List
52
+
53
+ ```bash
54
+ fake_data_dsl contracts list
55
+ ```
56
+
57
+ Output:
58
+ ```
59
+ Data Contracts:
60
+
61
+ User:
62
+ ✅ v2.0.0 (5 fields)
63
+ ⚠️ v1.0.0 (3 fields)
64
+
65
+ Order:
66
+ ✅ v1.0.0 (8 fields)
67
+ ```
68
+
69
+ ### History
70
+
71
+ ```bash
72
+ fake_data_dsl contracts history User
73
+ ```
74
+
75
+ Output:
76
+ ```
77
+ History for User:
78
+
79
+ 2026-01-24T10:30:00Z - v2.0.0 published
80
+ Added avatar field, changed email validation
81
+ 2026-01-01T09:00:00Z - v1.0.0 deprecated
82
+ Use v2.0.0 instead
83
+ 2025-06-15T14:00:00Z - v1.0.0 published
84
+ Initial release
85
+ ```
86
+
87
+ ### Diff
88
+
89
+ ```bash
90
+ fake_data_dsl contracts diff User 1.0.0 2.0.0
91
+ ```
92
+
93
+ Output:
94
+ ```
95
+ Comparing User v1.0.0 → v2.0.0
96
+
97
+ ❌ Breaking changes detected!
98
+
99
+ Changes:
100
+ Removed: legacy_field
101
+ Added: avatar, updated_at
102
+ Type changed: age (text → number)
103
+ ```
104
+
105
+ ## Ruby API
106
+
107
+ ### Initialize Registry
108
+
109
+ ```ruby
110
+ # Create registry with storage directory
111
+ registry = FakeDataDSL::ContractsRegistry.new("contracts/")
112
+ ```
113
+
114
+ ### Publish
115
+
116
+ ```ruby
117
+ schema = FakeDataDSL.load("schemas/user.dsl")
118
+
119
+ contract = registry.publish(
120
+ "User",
121
+ version: "1.0.0",
122
+ schema: schema,
123
+ changelog: "Initial release"
124
+ )
125
+
126
+ puts contract[:schema_hash] # Content hash for integrity
127
+ puts contract[:fields] # Field signatures
128
+ ```
129
+
130
+ ### Deprecate
131
+
132
+ ```ruby
133
+ registry.deprecate(
134
+ "User",
135
+ version: "1.0.0",
136
+ sunset_date: Date.new(2026, 6, 1),
137
+ message: "Migrate to v2.0.0"
138
+ )
139
+ ```
140
+
141
+ ### Retire
142
+
143
+ ```ruby
144
+ registry.retire("User", version: "1.0.0")
145
+ ```
146
+
147
+ ### Get Contract
148
+
149
+ ```ruby
150
+ # Get specific version
151
+ contract = registry.get("User", version: "1.0.0")
152
+
153
+ # Get latest published version
154
+ latest = registry.get("User") # Returns newest published
155
+ ```
156
+
157
+ ### List Versions
158
+
159
+ ```ruby
160
+ versions = registry.versions_for("User")
161
+ # => ["1.0.0", "1.1.0", "2.0.0"]
162
+ ```
163
+
164
+ ### Check Compatibility
165
+
166
+ ```ruby
167
+ result = registry.compatible?("User", "1.0.0", "2.0.0")
168
+
169
+ if result[:breaking]
170
+ puts "Breaking changes detected!"
171
+ puts "Removed fields: #{result[:changes][:removed_fields]}"
172
+ puts "Type changes: #{result[:changes][:type_changes]}"
173
+ else
174
+ puts "Compatible!"
175
+ end
176
+ ```
177
+
178
+ Compatibility result:
179
+ ```ruby
180
+ {
181
+ compatible: false,
182
+ breaking: true,
183
+ changes: {
184
+ removed_fields: ["legacy_field"],
185
+ added_fields: ["avatar", "updated_at"],
186
+ type_changes: [{ field: "age", from: "text", to: "number" }],
187
+ required_changes: [{ field: "email", change: "optional → required" }]
188
+ },
189
+ summary: "Removed fields: legacy_field; Type changed: age (text → number)"
190
+ }
191
+ ```
192
+
193
+ ### Validate Against Contract
194
+
195
+ ```ruby
196
+ current_schema = FakeDataDSL.load("schemas/user.dsl")
197
+
198
+ result = registry.validate("User", version: "1.0.0", schema: current_schema)
199
+
200
+ if result[:valid]
201
+ puts "Schema matches contract!"
202
+ else
203
+ puts "Schema drift detected!"
204
+ puts "Missing: #{result[:missing_fields]}"
205
+ puts "Extra: #{result[:extra_fields]}"
206
+ end
207
+ ```
208
+
209
+ ### History
210
+
211
+ ```ruby
212
+ history = registry.history("User")
213
+
214
+ history.each do |entry|
215
+ puts "#{entry[:timestamp]} - v#{entry[:version]} #{entry[:action]}"
216
+ puts " #{entry[:message]}" if entry[:message]
217
+ end
218
+ ```
219
+
220
+ ### Export/Import
221
+
222
+ ```ruby
223
+ # Export all contracts to directory
224
+ registry.export("exported_contracts/")
225
+
226
+ # Import contracts from directory
227
+ registry.import("imported_contracts/")
228
+ ```
229
+
230
+ ## Contract States
231
+
232
+ | State | Description |
233
+ |-------|-------------|
234
+ | `draft` | Not yet published |
235
+ | `published` | Active and available |
236
+ | `deprecated` | Scheduled for removal |
237
+ | `retired` | No longer available |
238
+
239
+ ## Breaking Changes
240
+
241
+ The following changes are considered **breaking**:
242
+
243
+ | Change | Breaking? | Description |
244
+ |--------|-----------|-------------|
245
+ | Field removed | ✅ Yes | Consumers depend on this field |
246
+ | Type changed | ✅ Yes | `number` → `text` breaks parsing |
247
+ | Optional → Required | ✅ Yes | Consumers may not provide |
248
+ | Field added | ❌ No | Backwards compatible |
249
+ | Required → Optional | ❌ No | Backwards compatible |
250
+
251
+ ## CI Integration
252
+
253
+ Use contracts in CI pipelines:
254
+
255
+ ```yaml
256
+ # .github/workflows/schema-check.yml
257
+ name: Schema Validation
258
+
259
+ on: [push, pull_request]
260
+
261
+ jobs:
262
+ validate:
263
+ runs-on: ubuntu-latest
264
+ steps:
265
+ - uses: actions/checkout@v3
266
+
267
+ - name: Setup Ruby
268
+ uses: ruby/setup-ruby@v1
269
+ with:
270
+ ruby-version: '3.2'
271
+ bundler-cache: true
272
+
273
+ - name: Check for breaking changes
274
+ run: |
275
+ # Publish current schema
276
+ bundle exec fake_data_dsl contracts publish User \
277
+ -v ${{ github.sha }} \
278
+ -s schemas/
279
+
280
+ # Compare with main branch
281
+ bundle exec fake_data_dsl contracts diff User main ${{ github.sha }}
282
+ ```
283
+
284
+ ## Storage Format
285
+
286
+ Contracts are stored as JSON files:
287
+
288
+ ```
289
+ contracts/
290
+ ├── schemas/
291
+ │ ├── User_v1.0.0.json
292
+ │ ├── User_v2.0.0.json
293
+ │ └── Order_v1.0.0.json
294
+ └── history/
295
+ ├── User.json
296
+ └── Order.json
297
+ ```
298
+
299
+ Contract file structure:
300
+ ```json
301
+ {
302
+ "name": "User",
303
+ "version": "1.0.0",
304
+ "state": "published",
305
+ "schema_hash": "abc123def456",
306
+ "fields": [
307
+ { "name": "id", "type": "uuid", "optional": false, "nullable": false }
308
+ ],
309
+ "published_at": "2026-01-24T10:30:00Z",
310
+ "changelog": "Initial release"
311
+ }
312
+ ```
@@ -0,0 +1,304 @@
1
+ # Enhanced REPL
2
+
3
+ The FakeDataDSL REPL now includes visual inspection, step-through debugging, and table formatting.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ fake_data_dsl repl
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ ### Basic Commands
14
+
15
+ - `load <path>` - Load schemas from file/directory
16
+ - `list` - List loaded schemas
17
+ - `info <Schema>` - Show schema details
18
+ - `gen <Schema>` - Generate one record (JSON format)
19
+ - `gen <Schema> N` - Generate N records (JSON format)
20
+ - `seed <number>` - Set seed for deterministic output
21
+ - `mode <mode>` - Set mode (random/edge/invalid/hostile/mixed)
22
+ - `help` - Show help
23
+ - `quit` / `exit` - Exit REPL
24
+
25
+ ### Enhanced Commands
26
+
27
+ - `table <Schema>` - Generate one record (table view)
28
+ - `table <Schema> N` - Generate N records (table view)
29
+ - `debug <Schema>` - Step-through debugging
30
+ - `inspect <Schema>` - Detailed inspection (table + JSON + statistics)
31
+
32
+ ## Table View
33
+
34
+ Display records in a formatted table:
35
+
36
+ ```bash
37
+ > table User
38
+ ────────────────────┼───────────────────────────────
39
+ id │ "550e8400-e29b-41d4-a716-..."
40
+ name │ "John Doe"
41
+ email │ "john.doe@example.com"
42
+ age │ 34
43
+ ```
44
+
45
+ For multiple records:
46
+
47
+ ```bash
48
+ > table User 5
49
+ id │ name │ email
50
+ ────────────────────┼─────────────────────┼─────────────────────
51
+ 550e8400... │ John Doe │ john@example.com
52
+ f47ac10b... │ Jane Smith │ jane@example.com
53
+ ...
54
+ ```
55
+
56
+ ## Step-Through Debugging
57
+
58
+ Debug generation field-by-field:
59
+
60
+ ```bash
61
+ > debug User
62
+ 🐛 Debug Mode: Generating User
63
+ Press Enter to continue after each field, 'q' to quit, 'c' to continue without pausing
64
+
65
+ [Field 1] id
66
+ ────────────────────────────────────────────────────────
67
+ Value: "550e8400-e29b-41d4-a716-446655440000"
68
+
69
+ Context State:
70
+ Depth: 0
71
+ Registry: available
72
+ Parent Context: no
73
+ Shared Context: none
74
+
75
+ Generated Fields:
76
+ (none yet)
77
+
78
+ Press Enter to continue, 'q' to quit, 'c' to continue without pausing:
79
+
80
+ [Field 2] name
81
+ ────────────────────────────────────────────────────────
82
+ Value: "John Doe"
83
+
84
+ Context State:
85
+ Depth: 0
86
+ Registry: available
87
+ Parent Context: no
88
+ Shared Context: none
89
+
90
+ Generated Fields:
91
+ id = "550e8400-e29b-41d4-a716-446655440000"
92
+
93
+ Press Enter to continue, 'q' to quit, 'c' to continue without pausing: c
94
+ Continuing without pausing...
95
+ ```
96
+
97
+ ### Debug Controls
98
+
99
+ - **Enter** - Continue to next field
100
+ - **q** / **quit** - Cancel debugging
101
+ - **c** / **continue** - Continue without pausing
102
+
103
+ ## Detailed Inspection
104
+
105
+ Get comprehensive information about generated records:
106
+
107
+ ```bash
108
+ > inspect User
109
+ 📊 Generated Record:
110
+ ============================================================
111
+ ────────────────────┼───────────────────────────────
112
+ id │ "550e8400-e29b-41d4-a716-..."
113
+ name │ "John Doe"
114
+ email │ "john.doe@example.com"
115
+ age │ 34
116
+ created_at │ "2024-01-15T10:30:00Z"
117
+
118
+ 📋 JSON Format:
119
+ {
120
+ "id": "550e8400-e29b-41d4-a716-446655440000",
121
+ "name": "John Doe",
122
+ "email": "john.doe@example.com",
123
+ "age": 34,
124
+ "created_at": "2024-01-15T10:30:00Z"
125
+ }
126
+
127
+ 📏 Statistics:
128
+ Fields: 5
129
+ Total size: 234 bytes
130
+ id: String (36)
131
+ name: String (8)
132
+ email: String (20)
133
+ age: Integer (2)
134
+ created_at: String (20)
135
+ ```
136
+
137
+ ## Examples
138
+
139
+ ### Loading Schemas
140
+
141
+ ```bash
142
+ > load schemas/
143
+ ✅ Loaded 3 schema(s)
144
+
145
+ > list
146
+ Loaded schemas:
147
+ - User v1.0
148
+ - Order v2.3
149
+ - Product
150
+ ```
151
+
152
+ ### Generating Data
153
+
154
+ ```bash
155
+ > gen User
156
+ {
157
+ "id": "550e8400-e29b-41d4-a716-446655440000",
158
+ "name": "John Doe",
159
+ "email": "john.doe@example.com"
160
+ }
161
+
162
+ > gen User 5
163
+ [
164
+ { "id": "...", "name": "John Doe", ... },
165
+ { "id": "...", "name": "Jane Smith", ... },
166
+ ...
167
+ ]
168
+ ```
169
+
170
+ ### Using Seeds
171
+
172
+ ```bash
173
+ > seed 42
174
+ ✅ Seed set to 42
175
+
176
+ > gen User
177
+ {
178
+ "id": "550e8400-e29b-41d4-a716-446655440000",
179
+ ...
180
+ }
181
+
182
+ > gen User # Same seed = same output
183
+ {
184
+ "id": "550e8400-e29b-41d4-a716-446655440000",
185
+ ...
186
+ }
187
+ ```
188
+
189
+ ### Changing Modes
190
+
191
+ ```bash
192
+ > mode edge
193
+ ✅ Mode set to edge
194
+
195
+ > gen User
196
+ {
197
+ "id": "00000000-0000-0000-0000-000000000000",
198
+ "name": "",
199
+ "email": ""
200
+ }
201
+
202
+ > mode hostile
203
+ ✅ Mode set to hostile
204
+
205
+ > gen User
206
+ {
207
+ "id": "' OR '1'='1",
208
+ "name": "<script>alert(1)</script>",
209
+ "email": "'; DROP TABLE users;--"
210
+ }
211
+ ```
212
+
213
+ ## Use Cases
214
+
215
+ ### Debugging Complex Schemas
216
+
217
+ Use `debug` to understand how complex schemas with `copy()` and `Ref()` work:
218
+
219
+ ```bash
220
+ > debug Order
221
+ # Step through each field to see context state
222
+ # Understand how copy() resolves parent fields
223
+ # See how Ref() resolves cross-schema references
224
+ ```
225
+
226
+ ### Quick Data Inspection
227
+
228
+ Use `table` for quick visual inspection:
229
+
230
+ ```bash
231
+ > table User 10
232
+ # See 10 users in a clean table format
233
+ # Easier to scan than JSON
234
+ ```
235
+
236
+ ### Schema Exploration
237
+
238
+ Use `inspect` to understand schema output:
239
+
240
+ ```bash
241
+ > inspect User
242
+ # See table + JSON + statistics
243
+ # Understand field types and sizes
244
+ # Verify schema structure
245
+ ```
246
+
247
+ ## Tips
248
+
249
+ 1. **Use seeds for reproducibility** - Set a seed to get consistent output
250
+ 2. **Use table view for quick checks** - Faster than JSON for visual inspection
251
+ 3. **Use debug for complex schemas** - Understand field dependencies
252
+ 4. **Use inspect for analysis** - Get comprehensive information
253
+
254
+ ## Keyboard Shortcuts
255
+
256
+ - **Ctrl+C** - Interrupt current operation
257
+ - **Ctrl+D** - Exit REPL (same as `quit`)
258
+
259
+ ## Configuration
260
+
261
+ The REPL respects global configuration:
262
+
263
+ ```ruby
264
+ FakeDataDSL.configure do |config|
265
+ config.default_mode = :edge
266
+ config.limits.max_array_size = 100
267
+ end
268
+ ```
269
+
270
+ ## Troubleshooting
271
+
272
+ ### No Output
273
+
274
+ Check that schemas are loaded:
275
+
276
+ ```bash
277
+ > list
278
+ No schemas loaded. Use 'load <path>' first.
279
+ ```
280
+
281
+ ### Schema Not Found
282
+
283
+ Verify schema name:
284
+
285
+ ```bash
286
+ > list
287
+ Loaded schemas:
288
+ - User
289
+ - Order
290
+
291
+ > gen User # Correct
292
+ > gen user # Wrong (case-sensitive)
293
+ ❌ Schema 'user' not found
294
+ ```
295
+
296
+ ### Debug Mode Not Working
297
+
298
+ Ensure `on_field_generated` callback is available (it's built-in, should work automatically).
299
+
300
+ ## See Also
301
+
302
+ - [CLI Guide](tech_example/04_cli_usage.md)
303
+ - [Generation Modes](tech_docs/modes/overview.md)
304
+ - [Schema Reference](tech_docs/dsl/schema_definition.md)