- Implement
Userentity with email as user identifier, password hash, roles array, status, timestamps; expose getters forUserInterface/PasswordAuthenticatedUserInterface. #auth #security - Configure
security.yaml(password hashers, user provider, firewall, access control) aligned with Symfony Security defaults. #auth #config - Create Admin-only CRUD for users (listing, create, edit roles/status, reset password). #auth #ui #admin
- Seed an initial Admin user via fixture or console command for first access. #auth #ops
- Add
RepositoryConfigentity (repo name, owner, url, default branch, encrypted token, last sync status/time/message). #github-sync #db - Service to validate repo connectivity/token scopes against GitHub API with clear error messages. #github-sync #backend
- Manual sync job/command to fetch repository tree and persist
DocumentNodecache. #github-sync #sync - Persist
SyncLogentries tying sync runs to triggering user and status. #github-sync #observability - Redact tokens after save in UI and encrypt at rest in storage. #security #github-sync
- Tree view UI backed by cached
DocumentNodedata, showing path, size, last modified, last sync status/time. #ui #github-sync - Authorized action to trigger sync from the UI (roles: Admin/Reviewer). #ui #auth #github-sync
- Admin UI to configure repository settings and token updates. #ui #admin #github-sync
- Enforce role-based visibility for Admin/Reviewer/Viewer across pages and actions. #ui #auth
- Use Symfony translations instead of raw string in the application (php and twig files) #utils
- Complete PHPDoc for each functions, class and related items # utils
- Create
ingestion_queue_itementity (path, branch, sha, size_bytes, storage_path, status queued|processing|indexed|failed|download_failed, source, timestamps, message, FK repo/doc/user) persisted in MySQL. #db #ingestion #rag - Create
ingestion_logentity linked to queue item (level info|warning|error, message, context json, created_at). #db #logs #ingestion - Extend
document_nodewith ingestion_status + last_ingested_at to surface last known ingestion state. #db #ingestion #ui - Add
rag_shared_dirapp config and secure path building for downloaded artifacts. #config #ops #ingestion - On enqueue, download file from GitHub default branch and write to
rag_shared_dir; mark status queued or download_failed with message. #ingestion #github-sync #fs - Enforce duplicate protection (no re-enqueue when queued/processing) and size/extension validation with user-friendly errors. #ingestion #validation #ui
- Add “Ajouter à la file” action on files (not folders) with toast/flash feedback and role gating. #ui #ingestion #auth
- Render badges/colors for directory, unindexed, queued, processing, indexed, failed/download_failed states in tree and list views. #ui #ingestion
- Detail panel shows ingestion status, last attempt, size/branch and links to item logs. #ui #logs #ingestion
- Provide retry/re-index action for failed/download_failed items (creates/reuses queue item with audit of user). #ui #ingestion
- Create an extension guesser based on the name and / or path of a document to update the document type with accurate value #improvements
- Fix form errors when creating / editing a user. #improvements
- Implement path+repository upsert for
DocumentNode(update metadata if present, create if missing) without purge cycles. #lot3 #github-sync #db - Handle GitHub deletions via Doctrine SoftDeletable (no physical DELETE) to keep
ingestion_queue_item/ingestion_logreferences intact. #lot3 #github-sync #db - Preserve ingestion fields during resync (no status/timestamp resets); log per-document errors, skip to next item, and avoid dirty partial writes. #lot3 #github-sync #observability
- Optimize sync diffing with a path hash map to detect create/update/delete and avoid bulk delete/insert loops. #lot3 #github-sync #performance
- Fix tree layout to avoid horizontal clipping; use ellipsis+tooltip for long paths and keep alignment/scroll within the canvas. #lot3 #ui #ux
- Make “Add to queue” conditional: show on indexable files in
unindexed/failed/download_failed, provide “Retry” for failed states (re-enqueue toqueued), hide/disable with tooltip forqueued/processing/indexed. #lot3 #ui #ingestion - Add tree filters (Indexed, Indexable, Failed, All) with the selection persisted during navigation. #lot3 #ui #ingestion
- Add columns: name+extension, path, ingestion status, ingestion date (last attempt/success), size in MB (2 decimals), branch, plus enqueue action with the same state rules as the tree. #lot3 #ui #ingestion
- Default sort by most recent ingestion; allow sort by size/name; ensure displayed status comes from the latest queue/ingestion state (not overwritten by sync). #lot3 #ui #ingestion #github-sync
- Create a paginated ingestion logs screen with filters: level (info|warning|error), queue status, date range, document path search, enqueuing user. #lot3 #ui #logs #ingestion
- Display each log row with timestamp, level, document, queue item status, message, source (user/system), and links to the related queue item/document. #lot3 #ui #logs #ingestion
- Add
conversationtable/entity (id UUID/int, user_id FK, title, created_at/updated_at/last_activity_at, deleted_at nullable) with per-user scoping. #lot4 #db #chat - Add
conversation_messagetable/entity (conversation_id FK, role user|assistant|system, content text/json, source_documents json nullable, token_count nullable, status streaming|completed|error, error_message nullable, created_at, streamed_at, finished_at) ordered by created_at. #lot4 #db #chat - Add
light_rag_request_logtable/entity linking conversation/message/user with duration_ms, status success|error|cancelled, error_message, created_at for observability. #lot4 #db #observability
- Expose REST endpoints to create/list conversations (per current user), fetch thread messages, soft delete/archive, and rename title (auto-generate from first prompt fallback). #lot4 #backend #chat
- Implement send-prompt endpoint: persist user message, load latest N history messages, call LightRag
/query/stream, and create assistant message instreamingstatus. #lot4 #backend #rag - Build Symfony SSE endpoint (e.g.,
/sse/chat/{conversationId}/{messageId}) that consumes LightRag streaming and forwardstoken|sources|done|errorevents with keep-alives. #lot4 #backend #sse - Handle cancellation: stop downstream stream, mark assistant message as
errorwith reasoncancelled_by_user, and emit terminal SSE event. #lot4 #backend #sse - Apply per-user rate limiting on prompt submission to prevent API flooding; return friendly error on limit hit. #lot4 #backend #security
- Create chat workspace with left conversation list (title, last activity, unread/error indicator, “Nouvelle discussion” CTA) and right thread view with message bubbles + avatars. #lot4 #ui #chat
- Display streaming assistant message live; lock send button while in-flight; show token counter/spinner and replace buffer on
done. #lot4 #ui #sse - Surface errors inline on the thread with retry (resend last prompt) and cancellation control; prevent double-submit (debounce). #lot4 #ui #ux
- Show citations/sources if provided in SSE
sourcesevent; render timestamps on messages. #lot4 #ui #rag - Empty state for no conversations with guidance and CTA to start a discussion. #lot4 #ui #ux
- Enforce that users only see their own conversations/messages; gate chat access to authenticated users regardless of role. #lot4 #security
- Respect soft-delete: exclude archived conversations from list; keep data for audit unless hard delete is added later. #lot4 #backend #ux
- Enforce ordering and context cap (e.g., last 20 messages) when building history for LightRag to avoid oversized payloads. #lot4 #backend #rag
- Apply timeout for LightRag stream (e.g., 60s); on timeout, mark message
error, persist reason, emit SSE error, and keep last known content. #lot4 #backend #observability
- Log each LightRag request with conversation_id, message_id, user_id, duration, status/error for dashboards. #lot4 #observability
- Capture token counts/cost metrics if exposed by LightRag and store on assistant messages for later reporting. #lot4 #observability #rag
- Configure monolog and other necessary services for prod environment #prod-env !high