rosett-ai 1.3.3 → 1.5.10

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 (453) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +413 -22
  3. data/README.md +56 -42
  4. data/bin/raictl +13 -0
  5. data/conf/adopt_redactions.yml +2 -0
  6. data/conf/compliance/cra_rules.yml +2 -0
  7. data/conf/compliance/license_rules.yml +2 -0
  8. data/conf/mcp/server_defaults.yml +2 -0
  9. data/conf/mcp/trust.yml +1 -0
  10. data/conf/packaging/core.yml +2 -0
  11. data/conf/packaging/gtk4.yml +2 -0
  12. data/conf/packaging/qt6.yml +2 -0
  13. data/conf/policy/default_deny_list.yml +2 -0
  14. data/conf/review/cli-command-audit.yml +2 -0
  15. data/conf/review/design-docs.yml +2 -0
  16. data/conf/review/design-questionnaire.yml +2 -0
  17. data/conf/review/questionnaire.yml +2 -0
  18. data/conf/review/rosett-ai-core.yml +2 -0
  19. data/conf/schemas/ai_config_schema.json +14 -2
  20. data/conf/schemas/autoqueue.schema.json +153 -0
  21. data/conf/schemas/behaviour_schema.json +31 -7
  22. data/conf/schemas/compliance_rule_schema.json +17 -4
  23. data/conf/schemas/content_pack_manifest_schema.json +23 -4
  24. data/conf/schemas/design_schema.json +177 -42
  25. data/conf/schemas/engine_manifest_schema.json +22 -5
  26. data/conf/schemas/lockfile_schema.json +26 -4
  27. data/conf/schemas/mcp_server_schema.json +50 -9
  28. data/conf/schemas/packaging_schema.json +23 -5
  29. data/conf/schemas/policy_schema.json +35 -9
  30. data/conf/schemas/provenance_schema.json +33 -5
  31. data/conf/schemas/rai_config_schema.json +6 -2
  32. data/conf/schemas/rai_project_schema.json +8 -2
  33. data/conf/schemas/scope_hierarchy_schema.json +22 -5
  34. data/conf/schemas/target_schema.json +33 -6
  35. data/conf/schemas/tooling_schema.json +53 -12
  36. data/conf/schemas/workflow_schema.json +39 -9
  37. data/conf/targets/agents_md.yml +1 -0
  38. data/conf/targets/claude.yml +2 -0
  39. data/conf/tooling/tools.yml +2 -0
  40. data/lib/rosett_ai/adopter/local_analysis_collector.rb +5 -0
  41. data/lib/rosett_ai/adopter/rule_adopter.rb +40 -0
  42. data/lib/rosett_ai/ai_config/context_window.rb +3 -0
  43. data/lib/rosett_ai/ai_config/cost_controls.rb +1 -0
  44. data/lib/rosett_ai/ai_config/fallback_chain.rb +1 -0
  45. data/lib/rosett_ai/ai_config/model_router.rb +1 -0
  46. data/lib/rosett_ai/ai_config/validator.rb +2 -0
  47. data/lib/rosett_ai/authorship/attribution_compiler.rb +1 -0
  48. data/lib/rosett_ai/authorship/disclosure_policy.rb +2 -0
  49. data/lib/rosett_ai/authorship/review_validator.rb +1 -0
  50. data/lib/rosett_ai/authorship/trailer_generator.rb +1 -0
  51. data/lib/rosett_ai/backup/compressor.rb +3 -0
  52. data/lib/rosett_ai/backup/destination.rb +1 -0
  53. data/lib/rosett_ai/behaviour/manager.rb +1 -0
  54. data/lib/rosett_ai/compiler/backend.rb +3 -0
  55. data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +1 -0
  56. data/lib/rosett_ai/compiler/backends/claude_backend.rb +1 -0
  57. data/lib/rosett_ai/compiler/behaviour_compiler.rb +1 -0
  58. data/lib/rosett_ai/compiler/compilation_pipeline.rb +1 -7
  59. data/lib/rosett_ai/compiler/locale_compiler.rb +2 -0
  60. data/lib/rosett_ai/compiler/target_profile.rb +11 -0
  61. data/lib/rosett_ai/completion/generator.rb +2 -0
  62. data/lib/rosett_ai/completion/shells/zsh_generator.rb +1 -0
  63. data/lib/rosett_ai/comply/checkers/cra_checker.rb +1 -0
  64. data/lib/rosett_ai/comply/checkers/license_checker.rb +2 -0
  65. data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +4 -0
  66. data/lib/rosett_ai/comply/runner.rb +2 -0
  67. data/lib/rosett_ai/composition/composer.rb +1 -0
  68. data/lib/rosett_ai/composition/lockfile.rb +1 -0
  69. data/lib/rosett_ai/composition/merge_strategy.rb +1 -0
  70. data/lib/rosett_ai/config/masking_secret_resolver.rb +9 -0
  71. data/lib/rosett_ai/config/secret_resolver.rb +4 -0
  72. data/lib/rosett_ai/configuration.rb +4 -0
  73. data/lib/rosett_ai/content/content_client.rb +15 -0
  74. data/lib/rosett_ai/content/pack_installer.rb +1 -0
  75. data/lib/rosett_ai/content/pack_manifest.rb +21 -0
  76. data/lib/rosett_ai/content_packs/manager.rb +1 -0
  77. data/lib/rosett_ai/dbus/compositor_detector.rb +2 -0
  78. data/lib/rosett_ai/dbus/focus_adapters/base.rb +1 -0
  79. data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +5 -0
  80. data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +4 -0
  81. data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +4 -0
  82. data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +4 -0
  83. data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +4 -0
  84. data/lib/rosett_ai/dbus/focus_monitor_interface.rb +1 -0
  85. data/lib/rosett_ai/dbus/manager_interface.rb +1 -0
  86. data/lib/rosett_ai/dbus/plugin_manager_interface.rb +2 -0
  87. data/lib/rosett_ai/dbus/rate_limiter.rb +1 -0
  88. data/lib/rosett_ai/dbus/service.rb +3 -0
  89. data/lib/rosett_ai/dbus/status_notifier_interface.rb +14 -0
  90. data/lib/rosett_ai/desktop/dbus_client.rb +6 -0
  91. data/lib/rosett_ai/desktop/gtk4_app.rb +3 -0
  92. data/lib/rosett_ai/desktop/gtk4_preferences.rb +1 -0
  93. data/lib/rosett_ai/desktop/gui_logger.rb +2 -0
  94. data/lib/rosett_ai/doctor/check.rb +1 -1
  95. data/lib/rosett_ai/doctor/checks/cache_health_check.rb +1 -0
  96. data/lib/rosett_ai/doctor.rb +1 -0
  97. data/lib/rosett_ai/documentation/reference_compiler.rb +9 -0
  98. data/lib/rosett_ai/documentation/translator.rb +8 -0
  99. data/lib/rosett_ai/engines/base_config_compiler.rb +71 -1
  100. data/lib/rosett_ai/engines/detector.rb +5 -0
  101. data/lib/rosett_ai/engines/registry.rb +7 -0
  102. data/lib/rosett_ai/exit_codes.rb +6 -0
  103. data/lib/rosett_ai/formatting.rb +1 -0
  104. data/lib/rosett_ai/gem_consistency_checker.rb +6 -0
  105. data/lib/rosett_ai/git_hooks/chain_detector.rb +1 -0
  106. data/lib/rosett_ai/git_hooks/installer.rb +4 -0
  107. data/lib/rosett_ai/git_hooks/script_generator.rb +2 -0
  108. data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +6 -0
  109. data/lib/rosett_ai/i18n/utf8_checker.rb +1 -0
  110. data/lib/rosett_ai/init/config_file_writer.rb +4 -0
  111. data/lib/rosett_ai/init/directory_builder.rb +15 -0
  112. data/lib/rosett_ai/init/file_copier.rb +51 -0
  113. data/lib/rosett_ai/init/mcp_registrar.rb +1 -0
  114. data/lib/rosett_ai/init/project_initializer.rb +1 -0
  115. data/lib/rosett_ai/licensing/license_key.rb +4 -0
  116. data/lib/rosett_ai/licensing/license_store.rb +11 -0
  117. data/lib/rosett_ai/licensing/tier.rb +9 -0
  118. data/lib/rosett_ai/mcp/admin/auditor.rb +1 -0
  119. data/lib/rosett_ai/mcp/admin/health_checker.rb +1 -0
  120. data/lib/rosett_ai/mcp/admin/registry.rb +1 -0
  121. data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +27 -4
  122. data/lib/rosett_ai/mcp/enforcement/validator.rb +24 -3
  123. data/lib/rosett_ai/mcp/governance.rb +9 -0
  124. data/lib/rosett_ai/mcp/http_security_config.rb +22 -0
  125. data/lib/rosett_ai/mcp/key_hasher.rb +4 -2
  126. data/lib/rosett_ai/mcp/keyfile.rb +4 -0
  127. data/lib/rosett_ai/mcp/middleware/cors.rb +4 -0
  128. data/lib/rosett_ai/mcp/middleware/origin_validation.rb +1 -0
  129. data/lib/rosett_ai/mcp/middleware/rate_limit.rb +3 -0
  130. data/lib/rosett_ai/mcp/plugins.rb +1 -0
  131. data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +2 -0
  132. data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +3 -0
  133. data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +2 -0
  134. data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +2 -0
  135. data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +2 -0
  136. data/lib/rosett_ai/mcp/resources/config_resource.rb +2 -0
  137. data/lib/rosett_ai/mcp/resources/design_resource.rb +1 -0
  138. data/lib/rosett_ai/mcp/resources/hooks_resource.rb +3 -0
  139. data/lib/rosett_ai/mcp/resources/provenance_resource.rb +2 -0
  140. data/lib/rosett_ai/mcp/resources/rules_resource.rb +1 -0
  141. data/lib/rosett_ai/mcp/resources/schema_resource.rb +1 -0
  142. data/lib/rosett_ai/mcp/server.rb +7 -1
  143. data/lib/rosett_ai/mcp/settings/trust_manager.rb +3 -0
  144. data/lib/rosett_ai/mcp/tools/adopt_tool.rb +4 -0
  145. data/lib/rosett_ai/mcp/tools/backup_tool.rb +4 -0
  146. data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +4 -0
  147. data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +3 -0
  148. data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +5 -0
  149. data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +4 -0
  150. data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +4 -0
  151. data/lib/rosett_ai/mcp/tools/compile_tool.rb +4 -0
  152. data/lib/rosett_ai/mcp/tools/comply_tool.rb +4 -0
  153. data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +4 -0
  154. data/lib/rosett_ai/mcp/tools/config_status_tool.rb +3 -0
  155. data/lib/rosett_ai/mcp/tools/content_tool.rb +5 -0
  156. data/lib/rosett_ai/mcp/tools/context_query_tool.rb +4 -0
  157. data/lib/rosett_ai/mcp/tools/design_list_tool.rb +3 -0
  158. data/lib/rosett_ai/mcp/tools/design_show_tool.rb +4 -0
  159. data/lib/rosett_ai/mcp/tools/doctor_tool.rb +4 -0
  160. data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +3 -0
  161. data/lib/rosett_ai/mcp/tools/engines_tool.rb +5 -0
  162. data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +7 -0
  163. data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +33 -8
  164. data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +5 -0
  165. data/lib/rosett_ai/mcp/tools/init_tool.rb +5 -0
  166. data/lib/rosett_ai/mcp/tools/license_status_tool.rb +3 -0
  167. data/lib/rosett_ai/mcp/tools/project_tool.rb +5 -0
  168. data/lib/rosett_ai/mcp/tools/provenance_tool.rb +5 -0
  169. data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +3 -0
  170. data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +5 -0
  171. data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +4 -0
  172. data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +5 -0
  173. data/lib/rosett_ai/mcp/tools/tooling_tool.rb +5 -0
  174. data/lib/rosett_ai/mcp/tools/validate_tool.rb +4 -0
  175. data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +4 -0
  176. data/lib/rosett_ai/mcp/tools/workflow_tool.rb +5 -0
  177. data/lib/rosett_ai/migration/detector.rb +1 -0
  178. data/lib/rosett_ai/migration/nncc_config_migrator.rb +2 -0
  179. data/lib/rosett_ai/migration/xdg_migrator.rb +3 -1
  180. data/lib/rosett_ai/package_manager/apt.rb +5 -0
  181. data/lib/rosett_ai/package_manager/base.rb +1 -0
  182. data/lib/rosett_ai/package_manager/gem_backend.rb +1 -0
  183. data/lib/rosett_ai/packaging/variant_config.rb +12 -0
  184. data/lib/rosett_ai/plugins/contract.rb +1 -0
  185. data/lib/rosett_ai/plugins/engine_contract.rb +2 -0
  186. data/lib/rosett_ai/plugins/gui_contract.rb +2 -0
  187. data/lib/rosett_ai/plugins/mcp_contract.rb +2 -0
  188. data/lib/rosett_ai/plugins/registry.rb +10 -0
  189. data/lib/rosett_ai/policy/auditor.rb +1 -0
  190. data/lib/rosett_ai/policy/opt_out_scanner.rb +1 -0
  191. data/lib/rosett_ai/policy/tier_hierarchy.rb +2 -0
  192. data/lib/rosett_ai/policy/validator.rb +1 -0
  193. data/lib/rosett_ai/profiler.rb +7 -0
  194. data/lib/rosett_ai/project/drift_detector.rb +1 -0
  195. data/lib/rosett_ai/project/manager.rb +1 -0
  196. data/lib/rosett_ai/project/template_applier.rb +1 -0
  197. data/lib/rosett_ai/provenance/entry.rb +2 -0
  198. data/lib/rosett_ai/provenance/source.rb +1 -0
  199. data/lib/rosett_ai/provenance/store.rb +3 -0
  200. data/lib/rosett_ai/provenance/validator.rb +1 -0
  201. data/lib/rosett_ai/quorum/collector.rb +1 -0
  202. data/lib/rosett_ai/quorum/comparator.rb +2 -0
  203. data/lib/rosett_ai/quorum/strategies/adopt.rb +1 -0
  204. data/lib/rosett_ai/rai_config.rb +9 -0
  205. data/lib/rosett_ai/retrofit/engine.rb +2 -0
  206. data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +8 -0
  207. data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +10 -0
  208. data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +9 -0
  209. data/lib/rosett_ai/retrofit/secret_detector.rb +3 -0
  210. data/lib/rosett_ai/secrets_resolver.rb +1 -0
  211. data/lib/rosett_ai/session_hooks/installer.rb +130 -0
  212. data/lib/rosett_ai/smart_feedback/suggester.rb +4 -0
  213. data/lib/rosett_ai/smart_feedback/thor_middleware.rb +7 -0
  214. data/lib/rosett_ai/structured_logger.rb +1 -0
  215. data/lib/rosett_ai/telemetry/log_rotator.rb +1 -0
  216. data/lib/rosett_ai/telemetry.rb +1 -0
  217. data/lib/rosett_ai/thor/cli.rb +9 -0
  218. data/lib/rosett_ai/thor/tasks/adopt.rb +2 -0
  219. data/lib/rosett_ai/thor/tasks/backfill_user_yml.rb +207 -0
  220. data/lib/rosett_ai/thor/tasks/backup.rb +6 -0
  221. data/lib/rosett_ai/thor/tasks/behaviour.rb +12 -0
  222. data/lib/rosett_ai/thor/tasks/build.rb +106 -21
  223. data/lib/rosett_ai/thor/tasks/compile.rb +76 -32
  224. data/lib/rosett_ai/thor/tasks/completion.rb +9 -0
  225. data/lib/rosett_ai/thor/tasks/comply.rb +2 -0
  226. data/lib/rosett_ai/thor/tasks/config.rb +21 -5
  227. data/lib/rosett_ai/thor/tasks/content.rb +8 -0
  228. data/lib/rosett_ai/thor/tasks/dbus.rb +13 -0
  229. data/lib/rosett_ai/thor/tasks/design.rb +2 -0
  230. data/lib/rosett_ai/thor/tasks/desktop.rb +4 -0
  231. data/lib/rosett_ai/thor/tasks/doctor.rb +2 -0
  232. data/lib/rosett_ai/thor/tasks/documentation.rb +7 -0
  233. data/lib/rosett_ai/thor/tasks/engines.rb +8 -0
  234. data/lib/rosett_ai/thor/tasks/hooks.rb +8 -0
  235. data/lib/rosett_ai/thor/tasks/init.rb +1 -0
  236. data/lib/rosett_ai/thor/tasks/license.rb +8 -0
  237. data/lib/rosett_ai/thor/tasks/mcp.rb +40 -0
  238. data/lib/rosett_ai/thor/tasks/migrate.rb +2 -0
  239. data/lib/rosett_ai/thor/tasks/plugins.rb +15 -0
  240. data/lib/rosett_ai/thor/tasks/project.rb +8 -0
  241. data/lib/rosett_ai/thor/tasks/provenance.rb +8 -0
  242. data/lib/rosett_ai/thor/tasks/release.rb +8 -0
  243. data/lib/rosett_ai/thor/tasks/retrofit.rb +4 -0
  244. data/lib/rosett_ai/thor/tasks/validate.rb +1 -0
  245. data/lib/rosett_ai/thor/tasks/workflow.rb +14 -0
  246. data/lib/rosett_ai/tooling/version_checker.rb +1 -0
  247. data/lib/rosett_ai/ui/accessible_tui.rb +18 -0
  248. data/lib/rosett_ai/ui/base.rb +3 -0
  249. data/lib/rosett_ai/ui/gtk4.rb +19 -0
  250. data/lib/rosett_ai/ui/kde.rb +1 -0
  251. data/lib/rosett_ai/ui/qt6.rb +1 -0
  252. data/lib/rosett_ai/ui/registry.rb +15 -0
  253. data/lib/rosett_ai/ui/tui.rb +22 -0
  254. data/lib/rosett_ai/validators/behaviour_validator.rb +1 -0
  255. data/lib/rosett_ai/validators/design_validator.rb +2 -0
  256. data/lib/rosett_ai/validators/schema_validator.rb +4 -0
  257. data/lib/rosett_ai/validators/tooling_validator.rb +1 -0
  258. data/lib/rosett_ai/version.rb +2 -1
  259. data/lib/rosett_ai/version_consistency_checker.rb +6 -0
  260. data/lib/rosett_ai/workflow/engine.rb +1 -0
  261. data/lib/rosett_ai/workflow/manager.rb +1 -0
  262. data/lib/rosett_ai/workflow/schema_validator.rb +2 -0
  263. data/lib/rosett_ai/workflow/step_runner.rb +1 -0
  264. data/lib/rosett_ai/workflow/steps/rai_step.rb +1 -0
  265. data/lib/rosett_ai/yaml_loader.rb +2 -0
  266. data/lib/rosett_ai.rb +2 -0
  267. data/lib/scripts/generated/docker_hub_tags.rb +2 -0
  268. data/locales/ar.yml +2 -0
  269. data/locales/en.yml +5 -0
  270. data/locales/fr.yml +2 -0
  271. metadata +9 -189
  272. data/.ai-provenance.yml +0 -119
  273. data/.debride_whitelist +0 -186
  274. data/.fasterer.yml +0 -29
  275. data/.mdl_style.rb +0 -10
  276. data/.mdlrc +0 -3
  277. data/.mutant.yml +0 -49
  278. data/.namespace-allowlist +0 -42
  279. data/.reek.yml +0 -1040
  280. data/.rosett-ai/config.yml +0 -3
  281. data/.rspec +0 -5
  282. data/.rubocop.yml +0 -380
  283. data/.ruby-version +0 -1
  284. data/.yamllint +0 -51
  285. data/.yardopts +0 -12
  286. data/AI-DISCLOSURE.md +0 -48
  287. data/CLAUDE.md +0 -141
  288. data/CONTRIBUTING.md +0 -734
  289. data/INSTALL.md +0 -154
  290. data/LICENSE.md +0 -675
  291. data/QUICKSTART.md +0 -73
  292. data/Rakefile +0 -200
  293. data/SECURITY.md +0 -114
  294. data/cliff.toml +0 -52
  295. data/conf/behaviour/.gitkeep +0 -0
  296. data/conf/design/aaif_alignment.yml +0 -181
  297. data/conf/design/ab_testing.yml +0 -172
  298. data/conf/design/accessibility.yml +0 -84
  299. data/conf/design/ai_authorship.yml +0 -210
  300. data/conf/design/ai_provenance.yml +0 -224
  301. data/conf/design/ai_tool_configuration.yml +0 -207
  302. data/conf/design/architecture.yml +0 -139
  303. data/conf/design/autocompletion.yml +0 -115
  304. data/conf/design/backward_compatibility.yml +0 -112
  305. data/conf/design/behaviour_composition.yml +0 -246
  306. data/conf/design/build_rake_extraction.yml +0 -57
  307. data/conf/design/ci_pipeline.yml +0 -100
  308. data/conf/design/claude_code_configuration.yml +0 -157
  309. data/conf/design/compiler.yml +0 -128
  310. data/conf/design/comply.yml +0 -153
  311. data/conf/design/content_packs.yml +0 -84
  312. data/conf/design/desktop_integration.yml +0 -289
  313. data/conf/design/distribution.yml +0 -216
  314. data/conf/design/doctor.yml +0 -184
  315. data/conf/design/documentation.yml +0 -152
  316. data/conf/design/engine_architecture.yml +0 -257
  317. data/conf/design/error_handling.yml +0 -103
  318. data/conf/design/feature_flags.yml +0 -142
  319. data/conf/design/git_hooks.yml +0 -165
  320. data/conf/design/gui_plugins.yml +0 -475
  321. data/conf/design/i18n.yml +0 -84
  322. data/conf/design/integration_testing.yml +0 -56
  323. data/conf/design/licensing_system.yml +0 -88
  324. data/conf/design/lifecycle_management.yml +0 -208
  325. data/conf/design/mcp_integration.yml +0 -207
  326. data/conf/design/mcp_settings.yml +0 -126
  327. data/conf/design/migration.yml +0 -56
  328. data/conf/design/monitoring_observability.yml +0 -194
  329. data/conf/design/namespace_cleanup.yml +0 -145
  330. data/conf/design/plugin_test_segregation.yml +0 -145
  331. data/conf/design/policy_management.yml +0 -229
  332. data/conf/design/project_management.yml +0 -183
  333. data/conf/design/rai_mcp_asset_discovery.yml +0 -164
  334. data/conf/design/rai_mcp_server.yml +0 -605
  335. data/conf/design/release_management.yml +0 -117
  336. data/conf/design/retrofit.yml +0 -199
  337. data/conf/design/retrospective_analyzer.yml +0 -79
  338. data/conf/design/scope_hierarchy.yml +0 -352
  339. data/conf/design/security.yml +0 -115
  340. data/conf/design/session_retrospective.yml +0 -85
  341. data/conf/design/smart_ui_feedback.yml +0 -89
  342. data/conf/design/structured_logging.yml +0 -148
  343. data/conf/design/styles.yml +0 -123
  344. data/conf/design/test_peer_review.yml +0 -89
  345. data/conf/design/testing.yml +0 -136
  346. data/conf/design/threat_model.yml +0 -108
  347. data/conf/design/ui_framework.yml +0 -111
  348. data/conf/design/usage_optimization.yml +0 -122
  349. data/conf/design/version_management.yml +0 -60
  350. data/conf/design/workflow.yml +0 -227
  351. data/doc/AAIF_POSITIONING.md +0 -58
  352. data/doc/ADOPT.md +0 -224
  353. data/doc/AI_PROVENANCE.md +0 -139
  354. data/doc/ARCHITECTURE.md +0 -920
  355. data/doc/BEHAVIOUR.md +0 -409
  356. data/doc/BUILD.md +0 -138
  357. data/doc/CI_CD_RECIPES.md +0 -171
  358. data/doc/CLAUDE_SESSIONS_MOVED.md +0 -16
  359. data/doc/COMMAND_ANALYSIS.md +0 -229
  360. data/doc/CONFIGURATION.md +0 -281
  361. data/doc/DESIGN_AUDIT.md +0 -235
  362. data/doc/DESIGN_PEER_REVIEW.md +0 -771
  363. data/doc/DESKTOP.md +0 -447
  364. data/doc/ENGINES.md +0 -567
  365. data/doc/ENGINE_DEVELOPMENT_GUIDE.md +0 -417
  366. data/doc/FEATURE_AUDIT.md +0 -218
  367. data/doc/IMPLEMENTATION_PLAN.md +0 -669
  368. data/doc/INCIDENT_REPORT_2026-02-02.md +0 -251
  369. data/doc/MIGRATION_GUIDE.md +0 -88
  370. data/doc/PACKAGING.md +0 -232
  371. data/doc/PROJECT_DASHBOARD.md +0 -153
  372. data/doc/PULP_DEPLOYMENT.md +0 -164
  373. data/doc/QUALITY_FIX_SUMMARY.md +0 -110
  374. data/doc/QUICK_START.md +0 -162
  375. data/doc/REEK_CONFIGURATION.md +0 -166
  376. data/doc/REFERENCE.md +0 -253
  377. data/doc/REFERENCES.md +0 -324
  378. data/doc/SECURITY_REVIEW_CHECKLIST.md +0 -72
  379. data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +0 -359
  380. data/doc/SETUP.md +0 -202
  381. data/doc/TEST_PEER_REVIEW.md +0 -152
  382. data/doc/THREAT_MODEL.md +0 -230
  383. data/doc/USAGE.md +0 -545
  384. data/doc/USER_MANUAL.md +0 -585
  385. data/doc/ai_test_review_checklist.md +0 -110
  386. data/doc/changes/2026-02-18-packaging-fpm.md +0 -155
  387. data/doc/changes/2026-02-19-testing-infrastructure.md +0 -221
  388. data/doc/changes/2026-02-20-security-implementation.md +0 -281
  389. data/doc/changes/2026-02-20-styles-implementation.md +0 -220
  390. data/doc/changes/2026-02-21-architecture-completion.md +0 -95
  391. data/doc/changes/2026-02-21-architecture-ui-layer.md +0 -253
  392. data/doc/changes/2026-02-21-cc-config-implementation.md +0 -108
  393. data/doc/changes/2026-02-21-ci-pipeline-implementation.md +0 -214
  394. data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +0 -241
  395. data/doc/changes/2026-02-21-config-design-show-commands.md +0 -61
  396. data/doc/changes/2026-02-21-design-implementation-overview.md +0 -455
  397. data/doc/changes/2026-02-21-lifecycle-management.md +0 -196
  398. data/doc/changes/2026-02-21-path-resolver.md +0 -128
  399. data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +0 -45
  400. data/doc/changes/2026-03-01-ci-bundler-strategy.md +0 -120
  401. data/doc/changes/2026-03-20-security-hardening-phase2.md +0 -163
  402. data/doc/context/SESSION-HANDOFF.md +0 -69
  403. data/doc/context/ai-engine-usage-trends-2026.md +0 -80
  404. data/doc/context/plan-pluggable-engines.md +0 -590
  405. data/doc/decisions/001-flog-deferred.md +0 -32
  406. data/doc/decisions/002-path-resolution-strategy.md +0 -158
  407. data/doc/decisions/003-ui-adapter-selection.md +0 -193
  408. data/doc/decisions/004-design-document-validation.md +0 -179
  409. data/doc/decisions/005-package-splitting-strategy.md +0 -200
  410. data/doc/decisions/006-multi-engine-architecture.md +0 -147
  411. data/doc/decisions/007-engine-agnostic-pivot.md +0 -219
  412. data/doc/decisions/008-ci-bundler-strategy.md +0 -129
  413. data/doc/decisions/009-core-only-v1-release.md +0 -60
  414. data/doc/decisions/010-engine-debian-packaging.md +0 -66
  415. data/doc/decisions/011-context-aware-cli.md +0 -71
  416. data/doc/dependency_decisions.yml +0 -247
  417. data/doc/issues/001-wrapper-missing-environment-variables.md +0 -197
  418. data/doc/issues/002-embedded-ruby-wrong-prefix.md +0 -217
  419. data/doc/issues/003-smoke-test-false-positive.md +0 -127
  420. data/doc/issues/004-market-research-design-updates.md +0 -109
  421. data/doc/issues/005-compile-scope-coexistence.md +0 -161
  422. data/doc/locales/.gitkeep +0 -0
  423. data/doc/man/rai.1.ronn +0 -505
  424. data/doc/operations/packaging.md +0 -133
  425. data/doc/operations/rosett-ai-release.md +0 -65
  426. data/doc/reference/error-catalog.md +0 -107
  427. data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
  428. data/doc/reference/src/Pictures/cover.jpg +0 -0
  429. data/doc/reference/src/Pictures/head1.jpg +0 -0
  430. data/doc/reference/src/Pictures/head2.jpg +0 -0
  431. data/doc/reference/src/Pictures/head3.jpg +0 -0
  432. data/doc/reference/src/Pictures/head4.jpg +0 -0
  433. data/doc/reference/src/Pictures/head5.jpg +0 -0
  434. data/doc/reference/src/Pictures/head6.jpg +0 -0
  435. data/doc/reference/src/Pictures/head7.jpg +0 -0
  436. data/doc/reference/src/Pictures/head8.jpg +0 -0
  437. data/doc/reference/src/StyleInd.ist +0 -4
  438. data/doc/reference/src/bibliography.bib +0 -79
  439. data/doc/reference/src/main.tex +0 -1288
  440. data/doc/reference/src/structure.tex +0 -303
  441. data/doc/rosett-ai-bookmarks.html +0 -301
  442. data/kitchen.yml +0 -46
  443. data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
  444. data/locales/.gitkeep +0 -0
  445. data/packaging/build-engine-deb.sh +0 -81
  446. data/packaging/scripts/postinst +0 -17
  447. data/packaging/scripts/postrm +0 -19
  448. data/packaging/scripts/prerm +0 -10
  449. data/packaging/wrapper.sh.template +0 -38
  450. data/rosett-ai.gemspec +0 -63
  451. data/rules/.gitkeep +0 -0
  452. data/scripts/publish/pulp_upload.sh +0 -123
  453. data/settings.json +0 -29
