rosett-ai 1.3.3 → 1.5.9

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 +398 -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 +87 -4
  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
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class LicenseStatusTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_license_status'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Show rai license activation status'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => true,
22
25
  'destructiveHint' => false,
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class ProjectTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_project'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Show rai project status, info, or drift detection'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => true,
22
25
  'destructiveHint' => false,
@@ -24,8 +27,10 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Array] Set of permitted action values.
27
31
  VALID_ACTIONS = ['status', 'info', 'drift'].freeze
28
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
29
34
  INPUT_SCHEMA = {
30
35
  type: 'object',
31
36
  properties: {
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class ProvenanceTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_provenance'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Query AI provenance (validate, show, log)'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => true,
22
25
  'destructiveHint' => false,
@@ -24,8 +27,10 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Array] Set of permitted action values.
27
31
  VALID_ACTIONS = ['validate', 'show', 'log'].freeze
28
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
29
34
  INPUT_SCHEMA = {
30
35
  type: 'object',
31
36
  properties: {
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class ProvenanceWriteTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_provenance_init'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Initialize AI provenance tracking in a project'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => false,
22
25
  'destructiveHint' => false,
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class RetrofitTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_retrofit'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Scan and convert native AI configs to rosett-ai format'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => false,
22
25
  'destructiveHint' => false,
@@ -24,8 +27,10 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Array] Set of permitted action values.
27
31
  VALID_ACTIONS = ['engines', 'scan', 'convert'].freeze
28
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
29
34
  INPUT_SCHEMA = {
30
35
  type: 'object',
31
36
  properties: {
@@ -18,9 +18,12 @@ module RosettAi
18
18
  # @author hugo
19
19
  # @author claude
20
20
  class RuleSearchTool
21
+ # @return [String] MCP tool identifier string.
21
22
  TOOL_NAME = 'rai_rule_search'
23
+ # @return [String] Human-readable description of this tool.
22
24
  DESCRIPTION = 'Search rules by keyword with optional priority/scope/enabled filters'
23
25
 
26
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
24
27
  ANNOTATIONS = {
25
28
  'readOnlyHint' => true,
26
29
  'destructiveHint' => false,
@@ -28,6 +31,7 @@ module RosettAi
28
31
  'openWorldHint' => false
29
32
  }.freeze
30
33
 
34
+ # @return [Hash] JSON Schema defining the tool input parameters.
31
35
  INPUT_SCHEMA = {
32
36
  type: 'object',
33
37
  properties: {
@@ -17,9 +17,12 @@ module RosettAi
17
17
  # @author hugo
18
18
  # @author claude
19
19
  class SchemaGetTool
20
+ # @return [String] MCP tool identifier string.
20
21
  TOOL_NAME = 'rai_schema_get'
22
+ # @return [String] Human-readable description of this tool.
21
23
  DESCRIPTION = 'Get JSON Schema content for behaviour/design/tooling validation'
22
24
 
25
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
23
26
  ANNOTATIONS = {
24
27
  'readOnlyHint' => true,
25
28
  'destructiveHint' => false,
@@ -27,6 +30,7 @@ module RosettAi
27
30
  'openWorldHint' => false
28
31
  }.freeze
29
32
 
33
+ # @return [Hash] Valid schemas constant.
30
34
  VALID_SCHEMAS = {
31
35
  'behaviour' => 'behaviour_schema.json',
32
36
  'design' => 'design_schema.json',
@@ -36,6 +40,7 @@ module RosettAi
36
40
  'policy' => 'policy_schema.json'
37
41
  }.freeze
38
42
 
43
+ # @return [Hash] JSON Schema defining the tool input parameters.
39
44
  INPUT_SCHEMA = {
40
45
  type: 'object',
41
46
  properties: {
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class ToolingTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_tooling'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Run tooling validation (CI YAML, version checks)'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => true,
22
25
  'destructiveHint' => false,
@@ -24,8 +27,10 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Array] Set of permitted action values.
27
31
  VALID_ACTIONS = ['validate-ci-yaml', 'check-versions'].freeze
28
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
29
34
  INPUT_SCHEMA = {
30
35
  type: 'object',
31
36
  properties: {
@@ -17,9 +17,12 @@ module RosettAi
17
17
  # @author hugo
18
18
  # @author claude
19
19
  class ValidateTool
20
+ # @return [String] MCP tool identifier string.
20
21
  TOOL_NAME = 'rai_validate'
22
+ # @return [String] Human-readable description of this tool.
21
23
  DESCRIPTION = 'Validate rai configuration files (behaviours, designs, tooling)'
22
24
 
25
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
23
26
  ANNOTATIONS = {
24
27
  'readOnlyHint' => true,
25
28
  'destructiveHint' => false,
@@ -27,6 +30,7 @@ module RosettAi
27
30
  'openWorldHint' => false
28
31
  }.freeze
29
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
30
34
  INPUT_SCHEMA = {
31
35
  type: 'object',
32
36
  properties: {
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class WorkflowExecuteTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_workflow_execute'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'Execute a named rai workflow'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => false,
22
25
  'destructiveHint' => false,
@@ -24,6 +27,7 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Hash] JSON Schema defining the tool input parameters.
27
31
  INPUT_SCHEMA = {
28
32
  type: 'object',
29
33
  properties: {
@@ -14,9 +14,12 @@ module RosettAi
14
14
  # @author hugo
15
15
  # @author claude
16
16
  class WorkflowTool
17
+ # @return [String] MCP tool identifier string.
17
18
  TOOL_NAME = 'rai_workflow'
19
+ # @return [String] Human-readable description of this tool.
18
20
  DESCRIPTION = 'List, validate, or simulate rai workflows'
19
21
 
22
+ # @return [Hash] MCP protocol annotations describing tool capabilities.
20
23
  ANNOTATIONS = {
21
24
  'readOnlyHint' => true,
22
25
  'destructiveHint' => false,
@@ -24,8 +27,10 @@ module RosettAi
24
27
  'openWorldHint' => false
25
28
  }.freeze
26
29
 
30
+ # @return [Array] Set of permitted action values.
27
31
  VALID_ACTIONS = ['list', 'validate', 'simulate'].freeze
28
32
 
33
+ # @return [Hash] JSON Schema defining the tool input parameters.
29
34
  INPUT_SCHEMA = {
30
35
  type: 'object',
31
36
  properties: {
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # Legacy configuration migration (NNCC and XDG paths).
7
8
  module Migration
8
9
  # Detects configuration files that need migration to the current schema.
9
10
  #
@@ -18,7 +18,9 @@ module RosettAi
18
18
  # @author hugo
19
19
  # @author claude
20
20
  class NnccConfigMigrator
21
+ # @return [String] Default source directory for NNCC config migration.
21
22
  DEFAULT_SOURCE = '~/.config/nncc'
23
+ # @return [String] Default target directory for NNCC config migration.
22
24
  DEFAULT_TARGET = '~/.config/rosett-ai'
23
25
 
24
26
  attr_reader :source, :target, :migrated
@@ -10,11 +10,13 @@ module RosettAi
10
10
  # Migrates behaviour/schema files from legacy ~/.claude/conf/ to
11
11
  # XDG-compliant ~/.config/rosett-ai/conf/.
12
12
  #
13
- # Created after WP#943: global compile scope was reading from the
13
+ # Created after discovering that global compile scope was reading from the
14
14
  # installation directory because init placed files at ~/.claude/conf/
15
15
  # instead of the XDG path specified in scope_hierarchy.yml.
16
16
  class XdgMigrator
17
+ # @return [Object] Path to the legacy XDG configuration directory.
17
18
  LEGACY_CONF = File.expand_path('~/.claude/conf')
19
+ # @return [String] Suffix appended to migrated legacy directories.
18
20
  MIGRATED_SUFFIX = '.migrated-to-xdg'
19
21
 
20
22
  attr_reader :legacy_dir, :xdg_dir, :migrated
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # System package manager abstraction (apt, gem).
7
8
  module PackageManager
8
9
  # APT package manager backend for Debian-based systems.
9
10
  #
@@ -13,9 +14,13 @@ module RosettAi
13
14
  # @author hugo
14
15
  # @author claude
15
16
  class Apt < Base
17
+ # @return [String] Path to the dpkg-query binary.
16
18
  DPKG_QUERY = 'dpkg-query'
19
+ # @return [String] Path to the apt-cache binary.
17
20
  APT_CACHE = 'apt-cache'
21
+ # @return [String] Path to the pkexec binary for privilege escalation.
18
22
  PKEXEC = 'pkexec'
23
+ # @return [String] Path to the apt-get binary.
19
24
  APT_GET = 'apt-get'
20
25
 
21
26
  # @return [String]
@@ -13,6 +13,7 @@ module RosettAi
13
13
  # @author hugo
14
14
  # @author claude
15
15
  class Base
16
+ # PackageManagerError implementation.
16
17
  class PackageManagerError < RosettAi::Error; end
17
18
 
18
19
  # Install a package by name.
@@ -13,6 +13,7 @@ module RosettAi
13
13
  # @author hugo
14
14
  # @author claude
15
15
  class GemBackend < Base
16
+ # @return [String] Path to the gem binary.
16
17
  GEM_COMMAND = 'gem'
17
18
 
18
19
  # @return [String]
@@ -7,6 +7,7 @@ require 'json'
7
7
  require 'json_schemer'
8
8
 
9
9
  module RosettAi
10
+ # Debian package variant configuration.
10
11
  module Packaging
11
12
  # Loads and validates packaging variant configs from conf/packaging/<name>.yml.
12
13
  #
@@ -15,6 +16,7 @@ module RosettAi
15
16
  # "current" resolves to ">= #{RosettAi::VERSION}" at load time, ensuring
16
17
  # atomic version updates per lifecycle_management.yml constraints.
17
18
  class VariantConfig
19
+ # @return [Array] Attribute field names for this data object.
18
20
  FIELDS = [
19
21
  :name, :variant, :description, :ui_adapter,
20
22
  :system_dependencies, :package_dependencies
@@ -30,6 +32,10 @@ module RosettAi
30
32
  @package_dependencies ||= []
31
33
  end
32
34
 
35
+ # Load the license key from persistent storage.
36
+ #
37
+ # @param variant_name [Object] the variant name
38
+ # @return [LicenseKey, nil]
33
39
  def self.load(variant_name)
34
40
  path = variants_dir.join("#{variant_name}.yml")
35
41
  unless path.exist?
@@ -42,16 +48,22 @@ module RosettAi
42
48
  new(data)
43
49
  end
44
50
 
51
+ # List all available registered items.
52
+ # @return [Array]
45
53
  def self.available
46
54
  Dir.glob(variants_dir.join('*.yml')).map do |file|
47
55
  File.basename(file, '.yml')
48
56
  end.sort
49
57
  end
50
58
 
59
+ # Return the packaging variants directory path.
60
+ # @return [Pathname]
51
61
  def self.variants_dir
52
62
  RosettAi.root.join('conf', 'packaging')
53
63
  end
54
64
 
65
+ # Return the FPM dependency flags for this variant.
66
+ # @return [Array<String>]
55
67
  def fpm_depends
56
68
  deps = system_dependencies.dup
57
69
  package_dependencies.each do |dep|
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # Plugin contract system for engines, GUIs, and MCP extensions.
7
8
  module Plugins
8
9
  # Base contract module shared by all plugin types (engines, GUIs, MCPs).
9
10
  #
@@ -21,6 +21,8 @@ module RosettAi
21
21
 
22
22
  # Engine-specific class methods beyond the base Contract.
23
23
  module ClassMethods
24
+ # Return the plugin type identifier.
25
+ # @return [Symbol]
24
26
  def plugin_type = :engine
25
27
 
26
28
  # @return [String] engine identifier (e.g. 'claude', 'goose')
@@ -23,6 +23,8 @@ module RosettAi
23
23
 
24
24
  # GUI-specific class methods beyond the base Contract.
25
25
  module ClassMethods
26
+ # Return the plugin type identifier.
27
+ # @return [Symbol]
26
28
  def plugin_type = :gui
27
29
 
28
30
  # @return [String] GUI identifier (e.g. 'gtk4', 'qt6')
@@ -20,6 +20,8 @@ module RosettAi
20
20
 
21
21
  # MCP-specific class methods beyond the base Contract.
22
22
  module ClassMethods
23
+ # Return the plugin type identifier.
24
+ # @return [Symbol]
23
25
  def plugin_type = :mcp
24
26
 
25
27
  # @return [String] MCP server identifier (e.g. 'server')
@@ -14,8 +14,10 @@ module RosettAi
14
14
  # Replaces the hardcoded ENGINES and BACKENDS maps from
15
15
  # RosettAi::Engines::Registry and RosettAi::Compiler::Backend.
16
16
  class Registry
17
+ # @return [Array] Supported plugin type categories.
17
18
  PLUGIN_TYPES = [:engine, :gui, :mcp].freeze
18
19
 
20
+ # PluginNotFoundError implementation.
19
21
  class PluginNotFoundError < RosettAi::Error; end
20
22
 
21
23
  @plugins = Hash.new { |h, k| h[k] = {} }
@@ -61,7 +63,15 @@ module RosettAi
61
63
 
62
64
  # Convenience accessors for each plugin type.
63
65
  def engines = @plugins[:engine]
66
+
67
+ # List registered GUI plugins.
68
+ #
69
+ # @return [Hash]
64
70
  def guis = @plugins[:gui]
71
+
72
+ # List registered MCP plugins.
73
+ #
74
+ # @return [Hash]
65
75
  def mcps = @plugins[:mcp]
66
76
 
67
77
  # Discover and load all installed plugin gems.
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # AI governance policy auditing and enforcement.
7
8
  module Policy
8
9
  # Generates compliance audit reports for the current project.
9
10
  #
@@ -10,6 +10,7 @@ module RosettAi
10
10
  # Files containing +# AI-MODIFICATION: disabled+ are added to the
11
11
  # protected files list during compilation.
12
12
  class OptOutScanner
13
+ # @return [String] File marker for AI opt-out declarations.
13
14
  MARKER = 'AI-MODIFICATION: disabled'
14
15
 
15
16
  # Scans a single file for opt-out markers.
@@ -10,7 +10,9 @@ module RosettAi
10
10
  # Policy hierarchy: org > team > project. Child tiers can add patterns
11
11
  # or restrictions but can never remove patterns set by parent tiers.
12
12
  class TierHierarchy
13
+ # @return [Array] Defined tier levels.
13
14
  TIERS = ['mandatory', 'advisory', 'informational'].freeze
15
+ # @return [Array] Supported configuration scope names.
14
16
  SCOPES = ['org', 'team', 'project'].freeze
15
17
 
16
18
  # Validates that a child policy does not loosen a parent policy.
@@ -15,6 +15,7 @@ module RosettAi
15
15
  # @author hugo
16
16
  # @author claude
17
17
  class Validator
18
+ # @return [Object] Path to the JSON Schema file used for validation.
18
19
  SCHEMA_PATH = File.expand_path('../../../conf/schemas/policy_schema.json', __dir__)
19
20
 
20
21
  # @return [Array<String>] validation errors (empty if valid)
@@ -69,10 +69,17 @@ module RosettAi
69
69
  # No-op profiler when RAI_PROFILE is not set.
70
70
  # Zero overhead — all methods are empty.
71
71
  class NullProfiler
72
+ # Measure execution time of a block (no-op in null profiler).
73
+ #
74
+ # @param _phase_name [String] ignored phase name
75
+ # @return [Object] block return value
72
76
  def measure(_phase_name)
73
77
  yield
74
78
  end
75
79
 
80
+ # Return the profiling report (no-op in null profiler).
81
+ #
82
+ # @return [void]
76
83
  def report; end
77
84
  end
78
85
  end
@@ -17,6 +17,7 @@ module RosettAi
17
17
  # @author hugo
18
18
  # @author claude
19
19
  class DriftDetector
20
+ # @return [Array] Supported project drift detection categories.
20
21
  DRIFT_TYPES = ['forward', 'template'].freeze
21
22
 
22
23
  # @param project_root [Pathname] root directory of the project
@@ -9,6 +9,7 @@ require_relative 'drift_detector'
9
9
  require_relative 'sync_manager'
10
10
 
11
11
  module RosettAi
12
+ # Project lifecycle management and drift detection.
12
13
  module Project
13
14
  # High-level project lifecycle manager.
14
15
  #
@@ -17,6 +17,7 @@ module RosettAi
17
17
  # @author hugo
18
18
  # @author claude
19
19
  class TemplateApplier
20
+ # @return [String] Directory containing project templates.
20
21
  TEMPLATES_DIR = 'conf/templates'
21
22
 
22
23
  # @param project_root [Pathname] root directory of the project
@@ -4,12 +4,14 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # AI contribution provenance tracking.
7
8
  module Provenance
8
9
  # A single provenance entry recording AI involvement in a commit.
9
10
  #
10
11
  # Each entry captures the commit SHA, contributor identity, AI tool used,
11
12
  # the AI's role, and which files were involved.
12
13
  class Entry
14
+ # @return [Array] Permitted AI contribution role values.
13
15
  ALLOWED_ROLES = [
14
16
  'AI-Generated-By',
15
17
  'AI-Co-Author',
@@ -10,6 +10,7 @@ module RosettAi
10
10
  # Source types track where AI-generated code drew its knowledge from,
11
11
  # enabling license traceability and compliance auditing.
12
12
  class Source
13
+ # @return [Array] Permitted provenance source type values.
13
14
  ALLOWED_TYPES = [
14
15
  'library_api',
15
16
  'project_code',
@@ -18,9 +18,12 @@ module RosettAi
18
18
  # @author hugo
19
19
  # @author claude
20
20
  class Store
21
+ # @return [String] Default filename for this artifact.
21
22
  FILENAME = '.ai-provenance.yml'
22
23
  MAX_FILE_SIZE = 1_048_576 # 1 MB
24
+ # @return [Integer] Current provenance schema version.
23
25
  SCHEMA_VERSION = 1
26
+ # @return [Object] Placeholder hash for initial provenance entries.
24
27
  ZERO_HASH = ('0' * 64).freeze
25
28
 
26
29
  attr_reader :root
@@ -10,6 +10,7 @@ module RosettAi
10
10
  module Provenance
11
11
  # Validates provenance entries against the provenance JSON Schema.
12
12
  class Validator
13
+ # @return [Object] Path to the JSON Schema file used for validation.
13
14
  SCHEMA_PATH = File.join(RosettAi.root, 'conf', 'schemas', 'provenance_schema.json')
14
15
 
15
16
  # Validates provenance data against the schema.
@@ -4,6 +4,7 @@
4
4
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
5
 
6
6
  module RosettAi
7
+ # Multi-engine consensus analysis.
7
8
  module Quorum
8
9
  # Normalizes per-engine responses to the standard adopt contract:
9
10
  # { findings: [...], overall_status: "pass|warn|fail", summary: "..." }
@@ -11,7 +11,9 @@ module RosettAi
11
11
  # are promoted by severity. Unique findings are annotated with their
12
12
  # source engine for transparency.
13
13
  class Comparator
14
+ # @return [Array] Severity levels that cause a check to fail.
14
15
  FAIL_SEVERITIES = ['high', 'critical'].freeze
16
+ # @return [Hash] Numeric ranking for severity comparison.
15
17
  SEVERITY_RANK = { 'low' => 0, 'medium' => 1, 'high' => 2, 'critical' => 3 }.freeze
16
18
 
17
19
  # Compare and aggregate collected engine results.
@@ -5,6 +5,7 @@
5
5
 
6
6
  module RosettAi
7
7
  module Quorum
8
+ # Quorum analysis strategy implementations.
8
9
  module Strategies
9
10
  # Orchestrates multi-engine adopt analysis:
10
11
  # 1. Detect available engines with adopt_api capability
@@ -11,6 +11,7 @@ module RosettAi
11
11
  # Returns compiled defaults when no config file exists. User values are
12
12
  # deep-merged over defaults and validated against the rai config JSON Schema.
13
13
  class RaiConfig
14
+ # @return [Hash] Default configuration values.
14
15
  DEFAULTS = {
15
16
  'default_engine' => 'claude',
16
17
  'cache' => { 'enabled' => true, 'ttl_hours' => 24 },
@@ -25,12 +26,20 @@ module RosettAi
25
26
  @data = load_config
26
27
  end
27
28
 
29
+ # Return the default engine name.
30
+ # @return [String]
28
31
  def default_engine = @data['default_engine']
29
32
  def cache_enabled? = @data.dig('cache', 'enabled')
33
+ # Return the cache TTL in hours.
34
+ # @return [Integer]
30
35
  def cache_ttl_hours = @data.dig('cache', 'ttl_hours')
31
36
  def detect_on_init? = @data.dig('detect', 'on_init')
32
37
  def dbus_allow_plugin_management? = @data.dig('dbus', 'allow_plugin_management') == true
33
38
 
39
+ # Load the license key from persistent storage.
40
+ #
41
+ # @param config_path [Object] the config path
42
+ # @return [LicenseKey, nil]
34
43
  def self.load(config_path: nil)
35
44
  new(config_path: config_path)
36
45
  end
@@ -7,6 +7,7 @@ require 'yaml'
7
7
  require 'fileutils'
8
8
 
9
9
  module RosettAi
10
+ # Reverse-compile native configs to rosett-ai YAML.
10
11
  module Retrofit
11
12
  # Orchestrates reverse compilation from native AI tool configs to Rosett-AI YAML.
12
13
  #
@@ -16,6 +17,7 @@ module RosettAi
16
17
  # @author hugo
17
18
  # @author claude
18
19
  class Engine
20
+ # @return [Hash] Maps engine names to their parser classes.
19
21
  PARSER_REGISTRY = {
20
22
  'claude' => 'RosettAi::Retrofit::Parsers::ClaudeParser',
21
23
  'cursor' => 'RosettAi::Retrofit::Parsers::CursorParser',