rosett-ai 1.3.3 → 1.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +413 -22
  3. data/README.md +56 -42
  4. data/bin/raictl +13 -0
  5. data/conf/adopt_redactions.yml +2 -0
  6. data/conf/compliance/cra_rules.yml +2 -0
  7. data/conf/compliance/license_rules.yml +2 -0
  8. data/conf/mcp/server_defaults.yml +2 -0
  9. data/conf/mcp/trust.yml +1 -0
  10. data/conf/packaging/core.yml +2 -0
  11. data/conf/packaging/gtk4.yml +2 -0
  12. data/conf/packaging/qt6.yml +2 -0
  13. data/conf/policy/default_deny_list.yml +2 -0
  14. data/conf/review/cli-command-audit.yml +2 -0
  15. data/conf/review/design-docs.yml +2 -0
  16. data/conf/review/design-questionnaire.yml +2 -0
  17. data/conf/review/questionnaire.yml +2 -0
  18. data/conf/review/rosett-ai-core.yml +2 -0
  19. data/conf/schemas/ai_config_schema.json +14 -2
  20. data/conf/schemas/autoqueue.schema.json +153 -0
  21. data/conf/schemas/behaviour_schema.json +31 -7
  22. data/conf/schemas/compliance_rule_schema.json +17 -4
  23. data/conf/schemas/content_pack_manifest_schema.json +23 -4
  24. data/conf/schemas/design_schema.json +177 -42
  25. data/conf/schemas/engine_manifest_schema.json +22 -5
  26. data/conf/schemas/lockfile_schema.json +26 -4
  27. data/conf/schemas/mcp_server_schema.json +50 -9
  28. data/conf/schemas/packaging_schema.json +23 -5
  29. data/conf/schemas/policy_schema.json +35 -9
  30. data/conf/schemas/provenance_schema.json +33 -5
  31. data/conf/schemas/rai_config_schema.json +6 -2
  32. data/conf/schemas/rai_project_schema.json +8 -2
  33. data/conf/schemas/scope_hierarchy_schema.json +22 -5
  34. data/conf/schemas/target_schema.json +33 -6
  35. data/conf/schemas/tooling_schema.json +53 -12
  36. data/conf/schemas/workflow_schema.json +39 -9
  37. data/conf/targets/agents_md.yml +1 -0
  38. data/conf/targets/claude.yml +2 -0
  39. data/conf/tooling/tools.yml +2 -0
  40. data/lib/rosett_ai/adopter/local_analysis_collector.rb +5 -0
  41. data/lib/rosett_ai/adopter/rule_adopter.rb +40 -0
  42. data/lib/rosett_ai/ai_config/context_window.rb +3 -0
  43. data/lib/rosett_ai/ai_config/cost_controls.rb +1 -0
  44. data/lib/rosett_ai/ai_config/fallback_chain.rb +1 -0
  45. data/lib/rosett_ai/ai_config/model_router.rb +1 -0
  46. data/lib/rosett_ai/ai_config/validator.rb +2 -0
  47. data/lib/rosett_ai/authorship/attribution_compiler.rb +1 -0
  48. data/lib/rosett_ai/authorship/disclosure_policy.rb +2 -0
  49. data/lib/rosett_ai/authorship/review_validator.rb +1 -0
  50. data/lib/rosett_ai/authorship/trailer_generator.rb +1 -0
  51. data/lib/rosett_ai/backup/compressor.rb +3 -0
  52. data/lib/rosett_ai/backup/destination.rb +1 -0
  53. data/lib/rosett_ai/behaviour/manager.rb +1 -0
  54. data/lib/rosett_ai/compiler/backend.rb +3 -0
  55. data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +1 -0
  56. data/lib/rosett_ai/compiler/backends/claude_backend.rb +1 -0
  57. data/lib/rosett_ai/compiler/behaviour_compiler.rb +1 -0
  58. data/lib/rosett_ai/compiler/compilation_pipeline.rb +1 -7
  59. data/lib/rosett_ai/compiler/locale_compiler.rb +2 -0
  60. data/lib/rosett_ai/compiler/target_profile.rb +11 -0
  61. data/lib/rosett_ai/completion/generator.rb +2 -0
  62. data/lib/rosett_ai/completion/shells/zsh_generator.rb +1 -0
  63. data/lib/rosett_ai/comply/checkers/cra_checker.rb +1 -0
  64. data/lib/rosett_ai/comply/checkers/license_checker.rb +2 -0
  65. data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +4 -0
  66. data/lib/rosett_ai/comply/runner.rb +2 -0
  67. data/lib/rosett_ai/composition/composer.rb +1 -0
  68. data/lib/rosett_ai/composition/lockfile.rb +1 -0
  69. data/lib/rosett_ai/composition/merge_strategy.rb +1 -0
  70. data/lib/rosett_ai/config/masking_secret_resolver.rb +9 -0
  71. data/lib/rosett_ai/config/secret_resolver.rb +4 -0
  72. data/lib/rosett_ai/configuration.rb +4 -0
  73. data/lib/rosett_ai/content/content_client.rb +15 -0
  74. data/lib/rosett_ai/content/pack_installer.rb +1 -0
  75. data/lib/rosett_ai/content/pack_manifest.rb +21 -0
  76. data/lib/rosett_ai/content_packs/manager.rb +1 -0
  77. data/lib/rosett_ai/dbus/compositor_detector.rb +2 -0
  78. data/lib/rosett_ai/dbus/focus_adapters/base.rb +1 -0
  79. data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +5 -0
  80. data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +4 -0
  81. data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +4 -0
  82. data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +4 -0
  83. data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +4 -0
  84. data/lib/rosett_ai/dbus/focus_monitor_interface.rb +1 -0
  85. data/lib/rosett_ai/dbus/manager_interface.rb +1 -0
  86. data/lib/rosett_ai/dbus/plugin_manager_interface.rb +2 -0
  87. data/lib/rosett_ai/dbus/rate_limiter.rb +1 -0
  88. data/lib/rosett_ai/dbus/service.rb +3 -0
  89. data/lib/rosett_ai/dbus/status_notifier_interface.rb +14 -0
  90. data/lib/rosett_ai/desktop/dbus_client.rb +6 -0
  91. data/lib/rosett_ai/desktop/gtk4_app.rb +3 -0
  92. data/lib/rosett_ai/desktop/gtk4_preferences.rb +1 -0
  93. data/lib/rosett_ai/desktop/gui_logger.rb +2 -0
  94. data/lib/rosett_ai/doctor/check.rb +1 -1
  95. data/lib/rosett_ai/doctor/checks/cache_health_check.rb +1 -0
  96. data/lib/rosett_ai/doctor.rb +1 -0
  97. data/lib/rosett_ai/documentation/reference_compiler.rb +9 -0
  98. data/lib/rosett_ai/documentation/translator.rb +8 -0
  99. data/lib/rosett_ai/engines/base_config_compiler.rb +71 -1
  100. data/lib/rosett_ai/engines/detector.rb +5 -0
  101. data/lib/rosett_ai/engines/registry.rb +7 -0
  102. data/lib/rosett_ai/exit_codes.rb +6 -0
  103. data/lib/rosett_ai/formatting.rb +1 -0
  104. data/lib/rosett_ai/gem_consistency_checker.rb +6 -0
  105. data/lib/rosett_ai/git_hooks/chain_detector.rb +1 -0
  106. data/lib/rosett_ai/git_hooks/installer.rb +4 -0
  107. data/lib/rosett_ai/git_hooks/script_generator.rb +2 -0
  108. data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +6 -0
  109. data/lib/rosett_ai/i18n/utf8_checker.rb +1 -0
  110. data/lib/rosett_ai/init/config_file_writer.rb +4 -0
  111. data/lib/rosett_ai/init/directory_builder.rb +15 -0
  112. data/lib/rosett_ai/init/file_copier.rb +51 -0
  113. data/lib/rosett_ai/init/mcp_registrar.rb +1 -0
  114. data/lib/rosett_ai/init/project_initializer.rb +1 -0
  115. data/lib/rosett_ai/licensing/license_key.rb +4 -0
  116. data/lib/rosett_ai/licensing/license_store.rb +11 -0
  117. data/lib/rosett_ai/licensing/tier.rb +9 -0
  118. data/lib/rosett_ai/mcp/admin/auditor.rb +1 -0
  119. data/lib/rosett_ai/mcp/admin/health_checker.rb +1 -0
  120. data/lib/rosett_ai/mcp/admin/registry.rb +1 -0
  121. data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +27 -4
  122. data/lib/rosett_ai/mcp/enforcement/validator.rb +24 -3
  123. data/lib/rosett_ai/mcp/governance.rb +9 -0
  124. data/lib/rosett_ai/mcp/http_security_config.rb +22 -0
  125. data/lib/rosett_ai/mcp/key_hasher.rb +4 -2
  126. data/lib/rosett_ai/mcp/keyfile.rb +4 -0
  127. data/lib/rosett_ai/mcp/middleware/cors.rb +4 -0
  128. data/lib/rosett_ai/mcp/middleware/origin_validation.rb +1 -0
  129. data/lib/rosett_ai/mcp/middleware/rate_limit.rb +3 -0
  130. data/lib/rosett_ai/mcp/plugins.rb +1 -0
  131. data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +2 -0
  132. data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +3 -0
  133. data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +2 -0
  134. data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +2 -0
  135. data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +2 -0
  136. data/lib/rosett_ai/mcp/resources/config_resource.rb +2 -0
  137. data/lib/rosett_ai/mcp/resources/design_resource.rb +1 -0
  138. data/lib/rosett_ai/mcp/resources/hooks_resource.rb +3 -0
  139. data/lib/rosett_ai/mcp/resources/provenance_resource.rb +2 -0
  140. data/lib/rosett_ai/mcp/resources/rules_resource.rb +1 -0
  141. data/lib/rosett_ai/mcp/resources/schema_resource.rb +1 -0
  142. data/lib/rosett_ai/mcp/server.rb +7 -1
  143. data/lib/rosett_ai/mcp/settings/trust_manager.rb +3 -0
  144. data/lib/rosett_ai/mcp/tools/adopt_tool.rb +4 -0
  145. data/lib/rosett_ai/mcp/tools/backup_tool.rb +4 -0
  146. data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +4 -0
  147. data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +3 -0
  148. data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +5 -0
  149. data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +4 -0
  150. data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +4 -0
  151. data/lib/rosett_ai/mcp/tools/compile_tool.rb +4 -0
  152. data/lib/rosett_ai/mcp/tools/comply_tool.rb +4 -0
  153. data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +4 -0
  154. data/lib/rosett_ai/mcp/tools/config_status_tool.rb +3 -0
  155. data/lib/rosett_ai/mcp/tools/content_tool.rb +5 -0
  156. data/lib/rosett_ai/mcp/tools/context_query_tool.rb +4 -0
  157. data/lib/rosett_ai/mcp/tools/design_list_tool.rb +3 -0
  158. data/lib/rosett_ai/mcp/tools/design_show_tool.rb +4 -0
  159. data/lib/rosett_ai/mcp/tools/doctor_tool.rb +4 -0
  160. data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +3 -0
  161. data/lib/rosett_ai/mcp/tools/engines_tool.rb +5 -0
  162. data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +7 -0
  163. data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +33 -8
  164. data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +5 -0
  165. data/lib/rosett_ai/mcp/tools/init_tool.rb +5 -0
  166. data/lib/rosett_ai/mcp/tools/license_status_tool.rb +3 -0
  167. data/lib/rosett_ai/mcp/tools/project_tool.rb +5 -0
  168. data/lib/rosett_ai/mcp/tools/provenance_tool.rb +5 -0
  169. data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +3 -0
  170. data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +5 -0
  171. data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +4 -0
  172. data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +5 -0
  173. data/lib/rosett_ai/mcp/tools/tooling_tool.rb +5 -0
  174. data/lib/rosett_ai/mcp/tools/validate_tool.rb +4 -0
  175. data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +4 -0
  176. data/lib/rosett_ai/mcp/tools/workflow_tool.rb +5 -0
  177. data/lib/rosett_ai/migration/detector.rb +1 -0
  178. data/lib/rosett_ai/migration/nncc_config_migrator.rb +2 -0
  179. data/lib/rosett_ai/migration/xdg_migrator.rb +3 -1
  180. data/lib/rosett_ai/package_manager/apt.rb +5 -0
  181. data/lib/rosett_ai/package_manager/base.rb +1 -0
  182. data/lib/rosett_ai/package_manager/gem_backend.rb +1 -0
  183. data/lib/rosett_ai/packaging/variant_config.rb +12 -0
  184. data/lib/rosett_ai/plugins/contract.rb +1 -0
  185. data/lib/rosett_ai/plugins/engine_contract.rb +2 -0
  186. data/lib/rosett_ai/plugins/gui_contract.rb +2 -0
  187. data/lib/rosett_ai/plugins/mcp_contract.rb +2 -0
  188. data/lib/rosett_ai/plugins/registry.rb +10 -0
  189. data/lib/rosett_ai/policy/auditor.rb +1 -0
  190. data/lib/rosett_ai/policy/opt_out_scanner.rb +1 -0
  191. data/lib/rosett_ai/policy/tier_hierarchy.rb +2 -0
  192. data/lib/rosett_ai/policy/validator.rb +1 -0
  193. data/lib/rosett_ai/profiler.rb +7 -0
  194. data/lib/rosett_ai/project/drift_detector.rb +1 -0
  195. data/lib/rosett_ai/project/manager.rb +1 -0
  196. data/lib/rosett_ai/project/template_applier.rb +1 -0
  197. data/lib/rosett_ai/provenance/entry.rb +2 -0
  198. data/lib/rosett_ai/provenance/source.rb +1 -0
  199. data/lib/rosett_ai/provenance/store.rb +3 -0
  200. data/lib/rosett_ai/provenance/validator.rb +1 -0
  201. data/lib/rosett_ai/quorum/collector.rb +1 -0
  202. data/lib/rosett_ai/quorum/comparator.rb +2 -0
  203. data/lib/rosett_ai/quorum/strategies/adopt.rb +1 -0
  204. data/lib/rosett_ai/rai_config.rb +9 -0
  205. data/lib/rosett_ai/retrofit/engine.rb +2 -0
  206. data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +8 -0
  207. data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +10 -0
  208. data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +9 -0
  209. data/lib/rosett_ai/retrofit/secret_detector.rb +3 -0
  210. data/lib/rosett_ai/secrets_resolver.rb +1 -0
  211. data/lib/rosett_ai/session_hooks/installer.rb +130 -0
  212. data/lib/rosett_ai/smart_feedback/suggester.rb +4 -0
  213. data/lib/rosett_ai/smart_feedback/thor_middleware.rb +7 -0
  214. data/lib/rosett_ai/structured_logger.rb +1 -0
  215. data/lib/rosett_ai/telemetry/log_rotator.rb +1 -0
  216. data/lib/rosett_ai/telemetry.rb +1 -0
  217. data/lib/rosett_ai/thor/cli.rb +9 -0
  218. data/lib/rosett_ai/thor/tasks/adopt.rb +2 -0
  219. data/lib/rosett_ai/thor/tasks/backfill_user_yml.rb +207 -0
  220. data/lib/rosett_ai/thor/tasks/backup.rb +6 -0
  221. data/lib/rosett_ai/thor/tasks/behaviour.rb +12 -0
  222. data/lib/rosett_ai/thor/tasks/build.rb +106 -21
  223. data/lib/rosett_ai/thor/tasks/compile.rb +76 -32
  224. data/lib/rosett_ai/thor/tasks/completion.rb +9 -0
  225. data/lib/rosett_ai/thor/tasks/comply.rb +2 -0
  226. data/lib/rosett_ai/thor/tasks/config.rb +21 -5
  227. data/lib/rosett_ai/thor/tasks/content.rb +8 -0
  228. data/lib/rosett_ai/thor/tasks/dbus.rb +13 -0
  229. data/lib/rosett_ai/thor/tasks/design.rb +2 -0
  230. data/lib/rosett_ai/thor/tasks/desktop.rb +4 -0
  231. data/lib/rosett_ai/thor/tasks/doctor.rb +2 -0
  232. data/lib/rosett_ai/thor/tasks/documentation.rb +7 -0
  233. data/lib/rosett_ai/thor/tasks/engines.rb +8 -0
  234. data/lib/rosett_ai/thor/tasks/hooks.rb +8 -0
  235. data/lib/rosett_ai/thor/tasks/init.rb +1 -0
  236. data/lib/rosett_ai/thor/tasks/license.rb +8 -0
  237. data/lib/rosett_ai/thor/tasks/mcp.rb +40 -0
  238. data/lib/rosett_ai/thor/tasks/migrate.rb +2 -0
  239. data/lib/rosett_ai/thor/tasks/plugins.rb +15 -0
  240. data/lib/rosett_ai/thor/tasks/project.rb +8 -0
  241. data/lib/rosett_ai/thor/tasks/provenance.rb +8 -0
  242. data/lib/rosett_ai/thor/tasks/release.rb +8 -0
  243. data/lib/rosett_ai/thor/tasks/retrofit.rb +4 -0
  244. data/lib/rosett_ai/thor/tasks/validate.rb +1 -0
  245. data/lib/rosett_ai/thor/tasks/workflow.rb +14 -0
  246. data/lib/rosett_ai/tooling/version_checker.rb +1 -0
  247. data/lib/rosett_ai/ui/accessible_tui.rb +18 -0
  248. data/lib/rosett_ai/ui/base.rb +3 -0
  249. data/lib/rosett_ai/ui/gtk4.rb +19 -0
  250. data/lib/rosett_ai/ui/kde.rb +1 -0
  251. data/lib/rosett_ai/ui/qt6.rb +1 -0
  252. data/lib/rosett_ai/ui/registry.rb +15 -0
  253. data/lib/rosett_ai/ui/tui.rb +22 -0
  254. data/lib/rosett_ai/validators/behaviour_validator.rb +1 -0
  255. data/lib/rosett_ai/validators/design_validator.rb +2 -0
  256. data/lib/rosett_ai/validators/schema_validator.rb +4 -0
  257. data/lib/rosett_ai/validators/tooling_validator.rb +1 -0
  258. data/lib/rosett_ai/version.rb +2 -1
  259. data/lib/rosett_ai/version_consistency_checker.rb +6 -0
  260. data/lib/rosett_ai/workflow/engine.rb +1 -0
  261. data/lib/rosett_ai/workflow/manager.rb +1 -0
  262. data/lib/rosett_ai/workflow/schema_validator.rb +2 -0
  263. data/lib/rosett_ai/workflow/step_runner.rb +1 -0
  264. data/lib/rosett_ai/workflow/steps/rai_step.rb +1 -0
  265. data/lib/rosett_ai/yaml_loader.rb +2 -0
  266. data/lib/rosett_ai.rb +2 -0
  267. data/lib/scripts/generated/docker_hub_tags.rb +2 -0
  268. data/locales/ar.yml +2 -0
  269. data/locales/en.yml +5 -0
  270. data/locales/fr.yml +2 -0
  271. metadata +9 -189
  272. data/.ai-provenance.yml +0 -119
  273. data/.debride_whitelist +0 -186
  274. data/.fasterer.yml +0 -29
  275. data/.mdl_style.rb +0 -10
  276. data/.mdlrc +0 -3
  277. data/.mutant.yml +0 -49
  278. data/.namespace-allowlist +0 -42
  279. data/.reek.yml +0 -1040
  280. data/.rosett-ai/config.yml +0 -3
  281. data/.rspec +0 -5
  282. data/.rubocop.yml +0 -380
  283. data/.ruby-version +0 -1
  284. data/.yamllint +0 -51
  285. data/.yardopts +0 -12
  286. data/AI-DISCLOSURE.md +0 -48
  287. data/CLAUDE.md +0 -141
  288. data/CONTRIBUTING.md +0 -734
  289. data/INSTALL.md +0 -154
  290. data/LICENSE.md +0 -675
  291. data/QUICKSTART.md +0 -73
  292. data/Rakefile +0 -200
  293. data/SECURITY.md +0 -114
  294. data/cliff.toml +0 -52
  295. data/conf/behaviour/.gitkeep +0 -0
  296. data/conf/design/aaif_alignment.yml +0 -181
  297. data/conf/design/ab_testing.yml +0 -172
  298. data/conf/design/accessibility.yml +0 -84
  299. data/conf/design/ai_authorship.yml +0 -210
  300. data/conf/design/ai_provenance.yml +0 -224
  301. data/conf/design/ai_tool_configuration.yml +0 -207
  302. data/conf/design/architecture.yml +0 -139
  303. data/conf/design/autocompletion.yml +0 -115
  304. data/conf/design/backward_compatibility.yml +0 -112
  305. data/conf/design/behaviour_composition.yml +0 -246
  306. data/conf/design/build_rake_extraction.yml +0 -57
  307. data/conf/design/ci_pipeline.yml +0 -100
  308. data/conf/design/claude_code_configuration.yml +0 -157
  309. data/conf/design/compiler.yml +0 -128
  310. data/conf/design/comply.yml +0 -153
  311. data/conf/design/content_packs.yml +0 -84
  312. data/conf/design/desktop_integration.yml +0 -289
  313. data/conf/design/distribution.yml +0 -216
  314. data/conf/design/doctor.yml +0 -184
  315. data/conf/design/documentation.yml +0 -152
  316. data/conf/design/engine_architecture.yml +0 -257
  317. data/conf/design/error_handling.yml +0 -103
  318. data/conf/design/feature_flags.yml +0 -142
  319. data/conf/design/git_hooks.yml +0 -165
  320. data/conf/design/gui_plugins.yml +0 -475
  321. data/conf/design/i18n.yml +0 -84
  322. data/conf/design/integration_testing.yml +0 -56
  323. data/conf/design/licensing_system.yml +0 -88
  324. data/conf/design/lifecycle_management.yml +0 -208
  325. data/conf/design/mcp_integration.yml +0 -207
  326. data/conf/design/mcp_settings.yml +0 -126
  327. data/conf/design/migration.yml +0 -56
  328. data/conf/design/monitoring_observability.yml +0 -194
  329. data/conf/design/namespace_cleanup.yml +0 -145
  330. data/conf/design/plugin_test_segregation.yml +0 -145
  331. data/conf/design/policy_management.yml +0 -229
  332. data/conf/design/project_management.yml +0 -183
  333. data/conf/design/rai_mcp_asset_discovery.yml +0 -164
  334. data/conf/design/rai_mcp_server.yml +0 -605
  335. data/conf/design/release_management.yml +0 -117
  336. data/conf/design/retrofit.yml +0 -199
  337. data/conf/design/retrospective_analyzer.yml +0 -79
  338. data/conf/design/scope_hierarchy.yml +0 -352
  339. data/conf/design/security.yml +0 -115
  340. data/conf/design/session_retrospective.yml +0 -85
  341. data/conf/design/smart_ui_feedback.yml +0 -89
  342. data/conf/design/structured_logging.yml +0 -148
  343. data/conf/design/styles.yml +0 -123
  344. data/conf/design/test_peer_review.yml +0 -89
  345. data/conf/design/testing.yml +0 -136
  346. data/conf/design/threat_model.yml +0 -108
  347. data/conf/design/ui_framework.yml +0 -111
  348. data/conf/design/usage_optimization.yml +0 -122
  349. data/conf/design/version_management.yml +0 -60
  350. data/conf/design/workflow.yml +0 -227
  351. data/doc/AAIF_POSITIONING.md +0 -58
  352. data/doc/ADOPT.md +0 -224
  353. data/doc/AI_PROVENANCE.md +0 -139
  354. data/doc/ARCHITECTURE.md +0 -920
  355. data/doc/BEHAVIOUR.md +0 -409
  356. data/doc/BUILD.md +0 -138
  357. data/doc/CI_CD_RECIPES.md +0 -171
  358. data/doc/CLAUDE_SESSIONS_MOVED.md +0 -16
  359. data/doc/COMMAND_ANALYSIS.md +0 -229
  360. data/doc/CONFIGURATION.md +0 -281
  361. data/doc/DESIGN_AUDIT.md +0 -235
  362. data/doc/DESIGN_PEER_REVIEW.md +0 -771
  363. data/doc/DESKTOP.md +0 -447
  364. data/doc/ENGINES.md +0 -567
  365. data/doc/ENGINE_DEVELOPMENT_GUIDE.md +0 -417
  366. data/doc/FEATURE_AUDIT.md +0 -218
  367. data/doc/IMPLEMENTATION_PLAN.md +0 -669
  368. data/doc/INCIDENT_REPORT_2026-02-02.md +0 -251
  369. data/doc/MIGRATION_GUIDE.md +0 -88
  370. data/doc/PACKAGING.md +0 -232
  371. data/doc/PROJECT_DASHBOARD.md +0 -153
  372. data/doc/PULP_DEPLOYMENT.md +0 -164
  373. data/doc/QUALITY_FIX_SUMMARY.md +0 -110
  374. data/doc/QUICK_START.md +0 -162
  375. data/doc/REEK_CONFIGURATION.md +0 -166
  376. data/doc/REFERENCE.md +0 -253
  377. data/doc/REFERENCES.md +0 -324
  378. data/doc/SECURITY_REVIEW_CHECKLIST.md +0 -72
  379. data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +0 -359
  380. data/doc/SETUP.md +0 -202
  381. data/doc/TEST_PEER_REVIEW.md +0 -152
  382. data/doc/THREAT_MODEL.md +0 -230
  383. data/doc/USAGE.md +0 -545
  384. data/doc/USER_MANUAL.md +0 -585
  385. data/doc/ai_test_review_checklist.md +0 -110
  386. data/doc/changes/2026-02-18-packaging-fpm.md +0 -155
  387. data/doc/changes/2026-02-19-testing-infrastructure.md +0 -221
  388. data/doc/changes/2026-02-20-security-implementation.md +0 -281
  389. data/doc/changes/2026-02-20-styles-implementation.md +0 -220
  390. data/doc/changes/2026-02-21-architecture-completion.md +0 -95
  391. data/doc/changes/2026-02-21-architecture-ui-layer.md +0 -253
  392. data/doc/changes/2026-02-21-cc-config-implementation.md +0 -108
  393. data/doc/changes/2026-02-21-ci-pipeline-implementation.md +0 -214
  394. data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +0 -241
  395. data/doc/changes/2026-02-21-config-design-show-commands.md +0 -61
  396. data/doc/changes/2026-02-21-design-implementation-overview.md +0 -455
  397. data/doc/changes/2026-02-21-lifecycle-management.md +0 -196
  398. data/doc/changes/2026-02-21-path-resolver.md +0 -128
  399. data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +0 -45
  400. data/doc/changes/2026-03-01-ci-bundler-strategy.md +0 -120
  401. data/doc/changes/2026-03-20-security-hardening-phase2.md +0 -163
  402. data/doc/context/SESSION-HANDOFF.md +0 -69
  403. data/doc/context/ai-engine-usage-trends-2026.md +0 -80
  404. data/doc/context/plan-pluggable-engines.md +0 -590
  405. data/doc/decisions/001-flog-deferred.md +0 -32
  406. data/doc/decisions/002-path-resolution-strategy.md +0 -158
  407. data/doc/decisions/003-ui-adapter-selection.md +0 -193
  408. data/doc/decisions/004-design-document-validation.md +0 -179
  409. data/doc/decisions/005-package-splitting-strategy.md +0 -200
  410. data/doc/decisions/006-multi-engine-architecture.md +0 -147
  411. data/doc/decisions/007-engine-agnostic-pivot.md +0 -219
  412. data/doc/decisions/008-ci-bundler-strategy.md +0 -129
  413. data/doc/decisions/009-core-only-v1-release.md +0 -60
  414. data/doc/decisions/010-engine-debian-packaging.md +0 -66
  415. data/doc/decisions/011-context-aware-cli.md +0 -71
  416. data/doc/dependency_decisions.yml +0 -247
  417. data/doc/issues/001-wrapper-missing-environment-variables.md +0 -197
  418. data/doc/issues/002-embedded-ruby-wrong-prefix.md +0 -217
  419. data/doc/issues/003-smoke-test-false-positive.md +0 -127
  420. data/doc/issues/004-market-research-design-updates.md +0 -109
  421. data/doc/issues/005-compile-scope-coexistence.md +0 -161
  422. data/doc/locales/.gitkeep +0 -0
  423. data/doc/man/rai.1.ronn +0 -505
  424. data/doc/operations/packaging.md +0 -133
  425. data/doc/operations/rosett-ai-release.md +0 -65
  426. data/doc/reference/error-catalog.md +0 -107
  427. data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
  428. data/doc/reference/src/Pictures/cover.jpg +0 -0
  429. data/doc/reference/src/Pictures/head1.jpg +0 -0
  430. data/doc/reference/src/Pictures/head2.jpg +0 -0
  431. data/doc/reference/src/Pictures/head3.jpg +0 -0
  432. data/doc/reference/src/Pictures/head4.jpg +0 -0
  433. data/doc/reference/src/Pictures/head5.jpg +0 -0
  434. data/doc/reference/src/Pictures/head6.jpg +0 -0
  435. data/doc/reference/src/Pictures/head7.jpg +0 -0
  436. data/doc/reference/src/Pictures/head8.jpg +0 -0
  437. data/doc/reference/src/StyleInd.ist +0 -4
  438. data/doc/reference/src/bibliography.bib +0 -79
  439. data/doc/reference/src/main.tex +0 -1288
  440. data/doc/reference/src/structure.tex +0 -303
  441. data/doc/rosett-ai-bookmarks.html +0 -301
  442. data/kitchen.yml +0 -46
  443. data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
  444. data/locales/.gitkeep +0 -0
  445. data/packaging/build-engine-deb.sh +0 -81
  446. data/packaging/scripts/postinst +0 -17
  447. data/packaging/scripts/postrm +0 -19
  448. data/packaging/scripts/prerm +0 -10
  449. data/packaging/wrapper.sh.template +0 -38
  450. data/rosett-ai.gemspec +0 -63
  451. data/rules/.gitkeep +0 -0
  452. data/scripts/publish/pulp_upload.sh +0 -123
  453. data/settings.json +0 -29
