Changelog
Release history and version notes
Changelog
Release history for Sentinel AI Studio. All dates are in 2026 unless otherwise noted.
v6.4 – Comprehensive AIF Extraction Support
Released: April 6, 2026
Major enhancement to Nexus document intelligence with comprehensive Alternative Investment Fund (AIF) extraction capabilities and flexible multi-format support.
AIF Extraction Engine
- Multi-format support: Added 5+ AIF format variations with automatic detection and normalization (AIFExtraction, AIFStatementExtraction, AIFAccountStatementExtraction, AIFFlatStatementExtraction, NexusAifSoaExtraction)
- Portfolio Companies Table: Interactive table displaying portfolio company holdings with MOIC (Multiple on Invested Capital) and IRR metrics, sortable by investment amount, current value, and performance indicators
- Transaction History Table: Paginated display of AIF transaction history with capital calls, distributions, and NAV updates
- Format-agnostic architecture: Type guards and normalization layers handle schema variations across different AMCs (Axis, Motilal Oswal, etc.) without breaking existing functionality
Type System Enhancements
- PortfolioCompanyData: Portfolio company holdings with investment metrics (name, sector, invested_amount, current_value, moic, irr, status)
- AIFStatementExtraction: New NEXUS format with normalized account info, holdings summary, and transaction arrays
- AIFHolder / AIFNominee: Investor and nominee information structures
- AIFInvestorDetails: Unified investor data model (primary holder, joint holders, guardian)
- AIFHoldingSummary: Capital commitment, contribution, uncalled amounts, units, NAV, valuation
- AIFTransaction: Transaction-level data with type, units, NAV, amount, charges
UI Components
- PortfolioCompaniesTable: Full-featured table with:
- Multi-column sorting (name, sector, invested_amount, current_value, MOIC, IRR)
- Search/filter across company names and sectors
- Aggregated statistics (total companies, total invested, total NAV)
- Pagination with 20 items per page
- TransactionsDataTable: Transaction history display with search and pagination
- Enhanced AccountMetadataCard: Now handles complex nested objects (e.g.,
{name, pan}) instead of only scalar values using newmetaVal()helper - AI Summary Card: Updated to render AIF-specific metadata and insights
Format Normalization
- normalizeAIFStatementNexus(): Transforms new NEXUS format to component-compatible structure:
- Maps
account_info→account_statement - Converts
holding_summary(singular) →holdings_summary(plural) - Extracts holder_1/2/3 → unified
investor_details - Builds
nomineesarray from individual nominee objects - Handles field name variations (capital_commitment vs commitment_amount, units_allocated vs units_allotted, etc.)
- Maps
- extractHolderInfo(): Validates and extracts holder details with null safety
- buildNomineeArray(): Consolidates nominee objects into array structure
Type Guards
Added type guard functions for automatic format detection:
isAIFExtraction(): Portfolio companies formatisAIFAccountStatement(): Wrapped AccountStatement formatisAIFFlatStatement(): Flat formats (Format C/D/Generic)isAIFStatement(): New structured format withtransaction_countfieldisNexusAifSoa(): Generic SOA format
Documentation
- nexus.md: New “AIF Extraction Support” section documenting format variations, portfolio companies data, transaction history, account information, and normalization approach
- Type coverage: 250+ lines of new TypeScript type definitions in
types/index.ts
Files Changed
app/src/app/(dashboard)/nexus/documents/[docId]/page.tsx: +2,315 lines (AIF rendering components)app/src/types/index.ts: +249 lines (AIF type definitions)app/src/components/nexus/ai-summary-card.tsx: +94 lines (AIF metadata rendering)docs/pages/nexus.md: AIF extraction documentation sectiondocs/pages/changelog.md: This entry
v6.3 – Nexus Documents List: Document Type Column & Live Polling
Released: March 8, 2026
Nexus Documents List
document_typecolumn: The Type column in/nexus/documentsnow displays the AI-classified document type (document_type) instead of the product category (product_type). Each of the 11 document types renders with a distinct colour-coded badge (e.g. Factsheet → blue, Holdings → purple, Snapshot → indigo, Bankbook → green, AUM → rose).- 30-second live polling:
useNexusDocumentsnow setsrefetchInterval: 30_000andstaleTime: 30_000, matching theX-Poll-Interval: 30/Cache-Control: no-store, max-age=30headers returned byGET /documents/me. The documents list updates automatically without a manual refresh.
Hydration Fixes
chat-sidebar.tsx:toLocaleDateString()now pins locale to'en-US'to prevent server/client locale mismatch causing React hydration errors.document-card.tsx: AddedsuppressHydrationWarningto the relative-date<span>inDocumentCardto suppress hydration mismatch fromnew Date()timezone differences.
v6.2 – Nexus-in-Zen Integration & Auth Hardening
Released: March 3, 2026
Nexus document processing is now surfaced directly inside the Zen chat interface. The dashboard activity feed was rebuilt with real data, the auth cookie lifecycle was tightened, and the API client gained opt-in keepalive and suppressAuthEvent options for background operations.
Nexus Processing in Zen Chat
- NexusProcessingIndicator component: When a Nexus-sourced document is attached to a Zen session, the chat page now renders a live status indicator that polls
GET /chat/{sessionId}/documents/{docId}/statusand displays the Nexus pipeline stage. - Session documents:
ChatSessionnow carries adocumentsarray (SessionDocument[]) withdoc_id,filename,source,status,nexus_process_id, andnexus_job_id. The backend response is mapped ingetChatSession. getDocumentStatusAPI: New function inzen.tspollsGET /zen/chat/{sessionId}/documents/{docId}/status. UsessuppressAuthEvent: trueso background polls do not trigger the global session-expired modal.- System message role:
ChatMessage.rolenow includes'system'(was'user' | 'assistant'only). The backend occasionally injects system messages for pipeline status notifications; these are now rendered correctly. deleteChatSessionkeepalive: Accepts an optional{ keepalive: true }flag so the DELETE request survives page navigation (used for cleanup on tab close).
Dashboard Activity Feed
- Real Zen sessions in activity feed: The dashboard now fetches
GET /zen/chat/via React Query and merges real session titles into the activity feed. Sessions titled “New Chat” are excluded. - Unified activity timeline: Zen and Nexus activity entries are sorted by timestamp and displayed in a single feed, replacing the previous placeholder-data implementation.
User-Scoped Documents Endpoint
getDocumentsnow calls/documents/me: The Nexus document list fetches only the authenticated user’s documents. Previously called/documents/(admin-scoped). The same change was applied tolib/studio/services/nexus.ts → listDocuments().- Query string construction changed: Now uses
URLSearchParamsdirectly againststudioApi.getinstead of routing throughnexusRequest.
API Client Enhancements
keepaliveoption: Passeskeepalive: truetofetchfor requests that must survive page unloads (cleanup on navigation).suppressAuthEventoption: When set, a 401 response does not dispatch the globalauth:session-expiredevent. Used for background polling loops that should not disrupt the user’s session state.RequestOptionsexported: Previously an unexported interface; now exported so gateway layers can pass typed options through.
Auth Layer Fixes
- Stale cookie redirect loop fix:
verifySessionnow deletes the session cookie before redirecting to/loginwhen the JWT is invalid or malformed. Previously, leaving the stale cookie caused a redirect loop (middleware → / → layout → /login → middleware → …). - Removed redundant expiry check: Session expiry is now fully managed by the JWT itself. The separate
expiresAt > Date.now()check inverifySessionandhasValidSessionwas removed to avoid double-validation mismatch. - Proactive token refresh on mount:
useActivityRefreshnow checks on mount whether the token is already expired or near expiry and triggers a refresh immediately, rather than waiting for the next polling interval.
Hydration & Theme Fixes
- Theme provider hydration fix:
ThemeProviderinitializes to'light'(matching the server render) and syncs fromlocalStorageinuseLayoutEffect. Eliminates the flash-of-incorrect-theme on first paint. - Storage key:
localStoragetheme key confirmed assentinel-theme-mode(wastoolit-theme-modein older builds). - Auth store key: Zustand persistence key confirmed as
sentinel-auth-v2(wastoolit-auth-v2in older builds). useOnlineStatusrefactored: Now usesuseSyncExternalStorefor hydration-safe SSR/CSR consistency.
New Types
| Type | Description |
|---|---|
DocumentProcessingStatus |
'processing' \| 'nexus_processing' \| 'completed' \| 'failed' |
NexusProgress |
Live stage info from Nexus pipeline: current_stage, stages_completed, progress_pct, status |
DocumentStatusResponse |
Full response from GET /chat/{sessionId}/documents/{docId}/status |
SessionDocument |
Document record attached to a ChatSession |
v6.1 – Production Hardening
Released: February 19, 2026
A major stability and correctness release focused on production readiness. The Nexus document detail page was rebuilt from scratch, the Zen chatbot was aligned to live API response shapes, and the auth layer was hardened.
Nexus Document Detail Page (Full Rebuild)
- Introduced a 5-tab layout: Pipeline, Data, Insights, Costs, Export – each wired to live API data
- Pipeline timeline: 10-stage animated progress visualization with V2 process-based polling
- Extraction tables: Securities holdings with interactive data tables and asset allocation charts
- Token usage: Per-stage cost breakdown with INR conversion and model attribution on the Costs tab
- Export system: Holdings and underlying export types aligned to the backend schema
- PDF viewer: Document fetch via
getDocumentPdfUrl()with layout image support
Zen Chatbot API Alignment
- Message ID fix: AI messages now correctly use
response_message_id(was incorrectly usingmessage_id) - Agent badges:
agents_invokedarray rendered as badges below AI responses - Web search indicator:
meta.web_searchstring (“True”/”False”) parsed and displayed correctly - Guardrail null safety:
guardrail: nullhandled gracefully without.passedaccess errors - File attachment chips: Uploaded file names shown as chips above user messages
- Theme consistency: Replaced all hardcoded color classes with design system tokens
Auth and API Layer
- In-memory token storage: Removed
accessTokenfrom Zustand persistence – now held in memory only - Removed BroadcastChannel: Cross-tab token sync removed (unnecessary with cookie-based refresh)
- V2 progress normalization: Field names aligned (
progress_percenttoprogress_pct,stages_completedarray to count) - ProcessingStatus: Added
'completed'to the status union for V2 pipeline completion - New API functions:
getDocumentPdfUrl()andgetDocumentLayoutImages()added to nexus.ts
Type Corrections
SendMessageResponse: Removed phantom fields (session_id,sources,web_search_results)UploadResponse: Addedstatus,password_required,password_hintProcessProgress: Fixed field names to match the V2 endpointExportType: Changed to'holdings' | 'underlying'(was'excel' | 'json' | 'csv')
v1.4.2 – API Alignment, Zen UI Cleanup, Test Restructure
Released: February 16, 2026
Comprehensive alignment of the API layer with BFF middleware routes, V2 process-based polling, Zen UI refinements, and a complete test suite restructure.
API Layer
- Nexus API: Deprecated
getJobDetailedStatus, aligned extraction and doc-fetch calls with middleware routes - Zen API: Fixed
document_idsfield (wasdocument_id), addedskip_guardrailparameter, addeduploadSessionDocumentfunction - Types: Updated
SendMessageResponseandProcessProgressfor V2 pipeline compatibility
Hooks and Pages
- useProcessProgress: New hook for
process_id-based progress polling (V2 pipeline) - use-results.ts: Rewritten for process-based polling instead of the deprecated job-based approach
- History page: Uses
getDocumentfor enrichment instead of a deprecated endpoint
Zen UI Cleanup
- Added Home button to the chat sidebar for returning to the dashboard
- Removed user profile dropdown from the Zen header (consolidated into the global header)
Test Suite Restructure
- Replaced 19 overlapping test files with 14 focused, screen-based specs
- New organization:
screens/(auth, dashboard, nexus, zen),infra/(health, routing, errors),cross-cutting/(navigation, responsive) - Test asset directory structure:
static/assets/middleware/,zen/,nexus/ - Total: 165 tests across 18 files (17 spec files + 1 fixture file)
v1.4.1 – Logout Redirect Fix
Released: February 2, 2026
Critical bug fix for the logout redirect issue in the ECS-deployed environment, plus documentation alignment.
Bug Fixes
- Logout Redirect (P0): Fixed
GET /api/auth/logoutusing internal ECS hostname for redirect. Now readsX-Forwarded-HostandX-Forwarded-Protoheaders set by the ALB for correct external URL construction - Auth Routing: Server Actions now correctly route to Studio Backend (not Zen/Chatbot) for login, register, and refresh flows via encrypted HttpOnly cookies
Documentation
- Deployment guide aligned with the 5-service registry architecture
- Environment variables documentation split into build-time vs runtime sections
- Security headers documented (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
- Automated deploy script usage documented (
deployment/scripts/deploy.sh)
v1.4.0 – Full-Stack Service Alignment
Released: February 2, 2026
Major infrastructure and routing overhaul establishing the unified BFF pattern for all API calls.
New Features
- Unified Routing Layer: Added
knowledgeApiclient for the ingestion backend with graceful degradation - Deploy Script: One-command
deploy.shhandling ECR push, ECS force-deploy, and CloudFront invalidation - CDN Caching Headers: Immutable
Cache-Controlfor_next/staticassets (1-year max-age) - Security Headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy added to all responses
- Environment Config: Committed
.env.devwith the full 5-service backend registry
Bug Fixes
- ECS Auth Failure (P0): Added
STUDIO_API_URLandSESSION_SECRETto the ECS task definition - Nexus 404 in ECS (P0): Added
/api/v1suffix tonexusApiUrlin the serverless config - Search Routing (P1): Rerouted search functions to the ingestion backend (was calling chatbot, returning 404)
- Docker Compose: Added missing build args (agents, knowledge) and runtime vars (studio, session)
v1.2.0 – Nexus Stage Observability
Released: January 24, 2026
Introduced the processing timeline component and rebuilt the results page for full pipeline stage observability.
New Features
- Processing Timeline Component: Visual 10-stage pipeline progress with animated status indicators
- Stage Card Component: Detailed per-stage view showing token usage, duration, and output preview
- Entity Switcher Component: Multi-entity document support with dropdown, tabs, and cards variants
- Results Page Rebuild: Complete redesign with stage observability and enhanced extraction display
- Enhanced Activity Feed: Shows actual file names, confidence scores, and product types
Bug Fixes
- Auth Redirect: Fixed redirect from non-existent
/dashboardto/nexus - Dashboard Metrics: Real API data for token usage and costs (removed hardcoded placeholder values)
- Confidence Score Normalization: Consistent 0-100 scale across all components
- Register Redirect: Added redirect query parameter support
v1.0.1 – Initial Patch
Released: January 2026
- Fixed blank page rendering for unauthenticated users (replaced
return nullwith a loading spinner showing “Redirecting to login…”)
For full release notes with file-level change details, see the releases directory.
Last Updated: April 6, 2026