graphify added

This commit is contained in:
Kalana B. Thilakarathna
2026-07-31 11:53:20 +05:30
parent b7bd8dca5c
commit 3cccaf4c63
448 changed files with 255761 additions and 0 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_02_security_accepted_risks", "label": "Accepted Risks Register (AR-01 through AR-10)", "file_type": "document", "source_file": "docs/02-SECURITY.md", "source_location": "Part A", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_02_security_ar01_no_rbac", "label": "AR-01: No Per-Endpoint RBAC (Phase 1 Deferred)", "file_type": "rationale", "source_file": "docs/02-SECURITY.md", "source_location": "Part A, AR-01", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "RBAC deferred for Phase 1 scope; compensating control is immutable audit trail attributing every action."}, {"id": "docs_02_security_ar09_hrm_pii", "label": "AR-09: HRM Salary/PII Data Exposure (AR-01 Inheritance)", "file_type": "rationale", "source_file": "docs/02-SECURITY.md", "source_location": "Part A, AR-09", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Salary/PII is categorically more sensitive than inventory data; HRM go-live was not blocked on RBAC but the risk is explicitly named and flagged as forcing function for RBAC."}, {"id": "docs_02_security_csrf_httponlycookie", "label": "httpOnly Cookie + CSRF Double-Submit Pattern", "file_type": "rationale", "source_file": "docs/02-SECURITY.md", "source_location": "Part B, \u00a7B.2", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Token in httpOnly Secure cookie removes XSS token theft risk; SameSite=Strict + XSRF-TOKEN double-submit protects against CSRF."}, {"id": "docs_02_security_adjustment_highrisk", "label": "Stock Adjustment: Highest-Risk Feature", "file_type": "rationale", "source_file": "docs/02-SECURITY.md", "source_location": "Part C, \u00a7C.5", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Auto-post + no approval + direct write-off = primary theft/fraud surface; reason code + user stamp are the only live controls."}], "edges": [{"source": "docs_02_security_accepted_risks", "target": "docs_02_security_ar01_no_rbac", "relation": "contains", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/02-SECURITY.md", "source_location": "Part A", "weight": 1.0}, {"source": "docs_02_security_accepted_risks", "target": "docs_02_security_ar09_hrm_pii", "relation": "contains", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/02-SECURITY.md", "source_location": "Part A, AR-09", "weight": 1.0}, {"source": "docs_02_security_accepted_risks", "target": "docs_02_security_adjustment_highrisk", "relation": "contains", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/02-SECURITY.md", "source_location": "Part C, \u00a7C.5", "weight": 1.0}, {"source": "docs_02_security_accepted_risks", "target": "docs_02_security_csrf_httponlycookie", "relation": "contains", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/02-SECURITY.md", "source_location": "Part B, \u00a7B.2", "weight": 1.0}], "hyperedges": [{"id": "he_auth_cookie_csrf_proxy", "label": "httpOnly Cookie + CSRF + Same-Origin Proxy = Frontend Auth Pattern", "nodes": ["docs_02_security_csrf_httponlycookie", "docs_20_frontend_same_origin_proxy", "docs_10_backend_phase1_authcontroller"], "relation": "jointly_implement", "confidence": "INFERRED", "confidence_score": 0.9, "source_file": "docs/02-SECURITY.md", "rationale": "The three mechanisms together eliminate XSS token theft, CSRF, and CORS complexity by keeping tokens httpOnly, validating CSRF tokens on mutations, and making the API same-origin via the Next.js proxy."}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_11_backend_phase1_api", "label": "Phase 1 API Reference (Endpoints + Error Catalog)", "file_type": "document", "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_11_backend_phase1_rs256_jwt", "label": "RS256 JWT Bearer Authentication (AuthHex)", "file_type": "concept", "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": "\u00a71.2", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_11_backend_phase1_pagedresult", "label": "PagedResult List Envelope", "file_type": "concept", "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": "\u00a71.4", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_11_backend_phase1_api", "target": "docs_10_backend_phase1_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": "header", "weight": 1.0}, {"source": "docs_11_backend_phase1_api", "target": "docs_00_core_problemdetails", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": "\u00a71.8", "weight": 1.0}, {"source": "docs_11_backend_phase1_rs256_jwt", "target": "docs_00_core_authhex", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/11-BACKEND-PHASE1.md", "source_location": "\u00a71.2", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_01_doc_guide_docmap", "label": "Documentation Map & Tracking Conventions", "file_type": "document", "source_file": "docs/01-DOC-GUIDE.md", "source_location": "\u00a72", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_01_doc_guide_progress_tracking", "label": "PROGRESS.md Tracking Convention", "file_type": "rationale", "source_file": "docs/01-DOC-GUIDE.md", "source_location": "\u00a76", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Two checklists (Backend/PROGRESS.md, Frontend/PROGRESS.md) travel with code via git so changes are diff-visible and co-located with the work that caused them."}], "edges": [{"source": "docs_01_doc_guide_docmap", "target": "docs_00_core_hub", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/01-DOC-GUIDE.md", "source_location": "\u00a71", "weight": 1.0}, {"source": "docs_01_doc_guide_docmap", "target": "docs_10_backend_phase1_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/01-DOC-GUIDE.md", "source_location": "\u00a72", "weight": 1.0}, {"source": "docs_01_doc_guide_docmap", "target": "docs_30_backend_phase2_mfg_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/01-DOC-GUIDE.md", "source_location": "\u00a72", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_30_backend_phase2_mfg_spec", "label": "Manufacturing Phase 2 Backend Spec (Model + Rules + API)", "file_type": "document", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_30_backend_phase2_dag_templates", "label": "Production Template DAG (Stage Graph)", "file_type": "concept", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "B.3, FR-MFG-02", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_30_backend_phase2_fifo_integration", "label": "FIFO Integration for Production (ConsumeAsync)", "file_type": "concept", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "Part A", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_30_backend_phase2_cost_pool", "label": "Run Cost Pool (Material Roll-up for Finished Goods)", "file_type": "rationale", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "FR-MFG-13", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Finished-goods unit cost = run cost pool \u00f7 good qty; pool = \u03a3 consumed stock value \u2212 \u03a3 leftover returns, so only actual material consumed is absorbed."}, {"id": "docs_30_backend_phase2_edit_lock", "label": "Template Edit-Lock Instead of Versioning", "file_type": "rationale", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "FR-MFG-06", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Template versioning deferred; edit-lock (409 TEMPLATE_IN_USE while any run is InProgress) replaces it. Run rows copy display fields at creation so completed-run history stays readable."}, {"id": "docs_30_backend_phase2_graph_validator", "label": "ProductionGraphValidator (Kahn Toposort)", "file_type": "concept", "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "\u00a712", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_30_backend_phase2_mfg_spec", "target": "docs_10_backend_phase1_spec", "relation": "extends", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "header", "weight": 1.0}, {"source": "docs_30_backend_phase2_fifo_integration", "target": "docs_00_core_fifocostingservice", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "Part A", "weight": 1.0}, {"source": "docs_30_backend_phase2_cost_pool", "target": "docs_30_backend_phase2_fifo_integration", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "FR-MFG-13", "weight": 1.0}, {"source": "docs_30_backend_phase2_graph_validator", "target": "docs_30_backend_phase2_dag_templates", "relation": "validates", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "FR-MFG-02, \u00a712", "weight": 1.0}, {"source": "docs_30_backend_phase2_edit_lock", "target": "docs_10_backend_phase1_etag_concurrency", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "docs/30-BACKEND-PHASE2.md", "source_location": "FR-MFG-06", "weight": 0.75}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "background_png", "label": "ERP Background Image", "file_type": "image", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_dashboard_ui", "label": "ERP Dashboard UI Scene", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "inventory_management_panel", "label": "Inventory Management Panel", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "user_productivity_panel", "label": "User Productivity Panel", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "financial_analytics_panel", "label": "Financial Analytics Panel", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "world_map_visualization", "label": "World Map Data Visualization", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "dark_theme_design", "label": "Dark Theme Design Language", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "dual_user_workstation", "label": "Dual User Workstation Setup", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_core_frontend", "label": "ERP Core Frontend Application", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/background.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "loginerps_png", "label": "ERP Login Page Illustration Image", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_login_ui", "label": "ERP Login Page UI", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "inventory_management_dashboard", "label": "Inventory Management Dashboard", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "order_processing_dashboard", "label": "Order Processing Dashboard", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "integrated_analytics_dashboard", "label": "Integrated Analytics Dashboard", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_system_branding", "label": "ERP System Branding / Marketing Visual", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "male_user_laptop", "label": "Male User Working on Laptop", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "female_user_tablet", "label": "Female User Working on Tablet", "file_type": "image", "source_file": "Frontend/erp-system/public/images/loginerps.png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_12_backend_hrm_spec", "label": "Phase 2 HRM Backend Spec (SRS + ER Model)", "file_type": "document", "source_file": "docs/12-BACKEND-HRM.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_12_backend_hrm_filestorage", "label": "IFileStorageService (HRM Document Storage)", "file_type": "concept", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.1", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_12_backend_hrm_attendancecomputation", "label": "AttendanceComputationService", "file_type": "concept", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.1", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_12_backend_hrm_payrollcalculation", "label": "PayrollCalculationService", "file_type": "concept", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.1", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_12_backend_hrm_snapshot_rule", "label": "Snapshot-at-Ingestion Rule (Attendance Integrity)", "file_type": "rationale", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.3", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "WorkShiftId captured at attendance record ingestion so historical Late/OT figures don't change if an employee's shift changes later."}, {"id": "docs_12_backend_hrm_lock_boundary", "label": "Payroll Lock Boundary Rule", "file_type": "rationale", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.4", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Loan installment and attendance batch stamping deferred to PayrollRun Locked state (not Generate/Approve) to prevent lossy regeneration of draft runs."}, {"id": "docs_12_backend_hrm_employee_entity", "label": "Employee Entity & Lifecycle", "file_type": "concept", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "B.3.2", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_12_backend_hrm_user_crosslink", "label": "Employee \u2194 User Cross-Link (Email Advisory)", "file_type": "concept", "source_file": "docs/12-BACKEND-HRM.md", "source_location": "B.3.2", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_12_backend_hrm_spec", "target": "docs_10_backend_phase1_spec", "relation": "extends", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/12-BACKEND-HRM.md", "source_location": "header", "weight": 1.0}, {"source": "docs_12_backend_hrm_spec", "target": "docs_13_backend_hrm_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/12-BACKEND-HRM.md", "source_location": "header", "weight": 1.0}, {"source": "docs_12_backend_hrm_attendancecomputation", "target": "docs_00_core_fifocostingservice", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.1", "weight": 0.75}, {"source": "docs_12_backend_hrm_lock_boundary", "target": "docs_00_core_unitofwork", "relation": "depends_on", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "docs/12-BACKEND-HRM.md", "source_location": "A.4", "weight": 0.85}, {"source": "docs_12_backend_hrm_user_crosslink", "target": "docs_10_backend_phase1_shadow_user", "relation": "depends_on", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "docs/12-BACKEND-HRM.md", "source_location": "B.3.2", "weight": 0.85}], "hyperedges": [{"id": "he_attendance_payroll_lock_pipeline", "label": "Attendance Confirmation \u2192 Payroll Lock \u2192 Loan Stamp Pipeline", "nodes": ["docs_13_backend_hrm_api_attendance_batch", "docs_13_backend_hrm_api_payroll_run", "docs_12_backend_hrm_lock_boundary"], "relation": "jointly_govern", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/12-BACKEND-HRM.md", "rationale": "Confirmed attendance is the only valid input to payroll generation; loan installment and attendance batch stamps are deferred to Locked state to prevent lossy regeneration."}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "globe_svg", "label": "Globe SVG Icon", "file_type": "image", "source_file": "Frontend/erp-system/public/globe.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_frontend_public", "label": "ERP Frontend Public Assets", "file_type": "directory", "source_file": "Frontend/erp-system/public/globe.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "nextjs_app_icon", "label": "Next.js Application Icon Asset", "file_type": "concept", "source_file": "Frontend/erp-system/public/globe.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "frontend_erp_system_readme", "label": "Frontend Next.js Project README", "file_type": "document", "source_file": "Frontend/erp-system/README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "frontend_erp_system_readme", "target": "docs_00_core_nextjs_frontend", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/erp-system/README.md", "source_location": null, "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "frontend_progress_phase1", "label": "Frontend PROGRESS.md (Phase 1 Inventory & Supply Chain)", "file_type": "document", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a70-\u00a77", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "frontend_progress_mock_deleted", "label": "Mock Data Deletion + Real API Connection (2026-07-17)", "file_type": "rationale", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a7 2026-07-17 entry", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "lib/api/mock-data.ts deleted; every lib/api/*.ts module now calls the backend. The mock FIFO engine is gone \u2014 the server owns all inventory maths."}, {"id": "frontend_progress_error_map", "label": "Error Code Map (lib/error-map.ts, detail-preferred for domain codes)", "file_type": "concept", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a70, \u00a711", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "frontend_progress_production_screens", "label": "Production Frontend Screens (Real API, 2026-07-30)", "file_type": "document", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a711-\u00a713", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "frontend_progress_bypass_codes", "label": "bypassCodes Sidebar Visibility Stopgap (procurement/hrm/production)", "file_type": "rationale", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a78, \u00a713", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "No backend NavItem/RolePermission seed exists for hrm/production codes yet; bypassCodes set skips navCodes visibility check matching existing procurement precedent \u2014 AR-09 sidebar stopgap."}, {"id": "frontend_progress_dashboard_stats", "label": "Dashboard Stats (GET /dashboard/stats + Charts, 2026-07-28)", "file_type": "concept", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a7 2026-07-28 Done entry", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "frontend_progress_variant_builder", "label": "Item Variant Builder (Dynamic Variant Categories, Cartesian SKU)", "file_type": "concept", "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a72, \u00a7HistoryEntry2026-07-15", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "frontend_progress_phase1", "target": "docs_20_frontend_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "header", "weight": 1.0}, {"source": "frontend_progress_phase1", "target": "docs_11_backend_phase1_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "header", "weight": 1.0}, {"source": "frontend_progress_mock_deleted", "target": "docs_20_frontend_api_client", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "2026-07-17 entry", "weight": 1.0}, {"source": "frontend_progress_production_screens", "target": "docs_21_frontend_phase2_spec", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a711-\u00a713", "weight": 1.0}, {"source": "frontend_progress_production_screens", "target": "docs_30_backend_phase2_mfg_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a711", "weight": 1.0}, {"source": "frontend_progress_bypass_codes", "target": "docs_02_security_ar09_hrm_pii", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a78, \u00a713", "weight": 1.0}, {"source": "frontend_progress_error_map", "target": "docs_00_core_problemdetails", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Frontend/PROGRESS.md", "source_location": "\u00a70", "weight": 1.0}, {"source": "frontend_progress_dashboard_stats", "target": "backend_progress_phase1", "relation": "depends_on", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "Frontend/PROGRESS.md", "source_location": "2026-07-28 Done entry", "weight": 0.85}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "readme_erp_system", "label": "ERP System (Inventory & Supply Chain)", "file_type": "document", "source_file": "README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "readme_erp_system", "target": "docs_00_core_hub", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": null, "weight": 1.0}, {"source": "readme_erp_system", "target": "docs_00_core_aspnetcore", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Tech stack", "weight": 1.0}, {"source": "readme_erp_system", "target": "docs_00_core_nextjs_frontend", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Tech stack", "weight": 1.0}, {"source": "readme_erp_system", "target": "docs_00_core_postgresql", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Prerequisites", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "backend_progress_phase1", "label": "Backend PROGRESS.md (Phase 1 Inventory & Supply Chain)", "file_type": "document", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a70-\u00a76", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backend_progress_auth_proxy", "label": "AuthController Proxy (24 AuthHex functions, httpOnly cookies)", "file_type": "concept", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a76 auth proxy entry", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backend_progress_grn_unitcost_override", "label": "GRN unitCost Override with PO Price Variance (2026-07-20)", "file_type": "rationale", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a73", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "One PO legitimately spans batches received at different prices; variance trail (audit log) is the compensating control replacing the old hard block."}, {"id": "backend_progress_hrm_phase2", "label": "Backend HRM Phase 2 (Sub-phases 2.1\u20132.4, complete 2026-07-23)", "file_type": "document", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a77-\u00a710", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backend_progress_mfg_smoke_312", "label": "Manufacturing Backend (312 Smoke Assertions, 2026-07-30)", "file_type": "document", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a711-\u00a716 header", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "backend_progress_datetime_kind_fix", "label": "DateTime Kind=Unspecified Fix (Global EF ValueConverter, 2026-07-23)", "file_type": "rationale", "source_file": "Backend/PROGRESS.md", "source_location": "\u00a77 2026-07-23 bug fix", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Global ValueConverter in ErpDbContext.OnModelCreating forces Kind=Utc on all DateTime writes rather than patching each service call site, covering current and future entities."}], "edges": [{"source": "backend_progress_phase1", "target": "docs_10_backend_phase1_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "header", "weight": 1.0}, {"source": "backend_progress_phase1", "target": "docs_11_backend_phase1_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "header", "weight": 1.0}, {"source": "backend_progress_auth_proxy", "target": "docs_10_backend_phase1_authcontroller", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a76", "weight": 1.0}, {"source": "backend_progress_auth_proxy", "target": "docs_02_security_csrf_httponlycookie", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a76", "weight": 1.0}, {"source": "backend_progress_grn_unitcost_override", "target": "docs_02_security_accepted_risks", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a73", "weight": 1.0}, {"source": "backend_progress_hrm_phase2", "target": "docs_12_backend_hrm_spec", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a77-\u00a710", "weight": 1.0}, {"source": "backend_progress_hrm_phase2", "target": "docs_13_backend_hrm_api", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a77-\u00a710", "weight": 1.0}, {"source": "backend_progress_mfg_smoke_312", "target": "docs_30_backend_phase2_mfg_spec", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a711-\u00a716", "weight": 1.0}, {"source": "backend_progress_datetime_kind_fix", "target": "backend_progress_hrm_phase2", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "Backend/PROGRESS.md", "source_location": "\u00a77 2026-07-23 bug fix", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_20_frontend_spec", "label": "Phase 1 Frontend Spec (User Flows + Validation Posture)", "file_type": "document", "source_file": "docs/20-FRONTEND.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_20_frontend_api_client", "label": "Typed API Client (lib/api-client.ts)", "file_type": "concept", "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a71", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_20_frontend_same_origin_proxy", "label": "Same-Origin Next.js Rewrites Proxy", "file_type": "rationale", "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a71", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Chosen over backend CORS so the API is same-origin, eliminating CORS and making Secure/SameSite=Strict session cookies work without cross-origin complications."}, {"id": "docs_20_frontend_server_authoritative", "label": "Server-Authoritative Validation Posture", "file_type": "rationale", "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a73", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Client validation is UX only. Business rules depending on server state (stock, negative-stock block, over-receipt tolerance) must not be assumed valid client-side."}], "edges": [{"source": "docs_20_frontend_spec", "target": "docs_11_backend_phase1_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/20-FRONTEND.md", "source_location": "header", "weight": 1.0}, {"source": "docs_20_frontend_spec", "target": "docs_10_backend_phase1_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/20-FRONTEND.md", "source_location": "header", "weight": 1.0}, {"source": "docs_20_frontend_same_origin_proxy", "target": "docs_02_security_csrf_httponlycookie", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a71", "weight": 1.0}, {"source": "docs_20_frontend_api_client", "target": "docs_20_frontend_same_origin_proxy", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a71", "weight": 1.0}, {"source": "docs_20_frontend_server_authoritative", "target": "docs_00_core_fifocostingservice", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.65, "source_file": "docs/20-FRONTEND.md", "source_location": "\u00a73", "weight": 0.65}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_13_backend_hrm_api", "label": "Phase 2 HRM API Reference", "file_type": "document", "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_13_backend_hrm_api_attendance_batch", "label": "AttendanceUploadBatch API (validate/confirm/unlock flow)", "file_type": "concept", "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": "\u00a74", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_13_backend_hrm_api_payroll_run", "label": "PayrollRun API (generate/approve/lock/unlock/payslips)", "file_type": "concept", "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": "\u00a76", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_13_backend_hrm_api", "target": "docs_11_backend_phase1_api", "relation": "extends", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": "\u00a71", "weight": 1.0}, {"source": "docs_13_backend_hrm_api_attendance_batch", "target": "docs_12_backend_hrm_snapshot_rule", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": "\u00a74", "weight": 1.0}, {"source": "docs_13_backend_hrm_api_payroll_run", "target": "docs_12_backend_hrm_lock_boundary", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/13-BACKEND-HRM-API.md", "source_location": "\u00a76", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "next_svg_logo", "label": "Next.js SVG Wordmark Logo", "file_type": "image", "source_file": "Frontend/erp-system/public/next.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "nextjs_brand", "label": "Next.js Brand / Framework", "file_type": null, "source_file": "Frontend/erp-system/public/next.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_frontend_public_assets", "label": "ERP Frontend Public Assets Directory", "file_type": null, "source_file": "Frontend/erp-system/public/next.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "frontend_erp_system_public_file_svg", "label": "File Icon SVG (Generic Document Icon)", "file_type": "image", "source_file": "Frontend/erp-system/public/file.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "hexa_erp_logo", "label": "Hexa ERP Logo Image", "file_type": "image", "source_file": "Frontend/erp-system/public/images/logo (2).png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "hexa_erp_brand", "label": "Hexa ERP Brand", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/logo (2).png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_system", "label": "ERP System", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/logo (2).png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "hexagonal_icon", "label": "Hexagonal Chain-Link Icon", "file_type": "concept", "source_file": "Frontend/erp-system/public/images/logo (2).png", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_21_frontend_hrm_spec", "label": "Phase 2 HRM Frontend Spec (Screens + Flows)", "file_type": "document", "source_file": "docs/21-FRONTEND-HRM.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_21_frontend_hrm_attendance_wizard", "label": "Attendance Upload Wizard (3-step client flow)", "file_type": "concept", "source_file": "docs/21-FRONTEND-HRM.md", "source_location": "\u00a72", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_21_frontend_hrm_spec", "target": "docs_20_frontend_spec", "relation": "extends", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-HRM.md", "source_location": "header", "weight": 1.0}, {"source": "docs_21_frontend_hrm_spec", "target": "docs_13_backend_hrm_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-HRM.md", "source_location": "header", "weight": 1.0}, {"source": "docs_21_frontend_hrm_attendance_wizard", "target": "docs_13_backend_hrm_api_attendance_batch", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-HRM.md", "source_location": "\u00a72", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "window_svg", "label": "Window SVG Icon", "file_type": "image", "source_file": "Frontend/erp-system/public/window.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_frontend_public", "label": "ERP Frontend Public Assets", "file_type": "directory", "source_file": "Frontend/erp-system/public/window.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "svg_window_icon_ui", "label": "Window/Browser UI Icon", "file_type": "concept", "source_file": "Frontend/erp-system/public/window.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "vercel_svg", "label": "Vercel Logo SVG", "file_type": "image", "source_file": "Frontend/erp-system/public/vercel.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "vercel_brand", "label": "Vercel Brand / Company", "file_type": null, "source_file": "Frontend/erp-system/public/vercel.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "erp_frontend_public", "label": "ERP Frontend Public Assets Directory", "file_type": "directory", "source_file": "Frontend/erp-system/public/vercel.svg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_10_backend_phase1_spec", "label": "Phase 1 Backend Spec (SRS + ER Model + Architecture)", "file_type": "document", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_10_backend_phase1_authcontroller", "label": "AuthController (AuthHex Proxy)", "file_type": "concept", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_10_backend_phase1_shadow_user", "label": "Shadow User JIT Provisioning", "file_type": "rationale", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "AuthHex token carries a GUID (UserId); ERPCore maps it JIT to a local int shadow user so all FKs and audit stamps reference a local id without storing tokens."}, {"id": "docs_10_backend_phase1_etag_concurrency", "label": "ETag / If-Match Optimistic Concurrency", "file_type": "concept", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_10_backend_phase1_number_sequence", "label": "NumberSequence Document Numbering", "file_type": "concept", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_10_backend_phase1_srs_scope", "label": "Phase 1 SRS Scope (Inventory & Supply Chain)", "file_type": "document", "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "B.1.2", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_10_backend_phase1_spec", "target": "docs_11_backend_phase1_api", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "header", "weight": 1.0}, {"source": "docs_10_backend_phase1_spec", "target": "docs_00_core_authhex", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "weight": 1.0}, {"source": "docs_10_backend_phase1_authcontroller", "target": "docs_00_core_authhex", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "weight": 1.0}, {"source": "docs_10_backend_phase1_shadow_user", "target": "docs_00_core_authhex", "relation": "depends_on", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/10-BACKEND-PHASE1.md", "source_location": "A.4", "weight": 1.0}], "hyperedges": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "docs_21_frontend_phase2_spec", "label": "Manufacturing Frontend Spec (Template Canvas + Run Board)", "file_type": "document", "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_21_frontend_phase2_template_canvas", "label": "Production Template Canvas Builder (React Flow)", "file_type": "concept", "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "\u00a72", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_21_frontend_phase2_run_board", "label": "Production Run Board", "file_type": "concept", "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "\u00a73", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "docs_21_frontend_phase2_stage_drawer", "label": "Stage Action Drawer (per-status execution UI)", "file_type": "concept", "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "\u00a75", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "docs_21_frontend_phase2_spec", "target": "docs_30_backend_phase2_mfg_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "header", "weight": 1.0}, {"source": "docs_21_frontend_phase2_spec", "target": "docs_20_frontend_spec", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "header", "weight": 1.0}, {"source": "docs_21_frontend_phase2_template_canvas", "target": "docs_30_backend_phase2_dag_templates", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "\u00a72", "weight": 1.0}, {"source": "docs_21_frontend_phase2_stage_drawer", "target": "docs_30_backend_phase2_mfg_spec", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/21-FRONTEND-PHASE2.md", "source_location": "\u00a75", "weight": 1.0}], "hyperedges": []}