Conversation
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
Important Review skippedThis PR was authored by the user configured for CodeRabbit reviews. CodeRabbit does not review PRs authored by this user. It's recommended to use a dedicated user account to post CodeRabbit review feedback. ⚙️ Run configurationConfiguration used: Repository UI Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis PR updates CI/CD workflows and linting, adds frontend/test env wiring and new workflows (vz-linux host-gated, UI research/nightly/parity), introduces Docker Compose single/multi-user configs and loopback WebUI binding, refactors the entrypoint env/DB handling, and adds design/docs and repo metadata edits. ChangesCI/CD Workflows & Infrastructure
Docker Deployment Configuration
Repository Documentation & Configuration
Estimated code review effort🎯 4 (Complex) | ⏱️ ~65 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Review Summary by Qodo(Agentic_describe updated until commit ced6690)Release: Research Workspace Default, MCP Unified Stage-4K, Managed llama.cpp, Enhanced CI/Docker, and Comprehensive API Expansion
WalkthroughsDescription• **Release Automation**: New release.py orchestration module with semantic versioning, changelog promotion, and metadata management (pyproject.toml, README, MkDocs, CHANGELOG) with resumable release states and dry-run support • **Research Workspace**: Made default selection, replacing Playground parity/nightly workflows; includes deep research launches from literature artifacts, follow-up seeds, bundle imports, and proposal verification • **Chat Enhancements**: /chat endpoint gated behind local cockpit OpenAI mock; extension handoff/model recovery stabilized; status strip shows web search progress • **MCP Unified (Stage-4K)**: Gateway config bootstrap, file loader, CLI, preset detail CLI, default-profile wiring, and profile manager with API and CLI support • **Runtime/Providers**: Managed llama.cpp config/validate/inventory with start-by-model; omnivoice defaults voice: "auto" with structured audio errors; new OmniVoice sidecar installer and smoke tests • **API Client Expansion**: Added comprehensive type imports and methods for sandbox runtime diagnostics, llama.cpp profile management, audio presets, OpenWebUI hydration, and chatbook imports with source format support • **Design System**: Migrated product-state alerts across Admin/Settings/Monitoring/Prompt Studio with comprehensive guard test suite (1547 lines) • **CI/Docker/Compose**: Actionlint config validation, SBOMs written to repo root, coverage gate 5%, pinned non-blocking ruff/mypy, WebUI binds 127.0.0.1, entrypoint auto-derives DATABASE_URL/JOBS_DB_URL, new single/multi-user Postgres compose, PyPI publish workflow_dispatch-only • **New Services**: Persona visual packs management (655 lines), media read-along session management with TTS integration, comprehensive route metadata system (80+ routes), watchlists with alerts/outputs tabs • **Testing**: ACP certification smoke test framework with manifest orchestration, OmniVoice sidecar smoke tests with audio validation, Writing Playground API response type guards, watchlists E2E tests refactored for flexible UI layouts, product-state guard validation suite • **Documentation**: Sync v2 contracts and pagination guide, VN platform capabilities/assets, Prototype Workspaces API and contract matrix, Chatbooks/OpenWebUI JSON/DB import, managed llama.cpp endpoints, sandbox runtime support, moderation review and rules, AuthNZ dependency API updates, persona visual packs, watchlists, design system tokens/docs • **Removed**: WorkspacePlayground component and related tests/workflows (replaced by Research Workspace), implementation plan documents Diagramflowchart LR
RW["Research Workspace<br/>Default Selection"]
PG["Playground<br/>Deprecated"]
RW -- "replaces" --> PG
Chat["Chat Enhancements<br/>/chat gated, handoff stabilized"]
MCP["MCP Unified Stage-4K<br/>Gateway, CLI, Profiles"]
LlamaCpp["Managed llama.cpp<br/>Config, Validate, Inventory"]
OmniVoice["OmniVoice Sidecar<br/>Installer & Tests"]
APIClient["API Client Expansion<br/>llama.cpp, Audio, Sandbox"]
Services["New Services<br/>Persona Visuals, Read-Along,<br/>Route Metadata, Watchlists"]
Release["Release Automation<br/>Semantic Versioning,<br/>Metadata Management"]
CI["CI/Docker/Compose<br/>Hardening & Validation"]
Tests["Comprehensive Tests<br/>ACP Smoke, E2E, Guards"]
Docs["Documentation<br/>Sync v2, VN, Workspaces,<br/>Chatbooks, Design System"]
Release --> RW
RW --> Chat
Chat --> MCP
MCP --> LlamaCpp
LlamaCpp --> OmniVoice
OmniVoice --> APIClient
APIClient --> Services
Services --> CI
CI --> Tests
Tests --> Docs
File Changes1. Helper_Scripts/Testing-related/acp_certification_smoke.py
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/sbom.yml:
- Around line 125-133: Reorder the dependency-source selection so pyproject.toml
is tried first: call gen_requirements_from_pyproject on
"$repo_root/pyproject.toml" before checking for requirements files, and only if
that step is absent or fails, fall back to gen_from_requirements for
"$repo_root/requirements.txt" and "$repo_root/tldw_Server_API/requirements.txt";
update the conditional logic surrounding gen_requirements_from_pyproject and
gen_from_requirements to reflect this new precedence so SBOM generation prefers
pyproject metadata.
In @.github/workflows/vz-linux-host-gated.yml:
- Around line 47-48: The Checkout step currently uses
actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd and is missing the
persist-credentials: false setting, which leaves the runner with persisted
GitHub token credentials; update the Checkout step (name: "Checkout", uses:
"actions/checkout@de0fac2e...") to include persist-credentials: false under its
configuration to disable persisting credentials on the self-hosted host.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 7d7252e7-dbc6-45a4-a662-ac413bbc053d
⛔ Files ignored due to path filters (276)
Docs/A Young Lady's Illustrated Primer 2.pngis excluded by!**/*.png,!docs/**Docs/API-related/API_README.mdis excluded by!docs/**Docs/API-related/API_Tags_Index.mdis excluded by!docs/**Docs/API-related/Audio_Transcription_API.mdis excluded by!docs/**Docs/API-related/Chat_API_Documentation.mdis excluded by!docs/**Docs/API-related/Chatbook_API_Documentation.mdis excluded by!docs/**Docs/API-related/Prototype_Workspaces_API.mdis excluded by!docs/**Docs/API-related/Prototype_Workspaces_Contract_Matrix.mdis excluded by!docs/**Docs/API-related/RAG-API-Guide.mdis excluded by!docs/**Docs/API-related/RAG_API_Documentation.mdis excluded by!docs/**Docs/API-related/Sandbox_API.mdis excluded by!docs/**Docs/API-related/TTS_API.mdis excluded by!docs/**Docs/API-related/VN_ASSET_PACKS_API.mdis excluded by!docs/**Docs/API-related/VN_PLATFORM_API.mdis excluded by!docs/**Docs/API-related/VN_PLAY_API.mdis excluded by!docs/**Docs/API-related/Virtual_Keys.mdis excluded by!docs/**Docs/API-related/Watchlists_API.mdis excluded by!docs/**Docs/API-related/chatbook_openapi.yamlis excluded by!docs/**Docs/API-related/llamacpp_integration_modes.mdis excluded by!docs/**Docs/API/Pagination.mdis excluded by!docs/**Docs/API/VN.mdis excluded by!docs/**Docs/API/api-versioning-strategy.mdis excluded by!docs/**Docs/API/sync-v2.mdis excluded by!docs/**Docs/Audit/README.mdis excluded by!docs/**Docs/AuthNZ/AUTHNZ_PERMISSION_MATRIX.mdis excluded by!docs/**Docs/AuthNZ/AUTHNZ_USAGE_EXAMPLES.mdis excluded by!docs/**Docs/Code_Documentation/Guides/Audit_Module_Code_Guide.mdis excluded by!docs/**Docs/Code_Documentation/Guides/AuthNZ_Code_Guide.mdis excluded by!docs/**Docs/Code_Documentation/Guides/Evaluations_Code_Guide.mdis excluded by!docs/**Docs/Code_Documentation/Ingestion_Pipeline_Audio.mdis excluded by!docs/**Docs/Code_Documentation/Moderation-Guardrails.mdis excluded by!docs/**Docs/Code_Documentation/Persona_Visual_Packs.mdis excluded by!docs/**Docs/Code_Documentation/RAG-Developer-Guide.mdis excluded by!docs/**Docs/Code_Documentation/RAG-Functional-Pipeline-Guide.mdis excluded by!docs/**Docs/Code_Documentation/Services_Module.mdis excluded by!docs/**Docs/Code_Documentation/Setup_UI_Developer_Guide.mdis excluded by!docs/**Docs/Code_Documentation/Tutorial_System_Developer_Guide.mdis excluded by!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/frames-v1/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/review/archive-cube-basic-3x4-processed-review-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/source/archive-cube-basic-3x4-source.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/archive-cube-basic/source/archive-cube-basic-3x4-transparent.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/frames-v2/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/review/index-card-basic-3x4-processed-review-v2.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/source/index-card-basic-3x4-source.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/index-card-basic/source/index-card-basic-3x4-transparent.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/frames-v1/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/review/migu-marker-basic-3x4-processed-review-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/source/migu-marker-basic-3x4-source-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/source/migu-marker-basic-3x4-transparent-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/source/migu-marker-basic-neutral-source-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/migu-marker-basic/source/migu-marker-basic-neutral-transparent-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/frames-v1/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/review/paperclip-basic-3x4-processed-review-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/source/paperclip-basic-3x4-source.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/paperclip-basic/source/paperclip-basic-3x4-transparent.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/frames-v2/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/review/search-lens-basic-3x4-processed-review-v2.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/source/search-lens-basic-3x4-source.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/search-lens-basic/source/search-lens-basic-3x4-transparent.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/00_neutral_anchor.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/01_idle_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/02_idle_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/03_listening_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/04_listening_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/05_thinking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/06_thinking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/07_speaking_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/08_speaking_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/09_success.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/10_error_a.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/frames-v1/11_error_b.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/review/terminal-tile-basic-3x4-processed-review-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/source/terminal-tile-basic-3x4-source-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/source/terminal-tile-basic-3x4-transparent-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/source/terminal-tile-basic-neutral-source-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/buddy-defaults/terminal-tile-basic/source/terminal-tile-basic-neutral-transparent-v1.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/assets/persona-basic-buddy-defaults-review.pngis excluded by!**/*.png,!docs/**Docs/Code_Documentation/index.mdis excluded by!docs/**Docs/Deployment/Operations/MCP_Rate_Limits_Tuning.mdis excluded by!docs/**Docs/Deployment/setup-wizard-guide.mdis excluded by!docs/**Docs/Design/2026-04-27-vz-linux-operator-image-store-design.mdis excluded by!docs/**Docs/Design/2026-05-01-vz-linux-host-gated-ci-design.mdis excluded by!docs/**Docs/Design/2026-05-02-apple-containerization-evaluation.mdis excluded by!docs/**Docs/Design/2026-05-10-persona-visual-renderer-provider-adapter-evaluation.mdis excluded by!docs/**Docs/Design/2026-05-13-persona-visual-external-mcp-provider-contract.mdis excluded by!docs/**Docs/Design/2026-05-13-persona-visual-manifest-v2-contract.mdis excluded by!docs/**Docs/Design/2026-05-17-quick-launch-scripts.mdis excluded by!docs/**Docs/Design/ACP_Workspace_Integration_Decision_2026_05.mdis excluded by!docs/**Docs/Design/Agents.mdis excluded by!docs/**Docs/Design/Audio_Presets_Ownership_2026_05.mdis excluded by!docs/**Docs/Design/Evals.mdis excluded by!docs/**Docs/Design/Inference_Engines.mdis excluded by!docs/**Docs/Design/Pagination_Completion_Matrix.mdis excluded by!docs/**Docs/Design/Pagination_Contract_Exemptions.mdis excluded by!docs/**Docs/Design/Personas.mdis excluded by!docs/**Docs/Design/Quick_Chat_Docs_Assistant.mdis excluded by!docs/**Docs/Design/RSS_Ranking.mdis excluded by!docs/**Docs/Design/Sandbox.mdis excluded by!docs/**Docs/Design/Security.mdis excluded by!docs/**Docs/Design/Security2.mdis excluded by!docs/**Docs/Design/Storytelling_and_Creation.mdis excluded by!docs/**Docs/Design/Sync-Engine.mdis excluded by!docs/**Docs/Design/Tutorial_Per_Page_Coverage.mdis excluded by!docs/**Docs/Design/UX.mdis excluded by!docs/**Docs/Design/WebUI_Dependency_Audit.mdis excluded by!docs/**Docs/Design/Workspace_Canonical_Model_Decision_2026_05.mdis excluded by!docs/**Docs/Design/Workspace_Persistence_Architecture.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_baseline_reporting.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_contract.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_inventory.mdis excluded by!docs/**Docs/Development/ACP_Artifact_Release_Verification_2026_05_15.mdis excluded by!docs/**Docs/Development/ACP_Certification_Checklist.mdis excluded by!docs/**Docs/Development/ACP_Commercial_CLI_Certification_2026_05_11.mdis excluded by!docs/**Docs/Development/ACP_Compatibility_Matrix.mdis excluded by!docs/**Docs/Development/ACP_Governance_Audit.mdis excluded by!docs/**Docs/Development/ACP_OSS_Custom_Certification_2026_05_11.mdis excluded by!docs/**Docs/Development/ACP_Production_Readiness.mdis excluded by!docs/**Docs/Development/Agent_Client_Protocol.mdis excluded by!docs/**Docs/Development/Character_Chat_Real_Backend_E2E.mdis excluded by!docs/**Docs/Development/Container_Image_Lifecycle.mdis excluded by!docs/**Docs/Development/PyPI_Publishing.mdis excluded by!docs/**Docs/Development/Release_Process.mdis excluded by!docs/**Docs/Development/Running_Chat_Tests.mdis excluded by!docs/**Docs/Getting_Started/First_Time_Audio_Setup_CPU.mdis excluded by!docs/**Docs/Getting_Started/First_Time_Audio_Setup_GPU_Accelerated.mdis excluded by!docs/**Docs/Getting_Started/Getting-Started-with-HA-Guide.mdis excluded by!docs/**Docs/Getting_Started/Profile_Docker_Multi_User_Postgres.mdis excluded by!docs/**Docs/Getting_Started/Profile_Docker_Single_User.mdis excluded by!docs/**Docs/Getting_Started/Profile_Local_Single_User.mdis excluded by!docs/**Docs/Getting_Started/QUICKSTART.mdis excluded by!docs/**Docs/Getting_Started/README.mdis excluded by!docs/**Docs/Getting_Started/TROUBLESHOOTING.mdis excluded by!docs/**Docs/MCP/Unified/CodeGraph.mdis excluded by!docs/**Docs/MCP/Unified/README.mdis excluded by!docs/**Docs/MCP/Unified/User_Guide.mdis excluded by!docs/**Docs/MCP/mcp_hub_management.mdis excluded by!docs/**Docs/Operations/ChaChaNotes_DB_Corruption_Recovery_Runbook_2026_05_09.mdis excluded by!docs/**Docs/Operations/ChaChaNotes_DB_Recovery.mdis excluded by!docs/**Docs/Operations/Env_Vars.mdis excluded by!docs/**Docs/Operations/Prototype_Workspaces_Release_Readiness.mdis excluded by!docs/**Docs/Operations/Prototype_Workspaces_Runbook.mdis excluded by!docs/**Docs/Operations/Research_Studio_Trust_Status_Telemetry_Runbook.mdis excluded by!docs/**Docs/Operations/Workflows_Runbook.mdis excluded by!docs/**Docs/Plans/2026-03-06-stt-playground-comparison-first-implementation.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-first-party-helper-mvp-design.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-first-party-helper-mvp-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-helper-stability-design.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-helper-stability-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-image-bundle-boot-driver-design.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-image-bundle-boot-driver-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-real-execution-design.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-real-execution-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-real-host-e2e-design.mdis excluded by!docs/**Docs/Plans/2026-03-10-vz-linux-real-host-e2e-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-11-sandbox-architecture-doctrine-design.mdis excluded by!docs/**Docs/Plans/2026-03-11-sandbox-architecture-doctrine-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-11-vz-linux-debian-builder-design.mdis excluded by!docs/**Docs/Plans/2026-03-11-vz-linux-debian-builder-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-03-11-vz-linux-vsock-transport-design.mdis excluded by!docs/**Docs/Plans/2026-03-11-vz-linux-vsock-transport-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-04-09-world-books-ux-progressive-disclosure-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-04-27-vz-linux-operator-image-store-implementation-plan.mdis excluded by!docs/**Docs/Plans/2026-05-02-vz-guest-capability-readiness-plan.mdis excluded by!docs/**Docs/Plans/2026-05-03-issue-987-import-export-tab-split.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_docs_refresh_1480.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_frontend_ux_1473.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_governance_audit_1476.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_readiness_closeout_1472.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_run_history_1475.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_schedules_triggers_1474.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_workspace_sandbox_1477.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_windows_bundle_export_ci_portability_2026_04_26.mdis excluded by!docs/**Docs/Product/ACP_Agent_Orchestration_PRD.mdis excluded by!docs/**Docs/Product/Completed/Topic_Monitoring_Watchlists.mdis excluded by!docs/**Docs/Product/Graphing-Notes-PRD.mdis excluded by!docs/**Docs/Product/Persona_Agent_Design.mdis excluded by!docs/**Docs/Product/Persona_Backed_Chat_Startup_PRD.mdis excluded by!docs/**Docs/Product/Persona_Collaboration_Multi_Agent_Workflows_PRD.mdis excluded by!docs/**Docs/Product/Persona_Expressive_Avatar_Runtime_PRD.mdis excluded by!docs/**Docs/Product/Persona_Scheduled_Work_PRD.mdis excluded by!docs/**Docs/Product/Persona_Tool_Administration_PRD.mdis excluded by!docs/**Docs/Product/Personalization_Memory_Layer_PRD.mdis excluded by!docs/**Docs/Product/Sandbox/Code_Interpreter_Sandbox_PRD.mdis excluded by!docs/**Docs/Product/Traceable_Work_Product_Artifact_Contract.mdis excluded by!docs/**Docs/Product/WebUI/Character_Chat_Roleplay_First_Class_PRD_2026_05_18.mdis excluded by!docs/**Docs/Product/WebUI/Character_Chat_Terminology_Taxonomy_2026_05_09.mdis excluded by!docs/**Docs/Product/WebUI/Persona_Live_Visual_Packs_PRD.mdis excluded by!docs/**Docs/Product/WebUI/Workspace_Playground_Redesign.mdis excluded by!docs/**Docs/Product/Workspace_Persona_Defaults_PRD.mdis excluded by!docs/**Docs/Prompts/Teaching-Studying/Study_Mode.mdis excluded by!docs/**Docs/Published/API-related/API_README.mdis excluded by!docs/**Docs/Published/API-related/API_Tags_Index.mdis excluded by!docs/**Docs/Published/API-related/Audio_Transcription_API.mdis excluded by!docs/**Docs/Published/API-related/Chatbook_API_Documentation.mdis excluded by!docs/**Docs/Published/API-related/RAG-API-Guide.mdis excluded by!docs/**Docs/Published/API-related/RAG_API_Documentation.mdis excluded by!docs/**Docs/Published/API-related/Sandbox_API.mdis excluded by!docs/**Docs/Published/API-related/Virtual_Keys.mdis excluded by!docs/**Docs/Published/API-related/Watchlists_API.mdis excluded by!docs/**Docs/Published/API-related/chatbook_openapi.yamlis excluded by!docs/**Docs/Published/API-related/llamacpp_integration_modes.mdis excluded by!docs/**Docs/Published/Code_Documentation/Guides/Audit_Module_Code_Guide.mdis excluded by!docs/**Docs/Published/Code_Documentation/Guides/AuthNZ_Code_Guide.mdis excluded by!docs/**Docs/Published/Code_Documentation/Guides/Evaluations_Code_Guide.mdis excluded by!docs/**Docs/Published/Code_Documentation/Ingestion_Pipeline_Audio.mdis excluded by!docs/**Docs/Published/Code_Documentation/RAG-Developer-Guide.mdis excluded by!docs/**Docs/Published/Code_Documentation/RAG-Functional-Pipeline-Guide.mdis excluded by!docs/**Docs/Published/Code_Documentation/Services_Module.mdis excluded by!docs/**Docs/Published/Code_Documentation/Tutorial_System_Developer_Guide.mdis excluded by!docs/**Docs/Published/Deployment/Operations/MCP_Rate_Limits_Tuning.mdis excluded by!docs/**Docs/Published/Getting_Started/First_Time_Audio_Setup_CPU.mdis excluded by!docs/**Docs/Published/Getting_Started/First_Time_Audio_Setup_GPU_Accelerated.mdis excluded by!docs/**Docs/Published/Getting_Started/Profile_Docker_Multi_User_Postgres.mdis excluded by!docs/**Docs/Published/Getting_Started/Profile_Docker_Single_User.mdis excluded by!docs/**Docs/Published/Getting_Started/Profile_Local_Single_User.mdis excluded by!docs/**Docs/Published/Getting_Started/README.mdis excluded by!docs/**Docs/Published/Overview/Feature_Status.mdis excluded by!docs/**Docs/Published/RELEASE_NOTES.mdis excluded by!docs/**Docs/Published/User_Guides/Server/Usage_Module.mdis excluded by!docs/**Docs/Published/User_Guides/WebUI_Extension/Chatbook_User_Guide.mdis excluded by!docs/**Docs/Published/User_Guides/WebUI_Extension/Getting-Started-STT_and_TTS.mdis excluded by!docs/**
📒 Files selected for processing (24)
.dockerignore.github/actionlint.yaml.github/workflows/actionlint.yml.github/workflows/ci.yml.github/workflows/coverage-required.yml.github/workflows/frontend-e2e-tiers.yml.github/workflows/frontend-required.yml.github/workflows/frontend-ux-gates.yml.github/workflows/publish-docker.yml.github/workflows/publish-ghcr-main.yml.github/workflows/publish-pypi.yml.github/workflows/sbom.yml.github/workflows/ui-playground-quality-gates.yml.github/workflows/vz-linux-host-gated.yml.gitignoreAGENTS.mdCHANGELOG.mdCLAUDE.mdCodeslop-Vibecheck-SKILL.mdDockerfiles/README.mdDockerfiles/docker-compose.multi-user-postgres.ymlDockerfiles/docker-compose.single-user.ymlDockerfiles/docker-compose.webui.ymlDockerfiles/entrypoints/tldw-app-first-run.sh
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis PR introduces GitHub Actions workflow infrastructure enhancements (actionlint configuration and CI tooling setup), adds Docker Compose configurations for single-user and multi-user deployments, refactors the entrypoint script for environment and database URL handling, and updates repository documentation including workflow requirements, release notes, and code review guidelines. ChangesCI/CD Workflows & Infrastructure
Docker Deployment Configuration
Repository Documentation & Configuration
Estimated code review effort🎯 4 (Complex) | ⏱️ ~65 minutes The PR spans 22 files with heterogeneous changes across CI/CD workflows, Docker deployment configuration, and entrypoint script refactoring. While individual changes follow consistent patterns (environment variables, workflow triggers, config pins), the density of logic in the entrypoint script refactoring (environment validation, database URL derivation, multi-user admin bootstrap), combined with the breadth of workflow updates and the interconnected Docker Compose configurations, requires careful review of both high-level intent and low-level correctness. Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (2 warnings, 1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
There was a problem hiding this comment.
Review completed
Note: This PR contains a large number of files. cubic only reviews up to 100 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.
On a pro plan you can use ultrareview for larger PRs.
Re-trigger cubic
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.impeccable/design.json:
- Around line 166-172: The sample CSS for the "Status Badge" component uses
success tint/text values but must match the declared token contract for
badge-status (neutral surface background + muted text). Update the
.ds-badge-status styles and its inner span styling to use the badge-status token
values instead of success colors: set the background to the neutral surface
token and the text color to the muted text token, and ensure the dot (inner
span) uses the appropriate token (e.g., muted text or an accent token per the
contract) so the example aligns with the badge-status token definition.
In `@DESIGN.md`:
- Line 264: Update the phrasing in the component guidance string that currently
reads "Rounded pills by default, medium weight text, 10px to 12px label sizes."
to use the hyphenated form "medium-weight text" so it reads "Rounded pills by
default, medium-weight text, 10px to 12px label sizes."; locate and replace the
exact phrase in DESIGN.md (the line containing "Rounded pills by default, medium
weight text, 10px to 12px label sizes.") to ensure consistent grammar and style
documentation.
In `@Dockerfiles/docker-compose.webui.yml`:
- Around line 36-38: The compose file currently exposes NEXT_PUBLIC_X_API_KEY as
a public-by-design build/runtime env for the single-user quickstart; preserve
that behavior but update the comment and usage guidance: keep
NEXT_PUBLIC_X_API_KEY in Dockerfiles/docker-compose.webui.yml and the
Dockerfiles/Dockerfile.webui ARG/ENV wiring, but change the comment to
explicitly state this is a low-privilege single-user/quickstart key only (do not
reuse production credentials), and add a note that multi-user/public deployments
must use the server-side login/JWT flow and should not rely on
NEXT_PUBLIC_X_API_KEY—also remind operators that the compose file binds to
127.0.0.1 for local-only access. Ensure references to NEXT_PUBLIC_X_API_KEY and
Dockerfile.webui/Dockerfiles/docker-compose.webui.yml are maintained.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 70535fd2-4e2a-4e97-b22c-6ec9b142c574
⛔ Files ignored due to path filters (34)
Docs/API/Sync_V2_M1.mdis excluded by!docs/**Docs/API/Sync_V2_M2.mdis excluded by!docs/**Docs/API/Sync_V2_M3.mdis excluded by!docs/**Docs/Design/2026-05-23-chatbook-sync-v2-roadmap-prd-design.mdis excluded by!docs/**Docs/Design/ACP_Workspace_Integration_Decision_2026_05.mdis excluded by!docs/**Docs/Design/Quick_Chat_Docs_Assistant.mdis excluded by!docs/**Docs/Design/Research_Workspace_Legacy_Storage_Inventory.mdis excluded by!docs/**Docs/Design/Research_Workspace_Migration_Protocol_API.mdis excluded by!docs/**Docs/Design/Research_Workspace_Shared_Workspace_Model_Contract_2026_05.mdis excluded by!docs/**Docs/Design/Sync_V2_M1_Implementation_Decisions.mdis excluded by!docs/**Docs/Design/Sync_V2_M2_Restore_Completeness_and_Blobs.mdis excluded by!docs/**Docs/Design/Sync_V2_M3_Polished_Multi_Device.mdis excluded by!docs/**Docs/Design/Tutorial_Per_Page_Coverage.mdis excluded by!docs/**Docs/Design/WebUI_Dependency_Audit.mdis excluded by!docs/**Docs/Design/Workspace_Canonical_Model_Decision_2026_05.mdis excluded by!docs/**Docs/Design/Workspace_Persistence_Architecture.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_baseline_reporting.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_contract.mdis excluded by!docs/**Docs/Design/tldw_web_design_system_visual_qa_checklist.mdis excluded by!docs/**Docs/Development/ACP_Certification_Checklist.mdis excluded by!docs/**Docs/Development/ACP_Compatibility_Matrix.mdis excluded by!docs/**Docs/Development/Agent_Client_Protocol.mdis excluded by!docs/**Docs/Getting_Started/Profile_Docker_Multi_User_Postgres.mdis excluded by!docs/**Docs/Getting_Started/Profile_Docker_Single_User.mdis excluded by!docs/**Docs/Getting_Started/Profile_Local_Single_User.mdis excluded by!docs/**Docs/Getting_Started/README.mdis excluded by!docs/**Docs/Getting_Started/onboarding_manifest.yamlis excluded by!docs/**Docs/MCP/mcp_unified_module_ownership_inventory.mdis excluded by!docs/**Docs/Operations/Prototype_Workspaces_Release_Readiness.mdis excluded by!docs/**Docs/Operations/Research_Workspace_Trust_Status_Telemetry_Runbook.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_opencode_aider_llamacpp.mdis excluded by!docs/**Docs/Plans/IMPLEMENTATION_PLAN_acp_pr2038_review_fixes.mdis excluded by!docs/**Docs/Product/Research_Workspace_Literature_Workproducts_PRD.mdis excluded by!docs/**Docs/Prompts/UX_RESEARCH_WORKSPACE_REVIEW_PROMPT.mdis excluded by!docs/**
📒 Files selected for processing (7)
.github/workflows/frontend-ux-gates.yml.github/workflows/ui-research-workspace-nightly.yml.github/workflows/ui-research-workspace-parity.yml.gitignore.impeccable/design.jsonDESIGN.mdDockerfiles/docker-compose.webui.yml
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.github/workflows/ui-research-workspace-parity.yml (2)
8-21:⚠️ Potential issue | 🟠 Major | ⚡ Quick winWiden the trigger paths so parity runs for parity-affecting app changes.
These filters only watch the specs, a few shared workspace files, and package/config files. Changes in the actual WebUI or extension implementation can still alter parity behavior without touching any of these globs, which means this workflow will be skipped and the regression will not be exercised before merge.
Based on learnings: Every commit must compile successfully, pass all existing tests, and include tests for new functionality.
Also applies to: 25-38
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ui-research-workspace-parity.yml around lines 8 - 21, The workflow's paths filter (the "paths" array in the ui-research-workspace-parity workflow) is too narrow and only watches specs and a few shared files; widen it so parity runs when implementation code changes by expanding the globs to include the WebUI and extension source trees (add recursive src/**/* style globs for frontend and extension and broader ui package globs), and mirror the same expansion for the other paths block mentioned in the comment so any parity-affecting app changes trigger the workflow.
140-147:⚠️ Potential issue | 🟠 Major | ⚡ Quick winEnable hidden-file upload for the parity JSON report.
apps/extension/.workspace-parity-e2e-report.jsonis a dotfile, andactions/upload-artifactskips hidden files by default unlessinclude-hidden-files: trueis set—so the report can be silently omitted even when present.Suggested fix
- name: Upload extension parity artifacts if: always() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: research-workspace-extension-parity-artifacts + include-hidden-files: true if-no-files-found: ignore path: | apps/extension/.workspace-parity-e2e-report.json apps/extension/test-results/** apps/extension/playwright-report/**🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ui-research-workspace-parity.yml around lines 140 - 147, The upload step "Upload extension parity artifacts" currently omits dotfiles because actions/upload-artifact skips hidden files by default; update the step that uses actions/upload-artifact (the "Upload extension parity artifacts" step) to include the input include-hidden-files: true in the with block alongside name, if-no-files-found and path so apps/extension/.workspace-parity-e2e-report.json is uploaded when present.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In @.github/workflows/ui-research-workspace-parity.yml:
- Around line 8-21: The workflow's paths filter (the "paths" array in the
ui-research-workspace-parity workflow) is too narrow and only watches specs and
a few shared files; widen it so parity runs when implementation code changes by
expanding the globs to include the WebUI and extension source trees (add
recursive src/**/* style globs for frontend and extension and broader ui package
globs), and mirror the same expansion for the other paths block mentioned in the
comment so any parity-affecting app changes trigger the workflow.
- Around line 140-147: The upload step "Upload extension parity artifacts"
currently omits dotfiles because actions/upload-artifact skips hidden files by
default; update the step that uses actions/upload-artifact (the "Upload
extension parity artifacts" step) to include the input include-hidden-files:
true in the with block alongside name, if-no-files-found and path so
apps/extension/.workspace-parity-e2e-report.json is uploaded when present.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 3a2b208f-7562-45bd-9db5-0d0958c13361
⛔ Files ignored due to path filters (3)
Docs/Architecture.mdis excluded by!docs/**Docs/Code_Documentation/Code_Map.mdis excluded by!docs/**Docs/Code_Documentation/Data_Flow_Atlas.mdis excluded by!docs/**
📒 Files selected for processing (1)
.github/workflows/ui-research-workspace-parity.yml
Looking for bugs?Check back in a few minutes. Qodo's review agents are on it. |
…x-design chore: finalize MCP residual UX design task
Add Explainer workspace
…docs docs(mcp): explain standalone profile discovery
Migrate TTS product-state alerts to design-system Alert

Summary
What changed:
mainintodevto clear PR merge conflicts, withdevtaking precedence for overlapping conflict hunks.Why:
devbranch behavior over overlappingmainchanges.Validation
gh pr checks 1982 --repo rmusser01/tldw_server --json name,state,bucket,link,startedAt,completedAt,workflowchecked current PR status.git diff --name-only --diff-filter=Uconfirmed no unmerged paths.rg -n "^(<<<<<<<|>>>>>>>|=======$)"confirmed no exact conflict markers.git diff --checkandgit diff --cached --checkpassed..impeccable/design.jsonparsed withpython -m json.tool.assertwarnings suppressed reported zero findings.51 passed).Risk and Rollback
devwhenmainoverlaps with the PR branch.dev.NEXT_PUBLIC_X_API_KEYremains documented as a local-only single-user quickstart convenience.Change Summary
This PR carries a release-scale integration from
devintomain, so the conflict resolution intentionally preservesdevbehavior in overlapping areas while accepting non-conflictingmainupdates. The follow-up fixes are narrow review-response changes: workflow triggers and artifact upload behavior were broadened for Research Workspace parity coverage, checkout credentials were hardened on a self-hosted workflow, SBOM generation now prefers project metadata, design-system samples were aligned with their documented token contract, and MCP catalog connection validation now validates the public host before catalog lookup while probing only the canonical catalog URL.