@@ -33,6 +33,8 @@ module RosettAi
33
33
  method_option :check, type: :string, desc: 'Run only the named check'
34
34
  method_option :format, type: :string, enum: ['table', 'json'], default: 'table',
35
35
  desc: 'Output format'
36
+ # Return the current status.
37
+ # @return [String]
36
38
  def status
37
39
  validate_check_name!(options[:check]) if options[:check]
38
40
  results = RosettAi::Doctor.run_all(only: options[:check])
@@ -13,6 +13,7 @@ module RosettAi
13
13
  module Tasks
14
14
  # Documentation management tasks
15
15
  class Documentation < ::Thor
16
+ # @return [Hash] Terminal color codes for documentation types.
16
17
  TYPE_COLORS = {
17
18
  lib: :cyan, behaviour: :magenta, dependency: :yellow, reference: :blue
18
19
  }.freeze
@@ -53,6 +54,8 @@ module RosettAi
53
54
  default: false,
54
55
  desc: 'Skip LaTeX reference document compilation'
55
56
 
57
+ # Update to the latest version.
58
+ # @return [void]
56
59
  def update
57
60
  changes = scan_with_spinner
58
61
  return puts Paint[t('no_updates'), :yellow] if changes.empty?
@@ -76,6 +79,8 @@ module RosettAi
76
79
 
