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,669 @@
|
|
|
1
|
+
# Rosett-AI v1.0.0 Implementation Plan
|
|
2
|
+
|
|
3
|
+
Engine-agnostic architecture pivot and desktop integration.
|
|
4
|
+
|
|
5
|
+
Decisions captured in: `doc/decisions/007-engine-agnostic-pivot.md`
|
|
6
|
+
Design document: `conf/design/engine_architecture.yml`
|
|
7
|
+
Conversation transcript: `2026-02-26 Q&A session (9 questions, all resolved)`
|
|
8
|
+
|
|
9
|
+
Last updated: 2026-03-05 (v1.0.0 tagged)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Table of Contents
|
|
14
|
+
|
|
15
|
+
1. [Decision Summary](#1-decision-summary)
|
|
16
|
+
2. [Progress Overview](#2-progress-overview)
|
|
17
|
+
3. [Dependency Graph](#3-dependency-graph)
|
|
18
|
+
4. [Phase Details](#4-phase-details)
|
|
19
|
+
5. [Branch Naming Convention](#5-branch-naming-convention)
|
|
20
|
+
6. [Engine Architecture Diagram](#6-engine-architecture-diagram)
|
|
21
|
+
7. [Layer Separation Diagram](#7-layer-separation-diagram)
|
|
22
|
+
8. [Manual Tasks](#8-manual-tasks)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 1. Decision Summary
|
|
27
|
+
|
|
28
|
+
| # | Topic | Decision |
|
|
29
|
+
|---|-------|---------|
|
|
30
|
+
| Q1 | Naming | "Rosett-AI" (keep `rosett-ai` acronym) |
|
|
31
|
+
| Q2 | Generic layer | Strict separation; capability manifests with compile-time warnings |
|
|
32
|
+
| Q3 | Engine architecture | Option C: engine-as-namespace-directory, optional components |
|
|
33
|
+
| Q4 | Config compilation | Moves inside each engine; `--target` → `--engine`; configurable default; autodetection; quorum as separate module |
|
|
34
|
+
| Q5 | Output paths | XDG-compliant (`~/.config/rosett-ai/`); engines deploy to tool-native paths |
|
|
35
|
+
| Q6 | Adopt system | Local-only default; `--api` opt-in; quorum-capable; anthropic gem out of core |
|
|
36
|
+
| Q7 | Scope & phasing | 5 phases: restructure → AGENTS.md → Ollama+GPT-NeoX → Goose+Aider → Cursor+Copilot+Windsurf |
|
|
37
|
+
| Q8 | Migration | Incremental (3 sub-phases for Phase 0); version 1.0.0 |
|
|
38
|
+
| Q9 | Desktop priority | Engine Phase 0 first, then Desktop Phase 1 immediately after; parallel thereafter |
|
|
39
|
+
| Q10 | KDE KCM | Deferred indefinitely — C++/QML complexity outside Ruby stack |
|
|
40
|
+
| Q11 | Goose/Aider executors | Folded into Engine Phase 4 alongside Cursor/Copilot/Windsurf |
|
|
41
|
+
| Q12 | GlobalShortcuts | Remains in Desktop Phase 1 scope as known gap |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Progress Overview
|
|
46
|
+
|
|
47
|
+
### Completed Phases
|
|
48
|
+
|
|
49
|
+
| Phase | Branch | Merged | Specs |
|
|
50
|
+
|-------|--------|--------|-------|
|
|
51
|
+
| Engine 0a — Rename + v1.0.0 | `engine/0a-rename-code-companion` | 2026-02-26 | 251 |
|
|
52
|
+
| Engine 0b — Engine directories | `engine/0b-engine-directories` | 2026-02-26 | 966 |
|
|
53
|
+
| Engine 0c — XDG + --engine + detectors | `engine/0c-xdg-engine-flag-detectors` | 2026-02-26 | 1017 |
|
|
54
|
+
| Desktop 1 — D-Bus service | `desktop/1-dbus-service` | 2026-02-27 | ~1030 |
|
|
55
|
+
| Engine 1 — AGENTS.md | `engine/1-agents-md` | 2026-02-27 | 1061 |
|
|
56
|
+
| Desktop 2 — GTK4 app | `desktop/2-gtk4-app` | 2026-02-27 | ~1080 |
|
|
57
|
+
| Engine 2 — Ollama + GPT-NeoX | `engine/2-ollama-gpt-neox` | 2026-02-27 | ~1100 |
|
|
58
|
+
| Engine 3 — Goose + Aider (compilation) | `engine/3-goose-aider` | 2026-02-28 | ~1200 |
|
|
59
|
+
| Consistency review | `refactor/consistency-review` | 2026-02-28 | 1382 |
|
|
60
|
+
| Engine 4 — Cursor + Copilot + Windsurf + executors | `engine/4-cursor-copilot-windsurf` | 2026-03-02 | 1491 |
|
|
61
|
+
| v1.0.0 Release prep | `release/v1.0.0-core` | 2026-03-04 | 1574 |
|
|
62
|
+
|
|
63
|
+
### v1.0.0 Release Phases (2026-03-04)
|
|
64
|
+
|
|
65
|
+
| Phase | Branch | Scope |
|
|
66
|
+
|-------|--------|-------|
|
|
67
|
+
| Design | `design/operations-monitoring-optimization` | Operations domain, monitoring + optimization design docs |
|
|
68
|
+
| Test Quality | `test/quality-baseline` | SimpleCov thresholds, fixtures, Mutant subject expansion |
|
|
69
|
+
| CI Pipeline | `ci/release-pipeline` | Validation includes, core-only rspec, smoke test, release-cli pin |
|
|
70
|
+
| Documentation | `docs/v1-release-polish` | Man page, USAGE.md, ADR-009, INSTALL, CONTRIBUTING, REFERENCES |
|
|
71
|
+
| Release Prep | `release/v1.0.0-core` | Core-only gemspec, Zeitwerk ignore, desktop graceful degradation, CHANGELOG |
|
|
72
|
+
| Final | `chore/v1-release-final` | Security scan hardening, AI provenance, quality gate, tag |
|
|
73
|
+
|
|
74
|
+
### Backfill Branches (all merged)
|
|
75
|
+
|
|
76
|
+
| Branch | Scope |
|
|
77
|
+
|--------|-------|
|
|
78
|
+
| `backfill/executor-normalize` | Executor interface normalization |
|
|
79
|
+
| `backfill/capability-checker` | Compile-time capability warnings |
|
|
80
|
+
| `backfill/quorum-module` | Quorum dispatcher, collector, comparator |
|
|
81
|
+
| `backfill/dbus-desktop` | D-Bus stop, StatusNotifierItem, GTK4 preferences |
|
|
82
|
+
| `documentation` | 40 Mermaid diagrams across doc/ |
|
|
83
|
+
|
|
84
|
+
### Engine Delivery Matrix
|
|
85
|
+
|
|
86
|
+
| Engine | Backend | Detector | Executor | Config Adapter | Quorum |
|
|
87
|
+
|--------|---------|----------|----------|----------------|--------|
|
|
88
|
+
| Claude | done | done | done | done | done |
|
|
89
|
+
| Generic | done | N/A | N/A | N/A | N/A |
|
|
90
|
+
| AGENTS.md | done | done | N/A | N/A | N/A |
|
|
91
|
+
| Ollama | done | done | done | N/A | done |
|
|
92
|
+
| GPT-NeoX | done | done | done | N/A | done |
|
|
93
|
+
| Goose | done | done | done | N/A | done |
|
|
94
|
+
| Aider | done | done | done | N/A | done |
|
|
95
|
+
| Cursor | done | done | N/A | N/A | N/A |
|
|
96
|
+
| Copilot | done | done | N/A | N/A | N/A |
|
|
97
|
+
| Windsurf | done | done | N/A | N/A | N/A |
|
|
98
|
+
|
|
99
|
+
### Remaining Work
|
|
100
|
+
|
|
101
|
+
| Phase | Status | Risk | Priority |
|
|
102
|
+
|-------|--------|------|----------|
|
|
103
|
+
| Desktop 1 — GlobalShortcuts gap | Known gap | Low | When needed |
|
|
104
|
+
| Desktop 3 — KDE KCM | **Deferred indefinitely** | High | Low |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. Dependency Graph
|
|
109
|
+
|
|
110
|
+
```mermaid
|
|
111
|
+
graph TD
|
|
112
|
+
E0a["Engine 0a<br/>Rename + v1.0.0<br/>☑ DONE"]
|
|
113
|
+
E0b["Engine 0b<br/>engines/ structure<br/>☑ DONE"]
|
|
114
|
+
E0c["Engine 0c<br/>XDG + --engine + detectors<br/>☑ DONE"]
|
|
115
|
+
D1["Desktop 1<br/>D-Bus service<br/>☑ DONE (1 gap)"]
|
|
116
|
+
E1["Engine 1<br/>AGENTS.md<br/>☑ DONE"]
|
|
117
|
+
D2["Desktop 2<br/>GTK4 app<br/>☑ DONE"]
|
|
118
|
+
E2["Engine 2<br/>Ollama + GPT-NeoX<br/>☑ DONE"]
|
|
119
|
+
E3["Engine 3<br/>Goose + Aider (compile)<br/>☑ DONE"]
|
|
120
|
+
E4["Engine 4<br/>Cursor + Copilot + Windsurf<br/>+ Goose/Aider executors<br/>☑ DONE"]
|
|
121
|
+
REL["v1.0.0 Release<br/>Core-only split<br/>☑ DONE"]
|
|
122
|
+
D3["Desktop 3<br/>KDE KCM<br/>DEFERRED"]
|
|
123
|
+
|
|
124
|
+
E0a --> E0b
|
|
125
|
+
E0b --> E0c
|
|
126
|
+
E0c --> D1
|
|
127
|
+
E0c --> E1
|
|
128
|
+
D1 --> D2
|
|
129
|
+
E1 --> E2
|
|
130
|
+
E2 --> E3
|
|
131
|
+
E3 --> E4
|
|
132
|
+
E4 --> REL
|
|
133
|
+
|
|
134
|
+
style E0a fill:#2ecc71,stroke:#333,color:#000
|
|
135
|
+
style E0b fill:#2ecc71,stroke:#333,color:#000
|
|
136
|
+
style E0c fill:#2ecc71,stroke:#333,color:#000
|
|
137
|
+
style D1 fill:#2ecc71,stroke:#333,color:#000
|
|
138
|
+
style D2 fill:#2ecc71,stroke:#333,color:#000
|
|
139
|
+
style E1 fill:#2ecc71,stroke:#333,color:#000
|
|
140
|
+
style E2 fill:#2ecc71,stroke:#333,color:#000
|
|
141
|
+
style E3 fill:#2ecc71,stroke:#333,color:#000
|
|
142
|
+
style E4 fill:#2ecc71,stroke:#333,color:#000
|
|
143
|
+
style D3 fill:#95a5a6,stroke:#333,color:#000
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Legend:
|
|
147
|
+
|
|
148
|
+
- Green: Completed
|
|
149
|
+
- Grey: Deferred indefinitely
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 4. Phase Details
|
|
154
|
+
|
|
155
|
+
### Engine Phase 0a — Rename + Version Bump
|
|
156
|
+
|
|
157
|
+
| Field | Value |
|
|
158
|
+
|-------|-------|
|
|
159
|
+
| Branch | `engine/0a-rename-code-companion` |
|
|
160
|
+
| Status | **DONE** — merged to main |
|
|
161
|
+
| Tests | 251 examples, 0 failures |
|
|
162
|
+
|
|
163
|
+
**Scope**:
|
|
164
|
+
|
|
165
|
+
- [x] `rosett-ai.gemspec`: summary → "Rosett-AI", description updated
|
|
166
|
+
- [x] `CLAUDE.md`: header and overview table
|
|
167
|
+
- [x] `CONTRIBUTING.md`: header
|
|
168
|
+
- [x] `INSTALL.md`: header and references (no occurrences found)
|
|
169
|
+
- [x] `doc/*.md`: all "Claude Companion" → "Code Companion" references
|
|
170
|
+
- [x] `locales/en.yml`, `locales/fr.yml`, `locales/ar.yml`: product name strings (no occurrences found)
|
|
171
|
+
- [x] `lib/rosett_ai/version.rb`: bump to `1.0.0`
|
|
172
|
+
- [x] `CHANGELOG.md`: v1.0.0 entry
|
|
173
|
+
- [x] All CLI `desc` strings in `lib/rosett_ai/thor/tasks/*.rb` and `lib/rosett_ai/thor/cli.rb`
|
|
174
|
+
- [x] `cliff.toml`: header text
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Engine Phase 0b — Create Engine Directory Structure
|
|
179
|
+
|
|
180
|
+
| Field | Value |
|
|
181
|
+
|-------|-------|
|
|
182
|
+
| Branch | `engine/0b-engine-directories` |
|
|
183
|
+
| Status | **DONE** — merged to main |
|
|
184
|
+
| Tests | 966 examples, 0 failures |
|
|
185
|
+
|
|
186
|
+
**Scope**:
|
|
187
|
+
|
|
188
|
+
- [x] Create `lib/rosett_ai/engines/` directory
|
|
189
|
+
- [x] Create `lib/rosett_ai/engines/claude/` with:
|
|
190
|
+
- `backend.rb` (moved from `lib/rosett_ai/compiler/backends/claude_backend.rb`)
|
|
191
|
+
- `config_compiler.rb` (moved from `lib/rosett_ai/config/compiler.rb`)
|
|
192
|
+
- `key_map.rb` (moved from `lib/rosett_ai/config/key_map.rb`)
|
|
193
|
+
- `scope_router.rb` (moved from `lib/rosett_ai/config/scope_router.rb`)
|
|
194
|
+
- `domain_transformer.rb` (moved from `lib/rosett_ai/config/domain_transformer.rb`)
|
|
195
|
+
- `executor.rb` (extracted from `lib/rosett_ai/adopter/rule_adopter.rb` Anthropic API code)
|
|
196
|
+
- [x] Create `lib/rosett_ai/engines/generic/` with:
|
|
197
|
+
- `backend.rb` (moved from `lib/rosett_ai/compiler/backends/generic_backend.rb`)
|
|
198
|
+
- [x] Create `conf/engines/claude/manifest.yml` and `conf/engines/generic/manifest.yml`
|
|
199
|
+
- [x] Create `lib/rosett_ai/engines/registry.rb` (engine discovery from directories)
|
|
200
|
+
- [x] Update `lib/rosett_ai/compiler/backend.rb` to delegate to engines
|
|
201
|
+
- [x] Move `anthropic` gem from core `rosett-ai.gemspec` to `Gemfile` engines group
|
|
202
|
+
- [x] Update all `require` paths (Zeitwerk handles autoload automatically)
|
|
203
|
+
- [x] Move `conf/claude_code/*.yml` → `conf/engines/claude/config/`
|
|
204
|
+
- [x] Move `conf/schemas/claude_code_config_schema.json` → `conf/engines/claude/schemas/config_schema.json`
|
|
205
|
+
- [x] Move `conf/targets/claude.yml` → `conf/engines/claude/target.yml`
|
|
206
|
+
- [x] Move `conf/targets/generic.yml` → `conf/engines/generic/target.yml`
|
|
207
|
+
- [x] Keep backward-compatible aliases for one release cycle (deprecated, remove in v1.1.0)
|
|
208
|
+
- [x] Update all specs to new paths
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
### Engine Phase 0c — XDG Paths + --engine Flag + Detectors
|
|
213
|
+
|
|
214
|
+
| Field | Value |
|
|
215
|
+
|-------|-------|
|
|
216
|
+
| Branch | `engine/0c-xdg-engine-flag-detectors` |
|
|
217
|
+
| Status | **DONE** — merged to main |
|
|
218
|
+
| Tests | 1017 examples, 0 failures |
|
|
219
|
+
|
|
220
|
+
**Scope**:
|
|
221
|
+
|
|
222
|
+
- [x] Update `PathResolver` to use XDG paths (`~/.config/rosett-ai/`) as rosett-ai home
|
|
223
|
+
- [x] Engine-specific path resolution delegates to each engine's `path_resolver.rb`
|
|
224
|
+
- [x] Rename `--target` to `--engine` in `lib/rosett_ai/thor/tasks/compile.rb`
|
|
225
|
+
- [x] Keep `--target` as deprecated alias (emit warning, remove in v1.1.0)
|
|
226
|
+
- [x] Create engine detector framework:
|
|
227
|
+
- `lib/rosett_ai/engines/detector.rb` (base class, reads manifest detection rules)
|
|
228
|
+
- `lib/rosett_ai/engines/claude/detector.rb` (checks `which claude`, `~/.claude/` exists)
|
|
229
|
+
- [x] Create `bin/raictl engines` CLI subcommand:
|
|
230
|
+
- `engines list` — show all known engines
|
|
231
|
+
- `engines detect` — probe system, report installed tools
|
|
232
|
+
- `engines status` — detected + configured + default
|
|
233
|
+
- [x] Create `~/.config/rosett-ai/config.yml` schema and loader (default engine, etc.)
|
|
234
|
+
- [x] Update `bin/raictl init` to suggest default engine based on autodetection
|
|
235
|
+
- [x] Update adopt to default to `--local` (remove Anthropic API as default path)
|
|
236
|
+
- [x] Add `--api` flag to adopt, wire to engine executor
|
|
237
|
+
- [x] Add `--strict` flag to compile (warnings → errors)
|
|
238
|
+
- [x] Create `conf/schemas/engine_manifest_schema.json` for manifest validation
|
|
239
|
+
- [x] Update CLAUDE.md CLI Usage section
|
|
240
|
+
- [x] Update man page `doc/man/rai.1.ronn`
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### Desktop Phase 1 — D-Bus Service Foundation
|
|
245
|
+
|
|
246
|
+
| Field | Value |
|
|
247
|
+
|-------|-------|
|
|
248
|
+
| Branch | `desktop/1-dbus-service` |
|
|
249
|
+
| Status | **DONE** — merged to main (1 known gap: GlobalShortcuts) |
|
|
250
|
+
| Tests | D-Bus service specs, integration tests with dbus-daemon |
|
|
251
|
+
|
|
252
|
+
**Scope**: As defined in `conf/design/desktop_integration.yml` Phase 1:
|
|
253
|
+
|
|
254
|
+
- [x] `be.neatnerds.rosettai` D-Bus session bus service (ruby-dbus)
|
|
255
|
+
- [x] `be.neatnerds.rosettai.Manager` interface (Compile, SwitchContext, GetStatus, Shutdown, SetConfig, Version, ListEngines)
|
|
256
|
+
- [x] `be.neatnerds.rosettai.FocusMonitor` interface (GetCurrentFocus, FocusChanged signal)
|
|
257
|
+
- [x] StatusNotifierItem for system tray (`org.kde.StatusNotifierItem`)
|
|
258
|
+
- [x] FocusMonitor with compositor adapters (GNOME, KWin, sway, i3, Hyprland, X11)
|
|
259
|
+
- [ ] GlobalShortcuts portal registration (XDG portal `org.freedesktop.portal.GlobalShortcuts`) — **known gap, to be addressed**
|
|
260
|
+
- [x] CLI: `bin/raictl dbus start` to start service
|
|
261
|
+
- [x] CLI: `bin/raictl dbus stop` to stop service
|
|
262
|
+
- [x] CLI: `bin/raictl dbus status` to check service state
|
|
263
|
+
- [x] D-Bus service auto-activation `.service` file
|
|
264
|
+
- [x] Introspection XML for all interfaces
|
|
265
|
+
- [x] Graceful degradation if D-Bus session bus unavailable
|
|
266
|
+
- [x] Engine selector: Manager.Compile accepts engine parameter
|
|
267
|
+
- [x] Add `ruby-dbus` to gemspec (core dependency — D-Bus is transport, not engine-specific)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### Engine Phase 1 — AGENTS.md Engine
|
|
272
|
+
|
|
273
|
+
| Field | Value |
|
|
274
|
+
|-------|-------|
|
|
275
|
+
| Branch | `engine/1-agents-md` |
|
|
276
|
+
| Status | **DONE** — merged to main |
|
|
277
|
+
| Tests | 1061 examples, 0 failures |
|
|
278
|
+
|
|
279
|
+
**Scope**:
|
|
280
|
+
|
|
281
|
+
- [x] Create `lib/rosett_ai/engines/agents_md/`
|
|
282
|
+
- `backend.rb` — compile behaviour YAML to AGENTS.md format
|
|
283
|
+
- `manifest.yml` — capabilities (no settings, no executor)
|
|
284
|
+
- `detector.rb` — check for existing AGENTS.md in project root
|
|
285
|
+
- `validator.rb` — validate output against AGENTS.md spec
|
|
286
|
+
- [x] Create `conf/engines/agents_md/` (engine config, if any)
|
|
287
|
+
- [x] `bin/raictl compile --engine agents_md` produces valid AGENTS.md
|
|
288
|
+
- [x] Capability warnings for features AGENTS.md doesn't support
|
|
289
|
+
- [x] Specs and integration tests
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### Desktop Phase 2 — GTK4 App (rosett-ai-gtk4)
|
|
294
|
+
|
|
295
|
+
| Field | Value |
|
|
296
|
+
|-------|-------|
|
|
297
|
+
| Branch | `desktop/2-gtk4-app` |
|
|
298
|
+
| Status | **DONE** — merged to main |
|
|
299
|
+
| Tests | GTK4 app specs, preferences dialog specs |
|
|
300
|
+
|
|
301
|
+
**Scope**: As defined in `conf/design/desktop_integration.yml` Phase 2.
|
|
302
|
+
|
|
303
|
+
**Delivered**:
|
|
304
|
+
|
|
305
|
+
- [x] `lib/rosett_ai/desktop/gtk4_app.rb` — main GTK4/Adwaita application window
|
|
306
|
+
- [x] `lib/rosett_ai/desktop/gtk4_preferences.rb` — preferences dialog with dynamic engine list
|
|
307
|
+
- [x] `lib/rosett_ai/desktop/dbus_client.rb` — D-Bus client for GUI ↔ service communication
|
|
308
|
+
- [x] `lib/rosett_ai/desktop/gui_logger.rb` — crash-proof GUI logging
|
|
309
|
+
- [x] `lib/rosett_ai/ui/gtk4.rb` — GTK4 UI adapter (tables, spinners, prompts)
|
|
310
|
+
- [x] CLI: `bin/raictl desktop gtk4` launches the application
|
|
311
|
+
- [x] GNOME HIG instant-apply preferences pattern
|
|
312
|
+
- [x] Graceful degradation if libadwaita/gtk4 gems unavailable
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
### Engine Phase 2 — Ollama + GPT-NeoX Engines
|
|
317
|
+
|
|
318
|
+
| Field | Value |
|
|
319
|
+
|-------|-------|
|
|
320
|
+
| Branch | `engine/2-ollama-gpt-neox` |
|
|
321
|
+
| Status | **DONE** — merged to main |
|
|
322
|
+
| Tests | Executor specs with mocked HTTP endpoints |
|
|
323
|
+
|
|
324
|
+
**Scope**:
|
|
325
|
+
|
|
326
|
+
- [x] Create `lib/rosett_ai/engines/ollama/`
|
|
327
|
+
- `detector.rb` — check `which ollama`, probe localhost:11434
|
|
328
|
+
- `executor.rb` — Ollama native API (`/api/generate`) + `analyze` method
|
|
329
|
+
- `backend.rb` — inherits from Generic backend
|
|
330
|
+
- `manifest.yml` — execution metadata, compilation via Generic backend
|
|
331
|
+
- `target.yml` — target profile for compilation
|
|
332
|
+
- [x] Create `lib/rosett_ai/engines/gpt_neox/`
|
|
333
|
+
- `detector.rb` — check for vLLM/TGI endpoint (configurable)
|
|
334
|
+
- `executor.rb` — OpenAI-compatible API, NeoX-specific params + `analyze` method
|
|
335
|
+
- `backend.rb` — inherits from Generic backend
|
|
336
|
+
- `manifest.yml` — independent from Ollama
|
|
337
|
+
- `target.yml` — target profile for compilation
|
|
338
|
+
- [x] Create `lib/rosett_ai/quorum/` module (initial implementation):
|
|
339
|
+
- `dispatcher.rb` — send adopt analysis to N engines in parallel (Thread-based)
|
|
340
|
+
- `collector.rb` — gather responses, normalize to common format
|
|
341
|
+
- `comparator.rb` — compare structured findings, cross-engine promotion
|
|
342
|
+
- `strategies/adopt.rb` — adopt-specific consensus orchestration
|
|
343
|
+
- [x] `lib/rosett_ai/adopter/executor_resolver.rb` — manifest-driven executor kwargs
|
|
344
|
+
- [x] `lib/rosett_ai/compiler/capability_checker.rb` — compile-time capability gap warnings
|
|
345
|
+
- [x] `bin/raictl adopt --api --quorum` works with local engines
|
|
346
|
+
- [x] Specs with mocked endpoints and quorum integration tests
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
### Engine Phase 3 — Goose + Aider Engines (Compilation)
|
|
351
|
+
|
|
352
|
+
| Field | Value |
|
|
353
|
+
|-------|-------|
|
|
354
|
+
| Branch | `engine/3-goose-aider` |
|
|
355
|
+
| Status | **DONE** — merged to main |
|
|
356
|
+
| Tests | Backend and detector specs for both engines |
|
|
357
|
+
|
|
358
|
+
**Scope** (compilation-focused — executors deferred to Phase 4):
|
|
359
|
+
|
|
360
|
+
- [x] Create `lib/rosett_ai/engines/goose/`
|
|
361
|
+
- `backend.rb` — compile behaviour YAML to `.goosehints` format
|
|
362
|
+
- `detector.rb` — check `which goose`, `~/.config/goose/` exists
|
|
363
|
+
- `manifest.yml` — compilation capabilities
|
|
364
|
+
- `target.yml` — target profile
|
|
365
|
+
- [x] Create `lib/rosett_ai/engines/aider/`
|
|
366
|
+
- `backend.rb` — compile behaviour YAML to `CONVENTIONS.md` format
|
|
367
|
+
- `detector.rb` — check `which aider`, `~/.aider.conf.yml` exists
|
|
368
|
+
- `manifest.yml` — compilation capabilities
|
|
369
|
+
- `target.yml` — target profile
|
|
370
|
+
- [x] Register both engines in `lib/rosett_ai/engines/registry.rb` (7 at time; expanded to 10 in Phase 4)
|
|
371
|
+
- [x] Cross-engine marker rejection tests
|
|
372
|
+
- [x] `bin/raictl compile --engine goose` produces `.goosehints`
|
|
373
|
+
- [x] `bin/raictl compile --engine aider` produces `CONVENTIONS.md`
|
|
374
|
+
|
|
375
|
+
**Deferred to Phase 4**: Goose/Aider executors, config adapters, quorum participation.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### Consistency Review
|
|
380
|
+
|
|
381
|
+
| Field | Value |
|
|
382
|
+
|-------|-------|
|
|
383
|
+
| Branch | `refactor/consistency-review` |
|
|
384
|
+
| Status | **DONE** — merged to main |
|
|
385
|
+
| Tests | 1382 examples, 0 failures |
|
|
386
|
+
|
|
387
|
+
Post-Engine-3 architectural review addressing 9 findings:
|
|
388
|
+
|
|
389
|
+
- [x] render() signature: category moved into data hash
|
|
390
|
+
- [x] Marker standardization: all engines use `<!-- rosett-ai-{engine}-managed -->`
|
|
391
|
+
- [x] Ollama/GPT-NeoX added to BACKENDS hash + target profiles
|
|
392
|
+
- [x] Capability warnings aggregated per-feature instead of per-file
|
|
393
|
+
- [x] Executor API key guard with `--local` hint
|
|
394
|
+
- [x] Bullet-list local analysis for AGENTS.md format rules
|
|
395
|
+
- [x] D-Bus ListEngines method with dynamic GTK4 engine combo
|
|
396
|
+
- [x] Documentation updated for engines (7 at time of review, later expanded to 10)
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
### Engine Phase 4 — Cursor + Copilot + Windsurf + Goose/Aider Executors
|
|
401
|
+
|
|
402
|
+
| Field | Value |
|
|
403
|
+
|-------|-------|
|
|
404
|
+
| Branch | `engine/4-cursor-copilot-windsurf` |
|
|
405
|
+
| Status | **DONE** — merged to main |
|
|
406
|
+
| Tests | 1491 examples, 0 failures, 5 pending |
|
|
407
|
+
|
|
408
|
+
**Scope — New compilation-only engines**:
|
|
409
|
+
|
|
410
|
+
- [x] Create `lib/rosett_ai/engines/cursor/` (backend, detector, manifest)
|
|
411
|
+
- Output: `.cursorrules` in project root
|
|
412
|
+
- Detector: check for `cursor` binary, `~/.cursor/` directory
|
|
413
|
+
- [x] Create `lib/rosett_ai/engines/copilot/` (backend, detector, manifest)
|
|
414
|
+
- Output: `.github/copilot-instructions.md`
|
|
415
|
+
- Detector: check for `.github/` config directory
|
|
416
|
+
- [x] Create `lib/rosett_ai/engines/windsurf/` (backend, detector, manifest)
|
|
417
|
+
- Output: `.windsurfrules` in project root
|
|
418
|
+
- Detector: check for `windsurf` binary
|
|
419
|
+
- [x] All three are non-invocable (no executor) — compilation only
|
|
420
|
+
- [x] Register in BACKENDS hash (10 total) and update target_schema.json
|
|
421
|
+
- [x] Update `bin/raictl engines list` to show all 10 engines
|
|
422
|
+
|
|
423
|
+
**Scope — Goose/Aider executor support** (folded from Phase 3):
|
|
424
|
+
|
|
425
|
+
- [x] Create `lib/rosett_ai/engines/goose/executor.rb` — CLI subprocess executor (`Open3.capture3`)
|
|
426
|
+
- [x] Create `lib/rosett_ai/engines/aider/executor.rb` — CLI subprocess executor (`Open3.capture3`)
|
|
427
|
+
- [x] New `api_type: cli` category in engine manifests for subprocess-based executors
|
|
428
|
+
- [x] Enable quorum participation for both engines
|
|
429
|
+
- [x] Update manifests to declare executor capability
|
|
430
|
+
|
|
431
|
+
**Scope — Shared**:
|
|
432
|
+
|
|
433
|
+
- [x] Update `engine_manifest_schema.json` — `api_type: cli` + `cli_binary`
|
|
434
|
+
- [x] Update `target_schema.json` — backend enum includes cursor, copilot, windsurf
|
|
435
|
+
- [x] ExecutorResolver CLI branch — `binary:` kwarg for cli-type executors
|
|
436
|
+
- [x] Specs for all new backends, detectors, and executors
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
### Desktop Phase 3 — KDE KCM Module (rosett-ai-kde) — DEFERRED
|
|
441
|
+
|
|
442
|
+
| Field | Value |
|
|
443
|
+
|-------|-------|
|
|
444
|
+
| Branch | `desktop/3-kde-kcm` |
|
|
445
|
+
| Status | **Deferred indefinitely** |
|
|
446
|
+
| Reason | C++/QML falls outside the Ruby stack; high risk, low priority |
|
|
447
|
+
|
|
448
|
+
This phase requires KDE Frameworks and a compiled C++/QML KCM module, which
|
|
449
|
+
is architecturally different from the rest of rosett-ai. Placeholder UI adapters
|
|
450
|
+
exist in `lib/rosett_ai/ui/kde.rb` and `lib/rosett_ai/ui/qt6.rb` for future use.
|
|
451
|
+
|
|
452
|
+
The D-Bus service (`be.neatnerds.rosettai`) provides a stable IPC contract
|
|
453
|
+
that any future KDE integration can consume without changes to rosett-ai core.
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## 5. Branch Naming Convention
|
|
458
|
+
|
|
459
|
+
```text
|
|
460
|
+
# Completed
|
|
461
|
+
engine/0a-rename-code-companion
|
|
462
|
+
engine/0b-engine-directories
|
|
463
|
+
engine/0c-xdg-engine-flag-detectors
|
|
464
|
+
engine/1-agents-md
|
|
465
|
+
engine/2-ollama-gpt-neox
|
|
466
|
+
engine/3-goose-aider
|
|
467
|
+
desktop/1-dbus-service
|
|
468
|
+
desktop/2-gtk4-app
|
|
469
|
+
backfill/executor-normalize
|
|
470
|
+
backfill/capability-checker
|
|
471
|
+
backfill/quorum-module
|
|
472
|
+
backfill/dbus-desktop
|
|
473
|
+
documentation
|
|
474
|
+
refactor/consistency-review
|
|
475
|
+
|
|
476
|
+
# Engine Phase 4
|
|
477
|
+
engine/4-cursor-copilot-windsurf
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Each branch merges to `main` via MR. No long-lived feature branches.
|
|
481
|
+
Each MR must pass all CI gates before merge.
|
|
482
|
+
|
|
483
|
+
Backfill branches address gaps from earlier phases discovered before
|
|
484
|
+
starting the next major phase. They branch from the last completed
|
|
485
|
+
engine phase and merge back to main.
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## 6. Engine Architecture Diagram
|
|
490
|
+
|
|
491
|
+
```mermaid
|
|
492
|
+
graph TB
|
|
493
|
+
subgraph "Generic Layer (Human Intent)"
|
|
494
|
+
B["conf/behaviour/*.yml"]
|
|
495
|
+
D["conf/design/*.yml"]
|
|
496
|
+
S["conf/schemas/*.json"]
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
subgraph "Engine Registry"
|
|
500
|
+
R["lib/rosett_ai/engines/registry.rb"]
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
subgraph "Engines (10 total)"
|
|
504
|
+
subgraph "Claude Engine"
|
|
505
|
+
CB["backend.rb"]
|
|
506
|
+
CC["config_adapter.rb"]
|
|
507
|
+
CD["detector.rb"]
|
|
508
|
+
CE["executor.rb"]
|
|
509
|
+
CM["manifest.yml"]
|
|
510
|
+
end
|
|
511
|
+
subgraph "AGENTS.md Engine"
|
|
512
|
+
AB["backend.rb"]
|
|
513
|
+
AD["detector.rb"]
|
|
514
|
+
AM["manifest.yml"]
|
|
515
|
+
end
|
|
516
|
+
subgraph "Goose Engine"
|
|
517
|
+
GB["backend.rb"]
|
|
518
|
+
GD["detector.rb"]
|
|
519
|
+
GE["executor.rb"]
|
|
520
|
+
GM["manifest.yml"]
|
|
521
|
+
end
|
|
522
|
+
subgraph "Aider Engine"
|
|
523
|
+
IB["backend.rb"]
|
|
524
|
+
ID["detector.rb"]
|
|
525
|
+
IE["executor.rb"]
|
|
526
|
+
IM["manifest.yml"]
|
|
527
|
+
end
|
|
528
|
+
subgraph "Ollama Engine"
|
|
529
|
+
OD["detector.rb"]
|
|
530
|
+
OE["executor.rb"]
|
|
531
|
+
OM["manifest.yml"]
|
|
532
|
+
end
|
|
533
|
+
subgraph "GPT-NeoX Engine"
|
|
534
|
+
ND["detector.rb"]
|
|
535
|
+
NE["executor.rb"]
|
|
536
|
+
NM["manifest.yml"]
|
|
537
|
+
end
|
|
538
|
+
subgraph "Cursor Engine"
|
|
539
|
+
UB["backend.rb"]
|
|
540
|
+
UD["detector.rb"]
|
|
541
|
+
UM["manifest.yml"]
|
|
542
|
+
end
|
|
543
|
+
subgraph "Copilot Engine"
|
|
544
|
+
PB["backend.rb"]
|
|
545
|
+
PD["detector.rb"]
|
|
546
|
+
PM["manifest.yml"]
|
|
547
|
+
end
|
|
548
|
+
subgraph "Windsurf Engine"
|
|
549
|
+
WB["backend.rb"]
|
|
550
|
+
WD["detector.rb"]
|
|
551
|
+
WM["manifest.yml"]
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
subgraph "Quorum Module"
|
|
556
|
+
QD["dispatcher.rb"]
|
|
557
|
+
QC["comparator.rb"]
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
subgraph "Output (Tool-Native Paths)"
|
|
561
|
+
O1["~/.claude/rules/*.md"]
|
|
562
|
+
O2["./AGENTS.md"]
|
|
563
|
+
O3["(quorum results)"]
|
|
564
|
+
O4["./.cursorrules"]
|
|
565
|
+
O5["./.goosehints"]
|
|
566
|
+
O6["./CONVENTIONS.md"]
|
|
567
|
+
O7[".github/copilot-instructions.md"]
|
|
568
|
+
O8["./.windsurfrules"]
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
B --> R
|
|
572
|
+
D --> R
|
|
573
|
+
R --> CB --> O1
|
|
574
|
+
R --> CC
|
|
575
|
+
R --> AB --> O2
|
|
576
|
+
R --> GB --> O5
|
|
577
|
+
R --> IB --> O6
|
|
578
|
+
R --> UB --> O4
|
|
579
|
+
R --> PB --> O7
|
|
580
|
+
R --> WB --> O8
|
|
581
|
+
CE --> QD
|
|
582
|
+
GE --> QD
|
|
583
|
+
IE --> QD
|
|
584
|
+
OE --> QD
|
|
585
|
+
NE --> QD
|
|
586
|
+
QD --> QC --> O3
|
|
587
|
+
|
|
588
|
+
style B fill:#f9f,stroke:#333
|
|
589
|
+
style D fill:#f9f,stroke:#333
|
|
590
|
+
style S fill:#f9f,stroke:#333
|
|
591
|
+
style R fill:#ffd700,stroke:#333
|
|
592
|
+
style QD fill:#ff6347,stroke:#333
|
|
593
|
+
style QC fill:#ff6347,stroke:#333
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
## 7. Layer Separation Diagram
|
|
599
|
+
|
|
600
|
+
```mermaid
|
|
601
|
+
graph LR
|
|
602
|
+
subgraph "Layer 1: Human Intent"
|
|
603
|
+
direction TB
|
|
604
|
+
L1A["Behaviour YAML<br/>(rules, ethics, workflows)"]
|
|
605
|
+
L1B["Design YAML<br/>(architecture, constraints)"]
|
|
606
|
+
L1C["Schemas JSON<br/>(validation)"]
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
subgraph "Layer 2: Engine Translation"
|
|
610
|
+
direction TB
|
|
611
|
+
L2A["Engine Backend<br/>(compile)"]
|
|
612
|
+
L2B["Config Adapter<br/>(settings)"]
|
|
613
|
+
L2C["Path Resolver<br/>(where to write)"]
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
subgraph "Layer 3: Tool-Native Output"
|
|
617
|
+
direction TB
|
|
618
|
+
L3A["CLAUDE.md + rules/"]
|
|
619
|
+
L3B["settings.json"]
|
|
620
|
+
L3C[".cursorrules"]
|
|
621
|
+
L3D["AGENTS.md"]
|
|
622
|
+
L3E[".goosehints"]
|
|
623
|
+
L3F["CONVENTIONS.md"]
|
|
624
|
+
L3G["copilot-instructions.md"]
|
|
625
|
+
L3H[".windsurfrules"]
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
L1A --> L2A
|
|
629
|
+
L1B --> L2A
|
|
630
|
+
L2A --> L2C
|
|
631
|
+
L2B --> L2C
|
|
632
|
+
L2C --> L3A
|
|
633
|
+
L2C --> L3B
|
|
634
|
+
L2C --> L3C
|
|
635
|
+
L2C --> L3D
|
|
636
|
+
L2C --> L3E
|
|
637
|
+
L2C --> L3F
|
|
638
|
+
L2C --> L3G
|
|
639
|
+
L2C --> L3H
|
|
640
|
+
|
|
641
|
+
style L1A fill:#e6f3ff,stroke:#333
|
|
642
|
+
style L1B fill:#e6f3ff,stroke:#333
|
|
643
|
+
style L1C fill:#e6f3ff,stroke:#333
|
|
644
|
+
style L2A fill:#fff3e6,stroke:#333
|
|
645
|
+
style L2B fill:#fff3e6,stroke:#333
|
|
646
|
+
style L2C fill:#fff3e6,stroke:#333
|
|
647
|
+
style L3A fill:#e6ffe6,stroke:#333
|
|
648
|
+
style L3B fill:#e6ffe6,stroke:#333
|
|
649
|
+
style L3C fill:#e6ffe6,stroke:#333
|
|
650
|
+
style L3D fill:#e6ffe6,stroke:#333
|
|
651
|
+
style L3E fill:#e6ffe6,stroke:#333
|
|
652
|
+
style L3F fill:#e6ffe6,stroke:#333
|
|
653
|
+
style L3G fill:#e6ffe6,stroke:#333
|
|
654
|
+
style L3H fill:#e6ffe6,stroke:#333
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## 8. Manual Tasks
|
|
660
|
+
|
|
661
|
+
These tasks require human action outside the codebase:
|
|
662
|
+
|
|
663
|
+
| Task | Owner | When | Status |
|
|
664
|
+
|------|-------|------|--------|
|
|
665
|
+
| Update GitLab project description (remove "Claude", reflect "Code Companion") | hugo | After Engine 0a merges | Done |
|
|
666
|
+
| Configure GitLab CI runners for D-Bus integration tests | hugo | Before Desktop 1 | Verify |
|
|
667
|
+
| Register `be.neatnerds.rosettai` bus name with freedesktop.org (optional) | hugo | Before Desktop 1 release | Pending |
|
|
668
|
+
| Set up APT repository for v1.0.0 packages | hugo | Before first v1.x release | Pending |
|
|
669
|
+
| Implement GlobalShortcuts portal registration | dev | Desktop 1 gap | Pending |
|