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
@@ -4,7 +4,10 @@
4
4
  "title": "rosett-ai Policy Schema",
5
5
  "description": "Schema for rai policy configuration files",
6
6
  "type": "object",
7
- "required": ["policy_version", "tier"],
7
+ "required": [
8
+ "policy_version",
9
+ "tier"
10
+ ],
8
11
  "properties": {
9
12
  "policy_version": {
10
13
  "type": "integer",
@@ -13,12 +16,20 @@
13
16
  },
14
17
  "tier": {
15
18
  "type": "string",
16
- "enum": ["mandatory", "advisory", "informational"],
19
+ "enum": [
20
+ "mandatory",
21
+ "advisory",
22
+ "informational"
23
+ ],
17
24
  "description": "Policy enforcement tier"
18
25
  },
19
26
  "scope": {
20
27
  "type": "string",
21
- "enum": ["org", "team", "project"],
28
+ "enum": [
29
+ "org",
30
+ "team",
31
+ "project"
32
+ ],
22
33
  "description": "Policy scope in the hierarchy"
23
34
  },
24
35
  "deny_list": {
@@ -33,7 +44,9 @@
33
44
  "description": "Glob patterns for denied file access"
34
45
  }
35
46
  },
36
- "required": ["patterns"]
47
+ "required": [
48
+ "patterns"
49
+ ]
37
50
  },
38
51
  "protected_files": {
39
52
  "type": "object",
@@ -47,7 +60,9 @@
47
60
  "description": "File paths that AI may read but not modify"
48
61
  }
49
62
  },
50
- "required": ["paths"]
63
+ "required": [
64
+ "paths"
65
+ ]
51
66
  },
52
67
  "rate_limiting": {
53
68
  "type": "object",
@@ -59,7 +74,10 @@
59
74
  },
60
75
  "enforcement": {
61
76
  "type": "string",
62
- "enum": ["advisory", "enforced"],
77
+ "enum": [
78
+ "advisory",
79
+ "enforced"
80
+ ],
63
81
  "default": "advisory",
64
82
  "description": "Whether rate limiting is advisory or enforced"
65
83
  }
@@ -70,16 +88,24 @@
70
88
  "properties": {
71
89
  "allowed": {
72
90
  "type": "array",
73
- "items": { "type": "string" },
91
+ "items": {
92
+ "type": "string"
93
+ },
74
94
  "description": "Allowed SPDX license identifiers"
75
95
  },
76
96
  "rejected": {
77
97
  "type": "array",
78
- "items": { "type": "string" },
98
+ "items": {
99
+ "type": "string"
100
+ },
79
101
  "description": "Rejected SPDX license identifiers"
80
102
  }
81
103
  }
82
104
  }
83
105
  },
84
- "additionalProperties": false
106
+ "additionalProperties": false,
107
+ "$comment": {
108
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
109
+ "note": null
110
+ }
85
111
  }
@@ -4,7 +4,10 @@
4
4
  "title": "rosett-ai AI Provenance",
5
5
  "description": "Schema for .ai-provenance.yml files tracking AI involvement in code contributions",
6
6
  "type": "object",
7
- "required": ["provenance_version", "entries"],
7
+ "required": [
8
+ "provenance_version",
9
+ "entries"
10
+ ],
8
11
  "additionalProperties": false,
