rosett-ai 1.3.3

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 (527) hide show
  1. checksums.yaml +7 -0
  2. data/.ai-provenance.yml +119 -0
  3. data/.debride_whitelist +186 -0
  4. data/.fasterer.yml +29 -0
  5. data/.mdl_style.rb +10 -0
  6. data/.mdlrc +3 -0
  7. data/.mutant.yml +49 -0
  8. data/.namespace-allowlist +42 -0
  9. data/.reek.yml +1040 -0
  10. data/.rosett-ai/config.yml +3 -0
  11. data/.rspec +5 -0
  12. data/.rubocop.yml +380 -0
  13. data/.ruby-version +1 -0
  14. data/.yamllint +51 -0
  15. data/.yardopts +12 -0
  16. data/AI-DISCLOSURE.md +48 -0
  17. data/CHANGELOG.md +519 -0
  18. data/CLAUDE.md +141 -0
  19. data/CONTRIBUTING.md +734 -0
  20. data/INSTALL.md +154 -0
  21. data/LICENSE +674 -0
  22. data/LICENSE.md +675 -0
  23. data/QUICKSTART.md +73 -0
  24. data/README.md +366 -0
  25. data/Rakefile +200 -0
  26. data/SECURITY.md +114 -0
  27. data/bin/rai +1 -0
  28. data/cliff.toml +52 -0
  29. data/conf/adopt_redactions.yml +8 -0
  30. data/conf/behaviour/.gitkeep +0 -0
  31. data/conf/compliance/cra_rules.yml +25 -0
  32. data/conf/compliance/license_rules.yml +20 -0
  33. data/conf/design/aaif_alignment.yml +181 -0
  34. data/conf/design/ab_testing.yml +172 -0
  35. data/conf/design/accessibility.yml +84 -0
  36. data/conf/design/ai_authorship.yml +210 -0
  37. data/conf/design/ai_provenance.yml +224 -0
  38. data/conf/design/ai_tool_configuration.yml +207 -0
  39. data/conf/design/architecture.yml +139 -0
  40. data/conf/design/autocompletion.yml +115 -0
  41. data/conf/design/backward_compatibility.yml +112 -0
  42. data/conf/design/behaviour_composition.yml +246 -0
  43. data/conf/design/build_rake_extraction.yml +57 -0
  44. data/conf/design/ci_pipeline.yml +100 -0
  45. data/conf/design/claude_code_configuration.yml +157 -0
  46. data/conf/design/compiler.yml +128 -0
  47. data/conf/design/comply.yml +153 -0
  48. data/conf/design/content_packs.yml +84 -0
  49. data/conf/design/desktop_integration.yml +289 -0
  50. data/conf/design/distribution.yml +216 -0
  51. data/conf/design/doctor.yml +184 -0
  52. data/conf/design/documentation.yml +152 -0
  53. data/conf/design/engine_architecture.yml +257 -0
  54. data/conf/design/error_handling.yml +103 -0
  55. data/conf/design/feature_flags.yml +142 -0
  56. data/conf/design/git_hooks.yml +165 -0
  57. data/conf/design/gui_plugins.yml +475 -0
  58. data/conf/design/i18n.yml +84 -0
  59. data/conf/design/integration_testing.yml +56 -0
  60. data/conf/design/licensing_system.yml +88 -0
  61. data/conf/design/lifecycle_management.yml +208 -0
  62. data/conf/design/mcp_integration.yml +207 -0
  63. data/conf/design/mcp_settings.yml +126 -0
  64. data/conf/design/migration.yml +56 -0
  65. data/conf/design/monitoring_observability.yml +194 -0
  66. data/conf/design/namespace_cleanup.yml +145 -0
  67. data/conf/design/plugin_test_segregation.yml +145 -0
  68. data/conf/design/policy_management.yml +229 -0
  69. data/conf/design/project_management.yml +183 -0
  70. data/conf/design/rai_mcp_asset_discovery.yml +164 -0
  71. data/conf/design/rai_mcp_server.yml +605 -0
  72. data/conf/design/release_management.yml +117 -0
  73. data/conf/design/retrofit.yml +199 -0
  74. data/conf/design/retrospective_analyzer.yml +79 -0
  75. data/conf/design/scope_hierarchy.yml +352 -0
  76. data/conf/design/security.yml +115 -0
  77. data/conf/design/session_retrospective.yml +85 -0
  78. data/conf/design/smart_ui_feedback.yml +89 -0
  79. data/conf/design/structured_logging.yml +148 -0
  80. data/conf/design/styles.yml +123 -0
  81. data/conf/design/test_peer_review.yml +89 -0
  82. data/conf/design/testing.yml +136 -0
  83. data/conf/design/threat_model.yml +108 -0
  84. data/conf/design/ui_framework.yml +111 -0
  85. data/conf/design/usage_optimization.yml +122 -0
  86. data/conf/design/version_management.yml +60 -0
  87. data/conf/design/workflow.yml +227 -0
  88. data/conf/mcp/server_defaults.yml +42 -0
  89. data/conf/mcp/trust.yml +21 -0
  90. data/conf/packaging/core.yml +12 -0
  91. data/conf/packaging/gtk4.yml +11 -0
  92. data/conf/packaging/qt6.yml +11 -0
  93. data/conf/policy/default_deny_list.yml +197 -0
  94. data/conf/review/cli-command-audit.yml +857 -0
  95. data/conf/review/design-docs.yml +1064 -0
  96. data/conf/review/design-questionnaire.yml +153 -0
  97. data/conf/review/questionnaire.yml +146 -0
  98. data/conf/review/rosett-ai-core.yml +2919 -0
  99. data/conf/schemas/ai_config_schema.json +73 -0
  100. data/conf/schemas/behaviour_schema.json +132 -0
  101. data/conf/schemas/compliance_rule_schema.json +63 -0
  102. data/conf/schemas/content_pack_manifest_schema.json +51 -0
  103. data/conf/schemas/design_schema.json +210 -0
  104. data/conf/schemas/engine_manifest_schema.json +144 -0
  105. data/conf/schemas/lockfile_schema.json +74 -0
  106. data/conf/schemas/mcp_server_schema.json +48 -0
  107. data/conf/schemas/packaging_schema.json +70 -0
  108. data/conf/schemas/policy_schema.json +85 -0
  109. data/conf/schemas/provenance_schema.json +84 -0
  110. data/conf/schemas/rai_config_schema.json +56 -0
  111. data/conf/schemas/rai_project_schema.json +20 -0
  112. data/conf/schemas/scope_hierarchy_schema.json +49 -0
  113. data/conf/schemas/target_schema.json +67 -0
  114. data/conf/schemas/tooling_schema.json +65 -0
  115. data/conf/schemas/workflow_schema.json +112 -0
  116. data/conf/targets/agents_md.yml +17 -0
  117. data/conf/targets/claude.yml +12 -0
  118. data/conf/tooling/tools.yml +58 -0
  119. data/dist/rosett-ai-mcp.service +48 -0
  120. data/dist/rosett-ai-mcp.yml.default +45 -0
  121. data/doc/AAIF_POSITIONING.md +58 -0
  122. data/doc/ADOPT.md +224 -0
  123. data/doc/AI_PROVENANCE.md +139 -0
  124. data/doc/ARCHITECTURE.md +920 -0
  125. data/doc/BEHAVIOUR.md +409 -0
  126. data/doc/BUILD.md +138 -0
  127. data/doc/CI_CD_RECIPES.md +171 -0
  128. data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
  129. data/doc/COMMAND_ANALYSIS.md +229 -0
  130. data/doc/CONFIGURATION.md +281 -0
  131. data/doc/DESIGN_AUDIT.md +235 -0
  132. data/doc/DESIGN_PEER_REVIEW.md +771 -0
  133. data/doc/DESKTOP.md +447 -0
  134. data/doc/ENGINES.md +567 -0
  135. data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
  136. data/doc/FEATURE_AUDIT.md +218 -0
  137. data/doc/IMPLEMENTATION_PLAN.md +669 -0
  138. data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
  139. data/doc/MIGRATION_GUIDE.md +88 -0
  140. data/doc/PACKAGING.md +232 -0
  141. data/doc/PROJECT_DASHBOARD.md +153 -0
  142. data/doc/PULP_DEPLOYMENT.md +164 -0
  143. data/doc/QUALITY_FIX_SUMMARY.md +110 -0
  144. data/doc/QUICK_START.md +162 -0
  145. data/doc/REEK_CONFIGURATION.md +166 -0
  146. data/doc/REFERENCE.md +253 -0
  147. data/doc/REFERENCES.md +324 -0
  148. data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
  149. data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
  150. data/doc/SETUP.md +202 -0
  151. data/doc/TEST_PEER_REVIEW.md +152 -0
  152. data/doc/THREAT_MODEL.md +230 -0
  153. data/doc/USAGE.md +545 -0
  154. data/doc/USER_MANUAL.md +585 -0
  155. data/doc/ai_test_review_checklist.md +110 -0
  156. data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
  157. data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
  158. data/doc/changes/2026-02-20-security-implementation.md +281 -0
  159. data/doc/changes/2026-02-20-styles-implementation.md +220 -0
  160. data/doc/changes/2026-02-21-architecture-completion.md +95 -0
  161. data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
  162. data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
  163. data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
  164. data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
  165. data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
  166. data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
  167. data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
  168. data/doc/changes/2026-02-21-path-resolver.md +128 -0
  169. data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
  170. data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
  171. data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
  172. data/doc/context/SESSION-HANDOFF.md +69 -0
  173. data/doc/context/ai-engine-usage-trends-2026.md +80 -0
  174. data/doc/context/plan-pluggable-engines.md +590 -0
  175. data/doc/decisions/001-flog-deferred.md +32 -0
  176. data/doc/decisions/002-path-resolution-strategy.md +158 -0
  177. data/doc/decisions/003-ui-adapter-selection.md +193 -0
  178. data/doc/decisions/004-design-document-validation.md +179 -0
  179. data/doc/decisions/005-package-splitting-strategy.md +200 -0
  180. data/doc/decisions/006-multi-engine-architecture.md +147 -0
  181. data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
  182. data/doc/decisions/008-ci-bundler-strategy.md +129 -0
  183. data/doc/decisions/009-core-only-v1-release.md +60 -0
  184. data/doc/decisions/010-engine-debian-packaging.md +66 -0
  185. data/doc/decisions/011-context-aware-cli.md +71 -0
  186. data/doc/dependency_decisions.yml +247 -0
  187. data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
  188. data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
  189. data/doc/issues/003-smoke-test-false-positive.md +127 -0
  190. data/doc/issues/004-market-research-design-updates.md +109 -0
  191. data/doc/issues/005-compile-scope-coexistence.md +161 -0
  192. data/doc/locales/.gitkeep +0 -0
  193. data/doc/man/rai.1.ronn +505 -0
  194. data/doc/operations/packaging.md +133 -0
  195. data/doc/operations/rosett-ai-release.md +65 -0
  196. data/doc/reference/error-catalog.md +107 -0
  197. data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
  198. data/doc/reference/src/Pictures/cover.jpg +0 -0
  199. data/doc/reference/src/Pictures/head1.jpg +0 -0
  200. data/doc/reference/src/Pictures/head2.jpg +0 -0
  201. data/doc/reference/src/Pictures/head3.jpg +0 -0
  202. data/doc/reference/src/Pictures/head4.jpg +0 -0
  203. data/doc/reference/src/Pictures/head5.jpg +0 -0
  204. data/doc/reference/src/Pictures/head6.jpg +0 -0
  205. data/doc/reference/src/Pictures/head7.jpg +0 -0
  206. data/doc/reference/src/Pictures/head8.jpg +0 -0
  207. data/doc/reference/src/StyleInd.ist +4 -0
  208. data/doc/reference/src/bibliography.bib +79 -0
  209. data/doc/reference/src/main.tex +1288 -0
  210. data/doc/reference/src/structure.tex +303 -0
  211. data/doc/rosett-ai-bookmarks.html +301 -0
  212. data/kitchen.yml +46 -0
  213. data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
  214. data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
  215. data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
  216. data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
  217. data/lib/rosett_ai/ai_config/context_window.rb +55 -0
  218. data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
  219. data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
  220. data/lib/rosett_ai/ai_config/model_router.rb +121 -0
  221. data/lib/rosett_ai/ai_config/validator.rb +45 -0
  222. data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
  223. data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
  224. data/lib/rosett_ai/authorship/review_validator.rb +39 -0
  225. data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
  226. data/lib/rosett_ai/backup/compressor.rb +180 -0
  227. data/lib/rosett_ai/backup/destination.rb +91 -0
  228. data/lib/rosett_ai/behaviour/manager.rb +156 -0
  229. data/lib/rosett_ai/compiler/backend.rb +86 -0
  230. data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
  231. data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
  232. data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
  233. data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
  234. data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
  235. data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
  236. data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
  237. data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
  238. data/lib/rosett_ai/compiler/target_profile.rb +112 -0
  239. data/lib/rosett_ai/completion/generator.rb +101 -0
  240. data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
  241. data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
  242. data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
  243. data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
  244. data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
  245. data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
  246. data/lib/rosett_ai/comply/reporter.rb +113 -0
  247. data/lib/rosett_ai/comply/runner.rb +50 -0
  248. data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
  249. data/lib/rosett_ai/composition/composer.rb +158 -0
  250. data/lib/rosett_ai/composition/composition_result.rb +64 -0
  251. data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
  252. data/lib/rosett_ai/composition/lockfile.rb +103 -0
  253. data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
  254. data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
  255. data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
  256. data/lib/rosett_ai/config/compile_result.rb +37 -0
  257. data/lib/rosett_ai/config/compiler.rb +13 -0
  258. data/lib/rosett_ai/config/domain_transformer.rb +13 -0
  259. data/lib/rosett_ai/config/key_map.rb +13 -0
  260. data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
  261. data/lib/rosett_ai/config/scope_router.rb +13 -0
  262. data/lib/rosett_ai/config/secret_resolver.rb +125 -0
  263. data/lib/rosett_ai/configuration.rb +119 -0
  264. data/lib/rosett_ai/content/content_client.rb +60 -0
  265. data/lib/rosett_ai/content/pack_installer.rb +117 -0
  266. data/lib/rosett_ai/content/pack_manifest.rb +50 -0
  267. data/lib/rosett_ai/content/pack_registry.rb +68 -0
  268. data/lib/rosett_ai/content_packs/manager.rb +50 -0
  269. data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
  270. data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
  271. data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
  272. data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
  273. data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
  274. data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
  275. data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
  276. data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
  277. data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
  278. data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
  279. data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
  280. data/lib/rosett_ai/dbus/service.rb +121 -0
  281. data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
  282. data/lib/rosett_ai/deprecation.rb +79 -0
  283. data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
  284. data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
  285. data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
  286. data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
  287. data/lib/rosett_ai/doctor/check.rb +92 -0
  288. data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
  289. data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
  290. data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
  291. data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
  292. data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
  293. data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
  294. data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
  295. data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
  296. data/lib/rosett_ai/doctor.rb +81 -0
  297. data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
  298. data/lib/rosett_ai/documentation/translator.rb +62 -0
  299. data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
  300. data/lib/rosett_ai/engines/detector.rb +63 -0
  301. data/lib/rosett_ai/engines/registry.rb +50 -0
  302. data/lib/rosett_ai/error_handler.rb +139 -0
  303. data/lib/rosett_ai/exit_codes.rb +76 -0
  304. data/lib/rosett_ai/feature_flags.rb +102 -0
  305. data/lib/rosett_ai/formatting.rb +33 -0
  306. data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
  307. data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
  308. data/lib/rosett_ai/git_hooks/installer.rb +175 -0
  309. data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
  310. data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
  311. data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
  312. data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
  313. data/lib/rosett_ai/init/config_file_writer.rb +24 -0
  314. data/lib/rosett_ai/init/directory_builder.rb +38 -0
  315. data/lib/rosett_ai/init/file_copier.rb +95 -0
  316. data/lib/rosett_ai/init/global_initializer.rb +28 -0
  317. data/lib/rosett_ai/init/local_initializer.rb +27 -0
  318. data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
  319. data/lib/rosett_ai/init/project_initializer.rb +38 -0
  320. data/lib/rosett_ai/licensing/license_key.rb +139 -0
  321. data/lib/rosett_ai/licensing/license_store.rb +64 -0
  322. data/lib/rosett_ai/licensing/license_validator.rb +60 -0
  323. data/lib/rosett_ai/licensing/tier.rb +42 -0
  324. data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
  325. data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
  326. data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
  327. data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
  328. data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
  329. data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
  330. data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
  331. data/lib/rosett_ai/mcp/governance.rb +160 -0
  332. data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
  333. data/lib/rosett_ai/mcp/instructions.rb +266 -0
  334. data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
  335. data/lib/rosett_ai/mcp/keyfile.rb +221 -0
  336. data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
  337. data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
  338. data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
  339. data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
  340. data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
  341. data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
  342. data/lib/rosett_ai/mcp/plugins.rb +143 -0
  343. data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
  344. data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
  345. data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
  346. data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
  347. data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
  348. data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
  349. data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
  350. data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
  351. data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
  352. data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
  353. data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
  354. data/lib/rosett_ai/mcp/response_helper.rb +46 -0
  355. data/lib/rosett_ai/mcp/security_logger.rb +60 -0
  356. data/lib/rosett_ai/mcp/server.rb +212 -0
  357. data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
  358. data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
  359. data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
  360. data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
  361. data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
  362. data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
  363. data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
  364. data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
  365. data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
  366. data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
  367. data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
  368. data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
  369. data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
  370. data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
  371. data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
  372. data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
  373. data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
  374. data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
  375. data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
  376. data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
  377. data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
  378. data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
  379. data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
  380. data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
  381. data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
  382. data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
  383. data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
  384. data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
  385. data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
  386. data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
  387. data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
  388. data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
  389. data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
  390. data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
  391. data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
  392. data/lib/rosett_ai/migration/detector.rb +117 -0
  393. data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
  394. data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
  395. data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
  396. data/lib/rosett_ai/package_manager/apt.rb +108 -0
  397. data/lib/rosett_ai/package_manager/base.rb +68 -0
  398. data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
  399. data/lib/rosett_ai/packaging/variant_config.rb +92 -0
  400. data/lib/rosett_ai/path_resolver.rb +115 -0
  401. data/lib/rosett_ai/plugins/contract.rb +43 -0
  402. data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
  403. data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
  404. data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
  405. data/lib/rosett_ai/plugins/registry.rb +150 -0
  406. data/lib/rosett_ai/policy/auditor.rb +41 -0
  407. data/lib/rosett_ai/policy/deny_list.rb +71 -0
  408. data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
  409. data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
  410. data/lib/rosett_ai/policy/protected_files.rb +47 -0
  411. data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
  412. data/lib/rosett_ai/policy/validator.rb +35 -0
  413. data/lib/rosett_ai/profiler.rb +79 -0
  414. data/lib/rosett_ai/project/drift_detector.rb +126 -0
  415. data/lib/rosett_ai/project/manager.rb +115 -0
  416. data/lib/rosett_ai/project/sync_manager.rb +138 -0
  417. data/lib/rosett_ai/project/template_applier.rb +105 -0
  418. data/lib/rosett_ai/project_context.rb +82 -0
  419. data/lib/rosett_ai/provenance/entry.rb +63 -0
  420. data/lib/rosett_ai/provenance/file_source.rb +32 -0
  421. data/lib/rosett_ai/provenance/source.rb +62 -0
  422. data/lib/rosett_ai/provenance/store.rb +153 -0
  423. data/lib/rosett_ai/provenance/tracker.rb +62 -0
  424. data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
  425. data/lib/rosett_ai/provenance/validator.rb +45 -0
  426. data/lib/rosett_ai/quorum/collector.rb +59 -0
  427. data/lib/rosett_ai/quorum/comparator.rb +81 -0
  428. data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
  429. data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
  430. data/lib/rosett_ai/rai_config.rb +107 -0
  431. data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
  432. data/lib/rosett_ai/retrofit/engine.rb +171 -0
  433. data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
  434. data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
  435. data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
  436. data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
  437. data/lib/rosett_ai/retrofit/scanner.rb +47 -0
  438. data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
  439. data/lib/rosett_ai/secrets_resolver.rb +71 -0
  440. data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
  441. data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
  442. data/lib/rosett_ai/structured_logger.rb +110 -0
  443. data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
  444. data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
  445. data/lib/rosett_ai/telemetry/provider.rb +26 -0
  446. data/lib/rosett_ai/telemetry/reporter.rb +144 -0
  447. data/lib/rosett_ai/telemetry.rb +47 -0
  448. data/lib/rosett_ai/text_sanitizer.rb +62 -0
  449. data/lib/rosett_ai/thor/cli.rb +269 -0
  450. data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
  451. data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
  452. data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
  453. data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
  454. data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
  455. data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
  456. data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
  457. data/lib/rosett_ai/thor/tasks/config.rb +265 -0
  458. data/lib/rosett_ai/thor/tasks/content.rb +193 -0
  459. data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
  460. data/lib/rosett_ai/thor/tasks/design.rb +258 -0
  461. data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
  462. data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
  463. data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
  464. data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
  465. data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
  466. data/lib/rosett_ai/thor/tasks/init.rb +259 -0
  467. data/lib/rosett_ai/thor/tasks/license.rb +120 -0
  468. data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
  469. data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
  470. data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
  471. data/lib/rosett_ai/thor/tasks/project.rb +260 -0
  472. data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
  473. data/lib/rosett_ai/thor/tasks/release.rb +314 -0
  474. data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
  475. data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
  476. data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
  477. data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
  478. data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
  479. data/lib/rosett_ai/tooling/version_checker.rb +35 -0
  480. data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
  481. data/lib/rosett_ai/ui/base.rb +46 -0
  482. data/lib/rosett_ai/ui/gtk4.rb +98 -0
  483. data/lib/rosett_ai/ui/kde.rb +40 -0
  484. data/lib/rosett_ai/ui/qt6.rb +40 -0
  485. data/lib/rosett_ai/ui/registry.rb +60 -0
  486. data/lib/rosett_ai/ui/tty_helper.rb +74 -0
  487. data/lib/rosett_ai/ui/tui.rb +59 -0
  488. data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
  489. data/lib/rosett_ai/validators/design_validator.rb +17 -0
  490. data/lib/rosett_ai/validators/schema_validator.rb +84 -0
  491. data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
  492. data/lib/rosett_ai/version.rb +8 -0
  493. data/lib/rosett_ai/version_consistency_checker.rb +129 -0
  494. data/lib/rosett_ai/workflow/audit_log.rb +86 -0
  495. data/lib/rosett_ai/workflow/engine.rb +142 -0
  496. data/lib/rosett_ai/workflow/manager.rb +82 -0
  497. data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
  498. data/lib/rosett_ai/workflow/step_runner.rb +61 -0
  499. data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
  500. data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
  501. data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
  502. data/lib/rosett_ai/yaml_loader.rb +78 -0
  503. data/lib/rosett_ai.rb +221 -0
  504. data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
  505. data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
  506. data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
  507. data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
  508. data/lib/rubocop/rosett_ai.rb +9 -0
  509. data/lib/scripts/generated/docker_hub_tags.rb +126 -0
  510. data/locales/.gitkeep +0 -0
  511. data/locales/ar.yml +579 -0
  512. data/locales/en.yml +571 -0
  513. data/locales/fr.yml +567 -0
  514. data/packaging/build-engine-deb.sh +81 -0
  515. data/packaging/scripts/postinst +17 -0
  516. data/packaging/scripts/postrm +19 -0
  517. data/packaging/scripts/prerm +10 -0
  518. data/packaging/wrapper.sh.template +38 -0
  519. data/rosett-ai.gemspec +63 -0
  520. data/rules/.gitkeep +0 -0
  521. data/scripts/publish/pulp_upload.sh +123 -0
  522. data/settings.json +29 -0
  523. data/share/applications/be.neatnerds.rosettai.desktop +29 -0
  524. data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
  525. data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
  526. data/share/templates/behaviour/criticalthinking.yml +69 -0
  527. metadata +810 -0
