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