9
12
  "properties": {
10
13
  "provenance_version": {
@@ -22,7 +25,14 @@
22
25
  "$defs": {
23
26
  "entry": {
24
27
  "type": "object",
25
- "required": ["commit", "timestamp", "contributor", "ai_tool", "ai_role", "files"],
28
+ "required": [
29
+ "commit",
30
+ "timestamp",
31
+ "contributor",
32
+ "ai_tool",
33
+ "ai_role",
34
+ "files"
35
+ ],
26
36
  "additionalProperties": false,
27
37
  "properties": {
28
38
  "commit": {
@@ -47,7 +57,12 @@
47
57
  },
48
58
  "ai_role": {
49
59
  "type": "string",
50
- "enum": ["AI-Generated-By", "AI-Co-Author", "AI-Assisted-By", "AI-Reviewed-By"],
60
+ "enum": [
61
+ "AI-Generated-By",
62
+ "AI-Co-Author",
63
+ "AI-Assisted-By",
64
+ "AI-Reviewed-By"
65
+ ],
51
66
  "description": "Role the AI played in the contribution"
52
67
  },
53
68
  "files": {
@@ -60,7 +75,10 @@
60
75
  },
61
76
  "file_source": {
62
77
  "type": "object",
63
- "required": ["path", "source_type"],
78
+ "required": [
79
+ "path",
80
+ "source_type"
81
+ ],
64
82
  "additionalProperties": false,
65
83
  "properties": {
66
84
  "path": {
@@ -75,10 +93,20 @@
75
93
  },
76
94
  "source_type": {
77
95
  "type": "string",
78
- "enum": ["library_api", "project_code", "documentation", "pattern", "external_source"],
96
+ "enum": [
97
+ "library_api",
98
+ "project_code",
99
+ "documentation",
100
+ "pattern",
101
+ "external_source"
102
+ ],
79
103
  "description": "Classification of the AI's source material"
80
104
  }
81
105
  }
82
106
  }
107
+ },
108
+ "$comment": {
109
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
110
+ "note": null
83
111
  }
84
112
  }
@@ -6,14 +6,18 @@
6
6
  "$comment": {
7
7
  "date": "2026-02-26",
8
8
  "version": "1.0.0",
9
- "source": "rosett-ai"
9
+ "source": "rosett-ai",
10
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
10
11
  },
11
12
  "type": "object",
12
13
  "additionalProperties": false,
13
14
  "properties": {
14
15
  "default_engine": {
15
16
  "type": "string",
16
- "enum": ["claude", "generic"],
17
+ "enum": [
18
+ "claude",
19
+ "generic"
20
+ ],
17
21
  "description": "Default engine for compile and adopt commands"
18
22
  },
19
23
  "cache": {
@@ -3,7 +3,9 @@
3
3
  "title": "rai project configuration",
4
4
  "description": "Schema for .rosett-ai/config.yml project marker files",
5
5
  "type": "object",
6
- "required": ["project_name"],
6
+ "required": [
7
+ "project_name"
8
+ ],
7
9
  "properties": {
8
10
  "project_name": {
9
11
  "type": "string",
@@ -16,5 +18,9 @@
16
18
  "description": "Default compilation engine for this project"
17
19
  }
18
20
  },
19
- "additionalProperties": false
21
+ "additionalProperties": false,
22
+ "$comment": {
23
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
24
+ "note": null
25
+ }
20
26
  }
@@ -6,7 +6,8 @@
6
6
  "$comment": {
7
7
  "date": "2026-03-23",
8
8
  "version": "0.1.0",
9
- "source": "rosett-ai"
9
+ "source": "rosett-ai",
10
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
10
11
  },
11
12
  "type": "object",
12
13
  "additionalProperties": false,
@@ -16,7 +17,12 @@
16
17
  "description": "Per-key merge strategy overrides. Keys are dot-separated paths into behaviour data.",
17
18
  "additionalProperties": {
18
19
  "type": "string",
19
- "enum": ["deep_merge", "replace", "array_union", "first_found"],
20
+ "enum": [
21
+ "deep_merge",
22
+ "replace",
23
+ "array_union",
24
+ "first_found"
25
+ ],
20
26
  "description": "Merge strategy for this key"
21
27
  }
22
28
  },
@@ -27,19 +33,30 @@
27
33
  "properties": {
28
34
  "hash": {
29
35
  "type": "string",
30
- "enum": ["deep_merge", "replace", "first_found"],
36
+ "enum": [
37
+ "deep_merge",
38
+ "replace",
39
+ "first_found"
40
+ ],
31
41
  "default": "deep_merge",
32
42
  "description": "Default strategy for hash values"
33
43
  },
34
44
  "array": {
35
45
  "type": "string",
36
- "enum": ["array_union", "replace", "first_found"],
46
+ "enum": [
47
+ "array_union",
48
+ "replace",
49
+ "first_found"
50
+ ],
37
51
  "default": "array_union",
38
52
  "description": "Default strategy for array values"
39
53
  },
40
54
  "scalar": {
41
55
  "type": "string",
42
- "enum": ["replace", "first_found"],
56
+ "enum": [
57
+ "replace",
58
+ "first_found"
59
+ ],
43
60
  "default": "replace",
44
61
  "description": "Default strategy for scalar values"
45
62
  }
@@ -6,10 +6,15 @@
6
6
  "$comment": {
7
7
  "date": "2026-02-21",
8
8
  "version": "1.0.0",
9
- "source": "rosett-ai"
9
+ "source": "rosett-ai",
10
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
10
11
  },
11
12
  "type": "object",
12
- "required": ["name", "backend", "output_format"],
13
+ "required": [
14
+ "name",
15
+ "backend",
16
+ "output_format"
17
+ ],
13
18
  "additionalProperties": false,
14
19
  "properties": {
15
20
  "name": {
@@ -24,7 +29,19 @@
24
29
  },
25
30
  "backend": {
26
31
  "type": "string",
27
- "enum": ["acme", "aider", "agents_md", "claude", "copilot", "cursor", "generic", "goose", "gpt_neox", "ollama", "windsurf"],
32
+ "enum": [
33
+ "acme",
34
+ "aider",
35
+ "agents_md",
36
+ "claude",
37
+ "copilot",
38
+ "cursor",
39
+ "generic",
40
+ "goose",
41
+ "gpt_neox",
42
+ "ollama",
43
+ "windsurf"
44
+ ],
28
45
  "description": "Compiler backend to use for this target"
29
46
  },
30
47
  "engine_version": {
@@ -33,15 +50,25 @@
33
50
  },
34
51
  "output_format": {
35
52
  "type": "string",
36
- "enum": ["markdown", "json", "yaml"],
53
+ "enum": [
54
+ "markdown",
55
+ "json",
56
+ "yaml"
57
+ ],
37
58
  "description": "Output format for compiled files"
38
59
  },
39
60
  "output_dir": {
40
- "type": ["string", "null"],
61
+ "type": [
62
+ "string",
63
+ "null"
64
+ ],
41
65
  "description": "Override output directory (null uses default rules_dir)"
42
66
  },
43
67
  "max_context_window": {
44
- "type": ["integer", "null"],
68
+ "type": [
69
+ "integer",
70
+ "null"
71
+ ],
45
72
  "minimum": 1,
46
73
  "description": "Maximum context window size in tokens (null for unlimited)"
47
74
  },
@@ -7,10 +7,15 @@
7
7
  "date": "2026-02-09",
8
8
  "version": "1.0.0",
9
9
  "source": "rosett-ai",
10
- "compatible_claude_code_versions": [">=0.1.0"]
10
+ "compatible_claude_code_versions": [
11
+ ">=0.1.0"
12
+ ],
13
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
11
14
  },
12
15
  "type": "object",
13
- "required": ["tools"],
16
+ "required": [
17
+ "tools"
18
+ ],
14
19
  "additionalProperties": false,
15
20
  "properties": {
16
21
  "tools": {
@@ -19,7 +24,11 @@
19
24
  "minProperties": 1,
20
25
  "additionalProperties": {
21
26
  "type": "object",
22
- "required": ["description", "permission_pattern", "packages"],
27
+ "required": [
28
+ "description",
29
+ "permission_pattern",
30
+ "packages"
31
+ ],
23
32
  "additionalProperties": false,
24
33
  "properties": {
25
34
  "description": {
@@ -34,7 +43,15 @@
34
43
  },
35
44
  "category": {
36
45
  "type": "string",
37
- "enum": ["json", "yaml", "search", "text", "system", "network", "other"],
46
+ "enum": [
47
+ "json",
48
+ "yaml",
49
+ "search",
50
+ "text",
51
+ "system",
52
+ "network",
53
+ "other"
54
+ ],
38
55
  "description": "Category for organizing tools"
39
56
  },
40
57
  "permission_pattern": {
@@ -48,14 +65,38 @@
48
65
  "minProperties": 1,
49
66
  "additionalProperties": false,
50
67
  "properties": {
51
- "apt": { "type": "string", "minLength": 1 },
52
- "dnf": { "type": "string", "minLength": 1 },
53
- "pacman": { "type": "string", "minLength": 1 },
54
- "zypper": { "type": "string", "minLength": 1 },
55
- "brew": { "type": "string", "minLength": 1 },
56
- "flatpak": { "type": "string", "minLength": 1 },
57
- "snap": { "type": "string", "minLength": 1 },
58
- "nix": { "type": "string", "minLength": 1 }
68
+ "apt": {
69
+ "type": "string",
70
+ "minLength": 1
71
+ },
72
+ "dnf": {
73
+ "type": "string",
74
+ "minLength": 1
75
+ },
76
+ "pacman": {
77
+ "type": "string",
78
+ "minLength": 1
79
+ },
80
+ "zypper": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ },
84
+ "brew": {
85
+ "type": "string",
86
+ "minLength": 1
87
+ },
88
+ "flatpak": {
89
+ "type": "string",
90
+ "minLength": 1
91
+ },
92
+ "snap": {
93
+ "type": "string",
94
+ "minLength": 1
95
+ },
96
+ "nix": {
97
+ "type": "string",
98
+ "minLength": 1
99
+ }
59
100
  }
60
101
  }
61
102
  }
@@ -6,10 +6,15 @@
6
6
  "$comment": {
7
7
  "date": "2026-03-16",
8
8
  "version": "1.0.0",
9
- "source": "rosett-ai"
9
+ "source": "rosett-ai",
10
+ "spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
10
11
  },
11
12
  "type": "object",
12
- "required": ["name", "version", "steps"],
13
+ "required": [
14
+ "name",
15
+ "version",
16
+ "steps"
17
+ ],
13
18
  "additionalProperties": false,
14
19
  "properties": {
15
20
  "name": {
@@ -31,7 +36,11 @@
31
36
  },
32
37
  "scope": {
33
38
  "type": "string",
34
- "enum": ["global", "local", "project"]
39
+ "enum": [
40
+ "global",
41
+ "local",
42
+ "project"
43
+ ]
35
44
  },
36
45
  "network_required": {
37
46
  "type": "boolean",
@@ -43,7 +52,9 @@
43
52
  },
44
53
  "required_capabilities": {
45
54
  "type": "array",
46
- "items": { "type": "string" }
55
+ "items": {
56
+ "type": "string"
57
+ }
47
58
  },
48
59
  "max_steps": {
49
60
  "type": "integer",
@@ -57,7 +68,10 @@
57
68
  "maxItems": 50,
58
69
  "items": {
59
70
  "type": "object",
60
- "required": ["name", "type"],
71
+ "required": [
72
+ "name",
73
+ "type"
74
+ ],
61
75
  "additionalProperties": false,
62
76
  "properties": {
63
77
  "name": {
@@ -66,13 +80,26 @@
66
80
  },
67
81
  "type": {
68
82
  "type": "string",
69
- "enum": ["shell", "rosett-ai", "prompt"]
83
+ "enum": [
84
+ "shell",
85
+ "rosett-ai",
86
+ "prompt"
87
+ ]
70
88
  },
71
89
  "command": {
72
90
  "description": "Array of strings for shell steps, string for Rosett-AI steps",
73
91
  "oneOf": [
74
- { "type": "array", "items": { "type": "string" }, "minItems": 1 },
75
- { "type": "string", "minLength": 1 }
92
+ {
93
+ "type": "array",
94
+ "items": {
95
+ "type": "string"
96
+ },
97
+ "minItems": 1
98
+ },
99
+ {
100
+ "type": "string",
101
+ "minLength": 1
102
+ }
76
103
  ]
77
104
  },
78
105
  "prompt": {
@@ -88,7 +115,10 @@
88
115
  },
89
116
  "on_failure": {
90
117
  "type": "string",
91
- "enum": ["stop", "continue"],
118
+ "enum": [
119
+ "stop",
120
+ "continue"
121
+ ],
92
122
  "default": "stop"
93
123
  }
94
124
  }
@@ -1,3 +1,4 @@
1
+ # SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be>
1
2
  # SPDX-License-Identifier: GPL-3.0-only
2
3
  # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
3
4
  #
@@ -1,4 +1,6 @@
1
1
  ---
2
+ # SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be>
3
+ # SPDX-License-Identifier: GPL-3.0-only
2
4
  name: claude
3
5
  description: Claude Code (Anthropic) target
4
6
  backend: claude
@@ -1,3 +1,5 @@
1
+ # SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be>
2
+ # SPDX-License-Identifier: GPL-3.0-only
1
3
  # Rosett-AI - Tool Registry
2
4
  # This file defines CLI tools that can be managed by rai tooling commands.
3
5
  # Each tool entry maps to package names across different package managers.
@@ -9,8 +9,13 @@ module RosettAi
9
9
  # without making API calls. Checks for duplicates, missing
10
10
  # fields, and other structural issues.
11
11
  class LocalAnalysisCollector
12
+ # @return [Array] Severity levels that cause a check to fail.
12
13
  FAIL_SEVERITIES = ['high', 'critical'].freeze
13
14
 
15
+ # Perform analysis on the given files.
16
+ #
17
+ # @param files [Object] the files
18
+ # @return [Hash]
14
19
  def analyze(files)
15
20
  @findings = []
16
21
  @all_rules = {}
@@ -9,6 +9,7 @@ require 'json'
9
9
  require 'time'
10
10
 
11
11
  module RosettAi
12
+ # Rule file analysis and adoption verification.
12
13
  module Adopter
13
14
  # Analyzes compiled markdown rule files for inconsistencies, conflicts,
14
15
  # harmful content, duplicates, and other issues.
@@ -19,6 +20,7 @@ module RosettAi
19
20
  # 3. Configurable endpoint — ANTHROPIC_API_BASE_URL for proxy/Bedrock/Vertex
20
21
  # 4. Local-only mode — structural checks without API calls
21
22
  class RuleAdopter
23
+ # @return [String] Marker string identifying generated files.
22
24
  GENERATED_MARKER = '<!-- rosett-ai-'
23
25
 
24
26
  attr_reader :rules_dir, :cache_path, :redactions_path, :engine
@@ -44,6 +46,8 @@ module RosettAi
44
46
  end
45
47
  end
46
48
 
49
+ # Find all rai-managed rule files in the rules directory.
50
+ # @return [Array<String>]
47
51
  def discover_managed_files
48
52
  return [] unless rules_dir.exist?
49
53
 
@@ -55,11 +59,19 @@ module RosettAi
55
59
  end.sort
56
60
  end
57
61
 
62
+ # Compute a SHA-256 checksum of the given files.
63
+ #
64
+ # @param files [Object] the files
65
+ # @return [String]
58
66
  def content_checksum(files)
59
67
  content = files.sort.map { |f| File.read(f) }.join
60
68
  Digest::SHA256.hexdigest(content)
61
69
  end
62
70
 
71
+ # Retrieve a cached analysis result by checksum.
72
+ #
73
+ # @param checksum [Object] the checksum
74
+ # @return [Hash, nil]
63
75
  def cached_result(checksum)
64
76
  return nil unless cache_path.exist?
65
77
 
@@ -73,6 +85,11 @@ module RosettAi
73
85
  nil
74
86
  end
75
87
 
88
+ # Persist analysis results to the cache file.
89
+ #
90
+ # @param checksum [Object] the checksum
91
+ # @param result [Object] the result
92
+ # @return [void]
76
93
  def write_cache(checksum, result)
77
94
  FileUtils.mkdir_p(cache_path.dirname)
78
95
  data = {
@@ -83,12 +100,20 @@ module RosettAi
83
100
  File.open(cache_path, 'w', 0o644) { |f| f.write(data.to_yaml) }
84
101
  end
85
102
 
103
+ # Build the analysis prompt from file contents.
104
+ #
105
+ # @param files [Object] the files
106
+ # @return [String]
86
107
  def build_prompt(files)
87
108
  parts = [prompt_header]
88
109
  append_file_contents(parts, files)
89
110
  parts.join("\n")
90
111
  end
91
112
 
113
+ # Apply redaction patterns to content before API submission.
114
+ #
115
+ # @param content [Object] the content
116
+ # @return [String]
92
117
  def redact(content)
93
118
  patterns = load_redaction_patterns
94
119
  result = content.dup
@@ -101,6 +126,10 @@ module RosettAi
101
126
  result
102
127
  end
103
128
 
129
+ # Perform analysis on the given files.
130
+ #
131
+ # @param files [Object] the files
132
+ # @return [Hash]
104
133
  def analyze(files)
105
134
  return empty_result if files.empty?
106
135
 
@@ -109,11 +138,17 @@ module RosettAi
109
138
  executor.analyze(prompt)
110
139
  end
111
140
 
141
+ # Perform local-only structural analysis.
142
+ #
143
+ # @param files [Object] the files
144
+ # @return [Hash]
112
145
  def analyze_local(files)
113
146
  collector = LocalAnalysisCollector.new
114
147
  collector.analyze(files)
115
148
  end
116
149
 
150
+ # List behaviour files marked as sensitive.
151
+ # @return [Array<String>]
117
152
  def sensitive_files
118
153
  behaviour_dir = RosettAi.root.join('conf', 'behaviour')
119
154
  return [] unless behaviour_dir.exist?
@@ -126,6 +161,11 @@ module RosettAi
126
161
  end
127
162
  end
128
163
 
164
+ # Exclude files marked as sensitive from the file list.
165
+ #
166
+ # @param files [Object] the files
167
+ # @param sensitive_sources [Object] the sensitive sources
168
+ # @return [Array<String>]
129
169
  def filter_sensitive(files, sensitive_sources)
130
170
  return files if sensitive_sources.empty?
131
171