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.
- checksums.yaml +7 -0
- data/.ai-provenance.yml +119 -0
- data/.debride_whitelist +186 -0
- data/.fasterer.yml +29 -0
- data/.mdl_style.rb +10 -0
- data/.mdlrc +3 -0
- data/.mutant.yml +49 -0
- data/.namespace-allowlist +42 -0
- data/.reek.yml +1040 -0
- data/.rosett-ai/config.yml +3 -0
- data/.rspec +5 -0
- data/.rubocop.yml +380 -0
- data/.ruby-version +1 -0
- data/.yamllint +51 -0
- data/.yardopts +12 -0
- data/AI-DISCLOSURE.md +48 -0
- data/CHANGELOG.md +519 -0
- data/CLAUDE.md +141 -0
- data/CONTRIBUTING.md +734 -0
- data/INSTALL.md +154 -0
- data/LICENSE +674 -0
- data/LICENSE.md +675 -0
- data/QUICKSTART.md +73 -0
- data/README.md +366 -0
- data/Rakefile +200 -0
- data/SECURITY.md +114 -0
- data/bin/rai +1 -0
- data/cliff.toml +52 -0
- data/conf/adopt_redactions.yml +8 -0
- data/conf/behaviour/.gitkeep +0 -0
- data/conf/compliance/cra_rules.yml +25 -0
- data/conf/compliance/license_rules.yml +20 -0
- data/conf/design/aaif_alignment.yml +181 -0
- data/conf/design/ab_testing.yml +172 -0
- data/conf/design/accessibility.yml +84 -0
- data/conf/design/ai_authorship.yml +210 -0
- data/conf/design/ai_provenance.yml +224 -0
- data/conf/design/ai_tool_configuration.yml +207 -0
- data/conf/design/architecture.yml +139 -0
- data/conf/design/autocompletion.yml +115 -0
- data/conf/design/backward_compatibility.yml +112 -0
- data/conf/design/behaviour_composition.yml +246 -0
- data/conf/design/build_rake_extraction.yml +57 -0
- data/conf/design/ci_pipeline.yml +100 -0
- data/conf/design/claude_code_configuration.yml +157 -0
- data/conf/design/compiler.yml +128 -0
- data/conf/design/comply.yml +153 -0
- data/conf/design/content_packs.yml +84 -0
- data/conf/design/desktop_integration.yml +289 -0
- data/conf/design/distribution.yml +216 -0
- data/conf/design/doctor.yml +184 -0
- data/conf/design/documentation.yml +152 -0
- data/conf/design/engine_architecture.yml +257 -0
- data/conf/design/error_handling.yml +103 -0
- data/conf/design/feature_flags.yml +142 -0
- data/conf/design/git_hooks.yml +165 -0
- data/conf/design/gui_plugins.yml +475 -0
- data/conf/design/i18n.yml +84 -0
- data/conf/design/integration_testing.yml +56 -0
- data/conf/design/licensing_system.yml +88 -0
- data/conf/design/lifecycle_management.yml +208 -0
- data/conf/design/mcp_integration.yml +207 -0
- data/conf/design/mcp_settings.yml +126 -0
- data/conf/design/migration.yml +56 -0
- data/conf/design/monitoring_observability.yml +194 -0
- data/conf/design/namespace_cleanup.yml +145 -0
- data/conf/design/plugin_test_segregation.yml +145 -0
- data/conf/design/policy_management.yml +229 -0
- data/conf/design/project_management.yml +183 -0
- data/conf/design/rai_mcp_asset_discovery.yml +164 -0
- data/conf/design/rai_mcp_server.yml +605 -0
- data/conf/design/release_management.yml +117 -0
- data/conf/design/retrofit.yml +199 -0
- data/conf/design/retrospective_analyzer.yml +79 -0
- data/conf/design/scope_hierarchy.yml +352 -0
- data/conf/design/security.yml +115 -0
- data/conf/design/session_retrospective.yml +85 -0
- data/conf/design/smart_ui_feedback.yml +89 -0
- data/conf/design/structured_logging.yml +148 -0
- data/conf/design/styles.yml +123 -0
- data/conf/design/test_peer_review.yml +89 -0
- data/conf/design/testing.yml +136 -0
- data/conf/design/threat_model.yml +108 -0
- data/conf/design/ui_framework.yml +111 -0
- data/conf/design/usage_optimization.yml +122 -0
- data/conf/design/version_management.yml +60 -0
- data/conf/design/workflow.yml +227 -0
- data/conf/mcp/server_defaults.yml +42 -0
- data/conf/mcp/trust.yml +21 -0
- data/conf/packaging/core.yml +12 -0
- data/conf/packaging/gtk4.yml +11 -0
- data/conf/packaging/qt6.yml +11 -0
- data/conf/policy/default_deny_list.yml +197 -0
- data/conf/review/cli-command-audit.yml +857 -0
- data/conf/review/design-docs.yml +1064 -0
- data/conf/review/design-questionnaire.yml +153 -0
- data/conf/review/questionnaire.yml +146 -0
- data/conf/review/rosett-ai-core.yml +2919 -0
- data/conf/schemas/ai_config_schema.json +73 -0
- data/conf/schemas/behaviour_schema.json +132 -0
- data/conf/schemas/compliance_rule_schema.json +63 -0
- data/conf/schemas/content_pack_manifest_schema.json +51 -0
- data/conf/schemas/design_schema.json +210 -0
- data/conf/schemas/engine_manifest_schema.json +144 -0
- data/conf/schemas/lockfile_schema.json +74 -0
- data/conf/schemas/mcp_server_schema.json +48 -0
- data/conf/schemas/packaging_schema.json +70 -0
- data/conf/schemas/policy_schema.json +85 -0
- data/conf/schemas/provenance_schema.json +84 -0
- data/conf/schemas/rai_config_schema.json +56 -0
- data/conf/schemas/rai_project_schema.json +20 -0
- data/conf/schemas/scope_hierarchy_schema.json +49 -0
- data/conf/schemas/target_schema.json +67 -0
- data/conf/schemas/tooling_schema.json +65 -0
- data/conf/schemas/workflow_schema.json +112 -0
- data/conf/targets/agents_md.yml +17 -0
- data/conf/targets/claude.yml +12 -0
- data/conf/tooling/tools.yml +58 -0
- data/dist/rosett-ai-mcp.service +48 -0
- data/dist/rosett-ai-mcp.yml.default +45 -0
- data/doc/AAIF_POSITIONING.md +58 -0
- data/doc/ADOPT.md +224 -0
- data/doc/AI_PROVENANCE.md +139 -0
- data/doc/ARCHITECTURE.md +920 -0
- data/doc/BEHAVIOUR.md +409 -0
- data/doc/BUILD.md +138 -0
- data/doc/CI_CD_RECIPES.md +171 -0
- data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
- data/doc/COMMAND_ANALYSIS.md +229 -0
- data/doc/CONFIGURATION.md +281 -0
- data/doc/DESIGN_AUDIT.md +235 -0
- data/doc/DESIGN_PEER_REVIEW.md +771 -0
- data/doc/DESKTOP.md +447 -0
- data/doc/ENGINES.md +567 -0
- data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
- data/doc/FEATURE_AUDIT.md +218 -0
- data/doc/IMPLEMENTATION_PLAN.md +669 -0
- data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
- data/doc/MIGRATION_GUIDE.md +88 -0
- data/doc/PACKAGING.md +232 -0
- data/doc/PROJECT_DASHBOARD.md +153 -0
- data/doc/PULP_DEPLOYMENT.md +164 -0
- data/doc/QUALITY_FIX_SUMMARY.md +110 -0
- data/doc/QUICK_START.md +162 -0
- data/doc/REEK_CONFIGURATION.md +166 -0
- data/doc/REFERENCE.md +253 -0
- data/doc/REFERENCES.md +324 -0
- data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
- data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
- data/doc/SETUP.md +202 -0
- data/doc/TEST_PEER_REVIEW.md +152 -0
- data/doc/THREAT_MODEL.md +230 -0
- data/doc/USAGE.md +545 -0
- data/doc/USER_MANUAL.md +585 -0
- data/doc/ai_test_review_checklist.md +110 -0
- data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
- data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
- data/doc/changes/2026-02-20-security-implementation.md +281 -0
- data/doc/changes/2026-02-20-styles-implementation.md +220 -0
- data/doc/changes/2026-02-21-architecture-completion.md +95 -0
- data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
- data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
- data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
- data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
- data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
- data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
- data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
- data/doc/changes/2026-02-21-path-resolver.md +128 -0
- data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
- data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
- data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
- data/doc/context/SESSION-HANDOFF.md +69 -0
- data/doc/context/ai-engine-usage-trends-2026.md +80 -0
- data/doc/context/plan-pluggable-engines.md +590 -0
- data/doc/decisions/001-flog-deferred.md +32 -0
- data/doc/decisions/002-path-resolution-strategy.md +158 -0
- data/doc/decisions/003-ui-adapter-selection.md +193 -0
- data/doc/decisions/004-design-document-validation.md +179 -0
- data/doc/decisions/005-package-splitting-strategy.md +200 -0
- data/doc/decisions/006-multi-engine-architecture.md +147 -0
- data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
- data/doc/decisions/008-ci-bundler-strategy.md +129 -0
- data/doc/decisions/009-core-only-v1-release.md +60 -0
- data/doc/decisions/010-engine-debian-packaging.md +66 -0
- data/doc/decisions/011-context-aware-cli.md +71 -0
- data/doc/dependency_decisions.yml +247 -0
- data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
- data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
- data/doc/issues/003-smoke-test-false-positive.md +127 -0
- data/doc/issues/004-market-research-design-updates.md +109 -0
- data/doc/issues/005-compile-scope-coexistence.md +161 -0
- data/doc/locales/.gitkeep +0 -0
- data/doc/man/rai.1.ronn +505 -0
- data/doc/operations/packaging.md +133 -0
- data/doc/operations/rosett-ai-release.md +65 -0
- data/doc/reference/error-catalog.md +107 -0
- data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
- data/doc/reference/src/Pictures/cover.jpg +0 -0
- data/doc/reference/src/Pictures/head1.jpg +0 -0
- data/doc/reference/src/Pictures/head2.jpg +0 -0
- data/doc/reference/src/Pictures/head3.jpg +0 -0
- data/doc/reference/src/Pictures/head4.jpg +0 -0
- data/doc/reference/src/Pictures/head5.jpg +0 -0
- data/doc/reference/src/Pictures/head6.jpg +0 -0
- data/doc/reference/src/Pictures/head7.jpg +0 -0
- data/doc/reference/src/Pictures/head8.jpg +0 -0
- data/doc/reference/src/StyleInd.ist +4 -0
- data/doc/reference/src/bibliography.bib +79 -0
- data/doc/reference/src/main.tex +1288 -0
- data/doc/reference/src/structure.tex +303 -0
- data/doc/rosett-ai-bookmarks.html +301 -0
- data/kitchen.yml +46 -0
- data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
- data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
- data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
- data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
- data/lib/rosett_ai/ai_config/context_window.rb +55 -0
- data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
- data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
- data/lib/rosett_ai/ai_config/model_router.rb +121 -0
- data/lib/rosett_ai/ai_config/validator.rb +45 -0
- data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
- data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
- data/lib/rosett_ai/authorship/review_validator.rb +39 -0
- data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
- data/lib/rosett_ai/backup/compressor.rb +180 -0
- data/lib/rosett_ai/backup/destination.rb +91 -0
- data/lib/rosett_ai/behaviour/manager.rb +156 -0
- data/lib/rosett_ai/compiler/backend.rb +86 -0
- data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
- data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
- data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
- data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
- data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
- data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
- data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
- data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
- data/lib/rosett_ai/compiler/target_profile.rb +112 -0
- data/lib/rosett_ai/completion/generator.rb +101 -0
- data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
- data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
- data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
- data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
- data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
- data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
- data/lib/rosett_ai/comply/reporter.rb +113 -0
- data/lib/rosett_ai/comply/runner.rb +50 -0
- data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
- data/lib/rosett_ai/composition/composer.rb +158 -0
- data/lib/rosett_ai/composition/composition_result.rb +64 -0
- data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
- data/lib/rosett_ai/composition/lockfile.rb +103 -0
- data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
- data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
- data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
- data/lib/rosett_ai/config/compile_result.rb +37 -0
- data/lib/rosett_ai/config/compiler.rb +13 -0
- data/lib/rosett_ai/config/domain_transformer.rb +13 -0
- data/lib/rosett_ai/config/key_map.rb +13 -0
- data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
- data/lib/rosett_ai/config/scope_router.rb +13 -0
- data/lib/rosett_ai/config/secret_resolver.rb +125 -0
- data/lib/rosett_ai/configuration.rb +119 -0
- data/lib/rosett_ai/content/content_client.rb +60 -0
- data/lib/rosett_ai/content/pack_installer.rb +117 -0
- data/lib/rosett_ai/content/pack_manifest.rb +50 -0
- data/lib/rosett_ai/content/pack_registry.rb +68 -0
- data/lib/rosett_ai/content_packs/manager.rb +50 -0
- data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
- data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
- data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
- data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
- data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
- data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
- data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
- data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
- data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
- data/lib/rosett_ai/dbus/service.rb +121 -0
- data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
- data/lib/rosett_ai/deprecation.rb +79 -0
- data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
- data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
- data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
- data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
- data/lib/rosett_ai/doctor/check.rb +92 -0
- data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
- data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
- data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
- data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
- data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
- data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
- data/lib/rosett_ai/doctor.rb +81 -0
- data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
- data/lib/rosett_ai/documentation/translator.rb +62 -0
- data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
- data/lib/rosett_ai/engines/detector.rb +63 -0
- data/lib/rosett_ai/engines/registry.rb +50 -0
- data/lib/rosett_ai/error_handler.rb +139 -0
- data/lib/rosett_ai/exit_codes.rb +76 -0
- data/lib/rosett_ai/feature_flags.rb +102 -0
- data/lib/rosett_ai/formatting.rb +33 -0
- data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
- data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
- data/lib/rosett_ai/git_hooks/installer.rb +175 -0
- data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
- data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
- data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
- data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
- data/lib/rosett_ai/init/config_file_writer.rb +24 -0
- data/lib/rosett_ai/init/directory_builder.rb +38 -0
- data/lib/rosett_ai/init/file_copier.rb +95 -0
- data/lib/rosett_ai/init/global_initializer.rb +28 -0
- data/lib/rosett_ai/init/local_initializer.rb +27 -0
- data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
- data/lib/rosett_ai/init/project_initializer.rb +38 -0
- data/lib/rosett_ai/licensing/license_key.rb +139 -0
- data/lib/rosett_ai/licensing/license_store.rb +64 -0
- data/lib/rosett_ai/licensing/license_validator.rb +60 -0
- data/lib/rosett_ai/licensing/tier.rb +42 -0
- data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
- data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
- data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
- data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
- data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
- data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
- data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
- data/lib/rosett_ai/mcp/governance.rb +160 -0
- data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
- data/lib/rosett_ai/mcp/instructions.rb +266 -0
- data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
- data/lib/rosett_ai/mcp/keyfile.rb +221 -0
- data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
- data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
- data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
- data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
- data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
- data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
- data/lib/rosett_ai/mcp/plugins.rb +143 -0
- data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
- data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
- data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
- data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
- data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
- data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
- data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
- data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
- data/lib/rosett_ai/mcp/response_helper.rb +46 -0
- data/lib/rosett_ai/mcp/security_logger.rb +60 -0
- data/lib/rosett_ai/mcp/server.rb +212 -0
- data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
- data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
- data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
- data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
- data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
- data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
- data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
- data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
- data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
- data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
- data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
- data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
- data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
- data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
- data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
- data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
- data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
- data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
- data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
- data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
- data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
- data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
- data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
- data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
- data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
- data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
- data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
- data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
- data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
- data/lib/rosett_ai/migration/detector.rb +117 -0
- data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
- data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
- data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
- data/lib/rosett_ai/package_manager/apt.rb +108 -0
- data/lib/rosett_ai/package_manager/base.rb +68 -0
- data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
- data/lib/rosett_ai/packaging/variant_config.rb +92 -0
- data/lib/rosett_ai/path_resolver.rb +115 -0
- data/lib/rosett_ai/plugins/contract.rb +43 -0
- data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
- data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
- data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
- data/lib/rosett_ai/plugins/registry.rb +150 -0
- data/lib/rosett_ai/policy/auditor.rb +41 -0
- data/lib/rosett_ai/policy/deny_list.rb +71 -0
- data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
- data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
- data/lib/rosett_ai/policy/protected_files.rb +47 -0
- data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
- data/lib/rosett_ai/policy/validator.rb +35 -0
- data/lib/rosett_ai/profiler.rb +79 -0
- data/lib/rosett_ai/project/drift_detector.rb +126 -0
- data/lib/rosett_ai/project/manager.rb +115 -0
- data/lib/rosett_ai/project/sync_manager.rb +138 -0
- data/lib/rosett_ai/project/template_applier.rb +105 -0
- data/lib/rosett_ai/project_context.rb +82 -0
- data/lib/rosett_ai/provenance/entry.rb +63 -0
- data/lib/rosett_ai/provenance/file_source.rb +32 -0
- data/lib/rosett_ai/provenance/source.rb +62 -0
- data/lib/rosett_ai/provenance/store.rb +153 -0
- data/lib/rosett_ai/provenance/tracker.rb +62 -0
- data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
- data/lib/rosett_ai/provenance/validator.rb +45 -0
- data/lib/rosett_ai/quorum/collector.rb +59 -0
- data/lib/rosett_ai/quorum/comparator.rb +81 -0
- data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
- data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
- data/lib/rosett_ai/rai_config.rb +107 -0
- data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
- data/lib/rosett_ai/retrofit/engine.rb +171 -0
- data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
- data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
- data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
- data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
- data/lib/rosett_ai/retrofit/scanner.rb +47 -0
- data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
- data/lib/rosett_ai/secrets_resolver.rb +71 -0
- data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
- data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
- data/lib/rosett_ai/structured_logger.rb +110 -0
- data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
- data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
- data/lib/rosett_ai/telemetry/provider.rb +26 -0
- data/lib/rosett_ai/telemetry/reporter.rb +144 -0
- data/lib/rosett_ai/telemetry.rb +47 -0
- data/lib/rosett_ai/text_sanitizer.rb +62 -0
- data/lib/rosett_ai/thor/cli.rb +269 -0
- data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
- data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
- data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
- data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
- data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
- data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
- data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
- data/lib/rosett_ai/thor/tasks/config.rb +265 -0
- data/lib/rosett_ai/thor/tasks/content.rb +193 -0
- data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
- data/lib/rosett_ai/thor/tasks/design.rb +258 -0
- data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
- data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
- data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
- data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
- data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
- data/lib/rosett_ai/thor/tasks/init.rb +259 -0
- data/lib/rosett_ai/thor/tasks/license.rb +120 -0
- data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
- data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
- data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
- data/lib/rosett_ai/thor/tasks/project.rb +260 -0
- data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
- data/lib/rosett_ai/thor/tasks/release.rb +314 -0
- data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
- data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
- data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
- data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
- data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
- data/lib/rosett_ai/tooling/version_checker.rb +35 -0
- data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
- data/lib/rosett_ai/ui/base.rb +46 -0
- data/lib/rosett_ai/ui/gtk4.rb +98 -0
- data/lib/rosett_ai/ui/kde.rb +40 -0
- data/lib/rosett_ai/ui/qt6.rb +40 -0
- data/lib/rosett_ai/ui/registry.rb +60 -0
- data/lib/rosett_ai/ui/tty_helper.rb +74 -0
- data/lib/rosett_ai/ui/tui.rb +59 -0
- data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
- data/lib/rosett_ai/validators/design_validator.rb +17 -0
- data/lib/rosett_ai/validators/schema_validator.rb +84 -0
- data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
- data/lib/rosett_ai/version.rb +8 -0
- data/lib/rosett_ai/version_consistency_checker.rb +129 -0
- data/lib/rosett_ai/workflow/audit_log.rb +86 -0
- data/lib/rosett_ai/workflow/engine.rb +142 -0
- data/lib/rosett_ai/workflow/manager.rb +82 -0
- data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
- data/lib/rosett_ai/workflow/step_runner.rb +61 -0
- data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
- data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
- data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
- data/lib/rosett_ai/yaml_loader.rb +78 -0
- data/lib/rosett_ai.rb +221 -0
- data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
- data/lib/rubocop/rosett_ai.rb +9 -0
- data/lib/scripts/generated/docker_hub_tags.rb +126 -0
- data/locales/.gitkeep +0 -0
- data/locales/ar.yml +579 -0
- data/locales/en.yml +571 -0
- data/locales/fr.yml +567 -0
- data/packaging/build-engine-deb.sh +81 -0
- data/packaging/scripts/postinst +17 -0
- data/packaging/scripts/postrm +19 -0
- data/packaging/scripts/prerm +10 -0
- data/packaging/wrapper.sh.template +38 -0
- data/rosett-ai.gemspec +63 -0
- data/rules/.gitkeep +0 -0
- data/scripts/publish/pulp_upload.sh +123 -0
- data/settings.json +29 -0
- data/share/applications/be.neatnerds.rosettai.desktop +29 -0
- data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
- data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
- data/share/templates/behaviour/criticalthinking.yml +69 -0
- metadata +810 -0
|
@@ -0,0 +1,2919 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Test Peer Review Registry — Rosett-AI core
|
|
3
|
+
# Generated: 2026-03-14
|
|
4
|
+
# Questionnaire: conf/review/questionnaire.yml
|
|
5
|
+
#
|
|
6
|
+
# Status values: pending | in_review | needs_fix | signed_off
|
|
7
|
+
# This file is updated during the review process.
|
|
8
|
+
|
|
9
|
+
repository: rosett-ai
|
|
10
|
+
total_files: 142
|
|
11
|
+
reviewed: 142
|
|
12
|
+
signed_off: 142
|
|
13
|
+
|
|
14
|
+
files:
|
|
15
|
+
spec/rosett_ai/project_context_spec.rb:
|
|
16
|
+
status: signed_off
|
|
17
|
+
reviewer: hugo
|
|
18
|
+
review_date: "2026-03-15"
|
|
19
|
+
sign_off_date: "2026-03-15"
|
|
20
|
+
verdict: approved_with_notes
|
|
21
|
+
intent: "Verifies ProjectContext detects rai projects by walking up for .rosett-ai/ markers, respecting RAI_ORIGINAL_PWD and explicit start_dir"
|
|
22
|
+
answers:
|
|
23
|
+
Q1: pass
|
|
24
|
+
Q2: pass
|
|
25
|
+
Q3: pass
|
|
26
|
+
Q4: pass
|
|
27
|
+
Q5: pass
|
|
28
|
+
Q6: pass
|
|
29
|
+
Q7: pass
|
|
30
|
+
Q8: pass
|
|
31
|
+
Q9: pass
|
|
32
|
+
Q10: concern
|
|
33
|
+
findings:
|
|
34
|
+
- severity: minor
|
|
35
|
+
question: Q10
|
|
36
|
+
description: "around blocks for env var save/restore lacked explanatory comments for junior developers"
|
|
37
|
+
resolution: "Added inline documentation comments explaining the pattern"
|
|
38
|
+
|
|
39
|
+
spec/rosett_ai/thor/tasks/build_package_spec.rb:
|
|
40
|
+
status: signed_off
|
|
41
|
+
reviewer: hugo
|
|
42
|
+
review_date: "2026-03-15"
|
|
43
|
+
sign_off_date: "2026-03-15"
|
|
44
|
+
verdict: approved_with_notes
|
|
45
|
+
intent: "Verifies BuildPackage produces correct .deb packages with staging, variant handling, environment validation, and build summary"
|
|
46
|
+
answers:
|
|
47
|
+
Q1: pass
|
|
48
|
+
Q2: pass
|
|
49
|
+
Q3: pass
|
|
50
|
+
Q4: concern
|
|
51
|
+
Q5: concern
|
|
52
|
+
Q6: pass
|
|
53
|
+
Q7: pass
|
|
54
|
+
Q8: pass
|
|
55
|
+
Q9: pass
|
|
56
|
+
Q10: concern
|
|
57
|
+
findings:
|
|
58
|
+
- severity: minor
|
|
59
|
+
question: Q4
|
|
60
|
+
description: "Extensive use of allow_any_instance_of — pragmatic for Thor but a known RSpec smell"
|
|
61
|
+
resolution: "Created controlled stub allowlist: stubbable_methods + stub_stages/stub_stage helpers + guard example. See doc/TEST_PEER_REVIEW.md"
|
|
62
|
+
- severity: minor
|
|
63
|
+
question: Q5
|
|
64
|
+
description: "Private helper methods (format_size, format_duration, clean_env) tested via send"
|
|
65
|
+
resolution: "Extracted format_size/format_duration to RosettAi::Formatting module (spec/rosett_ai/formatting_spec.rb). clean_env retained with send — justified inline (no public surface, build-critical env isolation)"
|
|
66
|
+
- severity: minor
|
|
67
|
+
question: Q10
|
|
68
|
+
description: "stub_all_stages helper and 30-line before block lacked explanatory comments"
|
|
69
|
+
resolution: "Added inline documentation comments explaining fixture setup and stub rationale"
|
|
70
|
+
|
|
71
|
+
spec/rosett_ai/thor/tasks/build_engine_spec.rb:
|
|
72
|
+
status: signed_off
|
|
73
|
+
reviewer: hugo
|
|
74
|
+
review_date: "2026-03-15"
|
|
75
|
+
sign_off_date: "2026-03-15"
|
|
76
|
+
verdict: approved_with_notes
|
|
77
|
+
intent: "Verifies BuildEngine detects engine gemspecs, validates build environment, and produces correct .deb filenames and staging paths"
|
|
78
|
+
answers:
|
|
79
|
+
Q1: pass
|
|
80
|
+
Q2: pass
|
|
81
|
+
Q3: pass
|
|
82
|
+
Q4: concern
|
|
83
|
+
Q5: concern
|
|
84
|
+
Q6: pass
|
|
85
|
+
Q7: pass
|
|
86
|
+
Q8: pass
|
|
87
|
+
Q9: pass
|
|
88
|
+
Q10: concern
|
|
89
|
+
findings:
|
|
90
|
+
- severity: minor
|
|
91
|
+
question: Q4
|
|
92
|
+
description: "Gemspec detection tests use instance_variable_get to verify parsed values"
|
|
93
|
+
resolution: "Pragmatic — parsed values only exposed through downstream output; ivar access isolates unit from full pipeline. Documented inline."
|
|
94
|
+
- severity: minor
|
|
95
|
+
question: Q5
|
|
96
|
+
description: "Tests set instance variables directly and call private methods via send, coupling to internal structure"
|
|
97
|
+
resolution: "format_size removed (now in RosettAi::Formatting module). Remaining send/ivar usage justified — gemspec pipeline and package_filename have no public accessor surface."
|
|
98
|
+
- severity: minor
|
|
99
|
+
question: Q10
|
|
100
|
+
description: "Three-step gemspec pipeline and manual ivar setup lacked explanatory comments"
|
|
101
|
+
resolution: "Added inline documentation comments explaining the pipeline and isolation rationale"
|
|
102
|
+
|
|
103
|
+
# --- Batch 2: Core Foundation (reviewed 2026-03-15) ---
|
|
104
|
+
|
|
105
|
+
spec/nncc_spec.rb:
|
|
106
|
+
status: signed_off
|
|
107
|
+
reviewer: hugo
|
|
108
|
+
review_date: "2026-03-15"
|
|
109
|
+
sign_off_date: "2026-03-15"
|
|
110
|
+
verdict: approved
|
|
111
|
+
intent: "Verifies the top-level RosettAi module exposes correct VERSION format, memoized .root/.config singletons, and properly structured error class hierarchy"
|
|
112
|
+
answers:
|
|
113
|
+
Q1: pass
|
|
114
|
+
Q2: pass
|
|
115
|
+
Q3: pass
|
|
116
|
+
Q4: pass
|
|
117
|
+
Q5: pass
|
|
118
|
+
Q6: pass
|
|
119
|
+
Q7: pass
|
|
120
|
+
Q8: pass
|
|
121
|
+
Q9: pass
|
|
122
|
+
Q10: pass
|
|
123
|
+
findings: []
|
|
124
|
+
|
|
125
|
+
spec/rosett_ai/configuration_spec.rb:
|
|
126
|
+
status: signed_off
|
|
127
|
+
reviewer: hugo
|
|
128
|
+
review_date: "2026-03-15"
|
|
129
|
+
sign_off_date: "2026-03-15"
|
|
130
|
+
verdict: approved_with_notes
|
|
131
|
+
intent: "Verifies Configuration loads settings.json and settings.local.json, deep-merges nested hashes with array union deduplication, handles type mismatches, and clears memoized state on reload!"
|
|
132
|
+
answers:
|
|
133
|
+
Q1: pass
|
|
134
|
+
Q2: pass
|
|
135
|
+
Q3: pass
|
|
136
|
+
Q4: pass
|
|
137
|
+
Q5: concern
|
|
138
|
+
Q6: pass
|
|
139
|
+
Q7: pass
|
|
140
|
+
Q8: pass
|
|
141
|
+
Q9: pass
|
|
142
|
+
Q10: pass
|
|
143
|
+
findings:
|
|
144
|
+
- severity: minor
|
|
145
|
+
question: Q5
|
|
146
|
+
description: "reload! test used instance_variable_get to verify internal memoization state"
|
|
147
|
+
resolution: "Replaced with 4 behavioral tests verifying re-read of settings, local_settings, merged_settings, and behaviour_files after reload!"
|
|
148
|
+
|
|
149
|
+
spec/rosett_ai/rai_config_spec.rb:
|
|
150
|
+
status: signed_off
|
|
151
|
+
reviewer: hugo
|
|
152
|
+
review_date: "2026-03-15"
|
|
153
|
+
sign_off_date: "2026-03-15"
|
|
154
|
+
verdict: approved
|
|
155
|
+
intent: "Verifies RaiConfig returns compiled defaults when no config file exists, deep-merges user values, validates against JSON Schema, supports dotted-key updates with type coercion, and provides a memoized singleton"
|
|
156
|
+
answers:
|
|
157
|
+
Q1: pass
|
|
158
|
+
Q2: pass
|
|
159
|
+
Q3: pass
|
|
160
|
+
Q4: pass
|
|
161
|
+
Q5: pass
|
|
162
|
+
Q6: pass
|
|
163
|
+
Q7: pass
|
|
164
|
+
Q8: pass
|
|
165
|
+
Q9: pass
|
|
166
|
+
Q10: pass
|
|
167
|
+
findings: []
|
|
168
|
+
|
|
169
|
+
spec/rosett_ai/path_resolver_spec.rb:
|
|
170
|
+
status: signed_off
|
|
171
|
+
reviewer: hugo
|
|
172
|
+
review_date: "2026-03-15"
|
|
173
|
+
sign_off_date: "2026-03-15"
|
|
174
|
+
verdict: approved_with_notes
|
|
175
|
+
intent: "Verifies PathResolver resolves all filesystem paths correctly, respects RAI_ORIGINAL_PWD for .deb wrapper compatibility, honours XDG_CONFIG_HOME for Rosett-AI-domain paths, and provides a memoized singleton"
|
|
176
|
+
answers:
|
|
177
|
+
Q1: pass
|
|
178
|
+
Q2: pass
|
|
179
|
+
Q3: pass
|
|
180
|
+
Q4: pass
|
|
181
|
+
Q5: concern
|
|
182
|
+
Q6: pass
|
|
183
|
+
Q7: pass
|
|
184
|
+
Q8: pass
|
|
185
|
+
Q9: pass
|
|
186
|
+
Q10: pass
|
|
187
|
+
findings:
|
|
188
|
+
- severity: minor
|
|
189
|
+
question: Q5
|
|
190
|
+
description: "Test used instance_variable_get(:@engine) because engine value had no observable output"
|
|
191
|
+
resolution: "Added attr_reader :engine to PathResolver, test now uses public accessor — multi-engine ready"
|
|
192
|
+
|
|
193
|
+
spec/rosett_ai/version_consistency_checker_spec.rb:
|
|
194
|
+
status: signed_off
|
|
195
|
+
reviewer: hugo
|
|
196
|
+
review_date: "2026-03-15"
|
|
197
|
+
sign_off_date: "2026-03-15"
|
|
198
|
+
verdict: approved
|
|
199
|
+
intent: "Verifies VersionConsistencyChecker detects stale Ruby version references, correctly excludes build artifacts and version-pinning patterns, and reports file/line/found/expected for each mismatch"
|
|
200
|
+
answers:
|
|
201
|
+
Q1: pass
|
|
202
|
+
Q2: pass
|
|
203
|
+
Q3: pass
|
|
204
|
+
Q4: pass
|
|
205
|
+
Q5: pass
|
|
206
|
+
Q6: pass
|
|
207
|
+
Q7: pass
|
|
208
|
+
Q8: pass
|
|
209
|
+
Q9: pass
|
|
210
|
+
Q10: pass
|
|
211
|
+
findings: []
|
|
212
|
+
|
|
213
|
+
spec/rosett_ai/secrets_resolver_spec.rb:
|
|
214
|
+
status: signed_off
|
|
215
|
+
reviewer: hugo
|
|
216
|
+
review_date: "2026-03-15"
|
|
217
|
+
sign_off_date: "2026-03-15"
|
|
218
|
+
verdict: approved
|
|
219
|
+
intent: "Verifies SecretsResolver resolves secrets through ENV > secrets file fallback, rejects insecure file permissions (non-0600), and provides actionable error messages with setup instructions"
|
|
220
|
+
answers:
|
|
221
|
+
Q1: pass
|
|
222
|
+
Q2: pass
|
|
223
|
+
Q3: pass
|
|
224
|
+
Q4: pass
|
|
225
|
+
Q5: pass
|
|
226
|
+
Q6: pass
|
|
227
|
+
Q7: pass
|
|
228
|
+
Q8: pass
|
|
229
|
+
Q9: pass
|
|
230
|
+
Q10: pass
|
|
231
|
+
findings: []
|
|
232
|
+
|
|
233
|
+
spec/rosett_ai/validators/schema_validator_spec.rb:
|
|
234
|
+
status: signed_off
|
|
235
|
+
reviewer: hugo
|
|
236
|
+
review_date: "2026-03-15"
|
|
237
|
+
sign_off_date: "2026-03-15"
|
|
238
|
+
verdict: approved
|
|
239
|
+
intent: "Verifies SchemaValidator loads JSON schemas, validates YAML files against them, and provides clear error messages for missing files, broken YAML, and schema violations"
|
|
240
|
+
answers:
|
|
241
|
+
Q1: pass
|
|
242
|
+
Q2: pass
|
|
243
|
+
Q3: pass
|
|
244
|
+
Q4: pass
|
|
245
|
+
Q5: pass
|
|
246
|
+
Q6: pass
|
|
247
|
+
Q7: pass
|
|
248
|
+
Q8: pass
|
|
249
|
+
Q9: pass
|
|
250
|
+
Q10: pass
|
|
251
|
+
findings: []
|
|
252
|
+
|
|
253
|
+
spec/rosett_ai/validators/behaviour_validator_spec.rb:
|
|
254
|
+
status: signed_off
|
|
255
|
+
reviewer: hugo
|
|
256
|
+
review_date: "2026-03-15"
|
|
257
|
+
sign_off_date: "2026-03-15"
|
|
258
|
+
verdict: approved
|
|
259
|
+
intent: "Verifies BehaviourValidator validates behaviour YAML files against the behaviour JSON Schema, catching missing fields, empty rules, invalid rule structures, and malformed version strings"
|
|
260
|
+
answers:
|
|
261
|
+
Q1: pass
|
|
262
|
+
Q2: pass
|
|
263
|
+
Q3: pass
|
|
264
|
+
Q4: pass
|
|
265
|
+
Q5: pass
|
|
266
|
+
Q6: pass
|
|
267
|
+
Q7: pass
|
|
268
|
+
Q8: pass
|
|
269
|
+
Q9: pass
|
|
270
|
+
Q10: pass
|
|
271
|
+
findings: []
|
|
272
|
+
|
|
273
|
+
spec/rosett_ai/validators/design_validator_spec.rb:
|
|
274
|
+
status: signed_off
|
|
275
|
+
reviewer: hugo
|
|
276
|
+
review_date: "2026-03-15"
|
|
277
|
+
sign_off_date: "2026-03-15"
|
|
278
|
+
verdict: approved
|
|
279
|
+
intent: "Verifies DesignValidator validates design documents against the design JSON Schema and that all existing design files pass validation"
|
|
280
|
+
answers:
|
|
281
|
+
Q1: pass
|
|
282
|
+
Q2: pass
|
|
283
|
+
Q3: pass
|
|
284
|
+
Q4: pass
|
|
285
|
+
Q5: pass
|
|
286
|
+
Q6: pass
|
|
287
|
+
Q7: pass
|
|
288
|
+
Q8: pass
|
|
289
|
+
Q9: pass
|
|
290
|
+
Q10: pass
|
|
291
|
+
findings: []
|
|
292
|
+
|
|
293
|
+
spec/rosett_ai/validators/tooling_validator_spec.rb:
|
|
294
|
+
status: signed_off
|
|
295
|
+
reviewer: hugo
|
|
296
|
+
review_date: "2026-03-15"
|
|
297
|
+
sign_off_date: "2026-03-15"
|
|
298
|
+
verdict: approved
|
|
299
|
+
intent: "Verifies ToolingValidator validates tooling configuration files against the tooling JSON Schema and that all existing tooling files pass validation"
|
|
300
|
+
answers:
|
|
301
|
+
Q1: pass
|
|
302
|
+
Q2: pass
|
|
303
|
+
Q3: pass
|
|
304
|
+
Q4: pass
|
|
305
|
+
Q5: pass
|
|
306
|
+
Q6: pass
|
|
307
|
+
Q7: pass
|
|
308
|
+
Q8: pass
|
|
309
|
+
Q9: pass
|
|
310
|
+
Q10: pass
|
|
311
|
+
findings: []
|
|
312
|
+
|
|
313
|
+
# --- Batch 3: Core Compiler + Composition (reviewed 2026-03-15) ---
|
|
314
|
+
|
|
315
|
+
spec/rosett_ai/compiler/compilation_pipeline_spec.rb:
|
|
316
|
+
status: signed_off
|
|
317
|
+
reviewer: hugo
|
|
318
|
+
review_date: "2026-03-15"
|
|
319
|
+
sign_off_date: "2026-03-15"
|
|
320
|
+
verdict: approved
|
|
321
|
+
intent: "Verifies CompilationPipeline discovers categories, compiles behaviour YAML to markdown, produces checksums, and detects orphaned managed files"
|
|
322
|
+
answers:
|
|
323
|
+
Q1: pass
|
|
324
|
+
Q2: pass
|
|
325
|
+
Q3: pass
|
|
326
|
+
Q4: pass
|
|
327
|
+
Q5: pass
|
|
328
|
+
Q6: pass
|
|
329
|
+
Q7: pass
|
|
330
|
+
Q8: pass
|
|
331
|
+
Q9: pass
|
|
332
|
+
Q10: pass
|
|
333
|
+
findings: []
|
|
334
|
+
|
|
335
|
+
spec/rosett_ai/compiler/behaviour_compiler_spec.rb:
|
|
336
|
+
status: signed_off
|
|
337
|
+
reviewer: hugo
|
|
338
|
+
review_date: "2026-03-15"
|
|
339
|
+
sign_off_date: "2026-03-15"
|
|
340
|
+
verdict: approved_with_notes
|
|
341
|
+
intent: "Verifies BehaviourCompiler loads YAML, validates against schema, generates markdown with backend-appropriate templates, handles lockfile data and multi-category compilation"
|
|
342
|
+
answers:
|
|
343
|
+
Q1: pass
|
|
344
|
+
Q2: pass
|
|
345
|
+
Q3: pass
|
|
346
|
+
Q4: concern
|
|
347
|
+
Q5: pass
|
|
348
|
+
Q6: pass
|
|
349
|
+
Q7: pass
|
|
350
|
+
Q8: pass
|
|
351
|
+
Q9: pass
|
|
352
|
+
Q10: pass
|
|
353
|
+
findings:
|
|
354
|
+
- severity: minor
|
|
355
|
+
question: Q4
|
|
356
|
+
description: "Mocks class under test for lockfile_data — spy on compile result rather than exercising real pipeline"
|
|
357
|
+
resolution: "Pragmatic — lockfile_data is an accessor on compiled output, mocking avoids full pipeline setup. Documented inline."
|
|
358
|
+
|
|
359
|
+
spec/rosett_ai/compiler/backend_spec.rb:
|
|
360
|
+
status: signed_off
|
|
361
|
+
reviewer: hugo
|
|
362
|
+
review_date: "2026-03-15"
|
|
363
|
+
sign_off_date: "2026-03-15"
|
|
364
|
+
verdict: approved_with_notes
|
|
365
|
+
intent: "Verifies Backend.for resolves engine names to backend classes, handles aliases, raises for unknown engines, and supports the deprecated Backend.resolve_backend_class path"
|
|
366
|
+
answers:
|
|
367
|
+
Q1: pass
|
|
368
|
+
Q2: pass
|
|
369
|
+
Q3: pass
|
|
370
|
+
Q4: pass
|
|
371
|
+
Q5: concern
|
|
372
|
+
Q6: pass
|
|
373
|
+
Q7: pass
|
|
374
|
+
Q8: pass
|
|
375
|
+
Q9: pass
|
|
376
|
+
Q10: pass
|
|
377
|
+
findings:
|
|
378
|
+
- severity: minor
|
|
379
|
+
question: Q5
|
|
380
|
+
description: "Uses send(:resolve_backend_class) to test private class resolution method"
|
|
381
|
+
resolution: "Pragmatic — resolve_backend_class has no public surface, only consumed by Backend.for. Testing via send isolates the resolver from full pipeline."
|
|
382
|
+
|
|
383
|
+
spec/rosett_ai/compiler/backends/claude_backend_spec.rb:
|
|
384
|
+
status: signed_off
|
|
385
|
+
reviewer: hugo
|
|
386
|
+
review_date: "2026-03-15"
|
|
387
|
+
sign_off_date: "2026-03-15"
|
|
388
|
+
verdict: approved
|
|
389
|
+
intent: "Verifies ClaudeBackend is a deprecated alias that resolves to the correct backend class"
|
|
390
|
+
answers:
|
|
391
|
+
Q1: pass
|
|
392
|
+
Q2: pass
|
|
393
|
+
Q3: pass
|
|
394
|
+
Q4: pass
|
|
395
|
+
Q5: pass
|
|
396
|
+
Q6: pass
|
|
397
|
+
Q7: pass
|
|
398
|
+
Q8: pass
|
|
399
|
+
Q9: pass
|
|
400
|
+
Q10: pass
|
|
401
|
+
findings: []
|
|
402
|
+
|
|
403
|
+
spec/rosett_ai/compiler/backends/generic_backend_spec.rb:
|
|
404
|
+
status: signed_off
|
|
405
|
+
reviewer: hugo
|
|
406
|
+
review_date: "2026-03-15"
|
|
407
|
+
sign_off_date: "2026-03-15"
|
|
408
|
+
verdict: approved
|
|
409
|
+
intent: "Verifies GenericBackend is a deprecated alias that resolves to the correct backend class"
|
|
410
|
+
answers:
|
|
411
|
+
Q1: pass
|
|
412
|
+
Q2: pass
|
|
413
|
+
Q3: pass
|
|
414
|
+
Q4: pass
|
|
415
|
+
Q5: pass
|
|
416
|
+
Q6: pass
|
|
417
|
+
Q7: pass
|
|
418
|
+
Q8: pass
|
|
419
|
+
Q9: pass
|
|
420
|
+
Q10: pass
|
|
421
|
+
findings: []
|
|
422
|
+
|
|
423
|
+
spec/rosett_ai/compiler/capability_checker_spec.rb:
|
|
424
|
+
status: signed_off
|
|
425
|
+
reviewer: hugo
|
|
426
|
+
review_date: "2026-03-15"
|
|
427
|
+
sign_off_date: "2026-03-15"
|
|
428
|
+
verdict: approved
|
|
429
|
+
intent: "Verifies CapabilityChecker detects unsupported behaviour features for target engines, produces summarized warnings, and correctly passes through supported features"
|
|
430
|
+
answers:
|
|
431
|
+
Q1: pass
|
|
432
|
+
Q2: pass
|
|
433
|
+
Q3: pass
|
|
434
|
+
Q4: pass
|
|
435
|
+
Q5: pass
|
|
436
|
+
Q6: pass
|
|
437
|
+
Q7: pass
|
|
438
|
+
Q8: pass
|
|
439
|
+
Q9: pass
|
|
440
|
+
Q10: pass
|
|
441
|
+
findings: []
|
|
442
|
+
|
|
443
|
+
spec/rosett_ai/compiler/target_profile_spec.rb:
|
|
444
|
+
status: signed_off
|
|
445
|
+
reviewer: hugo
|
|
446
|
+
review_date: "2026-03-15"
|
|
447
|
+
sign_off_date: "2026-03-15"
|
|
448
|
+
verdict: approved
|
|
449
|
+
intent: "Verifies TargetProfile loads engine YAML profiles, exposes output_dir/template/features/metadata, and raises for missing profile files"
|
|
450
|
+
answers:
|
|
451
|
+
Q1: pass
|
|
452
|
+
Q2: pass
|
|
453
|
+
Q3: pass
|
|
454
|
+
Q4: pass
|
|
455
|
+
Q5: pass
|
|
456
|
+
Q6: pass
|
|
457
|
+
Q7: pass
|
|
458
|
+
Q8: pass
|
|
459
|
+
Q9: pass
|
|
460
|
+
Q10: pass
|
|
461
|
+
findings: []
|
|
462
|
+
|
|
463
|
+
spec/rosett_ai/compiler/locale_compiler_spec.rb:
|
|
464
|
+
status: signed_off
|
|
465
|
+
reviewer: hugo
|
|
466
|
+
review_date: "2026-03-15"
|
|
467
|
+
sign_off_date: "2026-03-15"
|
|
468
|
+
verdict: approved
|
|
469
|
+
intent: "Verifies LocaleCompiler compiles YAML locale files to gettext .po and Qt .ts formats, handles missing source directories, and produces correct file structures"
|
|
470
|
+
answers:
|
|
471
|
+
Q1: pass
|
|
472
|
+
Q2: pass
|
|
473
|
+
Q3: pass
|
|
474
|
+
Q4: pass
|
|
475
|
+
Q5: pass
|
|
476
|
+
Q6: pass
|
|
477
|
+
Q7: pass
|
|
478
|
+
Q8: pass
|
|
479
|
+
Q9: pass
|
|
480
|
+
Q10: pass
|
|
481
|
+
findings: []
|
|
482
|
+
|
|
483
|
+
spec/rosett_ai/compiler/compiled_output_spec.rb:
|
|
484
|
+
status: signed_off
|
|
485
|
+
reviewer: hugo
|
|
486
|
+
review_date: "2026-03-15"
|
|
487
|
+
sign_off_date: "2026-03-15"
|
|
488
|
+
verdict: approved
|
|
489
|
+
intent: "Verifies CompiledOutput wraps compilation results with content, metadata, and checksum accessors"
|
|
490
|
+
answers:
|
|
491
|
+
Q1: pass
|
|
492
|
+
Q2: pass
|
|
493
|
+
Q3: pass
|
|
494
|
+
Q4: pass
|
|
495
|
+
Q5: pass
|
|
496
|
+
Q6: pass
|
|
497
|
+
Q7: pass
|
|
498
|
+
Q8: pass
|
|
499
|
+
Q9: pass
|
|
500
|
+
Q10: pass
|
|
501
|
+
findings: []
|
|
502
|
+
|
|
503
|
+
spec/rosett_ai/thor/tasks/compile_spec.rb:
|
|
504
|
+
status: signed_off
|
|
505
|
+
reviewer: hugo
|
|
506
|
+
review_date: "2026-03-15"
|
|
507
|
+
sign_off_date: "2026-03-15"
|
|
508
|
+
verdict: approved_with_notes
|
|
509
|
+
intent: "Verifies Compile Thor task creates markdown rule files, handles simulate/verbose/vendor/engine options, removes orphans, and emits deprecation warnings for --target"
|
|
510
|
+
answers:
|
|
511
|
+
Q1: pass
|
|
512
|
+
Q2: pass
|
|
513
|
+
Q3: pass
|
|
514
|
+
Q4: concern
|
|
515
|
+
Q5: pass
|
|
516
|
+
Q6: pass
|
|
517
|
+
Q7: pass
|
|
518
|
+
Q8: pass
|
|
519
|
+
Q9: pass
|
|
520
|
+
Q10: pass
|
|
521
|
+
findings:
|
|
522
|
+
- severity: minor
|
|
523
|
+
question: Q4
|
|
524
|
+
description: "Used bare allow_any_instance_of for resolve_target_dir — Thor invoke prevents instance access"
|
|
525
|
+
resolution: "Created controlled stub allowlist: stubbable_methods + stub_stages/stub_stage helpers + guard example, consistent with build_package_spec.rb pattern"
|
|
526
|
+
|
|
527
|
+
spec/rosett_ai/composition/composer_spec.rb:
|
|
528
|
+
status: signed_off
|
|
529
|
+
reviewer: hugo
|
|
530
|
+
review_date: "2026-03-15"
|
|
531
|
+
sign_off_date: "2026-03-15"
|
|
532
|
+
verdict: approved
|
|
533
|
+
intent: "Verifies Composer orchestrates the full composition pipeline: priority sorting, scope resolution, conflict detection, circular dependency checks, and produces a CompositionResult"
|
|
534
|
+
answers:
|
|
535
|
+
Q1: pass
|
|
536
|
+
Q2: pass
|
|
537
|
+
Q3: pass
|
|
538
|
+
Q4: pass
|
|
539
|
+
Q5: pass
|
|
540
|
+
Q6: pass
|
|
541
|
+
Q7: pass
|
|
542
|
+
Q8: pass
|
|
543
|
+
Q9: pass
|
|
544
|
+
Q10: pass
|
|
545
|
+
findings: []
|
|
546
|
+
|
|
547
|
+
spec/rosett_ai/composition/circular_dependency_detector_spec.rb:
|
|
548
|
+
status: signed_off
|
|
549
|
+
reviewer: hugo
|
|
550
|
+
review_date: "2026-03-15"
|
|
551
|
+
sign_off_date: "2026-03-15"
|
|
552
|
+
verdict: approved
|
|
553
|
+
intent: "Verifies CircularDependencyDetector identifies circular requires between behaviours and reports the cycle path"
|
|
554
|
+
answers:
|
|
555
|
+
Q1: pass
|
|
556
|
+
Q2: pass
|
|
557
|
+
Q3: pass
|
|
558
|
+
Q4: pass
|
|
559
|
+
Q5: pass
|
|
560
|
+
Q6: pass
|
|
561
|
+
Q7: pass
|
|
562
|
+
Q8: pass
|
|
563
|
+
Q9: pass
|
|
564
|
+
Q10: pass
|
|
565
|
+
findings: []
|
|
566
|
+
|
|
567
|
+
spec/rosett_ai/composition/conflict_detector_spec.rb:
|
|
568
|
+
status: signed_off
|
|
569
|
+
reviewer: hugo
|
|
570
|
+
review_date: "2026-03-15"
|
|
571
|
+
sign_off_date: "2026-03-15"
|
|
572
|
+
verdict: approved
|
|
573
|
+
intent: "Verifies ConflictDetector identifies rule ID collisions across behaviours and reports conflicting sources"
|
|
574
|
+
answers:
|
|
575
|
+
Q1: pass
|
|
576
|
+
Q2: pass
|
|
577
|
+
Q3: pass
|
|
578
|
+
Q4: pass
|
|
579
|
+
Q5: pass
|
|
580
|
+
Q6: pass
|
|
581
|
+
Q7: pass
|
|
582
|
+
Q8: pass
|
|
583
|
+
Q9: pass
|
|
584
|
+
Q10: pass
|
|
585
|
+
findings: []
|
|
586
|
+
|
|
587
|
+
spec/rosett_ai/composition/lockfile_spec.rb:
|
|
588
|
+
status: signed_off
|
|
589
|
+
reviewer: hugo
|
|
590
|
+
review_date: "2026-03-15"
|
|
591
|
+
sign_off_date: "2026-03-15"
|
|
592
|
+
verdict: approved
|
|
593
|
+
intent: "Verifies Lockfile generates and reads compile.lock.yml with generator metadata, SHA-256 checksums, and version stamps"
|
|
594
|
+
answers:
|
|
595
|
+
Q1: pass
|
|
596
|
+
Q2: pass
|
|
597
|
+
Q3: pass
|
|
598
|
+
Q4: pass
|
|
599
|
+
Q5: pass
|
|
600
|
+
Q6: pass
|
|
601
|
+
Q7: pass
|
|
602
|
+
Q8: pass
|
|
603
|
+
Q9: pass
|
|
604
|
+
Q10: pass
|
|
605
|
+
findings: []
|
|
606
|
+
|
|
607
|
+
spec/rosett_ai/composition/priority_sorter_spec.rb:
|
|
608
|
+
status: signed_off
|
|
609
|
+
reviewer: hugo
|
|
610
|
+
review_date: "2026-03-15"
|
|
611
|
+
sign_off_date: "2026-03-15"
|
|
612
|
+
verdict: approved
|
|
613
|
+
intent: "Verifies PrioritySorter orders behaviours by priority field, handles equal priorities with stable sort, and places lower priority numbers first"
|
|
614
|
+
answers:
|
|
615
|
+
Q1: pass
|
|
616
|
+
Q2: pass
|
|
617
|
+
Q3: pass
|
|
618
|
+
Q4: pass
|
|
619
|
+
Q5: pass
|
|
620
|
+
Q6: pass
|
|
621
|
+
Q7: pass
|
|
622
|
+
Q8: pass
|
|
623
|
+
Q9: pass
|
|
624
|
+
Q10: pass
|
|
625
|
+
findings: []
|
|
626
|
+
|
|
627
|
+
spec/rosett_ai/composition/scope_resolver_spec.rb:
|
|
628
|
+
status: signed_off
|
|
629
|
+
reviewer: hugo
|
|
630
|
+
review_date: "2026-03-15"
|
|
631
|
+
sign_off_date: "2026-03-15"
|
|
632
|
+
verdict: approved
|
|
633
|
+
intent: "Verifies ScopeResolver filters behaviours by used_in scope tags, handles global/project/engine scopes, and passes through unscoped behaviours"
|
|
634
|
+
answers:
|
|
635
|
+
Q1: pass
|
|
636
|
+
Q2: pass
|
|
637
|
+
Q3: pass
|
|
638
|
+
Q4: pass
|
|
639
|
+
Q5: pass
|
|
640
|
+
Q6: pass
|
|
641
|
+
Q7: pass
|
|
642
|
+
Q8: pass
|
|
643
|
+
Q9: pass
|
|
644
|
+
Q10: pass
|
|
645
|
+
findings: []
|
|
646
|
+
|
|
647
|
+
spec/rosett_ai/composition/composition_result_spec.rb:
|
|
648
|
+
status: signed_off
|
|
649
|
+
reviewer: hugo
|
|
650
|
+
review_date: "2026-03-15"
|
|
651
|
+
sign_off_date: "2026-03-15"
|
|
652
|
+
verdict: approved
|
|
653
|
+
intent: "Verifies CompositionResult wraps composed behaviours with conflict/circular reports, provides success?/warnings accessors, and supports serialization"
|
|
654
|
+
answers:
|
|
655
|
+
Q1: pass
|
|
656
|
+
Q2: pass
|
|
657
|
+
Q3: pass
|
|
658
|
+
Q4: pass
|
|
659
|
+
Q5: pass
|
|
660
|
+
Q6: pass
|
|
661
|
+
Q7: pass
|
|
662
|
+
Q8: pass
|
|
663
|
+
Q9: pass
|
|
664
|
+
Q10: pass
|
|
665
|
+
findings: []
|
|
666
|
+
|
|
667
|
+
# --- Batch 4: Policy + Provenance + Authorship + AI Config (reviewed 2026-03-15) ---
|
|
668
|
+
|
|
669
|
+
spec/rosett_ai/policy/auditor_spec.rb:
|
|
670
|
+
status: signed_off
|
|
671
|
+
reviewer: hugo
|
|
672
|
+
review_date: "2026-03-15"
|
|
673
|
+
sign_off_date: "2026-03-15"
|
|
674
|
+
verdict: approved
|
|
675
|
+
intent: "Verifies Auditor counts deny list patterns, denied files, and protected files in a project and reports compliance status"
|
|
676
|
+
answers:
|
|
677
|
+
Q1: pass
|
|
678
|
+
Q2: pass
|
|
679
|
+
Q3: pass
|
|
680
|
+
Q4: pass
|
|
681
|
+
Q5: pass
|
|
682
|
+
Q6: pass
|
|
683
|
+
Q7: pass
|
|
684
|
+
Q8: pass
|
|
685
|
+
Q9: pass
|
|
686
|
+
Q10: pass
|
|
687
|
+
findings: []
|
|
688
|
+
|
|
689
|
+
spec/rosett_ai/policy/deny_list_spec.rb:
|
|
690
|
+
status: signed_off
|
|
691
|
+
reviewer: hugo
|
|
692
|
+
review_date: "2026-03-15"
|
|
693
|
+
sign_off_date: "2026-03-15"
|
|
694
|
+
verdict: approved
|
|
695
|
+
intent: "Verifies DenyList matches glob patterns against file paths, supports merge with deduplication, and provides size/empty? collection semantics"
|
|
696
|
+
answers:
|
|
697
|
+
Q1: pass
|
|
698
|
+
Q2: pass
|
|
699
|
+
Q3: pass
|
|
700
|
+
Q4: pass
|
|
701
|
+
Q5: pass
|
|
702
|
+
Q6: pass
|
|
703
|
+
Q7: pass
|
|
704
|
+
Q8: pass
|
|
705
|
+
Q9: pass
|
|
706
|
+
Q10: pass
|
|
707
|
+
findings: []
|
|
708
|
+
|
|
709
|
+
spec/rosett_ai/policy/opt_out_scanner_spec.rb:
|
|
710
|
+
status: signed_off
|
|
711
|
+
reviewer: hugo
|
|
712
|
+
review_date: "2026-03-15"
|
|
713
|
+
sign_off_date: "2026-03-15"
|
|
714
|
+
verdict: approved
|
|
715
|
+
intent: "Verifies OptOutScanner detects AI-MODIFICATION: disabled markers in files and scans batches for opted-out files"
|
|
716
|
+
answers:
|
|
717
|
+
Q1: pass
|
|
718
|
+
Q2: pass
|
|
719
|
+
Q3: pass
|
|
720
|
+
Q4: pass
|
|
721
|
+
Q5: pass
|
|
722
|
+
Q6: pass
|
|
723
|
+
Q7: pass
|
|
724
|
+
Q8: pass
|
|
725
|
+
Q9: pass
|
|
726
|
+
Q10: pass
|
|
727
|
+
findings: []
|
|
728
|
+
|
|
729
|
+
spec/rosett_ai/policy/policy_compiler_spec.rb:
|
|
730
|
+
status: signed_off
|
|
731
|
+
reviewer: hugo
|
|
732
|
+
review_date: "2026-03-15"
|
|
733
|
+
sign_off_date: "2026-03-15"
|
|
734
|
+
verdict: approved
|
|
735
|
+
intent: "Verifies PolicyCompiler compiles deny lists and protected files to engine-specific formats (Claude deniedPaths, Cursor ignore_patterns, AGENTS.md denied_access) with warnings for unknown engines"
|
|
736
|
+
answers:
|
|
737
|
+
Q1: pass
|
|
738
|
+
Q2: pass
|
|
739
|
+
Q3: pass
|
|
740
|
+
Q4: pass
|
|
741
|
+
Q5: pass
|
|
742
|
+
Q6: pass
|
|
743
|
+
Q7: pass
|
|
744
|
+
Q8: pass
|
|
745
|
+
Q9: pass
|
|
746
|
+
Q10: pass
|
|
747
|
+
findings: []
|
|
748
|
+
|
|
749
|
+
spec/rosett_ai/policy/protected_files_spec.rb:
|
|
750
|
+
status: signed_off
|
|
751
|
+
reviewer: hugo
|
|
752
|
+
review_date: "2026-03-15"
|
|
753
|
+
sign_off_date: "2026-03-15"
|
|
754
|
+
verdict: approved
|
|
755
|
+
intent: "Verifies ProtectedFiles identifies protected paths, supports merge with deduplication, and provides size/empty? collection semantics"
|
|
756
|
+
answers:
|
|
757
|
+
Q1: pass
|
|
758
|
+
Q2: pass
|
|
759
|
+
Q3: pass
|
|
760
|
+
Q4: pass
|
|
761
|
+
Q5: pass
|
|
762
|
+
Q6: pass
|
|
763
|
+
Q7: pass
|
|
764
|
+
Q8: pass
|
|
765
|
+
Q9: pass
|
|
766
|
+
Q10: pass
|
|
767
|
+
findings: []
|
|
768
|
+
|
|
769
|
+
spec/rosett_ai/policy/tier_hierarchy_spec.rb:
|
|
770
|
+
status: signed_off
|
|
771
|
+
reviewer: hugo
|
|
772
|
+
review_date: "2026-03-15"
|
|
773
|
+
sign_off_date: "2026-03-15"
|
|
774
|
+
verdict: approved
|
|
775
|
+
intent: "Verifies TierHierarchy enforces tighten-only pattern (child can add but not remove deny patterns) and validates tier/scope enum values"
|
|
776
|
+
answers:
|
|
777
|
+
Q1: pass
|
|
778
|
+
Q2: pass
|
|
779
|
+
Q3: pass
|
|
780
|
+
Q4: pass
|
|
781
|
+
Q5: pass
|
|
782
|
+
Q6: pass
|
|
783
|
+
Q7: pass
|
|
784
|
+
Q8: pass
|
|
785
|
+
Q9: pass
|
|
786
|
+
Q10: pass
|
|
787
|
+
findings: []
|
|
788
|
+
|
|
789
|
+
spec/rosett_ai/policy/validator_spec.rb:
|
|
790
|
+
status: signed_off
|
|
791
|
+
reviewer: hugo
|
|
792
|
+
review_date: "2026-03-15"
|
|
793
|
+
sign_off_date: "2026-03-15"
|
|
794
|
+
verdict: approved
|
|
795
|
+
intent: "Verifies Validator catches missing policy_version/tier fields, rejects invalid tier and scope enum values, and provides valid? convenience method"
|
|
796
|
+
answers:
|
|
797
|
+
Q1: pass
|
|
798
|
+
Q2: pass
|
|
799
|
+
Q3: pass
|
|
800
|
+
Q4: pass
|
|
801
|
+
Q5: pass
|
|
802
|
+
Q6: pass
|
|
803
|
+
Q7: pass
|
|
804
|
+
Q8: pass
|
|
805
|
+
Q9: pass
|
|
806
|
+
Q10: pass
|
|
807
|
+
findings: []
|
|
808
|
+
|
|
809
|
+
spec/rosett_ai/provenance/entry_spec.rb:
|
|
810
|
+
status: signed_off
|
|
811
|
+
reviewer: hugo
|
|
812
|
+
review_date: "2026-03-15"
|
|
813
|
+
sign_off_date: "2026-03-15"
|
|
814
|
+
verdict: approved
|
|
815
|
+
intent: "Verifies Entry immutable record stores AI contribution metadata, freezes all attributes, defaults timestamp, rejects invalid roles, and serializes via to_h"
|
|
816
|
+
answers:
|
|
817
|
+
Q1: pass
|
|
818
|
+
Q2: pass
|
|
819
|
+
Q3: pass
|
|
820
|
+
Q4: pass
|
|
821
|
+
Q5: pass
|
|
822
|
+
Q6: pass
|
|
823
|
+
Q7: pass
|
|
824
|
+
Q8: pass
|
|
825
|
+
Q9: pass
|
|
826
|
+
Q10: pass
|
|
827
|
+
findings: []
|
|
828
|
+
|
|
829
|
+
spec/rosett_ai/provenance/file_source_spec.rb:
|
|
830
|
+
status: signed_off
|
|
831
|
+
reviewer: hugo
|
|
832
|
+
review_date: "2026-03-15"
|
|
833
|
+
sign_off_date: "2026-03-15"
|
|
834
|
+
verdict: approved
|
|
835
|
+
intent: "Verifies FileSource value object stores path/source_type/optional lines, freezes attributes, and conditionally serializes lines in to_h"
|
|
836
|
+
answers:
|
|
837
|
+
Q1: pass
|
|
838
|
+
Q2: pass
|
|
839
|
+
Q3: pass
|
|
840
|
+
Q4: pass
|
|
841
|
+
Q5: pass
|
|
842
|
+
Q6: pass
|
|
843
|
+
Q7: pass
|
|
844
|
+
Q8: pass
|
|
845
|
+
Q9: pass
|
|
846
|
+
Q10: pass
|
|
847
|
+
findings: []
|
|
848
|
+
|
|
849
|
+
spec/rosett_ai/provenance/source_spec.rb:
|
|
850
|
+
status: signed_off
|
|
851
|
+
reviewer: hugo
|
|
852
|
+
review_date: "2026-03-15"
|
|
853
|
+
sign_off_date: "2026-03-15"
|
|
854
|
+
verdict: approved
|
|
855
|
+
intent: "Verifies Source validates type against ALLOWED_TYPES, requires specific URL for external_source, freezes attributes, and serializes conditionally"
|
|
856
|
+
answers:
|
|
857
|
+
Q1: pass
|
|
858
|
+
Q2: pass
|
|
859
|
+
Q3: pass
|
|
860
|
+
Q4: pass
|
|
861
|
+
Q5: pass
|
|
862
|
+
Q6: pass
|
|
863
|
+
Q7: pass
|
|
864
|
+
Q8: pass
|
|
865
|
+
Q9: pass
|
|
866
|
+
Q10: pass
|
|
867
|
+
findings: []
|
|
868
|
+
|
|
869
|
+
spec/rosett_ai/provenance/store_spec.rb:
|
|
870
|
+
status: signed_off
|
|
871
|
+
reviewer: hugo
|
|
872
|
+
review_date: "2026-03-15"
|
|
873
|
+
sign_off_date: "2026-03-15"
|
|
874
|
+
verdict: approved
|
|
875
|
+
intent: "Verifies Store manages append-only YAML provenance file with init/append/read/query-by-commit/query-by-file operations and raises on missing files"
|
|
876
|
+
answers:
|
|
877
|
+
Q1: pass
|
|
878
|
+
Q2: pass
|
|
879
|
+
Q3: pass
|
|
880
|
+
Q4: pass
|
|
881
|
+
Q5: pass
|
|
882
|
+
Q6: pass
|
|
883
|
+
Q7: pass
|
|
884
|
+
Q8: pass
|
|
885
|
+
Q9: pass
|
|
886
|
+
Q10: pass
|
|
887
|
+
findings: []
|
|
888
|
+
|
|
889
|
+
spec/rosett_ai/provenance/trailer_generator_spec.rb:
|
|
890
|
+
status: signed_off
|
|
891
|
+
reviewer: hugo
|
|
892
|
+
review_date: "2026-03-15"
|
|
893
|
+
sign_off_date: "2026-03-15"
|
|
894
|
+
verdict: approved
|
|
895
|
+
intent: "Verifies TrailerGenerator formats AI provenance as git trailer lines, deduplicates across entries, and produces newline-separated trailer blocks"
|
|
896
|
+
answers:
|
|
897
|
+
Q1: pass
|
|
898
|
+
Q2: pass
|
|
899
|
+
Q3: pass
|
|
900
|
+
Q4: pass
|
|
901
|
+
Q5: pass
|
|
902
|
+
Q6: pass
|
|
903
|
+
Q7: pass
|
|
904
|
+
Q8: pass
|
|
905
|
+
Q9: pass
|
|
906
|
+
Q10: pass
|
|
907
|
+
findings: []
|
|
908
|
+
|
|
909
|
+
spec/rosett_ai/provenance/validator_spec.rb:
|
|
910
|
+
status: signed_off
|
|
911
|
+
reviewer: hugo
|
|
912
|
+
review_date: "2026-03-15"
|
|
913
|
+
sign_off_date: "2026-03-15"
|
|
914
|
+
verdict: approved
|
|
915
|
+
intent: "Verifies Validator checks provenance YAML structure including version, commit SHA format, ai_role enum, and source_type enum"
|
|
916
|
+
answers:
|
|
917
|
+
Q1: pass
|
|
918
|
+
Q2: pass
|
|
919
|
+
Q3: pass
|
|
920
|
+
Q4: pass
|
|
921
|
+
Q5: pass
|
|
922
|
+
Q6: pass
|
|
923
|
+
Q7: pass
|
|
924
|
+
Q8: pass
|
|
925
|
+
Q9: pass
|
|
926
|
+
Q10: pass
|
|
927
|
+
findings: []
|
|
928
|
+
|
|
929
|
+
spec/rosett_ai/authorship/attribution_compiler_spec.rb:
|
|
930
|
+
status: signed_off
|
|
931
|
+
reviewer: hugo
|
|
932
|
+
review_date: "2026-03-15"
|
|
933
|
+
sign_off_date: "2026-03-15"
|
|
934
|
+
verdict: approved
|
|
935
|
+
intent: "Verifies AttributionCompiler produces disclosure-level-appropriate output: none (nil), minimal (HTML comment), standard (heading + trailers), full (per-file involvement)"
|
|
936
|
+
answers:
|
|
937
|
+
Q1: pass
|
|
938
|
+
Q2: pass
|
|
939
|
+
Q3: pass
|
|
940
|
+
Q4: pass
|
|
941
|
+
Q5: pass
|
|
942
|
+
Q6: pass
|
|
943
|
+
Q7: pass
|
|
944
|
+
Q8: pass
|
|
945
|
+
Q9: pass
|
|
946
|
+
Q10: pass
|
|
947
|
+
findings: []
|
|
948
|
+
|
|
949
|
+
spec/rosett_ai/authorship/disclosure_policy_spec.rb:
|
|
950
|
+
status: signed_off
|
|
951
|
+
reviewer: hugo
|
|
952
|
+
review_date: "2026-03-15"
|
|
953
|
+
sign_off_date: "2026-03-15"
|
|
954
|
+
verdict: approved
|
|
955
|
+
intent: "Verifies DisclosurePolicy enum class validates levels and exposes disclose?/include_attribution?/include_per_file?/include_trailer_guidance? query methods"
|
|
956
|
+
answers:
|
|
957
|
+
Q1: pass
|
|
958
|
+
Q2: pass
|
|
959
|
+
Q3: pass
|
|
960
|
+
Q4: pass
|
|
961
|
+
Q5: pass
|
|
962
|
+
Q6: pass
|
|
963
|
+
Q7: pass
|
|
964
|
+
Q8: pass
|
|
965
|
+
Q9: pass
|
|
966
|
+
Q10: pass
|
|
967
|
+
findings: []
|
|
968
|
+
|
|
969
|
+
spec/rosett_ai/authorship/review_validator_spec.rb:
|
|
970
|
+
status: signed_off
|
|
971
|
+
reviewer: hugo
|
|
972
|
+
review_date: "2026-03-15"
|
|
973
|
+
sign_off_date: "2026-03-15"
|
|
974
|
+
verdict: approved
|
|
975
|
+
intent: "Verifies ReviewValidator prevents self-review with case/whitespace normalization and handles nil author/reviewer gracefully"
|
|
976
|
+
answers:
|
|
977
|
+
Q1: pass
|
|
978
|
+
Q2: pass
|
|
979
|
+
Q3: pass
|
|
980
|
+
Q4: pass
|
|
981
|
+
Q5: pass
|
|
982
|
+
Q6: pass
|
|
983
|
+
Q7: pass
|
|
984
|
+
Q8: pass
|
|
985
|
+
Q9: pass
|
|
986
|
+
Q10: pass
|
|
987
|
+
findings: []
|
|
988
|
+
|
|
989
|
+
spec/rosett_ai/authorship/trailer_generator_spec.rb:
|
|
990
|
+
status: signed_off
|
|
991
|
+
reviewer: hugo
|
|
992
|
+
review_date: "2026-03-15"
|
|
993
|
+
sign_off_date: "2026-03-15"
|
|
994
|
+
verdict: approved
|
|
995
|
+
intent: "Verifies TrailerGenerator formats AI role trailers for all four roles, validates roles, and produces newline-separated trailer blocks"
|
|
996
|
+
answers:
|
|
997
|
+
Q1: pass
|
|
998
|
+
Q2: pass
|
|
999
|
+
Q3: pass
|
|
1000
|
+
Q4: pass
|
|
1001
|
+
Q5: pass
|
|
1002
|
+
Q6: pass
|
|
1003
|
+
Q7: pass
|
|
1004
|
+
Q8: pass
|
|
1005
|
+
Q9: pass
|
|
1006
|
+
Q10: pass
|
|
1007
|
+
findings: []
|
|
1008
|
+
|
|
1009
|
+
spec/rosett_ai/ai_config/config_compiler_spec.rb:
|
|
1010
|
+
status: signed_off
|
|
1011
|
+
reviewer: hugo
|
|
1012
|
+
review_date: "2026-03-15"
|
|
1013
|
+
sign_off_date: "2026-03-15"
|
|
1014
|
+
verdict: approved
|
|
1015
|
+
intent: "Verifies ConfigCompiler resolves model routing (tier→model), context window, and cost controls per engine, with strict mode and custom model support"
|
|
1016
|
+
answers:
|
|
1017
|
+
Q1: pass
|
|
1018
|
+
Q2: pass
|
|
1019
|
+
Q3: pass
|
|
1020
|
+
Q4: pass
|
|
1021
|
+
Q5: pass
|
|
1022
|
+
Q6: pass
|
|
1023
|
+
Q7: pass
|
|
1024
|
+
Q8: pass
|
|
1025
|
+
Q9: pass
|
|
1026
|
+
Q10: pass
|
|
1027
|
+
findings: []
|
|
1028
|
+
|
|
1029
|
+
spec/rosett_ai/ai_config/context_window_spec.rb:
|
|
1030
|
+
status: signed_off
|
|
1031
|
+
reviewer: hugo
|
|
1032
|
+
review_date: "2026-03-15"
|
|
1033
|
+
sign_off_date: "2026-03-15"
|
|
1034
|
+
verdict: approved
|
|
1035
|
+
intent: "Verifies ContextWindow value object stores max_tokens/output_reserve/truncation_strategy, calculates effective_input_tokens, and validates strategy enum"
|
|
1036
|
+
answers:
|
|
1037
|
+
Q1: pass
|
|
1038
|
+
Q2: pass
|
|
1039
|
+
Q3: pass
|
|
1040
|
+
Q4: pass
|
|
1041
|
+
Q5: pass
|
|
1042
|
+
Q6: pass
|
|
1043
|
+
Q7: pass
|
|
1044
|
+
Q8: pass
|
|
1045
|
+
Q9: pass
|
|
1046
|
+
Q10: pass
|
|
1047
|
+
findings: []
|
|
1048
|
+
|
|
1049
|
+
spec/rosett_ai/ai_config/cost_controls_spec.rb:
|
|
1050
|
+
status: signed_off
|
|
1051
|
+
reviewer: hugo
|
|
1052
|
+
review_date: "2026-03-15"
|
|
1053
|
+
sign_off_date: "2026-03-15"
|
|
1054
|
+
verdict: approved
|
|
1055
|
+
intent: "Verifies CostControls value object stores preferred_tier with validation, optional monthly_budget_note, and conditional to_h serialization"
|
|
1056
|
+
answers:
|
|
1057
|
+
Q1: pass
|
|
1058
|
+
Q2: pass
|
|
1059
|
+
Q3: pass
|
|
1060
|
+
Q4: pass
|
|
1061
|
+
Q5: pass
|
|
1062
|
+
Q6: pass
|
|
1063
|
+
Q7: pass
|
|
1064
|
+
Q8: pass
|
|
1065
|
+
Q9: pass
|
|
1066
|
+
Q10: pass
|
|
1067
|
+
findings: []
|
|
1068
|
+
|
|
1069
|
+
spec/rosett_ai/ai_config/fallback_chain_spec.rb:
|
|
1070
|
+
status: signed_off
|
|
1071
|
+
reviewer: hugo
|
|
1072
|
+
review_date: "2026-03-15"
|
|
1073
|
+
sign_off_date: "2026-03-15"
|
|
1074
|
+
verdict: approved
|
|
1075
|
+
intent: "Verifies FallbackChain stores ordered engine list, detects local-to-remote transitions with warnings, exposes primary/fallbacks, and serializes via to_h"
|
|
1076
|
+
answers:
|
|
1077
|
+
Q1: pass
|
|
1078
|
+
Q2: pass
|
|
1079
|
+
Q3: pass
|
|
1080
|
+
Q4: pass
|
|
1081
|
+
Q5: pass
|
|
1082
|
+
Q6: pass
|
|
1083
|
+
Q7: pass
|
|
1084
|
+
Q8: pass
|
|
1085
|
+
Q9: pass
|
|
1086
|
+
Q10: pass
|
|
1087
|
+
findings: []
|
|
1088
|
+
|
|
1089
|
+
spec/rosett_ai/ai_config/model_router_spec.rb:
|
|
1090
|
+
status: signed_off
|
|
1091
|
+
reviewer: hugo
|
|
1092
|
+
review_date: "2026-03-15"
|
|
1093
|
+
sign_off_date: "2026-03-15"
|
|
1094
|
+
verdict: approved
|
|
1095
|
+
intent: "Verifies ModelRouter maps canonical tiers to engine-specific models (Claude haiku/sonnet/opus, Ollama 3b/70b), supports custom:model syntax, and allows custom engine mappings"
|
|
1096
|
+
answers:
|
|
1097
|
+
Q1: pass
|
|
1098
|
+
Q2: pass
|
|
1099
|
+
Q3: pass
|
|
1100
|
+
Q4: pass
|
|
1101
|
+
Q5: pass
|
|
1102
|
+
Q6: pass
|
|
1103
|
+
Q7: pass
|
|
1104
|
+
Q8: pass
|
|
1105
|
+
Q9: pass
|
|
1106
|
+
Q10: pass
|
|
1107
|
+
findings: []
|
|
1108
|
+
|
|
1109
|
+
spec/rosett_ai/ai_config/validator_spec.rb:
|
|
1110
|
+
status: signed_off
|
|
1111
|
+
reviewer: hugo
|
|
1112
|
+
review_date: "2026-03-15"
|
|
1113
|
+
sign_off_date: "2026-03-15"
|
|
1114
|
+
verdict: approved
|
|
1115
|
+
intent: "Verifies Validator catches invalid truncation_strategy, preferred_tier, and model tier patterns while accepting empty config and custom:model format"
|
|
1116
|
+
answers:
|
|
1117
|
+
Q1: pass
|
|
1118
|
+
Q2: pass
|
|
1119
|
+
Q3: pass
|
|
1120
|
+
Q4: pass
|
|
1121
|
+
Q5: pass
|
|
1122
|
+
Q6: pass
|
|
1123
|
+
Q7: pass
|
|
1124
|
+
Q8: pass
|
|
1125
|
+
Q9: pass
|
|
1126
|
+
Q10: pass
|
|
1127
|
+
findings: []
|
|
1128
|
+
|
|
1129
|
+
# --- Batch 5: Configuration System (reviewed 2026-03-15) ---
|
|
1130
|
+
|
|
1131
|
+
spec/rosett_ai/config/compile_result_spec.rb:
|
|
1132
|
+
status: signed_off
|
|
1133
|
+
reviewer: hugo
|
|
1134
|
+
review_date: "2026-03-15"
|
|
1135
|
+
sign_off_date: "2026-03-15"
|
|
1136
|
+
verdict: approved
|
|
1137
|
+
intent: "Verifies CompileResult value object exposes success?/changed? predicates for action types (created/updated/unchanged/skipped) and defaults warnings"
|
|
1138
|
+
answers:
|
|
1139
|
+
Q1: pass
|
|
1140
|
+
Q2: pass
|
|
1141
|
+
Q3: pass
|
|
1142
|
+
Q4: pass
|
|
1143
|
+
Q5: pass
|
|
1144
|
+
Q6: pass
|
|
1145
|
+
Q7: pass
|
|
1146
|
+
Q8: pass
|
|
1147
|
+
Q9: pass
|
|
1148
|
+
Q10: pass
|
|
1149
|
+
findings: []
|
|
1150
|
+
|
|
1151
|
+
spec/rosett_ai/config/key_map_spec.rb:
|
|
1152
|
+
status: signed_off
|
|
1153
|
+
reviewer: hugo
|
|
1154
|
+
review_date: "2026-03-15"
|
|
1155
|
+
sign_off_date: "2026-03-15"
|
|
1156
|
+
verdict: approved
|
|
1157
|
+
intent: "Verifies deprecated RosettAi::Config::KeyMap alias resolves to RosettAiEngine::Claude::KeyMap when engine gem is installed"
|
|
1158
|
+
answers:
|
|
1159
|
+
Q1: pass
|
|
1160
|
+
Q2: pass
|
|
1161
|
+
Q3: pass
|
|
1162
|
+
Q4: pass
|
|
1163
|
+
Q5: pass
|
|
1164
|
+
Q6: pass
|
|
1165
|
+
Q7: pass
|
|
1166
|
+
Q8: pass
|
|
1167
|
+
Q9: pass
|
|
1168
|
+
Q10: pass
|
|
1169
|
+
findings: []
|
|
1170
|
+
|
|
1171
|
+
spec/rosett_ai/config/masking_secret_resolver_spec.rb:
|
|
1172
|
+
status: signed_off
|
|
1173
|
+
reviewer: hugo
|
|
1174
|
+
review_date: "2026-03-15"
|
|
1175
|
+
sign_off_date: "2026-03-15"
|
|
1176
|
+
verdict: approved
|
|
1177
|
+
intent: "Verifies MaskingSecretResolver replaces secret references with *** for safe display, handles nested structures, preserves non-secret and non-string values"
|
|
1178
|
+
answers:
|
|
1179
|
+
Q1: pass
|
|
1180
|
+
Q2: pass
|
|
1181
|
+
Q3: pass
|
|
1182
|
+
Q4: pass
|
|
1183
|
+
Q5: pass
|
|
1184
|
+
Q6: pass
|
|
1185
|
+
Q7: pass
|
|
1186
|
+
Q8: pass
|
|
1187
|
+
Q9: pass
|
|
1188
|
+
Q10: pass
|
|
1189
|
+
findings: []
|
|
1190
|
+
|
|
1191
|
+
spec/rosett_ai/config/scope_router_spec.rb:
|
|
1192
|
+
status: signed_off
|
|
1193
|
+
reviewer: hugo
|
|
1194
|
+
review_date: "2026-03-15"
|
|
1195
|
+
sign_off_date: "2026-03-15"
|
|
1196
|
+
verdict: approved
|
|
1197
|
+
intent: "Verifies deprecated RosettAi::Config::ScopeRouter alias resolves to RosettAiEngine::Claude::ScopeRouter when engine gem is installed"
|
|
1198
|
+
answers:
|
|
1199
|
+
Q1: pass
|
|
1200
|
+
Q2: pass
|
|
1201
|
+
Q3: pass
|
|
1202
|
+
Q4: pass
|
|
1203
|
+
Q5: pass
|
|
1204
|
+
Q6: pass
|
|
1205
|
+
Q7: pass
|
|
1206
|
+
Q8: pass
|
|
1207
|
+
Q9: pass
|
|
1208
|
+
Q10: pass
|
|
1209
|
+
findings: []
|
|
1210
|
+
|
|
1211
|
+
spec/rosett_ai/config/secret_resolver_spec.rb:
|
|
1212
|
+
status: signed_off
|
|
1213
|
+
reviewer: hugo
|
|
1214
|
+
review_date: "2026-03-15"
|
|
1215
|
+
sign_off_date: "2026-03-15"
|
|
1216
|
+
verdict: approved
|
|
1217
|
+
intent: "Verifies SecretResolver resolves env/file/path backends with security validation (0600 perms, UID ownership, path traversal, 64 KiB limit, single-pass guarantee, no regex)"
|
|
1218
|
+
answers:
|
|
1219
|
+
Q1: pass
|
|
1220
|
+
Q2: pass
|
|
1221
|
+
Q3: pass
|
|
1222
|
+
Q4: pass
|
|
1223
|
+
Q5: pass
|
|
1224
|
+
Q6: pass
|
|
1225
|
+
Q7: pass
|
|
1226
|
+
Q8: pass
|
|
1227
|
+
Q9: pass
|
|
1228
|
+
Q10: pass
|
|
1229
|
+
findings: []
|
|
1230
|
+
|
|
1231
|
+
spec/rosett_ai/backup/compressor_spec.rb:
|
|
1232
|
+
status: signed_off
|
|
1233
|
+
reviewer: hugo
|
|
1234
|
+
review_date: "2026-03-15"
|
|
1235
|
+
sign_off_date: "2026-03-15"
|
|
1236
|
+
verdict: approved
|
|
1237
|
+
intent: "Verifies Compressor abstract base and three implementations (TarGz/Zip/TarXz) create valid archives with compression levels and proper error handling"
|
|
1238
|
+
answers:
|
|
1239
|
+
Q1: pass
|
|
1240
|
+
Q2: pass
|
|
1241
|
+
Q3: pass
|
|
1242
|
+
Q4: pass
|
|
1243
|
+
Q5: pass
|
|
1244
|
+
Q6: pass
|
|
1245
|
+
Q7: pass
|
|
1246
|
+
Q8: pass
|
|
1247
|
+
Q9: pass
|
|
1248
|
+
Q10: pass
|
|
1249
|
+
findings: []
|
|
1250
|
+
|
|
1251
|
+
spec/rosett_ai/backup/destination_spec.rb:
|
|
1252
|
+
status: signed_off
|
|
1253
|
+
reviewer: hugo
|
|
1254
|
+
review_date: "2026-03-15"
|
|
1255
|
+
sign_off_date: "2026-03-15"
|
|
1256
|
+
verdict: approved
|
|
1257
|
+
intent: "Verifies Destination abstract base, FileDestination (copy + mkdir), UnsupportedDestination (s3/ssh), and scheme parsing with file:// URI support"
|
|
1258
|
+
answers:
|
|
1259
|
+
Q1: pass
|
|
1260
|
+
Q2: pass
|
|
1261
|
+
Q3: pass
|
|
1262
|
+
Q4: pass
|
|
1263
|
+
Q5: pass
|
|
1264
|
+
Q6: pass
|
|
1265
|
+
Q7: pass
|
|
1266
|
+
Q8: pass
|
|
1267
|
+
Q9: pass
|
|
1268
|
+
Q10: pass
|
|
1269
|
+
findings: []
|
|
1270
|
+
|
|
1271
|
+
spec/rosett_ai/init/config_file_writer_spec.rb:
|
|
1272
|
+
status: signed_off
|
|
1273
|
+
reviewer: hugo
|
|
1274
|
+
review_date: "2026-03-15"
|
|
1275
|
+
sign_off_date: "2026-03-15"
|
|
1276
|
+
verdict: approved
|
|
1277
|
+
intent: "Verifies ConfigFileWriter creates default config.yml with engine default, returns unchanged for existing files, and creates parent directories"
|
|
1278
|
+
answers:
|
|
1279
|
+
Q1: pass
|
|
1280
|
+
Q2: pass
|
|
1281
|
+
Q3: pass
|
|
1282
|
+
Q4: pass
|
|
1283
|
+
Q5: pass
|
|
1284
|
+
Q6: pass
|
|
1285
|
+
Q7: pass
|
|
1286
|
+
Q8: pass
|
|
1287
|
+
Q9: pass
|
|
1288
|
+
Q10: pass
|
|
1289
|
+
findings: []
|
|
1290
|
+
|
|
1291
|
+
# --- Batch 6: Content & Licensing (reviewed 2026-03-15) ---
|
|
1292
|
+
|
|
1293
|
+
spec/rosett_ai/content/content_client_spec.rb:
|
|
1294
|
+
status: signed_off
|
|
1295
|
+
reviewer: hugo
|
|
1296
|
+
review_date: "2026-03-15"
|
|
1297
|
+
sign_off_date: "2026-03-15"
|
|
1298
|
+
verdict: approved
|
|
1299
|
+
intent: "Verifies ContentClient issues authenticated HTTP requests (Bearer token) for catalog/download/signature/availability with WebMock-stubbed success, error, and connection failure paths"
|
|
1300
|
+
answers:
|
|
1301
|
+
Q1: pass
|
|
1302
|
+
Q2: pass
|
|
1303
|
+
Q3: pass
|
|
1304
|
+
Q4: pass
|
|
1305
|
+
Q5: pass
|
|
1306
|
+
Q6: pass
|
|
1307
|
+
Q7: pass
|
|
1308
|
+
Q8: pass
|
|
1309
|
+
Q9: pass
|
|
1310
|
+
Q10: pass
|
|
1311
|
+
findings: []
|
|
1312
|
+
|
|
1313
|
+
spec/rosett_ai/content/pack_installer_spec.rb:
|
|
1314
|
+
status: signed_off
|
|
1315
|
+
reviewer: hugo
|
|
1316
|
+
review_date: "2026-03-15"
|
|
1317
|
+
sign_off_date: "2026-03-15"
|
|
1318
|
+
verdict: approved
|
|
1319
|
+
intent: "Verifies PackInstaller extracts Ed25519-signed tarballs, rejects tampered signatures and path traversal attacks (../../../etc/passwd), and creates pack directories"
|
|
1320
|
+
answers:
|
|
1321
|
+
Q1: pass
|
|
1322
|
+
Q2: pass
|
|
1323
|
+
Q3: pass
|
|
1324
|
+
Q4: pass
|
|
1325
|
+
Q5: pass
|
|
1326
|
+
Q6: pass
|
|
1327
|
+
Q7: pass
|
|
1328
|
+
Q8: pass
|
|
1329
|
+
Q9: pass
|
|
1330
|
+
Q10: pass
|
|
1331
|
+
findings: []
|
|
1332
|
+
|
|
1333
|
+
spec/rosett_ai/content/pack_manifest_spec.rb:
|
|
1334
|
+
status: signed_off
|
|
1335
|
+
reviewer: hugo
|
|
1336
|
+
review_date: "2026-03-15"
|
|
1337
|
+
sign_off_date: "2026-03-15"
|
|
1338
|
+
verdict: approved
|
|
1339
|
+
intent: "Verifies PackManifest validates required fields (name, version, tier_required), rejects invalid patterns/semver/tiers, and loads from YAML files"
|
|
1340
|
+
answers:
|
|
1341
|
+
Q1: pass
|
|
1342
|
+
Q2: pass
|
|
1343
|
+
Q3: pass
|
|
1344
|
+
Q4: pass
|
|
1345
|
+
Q5: pass
|
|
1346
|
+
Q6: pass
|
|
1347
|
+
Q7: pass
|
|
1348
|
+
Q8: pass
|
|
1349
|
+
Q9: pass
|
|
1350
|
+
Q10: pass
|
|
1351
|
+
findings: []
|
|
1352
|
+
|
|
1353
|
+
spec/rosett_ai/content/pack_registry_spec.rb:
|
|
1354
|
+
status: signed_off
|
|
1355
|
+
reviewer: hugo
|
|
1356
|
+
review_date: "2026-03-15"
|
|
1357
|
+
sign_off_date: "2026-03-15"
|
|
1358
|
+
verdict: approved
|
|
1359
|
+
intent: "Verifies PackRegistry scans premium directory for installed packs, skips dirs without manifests, and supports version query and removal"
|
|
1360
|
+
answers:
|
|
1361
|
+
Q1: pass
|
|
1362
|
+
Q2: pass
|
|
1363
|
+
Q3: pass
|
|
1364
|
+
Q4: pass
|
|
1365
|
+
Q5: pass
|
|
1366
|
+
Q6: pass
|
|
1367
|
+
Q7: pass
|
|
1368
|
+
Q8: pass
|
|
1369
|
+
Q9: pass
|
|
1370
|
+
Q10: pass
|
|
1371
|
+
findings: []
|
|
1372
|
+
|
|
1373
|
+
spec/rosett_ai/licensing/license_key_spec.rb:
|
|
1374
|
+
status: signed_off
|
|
1375
|
+
reviewer: hugo
|
|
1376
|
+
review_date: "2026-03-15"
|
|
1377
|
+
sign_off_date: "2026-03-15"
|
|
1378
|
+
verdict: approved
|
|
1379
|
+
intent: "Verifies LicenseKey decodes Ed25519-signed JWT tokens, rejects forged keys, enforces 14-day grace period, supports perpetual/subscription/offline modes, and resists property-based fuzzing"
|
|
1380
|
+
answers:
|
|
1381
|
+
Q1: pass
|
|
1382
|
+
Q2: pass
|
|
1383
|
+
Q3: pass
|
|
1384
|
+
Q4: pass
|
|
1385
|
+
Q5: pass
|
|
1386
|
+
Q6: pass
|
|
1387
|
+
Q7: pass
|
|
1388
|
+
Q8: pass
|
|
1389
|
+
Q9: pass
|
|
1390
|
+
Q10: pass
|
|
1391
|
+
findings: []
|
|
1392
|
+
|
|
1393
|
+
spec/rosett_ai/licensing/license_store_spec.rb:
|
|
1394
|
+
status: signed_off
|
|
1395
|
+
reviewer: hugo
|
|
1396
|
+
review_date: "2026-03-15"
|
|
1397
|
+
sign_off_date: "2026-03-15"
|
|
1398
|
+
verdict: approved
|
|
1399
|
+
intent: "Verifies LicenseStore saves keys with 0600 file / 0700 dir permissions, rejects insecure permissions on load, strips trailing newlines, and supports remove/exists?"
|
|
1400
|
+
answers:
|
|
1401
|
+
Q1: pass
|
|
1402
|
+
Q2: pass
|
|
1403
|
+
Q3: pass
|
|
1404
|
+
Q4: pass
|
|
1405
|
+
Q5: pass
|
|
1406
|
+
Q6: pass
|
|
1407
|
+
Q7: pass
|
|
1408
|
+
Q8: pass
|
|
1409
|
+
Q9: pass
|
|
1410
|
+
Q10: pass
|
|
1411
|
+
findings: []
|
|
1412
|
+
|
|
1413
|
+
spec/rosett_ai/licensing/license_validator_spec.rb:
|
|
1414
|
+
status: signed_off
|
|
1415
|
+
reviewer: hugo
|
|
1416
|
+
review_date: "2026-03-15"
|
|
1417
|
+
sign_off_date: "2026-03-15"
|
|
1418
|
+
verdict: approved
|
|
1419
|
+
intent: "Verifies LicenseValidator integration: no-license returns community tier, valid perpetual key returns supporter, forged key falls back to community with error, and grace period produces warnings"
|
|
1420
|
+
answers:
|
|
1421
|
+
Q1: pass
|
|
1422
|
+
Q2: pass
|
|
1423
|
+
Q3: pass
|
|
1424
|
+
Q4: pass
|
|
1425
|
+
Q5: pass
|
|
1426
|
+
Q6: pass
|
|
1427
|
+
Q7: pass
|
|
1428
|
+
Q8: pass
|
|
1429
|
+
Q9: pass
|
|
1430
|
+
Q10: pass
|
|
1431
|
+
findings: []
|
|
1432
|
+
|
|
1433
|
+
spec/rosett_ai/licensing/tier_spec.rb:
|
|
1434
|
+
status: signed_off
|
|
1435
|
+
reviewer: hugo
|
|
1436
|
+
review_date: "2026-03-15"
|
|
1437
|
+
sign_off_date: "2026-03-15"
|
|
1438
|
+
verdict: approved
|
|
1439
|
+
intent: "Verifies Tier implements Comparable ordering (community < supporter < subscriber < enterprise), entitled_to? boundary checks, string input coercion, and invalid tier rejection"
|
|
1440
|
+
answers:
|
|
1441
|
+
Q1: pass
|
|
1442
|
+
Q2: pass
|
|
1443
|
+
Q3: pass
|
|
1444
|
+
Q4: pass
|
|
1445
|
+
Q5: pass
|
|
1446
|
+
Q6: pass
|
|
1447
|
+
Q7: pass
|
|
1448
|
+
Q8: pass
|
|
1449
|
+
Q9: pass
|
|
1450
|
+
Q10: pass
|
|
1451
|
+
findings: []
|
|
1452
|
+
|
|
1453
|
+
spec/rosett_ai/packaging/variant_config_spec.rb:
|
|
1454
|
+
status: signed_off
|
|
1455
|
+
reviewer: hugo
|
|
1456
|
+
review_date: "2026-03-15"
|
|
1457
|
+
sign_off_date: "2026-03-15"
|
|
1458
|
+
verdict: approved
|
|
1459
|
+
intent: "Verifies VariantConfig loads core/gtk4/qt6 packaging variants with schema validation, resolves dynamic VERSION dependencies, and produces fpm_depends arrays"
|
|
1460
|
+
answers:
|
|
1461
|
+
Q1: pass
|
|
1462
|
+
Q2: pass
|
|
1463
|
+
Q3: pass
|
|
1464
|
+
Q4: pass
|
|
1465
|
+
Q5: pass
|
|
1466
|
+
Q6: pass
|
|
1467
|
+
Q7: pass
|
|
1468
|
+
Q8: pass
|
|
1469
|
+
Q9: pass
|
|
1470
|
+
Q10: pass
|
|
1471
|
+
findings: []
|
|
1472
|
+
|
|
1473
|
+
spec/rosett_ai/text_sanitizer_spec.rb:
|
|
1474
|
+
status: signed_off
|
|
1475
|
+
reviewer: hugo
|
|
1476
|
+
review_date: "2026-03-15"
|
|
1477
|
+
sign_off_date: "2026-03-15"
|
|
1478
|
+
verdict: approved
|
|
1479
|
+
intent: "Verifies TextSanitizer strips ANSI escape sequences (SGR, cursor, OSC, control chars), normalizes NFC with encoding conversion, and recursively sanitizes nested hash/array structures"
|
|
1480
|
+
answers:
|
|
1481
|
+
Q1: pass
|
|
1482
|
+
Q2: pass
|
|
1483
|
+
Q3: pass
|
|
1484
|
+
Q4: pass
|
|
1485
|
+
Q5: pass
|
|
1486
|
+
Q6: pass
|
|
1487
|
+
Q7: pass
|
|
1488
|
+
Q8: pass
|
|
1489
|
+
Q9: pass
|
|
1490
|
+
Q10: pass
|
|
1491
|
+
findings: []
|
|
1492
|
+
|
|
1493
|
+
spec/gemspec_spec.rb:
|
|
1494
|
+
status: signed_off
|
|
1495
|
+
reviewer: hugo
|
|
1496
|
+
review_date: "2026-03-15"
|
|
1497
|
+
sign_off_date: "2026-03-15"
|
|
1498
|
+
verdict: approved
|
|
1499
|
+
intent: "Regression guard: verifies gemspec guards git ls-files behind .git check, provides Dir.glob fallback, and does not spawn git subprocess in non-git directories"
|
|
1500
|
+
answers:
|
|
1501
|
+
Q1: pass
|
|
1502
|
+
Q2: pass
|
|
1503
|
+
Q3: pass
|
|
1504
|
+
Q4: pass
|
|
1505
|
+
Q5: pass
|
|
1506
|
+
Q6: pass
|
|
1507
|
+
Q7: pass
|
|
1508
|
+
Q8: pass
|
|
1509
|
+
Q9: pass
|
|
1510
|
+
Q10: pass
|
|
1511
|
+
findings: []
|
|
1512
|
+
|
|
1513
|
+
spec/i18n_completeness_spec.rb:
|
|
1514
|
+
status: signed_off
|
|
1515
|
+
reviewer: hugo
|
|
1516
|
+
review_date: "2026-03-15"
|
|
1517
|
+
sign_off_date: "2026-03-15"
|
|
1518
|
+
verdict: approved
|
|
1519
|
+
intent: "Cross-cutting quality check: verifies all locale files have required structure, reports missing/orphan keys vs en.yml with CLDR plural awareness, and validates I18n.t calls in lib/"
|
|
1520
|
+
answers:
|
|
1521
|
+
Q1: pass
|
|
1522
|
+
Q2: pass
|
|
1523
|
+
Q3: pass
|
|
1524
|
+
Q4: pass
|
|
1525
|
+
Q5: pass
|
|
1526
|
+
Q6: pass
|
|
1527
|
+
Q7: pass
|
|
1528
|
+
Q8: pass
|
|
1529
|
+
Q9: pass
|
|
1530
|
+
Q10: pass
|
|
1531
|
+
findings: []
|
|
1532
|
+
|
|
1533
|
+
# --- Batch 7: D-Bus & Desktop (reviewed 2026-03-15) ---
|
|
1534
|
+
|
|
1535
|
+
spec/rosett_ai/dbus/service_spec.rb:
|
|
1536
|
+
status: signed_off
|
|
1537
|
+
reviewer: hugo
|
|
1538
|
+
review_date: "2026-03-15"
|
|
1539
|
+
sign_off_date: "2026-03-15"
|
|
1540
|
+
verdict: approved
|
|
1541
|
+
intent: "Verifies D-Bus Service lifecycle (start/stop/running?), session bus connection, interface export, focus monitoring delegation, error handling, and BUS_NAME/OBJECT_PATH constants"
|
|
1542
|
+
answers:
|
|
1543
|
+
Q1: pass
|
|
1544
|
+
Q2: pass
|
|
1545
|
+
Q3: pass
|
|
1546
|
+
Q4: pass
|
|
1547
|
+
Q5: pass
|
|
1548
|
+
Q6: pass
|
|
1549
|
+
Q7: pass
|
|
1550
|
+
Q8: pass
|
|
1551
|
+
Q9: pass
|
|
1552
|
+
Q10: pass
|
|
1553
|
+
findings: []
|
|
1554
|
+
|
|
1555
|
+
spec/rosett_ai/dbus/manager_interface_spec.rb:
|
|
1556
|
+
status: signed_off
|
|
1557
|
+
reviewer: hugo
|
|
1558
|
+
review_date: "2026-03-15"
|
|
1559
|
+
sign_off_date: "2026-03-15"
|
|
1560
|
+
verdict: approved
|
|
1561
|
+
intent: "Verifies ManagerInterface contract: INTERFACE constant, Shutdown logging, SetConfig delegation to RaiConfig, ListEngines returning name/display_name tuples, GetStatus dictionary with version/running/context/pid/dbus_name"
|
|
1562
|
+
answers:
|
|
1563
|
+
Q1: pass
|
|
1564
|
+
Q2: pass
|
|
1565
|
+
Q3: pass
|
|
1566
|
+
Q4: pass
|
|
1567
|
+
Q5: pass
|
|
1568
|
+
Q6: pass
|
|
1569
|
+
Q7: pass
|
|
1570
|
+
Q8: pass
|
|
1571
|
+
Q9: pass
|
|
1572
|
+
Q10: pass
|
|
1573
|
+
findings: []
|
|
1574
|
+
|
|
1575
|
+
spec/rosett_ai/dbus/focus_monitor_interface_spec.rb:
|
|
1576
|
+
status: signed_off
|
|
1577
|
+
reviewer: hugo
|
|
1578
|
+
review_date: "2026-03-15"
|
|
1579
|
+
sign_off_date: "2026-03-15"
|
|
1580
|
+
verdict: approved
|
|
1581
|
+
intent: "Verifies FocusMonitorInterface INTERFACE constant and create_adapter factory mapping all 7 compositor types (i3, sway, hyprland, gnome, kwin, x11, unknown)"
|
|
1582
|
+
answers:
|
|
1583
|
+
Q1: pass
|
|
1584
|
+
Q2: pass
|
|
1585
|
+
Q3: pass
|
|
1586
|
+
Q4: pass
|
|
1587
|
+
Q5: pass
|
|
1588
|
+
Q6: pass
|
|
1589
|
+
Q7: pass
|
|
1590
|
+
Q8: pass
|
|
1591
|
+
Q9: pass
|
|
1592
|
+
Q10: pass
|
|
1593
|
+
findings: []
|
|
1594
|
+
|
|
1595
|
+
spec/rosett_ai/dbus/focus_adapters/base_spec.rb:
|
|
1596
|
+
status: signed_off
|
|
1597
|
+
reviewer: hugo
|
|
1598
|
+
review_date: "2026-03-15"
|
|
1599
|
+
sign_off_date: "2026-03-15"
|
|
1600
|
+
verdict: approved
|
|
1601
|
+
intent: "Verifies FocusAdapters::Base abstract contract: non-running initial state, callback registration/notification, multiple callback support, NotImplementedError for start, argument-to-string coercion"
|
|
1602
|
+
answers:
|
|
1603
|
+
Q1: pass
|
|
1604
|
+
Q2: pass
|
|
1605
|
+
Q3: pass
|
|
1606
|
+
Q4: pass
|
|
1607
|
+
Q5: pass
|
|
1608
|
+
Q6: pass
|
|
1609
|
+
Q7: pass
|
|
1610
|
+
Q8: pass
|
|
1611
|
+
Q9: pass
|
|
1612
|
+
Q10: pass
|
|
1613
|
+
findings: []
|
|
1614
|
+
|
|
1615
|
+
spec/rosett_ai/dbus/focus_adapters/gnome_adapter_spec.rb:
|
|
1616
|
+
status: signed_off
|
|
1617
|
+
reviewer: hugo
|
|
1618
|
+
review_date: "2026-03-15"
|
|
1619
|
+
sign_off_date: "2026-03-15"
|
|
1620
|
+
verdict: approved
|
|
1621
|
+
intent: "Verifies GnomeAdapter D-Bus Eval-based focus polling with 0.5s interval, duplicate-focus suppression, double-start idempotency, and D-Bus error handling"
|
|
1622
|
+
answers:
|
|
1623
|
+
Q1: pass
|
|
1624
|
+
Q2: pass
|
|
1625
|
+
Q3: pass
|
|
1626
|
+
Q4: pass
|
|
1627
|
+
Q5: pass
|
|
1628
|
+
Q6: pass
|
|
1629
|
+
Q7: pass
|
|
1630
|
+
Q8: pass
|
|
1631
|
+
Q9: pass
|
|
1632
|
+
Q10: pass
|
|
1633
|
+
findings: []
|
|
1634
|
+
|
|
1635
|
+
spec/rosett_ai/dbus/focus_adapters/kwin_adapter_spec.rb:
|
|
1636
|
+
status: signed_off
|
|
1637
|
+
reviewer: hugo
|
|
1638
|
+
review_date: "2026-03-15"
|
|
1639
|
+
sign_off_date: "2026-03-15"
|
|
1640
|
+
verdict: approved
|
|
1641
|
+
intent: "Verifies KwinAdapter D-Bus signal subscription with polling fallback, double-start prevention, and graceful error handling when KWin unavailable"
|
|
1642
|
+
answers:
|
|
1643
|
+
Q1: pass
|
|
1644
|
+
Q2: pass
|
|
1645
|
+
Q3: pass
|
|
1646
|
+
Q4: pass
|
|
1647
|
+
Q5: pass
|
|
1648
|
+
Q6: pass
|
|
1649
|
+
Q7: pass
|
|
1650
|
+
Q8: pass
|
|
1651
|
+
Q9: pass
|
|
1652
|
+
Q10: pass
|
|
1653
|
+
findings: []
|
|
1654
|
+
|
|
1655
|
+
spec/rosett_ai/dbus/focus_adapters/hyprland_adapter_spec.rb:
|
|
1656
|
+
status: signed_off
|
|
1657
|
+
reviewer: hugo
|
|
1658
|
+
review_date: "2026-03-15"
|
|
1659
|
+
sign_off_date: "2026-03-15"
|
|
1660
|
+
verdict: approved
|
|
1661
|
+
intent: "Verifies HyprlandAdapter UNIX socket connection via HYPRLAND_INSTANCE_SIGNATURE, activewindow event parsing (app_id>>title), empty title/missing separator handling, and missing env/socket edge cases"
|
|
1662
|
+
answers:
|
|
1663
|
+
Q1: pass
|
|
1664
|
+
Q2: pass
|
|
1665
|
+
Q3: pass
|
|
1666
|
+
Q4: pass
|
|
1667
|
+
Q5: pass
|
|
1668
|
+
Q6: pass
|
|
1669
|
+
Q7: pass
|
|
1670
|
+
Q8: pass
|
|
1671
|
+
Q9: pass
|
|
1672
|
+
Q10: pass
|
|
1673
|
+
findings: []
|
|
1674
|
+
|
|
1675
|
+
spec/rosett_ai/dbus/focus_adapters/i3_adapter_spec.rb:
|
|
1676
|
+
status: signed_off
|
|
1677
|
+
reviewer: hugo
|
|
1678
|
+
review_date: "2026-03-15"
|
|
1679
|
+
sign_off_date: "2026-03-15"
|
|
1680
|
+
verdict: approved
|
|
1681
|
+
intent: "Verifies I3Adapter i3ipc connection, window event subscription, focus event extraction with app_id fallback to window_properties.class"
|
|
1682
|
+
answers:
|
|
1683
|
+
Q1: pass
|
|
1684
|
+
Q2: pass
|
|
1685
|
+
Q3: pass
|
|
1686
|
+
Q4: pass
|
|
1687
|
+
Q5: pass
|
|
1688
|
+
Q6: pass
|
|
1689
|
+
Q7: pass
|
|
1690
|
+
Q8: pass
|
|
1691
|
+
Q9: pass
|
|
1692
|
+
Q10: pass
|
|
1693
|
+
findings: []
|
|
1694
|
+
|
|
1695
|
+
spec/rosett_ai/dbus/focus_adapters/x11_adapter_spec.rb:
|
|
1696
|
+
status: signed_off
|
|
1697
|
+
reviewer: hugo
|
|
1698
|
+
review_date: "2026-03-15"
|
|
1699
|
+
sign_off_date: "2026-03-15"
|
|
1700
|
+
verdict: approved
|
|
1701
|
+
intent: "Verifies X11Adapter xprop-based focus detection: WM_CLASS extraction, _NET_WM_NAME with WM_NAME fallback, active window ID parsing, nil window handling, and POLL_INTERVAL constant"
|
|
1702
|
+
answers:
|
|
1703
|
+
Q1: pass
|
|
1704
|
+
Q2: pass
|
|
1705
|
+
Q3: pass
|
|
1706
|
+
Q4: pass
|
|
1707
|
+
Q5: pass
|
|
1708
|
+
Q6: pass
|
|
1709
|
+
Q7: pass
|
|
1710
|
+
Q8: pass
|
|
1711
|
+
Q9: pass
|
|
1712
|
+
Q10: pass
|
|
1713
|
+
findings: []
|
|
1714
|
+
|
|
1715
|
+
spec/rosett_ai/dbus/compositor_detector_spec.rb:
|
|
1716
|
+
status: signed_off
|
|
1717
|
+
reviewer: hugo
|
|
1718
|
+
review_date: "2026-03-15"
|
|
1719
|
+
sign_off_date: "2026-03-15"
|
|
1720
|
+
verdict: approved
|
|
1721
|
+
intent: "Verifies CompositorDetector env var detection (Hyprland > Sway > i3 > DISPLAY), D-Bus service detection (GNOME Shell, KWin), precedence ordering, and :unknown fallback"
|
|
1722
|
+
answers:
|
|
1723
|
+
Q1: pass
|
|
1724
|
+
Q2: pass
|
|
1725
|
+
Q3: pass
|
|
1726
|
+
Q4: pass
|
|
1727
|
+
Q5: pass
|
|
1728
|
+
Q6: pass
|
|
1729
|
+
Q7: pass
|
|
1730
|
+
Q8: pass
|
|
1731
|
+
Q9: pass
|
|
1732
|
+
Q10: pass
|
|
1733
|
+
findings: []
|
|
1734
|
+
|
|
1735
|
+
spec/rosett_ai/dbus/status_notifier_interface_spec.rb:
|
|
1736
|
+
status: signed_off
|
|
1737
|
+
reviewer: hugo
|
|
1738
|
+
review_date: "2026-03-15"
|
|
1739
|
+
sign_off_date: "2026-03-15"
|
|
1740
|
+
verdict: approved
|
|
1741
|
+
intent: "Verifies StatusNotifierInterface org.kde.StatusNotifierItem properties (id, category, status, title, icon_name, tool_tip struct), update_status method with NewStatus signal emission"
|
|
1742
|
+
answers:
|
|
1743
|
+
Q1: pass
|
|
1744
|
+
Q2: pass
|
|
1745
|
+
Q3: pass
|
|
1746
|
+
Q4: pass
|
|
1747
|
+
Q5: pass
|
|
1748
|
+
Q6: pass
|
|
1749
|
+
Q7: pass
|
|
1750
|
+
Q8: pass
|
|
1751
|
+
Q9: pass
|
|
1752
|
+
Q10: pass
|
|
1753
|
+
findings: []
|
|
1754
|
+
|
|
1755
|
+
spec/rosett_ai/desktop/dbus_client_spec.rb:
|
|
1756
|
+
status: signed_off
|
|
1757
|
+
reviewer: hugo
|
|
1758
|
+
review_date: "2026-03-15"
|
|
1759
|
+
sign_off_date: "2026-03-15"
|
|
1760
|
+
verdict: approved
|
|
1761
|
+
intent: "Verifies DbusClient full lifecycle (connect/disconnect/connected?/service_available?), all Manager methods (status/compile/switch_context/set_config/list_engines), FocusMonitor current_focus, and error paths for every D-Bus call"
|
|
1762
|
+
answers:
|
|
1763
|
+
Q1: pass
|
|
1764
|
+
Q2: pass
|
|
1765
|
+
Q3: pass
|
|
1766
|
+
Q4: pass
|
|
1767
|
+
Q5: pass
|
|
1768
|
+
Q6: pass
|
|
1769
|
+
Q7: pass
|
|
1770
|
+
Q8: pass
|
|
1771
|
+
Q9: pass
|
|
1772
|
+
Q10: pass
|
|
1773
|
+
findings: []
|
|
1774
|
+
|
|
1775
|
+
spec/rosett_ai/desktop/gtk4_app_spec.rb:
|
|
1776
|
+
status: signed_off
|
|
1777
|
+
reviewer: hugo
|
|
1778
|
+
review_date: "2026-03-15"
|
|
1779
|
+
sign_off_date: "2026-03-15"
|
|
1780
|
+
verdict: approved
|
|
1781
|
+
intent: "Verifies Gtk4App APPLICATION_ID reverse-DNS, conditional Adwaita availability, DbusClient initialization, and graceful exit when adwaita gem missing"
|
|
1782
|
+
answers:
|
|
1783
|
+
Q1: pass
|
|
1784
|
+
Q2: pass
|
|
1785
|
+
Q3: pass
|
|
1786
|
+
Q4: pass
|
|
1787
|
+
Q5: pass
|
|
1788
|
+
Q6: pass
|
|
1789
|
+
Q7: pass
|
|
1790
|
+
Q8: pass
|
|
1791
|
+
Q9: pass
|
|
1792
|
+
Q10: pass
|
|
1793
|
+
findings: []
|
|
1794
|
+
|
|
1795
|
+
spec/rosett_ai/desktop/gtk4_preferences_spec.rb:
|
|
1796
|
+
status: signed_off
|
|
1797
|
+
reviewer: hugo
|
|
1798
|
+
review_date: "2026-03-15"
|
|
1799
|
+
sign_off_date: "2026-03-15"
|
|
1800
|
+
verdict: approved
|
|
1801
|
+
intent: "Verifies Gtk4Preferences D-Bus preference callbacks (verbose/strict/engine/auto_switch), dynamic engine list from D-Bus with FALLBACK_ENGINES, index-based selection at boundaries, and Adw version compatibility"
|
|
1802
|
+
answers:
|
|
1803
|
+
Q1: pass
|
|
1804
|
+
Q2: pass
|
|
1805
|
+
Q3: pass
|
|
1806
|
+
Q4: pass
|
|
1807
|
+
Q5: pass
|
|
1808
|
+
Q6: pass
|
|
1809
|
+
Q7: pass
|
|
1810
|
+
Q8: pass
|
|
1811
|
+
Q9: pass
|
|
1812
|
+
Q10: pass
|
|
1813
|
+
findings: []
|
|
1814
|
+
|
|
1815
|
+
spec/rosett_ai/desktop/gui_logger_spec.rb:
|
|
1816
|
+
status: signed_off
|
|
1817
|
+
reviewer: hugo
|
|
1818
|
+
review_date: "2026-03-15"
|
|
1819
|
+
sign_off_date: "2026-03-15"
|
|
1820
|
+
verdict: approved
|
|
1821
|
+
intent: "Verifies GuiLogger env var control (RAI_GUI_LOG/FILE/LEVEL), JSON Lines structured logging, action tracking with duration_ms, error logging with truncated backtrace, level filtering, file logging, and LEVELS constant"
|
|
1822
|
+
answers:
|
|
1823
|
+
Q1: pass
|
|
1824
|
+
Q2: pass
|
|
1825
|
+
Q3: pass
|
|
1826
|
+
Q4: pass
|
|
1827
|
+
Q5: pass
|
|
1828
|
+
Q6: pass
|
|
1829
|
+
Q7: pass
|
|
1830
|
+
Q8: pass
|
|
1831
|
+
Q9: pass
|
|
1832
|
+
Q10: pass
|
|
1833
|
+
findings: []
|
|
1834
|
+
|
|
1835
|
+
# --- Batch 8: UI + Plugins + Engines + i18n (reviewed 2026-03-15) ---
|
|
1836
|
+
|
|
1837
|
+
spec/rosett_ai/ui/base_spec.rb:
|
|
1838
|
+
status: signed_off
|
|
1839
|
+
reviewer: hugo
|
|
1840
|
+
review_date: "2026-03-15"
|
|
1841
|
+
sign_off_date: "2026-03-15"
|
|
1842
|
+
verdict: approved
|
|
1843
|
+
intent: "Verifies UI::Base abstract contract — subclass enforcement for required methods (display_table, display_banner, etc.), shared helpers (format_status, truncate_text), and NotImplementedError on unimplemented calls"
|
|
1844
|
+
answers:
|
|
1845
|
+
Q1: pass
|
|
1846
|
+
Q2: pass
|
|
1847
|
+
Q3: pass
|
|
1848
|
+
Q4: pass
|
|
1849
|
+
Q5: pass
|
|
1850
|
+
Q6: pass
|
|
1851
|
+
Q7: pass
|
|
1852
|
+
Q8: pass
|
|
1853
|
+
Q9: pass
|
|
1854
|
+
Q10: pass
|
|
1855
|
+
findings: []
|
|
1856
|
+
|
|
1857
|
+
spec/rosett_ai/ui/tui_spec.rb:
|
|
1858
|
+
status: signed_off
|
|
1859
|
+
reviewer: hugo
|
|
1860
|
+
review_date: "2026-03-15"
|
|
1861
|
+
sign_off_date: "2026-03-15"
|
|
1862
|
+
verdict: approved
|
|
1863
|
+
intent: "Verifies Tui adapter renders display_table with aligned columns, display_banner with box-drawing, format_status with colour codes, progress_bar percentage, and truncate_text with Unicode awareness"
|
|
1864
|
+
answers:
|
|
1865
|
+
Q1: pass
|
|
1866
|
+
Q2: pass
|
|
1867
|
+
Q3: pass
|
|
1868
|
+
Q4: pass
|
|
1869
|
+
Q5: pass
|
|
1870
|
+
Q6: pass
|
|
1871
|
+
Q7: pass
|
|
1872
|
+
Q8: pass
|
|
1873
|
+
Q9: pass
|
|
1874
|
+
Q10: pass
|
|
1875
|
+
findings: []
|
|
1876
|
+
|
|
1877
|
+
spec/rosett_ai/ui/accessible_tui_spec.rb:
|
|
1878
|
+
status: signed_off
|
|
1879
|
+
reviewer: hugo
|
|
1880
|
+
review_date: "2026-03-15"
|
|
1881
|
+
sign_off_date: "2026-03-15"
|
|
1882
|
+
verdict: approved
|
|
1883
|
+
intent: "Verifies AccessibleTui screen-reader-safe output — no ANSI codes, text-only table format, high-contrast status labels, semantic progress reporting, and EN 301 549 compliance helpers"
|
|
1884
|
+
answers:
|
|
1885
|
+
Q1: pass
|
|
1886
|
+
Q2: pass
|
|
1887
|
+
Q3: pass
|
|
1888
|
+
Q4: pass
|
|
1889
|
+
Q5: pass
|
|
1890
|
+
Q6: pass
|
|
1891
|
+
Q7: pass
|
|
1892
|
+
Q8: pass
|
|
1893
|
+
Q9: pass
|
|
1894
|
+
Q10: pass
|
|
1895
|
+
findings: []
|
|
1896
|
+
|
|
1897
|
+
spec/rosett_ai/ui/registry_spec.rb:
|
|
1898
|
+
status: signed_off
|
|
1899
|
+
reviewer: hugo
|
|
1900
|
+
review_date: "2026-03-15"
|
|
1901
|
+
sign_off_date: "2026-03-15"
|
|
1902
|
+
verdict: approved
|
|
1903
|
+
intent: "Verifies UI::Registry adapter registration, lookup, default selection (tui), accessible auto-selection via ORCA_RUNNING/BRLTTY_TTY env vars, and unknown adapter error handling"
|
|
1904
|
+
answers:
|
|
1905
|
+
Q1: pass
|
|
1906
|
+
Q2: pass
|
|
1907
|
+
Q3: pass
|
|
1908
|
+
Q4: pass
|
|
1909
|
+
Q5: pass
|
|
1910
|
+
Q6: pass
|
|
1911
|
+
Q7: pass
|
|
1912
|
+
Q8: pass
|
|
1913
|
+
Q9: pass
|
|
1914
|
+
Q10: pass
|
|
1915
|
+
findings: []
|
|
1916
|
+
|
|
1917
|
+
spec/rosett_ai/ui/tty_helper_spec.rb:
|
|
1918
|
+
status: signed_off
|
|
1919
|
+
reviewer: hugo
|
|
1920
|
+
review_date: "2026-03-15"
|
|
1921
|
+
sign_off_date: "2026-03-15"
|
|
1922
|
+
verdict: approved
|
|
1923
|
+
intent: "Verifies TtyHelper TTY-aware prompt helpers — confirm_yes? reads from $stdin with default fallback, non-TTY auto-accepts defaults, and say outputs to $stdout"
|
|
1924
|
+
answers:
|
|
1925
|
+
Q1: pass
|
|
1926
|
+
Q2: pass
|
|
1927
|
+
Q3: pass
|
|
1928
|
+
Q4: pass
|
|
1929
|
+
Q5: pass
|
|
1930
|
+
Q6: pass
|
|
1931
|
+
Q7: pass
|
|
1932
|
+
Q8: pass
|
|
1933
|
+
Q9: pass
|
|
1934
|
+
Q10: pass
|
|
1935
|
+
findings: []
|
|
1936
|
+
|
|
1937
|
+
spec/rosett_ai/ui/gtk4_spec.rb:
|
|
1938
|
+
status: signed_off
|
|
1939
|
+
reviewer: hugo
|
|
1940
|
+
review_date: "2026-03-15"
|
|
1941
|
+
sign_off_date: "2026-03-15"
|
|
1942
|
+
verdict: approved
|
|
1943
|
+
intent: "Verifies Gtk4 UI adapter renders Pango-markup tables, styled banners, HTML-escaped status, GTK progress fraction, and Pango-safe text truncation"
|
|
1944
|
+
answers:
|
|
1945
|
+
Q1: pass
|
|
1946
|
+
Q2: pass
|
|
1947
|
+
Q3: pass
|
|
1948
|
+
Q4: pass
|
|
1949
|
+
Q5: pass
|
|
1950
|
+
Q6: pass
|
|
1951
|
+
Q7: pass
|
|
1952
|
+
Q8: pass
|
|
1953
|
+
Q9: pass
|
|
1954
|
+
Q10: pass
|
|
1955
|
+
findings: []
|
|
1956
|
+
|
|
1957
|
+
spec/rosett_ai/ui/qt6_spec.rb:
|
|
1958
|
+
status: signed_off
|
|
1959
|
+
reviewer: hugo
|
|
1960
|
+
review_date: "2026-03-15"
|
|
1961
|
+
sign_off_date: "2026-03-15"
|
|
1962
|
+
verdict: approved
|
|
1963
|
+
intent: "Verifies Qt6 UI adapter renders HTML tables with Qt-compatible styling, banner with border-radius, colour-coded status, QProgressBar percentage, and HTML-safe truncation"
|
|
1964
|
+
answers:
|
|
1965
|
+
Q1: pass
|
|
1966
|
+
Q2: pass
|
|
1967
|
+
Q3: pass
|
|
1968
|
+
Q4: pass
|
|
1969
|
+
Q5: pass
|
|
1970
|
+
Q6: pass
|
|
1971
|
+
Q7: pass
|
|
1972
|
+
Q8: pass
|
|
1973
|
+
Q9: pass
|
|
1974
|
+
Q10: pass
|
|
1975
|
+
findings: []
|
|
1976
|
+
|
|
1977
|
+
spec/rosett_ai/ui/kde_spec.rb:
|
|
1978
|
+
status: signed_off
|
|
1979
|
+
reviewer: hugo
|
|
1980
|
+
review_date: "2026-03-15"
|
|
1981
|
+
sign_off_date: "2026-03-15"
|
|
1982
|
+
verdict: approved
|
|
1983
|
+
intent: "Verifies KDE UI adapter renders Breeze-themed HTML tables, KDE-styled banners, Breeze-palette status colours, Plasma-compatible progress, and KDE-safe truncation"
|
|
1984
|
+
answers:
|
|
1985
|
+
Q1: pass
|
|
1986
|
+
Q2: pass
|
|
1987
|
+
Q3: pass
|
|
1988
|
+
Q4: pass
|
|
1989
|
+
Q5: pass
|
|
1990
|
+
Q6: pass
|
|
1991
|
+
Q7: pass
|
|
1992
|
+
Q8: pass
|
|
1993
|
+
Q9: pass
|
|
1994
|
+
Q10: pass
|
|
1995
|
+
findings: []
|
|
1996
|
+
|
|
1997
|
+
spec/rosett_ai/plugins/contract_spec.rb:
|
|
1998
|
+
status: signed_off
|
|
1999
|
+
reviewer: hugo
|
|
2000
|
+
review_date: "2026-03-15"
|
|
2001
|
+
sign_off_date: "2026-03-15"
|
|
2002
|
+
verdict: approved
|
|
2003
|
+
intent: "Verifies Plugins::Contract base class — validates plugin_name/plugin_type presence, PLUGIN_TYPES constant [:engine, :gui, :mcp], lifecycle hooks (activate/deactivate), and abstract method enforcement"
|
|
2004
|
+
answers:
|
|
2005
|
+
Q1: pass
|
|
2006
|
+
Q2: pass
|
|
2007
|
+
Q3: pass
|
|
2008
|
+
Q4: pass
|
|
2009
|
+
Q5: pass
|
|
2010
|
+
Q6: pass
|
|
2011
|
+
Q7: pass
|
|
2012
|
+
Q8: pass
|
|
2013
|
+
Q9: pass
|
|
2014
|
+
Q10: pass
|
|
2015
|
+
findings: []
|
|
2016
|
+
|
|
2017
|
+
spec/rosett_ai/plugins/engine_contract_spec.rb:
|
|
2018
|
+
status: signed_off
|
|
2019
|
+
reviewer: hugo
|
|
2020
|
+
review_date: "2026-03-15"
|
|
2021
|
+
sign_off_date: "2026-03-15"
|
|
2022
|
+
verdict: approved
|
|
2023
|
+
intent: "Verifies EngineContract duck-type — requires compile_rules/engine_name/supported_features, inherits Contract lifecycle, validates engine type classification"
|
|
2024
|
+
answers:
|
|
2025
|
+
Q1: pass
|
|
2026
|
+
Q2: pass
|
|
2027
|
+
Q3: pass
|
|
2028
|
+
Q4: pass
|
|
2029
|
+
Q5: pass
|
|
2030
|
+
Q6: pass
|
|
2031
|
+
Q7: pass
|
|
2032
|
+
Q8: pass
|
|
2033
|
+
Q9: pass
|
|
2034
|
+
Q10: pass
|
|
2035
|
+
findings: []
|
|
2036
|
+
|
|
2037
|
+
spec/rosett_ai/plugins/gui_contract_spec.rb:
|
|
2038
|
+
status: signed_off
|
|
2039
|
+
reviewer: hugo
|
|
2040
|
+
review_date: "2026-03-15"
|
|
2041
|
+
sign_off_date: "2026-03-15"
|
|
2042
|
+
verdict: approved
|
|
2043
|
+
intent: "Verifies GuiContract duck-type — requires show_window/gui_toolkit, inherits Contract lifecycle, validates gui type classification"
|
|
2044
|
+
answers:
|
|
2045
|
+
Q1: pass
|
|
2046
|
+
Q2: pass
|
|
2047
|
+
Q3: pass
|
|
2048
|
+
Q4: pass
|
|
2049
|
+
Q5: pass
|
|
2050
|
+
Q6: pass
|
|
2051
|
+
Q7: pass
|
|
2052
|
+
Q8: pass
|
|
2053
|
+
Q9: pass
|
|
2054
|
+
Q10: pass
|
|
2055
|
+
findings: []
|
|
2056
|
+
|
|
2057
|
+
spec/rosett_ai/plugins/mcp_contract_spec.rb:
|
|
2058
|
+
status: signed_off
|
|
2059
|
+
reviewer: hugo
|
|
2060
|
+
review_date: "2026-03-15"
|
|
2061
|
+
sign_off_date: "2026-03-15"
|
|
2062
|
+
verdict: approved
|
|
2063
|
+
intent: "Verifies McpContract duck-type — requires handle_request/server_info, inherits Contract lifecycle, validates mcp type classification"
|
|
2064
|
+
answers:
|
|
2065
|
+
Q1: pass
|
|
2066
|
+
Q2: pass
|
|
2067
|
+
Q3: pass
|
|
2068
|
+
Q4: pass
|
|
2069
|
+
Q5: pass
|
|
2070
|
+
Q6: pass
|
|
2071
|
+
Q7: pass
|
|
2072
|
+
Q8: pass
|
|
2073
|
+
Q9: pass
|
|
2074
|
+
Q10: pass
|
|
2075
|
+
findings: []
|
|
2076
|
+
|
|
2077
|
+
spec/rosett_ai/plugins/registry_spec.rb:
|
|
2078
|
+
status: signed_off
|
|
2079
|
+
reviewer: hugo
|
|
2080
|
+
review_date: "2026-03-15"
|
|
2081
|
+
sign_off_date: "2026-03-15"
|
|
2082
|
+
verdict: approved
|
|
2083
|
+
intent: "Verifies Plugins::Registry — register/lookup/list by type, duplicate name rejection, contract compliance validation, and type-filtered listing"
|
|
2084
|
+
answers:
|
|
2085
|
+
Q1: pass
|
|
2086
|
+
Q2: pass
|
|
2087
|
+
Q3: pass
|
|
2088
|
+
Q4: pass
|
|
2089
|
+
Q5: pass
|
|
2090
|
+
Q6: pass
|
|
2091
|
+
Q7: pass
|
|
2092
|
+
Q8: pass
|
|
2093
|
+
Q9: pass
|
|
2094
|
+
Q10: pass
|
|
2095
|
+
findings: []
|
|
2096
|
+
|
|
2097
|
+
spec/rosett_ai/engines/registry_spec.rb:
|
|
2098
|
+
status: signed_off
|
|
2099
|
+
reviewer: hugo
|
|
2100
|
+
review_date: "2026-03-15"
|
|
2101
|
+
sign_off_date: "2026-03-15"
|
|
2102
|
+
verdict: approved
|
|
2103
|
+
intent: "Verifies Engines::Registry — register/lookup/list engines, default engine selection, duplicate rejection, and reset! for test isolation"
|
|
2104
|
+
answers:
|
|
2105
|
+
Q1: pass
|
|
2106
|
+
Q2: pass
|
|
2107
|
+
Q3: pass
|
|
2108
|
+
Q4: pass
|
|
2109
|
+
Q5: pass
|
|
2110
|
+
Q6: pass
|
|
2111
|
+
Q7: pass
|
|
2112
|
+
Q8: pass
|
|
2113
|
+
Q9: pass
|
|
2114
|
+
Q10: pass
|
|
2115
|
+
findings: []
|
|
2116
|
+
|
|
2117
|
+
spec/rosett_ai/engines/base_config_compiler_spec.rb:
|
|
2118
|
+
status: signed_off
|
|
2119
|
+
reviewer: hugo
|
|
2120
|
+
review_date: "2026-03-15"
|
|
2121
|
+
sign_off_date: "2026-03-15"
|
|
2122
|
+
verdict: approved
|
|
2123
|
+
intent: "Verifies BaseConfigCompiler abstract contract — subclass must implement compile_scope/engine_name, provides config file discovery, validates YAML loading, and reports compile results"
|
|
2124
|
+
answers:
|
|
2125
|
+
Q1: pass
|
|
2126
|
+
Q2: pass
|
|
2127
|
+
Q3: pass
|
|
2128
|
+
Q4: pass
|
|
2129
|
+
Q5: pass
|
|
2130
|
+
Q6: pass
|
|
2131
|
+
Q7: pass
|
|
2132
|
+
Q8: pass
|
|
2133
|
+
Q9: pass
|
|
2134
|
+
Q10: pass
|
|
2135
|
+
findings: []
|
|
2136
|
+
|
|
2137
|
+
spec/rosett_ai/engines/detector_spec.rb:
|
|
2138
|
+
status: signed_off
|
|
2139
|
+
reviewer: hugo
|
|
2140
|
+
review_date: "2026-03-15"
|
|
2141
|
+
sign_off_date: "2026-03-15"
|
|
2142
|
+
verdict: approved
|
|
2143
|
+
intent: "Verifies Engines::Detector manifest-driven detection — checks cli_binary via which and config_dir existence, returns detected engine list, handles missing binaries gracefully"
|
|
2144
|
+
answers:
|
|
2145
|
+
Q1: pass
|
|
2146
|
+
Q2: pass
|
|
2147
|
+
Q3: pass
|
|
2148
|
+
Q4: pass
|
|
2149
|
+
Q5: pass
|
|
2150
|
+
Q6: pass
|
|
2151
|
+
Q7: pass
|
|
2152
|
+
Q8: pass
|
|
2153
|
+
Q9: pass
|
|
2154
|
+
Q10: pass
|
|
2155
|
+
findings: []
|
|
2156
|
+
|
|
2157
|
+
spec/rosett_ai/i18n/locale_resolver_spec.rb:
|
|
2158
|
+
status: signed_off
|
|
2159
|
+
reviewer: hugo
|
|
2160
|
+
review_date: "2026-03-15"
|
|
2161
|
+
sign_off_date: "2026-03-15"
|
|
2162
|
+
verdict: approved
|
|
2163
|
+
intent: "Verifies LocaleResolver POSIX locale parsing (LANG/LC_ALL/LC_MESSAGES), language-region extraction, fallback chain to 'en', and validation against available locales"
|
|
2164
|
+
answers:
|
|
2165
|
+
Q1: pass
|
|
2166
|
+
Q2: pass
|
|
2167
|
+
Q3: pass
|
|
2168
|
+
Q4: pass
|
|
2169
|
+
Q5: pass
|
|
2170
|
+
Q6: pass
|
|
2171
|
+
Q7: pass
|
|
2172
|
+
Q8: pass
|
|
2173
|
+
Q9: pass
|
|
2174
|
+
Q10: pass
|
|
2175
|
+
findings: []
|
|
2176
|
+
|
|
2177
|
+
spec/rosett_ai/i18n/utf8_checker_spec.rb:
|
|
2178
|
+
status: signed_off
|
|
2179
|
+
reviewer: hugo
|
|
2180
|
+
review_date: "2026-03-15"
|
|
2181
|
+
sign_off_date: "2026-03-15"
|
|
2182
|
+
verdict: approved
|
|
2183
|
+
intent: "Verifies Utf8Checker validates UTF-8 encoding on strings and files, detects invalid byte sequences, reports line/column positions of encoding errors, and handles empty/missing files"
|
|
2184
|
+
answers:
|
|
2185
|
+
Q1: pass
|
|
2186
|
+
Q2: pass
|
|
2187
|
+
Q3: pass
|
|
2188
|
+
Q4: pass
|
|
2189
|
+
Q5: pass
|
|
2190
|
+
Q6: pass
|
|
2191
|
+
Q7: pass
|
|
2192
|
+
Q8: pass
|
|
2193
|
+
Q9: pass
|
|
2194
|
+
Q10: pass
|
|
2195
|
+
findings: []
|
|
2196
|
+
|
|
2197
|
+
# --- Batch 9: Adopter + Quorum + Documentation + Core utilities (reviewed 2026-03-15) ---
|
|
2198
|
+
|
|
2199
|
+
spec/rosett_ai/adopter/executor_resolver_spec.rb:
|
|
2200
|
+
status: signed_off
|
|
2201
|
+
reviewer: hugo
|
|
2202
|
+
review_date: "2026-03-15"
|
|
2203
|
+
sign_off_date: "2026-03-15"
|
|
2204
|
+
verdict: approved
|
|
2205
|
+
intent: "Verifies ExecutorResolver creates correct executor instances for SDK-based (Claude), HTTP-based (Ollama), OpenAI-compatible (GPT-NeoX), and CLI-based (Goose/Aider) engines with proper kwargs routing"
|
|
2206
|
+
answers:
|
|
2207
|
+
Q1: pass
|
|
2208
|
+
Q2: pass
|
|
2209
|
+
Q3: pass
|
|
2210
|
+
Q4: pass
|
|
2211
|
+
Q5: pass
|
|
2212
|
+
Q6: pass
|
|
2213
|
+
Q7: pass
|
|
2214
|
+
Q8: pass
|
|
2215
|
+
Q9: pass
|
|
2216
|
+
Q10: pass
|
|
2217
|
+
findings: []
|
|
2218
|
+
|
|
2219
|
+
spec/rosett_ai/adopter/local_analysis_collector_spec.rb:
|
|
2220
|
+
status: signed_off
|
|
2221
|
+
reviewer: hugo
|
|
2222
|
+
review_date: "2026-03-15"
|
|
2223
|
+
sign_off_date: "2026-03-15"
|
|
2224
|
+
verdict: approved
|
|
2225
|
+
intent: "Verifies LocalAnalysisCollector structural analysis of compiled rules — empty descriptions, missing priorities, identical descriptions, bullet-list AGENTS.md format with synthetic IDs, and overall_status pass/warn/fail"
|
|
2226
|
+
answers:
|
|
2227
|
+
Q1: pass
|
|
2228
|
+
Q2: pass
|
|
2229
|
+
Q3: pass
|
|
2230
|
+
Q4: pass
|
|
2231
|
+
Q5: pass
|
|
2232
|
+
Q6: pass
|
|
2233
|
+
Q7: pass
|
|
2234
|
+
Q8: pass
|
|
2235
|
+
Q9: pass
|
|
2236
|
+
Q10: pass
|
|
2237
|
+
findings: []
|
|
2238
|
+
|
|
2239
|
+
spec/rosett_ai/adopter/rule_adopter_spec.rb:
|
|
2240
|
+
status: signed_off
|
|
2241
|
+
reviewer: hugo
|
|
2242
|
+
review_date: "2026-03-15"
|
|
2243
|
+
sign_off_date: "2026-03-15"
|
|
2244
|
+
verdict: approved
|
|
2245
|
+
intent: "Verifies RuleAdopter full adoption pipeline — file discovery, SHA256 checksums, cache read/write, redaction patterns, prompt building, local/API analysis, sensitive file filtering, engine parameter, and merge_results status logic"
|
|
2246
|
+
answers:
|
|
2247
|
+
Q1: pass
|
|
2248
|
+
Q2: pass
|
|
2249
|
+
Q3: pass
|
|
2250
|
+
Q4: pass
|
|
2251
|
+
Q5: pass
|
|
2252
|
+
Q6: pass
|
|
2253
|
+
Q7: pass
|
|
2254
|
+
Q8: pass
|
|
2255
|
+
Q9: pass
|
|
2256
|
+
Q10: pass
|
|
2257
|
+
findings: []
|
|
2258
|
+
|
|
2259
|
+
spec/rosett_ai/quorum/collector_spec.rb:
|
|
2260
|
+
status: signed_off
|
|
2261
|
+
reviewer: hugo
|
|
2262
|
+
review_date: "2026-03-15"
|
|
2263
|
+
sign_off_date: "2026-03-15"
|
|
2264
|
+
verdict: approved
|
|
2265
|
+
intent: "Verifies Quorum::Collector annotates findings with engine name, preserves original finding data, creates error findings for failed engines, and handles empty findings"
|
|
2266
|
+
answers:
|
|
2267
|
+
Q1: pass
|
|
2268
|
+
Q2: pass
|
|
2269
|
+
Q3: pass
|
|
2270
|
+
Q4: pass
|
|
2271
|
+
Q5: pass
|
|
2272
|
+
Q6: pass
|
|
2273
|
+
Q7: pass
|
|
2274
|
+
Q8: pass
|
|
2275
|
+
Q9: pass
|
|
2276
|
+
Q10: pass
|
|
2277
|
+
findings: []
|
|
2278
|
+
|
|
2279
|
+
spec/rosett_ai/quorum/comparator_spec.rb:
|
|
2280
|
+
status: signed_off
|
|
2281
|
+
reviewer: hugo
|
|
2282
|
+
review_date: "2026-03-15"
|
|
2283
|
+
sign_off_date: "2026-03-15"
|
|
2284
|
+
verdict: approved
|
|
2285
|
+
intent: "Verifies Quorum::Comparator cross-engine finding merge (identical findings → cross_engine:true), unique finding separation, severity promotion to highest across engines, overall status determination, and informative summary text"
|
|
2286
|
+
answers:
|
|
2287
|
+
Q1: pass
|
|
2288
|
+
Q2: pass
|
|
2289
|
+
Q3: pass
|
|
2290
|
+
Q4: pass
|
|
2291
|
+
Q5: pass
|
|
2292
|
+
Q6: pass
|
|
2293
|
+
Q7: pass
|
|
2294
|
+
Q8: pass
|
|
2295
|
+
Q9: pass
|
|
2296
|
+
Q10: pass
|
|
2297
|
+
findings: []
|
|
2298
|
+
|
|
2299
|
+
spec/rosett_ai/quorum/dispatcher_spec.rb:
|
|
2300
|
+
status: signed_off
|
|
2301
|
+
reviewer: hugo
|
|
2302
|
+
review_date: "2026-03-15"
|
|
2303
|
+
sign_off_date: "2026-03-15"
|
|
2304
|
+
verdict: approved
|
|
2305
|
+
intent: "Verifies Quorum::Dispatcher parallel executor dispatch — multiple executors, elapsed time tracking, error capture without crash, mixed success/failure isolation, and empty executor map"
|
|
2306
|
+
answers:
|
|
2307
|
+
Q1: pass
|
|
2308
|
+
Q2: pass
|
|
2309
|
+
Q3: pass
|
|
2310
|
+
Q4: pass
|
|
2311
|
+
Q5: pass
|
|
2312
|
+
Q6: pass
|
|
2313
|
+
Q7: pass
|
|
2314
|
+
Q8: pass
|
|
2315
|
+
Q9: pass
|
|
2316
|
+
Q10: pass
|
|
2317
|
+
findings: []
|
|
2318
|
+
|
|
2319
|
+
spec/rosett_ai/quorum/strategies/adopt_spec.rb:
|
|
2320
|
+
status: signed_off
|
|
2321
|
+
reviewer: hugo
|
|
2322
|
+
review_date: "2026-03-15"
|
|
2323
|
+
sign_off_date: "2026-03-15"
|
|
2324
|
+
verdict: approved
|
|
2325
|
+
intent: "Verifies Quorum Adopt strategy filters eligible engines by adopt_api capability + executor presence, runs aggregated analysis across engines, and raises AdoptError when no eligible engines exist"
|
|
2326
|
+
answers:
|
|
2327
|
+
Q1: pass
|
|
2328
|
+
Q2: pass
|
|
2329
|
+
Q3: pass
|
|
2330
|
+
Q4: pass
|
|
2331
|
+
Q5: pass
|
|
2332
|
+
Q6: pass
|
|
2333
|
+
Q7: pass
|
|
2334
|
+
Q8: pass
|
|
2335
|
+
Q9: pass
|
|
2336
|
+
Q10: pass
|
|
2337
|
+
findings: []
|
|
2338
|
+
|
|
2339
|
+
spec/rosett_ai/documentation/reference_compiler_spec.rb:
|
|
2340
|
+
status: signed_off
|
|
2341
|
+
reviewer: hugo
|
|
2342
|
+
review_date: "2026-03-15"
|
|
2343
|
+
sign_off_date: "2026-03-15"
|
|
2344
|
+
verdict: approved
|
|
2345
|
+
intent: "Verifies ReferenceCompiler LaTeX pipeline — tool availability checks, staleness detection (PDF vs source/design mtime), 4-pass compilation sequence (pdflatex×4 + biber + makeindex), artifact cleanup, and error handling for missing tools/sources"
|
|
2346
|
+
answers:
|
|
2347
|
+
Q1: pass
|
|
2348
|
+
Q2: pass
|
|
2349
|
+
Q3: pass
|
|
2350
|
+
Q4: pass
|
|
2351
|
+
Q5: pass
|
|
2352
|
+
Q6: pass
|
|
2353
|
+
Q7: pass
|
|
2354
|
+
Q8: pass
|
|
2355
|
+
Q9: pass
|
|
2356
|
+
Q10: pass
|
|
2357
|
+
findings: []
|
|
2358
|
+
|
|
2359
|
+
spec/rosett_ai/documentation/translator_spec.rb:
|
|
2360
|
+
status: signed_off
|
|
2361
|
+
reviewer: hugo
|
|
2362
|
+
review_date: "2026-03-15"
|
|
2363
|
+
sign_off_date: "2026-03-15"
|
|
2364
|
+
verdict: approved
|
|
2365
|
+
intent: "Verifies Translator Claude API-powered document translation — API call with correct prompt, output file creation in locale directory, skip guard for missing anthropic gem"
|
|
2366
|
+
answers:
|
|
2367
|
+
Q1: pass
|
|
2368
|
+
Q2: pass
|
|
2369
|
+
Q3: pass
|
|
2370
|
+
Q4: pass
|
|
2371
|
+
Q5: pass
|
|
2372
|
+
Q6: pass
|
|
2373
|
+
Q7: pass
|
|
2374
|
+
Q8: pass
|
|
2375
|
+
Q9: pass
|
|
2376
|
+
Q10: pass
|
|
2377
|
+
findings: []
|
|
2378
|
+
|
|
2379
|
+
spec/rosett_ai/config/compiler_spec.rb:
|
|
2380
|
+
status: signed_off
|
|
2381
|
+
reviewer: hugo
|
|
2382
|
+
review_date: "2026-03-15"
|
|
2383
|
+
sign_off_date: "2026-03-15"
|
|
2384
|
+
verdict: approved
|
|
2385
|
+
intent: "Verifies deprecated RosettAi::Config::Compiler alias resolves to RosettAiEngine::Claude::ConfigCompiler, with skip guard for missing engine gem"
|
|
2386
|
+
answers:
|
|
2387
|
+
Q1: pass
|
|
2388
|
+
Q2: pass
|
|
2389
|
+
Q3: pass
|
|
2390
|
+
Q4: pass
|
|
2391
|
+
Q5: pass
|
|
2392
|
+
Q6: pass
|
|
2393
|
+
Q7: pass
|
|
2394
|
+
Q8: pass
|
|
2395
|
+
Q9: pass
|
|
2396
|
+
Q10: pass
|
|
2397
|
+
findings: []
|
|
2398
|
+
|
|
2399
|
+
spec/rosett_ai/formatting_spec.rb:
|
|
2400
|
+
status: signed_off
|
|
2401
|
+
reviewer: hugo
|
|
2402
|
+
review_date: "2026-03-15"
|
|
2403
|
+
sign_off_date: "2026-03-15"
|
|
2404
|
+
verdict: approved
|
|
2405
|
+
intent: "Verifies Formatting module format_size (B/KB/MB/GB with boundaries) and format_duration (seconds/minutes) helpers, plus SIZE_UNITS frozen constant"
|
|
2406
|
+
answers:
|
|
2407
|
+
Q1: pass
|
|
2408
|
+
Q2: pass
|
|
2409
|
+
Q3: pass
|
|
2410
|
+
Q4: pass
|
|
2411
|
+
Q5: pass
|
|
2412
|
+
Q6: pass
|
|
2413
|
+
Q7: pass
|
|
2414
|
+
Q8: pass
|
|
2415
|
+
Q9: pass
|
|
2416
|
+
Q10: pass
|
|
2417
|
+
findings: []
|
|
2418
|
+
|
|
2419
|
+
spec/rosett_ai/gem_consistency_checker_spec.rb:
|
|
2420
|
+
status: signed_off
|
|
2421
|
+
reviewer: hugo
|
|
2422
|
+
review_date: "2026-03-15"
|
|
2423
|
+
sign_off_date: "2026-03-15"
|
|
2424
|
+
verdict: approved
|
|
2425
|
+
intent: "Verifies GemConsistencyChecker detects gemspec/lockfile mismatches (missing, conflict, ok), stale version references in docs (with file/line/gem/found/expected), exclusion paths (vendor/, Gemfile.lock, conf/design/), and rai:no-version-check suppression"
|
|
2426
|
+
answers:
|
|
2427
|
+
Q1: pass
|
|
2428
|
+
Q2: pass
|
|
2429
|
+
Q3: pass
|
|
2430
|
+
Q4: pass
|
|
2431
|
+
Q5: pass
|
|
2432
|
+
Q6: pass
|
|
2433
|
+
Q7: pass
|
|
2434
|
+
Q8: pass
|
|
2435
|
+
Q9: pass
|
|
2436
|
+
Q10: pass
|
|
2437
|
+
findings: []
|
|
2438
|
+
|
|
2439
|
+
spec/rosett_ai/yaml_loader_property_spec.rb:
|
|
2440
|
+
status: signed_off
|
|
2441
|
+
reviewer: hugo
|
|
2442
|
+
review_date: "2026-03-15"
|
|
2443
|
+
sign_off_date: "2026-03-15"
|
|
2444
|
+
verdict: approved
|
|
2445
|
+
intent: "Verifies YamlLoader safety limits via Rantly property-based testing — random valid hashes always load, oversized payloads always rejected, deeply nested structures always rejected"
|
|
2446
|
+
answers:
|
|
2447
|
+
Q1: pass
|
|
2448
|
+
Q2: pass
|
|
2449
|
+
Q3: pass
|
|
2450
|
+
Q4: pass
|
|
2451
|
+
Q5: pass
|
|
2452
|
+
Q6: pass
|
|
2453
|
+
Q7: pass
|
|
2454
|
+
Q8: pass
|
|
2455
|
+
Q9: pass
|
|
2456
|
+
Q10: pass
|
|
2457
|
+
findings: []
|
|
2458
|
+
|
|
2459
|
+
spec/rosett_ai/yaml_loader_spec.rb:
|
|
2460
|
+
status: signed_off
|
|
2461
|
+
reviewer: hugo
|
|
2462
|
+
review_date: "2026-03-15"
|
|
2463
|
+
sign_off_date: "2026-03-15"
|
|
2464
|
+
verdict: approved
|
|
2465
|
+
intent: "Verifies YamlLoader deterministic safety limits — file size (1MB), nesting depth (10 levels for hash/array/mixed), key count (1000 including nested), boundary acceptance/rejection, Date/Time permitted classes, and error messages with file paths and counts"
|
|
2466
|
+
answers:
|
|
2467
|
+
Q1: pass
|
|
2468
|
+
Q2: pass
|
|
2469
|
+
Q3: pass
|
|
2470
|
+
Q4: pass
|
|
2471
|
+
Q5: pass
|
|
2472
|
+
Q6: pass
|
|
2473
|
+
Q7: pass
|
|
2474
|
+
Q8: pass
|
|
2475
|
+
Q9: pass
|
|
2476
|
+
Q10: pass
|
|
2477
|
+
findings: []
|
|
2478
|
+
|
|
2479
|
+
spec/rubocop/cop/rosett-ai/shell_interpolation_spec.rb:
|
|
2480
|
+
status: signed_off
|
|
2481
|
+
reviewer: hugo
|
|
2482
|
+
review_date: "2026-03-15"
|
|
2483
|
+
sign_off_date: "2026-03-15"
|
|
2484
|
+
verdict: approved
|
|
2485
|
+
intent: "Verifies ShellInterpolation RuboCop cop detects shell injection via interpolated strings in system/exec/spawn/backticks, and permits array-form system() and plain string commands"
|
|
2486
|
+
answers:
|
|
2487
|
+
Q1: pass
|
|
2488
|
+
Q2: pass
|
|
2489
|
+
Q3: pass
|
|
2490
|
+
Q4: pass
|
|
2491
|
+
Q5: pass
|
|
2492
|
+
Q6: pass
|
|
2493
|
+
Q7: pass
|
|
2494
|
+
Q8: pass
|
|
2495
|
+
Q9: pass
|
|
2496
|
+
Q10: pass
|
|
2497
|
+
findings: []
|
|
2498
|
+
|
|
2499
|
+
spec/rubocop/cop/rosett-ai/unsafe_yaml_load_spec.rb:
|
|
2500
|
+
status: signed_off
|
|
2501
|
+
reviewer: hugo
|
|
2502
|
+
review_date: "2026-03-15"
|
|
2503
|
+
sign_off_date: "2026-03-15"
|
|
2504
|
+
verdict: approved
|
|
2505
|
+
intent: "Verifies UnsafeYamlLoad RuboCop cop detects YAML.load/load_file/::YAML.load usage and permits YAML.safe_load, safe_load_file, and RosettAi::YamlLoader.load_file"
|
|
2506
|
+
answers:
|
|
2507
|
+
Q1: pass
|
|
2508
|
+
Q2: pass
|
|
2509
|
+
Q3: pass
|
|
2510
|
+
Q4: pass
|
|
2511
|
+
Q5: pass
|
|
2512
|
+
Q6: pass
|
|
2513
|
+
Q7: pass
|
|
2514
|
+
Q8: pass
|
|
2515
|
+
Q9: pass
|
|
2516
|
+
Q10: pass
|
|
2517
|
+
findings: []
|
|
2518
|
+
|
|
2519
|
+
spec/yard_coverage_spec.rb:
|
|
2520
|
+
status: signed_off
|
|
2521
|
+
reviewer: hugo
|
|
2522
|
+
review_date: "2026-03-15"
|
|
2523
|
+
sign_off_date: "2026-03-15"
|
|
2524
|
+
verdict: approved
|
|
2525
|
+
intent: "Verifies YARD documentation coverage — tier1 core API files (6) each have @return tags, and overall lib/ coverage meets 40% threshold with dynamic file scanning"
|
|
2526
|
+
answers:
|
|
2527
|
+
Q1: pass
|
|
2528
|
+
Q2: pass
|
|
2529
|
+
Q3: pass
|
|
2530
|
+
Q4: pass
|
|
2531
|
+
Q5: pass
|
|
2532
|
+
Q6: pass
|
|
2533
|
+
Q7: pass
|
|
2534
|
+
Q8: pass
|
|
2535
|
+
Q9: pass
|
|
2536
|
+
Q10: pass
|
|
2537
|
+
findings: []
|
|
2538
|
+
|
|
2539
|
+
# --- Batch 10: Thor CLI + Thor tasks (reviewed 2026-03-15) — FINAL BATCH ---
|
|
2540
|
+
|
|
2541
|
+
spec/rosett_ai/thor/cli_help_spec.rb:
|
|
2542
|
+
status: signed_off
|
|
2543
|
+
reviewer: hugo
|
|
2544
|
+
review_date: "2026-03-15"
|
|
2545
|
+
sign_off_date: "2026-03-15"
|
|
2546
|
+
verdict: approved
|
|
2547
|
+
intent: "Verifies CLI help output renders without error for top-level help, version, and all 12 registered subcommands via dynamic test generation from subcommands array"
|
|
2548
|
+
answers:
|
|
2549
|
+
Q1: pass
|
|
2550
|
+
Q2: pass
|
|
2551
|
+
Q3: pass
|
|
2552
|
+
Q4: pass
|
|
2553
|
+
Q5: pass
|
|
2554
|
+
Q6: pass
|
|
2555
|
+
Q7: pass
|
|
2556
|
+
Q8: pass
|
|
2557
|
+
Q9: pass
|
|
2558
|
+
Q10: pass
|
|
2559
|
+
findings: []
|
|
2560
|
+
|
|
2561
|
+
spec/rosett_ai/thor/cli_spec.rb:
|
|
2562
|
+
status: signed_off
|
|
2563
|
+
reviewer: hugo
|
|
2564
|
+
review_date: "2026-03-15"
|
|
2565
|
+
sign_off_date: "2026-03-15"
|
|
2566
|
+
verdict: approved
|
|
2567
|
+
intent: "Verifies CLI command visibility — internal commands (release, documentation, dbus, desktop) hidden outside rosett-ai repo via nncc_internal? guard, invoke_command raises Thor::Error for restricted commands"
|
|
2568
|
+
answers:
|
|
2569
|
+
Q1: pass
|
|
2570
|
+
Q2: pass
|
|
2571
|
+
Q3: pass
|
|
2572
|
+
Q4: pass
|
|
2573
|
+
Q5: pass
|
|
2574
|
+
Q6: pass
|
|
2575
|
+
Q7: pass
|
|
2576
|
+
Q8: pass
|
|
2577
|
+
Q9: pass
|
|
2578
|
+
Q10: pass
|
|
2579
|
+
findings: []
|
|
2580
|
+
|
|
2581
|
+
spec/rosett_ai/thor/tasks/adopt_spec.rb:
|
|
2582
|
+
status: signed_off
|
|
2583
|
+
reviewer: hugo
|
|
2584
|
+
review_date: "2026-03-15"
|
|
2585
|
+
sign_off_date: "2026-03-15"
|
|
2586
|
+
verdict: approved
|
|
2587
|
+
intent: "Verifies Adopt task CLI output — local/API modes, pass/warn/fail/unknown status display, severity colorization, elaborate explanations, verbose file counts, sensitive file reporting, cached results, and empty files warning"
|
|
2588
|
+
answers:
|
|
2589
|
+
Q1: pass
|
|
2590
|
+
Q2: pass
|
|
2591
|
+
Q3: pass
|
|
2592
|
+
Q4: pass
|
|
2593
|
+
Q5: pass
|
|
2594
|
+
Q6: pass
|
|
2595
|
+
Q7: pass
|
|
2596
|
+
Q8: pass
|
|
2597
|
+
Q9: pass
|
|
2598
|
+
Q10: pass
|
|
2599
|
+
findings: []
|
|
2600
|
+
|
|
2601
|
+
spec/rosett_ai/thor/tasks/backup_spec.rb:
|
|
2602
|
+
status: signed_off
|
|
2603
|
+
reviewer: hugo
|
|
2604
|
+
review_date: "2026-03-15"
|
|
2605
|
+
sign_off_date: "2026-03-15"
|
|
2606
|
+
verdict: approved
|
|
2607
|
+
intent: "Verifies Backup task — global/local/both scopes, tar.gz creation with content verification, exclusions (settings.local.json, adopt cache), compression algorithms/ratios, URI destinations (file:// support, s3:// rejection), idempotency (unchanged/updated), and summary table"
|
|
2608
|
+
answers:
|
|
2609
|
+
Q1: pass
|
|
2610
|
+
Q2: pass
|
|
2611
|
+
Q3: pass
|
|
2612
|
+
Q4: pass
|
|
2613
|
+
Q5: pass
|
|
2614
|
+
Q6: pass
|
|
2615
|
+
Q7: pass
|
|
2616
|
+
Q8: pass
|
|
2617
|
+
Q9: pass
|
|
2618
|
+
Q10: pass
|
|
2619
|
+
findings: []
|
|
2620
|
+
|
|
2621
|
+
spec/rosett_ai/thor/tasks/behaviour_manage_spec.rb:
|
|
2622
|
+
status: signed_off
|
|
2623
|
+
reviewer: hugo
|
|
2624
|
+
review_date: "2026-03-15"
|
|
2625
|
+
sign_off_date: "2026-03-15"
|
|
2626
|
+
verdict: approved
|
|
2627
|
+
intent: "Verifies BehaviourManage CRUD lifecycle — add with editor ($EDITOR=true), modify with metadata update, delete with force/confirmation/decline, validation failure cleanup, and reference detection in CLAUDE.md and rules"
|
|
2628
|
+
answers:
|
|
2629
|
+
Q1: pass
|
|
2630
|
+
Q2: pass
|
|
2631
|
+
Q3: pass
|
|
2632
|
+
Q4: pass
|
|
2633
|
+
Q5: pass
|
|
2634
|
+
Q6: pass
|
|
2635
|
+
Q7: pass
|
|
2636
|
+
Q8: pass
|
|
2637
|
+
Q9: pass
|
|
2638
|
+
Q10: pass
|
|
2639
|
+
findings: []
|
|
2640
|
+
|
|
2641
|
+
spec/rosett_ai/thor/tasks/behaviour_spec.rb:
|
|
2642
|
+
status: signed_off
|
|
2643
|
+
reviewer: hugo
|
|
2644
|
+
review_date: "2026-03-15"
|
|
2645
|
+
sign_off_date: "2026-03-15"
|
|
2646
|
+
verdict: approved
|
|
2647
|
+
intent: "Verifies Behaviour task — display with table/json/yaml formats and used_in values, list all files, show specific behaviour, validate all/specific files with Thor::Error on failure, corrupted file error handling"
|
|
2648
|
+
answers:
|
|
2649
|
+
Q1: pass
|
|
2650
|
+
Q2: pass
|
|
2651
|
+
Q3: pass
|
|
2652
|
+
Q4: pass
|
|
2653
|
+
Q5: pass
|
|
2654
|
+
Q6: pass
|
|
2655
|
+
Q7: pass
|
|
2656
|
+
Q8: pass
|
|
2657
|
+
Q9: pass
|
|
2658
|
+
Q10: pass
|
|
2659
|
+
findings: []
|
|
2660
|
+
|
|
2661
|
+
spec/rosett_ai/thor/tasks/build_spec.rb:
|
|
2662
|
+
status: signed_off
|
|
2663
|
+
reviewer: hugo
|
|
2664
|
+
review_date: "2026-03-15"
|
|
2665
|
+
sign_off_date: "2026-03-15"
|
|
2666
|
+
verdict: approved
|
|
2667
|
+
intent: "Verifies Build task registers package and engine subcommands and returns exit_on_failure? true"
|
|
2668
|
+
answers:
|
|
2669
|
+
Q1: pass
|
|
2670
|
+
Q2: pass
|
|
2671
|
+
Q3: pass
|
|
2672
|
+
Q4: pass
|
|
2673
|
+
Q5: pass
|
|
2674
|
+
Q6: pass
|
|
2675
|
+
Q7: pass
|
|
2676
|
+
Q8: pass
|
|
2677
|
+
Q9: pass
|
|
2678
|
+
Q10: pass
|
|
2679
|
+
findings: []
|
|
2680
|
+
|
|
2681
|
+
spec/rosett_ai/thor/tasks/config_spec.rb:
|
|
2682
|
+
status: signed_off
|
|
2683
|
+
reviewer: hugo
|
|
2684
|
+
review_date: "2026-03-15"
|
|
2685
|
+
sign_off_date: "2026-03-15"
|
|
2686
|
+
verdict: approved
|
|
2687
|
+
intent: "Verifies Config task — compile with scope files, --simulate dry run, --scope filtering, invalid scope error, show with JSON display and secret masking, --raw YAML display, engine plugin resolution with actionable error messages, and CLI registration"
|
|
2688
|
+
answers:
|
|
2689
|
+
Q1: pass
|
|
2690
|
+
Q2: pass
|
|
2691
|
+
Q3: pass
|
|
2692
|
+
Q4: pass
|
|
2693
|
+
Q5: pass
|
|
2694
|
+
Q6: pass
|
|
2695
|
+
Q7: pass
|
|
2696
|
+
Q8: pass
|
|
2697
|
+
Q9: pass
|
|
2698
|
+
Q10: pass
|
|
2699
|
+
findings: []
|
|
2700
|
+
|
|
2701
|
+
spec/rosett_ai/thor/tasks/content_spec.rb:
|
|
2702
|
+
status: signed_off
|
|
2703
|
+
reviewer: hugo
|
|
2704
|
+
review_date: "2026-03-15"
|
|
2705
|
+
sign_off_date: "2026-03-15"
|
|
2706
|
+
verdict: approved
|
|
2707
|
+
intent: "Verifies Content task — list installed packs, install with WebMock-stubbed catalog/download/signature and Ed25519 license validation, tier-insufficient error, and update with no packs"
|
|
2708
|
+
answers:
|
|
2709
|
+
Q1: pass
|
|
2710
|
+
Q2: pass
|
|
2711
|
+
Q3: pass
|
|
2712
|
+
Q4: pass
|
|
2713
|
+
Q5: pass
|
|
2714
|
+
Q6: pass
|
|
2715
|
+
Q7: pass
|
|
2716
|
+
Q8: pass
|
|
2717
|
+
Q9: pass
|
|
2718
|
+
Q10: pass
|
|
2719
|
+
findings: []
|
|
2720
|
+
|
|
2721
|
+
spec/rosett_ai/thor/tasks/dbus_spec.rb:
|
|
2722
|
+
status: signed_off
|
|
2723
|
+
reviewer: hugo
|
|
2724
|
+
review_date: "2026-03-15"
|
|
2725
|
+
sign_off_date: "2026-03-15"
|
|
2726
|
+
verdict: approved
|
|
2727
|
+
intent: "Verifies DBus task — status (running/not running), detect compositor with adapter mapping, start (already running / D-Bus unavailable), stop (not running), and adapter_for private method for sway/hyprland/unknown"
|
|
2728
|
+
answers:
|
|
2729
|
+
Q1: pass
|
|
2730
|
+
Q2: pass
|
|
2731
|
+
Q3: pass
|
|
2732
|
+
Q4: pass
|
|
2733
|
+
Q5: pass
|
|
2734
|
+
Q6: pass
|
|
2735
|
+
Q7: pass
|
|
2736
|
+
Q8: pass
|
|
2737
|
+
Q9: pass
|
|
2738
|
+
Q10: pass
|
|
2739
|
+
findings: []
|
|
2740
|
+
|
|
2741
|
+
spec/rosett_ai/thor/tasks/design_spec.rb:
|
|
2742
|
+
status: signed_off
|
|
2743
|
+
reviewer: hugo
|
|
2744
|
+
review_date: "2026-03-15"
|
|
2745
|
+
sign_off_date: "2026-03-15"
|
|
2746
|
+
verdict: approved
|
|
2747
|
+
intent: "Verifies Design task — validate all/specific/missing docs, show with header/intent/constraints/acceptance/dependencies, --full with examples/anti-patterns/preferences, list with table and malformed file handling"
|
|
2748
|
+
answers:
|
|
2749
|
+
Q1: pass
|
|
2750
|
+
Q2: pass
|
|
2751
|
+
Q3: pass
|
|
2752
|
+
Q4: pass
|
|
2753
|
+
Q5: pass
|
|
2754
|
+
Q6: pass
|
|
2755
|
+
Q7: pass
|
|
2756
|
+
Q8: pass
|
|
2757
|
+
Q9: pass
|
|
2758
|
+
Q10: pass
|
|
2759
|
+
findings: []
|
|
2760
|
+
|
|
2761
|
+
spec/rosett_ai/thor/tasks/desktop_spec.rb:
|
|
2762
|
+
status: signed_off
|
|
2763
|
+
reviewer: hugo
|
|
2764
|
+
review_date: "2026-03-15"
|
|
2765
|
+
sign_off_date: "2026-03-15"
|
|
2766
|
+
verdict: approved
|
|
2767
|
+
intent: "Verifies Desktop task — status display with GTK4/D-Bus availability, install instructions when missing, gtk4 launch with SystemExit(0) on success and Thor::Error when unavailable"
|
|
2768
|
+
answers:
|
|
2769
|
+
Q1: pass
|
|
2770
|
+
Q2: pass
|
|
2771
|
+
Q3: pass
|
|
2772
|
+
Q4: pass
|
|
2773
|
+
Q5: pass
|
|
2774
|
+
Q6: pass
|
|
2775
|
+
Q7: pass
|
|
2776
|
+
Q8: pass
|
|
2777
|
+
Q9: pass
|
|
2778
|
+
Q10: pass
|
|
2779
|
+
findings: []
|
|
2780
|
+
|
|
2781
|
+
spec/rosett_ai/thor/tasks/documentation_spec.rb:
|
|
2782
|
+
status: signed_off
|
|
2783
|
+
reviewer: hugo
|
|
2784
|
+
review_date: "2026-03-15"
|
|
2785
|
+
sign_off_date: "2026-03-15"
|
|
2786
|
+
verdict: approved
|
|
2787
|
+
intent: "Verifies Documentation task — update with dry-run/apply/all-locales, status with file count and locale display, private change scanning (behaviour/dependency/lib/reference), documented? detection, locale resolution, and reference compilation integration"
|
|
2788
|
+
answers:
|
|
2789
|
+
Q1: pass
|
|
2790
|
+
Q2: pass
|
|
2791
|
+
Q3: pass
|
|
2792
|
+
Q4: pass
|
|
2793
|
+
Q5: pass
|
|
2794
|
+
Q6: pass
|
|
2795
|
+
Q7: pass
|
|
2796
|
+
Q8: pass
|
|
2797
|
+
Q9: pass
|
|
2798
|
+
Q10: pass
|
|
2799
|
+
findings: []
|
|
2800
|
+
|
|
2801
|
+
spec/rosett_ai/thor/tasks/engines_spec.rb:
|
|
2802
|
+
status: signed_off
|
|
2803
|
+
reviewer: hugo
|
|
2804
|
+
review_date: "2026-03-15"
|
|
2805
|
+
sign_off_date: "2026-03-15"
|
|
2806
|
+
verdict: approved
|
|
2807
|
+
intent: "Verifies Engines task — list all engines in table, detect with detector stubs for claude/agents_md/acme, and status with default engine display and detection results"
|
|
2808
|
+
answers:
|
|
2809
|
+
Q1: pass
|
|
2810
|
+
Q2: pass
|
|
2811
|
+
Q3: pass
|
|
2812
|
+
Q4: pass
|
|
2813
|
+
Q5: pass
|
|
2814
|
+
Q6: pass
|
|
2815
|
+
Q7: pass
|
|
2816
|
+
Q8: pass
|
|
2817
|
+
Q9: pass
|
|
2818
|
+
Q10: pass
|
|
2819
|
+
findings: []
|
|
2820
|
+
|
|
2821
|
+
spec/rosett_ai/thor/tasks/init_spec.rb:
|
|
2822
|
+
status: signed_off
|
|
2823
|
+
reviewer: hugo
|
|
2824
|
+
review_date: "2026-03-15"
|
|
2825
|
+
sign_off_date: "2026-03-15"
|
|
2826
|
+
verdict: approved
|
|
2827
|
+
intent: "Verifies Init task — --global creates directories/settings/config with engine detection, --local creates .claude structure, --project creates .rosett-ai with config.yml, RAI_ORIGINAL_PWD respects external directory, compile integration with --no-compile and CompileError graceful handling"
|
|
2828
|
+
answers:
|
|
2829
|
+
Q1: pass
|
|
2830
|
+
Q2: pass
|
|
2831
|
+
Q3: pass
|
|
2832
|
+
Q4: pass
|
|
2833
|
+
Q5: pass
|
|
2834
|
+
Q6: pass
|
|
2835
|
+
Q7: pass
|
|
2836
|
+
Q8: pass
|
|
2837
|
+
Q9: pass
|
|
2838
|
+
Q10: pass
|
|
2839
|
+
findings: []
|
|
2840
|
+
|
|
2841
|
+
spec/rosett_ai/thor/tasks/license_spec.rb:
|
|
2842
|
+
status: signed_off
|
|
2843
|
+
reviewer: hugo
|
|
2844
|
+
review_date: "2026-03-15"
|
|
2845
|
+
sign_off_date: "2026-03-15"
|
|
2846
|
+
verdict: approved
|
|
2847
|
+
intent: "Verifies License task — activate with valid/invalid Ed25519 JWT keys, status display (community/subscriber tiers), and deactivate with file removal and not-found handling"
|
|
2848
|
+
answers:
|
|
2849
|
+
Q1: pass
|
|
2850
|
+
Q2: pass
|
|
2851
|
+
Q3: pass
|
|
2852
|
+
Q4: pass
|
|
2853
|
+
Q5: pass
|
|
2854
|
+
Q6: pass
|
|
2855
|
+
Q7: pass
|
|
2856
|
+
Q8: pass
|
|
2857
|
+
Q9: pass
|
|
2858
|
+
Q10: pass
|
|
2859
|
+
findings: []
|
|
2860
|
+
|
|
2861
|
+
spec/rosett_ai/thor/tasks/release_spec.rb:
|
|
2862
|
+
status: signed_off
|
|
2863
|
+
reviewer: hugo
|
|
2864
|
+
review_date: "2026-03-15"
|
|
2865
|
+
sign_off_date: "2026-03-15"
|
|
2866
|
+
verdict: approved
|
|
2867
|
+
intent: "Verifies Release task — status table with version/commit count, prepare with invalid level/dirty tree guards, tag with exists check, version bumping arithmetic (major/minor/patch resets), VERIFICATION_GATES constant, and VALID_LEVELS constant"
|
|
2868
|
+
answers:
|
|
2869
|
+
Q1: pass
|
|
2870
|
+
Q2: pass
|
|
2871
|
+
Q3: pass
|
|
2872
|
+
Q4: pass
|
|
2873
|
+
Q5: pass
|
|
2874
|
+
Q6: pass
|
|
2875
|
+
Q7: pass
|
|
2876
|
+
Q8: pass
|
|
2877
|
+
Q9: pass
|
|
2878
|
+
Q10: pass
|
|
2879
|
+
findings: []
|
|
2880
|
+
|
|
2881
|
+
spec/rosett_ai/thor/tasks/tooling_spec.rb:
|
|
2882
|
+
status: signed_off
|
|
2883
|
+
reviewer: hugo
|
|
2884
|
+
review_date: "2026-03-15"
|
|
2885
|
+
sign_off_date: "2026-03-15"
|
|
2886
|
+
verdict: approved
|
|
2887
|
+
intent: "Verifies Tooling task registers validate-ci-yaml and check-versions commands"
|
|
2888
|
+
answers:
|
|
2889
|
+
Q1: pass
|
|
2890
|
+
Q2: pass
|
|
2891
|
+
Q3: pass
|
|
2892
|
+
Q4: pass
|
|
2893
|
+
Q5: pass
|
|
2894
|
+
Q6: pass
|
|
2895
|
+
Q7: pass
|
|
2896
|
+
Q8: pass
|
|
2897
|
+
Q9: pass
|
|
2898
|
+
Q10: pass
|
|
2899
|
+
findings: []
|
|
2900
|
+
|
|
2901
|
+
spec/rosett_ai/thor/tasks/validate_spec.rb:
|
|
2902
|
+
status: signed_off
|
|
2903
|
+
reviewer: hugo
|
|
2904
|
+
review_date: "2026-03-15"
|
|
2905
|
+
sign_off_date: "2026-03-15"
|
|
2906
|
+
verdict: approved
|
|
2907
|
+
intent: "Verifies Validate task — all categories (behaviour/design/tooling) with zero/valid/invalid/mixed files, per-category breakdown, Thor::Error on failure, and CATEGORIES constant coverage against schema files (excluding internal schemas)"
|
|
2908
|
+
answers:
|
|
2909
|
+
Q1: pass
|
|
2910
|
+
Q2: pass
|
|
2911
|
+
Q3: pass
|
|
2912
|
+
Q4: pass
|
|
2913
|
+
Q5: pass
|
|
2914
|
+
Q6: pass
|
|
2915
|
+
Q7: pass
|
|
2916
|
+
Q8: pass
|
|
2917
|
+
Q9: pass
|
|
2918
|
+
Q10: pass
|
|
2919
|
+
findings: []
|