77
80
  Related commands: update, translate
78
81
  LONGDESC
82
+ # Return the current status.
83
+ # @return [String]
79
84
  def status
80
85
  display_status_header
81
86
  display_doc_files
@@ -107,6 +112,8 @@ module RosettAi
107
112
  required: true,
108
113
  desc: 'Target locale'
109
114
 
115
+ # Translate documentation to the target locale.
116
+ # @return [void]
110
117
  def translate(source_file = nil)
111
118
  files = source_file ? [source_file] : Dir.glob(RosettAi.root.join('doc', '*.md'))
112
119
 
@@ -23,6 +23,8 @@ module RosettAi
23
23
 
24
24
  Related commands: detect, status, plugins
25
25
  LONGDESC
26
+ # List available items.
27
+ # @return [void]
26
28
  def list
27
29
  rows = RosettAi::Engines::Registry.available.map do |name|
28
30
  manifest = RosettAi::Engines::Registry.manifest(name)
@@ -51,6 +53,8 @@ module RosettAi
51
53
 
52
54
  Related commands: list, status, plugins
53
55
  LONGDESC
56
+ # Detect available engines on the system.
57
+ # @return [Array<Hash>]
54
58
  def detect
55
59
  rows = RosettAi::Engines::Registry.available.filter_map do |name|