@@ -0,0 +1,857 @@
1
+ ---
2
+ repository: rosett-ai
3
+ audit_type: cli_commands
4
+ created: "2026-03-23"
5
+ completed: "2026-03-23"
6
+ total_command_groups: 28
7
+ audited: 28
8
+ signed_off: 28
9
+
10
+ # Questionnaire (10 questions per command group)
11
+ #
12
+ # Q1 Behavior: Does the command do what it says?
13
+ # Q2 Path awareness: Correct directory context?
14
+ # Q3 Help text: Meaningful desc + long_desc with examples?
15
+ # Q4 Error handling: Correct exit codes, meaningful messages?
16
+ # Q5 Options: Each flag tested and working?
17
+ # Q6 Output: Consistent format, JSON option where appropriate?
18
+ # Q7 i18n: All strings in locale files?
19
+ # Q8 Tests: Unit + integration coverage?
20
+ # Q9 Man page: Documented and accurate?
21
+ # Q10 Accessibility: --accessible mode works?
22
+ #
23
+ # Answer values: pass | concern | fail
24
+ # Status values: pending | in_review | needs_fix | approved | approved_with_notes
25
+ # Finding status values: pending | fixed | accepted
26
+
27
+ # ─────────────────────────────────────────────────
28
+ # Cross-cutting finding: Q10 accessibility
29
+ #
30
+ # The --accessible class_option is defined in lib/rosett_ai/thor/cli.rb:33
31
+ # but options[:accessible] is NEVER checked by any task class.
32
+ # RosettAi::Ui::AccessibleTui exists and is registered, but is only
33
+ # activated via environment detection (ORCA_RUNNING, BRLTTY_TTY),
34
+ # not via the CLI flag. This affects 24 of 28 command groups.
35
+ # The 4 exceptions (completion, version, provenance, backup) produce
36
+ # plain text or already use TTY-aware output.
37
+ #
38
+ # Status: ACCEPTED — tracked for accessibility milestone (post-v1.0.0).
39
+ # The flag is defined and AccessibleTui is implemented; wiring the
40
+ # flag into task classes is a feature enhancement, not a bug.
41
+ # ─────────────────────────────────────────────────
42
+
43
+ # ─────────────────────────────────────────────────
44
+ # Phases completed:
45
+ # Phase 1 (a42a012): Structural fixes — execute→semantic verbs, tree, Dir.pwd
46
+ # Phase 2 (c9bcb8a): Audit registry — Q1-Q10 for all 28 commands
47
+ # Phase 3 (392356f): Test gap remediation — 8 InSpec controls, path awareness tests
48
+ # Phase 4 (d95428b): Help text overhaul — verb-first desc, long_desc with EXAMPLES
49
+ # Phase 5 (this): Sign-off — finding resolution, status flip
50
+ # ─────────────────────────────────────────────────
51
+
52
+ command_groups:
53
+ adopt:
54
+ file: lib/rosett_ai/thor/tasks/adopt.rb
55
+ spec: spec/rosett_ai/thor/tasks/adopt_spec.rb
56
+ integration: test/integration/rai_commands/controls/adopt.rb
57
+ status: approved_with_notes
58
+ notes: "Q10 accepted — accessibility wiring deferred to post-v1.0.0"
59
+ answers:
60
+ Q1_behavior: pass
61
+ Q2_path_awareness: pass
62
+ Q3_help_text: pass
63
+ Q4_error_handling: pass
64
+ Q5_options: pass
65
+ Q6_output: pass
66
+ Q7_i18n: pass
67
+ Q8_tests: pass
68
+ Q9_man_page: pass
69
+ Q10_accessibility: fail
70
+ findings:
71
+ - severity: high
72
+ question: Q10
73
+ description: "Color-only severity (critical=red bright, high=red, medium=yellow, low=cyan). --accessible flag ignored."
74
+ resolution: "Check options[:accessible] and spell out severity in column text. Use plain text status labels."
75
+ status: accepted
76
+
77
+ backup:
78
+ file: lib/rosett_ai/thor/tasks/backup.rb
79
+ spec: spec/rosett_ai/thor/tasks/backup_spec.rb
80
+ integration: test/integration/rai_commands/controls/backup.rb
81
+ status: approved
82
+ answers:
83
+ Q1_behavior: pass
84
+ Q2_path_awareness: pass
85
+ Q3_help_text: pass
86
+ Q4_error_handling: pass
87
+ Q5_options: pass
88
+ Q6_output: pass
89
+ Q7_i18n: pass
90
+ Q8_tests: pass
91
+ Q9_man_page: pass
92
+ Q10_accessibility: concern
93
+ findings:
94
+ - severity: minor
95
+ question: Q10
96
+ description: "TTY::Spinner correctly gated by TtyHelper.interactive? but no explicit --accessible mode."
97
+ resolution: "Add plain text output when TtyHelper.accessible? is true. Already better than other commands."
98
+ status: accepted
99
+
100
+ behaviour:
101
+ file: lib/rosett_ai/thor/tasks/behaviour.rb
102
+ spec: spec/rosett_ai/thor/tasks/behaviour_spec.rb
103
+ additional_specs:
104
+ - spec/rosett_ai/thor/tasks/behaviour_manage_spec.rb
105
+ integration: test/integration/rai_commands/controls/behaviour.rb
106
+ status: approved_with_notes
107
+ notes: "Q3 fixed in Phase 4. Q10 accepted — accessibility wiring deferred."
108
+ answers:
109
+ Q1_behavior: pass
110
+ Q2_path_awareness: pass
111
+ Q3_help_text: pass
112
+ Q4_error_handling: pass
113
+ Q5_options: pass
114
+ Q6_output: pass
115
+ Q7_i18n: pass
116
+ Q8_tests: pass
117
+ Q9_man_page: pass
118
+ Q10_accessibility: fail
119
+ findings:
120
+ - severity: medium
121
+ question: Q3
122
+ description: "behaviour subcommands (display, list, show, validate) lack long_desc with examples."
123
+ resolution: "Add long_desc to each subcommand showing example usage and flag documentation."
124
+ status: fixed
125
+ - severity: high
126
+ question: Q10
127
+ description: "No --accessible mode. Color-only status indicators (red/green/yellow)."
128
+ resolution: "Check options[:accessible] and use plain text status labels."
129
+ status: accepted
130
+
131
+ build:
132
+ file: lib/rosett_ai/thor/tasks/build.rb
133
+ spec: spec/rosett_ai/thor/tasks/build_spec.rb
134
+ additional_specs:
135
+ - spec/rosett_ai/thor/tasks/build_package_spec.rb
136
+ - spec/rosett_ai/thor/tasks/build_engine_spec.rb
137
+ integration: test/integration/rai_commands/controls/build.rb
138
+ status: approved_with_notes
139
+ notes: "Q8 fixed in Phase 3 (InSpec). Q7 and Q10 accepted — deferred to i18n and accessibility milestones."
140
+ answers:
141
+ Q1_behavior: pass
142
+ Q2_path_awareness: pass
143
+ Q3_help_text: pass
144
+ Q4_error_handling: pass
145
+ Q5_options: pass
146
+ Q6_output: pass
147
+ Q7_i18n: concern
148
+ Q8_tests: pass
149
+ Q9_man_page: pass
150
+ Q10_accessibility: fail
151
+ findings:
152
+ - severity: medium
153
+ question: Q7
154
+ description: "Most user-facing strings hardcoded English. Only 3 i18n keys exist."
155
+ resolution: "Extract all strings to locales/en.yml under rosett_ai.cli.build and rosett_ai.cli.build_engine."
156
+ status: accepted
157
+ - severity: medium
158
+ question: Q8
159
+ description: "No InSpec integration tests. Unit coverage thorough but e2e missing."
160
+ resolution: "Add test/integration/rai_commands/controls/build.rb with smoke tests."
161
+ status: fixed
162
+ - severity: high
163
+ question: Q10
164
+ description: "No --accessible mode. Color-only status, animated spinners, no screen reader support."
165
+ resolution: "Check TtyHelper.accessible? before Rainbow/TTY::Spinner."
166
+ status: accepted
167
+
168
+ compile:
169
+ file: lib/rosett_ai/thor/tasks/compile.rb
170
+ spec: spec/rosett_ai/thor/tasks/compile_spec.rb
171
+ integration: test/integration/rai_commands/controls/compile.rb
172
+ status: approved_with_notes
173
+ notes: "Q10 accepted — accessibility wiring deferred."
174
+ answers:
175
+ Q1_behavior: pass
176
+ Q2_path_awareness: pass
177
+ Q3_help_text: pass
178
+ Q4_error_handling: pass
179
+ Q5_options: pass
180
+ Q6_output: pass
181
+ Q7_i18n: pass
182
+ Q8_tests: pass
183
+ Q9_man_page: pass
184
+ Q10_accessibility: fail
185
+ findings:
186
+ - severity: medium
187
+ question: Q10
188
+ description: "Rainbow coloring throughout (lines 83, 120, 169, etc.) without checking --accessible flag."
189
+ resolution: "Check options[:accessible] or query RosettAi::Ui::Registry adapter. Conditionally disable Rainbow."
190
+ status: accepted
191
+
192
+ completion:
193
+ file: lib/rosett_ai/thor/tasks/completion.rb
194
+ spec: spec/rosett_ai/thor/tasks/completion_spec.rb
195
+ integration: test/integration/rai_commands/controls/completion.rb
196
+ status: approved_with_notes
197
+ notes: "Q7 accepted — error message i18n deferred."
198
+ answers:
199
+ Q1_behavior: pass
200
+ Q2_path_awareness: pass
201
+ Q3_help_text: pass
202
+ Q4_error_handling: pass
203
+ Q5_options: pass
204
+ Q6_output: pass
205
+ Q7_i18n: concern
206
+ Q8_tests: pass
207
+ Q9_man_page: pass
208
+ Q10_accessibility: pass
209
+ findings:
210
+ - severity: minor
211
+ question: Q7
212
+ description: "Only install success message uses i18n. Error messages hardcoded in English."
213
+ resolution: "Extract error messages to locales/en.yml under rosett_ai.cli.completion."
214
+ status: accepted
215
+
216
+ comply:
217
+ file: lib/rosett_ai/thor/tasks/comply.rb
218
+ spec: spec/rosett_ai/thor/tasks/comply_spec.rb
219
+ integration: test/integration/rai_commands/controls/comply.rb
220
+ status: approved_with_notes
221
+ notes: "Q7 and Q10 accepted — deferred to i18n and accessibility milestones."
222
+ answers:
223
+ Q1_behavior: pass
224
+ Q2_path_awareness: pass
225
+ Q3_help_text: pass
226
+ Q4_error_handling: pass
227
+ Q5_options: pass
228
+ Q6_output: pass
229
+ Q7_i18n: concern
230
+ Q8_tests: pass
231
+ Q9_man_page: pass
232
+ Q10_accessibility: concern
233
+ findings:
234
+ - severity: minor
235
+ question: Q7
236
+ description: "i18n keys at rosett_ai.comply.* instead of Rosett-AI.cli.comply. Only 7 keys; check messages may be hardcoded."
237
+ resolution: "Audit Reporter/Runner for hardcoded strings. Move all keys to rosett_ai.cli.comply."
238
+ status: accepted
239
+ - severity: medium
240
+ question: Q10
241
+ description: "No explicit --accessible handling. JSON format good but no plain text alternative."
242
+ resolution: "Add --format=plain for screen readers. Check TtyHelper.accessible? in Reporter."
243
+ status: accepted
244
+
245
+ config:
246
+ file: lib/rosett_ai/thor/tasks/config.rb
247
+ spec: spec/rosett_ai/thor/tasks/config_spec.rb
248
+ integration: test/integration/rai_commands/controls/config_cmd.rb
249
+ status: approved_with_notes
250
+ notes: "Q10 accepted — accessibility wiring deferred."
251
+ answers:
252
+ Q1_behavior: pass
253
+ Q2_path_awareness: pass
254
+ Q3_help_text: pass
255
+ Q4_error_handling: pass
256
+ Q5_options: pass
257
+ Q6_output: pass
258
+ Q7_i18n: pass
259
+ Q8_tests: pass
260
+ Q9_man_page: pass
261
+ Q10_accessibility: fail
262
+ findings:
263
+ - severity: high
264
+ question: Q10
265
+ description: "Color (green/yellow/red/cyan) and Unicode symbols (checkmark/cross/dash) only. No --accessible mode."
266
+ resolution: "Check options[:accessible]. Spell out action names ('Created', 'Updated')."
267
+ status: accepted
268
+
269
+ content:
270
+ file: lib/rosett_ai/thor/tasks/content.rb
271
+ spec: spec/rosett_ai/thor/tasks/content_spec.rb
272
+ integration: test/integration/rai_commands/controls/content.rb
273
+ status: approved_with_notes
274
+ notes: "Q8 fixed in Phase 3 (InSpec). Q10 accepted — accessibility wiring deferred."
275
+ answers:
276
+ Q1_behavior: pass
277
+ Q2_path_awareness: pass
278
+ Q3_help_text: pass
279
+ Q4_error_handling: pass
280
+ Q5_options: pass
281
+ Q6_output: pass
282
+ Q7_i18n: pass
283
+ Q8_tests: pass
284
+ Q9_man_page: pass
285
+ Q10_accessibility: fail
286
+ findings:
287
+ - severity: medium
288
+ question: Q8
289
+ description: "No InSpec integration tests (premium features may need special setup)."
290
+ resolution: "Add test/integration/rai_commands/controls/content.rb with smoke tests."
291
+ status: fixed
292
+ - severity: high
293
+ question: Q10
294
+ description: "Rainbow colors without accessible alternative."
295
+ resolution: "Check options[:accessible] before coloring. Add --format=plain."
296
+ status: accepted
297
+
298
+ dbus:
299
+ file: lib/rosett_ai/thor/tasks/dbus.rb
300
+ spec: spec/rosett_ai/thor/tasks/dbus_spec.rb
301
+ integration: test/integration/rai_commands/controls/dbus.rb
302
+ status: approved_with_notes
303
+ notes: "Q8 fixed in Phase 3 (InSpec). Q10 accepted — accessibility wiring deferred."
304
+ answers:
305
+ Q1_behavior: pass
306
+ Q2_path_awareness: pass
307
+ Q3_help_text: pass
308
+ Q4_error_handling: pass
309
+ Q5_options: pass
310
+ Q6_output: pass
311
+ Q7_i18n: pass
312
+ Q8_tests: pass
313
+ Q9_man_page: pass
314
+ Q10_accessibility: concern
315
+ findings:
316
+ - severity: medium
317
+ question: Q8
318
+ description: "No InSpec integration test. Only RSpec unit tests."
319
+ resolution: "Add test/integration/rai_commands/controls/dbus.rb."
320
+ status: fixed
321
+ - severity: medium
322
+ question: Q10
323
+ description: "TTY color output (green/yellow/red) without --accessible override."
324
+ resolution: "Check options[:accessible] before Rainbow. Add plain text status labels."
325
+ status: accepted
326
+
327
+ design:
328
+ file: lib/rosett_ai/thor/tasks/design.rb
329
+ spec: spec/rosett_ai/thor/tasks/design_spec.rb
330
+ integration: test/integration/rai_commands/controls/design.rb
331
+ status: approved_with_notes
332
+ notes: "Q10 accepted — accessibility wiring deferred."
333
+ answers:
334
+ Q1_behavior: pass
335
+ Q2_path_awareness: pass
336
+ Q3_help_text: pass
337
+ Q4_error_handling: pass
338
+ Q5_options: pass
339
+ Q6_output: pass
340
+ Q7_i18n: pass
341
+ Q8_tests: pass
342
+ Q9_man_page: pass
343
+ Q10_accessibility: fail
344
+ findings:
345
+ - severity: high
346
+ question: Q10
347
+ description: "Color-only status (approved=green, draft=yellow). No --accessible mode."
348
+ resolution: "Check options[:accessible] and use plain text status labels."
349
+ status: accepted
350
+
351
+ desktop:
352
+ file: lib/rosett_ai/thor/tasks/desktop.rb
353
+ spec: spec/rosett_ai/thor/tasks/desktop_spec.rb
354
+ integration: test/integration/rai_commands/controls/desktop.rb
355
+ status: approved_with_notes
356
+ notes: "Q8 fixed in Phase 3 (InSpec). Q10 accepted — accessibility wiring deferred."
357
+ answers:
358
+ Q1_behavior: pass
359
+ Q2_path_awareness: pass
360
+ Q3_help_text: pass
361
+ Q4_error_handling: pass
362
+ Q5_options: pass
363
+ Q6_output: pass
364
+ Q7_i18n: pass
365
+ Q8_tests: pass
366
+ Q9_man_page: pass
367
+ Q10_accessibility: concern
368
+ findings:
369
+ - severity: medium
370
+ question: Q8
371
+ description: "No InSpec integration test. Only RSpec unit tests."
372
+ resolution: "Add test/integration/rai_commands/controls/desktop.rb."
373
+ status: fixed
374
+ - severity: medium
375
+ question: Q10
376
+ description: "TTY color output (green/yellow) without --accessible override."
377
+ resolution: "Check options[:accessible] before Rainbow."
378
+ status: accepted
379
+
380
+ doctor:
381
+ file: lib/rosett_ai/thor/tasks/doctor.rb
382
+ spec: spec/rosett_ai/thor/tasks/doctor_spec.rb
383
+ integration: test/integration/rai_commands/controls/doctor.rb
384
+ status: approved_with_notes
385
+ notes: "Q10 accepted — accessibility wiring deferred."
386
+ answers:
387
+ Q1_behavior: pass
388
+ Q2_path_awareness: pass
389
+ Q3_help_text: pass
390
+ Q4_error_handling: pass
391
+ Q5_options: pass
392
+ Q6_output: pass
393
+ Q7_i18n: pass
394
+ Q8_tests: pass
395
+ Q9_man_page: pass
396
+ Q10_accessibility: fail
397
+ findings:
398
+ - severity: medium
399
+ question: Q10
400
+ description: "Rainbow for status colors. Terminal::Table with box-drawing chars. No --accessible mode."
401
+ resolution: "Check options[:accessible]. Use RosettAi::Ui::AccessibleTui.display_table when set."
402
+ status: accepted
403
+
404
+ documentation:
405
+ file: lib/rosett_ai/thor/tasks/documentation.rb
406
+ spec: spec/rosett_ai/thor/tasks/documentation_spec.rb
407
+ integration: test/integration/rai_commands/controls/documentation.rb
408
+ status: approved_with_notes
409
+ notes: "Q8 fixed in Phase 3 (InSpec). Q1/Q4/Q10 accepted — stub implementation and accessibility deferred."
410
+ answers:
411
+ Q1_behavior: concern
412
+ Q2_path_awareness: pass
413
+ Q3_help_text: pass
414
+ Q4_error_handling: concern
415
+ Q5_options: pass
416
+ Q6_output: concern
417
+ Q7_i18n: pass
418
+ Q8_tests: pass
419
+ Q9_man_page: pass
420
+ Q10_accessibility: fail
421
+ findings:
422
+ - severity: medium
423
+ question: Q1
424
+ description: "apply_changes stubs only print messages, do not actually modify files."
425
+ resolution: "Implement actual file modification or document as future work."
426
+ status: accepted
427
+ - severity: medium
428
+ question: Q4
429
+ description: "No explicit Thor::Error raises for validation failures. translate continues on missing file."
430
+ resolution: "Add proper exit codes and Thor::Error for failures."
431
+ status: accepted
432
+ - severity: medium
433
+ question: Q8
434
+ description: "No InSpec integration tests. Only RSpec unit tests."
435
+ resolution: "Add test/integration/rai_commands/controls/documentation.rb."
436
+ status: fixed
437
+ - severity: high
438
+ question: Q10
439
+ description: "Hardcoded Paint/Rainbow calls. TTY::Spinner with Unicode. Does not check --accessible."
440
+ resolution: "Check options[:accessible] before Paint/Rainbow/TTY::Spinner."
441
+ status: accepted
442
+
443
+ engines:
444
+ file: lib/rosett_ai/thor/tasks/engines.rb
445
+ spec: spec/rosett_ai/thor/tasks/engines_spec.rb
446
+ integration: test/integration/rai_commands/controls/engines.rb
447
+ status: approved_with_notes
448
+ notes: "Q8 minor gap accepted. Q10 accepted — accessibility wiring deferred."
449
+ answers:
450
+ Q1_behavior: pass
451
+ Q2_path_awareness: pass
452
+ Q3_help_text: pass
453
+ Q4_error_handling: pass
454
+ Q5_options: pass
455
+ Q6_output: pass
456
+ Q7_i18n: pass
457
+ Q8_tests: concern
458
+ Q9_man_page: pass
459
+ Q10_accessibility: fail
460
+ findings:
461
+ - severity: minor
462
+ question: Q8
463
+ description: "Missing test coverage for 'engines plugins' subcommand."
464
+ resolution: "Add RSpec and InSpec tests for 'engines plugins' subcommand."
465
+ status: accepted
466
+ - severity: high
467
+ question: Q10
468
+ description: "Rainbow colors without fallback. No --accessible mode."
469
+ resolution: "Check options[:accessible] before Rainbow."
470
+ status: accepted
471
+
472
+ hooks:
473
+ file: lib/rosett_ai/thor/tasks/hooks.rb
474
+ spec: spec/rosett_ai/thor/tasks/hooks_spec.rb
475
+ integration: test/integration/rai_commands/controls/hooks.rb
476
+ status: approved_with_notes
477
+ notes: "Q10 accepted — accessibility wiring deferred."
478
+ answers:
479
+ Q1_behavior: pass
480
+ Q2_path_awareness: pass
481
+ Q3_help_text: pass
482
+ Q4_error_handling: pass
483
+ Q5_options: pass
484
+ Q6_output: pass
485
+ Q7_i18n: pass
486
+ Q8_tests: pass
487
+ Q9_man_page: pass
488
+ Q10_accessibility: concern
489
+ findings:
490
+ - severity: medium
491
+ question: Q10
492
+ description: "Table output uses color (green/yellow/red/cyan) without --accessible override."
493
+ resolution: "Check options[:accessible] before Rainbow."
494
+ status: accepted
495
+
496
+ init:
497
+ file: lib/rosett_ai/thor/tasks/init.rb
498
+ spec: spec/rosett_ai/thor/tasks/init_spec.rb
499
+ integration: test/integration/rai_commands/controls/init.rb
500
+ status: approved_with_notes
501
+ notes: "Q10 accepted — accessibility wiring deferred."
502
+ answers:
503
+ Q1_behavior: pass
504
+ Q2_path_awareness: pass
505
+ Q3_help_text: pass
506
+ Q4_error_handling: pass
507
+ Q5_options: pass
508
+ Q6_output: pass
509
+ Q7_i18n: pass
510
+ Q8_tests: pass
511
+ Q9_man_page: pass
512
+ Q10_accessibility: fail
513
+ findings:
514
+ - severity: medium
515
+ question: Q10
516
+ description: "Rainbow + TTY::Spinner without checking --accessible. TtyHelper.interactive? helps but doesn't address the flag."
517
+ resolution: "Check options[:accessible] before using Rainbow. Replace spinners with plain messages when set."
518
+ status: accepted
519
+
520
+ license:
521
+ file: lib/rosett_ai/thor/tasks/license.rb
522
+ spec: spec/rosett_ai/thor/tasks/license_spec.rb
523
+ integration: test/integration/rai_commands/controls/license.rb
524
+ status: approved_with_notes
525
+ notes: "Q8 fixed in Phase 3 (InSpec). Q10 accepted — accessibility wiring deferred."
526
+ answers:
527
+ Q1_behavior: pass
528
+ Q2_path_awareness: pass
529
+ Q3_help_text: pass
530
+ Q4_error_handling: pass
531
+ Q5_options: pass
532
+ Q6_output: pass
533
+ Q7_i18n: pass
534
+ Q8_tests: pass
535
+ Q9_man_page: pass
536
+ Q10_accessibility: fail
537
+ findings:
538
+ - severity: medium
539
+ question: Q8
540
+ description: "No InSpec integration tests."
541
+ resolution: "Add test/integration/rai_commands/controls/license.rb."
542
+ status: fixed
543
+ - severity: medium
544
+ question: Q10
545
+ description: "Rainbow colors (yellow/green/red) without --accessible mode."
546
+ resolution: "Check options[:accessible] before Rainbow."
547
+ status: accepted
548
+
549
+ mcp:
550
+ file: lib/rosett_ai/thor/tasks/mcp.rb
551
+ spec: spec/rosett_ai/thor/tasks/mcp_spec.rb
552
+ integration: test/integration/rai_commands/controls/mcp.rb
553
+ status: approved_with_notes
554
+ notes: "Q7/Q8/Q10 accepted — i18n, test depth, and accessibility deferred."
555
+ answers:
556
+ Q1_behavior: pass
557
+ Q2_path_awareness: pass
558
+ Q3_help_text: pass
559
+ Q4_error_handling: pass
560
+ Q5_options: pass
561
+ Q6_output: pass
562
+ Q7_i18n: concern
563
+ Q8_tests: concern
564
+ Q9_man_page: pass
565
+ Q10_accessibility: concern
566
+ findings:
567
+ - severity: high
568
+ question: Q7
569
+ description: "Only 3 i18n keys. Many hardcoded strings (trust messages, table headings, validation output)."
570
+ resolution: "Extract all user-visible strings to locales/en.yml under rosett_ai.cli.mcp."
571
+ status: accepted
572
+ - severity: high
573
+ question: Q8
574
+ description: "Minimal RSpec coverage (3 tests for 9 subcommands). No tests for add/remove/trust-*/audit/serve."
575
+ resolution: "Add comprehensive RSpec tests for all 9 mcp subcommands."
576
+ status: accepted
577
+ - severity: medium
578
+ question: Q10
579
+ description: "Table output uses color without --accessible override."
580
+ resolution: "Check options[:accessible] before Rainbow."
581
+ status: accepted
582
+
583
+ plugins:
584
+ file: lib/rosett_ai/thor/tasks/plugins.rb
585
+ spec: spec/rosett_ai/thor/tasks/plugins_spec.rb
586
+ integration: test/integration/rai_commands/controls/plugins.rb
587
+ status: approved_with_notes
588
+ notes: "Q4/Q10 accepted — error handling style and accessibility deferred."
589
+ answers:
590
+ Q1_behavior: pass
591
+ Q2_path_awareness: pass
592
+ Q3_help_text: pass
593
+ Q4_error_handling: concern
594
+ Q5_options: pass
595
+ Q6_output: pass
596
+ Q7_i18n: pass
597
+ Q8_tests: pass
598
+ Q9_man_page: pass
599
+ Q10_accessibility: fail
600
+ findings:
601
+ - severity: medium
602
+ question: Q4
603
+ description: "install/remove use 'exit 1' instead of raising Thor::Error (inconsistent with other commands)."
604
+ resolution: "Replace 'exit 1' with 'raise ::Thor::Error' for consistent error handling."
605
+ status: accepted
606
+ - severity: high
607
+ question: Q10
608
+ description: "Rainbow colors without fallback. --accessible flag not used."
609
+ resolution: "Check options[:accessible] before Rainbow."
610
+ status: accepted
611
+
612
+ project:
613
+ file: lib/rosett_ai/thor/tasks/project.rb
614
+ spec: spec/rosett_ai/thor/tasks/project_spec.rb
615
+ integration: test/integration/rai_commands/controls/project.rb
616
+ status: approved_with_notes
617
+ notes: "Q1/Q8/Q10 accepted — behavioral test depth and accessibility deferred."
618
+ answers:
619
+ Q1_behavior: concern
620
+ Q2_path_awareness: pass
621
+ Q3_help_text: pass
622
+ Q4_error_handling: pass
623
+ Q5_options: pass
624
+ Q6_output: pass
625
+ Q7_i18n: pass
626
+ Q8_tests: concern
627
+ Q9_man_page: pass
628
+ Q10_accessibility: fail
629
+ findings:
630
+ - severity: medium
631
+ question: Q1
632
+ description: "Specs only test command registration and option presence, not actual behavior."
633
+ resolution: "Add behavioral tests for status, info, apply-template, drift, sync."
634
+ status: accepted
635
+ - severity: medium
636
+ question: Q8
637
+ description: "No behavioral RSpec tests. InSpec tests status/info only."
638
+ resolution: "Add comprehensive behavioral tests."
639
+ status: accepted
640
+ - severity: high
641
+ question: Q10
642
+ description: "Rainbow colors (green/yellow/red) as sole health indicators. --accessible flag ignored."
643
+ resolution: "Check options[:accessible] and use plain text status labels."
644
+ status: accepted
645
+
646
+ provenance:
647
+ file: lib/rosett_ai/thor/tasks/provenance.rb
648
+ spec: spec/rosett_ai/thor/tasks/provenance_spec.rb
649
+ integration: test/integration/rai_commands/controls/provenance.rb
650
+ status: approved
651
+ notes: "Q9 fixed in Phase 5 — removed undocumented 'provenance add' from man page."
652
+ answers:
653
+ Q1_behavior: pass
654
+ Q2_path_awareness: pass
655
+ Q3_help_text: pass
656
+ Q4_error_handling: pass
657
+ Q5_options: pass
658
+ Q6_output: pass
659
+ Q7_i18n: pass
660
+ Q8_tests: pass
661
+ Q9_man_page: pass
662
+ Q10_accessibility: pass
663
+ findings:
664
+ - severity: high
665
+ question: Q9
666
+ description: "Man page documented 'provenance add' command that did not exist in source code."
667
+ resolution: "Removed 'provenance add' from man page (Phase 5). 4 subcommands match: init, validate, show, log."
668
+ status: fixed
669
+ - severity: minor
670
+ question: Q1
671
+ description: "4 subcommands implemented (init, validate, show, log). Man page previously documented 5th 'add' that didn't exist."
672
+ resolution: "Man page corrected — no longer documents non-existent 'add' subcommand."
673
+ status: fixed
674
+
675
+ release:
676
+ file: lib/rosett_ai/thor/tasks/release.rb
677
+ spec: spec/rosett_ai/thor/tasks/release_spec.rb
678
+ integration: test/integration/rai_commands/controls/release.rb
679
+ status: approved_with_notes
680
+ notes: "Q8 fixed in Phase 3 (InSpec). Q10 accepted — accessibility wiring deferred."
681
+ answers:
682
+ Q1_behavior: pass
683
+ Q2_path_awareness: pass
684
+ Q3_help_text: pass
685
+ Q4_error_handling: pass
686
+ Q5_options: pass
687
+ Q6_output: pass
688
+ Q7_i18n: pass
689
+ Q8_tests: pass
690
+ Q9_man_page: pass
691
+ Q10_accessibility: fail
692
+ findings:
693
+ - severity: medium
694
+ question: Q8
695
+ description: "No InSpec integration tests. Git operations mocked in unit tests."
696
+ resolution: "Add test/integration/rai_commands/controls/release.rb with 'release status' smoke test."
697
+ status: fixed
698
+ - severity: high
699
+ question: Q10
700
+ description: "Rainbow used for all status indicators (green/red). No --accessible mode."
701
+ resolution: "Add explicit PASS/FAIL text. Check TtyHelper.accessible? before Rainbow."
702
+ status: accepted
703
+
704
+ retrofit:
705
+ file: lib/rosett_ai/thor/tasks/retrofit.rb
706
+ spec: spec/rosett_ai/thor/tasks/retrofit_spec.rb
707
+ integration: test/integration/rai_commands/controls/retrofit.rb
708
+ status: approved_with_notes
709
+ notes: "Q1/Q8/Q10 accepted — behavioral test depth and accessibility deferred."
710
+ answers:
711
+ Q1_behavior: concern
712
+ Q2_path_awareness: pass
713
+ Q3_help_text: pass
714
+ Q4_error_handling: pass
715
+ Q5_options: pass
716
+ Q6_output: pass
717
+ Q7_i18n: pass
718
+ Q8_tests: concern
719
+ Q9_man_page: pass
720
+ Q10_accessibility: fail
721
+ findings:
722
+ - severity: medium
723
+ question: Q1
724
+ description: "Specs only test command registration and option presence, not actual behavior."
725
+ resolution: "Add behavioral tests for convert and engines subcommands."
726
+ status: accepted
727
+ - severity: medium
728
+ question: Q8
729
+ description: "No behavioral RSpec tests. InSpec tests help/engines only."
730
+ resolution: "Add comprehensive behavioral tests."
731
+ status: accepted
732
+ - severity: high
733
+ question: Q10
734
+ description: "Rainbow colors (green/yellow/red) as sole file status indicators. --accessible flag ignored."
735
+ resolution: "Check options[:accessible] before Rainbow."
736
+ status: accepted
737
+
738
+ tooling:
739
+ file: lib/rosett_ai/thor/tasks/tooling.rb
740
+ spec: spec/rosett_ai/thor/tasks/tooling_spec.rb
741
+ integration: test/integration/rai_commands/controls/tooling.rb
742
+ status: approved_with_notes
743
+ notes: "Q8 partially fixed in Phase 3 (InSpec added). RSpec depth accepted. Q10 accepted."
744
+ answers:
745
+ Q1_behavior: pass
746
+ Q2_path_awareness: pass
747
+ Q3_help_text: pass
748
+ Q4_error_handling: pass
749
+ Q5_options: pass
750
+ Q6_output: concern
751
+ Q7_i18n: pass
752
+ Q8_tests: concern
753
+ Q9_man_page: pass
754
+ Q10_accessibility: fail
755
+ findings:
756
+ - severity: high
757
+ question: Q8
758
+ description: "RSpec spec only verifies command registration (20 lines). No functional tests. No InSpec tests."
759
+ resolution: "InSpec controls added in Phase 3. RSpec functional depth accepted as known gap."
760
+ status: accepted
761
+ - severity: high
762
+ question: Q10
763
+ description: "Rainbow for status colors. Terminal::Table with Unicode box-drawing. No --accessible mode."
764
+ resolution: "Check options[:accessible] before Rainbow. Use accessible table format."
765
+ status: accepted
766
+
767
+ validate:
768
+ file: lib/rosett_ai/thor/tasks/validate.rb
769
+ spec: spec/rosett_ai/thor/tasks/validate_spec.rb
770
+ integration: test/integration/rai_commands/controls/validate.rb
771
+ status: approved_with_notes
772
+ notes: "Q10 accepted — accessibility wiring deferred."
773
+ answers:
774
+ Q1_behavior: pass
775
+ Q2_path_awareness: pass
776
+ Q3_help_text: pass
777
+ Q4_error_handling: pass
778
+ Q5_options: pass
779
+ Q6_output: pass
780
+ Q7_i18n: pass
781
+ Q8_tests: pass
782
+ Q9_man_page: pass
783
+ Q10_accessibility: concern
784
+ findings:
785
+ - severity: medium
786
+ question: Q10
787
+ description: "Rainbow coloring (green=valid, red=invalid) without checking --accessible flag."
788
+ resolution: "Check options[:accessible] and use plain text labels instead of color."
789
+ status: accepted
790
+
791
+ version:
792
+ file: lib/rosett_ai/thor/cli.rb
793
+ spec: spec/rosett_ai/thor/cli_spec.rb
794
+ integration: test/integration/rai_commands/controls/version.rb
795
+ status: approved_with_notes
796
+ notes: "Q3/Q8/Q9 minor gaps accepted — version command is minimal by design."
797
+ answers:
798
+ Q1_behavior: pass
799
+ Q2_path_awareness: pass
800
+ Q3_help_text: concern
801
+ Q4_error_handling: pass
802
+ Q5_options: pass
803
+ Q6_output: pass
804
+ Q7_i18n: pass
805
+ Q8_tests: concern
806
+ Q9_man_page: concern
807
+ Q10_accessibility: pass
808
+ findings:
809
+ - severity: minor
810
+ question: Q3
811
+ description: "Short desc only. No long_desc. No examples."
812
+ resolution: "Add long_desc mentioning -v/--version aliases and BUILD_INFO fields."
813
+ status: accepted
814
+ - severity: minor
815
+ question: Q8
816
+ description: "No unit tests in cli_spec.rb. Only InSpec integration tests. No BUILD_INFO parsing tests."
817
+ resolution: "Add unit tests for version command and BUILD_INFO parsing."
818
+ status: accepted
819
+ - severity: minor
820
+ question: Q9
821
+ description: "Man page has one-line entry. Does not mention BUILD_INFO fields or -v/--version aliases."
822
+ resolution: "Expand man page entry with BUILD_INFO details and aliases."
823
+ status: accepted
824
+
825
+ workflow:
826
+ file: lib/rosett_ai/thor/tasks/workflow.rb
827
+ spec: spec/rosett_ai/thor/tasks/workflow_spec.rb
828
+ integration: test/integration/rai_commands/controls/workflow.rb
829
+ status: approved_with_notes
830
+ notes: "Q1/Q8/Q10 accepted — behavioral test depth and accessibility deferred."
831
+ answers:
832
+ Q1_behavior: concern
833
+ Q2_path_awareness: pass
834
+ Q3_help_text: pass
835
+ Q4_error_handling: pass
836
+ Q5_options: pass
837
+ Q6_output: pass
838
+ Q7_i18n: pass
839
+ Q8_tests: concern
840
+ Q9_man_page: pass
841
+ Q10_accessibility: fail
842
+ findings:
843
+ - severity: medium
844
+ question: Q1
845
+ description: "Specs only test command registration and list/empty case. No tests for validate/simulate/execute."
846
+ resolution: "Add behavioral tests for all 4 subcommands."
847
+ status: accepted
848
+ - severity: medium
849
+ question: Q8
850
+ description: "Only 1 context tested in RSpec. InSpec tests list/validate only."
851
+ resolution: "Add comprehensive behavioral RSpec tests."
852
+ status: accepted
853
+ - severity: high
854
+ question: Q10
855
+ description: "Rainbow colors without checking --accessible flag. Colorized status is color-only information."
856
+ resolution: "Check options[:accessible] before Rainbow."
857
+ status: accepted