@@ -1,172 +0,0 @@
1
- ---
2
- name: ab_testing
3
- domain: ui
4
- version: 0.1.0
5
- status: draft
6
- priority: 4
7
- author: hugo
8
- created_at: "2026-03-23"
9
- modified_at: "2026-03-23"
10
- modified_by: claude
11
- depends_on:
12
- - architecture
13
- - ui_framework
14
- - structured_logging
15
- - testing
16
- #
17
- intent: |
18
- Define a framework for running survey-based A/B preference studies on CLI
19
- UX variants. Users manually opt into a variant via `rai config set`, use
20
- raictl normally, then submit feedback through a public survey (GitLab issue
21
- template or external form). No automated telemetry or data collection of
22
- any kind — the framework only controls which UX variant is active.
23
-
24
- The first test case is tree subcommand placement: Variant A (control)
25
- keeps `tree` on every command group (current behaviour); Variant B
26
- restricts `tree` to top-level only (`raictl tree`). This question cannot
27
- be answered by author intuition — it requires empirical measurement
28
- from real users.
29
-
30
- Each UX study is defined as a YAML file in `conf/ux_studies/` specifying
31
- variants, survey questions, target sample size, and duration. The active
32
- variant is stored in `~/.config/rosett-ai/config.yml` under a `ux_variants`
33
- key. Default is always the current behaviour (no user-visible change
34
- unless explicitly opted in).
35
-
36
- This design intentionally avoids runtime analytics, automatic data
37
- reporting, or any mechanism that collects usage data without the user
38
- actively choosing to fill out a survey. Privacy is non-negotiable.
39
- #
40
- constraints:
41
- - "No automated telemetry, usage tracking, or data collection of any kind"
42
- - "Variant switching is manual only: `rai config set ux_variant.<study> <variant>`"
43
- - "Active variant is stored in `~/.config/rosett-ai/config.yml` under the
44
- `ux_variants` key (XDG-compliant path)"
45
- - "Survey feedback is submitted manually by users via external survey
46
- (GitLab issue template or hosted form) — rosett-ai never transmits data"
47
- - "Default variant is always the current behaviour (control) — no
48
- user-visible change unless the user explicitly opts in"
49
- - "Variant switching takes effect on next command invocation — no
50
- process restart required"
51
- - "Each UX study definition must specify: variants (2+), survey
52
- questions, target sample size, duration, and survey link"
53
- - "UX study definitions live in `conf/ux_studies/` as YAML files
54
- validated against a schema"
55
- - "Study YAML files are shipped with rosett-ai but are informational —
56
- the framework reads them to display survey links and variant
57
- descriptions, not to enforce participation"
58
- - "This design governs UX preference testing. Feature visibility
59
- gating is governed by feature_flags.yml. User configuration
60
- management is governed by claude_code_configuration.yml"
61
- #
62
- acceptance_criteria:
63
- - "`rai config set ux_variant.tree_placement per_command` activates
64
- Variant A (control: tree on every command group)"
65
- - "`rai config set ux_variant.tree_placement top_level` activates
66
- Variant B (tree at top level only)"
67
- - "`rai config show` displays active UX variants alongside other
68
- configuration"
69
- - "Default behaviour (no ux_variants key set) is Variant A — no
70
- regression from current behaviour"
71
- - "UX study YAML files in `conf/ux_studies/` are validated against
72
- a JSON schema during `rai validate`"
73
- - "Framework is reusable for future UX studies beyond tree placement
74
- — no tree-specific logic in the core variant-switching mechanism"
75
- #
76
- examples:
77
- - scenario: "User opts into the top-level-only tree variant"
78
- expected: |
79
- $ rai config set ux_variant.tree_placement top_level
80
- UX variant set: tree_placement = top_level
81
-
82
- `raictl tree` shows the full command hierarchy.
83
- `rai compile tree` is not available (removed from subcommand groups).
84
- `raictl tree` output includes a survey link for feedback.
85
- not: |
86
- Variant change requires a restart. Subcommand `tree` silently
87
- disappears without the user opting in.
88
- - scenario: "User has never configured any UX variant"
89
- expected: |
90
- All commands behave exactly as today. `raictl tree` works.
91
- `rai compile tree` works. `rai behaviour tree` works.
92
- No survey prompts, no variant notices, no behavioural change.
93
- not: |
94
- User sees A/B testing notices without opting in. Default
95
- behaviour changes. Any data is collected silently.
96
- - scenario: "User switches back to the default variant"
97
- expected: |
98
- $ rai config set ux_variant.tree_placement per_command
99
- UX variant set: tree_placement = per_command
100
-
101
- All subcommand groups have `tree` again (identical to default).
102
- not: |
103
- Cannot revert to the original variant. Switching requires
104
- editing config files manually.
105
- - scenario: "UX study YAML file has invalid structure"
106
- expected: |
107
- $ rai validate
108
- conf/ux_studies/tree_placement.yml: FAIL — missing required key 'target_sample_size'
109
- Exit code 1.
110
- not: |
111
- Invalid study files are silently ignored. Validation does not
112
- cover UX study definitions.
113
- #
114
- anti_patterns:
115
- - "Automated telemetry or usage analytics of any kind"
116
- - "Changing default behaviour without explicit user opt-in"
117
- - "Collecting any data without the user actively filling out a survey"
118
- - "Hardcoding study-specific logic in the variant switching framework"
119
- - "Making survey participation a prerequisite for using rosett-ai"
120
- - "Shipping a variant as default before the study concludes"
121
- - "Using feature flags (RAI_EXPERIMENTAL) for UX variants — different
122
- concern, different mechanism"
123
- - "Remote configuration or server-side variant assignment"
124
- #
125
- gui_notes: |
126
- Document interactions (cross-references):
127
-
128
- 1. feature_flags.yml: feature flags gate experimental features; UX
129
- variants switch between alternative implementations of stable
130
- features. Both use opt-in mechanisms but serve different purposes.
131
-
132
- 2. ui_framework.yml: variant switching affects CLI command registration
133
- (Thor subcommand groups), which is a UI framework concern.
134
-
135
- 3. structured_logging.yml: variant switching events can be logged
136
- locally for debugging, but logs are never transmitted.
137
-
138
- 4. architecture.yml: UX study definitions follow the data-driven
139
- pattern (YAML config, not hardcoded logic).
140
-
141
- First study definition (conf/ux_studies/tree_placement.yml):
142
-
143
- name: tree_placement
144
- description: "Tree subcommand placement preference study"
145
- status: active
146
- variants:
147
- per_command:
148
- description: "tree available on every command group (current)"
149
- default: true
150
- top_level:
151
- description: "tree available only as top-level `raictl tree`"
152
- survey:
153
- questions:
154
- - "Which variant do you prefer? (A: per-command / B: top-level)"
155
- - "Rate discoverability of the tree command (1-5)"
156
- - "Free-text: any other feedback on tree command placement?"
157
- link: "https://gitlab.neatnerds.be/neatnerds/NeatNerds-AI/rosett-ai/-/issues/new?issuable_template=ux_study_tree_placement"
158
- target_sample_size: 30
159
- duration_days: 90
160
- created_at: "2026-03-23"
161
- #
162
- preferences:
163
- language: ruby
164
- patterns:
165
- - "Data-driven variant definitions (YAML, not hardcoded)"
166
- - "Config-based opt-in (XDG config.yml, not environment variables)"
167
- - "Strategy pattern for variant-specific command registration"
168
- - "Schema validation for UX study definitions"
169
- testing: rspec with variant switching scenarios, default behaviour
170
- regression tests, config persistence, and study YAML validation
171
- gems:
172
- - thor
@@ -1,84 +0,0 @@
1
- ---
2
- name: accessibility
3
- domain: accessibility
4
- version: 1.1.0
5
- status: implemented
6
- priority: 3
7
- author: hugo
8
- created_at: "2026-02-18"
9
- modified_at: "2026-03-17"
10
- modified_by: claude
11
- depends_on:
12
- - architecture
13
-
14
- intent: |
15
- Ensure rosett-ai is usable by humans with any kind of disability — visual
16
- impairment, motor impairment, cognitive difficulties, or those using
17
- assistive technologies. Accessibility is a core design constraint, not a
18
- feature to add later. As a Belgium/EU project, rosett-ai targets EN 301 549
19
- compliance and WCAG 2.2 Level AA principles. Building to this standard
20
- from the start avoids costly retrofitting required by the European
21
- Accessibility Act (EAA).
22
-
23
- constraints:
24
- - All interactive elements must be keyboard-accessible in all UI variants
25
- - All interactive elements must have accessible labels (no unlabelled buttons or controls)
26
- - No information may be conveyed by colour alone (use icons or text alongside)
27
- - No audio-only feedback (always provide visual or text equivalent)
28
- - Focus indicator must be visible at all times (never hidden)
29
- - Error messages must identify the specific field and describe the error clearly
30
- - Destructive actions require confirmation (undo capability or explicit prompt)
31
- - TUI accessible mode must produce linear, sequential text (no box drawing)
32
- - GTK4 must use GtkAccessible roles and labels on all widgets
33
- - Qt6 must use QAccessible roles, accessibleName, and accessibleDescription
34
- - Minimum touch/click target size is 44x44dp (WCAG 2.2 Level AA)
35
- - No auto-dismissing notifications or time-limited interactions
36
- - Animations must respect prefers-reduced-motion system setting
37
-
38
- acceptance_criteria:
39
- - Accessible mode (--accessible) auto-activates when ORCA_RUNNING or BRLTTY_TTY is set
40
- - Keyboard-only navigation reaches all interactive elements in TUI mode
41
- - Screen reader (Orca) can read all content and announce state changes
42
- - High-contrast system theme produces no invisible or unreadable elements
43
- - UI works at 200% font scaling without clipping or overlap (GTK4/Qt6 — deferred to GUI phase)
44
- - accerciser audit reports no missing roles or labels in GTK4 implementation (GTK4 — deferred to GUI phase)
45
- - All design documents with domain=ui include an accessibility section
46
- - shared_examples "a UI implementation" includes accessibility method checks
47
-
48
- examples:
49
- - scenario: "Visually impaired user navigates settings with Orca"
50
- expected: |
51
- Screen reader announces: 'Settings categories, navigation'.
52
- Arrow keys move between items. Orca announces each item name.
53
- Enter selects. Detail pane announces: 'Settings for General, form'.
54
- Tab moves between form fields. Each field label is announced.
55
- not: "Orca reads box drawing characters. Navigation is silent. Fields have no labels."
56
- - scenario: "Motor-impaired user uses switch access (2 buttons)"
57
- expected: |
58
- Sequential focus order moves through all controls in logical order.
59
- Each focusable element has visible focus indicator. Activation targets
60
- are at least 44x44dp.
61
- not: "Focus jumps erratically. Small targets require precision. No visible focus indicator."
62
- - scenario: "User enables high-contrast theme in GNOME"
63
- expected: "All text remains readable. No elements become invisible. No colour-only indicators."
64
- not: "Status indicators that were green/red become indistinguishable."
65
- - scenario: "Arabic-speaking user runs rosett-ai with locale ar"
66
- expected: "TUI text direction is RTL. GUI layout mirrors. Screen reader reads in correct direction."
67
- not: "RTL text renders backwards. Layout remains LTR. Mixed content is garbled."
68
-
69
- anti_patterns:
70
- - Treating accessibility as a separate feature to add later
71
- - Using colour as the sole indicator of state (red/green for error/success)
72
- - Creating custom widgets without accessibility roles
73
- - Hardcoding colours instead of respecting system theme
74
- - Auto-dismissing notifications without user action
75
- - Mouse-only interactions with no keyboard equivalent
76
- - Skipping accessibility testing in CI or review process
77
-
78
- preferences:
79
- language: ruby
80
- patterns:
81
- - accessible_by_default
82
- - semantic_roles_on_all_widgets
83
- - keyboard_first_interaction_design
84
- testing: rspec with accerciser integration for GTK4 (future)
@@ -1,210 +0,0 @@
1
- ---
2
- name: ai_authorship
3
- domain: core
4
- version: 0.1.0
5
- status: implemented
6
- priority: 2
7
- author: hugo
8
- created_at: "2026-03-10"
9
- modified_at: "2026-03-16"
10
- modified_by: claude
11
- depends_on:
12
- - ai_provenance
13
- - security
14
- - engine_architecture
15
- - compiler
16
- - error_handling
17
- - policy_management
18
- #
19
- intent: |
20
- Define how AI co-authorship is attributed, disclosed, and managed across
21
- all projects using rosett-ai. While ai_provenance.yml tracks the raw data,
22
- this design governs the human-facing policies: who gets credit, what
23
- trailers appear on commits, how authorship is disclosed in compiled
24
- output, and how the "hammer principle" (the human bears responsibility)
25
- is operationalised.
26
-
27
- This is particularly important for GPL-3.0 projects where copyright
28
- attribution matters legally, and for organisations that need to comply
29
- with emerging AI disclosure regulations (EU AI Act transparency
30
- obligations, US executive orders on AI).
31
-
32
- Authorship is the attribution layer in the provenance–authorship–policy
33
- triad: ai_provenance.yml records what each AI tool did (audit trail),
34
- this design governs how that involvement is attributed and disclosed
35
- (human-facing output), and policy_management.yml governs the
36
- requirements — which projects require what disclosure level.
37
-
38
- Key decisions:
39
- - AI tools are never listed as copyright holders (they are tools)
40
- - The human operator is always the accountable author
41
- - AI involvement is disclosed via standardised commit trailers
42
- - Compiled CLAUDE.md / AGENTS.md / .cursorrules include authorship
43
- attribution sections generated from provenance data
44
- - Behaviour rules can mandate disclosure levels per project
45
-
46
- Inspired by openvox-mcp's Area A (Attribution & Disclosure) and Area F
47
- (Accountability), adapted for Rosett-AI's multi-engine compilation model.
48
- #
49
- constraints:
50
- - "AI tools must never appear as copyright holders in SPDX headers or
51
- LICENSE files"
52
- - "The human who invoked the AI tool is always the accountable party"
53
- - "Commit trailers must use one of the four standardised roles
54
- (AI-Generated-By, AI-Co-Author, AI-Assisted-By, AI-Reviewed-By)"
55
- - "Trailer format must follow: Role — Tool Version (Provider) <email>"
56
- - "Trailer content must be validated against the format specification —
57
- tool names must match known engine manifests or be explicitly
58
- registered. Unknown tool names produce a warning (error in --strict)"
59
- - "Authorship disclosure level is configurable per project (none,
60
- minimal, standard, full)"
61
- - "Changing disclosure level mid-project applies to future compilations
62
- only — existing compiled output is not retroactively updated. A
63
- recompile regenerates attribution for all provenance data at the
64
- new level"
65
- - "Compiled output must include attribution metadata when disclosure
66
- level is standard or above"
67
- - "Attribution metadata in compiled output must not expose information
68
- beyond what the disclosure level permits — disclosure:minimal must
69
- not leak per-file AI involvement details even if provenance data
70
- contains them"
71
- - "No contribution may be blocked solely on authorship grounds (record,
72
- do not gate)"
73
- - "Authorship rules must compile to every supported engine format.
74
- Engines declare supported authorship features (trailers, metadata
75
- sections, comments) in their capability manifest"
76
- - "Human-Reviewed-By trailer must reference a different person than
77
- the submitter"
78
- - "Authorship configuration lives in .rosett-ai/config.yml, not in behaviour
79
- YAML"
80
- - "This design governs attribution and disclosure of AI involvement.
81
- Provenance recording (audit trail) is governed by ai_provenance.yml.
82
- Policy requirements for disclosure levels are governed by
83
- policy_management.yml"
84
- #
85
- acceptance_criteria:
86
- - "bin/raictl compile generates authorship attribution section when
87
- disclosure is standard or above"
88
- - "Commit trailer templates are generated for the active engine during
89
- compile"
90
- - "AI-Generated-By trailer uses the active engine name and version from
91
- manifest"
92
- - "Human-Reviewed-By validation rejects same-person review (submitter
93
- must differ from reviewer)"
94
- - "Disclosure level (none, minimal, standard, full) is configurable in
95
- .rosett-ai/config.yml"
96
- - "Disclosure level none produces no authorship metadata in compiled
97
- output"
98
- - "Disclosure level full includes per-file AI involvement summary"
99
- - "Authorship rules are engine-agnostic — same YAML compiles to all
100
- targets"
101
- - "bin/raictl authorship status shows current disclosure level and recent
102
- AI attributions using TTY-aware output (table when interactive,
103
- plain text when piped)"
104
- - "Compiled AGENTS.md includes an AI Attribution section when disclosure
105
- is standard or above"
106
- - "Compiled CLAUDE.md includes Co-Authored-By guidance when disclosure
107
- is minimal or above"
108
- - "Exit code 0 on success, 1 on compilation failure, 2 on validation
109
- error, 3 on invalid trailer format, 5 on missing provenance data"
110
- #
111
- examples:
112
- - scenario: "Open-source project with GPL-3.0 wants full AI transparency"
113
- expected: |
114
- .rosett-ai/config.yml sets disclosure: full. bin/raictl compile produces
115
- CLAUDE.md with authorship section listing all AI tools used.
116
- AGENTS.md includes "## AI Attribution" with provenance summary.
117
- Commit hook template includes all four trailer types.
118
- not: "AI appears as copyright holder. Attribution silently omitted."
119
- - scenario: "Private corporate project wants minimal disclosure"
120
- expected: |
121
- .rosett-ai/config.yml sets disclosure: minimal. Compiled output includes
122
- only a brief note that AI tools were used. No per-file details.
123
- Commit trailers still generated (they are in git history, not public).
124
- not: "Minimal disclosure disables provenance tracking entirely."
125
- - scenario: "Developer submits code and reviews their own AI-generated PR"
126
- expected: |
127
- If Human-Reviewed-By matches the commit author, validation warns
128
- that self-review does not satisfy the review requirement.
129
- At strict level, this is an error.
130
- not: "Self-review silently accepted as meaningful review."
131
- - scenario: "Compiling for Cursor engine which has no trailer concept"
132
- expected: |
133
- Authorship metadata is embedded in .cursorrules comments or
134
- omitted gracefully. Engine capability manifest indicates whether
135
- the engine supports commit trailers. Warning emitted for gaps.
136
- not: "Compilation fails because Cursor doesn't support trailers."
137
- - scenario: "Project sets disclosure level to none"
138
- expected: |
139
- bin/raictl compile produces no authorship metadata in any compiled
140
- output. Provenance tracking continues (recording is separate from
141
- disclosure). `raictl authorship status` shows: 'Disclosure: none
142
- (provenance recording active, no attribution in compiled output)'.
143
- not: "Disclosure:none also disables provenance recording."
144
- - scenario: "Commit trailer contains an unrecognised AI tool name"
145
- expected: |
146
- `raictl authorship validate` warns: 'Trailer AI-Co-Author references
147
- unknown tool "GPT-5" — not found in any engine manifest. Register
148
- via .rosett-ai/config.yml or install the engine.' --strict mode rejects.
149
- not: "Unknown tool names silently accepted in trailers."
150
- #
151
- anti_patterns:
152
- - "Listing AI tools as copyright holders or contributors in LICENSE files"
153
- - "Using 'AI wrote this' as a defence for code quality issues"
154
- - "Blocking contributions based solely on AI involvement level"
155
- - "Storing authorship preferences in behaviour YAML (it belongs in
156
- project config)"
157
- - "Requiring all engines to support all authorship features (graceful
158
- degradation via capability manifest)"
159
- - "Making disclosure mandatory for all projects regardless of context"
160
- - "Treating AI-Reviewed-By as equivalent to human review"
161
- - "Leaking per-file AI details when disclosure level is minimal or none"
162
- - "Retroactively changing compiled output when disclosure level changes
163
- (recompile instead)"
164
- #
165
- gui_notes: |
166
- Document interactions (cross-references):
167
-
168
- 1. ai_provenance.yml: provenance records what AI did; authorship governs
169
- how that involvement is attributed and disclosed in human-facing output.
170
-
171
- 2. policy_management.yml: policies govern disclosure requirements — which
172
- projects require what level, and compliance enforcement.
173
-
174
- 3. security.yml: SPDX/LICENSE protection, trailer format validation,
175
- compiled metadata exposure limits.
176
-
177
- 4. engine_architecture.yml: engines declare supported authorship features
178
- (trailers, metadata sections, comments) in capability manifests.
179
-
180
- 5. compiler.yml: authorship attribution is a compilation output target.
181
- Compiler invokes authorship generation as part of the pipeline.
182
-
183
- 6. error_handling.yml: exit codes and structured error messages follow
184
- the error hierarchy (what/why/fix format).
185
-
186
- 7. backward_compatibility.yml: disclosure level changes affect future
187
- compilations only — no retroactive output modification.
188
-
189
- Disclosure level matrix:
190
- | Level | Commit Trailers | CLAUDE.md | AGENTS.md | Per-file |
191
- |----------|-----------------|-----------|-----------|----------|
192
- | none | No | No | No | No |
193
- | minimal | Yes | Brief | No | No |
194
- | standard | Yes | Section | Section | No |
195
- | full | Yes | Section | Section | Yes |
196
- #
197
- preferences:
198
- language: ruby
199
- patterns:
200
- - "Configurable disclosure levels (none/minimal/standard/full)"
201
- - "Engine capability-aware compilation"
202
- - "Trailer template generation from provenance"
203
- - "Separation of tracking (provenance) and policy (authorship)"
204
- - "TTY-aware output (TtyHelper)"
205
- testing: rspec with disclosure level fixtures, cross-engine compilation
206
- tests, trailer format validation, self-review detection, and
207
- disclosure level change scenarios
208
- gems:
209
- - json_schemer
210
- - thor