56
60
  manifest = RosettAi::Engines::Registry.manifest(name)
@@ -85,6 +89,8 @@ module RosettAi
85
89
 
86
90
  Related commands: list, detect, plugins
87
91
  LONGDESC
92
+ # Return the current status.
93
+ # @return [String]
88
94
  def status
89
95
  default_engine = RosettAi.rai_config.default_engine
90
96
  puts "#{t('default_engine')}: #{Rainbow(default_engine).bright}"
@@ -120,6 +126,8 @@ module RosettAi
120
126
 
121
127
  Related commands: list, detect, status
122
128
  LONGDESC
129
+ # List installed engine plugins.
130
+ # @return [void]
123
131
  def plugins
124
132
  plugin_engines = RosettAi::Plugins::Registry.available(:engine)
125
133
 
@@ -35,6 +35,8 @@ module RosettAi
35
35
  Related: hooks uninstall, hooks status
36
36
  LONGDESC
37
37
  method_option :verbose, type: :boolean, default: false, desc: 'Show detailed output'
38
+ # Install the component.
39
+ # @return [void]
38
40
  def install
39
41
  config = load_hooks_config
40
42
  return exit_with_error(t('no_config')) if config.empty?
@@ -61,6 +63,8 @@ module RosettAi
61
63
 
