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
data/QUICKSTART.md DELETED
@@ -1,73 +0,0 @@
1
- # Quick Start
2
-
3
- Get from zero to your first compiled rules in 5 minutes.
4
-
5
- ## 1. Install
6
-
7
- ```bash
8
- sudo dpkg -i nncc_1.0.0-1_amd64.deb
9
- sudo apt-get install -f # resolve dependencies
10
- ```
11
-
12
- ## 2. Initialize
13
-
14
- ```bash
15
- # Set up global ~/.claude/ structure
16
- rai init --global
17
-
18
- # (Optional) Set up project-local structure
19
- rai init --local
20
- ```
21
-
22
- ## 3. Create a behaviour rule
23
-
24
- ```bash
25
- rai behaviour manage add my_first_rule
26
- ```
27
-
28
- Edit the created file at `conf/behaviour/my_first_rule.yml`:
29
-
30
- ```yaml
31
- name: my_first_rule
32
- description: My first rai behaviour rule
33
- version: 1.0.0
34
- author: your_name
35
- created_at: "2026-01-01"
36
- modified_at: "2026-01-01"
37
- modified_by: your_name
38
- sensitive: false
39
- used_in: []
40
- rules:
41
- - id: rule_001
42
- description: Always explain your reasoning before making changes
43
- priority: 50
44
- enabled: true
45
- ```
46
-
47
- ## 4. Compile
48
-
49
- ```bash
50
- # Preview what would change
51
- rai compile --simulate --verbose
52
-
53
- # Compile rules to ~/.claude/rules/
54
- rai compile --verbose
55
- ```
56
-
57
- ## 5. Verify
58
-
59
- ```bash
60
- # Check the generated files
61
- ls ~/.claude/rules/
62
-
63
- # Validate everything is consistent
64
- rai validate
65
- ```
66
-
67
- ## Next Steps
68
-
69
- - `rai compile --engine generic` to compile for non-Claude tools
70
- - `rai design list` to explore design documents
71
- - `rai adopt --verbose` to analyze your existing rules
72
- - `man raictl` for the full manual
73
- - See [INSTALL.md](INSTALL.md) for detailed installation options
data/Rakefile DELETED
@@ -1,200 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-License-Identifier: GPL-3.0-only
4
- # Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
5
-
6
- require 'bundler/gem_tasks'
7
- require 'rspec/core/rake_task'
8
- require 'rubocop/rake_task'
9
-
10
- RSpec::Core::RakeTask.new(:spec)
11
- RuboCop::RakeTask.new
12
-
13
- desc 'Run reek smell detector'
14
- task :reek do
15
- sh 'bundle', 'exec', 'reek', 'lib/rosett_ai.rb', 'lib/rosett_ai/'
16
- end
17
-
18
- desc 'Check dependency licenses for GPL-3.0 compatibility'
19
- task :licenses do
20
- sh 'bundle', 'exec', 'license_finder'
21
- end
22
-
23
- desc 'Detect potentially uncalled methods'
24
- task :debride do
25
- sh 'bundle', 'exec', 'debride', '-w', '.debride_whitelist', 'lib/'
26
- end
27
-
28
- desc 'Audit dependencies for known vulnerabilities'
29
- task :bundler_audit do
30
- sh 'bundle', 'exec', 'bundler-audit', 'check', '--update'
31
- end
32
-
33
- desc 'Detect structural code duplication'
34
- task :flay do
35
- sh 'bundle', 'exec', 'flay', '--mass', '16', 'lib/'
36
- end
37
-
38
- desc 'Run all quality gates'
39
- task quality: [:spec, :rubocop, :reek, :licenses, :debride, :bundler_audit, :fasterer, :flay]
40
-
41
- task default: :quality
42
-
43
- namespace :docs do
44
- desc 'Update all documentation'
45
- task :update do
46
- require_relative 'lib/rosett_ai'
47
- RosettAi::Thor::Tasks::Documentation.new.update
48
- end
49
-
50
- desc 'Check documentation status'
51
- task :status do
52
- require_relative 'lib/rosett_ai'
53
- RosettAi::Thor::Tasks::Documentation.new.status
54
- end
55
- end
56
-
57
- namespace :man do
58
- desc 'Build man pages from ronn source'
59
- task :build do
60
- require 'ronn'
61
- source = File.expand_path('doc/man/rai.1.ronn', __dir__)
62
- output_dir = File.expand_path('man/man1', __dir__)
63
- FileUtils.mkdir_p(output_dir)
64
-
65
- doc = Ronn::Document.new(source)
66
- File.write(File.join(output_dir, 'rai.1'), doc.to_roff)
67
- puts 'Generated man/man1/rai.1'
68
- end
69
- end
70
-
71
- begin
72
- require 'yard'
73
- YARD::Rake::YardocTask.new(:yard) do |t|
74
- t.files = ['lib/**/*.rb']
75
- t.options = ['--output-dir', 'doc/api', '--markup', 'markdown', '--no-private']
76
- end
77
- rescue LoadError
78
- desc 'Generate YARD documentation (yard gem not installed)'
79
- task(:yard) { warn 'yard gem is not installed. Run: gem install yard' }
80
- end
81
-
82
- desc 'Generate CHANGELOG.md from conventional commits (requires git-cliff)'
83
- task :changelog do
84
- unless system('which git-cliff > /dev/null 2>&1')
85
- warn 'git-cliff is not installed. See: https://git-cliff.org/docs/installation'
86
- exit 1
87
- end
88
- system('git-cliff', '--config', 'cliff.toml', '--output', 'CHANGELOG.md') || exit(1)
89
- puts 'Generated CHANGELOG.md'
90
- end
91
-
92
- desc 'Run fasterer performance suggestions'
93
- task :fasterer do
94
- require 'fasterer/cli'
95
- Fasterer::CLI.execute
96
- rescue LoadError
97
- warn 'fasterer gem is not installed. Run: gem install fasterer'
98
- end
99
-
100
- namespace :behaviour do
101
- desc 'Validate all behaviour files'
102
- task :validate do
103
- require_relative 'lib/rosett_ai'
104
- RosettAi::Thor::Tasks::Behaviour.new.validate
105
- end
106
-
107
- desc 'List all behaviour files'
108
- task :list do
109
- require_relative 'lib/rosett_ai'
110
- RosettAi::Thor::Tasks::Behaviour.new.list
111
- end
112
- end
113
-
114
- namespace :build do
115
- desc 'Build core .deb package (variant: core, gtk4, qt6)'
116
- task :package, [:variant] do |_t, args|
117
- require_relative 'lib/rosett_ai'
118
- # Trigger Zeitwerk autoload of Build (which defines BuildPackage)
119
- RosettAi::Thor::Tasks::Build # rubocop:disable Lint/Void
120
- opts = build_package_opts(args)
121
- RosettAi::Thor::Tasks::BuildPackage.new([], opts).invoke(:create)
122
- end
123
-
124
- desc 'Build engine plugin .deb package'
125
- task :engine do
126
- require_relative 'lib/rosett_ai'
127
- RosettAi::Thor::Tasks::Build # rubocop:disable Lint/Void
128
- RosettAi::Thor::Tasks::BuildEngine.new.invoke(:create)
129
- end
130
- end
131
-
132
- # Build option flags from Rake args and environment variables.
133
- # Usage:
134
- # rake build:package # defaults
135
- # rake build:package[gtk4] # variant only
136
- # rake build:package VERBOSE=1 CLEAN=1 # flags via env
137
- # rake build:package[gtk4] VERBOSE=1 CLEAN=1 # both
138
- def build_package_opts(args)
139
- opts = {}
140
- opts[:variant] = args[:variant] if args[:variant]
141
- opts[:verbose] = true if ENV['VERBOSE']
142
- opts[:clean] = true if ENV['CLEAN']
143
- opts[:ruby_version] = ENV['RUBY_VERSION'] if ENV['RUBY_VERSION']
144
- opts[:architecture] = ENV['ARCHITECTURE'] if ENV['ARCHITECTURE']
145
- opts[:output_dir] = ENV['OUTPUT_DIR'] if ENV['OUTPUT_DIR']
146
- opts[:build_iteration] = ENV['BUILD_ITERATION'].to_i if ENV['BUILD_ITERATION']
147
- opts
148
- end
149
-
150
- namespace :release do
151
- desc 'Prepare release (level: major, minor, patch)'
152
- task :prepare, [:level] do |_t, args|
153
- require_relative 'lib/rosett_ai'
154
- RosettAi::Thor::Tasks::Release.new.invoke(:prepare, [args[:level] || 'patch'])
155
- end
156
-
157
- desc 'Create annotated git tag from current VERSION'
158
- task :tag do
159
- require_relative 'lib/rosett_ai'
160
- RosettAi::Thor::Tasks::Release.new.invoke(:tag)
161
- end
162
-
163
- desc 'Show release status (version, last tag, unreleased commits)'
164
- task :status do
165
- require_relative 'lib/rosett_ai'
166
- RosettAi::Thor::Tasks::Release.new.invoke(:status)
167
- end
168
- end
169
-
170
- namespace :readme do
171
- desc 'Update README version, test count, and engine count from live sources'
172
- task :update do
173
- require_relative 'lib/rosett_ai/version'
174
- require 'json'
175
-
176
- readme_path = File.expand_path('README.md', __dir__)
177
- content = File.read(readme_path)
178
-
179
- # Version from constant
180
- version = RosettAi::VERSION
181
- content.gsub!(%r{<!-- rai:version -->.*?<!-- /rai:version -->},
182
- "<!-- rai:version -->#{version}<!-- /rai:version -->")
183
-
184
- # Test count via rspec --dry-run (COVERAGE=false suppresses SimpleCov noise in stdout)
185
- env = { 'COVERAGE' => 'false' }
186
- json_output = IO.popen(env, ['bundle', 'exec', 'rspec', '--dry-run', '--format', 'json'],
187
- err: File::NULL, &:read)
188
- test_count = JSON.parse(json_output).dig('summary', 'example_count')
189
- content.gsub!(%r{<!-- rai:tests -->.*?<!-- /rai:tests -->},
190
- "<!-- rai:tests -->#{test_count} RSpec specs<!-- /rai:tests -->")
191
-
192
- # Engine count from target profiles
193
- engine_count = Dir[File.expand_path('conf/targets/*.yml', __dir__)].size
194
- content.gsub!(%r{<!-- rai:engines -->\d+<!-- /rai:engines -->},
195
- "<!-- rai:engines -->#{engine_count}<!-- /rai:engines -->")
196
-
197
- File.write(readme_path, content)
198
- puts "README.md updated: v#{version}, #{test_count} specs, #{engine_count} engines"
199
- end
200
- end
data/SECURITY.md DELETED
@@ -1,114 +0,0 @@
1
- # Security Policy
2
-
3
- ## Scope
4
-
5
- This policy covers the following NeatNerds open-source projects:
6
-
7
- - **Rosett-AI** (raictl) --- the core CLI and compiler
8
- - **rosett-ai-engine-\*** --- all official engine adapter gems
9
- - **auditor-mcp** --- InSpec MCP server
10
- - **openvox-mcp** --- OpenVox MCP server
11
- - **neatspec** --- Compliance-as-a-Service wrapper
12
-
13
- Third-party forks and community plugins are outside this scope unless
14
- they ship under the `neatnerds` GitLab namespace.
15
-
16
- ## Supported Versions
17
-
18
- | Version | Supported |
19
- |---------|-----------|
20
- | Latest release | Yes |
21
- | Previous minor | Security fixes only |
22
- | Older | No |
23
-
24
- Only the latest tagged release and the immediately preceding minor
25
- release receive security patches. If you are running an older version,
26
- please upgrade before reporting.
27
-
28
- ## Reporting a Vulnerability
29
-
30
- **Do not open a public issue for security vulnerabilities.**
31
-
32
- ### Email (primary channel --- no account required)
33
-
34
- Send an email to **security@neatnerds.be** with:
35
-
36
- 1. Affected project and version
37
- 2. Description of the vulnerability
38
- 3. Steps to reproduce (proof-of-concept if possible)
39
- 4. Impact assessment (what an attacker could achieve)
40
-
41
- Email is the primary reporting channel. It requires no account, no
42
- registration, and no prior relationship with the project. Anyone who
43
- discovers a vulnerability can report it immediately.
44
-
45
- You may optionally encrypt your report using the PGP key for
46
- `security@neatnerds.be`, available on
47
- [keys.openpgp.org](https://keys.openpgp.org). Search for the email
48
- address to retrieve the public key.
49
-
50
- ### GitLab Confidential Issue (alternative --- requires account)
51
-
52
- If you already have an account on our self-hosted GitLab instance
53
- (`gitlab.neatnerds.be`), you may open a **confidential** issue on
54
- the affected project's repository instead. Mark it confidential
55
- before submitting and use the `Security` issue template.
56
-
57
- This channel is mainly useful for existing contributors and
58
- community members who already have access. If you do not have an
59
- account, use the email channel above --- do not create an account
60
- solely to report a vulnerability.
61
-
62
- ## Response Timeline
63
-
64
- | Stage | Target |
65
- |-------|--------|
66
- | Acknowledgement | 48 hours |
67
- | Initial assessment | 7 calendar days |
68
- | Fix or mitigation | 90 calendar days |
69
-
70
- If we cannot meet a target, we will communicate the revised timeline
71
- in the acknowledgement or assessment response.
72
-
73
- ## Disclosure Policy
74
-
75
- We follow **coordinated disclosure**:
76
-
77
- 1. The reporter and maintainers agree on a disclosure date (default:
78
- 90 days after the initial report).
79
- 2. A fix is developed and tested in a private branch.
80
- 3. The fix is released, and a security advisory is published on
81
- the same day.
82
- 4. The reporter is credited in the advisory (unless they request
83
- anonymity).
84
-
85
- We will never disclose a vulnerability before a fix is available
86
- unless active exploitation is detected in the wild.
87
-
88
- ## Credit
89
-
90
- We gratefully acknowledge security researchers who report
91
- vulnerabilities responsibly. Unless you request otherwise, your name
92
- (or handle) and a link to your profile will appear in the security
93
- advisory and the CHANGELOG entry for the fix.
94
-
95
- ## Security Advisories
96
-
97
- | ID | Date | Severity | Summary |
98
- |----|------|----------|---------|
99
- | [NNSA-2026-001](https://gitlab.neatnerds.be/foss/rosett-ai/rosett-ai/-/issues/2) | 2026-04-18 | Medium | Session data included in v1.2.0 gem package. Yanked. Fixed in v1.3.0+. |
100
-
101
- ## Security Best Practices for Contributors
102
-
103
- All contributions must follow these rules (enforced by CI and
104
- overcommit hooks):
105
-
106
- - Use `YAML.safe_load` exclusively --- never `YAML.load`
107
- - Use array-form `system()` calls --- never string interpolation
108
- in shell commands
109
- - Write files only to whitelisted directories
110
- - Set 0600 permissions on any file containing secrets
111
- - Never log secrets or credentials
112
- - Validate all external input before use
113
- - Include `# SPDX-License-Identifier: GPL-3.0-only` in every
114
- Ruby source file
data/cliff.toml DELETED
@@ -1,52 +0,0 @@
1
- # git-cliff configuration for NeatNerds Code Companion
2
- # Generates Keep a Changelog 1.1.0 formatted CHANGELOG from conventional commits.
3
- #
4
- # Reference: https://git-cliff.org/docs/configuration
5
-
6
- [changelog]
7
- header = """
8
- # Changelog
9
-
10
- All notable changes to the NeatNerds Code Companion (nncc) are documented in this file.
11
-
12
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\n
13
- """
14
-
15
- body = """
16
- {% if version %}\
17
- ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
18
- {% else %}\
19
- ## [Unreleased]
20
- {% endif %}\
21
- {% for group, commits in commits | group_by(attribute="group") %}
22
- ### {{ group | striptags | trim | upper_first }}
23
- {% for commit in commits %}
24
- - {% if commit.scope %}**{{ commit.scope }}:** {% endif %}\
25
- {{ commit.message | split(pat=":") | last | trim | upper_first }}\
26
- {% endfor %}
27
- {% endfor -%}
28
- """
29
-
30
- footer = ""
31
- trim = true
32
-
33
- [git]
34
- conventional_commits = true
35
- filter_unconventional = false
36
- split_commits = false
37
- protect_breaking_commits = false
38
- filter_commits = false
39
- tag_pattern = "v[0-9].*"
40
- sort_commits = "oldest"
41
- commit_parsers = [
42
- { message = "^feat", group = "<!-- 0 -->Added" },
43
- { message = "^fix", group = "<!-- 1 -->Fixed" },
44
- { message = "^refactor", group = "<!-- 2 -->Changed" },
45
- { message = "^perf", group = "<!-- 2 -->Changed" },
46
- { message = "^docs", group = "<!-- 3 -->Documentation" },
47
- { message = "^chore\\(release\\)", skip = true },
48
- { message = "^chore", group = "<!-- 4 -->Other" },
49
- { message = "^ci", group = "<!-- 4 -->Other" },
50
- { message = "^test", group = "<!-- 5 -->Other" },
51
- { body = ".*", group = "<!-- 6 -->Other" },
52
- ]
File without changes
@@ -1,181 +0,0 @@
1
- ---
2
- name: aaif_alignment
3
- domain: core
4
- version: 0.1.0
5
- status: implemented
6
- priority: 2
7
- author: hugo
8
- created_at: "2026-02-24"
9
- modified_at: "2026-03-16"
10
- modified_by: claude
11
- depends_on:
12
- - security
13
- - architecture
14
- - compiler
15
- - mcp_integration
16
- - error_handling
17
- #
18
- intent: |
19
- Position rosett-ai as a standards-compliant tool within the Agentic AI Foundation (AAIF)
20
- ecosystem by implementing AAIF-governed protocols and compilation targets.
21
-
22
- The AAIF (Linux Foundation, Dec 2025) governs three founding projects:
23
- - MCP (Anthropic) — protocol for AI-tool integration
24
- - AGENTS.md (OpenAI) — vendor-neutral project instruction files
25
- - goose (Block) — open-source AI agent framework
26
-
27
- raictl fills a gap none of these projects address: structured, validated, versioned,
28
- auditable configuration management for AI agent workflows. This document defines
29
- how rosett-ai integrates with the AAIF ecosystem without losing its core value proposition.
30
-
31
- Key alignments:
32
- 1. AGENTS.md as a compilation target (alongside CLAUDE.md and generic)
33
- 2. MCP as the integration protocol (see mcp_integration.yml)
34
- 3. Vendor-neutral multi-agent support (Claude, Goose, Cursor, Copilot, etc.)
35
- 4. Potential AAIF project contribution pathway
36
-
37
- AAIF contribution pathway:
38
- - Recommended: modular extraction (rosett-ai-mcp as Apache-2.0, core stays GPL-3.0)
39
- - Timeline: build MCP integration first, extract after validation, pitch at MCP Dev Summit NYC (April 2-3, 2026)
40
- - License tension: AAIF projects use Apache-2.0/MIT; GPL-3.0 is copyleft outlier
41
- - Open-core model survives relicensing (content packs are data, not derivative works)
42
-
43
- This design document is part of the AAIF Alignment epic (P2).
44
- #
45
- constraints:
46
- - AGENTS.md compilation must produce valid, idiomatic Markdown (no YAML frontmatter unless spec adds it)
47
- - AGENTS.md output must be readable by all 21+ compatible tools listed on agents.md
48
- - Multi-target compilation must not degrade existing CLAUDE.md output quality
49
- - Vendor-neutral features must not break Claude Code specific features
50
- - AAIF spec tracking must be explicit — pin to known spec versions, not "latest"
51
- - No AAIF-specific code paths that circumvent security constraints from security.yml
52
- - No code may be contributed to AAIF without a documented license compatibility assessment
53
- - AGENTS.md files must be compilable from the same YAML sources as CLAUDE.md
54
- - Goose .goosehints format support is optional — only add if demand exists
55
- - Any AAIF governance participation must be documented in project decisions log
56
- #
57
- acceptance_criteria:
58
- - 'bin/raictl compile --engine agents_md produces valid AGENTS.md file'
59
- - AGENTS.md output includes all enabled behaviours, properly sectioned by domain
60
- - AGENTS.md output is tested against at least 3 tools (manual verification with Claude Code, Goose, Cursor)
61
- - Compiler target registry includes agents_md alongside claude, generic, and model-specific targets
62
- - Design documents reference AAIF spec versions explicitly (MCP 2025-03-26, AGENTS.md v0.1.0)
63
- - Multi-agent configuration support documented with examples for Claude Code, Goose, and generic agents
64
- - AAIF ecosystem positioning documented in project README or CONTRIBUTING.md
65
- - Compilation lockfile tracks AGENTS.md output alongside existing targets
66
- - conf/targets/agents_md.yml target profile exists with format-specific compilation rules
67
- - Modular extraction plan documented for Rosett-AI-mcp (Apache-2.0) contribution pathway
68
- - License compatibility matrix maintained for AAIF contribution scenarios
69
- - AAIF governance participation options documented (Silver member vs project donation)
70
- - Compliance differentiator (CRA/NIS2/DORA) integrated into MCP admin capabilities
71
- #
72
- examples:
73
- - scenario: "User compiles behaviours to AGENTS.md format"
74
- expected: |
75
- $ bin/raictl compile --engine agents_md --verbose
76
- Compiling 12 behaviours to AGENTS.md format...
77
- Output: AGENTS.md (project root)
78
- Sections: Project Overview, Build & Test, Code Style, Security, Testing
79
- Format: Standard Markdown with ## headings per domain
80
- not: "Output contains YAML, JSON Schema references, or rosett-ai-internal metadata"
81
- - scenario: "User compiles for multiple targets simultaneously"
82
- expected: |
83
- $ bin/raictl compile --engine claude --engine agents_md
84
- Compiling to ~/.claude/rules/ (claude target)
85
- Compiling to ./AGENTS.md (agents_md target)
86
- Both outputs reflect the same source behaviours with format-appropriate rendering.
87
- not: "One target's compilation affects the other's output"
88
- - scenario: "User wants to use rosett-ai with Goose instead of Claude Code"
89
- expected: |
90
- $ bin/raictl compile --engine agents_md
91
- Creates AGENTS.md file. Goose reads it as hints (alongside .goosehints).
92
- User can also configure rosett-ai as an MCP server in Goose's config.yaml.
93
- not: "User must maintain separate configuration for each AI agent"
94
- - scenario: "AAIF updates the MCP spec from 2025-03-26 to a newer revision"
95
- expected: |
96
- raictl tracks spec version in conf/targets/ and mcp_integration design doc.
97
- Maintainer reviews changelog, updates pinned version, runs compatibility tests.
98
- Release notes document spec version bump.
99
- not: "rosett-ai silently breaks on spec change or auto-adopts unreviewed spec versions"
100
- - scenario: "Preparing rosett-ai-mcp for AAIF contribution"
101
- expected: |
102
- 1. MCP integration built and tested within rosett-ai (GPL-3.0)
103
- 2. MCP admin module extracted as rosett-ai-mcp (relicensed Apache-2.0)
104
- 3. rosett-ai-mcp has own repo, CI, tests, README, GOVERNANCE.md
105
- 4. Pitched at MCP Dev Summit NYC (April 2-3, 2026)
106
- 5. If accepted: project hosted under AAIF, copyright to LF Projects, LLC
107
- Core rosett-ai remains GPL-3.0 with open-core content model intact.
108
- not: "Full rosett-ai donated, GPL-3.0 abandoned, open-core model compromised"
109
- - scenario: "AAIF contribution not accepted, continuing independently"
110
- expected: |
111
- raictl continues as independent project using AAIF standards (MCP, AGENTS.md).
112
- Optional: join as Silver member for ecosystem participation without project donation.
113
- MCP integration and AGENTS.md compilation still provide value regardless.
114
- not: "Project abandoned because AAIF didn't accept it"
115
- - scenario: "Evaluating license options for AAIF contribution"
116
- expected: |
117
- Options evaluated:
118
- 1. Relicense to Apache-2.0 (content model survives, copyleft lost)
119
- 2. Dual-license GPL-3.0 + Apache-2.0 (complex but preserves both)
120
- 3. Extract MCP only as Apache-2.0 (recommended — clean separation)
121
- 4. Participate as member without donation (keep full control)
122
- Decision documented in project decisions log with rationale.
123
- not: "License changed without evaluating impact on open-core model"
124
- - scenario: "User asks about AAIF compliance status"
125
- expected: |
126
- $ bin/raictl status --aaif
127
- AAIF Alignment Status:
128
- MCP Server: enabled (spec 2025-03-26, mcp gem 0.7.1)
129
- AGENTS.md: supported (compiled target)
130
- CLAUDE.md: supported (compiled target, primary)
131
- Goose hints: not supported (planned)
132
- not: "No visibility into AAIF ecosystem alignment"
133
- #
134
- anti_patterns:
135
- - Treating AGENTS.md as a structured format (it is deliberately unstructured Markdown)
136
- - Adding AAIF-specific fields to the core behaviour YAML schema (keep source format neutral)
137
- - Coupling compilation logic to a single AAIF project (MCP, AGENTS.md, goose are independent)
138
- - Auto-updating to new AAIF spec versions without maintainer review
139
- - Claiming AAIF compliance or endorsement without actual contribution/acceptance
140
- - Ignoring AGENTS.md security concerns (hidden Unicode injection, prompt injection via Markdown)
141
- - Duplicating behaviour content across targets instead of compiling from single source
142
- - Assuming AGENTS.md will gain a formal schema (design for current unstructured format)
143
- - Donating full rosett-ai to AAIF without extracting MCP component first (loses GPL-3.0 protection)
144
- - Relicensing core rosett-ai to Apache-2.0 without evaluating open-core model impact
145
- - Claiming AAIF membership or endorsement before formal acceptance
146
- - Pitching "AI agent config compiler" without the MCP admin angle (too narrow for AAIF)
147
- - Ignoring the compliance differentiator (CRA/NIS2/DORA) — this is the strongest enterprise pitch
148
- #
149
- gui_notes: |
150
- Document interactions (cross-references):
151
-
152
- 1. mcp_integration.yml: MCP is the integration protocol. AAIF alignment
153
- governs the strategic positioning; MCP integration handles the technical
154
- implementation.
155
-
156
- 2. compiler.yml: AGENTS.md is a compilation target alongside CLAUDE.md
157
- and generic. Target profile: conf/targets/agents_md.yml.
158
-
159
- 3. security.yml: AGENTS.md output must not contain hidden Unicode injection
160
- or prompt injection patterns.
161
-
162
- 4. licensing_system.yml: license compatibility assessment for AAIF
163
- contribution (Apache-2.0 vs GPL-3.0 tension).
164
-
165
- 5. comply.yml: CRA/NIS2/DORA compliance is the enterprise differentiator
166
- for AAIF pitch.
167
-
168
- 6. error_handling.yml: exit codes and structured errors for compilation
169
- targets.
170
- #
171
- preferences:
172
- language: ruby
173
- patterns:
174
- - "Compiler target pattern (AGENTS.md as target)"
175
- - "Adapter pattern for format-specific rendering"
176
- - "Strategy pattern for multi-target compilation"
177
- testing: rspec with AGENTS.md output validation, multi-target compilation
178
- tests, and spec version pinning verification
179
- gems:
180
- - json_schemer
181
- - thor