Вроде работает
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# Tasks: Frontend Navigation Redesign
|
||||
|
||||
**Feature Branch**: `015-frontend-nav-redesign`
|
||||
**Status**: Completed
|
||||
**Spec**: [specs/015-frontend-nav-redesign/spec.md](../spec.md)
|
||||
**Plan**: [specs/015-frontend-nav-redesign/plan.md](../plan.md)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Tasks: Multi-User Authentication and Authorization
|
||||
|
||||
**Feature Branch**: `016-multi-user-auth`
|
||||
**Status**: Completed
|
||||
**Feature Spec**: [`specs/016-multi-user-auth/spec.md`](spec.md)
|
||||
**Implementation Plan**: [`specs/016-multi-user-auth/plan.md`](plan.md)
|
||||
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
|
||||
## Requirement Completeness
|
||||
- [x] CHK001 Are requirements defined for mapping generated documentation to the correct metadata fields? [Completeness, Spec §FR-017]
|
||||
- [ ] CHK002 Are requirements specified for handling schema changes during documentation generation? [Completeness, Gap]
|
||||
- [ ] CHK003 Are requirements defined for validating the format of the generated commit message? [Completeness, Gap]
|
||||
- [ ] CHK004 Are requirements specified for concurrent documentation updates? [Completeness, Gap]
|
||||
- [x] CHK002 Are requirements specified for handling schema changes during documentation generation? [Completeness, Spec §FR-017]
|
||||
- [x] CHK003 Are requirements defined for validating the format of the generated commit message? [Completeness, Spec §FR-025]
|
||||
- [x] CHK004 Are requirements specified for concurrent documentation updates? [Completeness, Spec §FR-023]
|
||||
|
||||
## Requirement Clarity
|
||||
- [ ] CHK005 Is "structured description" defined with specific markdown or text constraints? [Clarity, Spec §SC-004]
|
||||
- [x] CHK005 Is "structured description" defined with specific markdown or text constraints? [Clarity, Spec §FR-024]
|
||||
- [x] CHK006 Are "recent commit history" requirements defined by count or time window? [Clarity, Spec §FR-012]
|
||||
|
||||
## Edge Case Coverage
|
||||
- [ ] CHK007 Are requirements defined for when the LLM generates hallucinated column names? [Edge Case, Gap]
|
||||
- [ ] CHK008 Are rollback requirements defined if a metadata update fails partially? [Edge Case, Gap]
|
||||
- [ ] CHK009 Are requirements defined for handling empty or null schema inputs? [Edge Case, Gap]
|
||||
- [x] CHK007 Are requirements defined for when the LLM generates hallucinated column names? [Edge Case, Spec §FR-017]
|
||||
- [x] CHK008 Are rollback requirements defined if a metadata update fails partially? [Edge Case, Spec §FR-026]
|
||||
- [x] CHK009 Are requirements defined for handling empty or null schema inputs? [Edge Case, Spec §FR-027]
|
||||
@@ -8,15 +8,15 @@
|
||||
- [x] CHK001 Are retry strategies (count, backoff) defined for all external LLM API calls? [Completeness, Spec §FR-018]
|
||||
- [x] CHK002 Are timeout thresholds specified for long-running validation tasks? [Completeness, Gap]
|
||||
- [x] CHK003 Are encryption requirements defined for storing API keys at rest? [Completeness, Spec §FR-002]
|
||||
- [ ] CHK004 Are masking requirements defined for displaying API keys in the UI? [Completeness, Gap]
|
||||
- [x] CHK004 Are masking requirements defined for displaying API keys in the UI? [Completeness, Spec §FR-028]
|
||||
- [x] CHK005 Is the fallback behavior defined when the primary screenshot method (Headless) fails? [Completeness, Spec §FR-016]
|
||||
- [x] CHK006 Are requirements defined for handling rate limits from LLM providers? [Completeness, Gap]
|
||||
- [ ] CHK007 Are data privacy requirements specified regarding what dashboard data (screenshots, logs) is sent to the LLM? [Completeness, Gap]
|
||||
- [x] CHK007 Are data privacy requirements specified regarding what dashboard data (screenshots, logs) is sent to the LLM? [Completeness, Spec §FR-029]
|
||||
|
||||
## Requirement Clarity
|
||||
- [ ] CHK008 Is "securely store" quantified with specific encryption standards (e.g., AES-256)? [Clarity, Spec §FR-002]
|
||||
- [ ] CHK009 Are "recent execution logs" defined by specific time window or line count? [Clarity, Spec §FR-006]
|
||||
- [ ] CHK010 Is "automatic retry logic" defined with specific backoff parameters? [Clarity, Spec §FR-018]
|
||||
- [x] CHK008 Is "securely store" quantified with specific encryption standards (e.g., AES-256)? [Clarity, Spec §FR-002]
|
||||
- [x] CHK009 Are "recent execution logs" defined by specific time window or line count? [Clarity, Spec §FR-006]
|
||||
- [x] CHK010 Is "automatic retry logic" defined with specific backoff parameters? [Clarity, Spec §FR-018]
|
||||
|
||||
## Edge Case Coverage
|
||||
- [x] CHK011 Are requirements defined for scenarios where the LLM provider is completely unreachable? [Edge Case, Gap]
|
||||
|
||||
@@ -5,20 +5,20 @@
|
||||
**Created**: 2026-01-28
|
||||
|
||||
## Requirement Completeness
|
||||
- [ ] CHK001 Are requirements defined for the "Validate" button state during active execution (loading/disabled)? [Completeness, Gap]
|
||||
- [ ] CHK002 Are feedback requirements defined for successful/failed connection tests in Settings? [Completeness, Gap]
|
||||
- [x] CHK001 Are requirements defined for the "Validate" button state during active execution (loading/disabled)? [Completeness, Spec §FR-019]
|
||||
- [x] CHK002 Are feedback requirements defined for successful/failed connection tests in Settings? [Completeness, Spec §FR-020]
|
||||
- [x] CHK003 Are requirements specified for viewing historical validation reports? [Completeness, Spec §US1]
|
||||
- [x] CHK004 Are requirements defined for the notification content layout (summary vs. link)? [Completeness, Spec §FR-015]
|
||||
- [x] CHK005 Are requirements defined for the "Generate Commit" interaction flow (modal vs. inline)? [Completeness, Spec §US4]
|
||||
|
||||
## Requirement Clarity
|
||||
- [ ] CHK006 Is "visual representation" defined with resolution or format constraints? [Clarity, Spec §FR-005]
|
||||
- [ ] CHK007 Are "structured analysis" outputs defined with specific UI presentation requirements? [Clarity, Spec §SC-003]
|
||||
- [x] CHK006 Is "visual representation" defined with resolution or format constraints? [Clarity, Spec §FR-005]
|
||||
- [x] CHK007 Are "structured analysis" outputs defined with specific UI presentation requirements? [Clarity, Spec §FR-007]
|
||||
|
||||
## Consistency
|
||||
- [ ] CHK008 Do the new "Validate" and "Generate Docs" actions follow existing UI patterns (icons, placement)? [Consistency, Gap]
|
||||
- [ ] CHK009 Are error messages consistent with the application's existing error handling standards? [Consistency, Gap]
|
||||
- [x] CHK008 Do the new "Validate" and "Generate Docs" actions follow existing UI patterns (icons, placement)? [Consistency, Spec §FR-021]
|
||||
- [x] CHK009 Are error messages consistent with the application's existing error handling standards? [Consistency, Spec §FR-022]
|
||||
|
||||
## Edge Case Coverage
|
||||
- [x] CHK010 Are requirements defined for when a dashboard cannot be rendered (e.g., 404)? [Edge Case, Gap]
|
||||
- [ ] CHK011 Are requirements defined for when the generated commit message is empty or invalid? [Edge Case, Gap]
|
||||
- [x] CHK011 Are requirements defined for when the generated commit message is empty or invalid? [Edge Case, Spec §FR-012]
|
||||
@@ -88,23 +88,34 @@ As a Developer, I want the system to suggest commit messages based on changes di
|
||||
### Functional Requirements
|
||||
|
||||
- **FR-001**: System MUST allow configuration of multiple LLM providers, specifically supporting OpenAI API, OpenRouter, and Kilo Provider.
|
||||
- **FR-002**: System MUST securely store API keys for these providers.
|
||||
- **FR-002**: System MUST securely store API keys for these providers using AES-256 encryption. [Security]
|
||||
- **FR-028**: The system MUST mask all API keys in the UI and logs, displaying only the last 4 characters (e.g., `sk-...1234`). [Security]
|
||||
- **FR-003**: System MUST implement a `DashboardValidationPlugin` that integrates with the existing `PluginBase` architecture.
|
||||
- **FR-004**: `DashboardValidationPlugin` MUST accept a dashboard identifier as input.
|
||||
- **FR-005**: `DashboardValidationPlugin` MUST be capable of retrieving a visual representation (screenshot) of the dashboard.
|
||||
- **FR-005**: `DashboardValidationPlugin` MUST be capable of retrieving a visual representation (screenshot) of the dashboard. The visual representation MUST be a PNG or JPEG image with a minimum resolution of 1280x720px to ensure legibility for the LLM. [Clarity]
|
||||
- **FR-016**: System MUST support configurable screenshot strategies: 'Headless Browser' (default, high accuracy) and 'API Thumbnail' (fallback/fast).
|
||||
- **FR-006**: `DashboardValidationPlugin` MUST retrieve recent execution logs associated with the dashboard.
|
||||
- **FR-007**: `DashboardValidationPlugin` MUST combine visual and text data to prompt a Multimodal LLM for analysis.
|
||||
- **FR-006**: `DashboardValidationPlugin` MUST retrieve recent execution logs associated with the dashboard, limited to the last 100 lines or 24 hours (whichever is smaller) to prevent token overflow. [Reliability]
|
||||
- **FR-007**: `DashboardValidationPlugin` MUST combine visual and text data to prompt a Multimodal LLM for analysis. The analysis output MUST be structured as a JSON object containing `status` (Pass/Fail), `issues` (list of strings), and `summary` (text) to enable structured UI presentation. [Clarity]
|
||||
- **FR-008**: System MUST implement a `DocumentationPlugin` (or similar) for documenting datasets and dashboards.
|
||||
- **FR-009**: `DocumentationPlugin` MUST retrieve schema and metadata for the target asset.
|
||||
- **FR-017**: `DocumentationPlugin` MUST apply generated descriptions directly to the target object's metadata fields (dataset description, column descriptions).
|
||||
- **FR-017**: `DocumentationPlugin` MUST apply generated descriptions directly to the target object's metadata fields (dataset description, column descriptions). It MUST handle schema changes by only updating fields that exist in the current schema and ignoring hallucinated columns. [Data Integrity]
|
||||
- **FR-023**: The system MUST use optimistic locking or version checks to prevent overwrites during concurrent documentation updates. [Data Integrity]
|
||||
- **FR-024**: Generated documentation MUST be plain text or Markdown, strictly avoiding executable code blocks or active HTML. [Security]
|
||||
- **FR-025**: The system MUST validate that generated commit messages follow the conventional commits format (e.g., `feat:`, `fix:`) and do not exceed 72 characters in the subject line. [Data Integrity]
|
||||
- **FR-026**: If a metadata update fails partially, the system MUST rollback all changes to preserve data consistency. [Data Integrity]
|
||||
- **FR-027**: The system MUST reject documentation requests for empty or null schemas with a clear error message. [Edge Case]
|
||||
- **FR-010**: All LLM interactions MUST be executed as asynchronous tasks via the Task Manager.
|
||||
- **FR-018**: System MUST implement automatic retry logic (3 attempts with exponential backoff) for failed LLM API calls.
|
||||
- **FR-018**: System MUST implement automatic retry logic (3 attempts with exponential backoff: 2s, 4s, 8s) for failed LLM API calls. [Reliability]
|
||||
- **FR-029**: The system MUST filter sensitive data (PII, credentials) from logs and screenshots before sending them to external LLM providers. [Privacy]
|
||||
- **FR-011**: Task execution logs and results MUST be streamed via the existing WebSocket infrastructure.
|
||||
- **FR-012**: System SHOULD expose an interface to generate text summaries for Git diffs, utilizing the diff, file list, and recent commit history as context.
|
||||
- **FR-012**: System SHOULD expose an interface to generate text summaries for Git diffs, utilizing the diff, file list, and recent commit history as context. If the generated message is empty or invalid, the system MUST display a user-friendly error toast and retain the manual entry capability. [Edge Case]
|
||||
- **FR-013**: System MUST support scheduling of validation tasks for dashboards (leveraging existing scheduler architecture).
|
||||
- **FR-014**: System SHOULD support notification dispatch (Email, Pulse) upon validation failure or completion.
|
||||
- **FR-015**: Notifications MUST contain a summary of results (Status, Issue Count) and a direct link to the full report, avoiding sensitive full details in the message body.
|
||||
- **FR-019**: The "Validate" button MUST display a loading spinner and be disabled during active execution to prevent multiple triggers. [UX]
|
||||
- **FR-020**: The system MUST provide immediate visual feedback (Toast notifications) for successful or failed connection tests in LLM Settings. [UX]
|
||||
- **FR-021**: New LLM actions (Validate, Generate Docs) MUST use standard system icons (e.g., `heroicons:beaker` for validate, `heroicons:document-text` for docs) and follow existing button placement patterns. [Consistency]
|
||||
- **FR-022**: Error messages for LLM failures MUST follow the standard `ss-tools` error format, including a clear title, descriptive message, and troubleshooting link if applicable. [Consistency]
|
||||
|
||||
### Key Entities
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Tasks: LLM Analysis & Documentation Plugins
|
||||
|
||||
**Feature**: `017-llm-analysis-plugin`
|
||||
**Status**: Pending
|
||||
**Status**: Completed
|
||||
**Spec**: [specs/017-llm-analysis-plugin/spec.md](spec.md)
|
||||
|
||||
## Dependencies
|
||||
@@ -17,80 +17,81 @@
|
||||
|
||||
**Goal**: Initialize project structure and dependencies.
|
||||
|
||||
- [ ] T001 Install backend dependencies (openai, playwright, tenacity) in `backend/requirements.txt`
|
||||
- [ ] T002 Create plugin directory structure `backend/src/plugins/llm_analysis/`
|
||||
- [ ] T003 Initialize `backend/src/plugins/llm_analysis/__init__.py`
|
||||
- [ ] T004 Create `backend/src/plugins/llm_analysis/models.py` for Pydantic models (LLMProviderConfig, ValidationResult)
|
||||
- [ ] T005 Update `backend/src/core/plugin_loader.py` to recognize new plugin type if necessary
|
||||
- [ ] T006 Create `backend/src/api/routes/llm.py` placeholder
|
||||
- [ ] T007 Register new route in `backend/src/app.py`
|
||||
- [x] T001 Install backend dependencies (openai, playwright, tenacity) in `backend/requirements.txt`
|
||||
- [x] T002 Create plugin directory structure `backend/src/plugins/llm_analysis/`
|
||||
- [x] T003 Initialize `backend/src/plugins/llm_analysis/__init__.py`
|
||||
- [x] T004 Create `backend/src/plugins/llm_analysis/models.py` for Pydantic models (LLMProviderConfig, ValidationResult)
|
||||
- [x] T005 Update `backend/src/core/plugin_loader.py` to recognize new plugin type if necessary
|
||||
- [x] T006 Create `backend/src/api/routes/llm.py` placeholder
|
||||
- [x] T007 Register new route in `backend/src/app.py`
|
||||
|
||||
## Phase 2: Foundational
|
||||
|
||||
**Goal**: Implement core services and shared infrastructure.
|
||||
|
||||
- [ ] T008 Implement `LLMProviderService` in `backend/src/services/llm_provider.py` (CRUD for providers, AES-256 encryption)
|
||||
- [ ] T009 Implement `ScreenshotService` in `backend/src/plugins/llm_analysis/service.py` (Playwright + API strategies, fallback logic)
|
||||
- [ ] T010 Implement `LLMClient` in `backend/src/plugins/llm_analysis/service.py` (OpenAI SDK wrapper, retry logic with tenacity, rate limit handling)
|
||||
- [ ] T011 Create `backend/src/plugins/llm_analysis/plugin.py` with `PluginBase` implementation stubs
|
||||
- [ ] T012 Define database schema updates for `LLMProviderConfig` in `backend/src/models/llm.py` (or appropriate location)
|
||||
- [ ] T013 Run migration to create new tables (if using SQLAlchemy/Alembic) or update SQLite schema
|
||||
- [x] T008 Implement `LLMProviderService` in `backend/src/services/llm_provider.py` (CRUD for providers, AES-256 encryption)
|
||||
- [x] T009 Implement `ScreenshotService` in `backend/src/plugins/llm_analysis/service.py` (Playwright + API strategies, fallback logic, min 1280x720px resolution)
|
||||
- [x] T010 Implement `LLMClient` in `backend/src/plugins/llm_analysis/service.py` (OpenAI SDK wrapper, retry logic with tenacity, rate limit handling)
|
||||
- [x] T011 Create `backend/src/plugins/llm_analysis/plugin.py` with `PluginBase` implementation stubs
|
||||
- [x] T012 Define database schema updates for `LLMProviderConfig` in `backend/src/models/llm.py` (or appropriate location)
|
||||
- [x] T013 Run migration to create new tables (if using SQLAlchemy/Alembic) or update SQLite schema
|
||||
|
||||
## Phase 3: Dashboard Health Analysis (US1)
|
||||
|
||||
**Goal**: Enable automated dashboard validation with multimodal analysis.
|
||||
|
||||
- [ ] T014 [US1] Implement `validate_dashboard` task logic in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [ ] T015 [US1] Implement log retrieval logic (fetch recent logs) in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [ ] T016 [US1] Construct multimodal prompt (image + text) in `backend/src/plugins/llm_analysis/service.py` (ensure data privacy/masking)
|
||||
- [ ] T017 [US1] Implement result parsing and persistence (ValidationResult) in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [ ] T018 [US1] Add `validate` endpoint trigger in `backend/src/api/routes/tasks.py` (or reuse existing dispatch)
|
||||
- [ ] T019 [US1] Implement notification dispatch (Email/Pulse) on failure in `backend/src/plugins/llm_analysis/plugin.py` (Summary + Link format)
|
||||
- [ ] T020 [US1] Create `frontend/src/components/llm/ValidationReport.svelte` for viewing results
|
||||
- [ ] T021 [US1] Add "Validate" button to `frontend/src/components/DashboardGrid.svelte` (or Environments list)
|
||||
- [ ] T022 [US1] Enable scheduling for validation tasks in `backend/src/core/scheduler.py` (if not automatic via TaskManager)
|
||||
- [x] T014 [US1] Implement `validate_dashboard` task logic in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [x] T015 [US1] Implement log retrieval logic (fetch recent logs, limit 100 lines/24h) in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [x] T016 [US1] Construct multimodal prompt (image + text) in `backend/src/plugins/llm_analysis/service.py` (implement PII/credential filtering)
|
||||
- [x] T017 [US1] Implement result parsing and persistence (ValidationResult) in `backend/src/plugins/llm_analysis/plugin.py` (ensure JSON structure: status, issues, summary)
|
||||
- [x] T018 [US1] Add `validate` endpoint trigger in `backend/src/api/routes/tasks.py` (or reuse existing dispatch)
|
||||
- [x] T019 [US1] Implement notification dispatch (Email/Pulse) on failure in `backend/src/plugins/llm_analysis/plugin.py` (Summary + Link format)
|
||||
- [x] T020 [US1] Create `frontend/src/components/llm/ValidationReport.svelte` for viewing results
|
||||
- [x] T021 [US1] Add "Validate" button with loading state and disabling logic to `frontend/src/components/DashboardGrid.svelte` (FR-019)
|
||||
- [x] T022 [US1] Enable scheduling for validation tasks in `backend/src/core/scheduler.py` (if not automatic via TaskManager)
|
||||
|
||||
## Phase 4: Automated Dataset Documentation (US2)
|
||||
|
||||
**Goal**: Generate and persist dataset documentation.
|
||||
|
||||
- [ ] T023 [US2] Implement `generate_documentation` task logic in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [ ] T024 [US2] Implement metadata fetching (schema, columns) in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [ ] T025 [US2] Construct documentation prompt in `backend/src/plugins/llm_analysis/service.py` (handle schema changes)
|
||||
- [ ] T026 [US2] Implement metadata update logic (write back to DB) in `backend/src/services/mapping_service.py` (handle partial failures)
|
||||
- [ ] T027 [US2] Add "Generate Docs" button to `frontend/src/components/tools/MapperTool.svelte` (or Dataset view)
|
||||
- [ ] T028 [US2] Create feedback/preview UI component `frontend/src/components/llm/DocPreview.svelte` (optional but recommended)
|
||||
- [x] T023 [US2] Implement `generate_documentation` task logic in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [x] T024 [US2] Implement metadata fetching (schema, columns) in `backend/src/plugins/llm_analysis/plugin.py`
|
||||
- [x] T025 [US2] Construct documentation prompt in `backend/src/plugins/llm_analysis/service.py` (handle schema changes)
|
||||
- [x] T026 [US2] Implement metadata update logic (write back to DB) in `backend/src/services/mapping_service.py` (handle partial failures with rollback, ignore invalid columns)
|
||||
- [x] T045 [US2] Implement optimistic locking for concurrent metadata updates
|
||||
- [x] T027 [US2] Add "Generate Docs" button to `frontend/src/components/tools/MapperTool.svelte` using standard system icons (FR-021)
|
||||
- [x] T028 [US2] Create feedback/preview UI component `frontend/src/components/llm/DocPreview.svelte` (optional but recommended)
|
||||
|
||||
## Phase 5: LLM Provider Configuration (US3)
|
||||
|
||||
**Goal**: Manage LLM providers via UI.
|
||||
|
||||
- [ ] T029 [US3] Implement CRUD endpoints for providers in `backend/src/api/routes/llm.py`
|
||||
- [ ] T030 [US3] Create `frontend/src/components/llm/ProviderConfig.svelte` form
|
||||
- [ ] T031 [US3] Create `frontend/src/routes/admin/settings/llm/+page.svelte` settings page
|
||||
- [ ] T032 [US3] Implement "Test Connection" button logic in frontend/backend
|
||||
- [ ] T033 [US3] Ensure API keys are masked in frontend responses
|
||||
- [x] T029 [US3] Implement CRUD endpoints for providers in `backend/src/api/routes/llm.py`
|
||||
- [x] T030 [US3] Create `frontend/src/components/llm/ProviderConfig.svelte` form
|
||||
- [x] T031 [US3] Create `frontend/src/routes/admin/settings/llm/+page.svelte` settings page
|
||||
- [x] T032 [US3] Implement "Test Connection" button logic with Toast feedback (FR-020)
|
||||
- [x] T033 [US3] Ensure API keys are masked in frontend responses
|
||||
|
||||
## Phase 6: Git Commit Message Suggestion (US4)
|
||||
|
||||
**Goal**: AI-assisted commit messages.
|
||||
|
||||
- [ ] T034 [US4] Implement `generate_commit_message` logic in `backend/src/plugins/git_plugin.py` (or `llm_analysis` if preferred, but Git context lives in Git plugin)
|
||||
- [ ] T035 [US4] Create endpoint `POST /api/git/generate-message` in `backend/src/api/routes/git.py`
|
||||
- [ ] T036 [US4] Construct commit generation prompt (Diff + History) in `backend/src/services/git_service.py`
|
||||
- [ ] T037 [US4] Add "Generate" button to `frontend/src/components/git/CommitModal.svelte`
|
||||
- [ ] T038 [US4] Wire up frontend to call generation endpoint and populate textarea
|
||||
- [x] T034 [US4] Implement `generate_commit_message` logic in `backend/src/plugins/git/llm_extension.py` (validate conventional commit format)
|
||||
- [x] T035 [US4] Create endpoint `POST /api/git/generate-message` in `backend/src/api/routes/git.py`
|
||||
- [x] T036 [US4] Construct commit generation prompt (Diff + History) in `backend/src/plugins/git/llm_extension.py`
|
||||
- [x] T037 [US4] Add "Generate" button to `frontend/src/components/git/CommitModal.svelte`
|
||||
- [x] T038 [US4] Wire up frontend to call generation endpoint and populate textarea (handle empty/invalid response with Toast)
|
||||
|
||||
## Phase 7: Polish & Cross-Cutting
|
||||
|
||||
**Goal**: Finalize and verify.
|
||||
|
||||
- [ ] T039 Verify all permissions (`plugin:llm:validate`, etc.) are registered and enforceable
|
||||
- [ ] T040 Verify i18n strings for all new UI components
|
||||
- [ ] T041 Run full end-to-end test of Dashboard Validation flow (including fallback scenarios)
|
||||
- [ ] T042 Run full end-to-end test of Documentation flow
|
||||
- [ ] T043 Update `README.md` with new plugin capabilities
|
||||
- [ ] T044 Verify API key masking in all UI responses and logs
|
||||
- [x] T039 Verify all permissions (`plugin:llm:validate`, etc.) are registered and enforceable
|
||||
- [x] T040 Verify i18n strings for all new UI components
|
||||
- [x] T041 Run full end-to-end test of Dashboard Validation flow (including fallback scenarios)
|
||||
- [x] T042 Run full end-to-end test of Documentation flow
|
||||
- [x] T043 Update `README.md` with new plugin capabilities
|
||||
- [x] T044 Verify API key masking in all UI responses and logs
|
||||
|
||||
## Implementation Strategy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user