62
64
  Related: hooks install, hooks status
63
65
  LONGDESC
66
+ # Remove the installed hooks.
67
+ # @return [void]
64
68
  def uninstall
65
69
  installer = build_installer({})
66
70
  results = installer.uninstall
@@ -81,6 +85,8 @@ module RosettAi
81
85
  Related: hooks status, hooks install
82
86
  LONGDESC
83
87
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
88
+ # List available items.
89
+ # @return [void]
84
90
  def list
85
91
  installer = build_installer({})
86
92
  hooks = installer.list
@@ -111,6 +117,8 @@ module RosettAi
111
117
  Related: hooks install, hooks list
112
118
  LONGDESC
113
119
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
120
+ # Return the current status.
121
+ # @return [String]
114
122
  def status
115
123
  config = load_hooks_config
116
124
  installer = RosettAi::GitHooks::Installer.new(
@@ -15,6 +15,7 @@ module RosettAi
15
15
  class Init < ::Thor
16
16
  default_task :setup
17
17
 
18
+ # @return [Array] Default project subdirectory names.
18
19
  PROJECT_DIRS = ['conf', 'conf/behaviour', 'conf/design'].freeze
19
20
 
20
21
  desc 'setup', 'Initialize rai project structure'
@@ -31,6 +31,10 @@ module RosettAi
31
31
 
32
32
  Related commands: status, deactivate
33
33
  LONGDESC
34
+ # Activate a license key.
35
+ #
36
+ # @param raw_key [Object] the raw key
37
+ # @return [void]
34
38
  def activate(raw_key)
35
39
  key = RosettAi::Licensing::LicenseKey.new(raw_key)
36
40
  key.decode
@@ -54,6 +58,8 @@ module RosettAi
54
58
 
55
59
  Related commands: activate, deactivate
56
60
  LONGDESC
61
+ # Return the current status.
62
+ # @return [String]
57
63
  def status
58
64
  result = RosettAi::Licensing::LicenseValidator.new.validate
59
65
 
@@ -77,6 +83,8 @@ module RosettAi
77
83
 
78
84
  Related commands: activate, status
79
85
  LONGDESC
86
+ # Deactivate the current license.
87
+ # @return [void]
80
88
  def deactivate
81
89
  store = RosettAi::Licensing::LicenseStore.new
82
90
 
@@ -7,6 +7,7 @@ require 'terminal-table'
7
7
 
8
8
  module RosettAi
9
9
  module Thor
10
+ # CLI subcommand task implementations.
10
11
  module Tasks
11
12
  # Thor CLI for MCP server and administration.
12
13
  #
@@ -44,6 +45,8 @@ module RosettAi
44
45
  method_option :allow_remote, type: :boolean, default: false, desc: 'Allow non-localhost binding'
45
46
  method_option :config, type: :string, desc: 'Path to server config YAML'
46
47
  method_option :plugin, type: :array, default: [], desc: 'Plugin names to load'
48
+ # Start the MCP JSON-RPC server.
49
+ # @return [void]
47
50
  def serve
48
51
  server = RosettAi::Mcp::Server.new(
49
52
  config_path: options[:config],
@@ -85,6 +88,8 @@ module RosettAi
85
88
  Related: mcp status, mcp validate
86
89
  LONGDESC
87
90
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
91
+ # List available items.
92
+ # @return [void]
88
93
  def list
89
94
  registry = build_registry
90
95
  servers = registry.list
@@ -112,6 +117,8 @@ module RosettAi
112
117
  Related: mcp list, mcp status
113
118
  LONGDESC
114
119
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
120
+ # Validate the input and return any errors.
121
+ # @return [Array<Hash>]
115
122
  def validate
116
123
  registry = build_registry
117
124
  validator = RosettAi::Mcp::Admin::SchemaValidator.new
@@ -137,6 +144,8 @@ module RosettAi
137
144
  Related: mcp list, mcp validate
138
145
  LONGDESC
139
146
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
147
+ # Return the current status.
148
+ # @return [String]
140
149
  def status
141
150
  registry = build_registry
142
151
  checker = RosettAi::Mcp::Admin::HealthChecker.new
@@ -166,6 +175,8 @@ module RosettAi
166
175
  Related: mcp validate, mcp status
167
176
  LONGDESC
168
177
  method_option :format, type: :string, default: 'json', enum: ['table', 'json'], desc: 'Output format'
178
+ # Run a security audit on MCP configuration.
179
+ # @return [void]
169
180
  def audit
170
181
  registry = build_registry
171
182
  checker = RosettAi::Mcp::Admin::HealthChecker.new
@@ -192,6 +203,11 @@ module RosettAi
192
203
  method_option :transport, type: :string, default: 'stdio',
193
204
  enum: ['stdio', 'http', 'streamable-http'],
194
205
  desc: 'Transport type'
206
+ # Add a new entry.
207
+ #
208
+ # @param name [Object] the name
209
+ # @param uri [Object] the uri
210
+ # @return [void]
195
211
  def add(name, uri)
196
212
  installer = build_installer
197
213
  result = installer.install(name: name, uri: uri, transport: options[:transport])
@@ -219,6 +235,10 @@ module RosettAi
219
235
  Related: mcp add, mcp list
220
236
  LONGDESC
221
237
  method_option :force, type: :boolean, default: false, desc: 'Force removal of managed servers'
238
+ # Remove the component.
239
+ #
240
+ # @param name [Object] the name
241
+ # @return [void]
222
242
  def remove(name)
223
243
  installer = build_installer
224
244
  result = installer.remove(name: name, force: options[:force])
@@ -247,6 +267,8 @@ module RosettAi
247
267
  LONGDESC
248
268
  method_option :format, type: :string, default: 'table', enum: ['table', 'json'], desc: 'Output format'
249
269
  map 'trust-sources' => :trust_sources
270
+ # List trusted MCP sources.
271
+ # @return [void]
250
272
  def trust_sources
251
273
  manager = build_trust_manager
252
274
  sources = manager.list
@@ -267,6 +289,10 @@ module RosettAi
267
289
  LONGDESC
268
290
  method_option :description, type: :string, default: 'User-trusted domain', desc: 'Trust source description'
269
291
  map 'trust-add' => :trust_add
292
+ # Add a trusted MCP source.
293
+ #
294
+ # @param domain [Object] the domain
295
+ # @return [void]
270
296
  def trust_add(domain)
271
297
  manager = build_trust_manager
272
298
  manager.add_trust(domain, description: options[:description])
@@ -287,6 +313,10 @@ module RosettAi
287
313
  Related: mcp trust-add, mcp trust-sources
288
314
  LONGDESC
289
315
  map 'trust-remove' => :trust_remove
316
+ # Remove a trusted MCP source.
317
+ #
318
+ # @param domain [Object] the domain
319
+ # @return [void]
290
320
  def trust_remove(domain)
291
321
  manager = build_trust_manager
292
322
  if manager.remove_trust(domain)
@@ -308,6 +338,8 @@ module RosettAi
308
338
 
309
339
  raictl mcp tools
310
340
  LONGDESC
341
+ # List registered MCP tools.
342
+ # @return [void]
311
343
  def tools
312
344
  server = RosettAi::Mcp::Server.new
313
345
  tool_list = server.tools
@@ -334,6 +366,8 @@ module RosettAi
334
366
  method_option :name, type: :string, required: true, desc: 'Key name'
335
367
  method_option :keyfile, type: :string, default: RosettAi::Mcp::Keyfile::DEFAULT_FILENAME, desc: 'Keyfile path'
336
368
  map 'generate-key' => :generate_key
369
+ # Generate a new MCP API key.
370
+ # @return [void]
337
371
  def generate_key
338
372
  path = RosettAi::Mcp::Keyfile.create_if_missing(options[:keyfile])
339
373
  plaintext = RosettAi::Mcp::KeyHasher.generate_key
@@ -362,6 +396,8 @@ module RosettAi
362
396
  LONGDESC
363
397
  method_option :keyfile, type: :string, default: RosettAi::Mcp::Keyfile::DEFAULT_FILENAME, desc: 'Keyfile path'
364
398
  map 'list-keys' => :list_keys
399
+ # List all MCP API keys.
400
+ # @return [void]
365
401
  def list_keys
366
402
  path = File.expand_path(options[:keyfile])
367
403
  unless File.exist?(path)
@@ -399,6 +435,8 @@ module RosettAi
399
435
  method_option :name, type: :string, required: true, desc: 'Key name to revoke'
400
436
  method_option :keyfile, type: :string, default: RosettAi::Mcp::Keyfile::DEFAULT_FILENAME, desc: 'Keyfile path'
401
437
  map 'revoke-key' => :revoke_key
438
+ # Revoke an MCP API key.
439
+ # @return [void]
402
440
  def revoke_key
403
441
  keyfile = RosettAi::Mcp::Keyfile.new(File.expand_path(options[:keyfile]))
404
442
  keyfile.load!
@@ -425,6 +463,8 @@ module RosettAi
425
463
  method_option :name, type: :string, required: true, desc: 'Key name to rotate'
426
464
  method_option :keyfile, type: :string, default: RosettAi::Mcp::Keyfile::DEFAULT_FILENAME, desc: 'Keyfile path'
427
465
  map 'rotate-key' => :rotate_key
466
+ # Rotate an MCP API key.
467
+ # @return [void]
428
468
  def rotate_key
429
469
  keyfile = RosettAi::Mcp::Keyfile.new(File.expand_path(options[:keyfile]))
430
470
  keyfile.load!
@@ -36,6 +36,8 @@ module RosettAi
36
36
  LONGDESC
37
37
  option :workspace, type: :string, desc: 'Scan and migrate all .nncc/ dirs under PATH'
38
38
  option :dry_run, type: :boolean, default: false, desc: 'Show what would be migrated'
39
+ # Execute the legacy configuration migration.
40
+ # @return [void]
39
41
  def run_migrate
40
42
  migrate_xdg_config
41
43
  migrate_projects
@@ -16,6 +16,7 @@ module RosettAi
16
16
  # @author hugo
17
17
  # @author claude
18
18
  class Plugins < ::Thor
19
+ # @return [Array] Set of permitted type values.
19
20
  VALID_TYPES = ['engine', 'gui', 'mcp'].freeze
20
21
 
21
22
  desc 'list TYPE', 'List installed plugins of a given type (engine, gui, mcp)'
@@ -28,6 +29,10 @@ module RosettAi
28
29
 
29
30
  Related: plugins install, plugins remove, engines list
30
31
  LONGDESC
32
+ # List available items.
33
+ #
34
+ # @param type [Object] the type
35
+ # @return [void]
31
36
  def list(type)
32
37
  validate_type!(type)
33
38
  type_sym = type.to_sym
@@ -58,6 +63,11 @@ module RosettAi
58
63
 
59
64
  Related: plugins remove, plugins list
60
65
  LONGDESC
66
+ # Install the component.
67
+ #
68
+ # @param type [Object] the type
69
+ # @param name [Object] the name
70
+ # @return [void]
61
71
  def install(type, name)
62
72
  validate_type!(type)
63
73
  package = plugin_package_name(type, name)
@@ -85,6 +95,11 @@ module RosettAi
85
95
 
86
96
  Related: plugins install, plugins list
87
97
  LONGDESC
98
+ # Remove the component.
99
+ #
100
+ # @param type [Object] the type
101
+ # @param name [Object] the name
102
+ # @return [void]
88
103
  def remove(type, name)
89
104
  validate_type!(type)
90
105
  package = plugin_package_name(type, name)
@@ -30,6 +30,8 @@ module RosettAi
30
30
  LONGDESC
31
31
  method_option :format, type: :string, enum: ['table', 'json'], default: 'table',
32
32
  desc: 'Output format'
33
+ # Return the current status.
34
+ # @return [String]
33
35
  def status
34
36
  manager = RosettAi::Project::Manager.new(project_root: resolve_project_root)
35
37
  result = manager.status
@@ -50,6 +52,8 @@ module RosettAi
50
52
 
51
53
  raictl project info
52
54
  LONGDESC
55
+ # Display project information.
56
+ # @return [void]
53
57
  def info
54
58
  manager = RosettAi::Project::Manager.new(project_root: resolve_project_root)
55
59
  result = manager.info
@@ -114,6 +118,8 @@ module RosettAi
114
118
  desc: 'Drift type to detect (default: both)'
115
119
  method_option :format, type: :string, enum: ['table', 'json'], default: 'table',
116
120
  desc: 'Output format'
121
+ # Check for project configuration drift.
122
+ # @return [void]
117
123
  def drift
118
124
  root = resolve_project_root
119
125
  validate_project!(root)
@@ -149,6 +155,8 @@ module RosettAi
149
155
  desc: 'Apply breaking changes without prompting'
150
156
  method_option :simulate, type: :boolean, default: false,
151
157
  desc: 'Preview changes without applying'
158
+ # Synchronize project configuration.
159
+ # @return [void]
152
160
  def sync
153
161
  sync_mgr = RosettAi::Project::SyncManager.new(
154
162
  project_root: resolve_project_root,
@@ -30,6 +30,8 @@ module RosettAi
30
30
 
31
31
  Related commands: validate, show, log
32
32
  LONGDESC
33
+ # Initialize the provenance file in the current project.
34
+ # @return [void]
33
35
  def init
34
36
  store = build_store
35
37
  store.init
@@ -55,6 +57,8 @@ module RosettAi
55
57
 
56
58
  Related commands: init, show, log
57
59
  LONGDESC
60
+ # Validate the input and return any errors.
61
+ # @return [Array<Hash>]
58
62
  def validate
59
63
  store = build_store
60
64
  data = store.read
@@ -92,6 +96,8 @@ module RosettAi
92
96
  Related commands: init, validate, log
93
97
  LONGDESC
94
98
  method_option :file, type: :string, desc: 'Show provenance for a specific file'
99
+ # Display detailed information for the named item.
100
+ # @return [void]
95
101
  def show(commit = nil)
96
102
  store = build_store
97
103
  entries = if options[:file]
@@ -133,6 +139,8 @@ module RosettAi
133
139
  Related commands: init, validate, show
134
140
  LONGDESC
135
141
  method_option :role, type: :string, desc: 'Filter by AI role'
142
+ # Display the provenance log.
143
+ # @return [void]
136
144
  def log
137
145
  store = build_store
138
146
  entries = store.read['entries'].reverse
@@ -19,8 +19,10 @@ module RosettAi
19
19
  #
20
20
  # Design reference: conf/design/release_management.yml
21
21
  class Release < ::Thor
22
+ # @return [Array] Allowed release version bump levels.
22
23
  VALID_LEVELS = ['major', 'minor', 'patch'].freeze
23
24
 
25
+ # @return [Array] Release verification gate definitions.
24
26
  VERIFICATION_GATES = [
25
27
  ['rspec', ['bundle', 'exec', 'rspec', '--format', 'progress']],
26
28
  ['rubocop', ['bundle', 'exec', 'rubocop', '--format', 'simple']],
@@ -51,6 +53,10 @@ module RosettAi
51
53
  LONGDESC
52
54
  method_option :skip_verify, type: :boolean, default: false,
53
55
  desc: 'Skip verification suite (NOT recommended)'
56
+ # Prepare the release artifacts.
57
+ #
58
+ # @param level [Object] the level
59
+ # @return [void]
54
60
  def prepare(level)
55
61
  validate_level!(level)
56
62
  ensure_clean_working_tree!
@@ -108,6 +114,8 @@ module RosettAi
108
114
 
109
115
  Related commands: prepare, tag
110
116
  LONGDESC
117
+ # Return the current status.
118
+ # @return [String]
111
119
  def status
112
120
  version = current_version
113
121
  last_tag = latest_tag
@@ -38,6 +38,8 @@ module RosettAi
38
38
  desc: 'Overwrite existing Rosett-AI YAML files'
39
39
  method_option :simulate, type: :boolean, default: false,
40
40
  desc: 'Show what would be generated without writing'
41
+ # Convert native configs to rosett-ai YAML format.
42
+ # @return [void]
41
43
  def convert
42
44
  output_dir = resolve_output_dir
43
45
  engine = RosettAi::Retrofit::Engine.new(
@@ -54,6 +56,8 @@ module RosettAi
54
56
  end
55
57
 
56
58
  desc 'engines', 'List available retrofit engines'
59
+ # List available retrofit engine parsers.
60
+ # @return [void]
57
61
  def engines
58
62
  available = RosettAi::Retrofit::Engine.available_engines
59
63
  if available.empty?
@@ -15,6 +15,7 @@ module RosettAi
15
15
  class Validate < ::Thor
16
16
  default_task :all
17
17
 
18
+ # @return [Array] Validation category names.
18
19
  CATEGORIES = [
19
20
  { name: 'behaviour', dir: 'conf/behaviour', validator: 'BehaviourValidator' },
20
21
  { name: 'design', dir: 'conf/design', validator: 'DesignValidator' },
@@ -27,6 +27,8 @@ module RosettAi
27
27
 
28
28
  raictl workflow list
29
29
  LONGDESC
30
+ # List available items.
31
+ # @return [void]
30
32
  def list
31
33
  files = discover_workflows
32
34
  if files.empty?
@@ -60,6 +62,10 @@ module RosettAi
60
62
 
61
63
  raictl workflow validate release
62
64
  LONGDESC
65
+ # Validate the input and return any errors.
66
+ #
67
+ # @param name [Object] the name
68
+ # @return [Array<Hash>]
63
69
  def validate(name)
64
70
  path = resolve_workflow(name)
65
71
  engine = RosettAi::Workflow::Engine.new(workflow_path: path)
@@ -83,6 +89,10 @@ module RosettAi
83
89
 
84
90
  raictl workflow simulate release
85
91
  LONGDESC
92
+ # Simulate workflow execution without applying changes.
93
+ #
94
+ # @param name [Object] the name
95
+ # @return [void]
86
96
  def simulate(name)
87
97
  path = resolve_workflow(name)
88
98
  engine = RosettAi::Workflow::Engine.new(workflow_path: path)
@@ -113,6 +123,10 @@ module RosettAi
113
123
  desc: 'Resume from last completed step'
114
124
  method_option :format, type: :string, enum: ['table', 'json'], default: 'table',
115
125
  desc: 'Output format'
126
+ # Execute the named workflow.
127
+ #
128
+ # @param name [Object] the name
129
+ # @return [void]
116
130
  def execute(name)
117
131
  path = resolve_workflow(name)
118
132
  audit_path = resolve_audit_log_path(name)
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # External tool integration and version checking.
7
8
  module Tooling
8
9
  # MCP-facing facade for tool version checking.
9
10
  #
@@ -12,10 +12,19 @@ module RosettAi
12
12
  # ANSI escape sequences. Auto-selected when assistive technology is
13
13
  # detected (ORCA_RUNNING, BRLTTY_TTY).
14
14
  class AccessibleTui < Tui
15
+ # Render content in the UI backend.
16
+ #
17
+ # @param content [Object] the content
18
+ # @return [void]
15
19
  def render(content)
16
20
  $stdout.puts(RosettAi::TextSanitizer.strip_ansi(String(content)))
17
21
  end
18
22
 
23
+ # Render a table in the UI backend.
24
+ #
25
+ # @param headers [Object] the headers
26
+ # @param rows [Object] the rows
27
+ # @return [void]
19
28
  def display_table(headers, rows)
20
29
  widths = compute_column_widths(headers, rows)
21
30
 
@@ -27,6 +36,10 @@ module RosettAi
27
36
  rows.each { |row| $stdout.puts(format_row(row, widths)) }
28
37
  end
29
38
 
39
+ # Display a spinner during a long-running operation.
40
+ #
41
+ # @param message [Object] the message
42
+ # @return [void]
30
43
  def show_spinner(message)
31
44
  $stdout.puts("Processing: #{message}...")
32
45
  result = yield
@@ -37,6 +50,11 @@ module RosettAi
37
50
  raise e
38
51
  end
39
52
 
53
+ # Announce a message to the user via the UI backend.
54
+ #
55
+ # @param message [Object] the message
56
+ # @param priority [Object] the priority
57
+ # @return [void]
40
58
  def announce(message, priority: :polite)
41
59
  prefix = priority == :assertive ? '[ASSERTIVE]' : '[POLITE]'
42
60
  warn("#{prefix} #{message}")
@@ -11,6 +11,7 @@ module RosettAi
11
11
  # implement the required methods. The shared example
12
12
  # 'a UI implementation' verifies conformance.
13
13
  class Base
14
+ # @return [Array] Rtl locales constant.
14
15
  RTL_LOCALES = ['ar', 'he', 'fa', 'ur'].freeze
15
16
 
16
17
  def render(content)
@@ -37,6 +38,8 @@ module RosettAi
37
38
  ENV.key?('ORCA_RUNNING') || ENV.key?('BRLTTY_TTY')
38
39
  end
39
40
 
41
+ # Return the text direction for the current locale.
42
+ # @return [Symbol]
40
43
  def text_direction(locale = nil)
41
44
  lang = locale || ENV.fetch('LANG', 'en')[0, 2]
42
45
  RTL_LOCALES.include?(lang) ? :rtl : :ltr
@@ -15,6 +15,7 @@ module RosettAi
15
15
  # Methods raise RosettAi::Error with install instructions if the gem
16
16
  # is not available at runtime.
17
17
  class Gtk4 < Base
18
+ # @return [String] Error message when the UI backend is not available.
18
19
  UNAVAILABLE_MESSAGE = 'GTK4 adapter requires the gtk4 gem. Install: gem install gtk4'
19
20
 
20
21
  def self.available?
@@ -24,6 +25,10 @@ module RosettAi
24
25
  false
25
26
  end
26
27
 
28
+ # Render content in the UI backend.
29
+ #
30
+ # @param content [Object] the content
31
+ # @return [void]
27
32
  def render(content)
28
33
  require_gtk4!
29
34
  text_view = ::Gtk::TextView.new
@@ -32,6 +37,11 @@ module RosettAi
32
37
  text_view
33
38
  end
34
39
 
40
+ # Render a table in the UI backend.
41
+ #
42
+ # @param headers [Object] the headers
43
+ # @param rows [Object] the rows
44
+ # @return [void]
35
45
  def display_table(headers, rows)
36
46
  require_gtk4!
37
47
  store = build_list_store(headers.length)
@@ -49,6 +59,10 @@ module RosettAi
49
59
  dialog
50
60
  end
51
61
 
62
+ # Display a spinner during a long-running operation.
63
+ #
64
+ # @param _message [Object] the message
65
+ # @return [void]
52
66
  def show_spinner(_message)
53
67
  require_gtk4!
54
68
  spinner = ::Gtk::Spinner.new
@@ -58,6 +72,11 @@ module RosettAi
58
72
  result
59
73
  end
60
74
 
75
+ # Announce a message to the user via the UI backend.
76
+ #
77
+ # @param message [Object] the message
78
+ # @param priority [Object] the priority
79
+ # @return [void]
61
80
  def announce(message, priority: :polite)
62
81
  warn("[GTK4:#{priority}] #{message}")
63
82
  end
@@ -12,6 +12,7 @@ module RosettAi
12
12
  # KDE integration requires Qt6 bindings which do not exist for Ruby.
13
13
  # This adapter serves as a placeholder for the rosett-ai-kde package concept.
14
14
  class Kde < Base
15
+ # @return [String] Error message when the UI backend is not available.
15
16
  UNAVAILABLE_MESSAGE = 'KDE adapter not available — Ruby Qt6/KDE bindings do not exist. Use GTK4 or TUI.'
16
17
 
17
18
  def render(_content)
@@ -12,6 +12,7 @@ module RosettAi
12
12
  # Ruby Qt6 bindings do not exist (qtbindings is unmaintained, Qt4-only).
13
13
  # This adapter serves as a placeholder for the rosett-ai-qt6 package concept.
14
14
  class Qt6 < Base
15
+ # @return [String] Error message when the UI backend is not available.
15
16
  UNAVAILABLE_MESSAGE = 'Qt6 adapter not available — Ruby Qt6 bindings do not exist. Use GTK4 or TUI.'
16
17
 
17
18
  def render(_content)