feat: complete LOW priority code quality improvements
Backend: - LOW-002: Add Query validation with max page size limits (100) - LOW-003: Replace magic strings with TaskStatus.is_done flag - LOW-004: Add 'creation' trigger type validation - Add action_executor.py with UpdateFieldAction and AutoAssignAction Frontend: - LOW-005: Replace TypeScript 'any' with 'unknown' + type guards - LOW-006: Add ConfirmModal component with A11Y support - LOW-007: Add ToastContext for user feedback notifications - LOW-009: Add Skeleton components (17 loading states replaced) - LOW-010: Setup Vitest with 21 tests for ConfirmModal and Skeleton Components updated: - App.tsx, ProtectedRoute.tsx, Spaces.tsx, Projects.tsx, Tasks.tsx - ProjectSettings.tsx, AuditPage.tsx, WorkloadPage.tsx, ProjectHealthPage.tsx - Comments.tsx, AttachmentList.tsx, TriggerList.tsx, TaskDetailModal.tsx - NotificationBell.tsx, BlockerDialog.tsx, CalendarView.tsx, WorkloadUserDetail.tsx 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
230
logs/run-20260107-212333/backend.log
Normal file
230
logs/run-20260107-212333/backend.log
Normal file
@@ -0,0 +1,230 @@
|
||||
INFO: Will watch for changes in these directories: ['/Users/egg/Projects/PROJECT CONTORL/backend']
|
||||
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
||||
INFO: Started reloader process [46401] using WatchFiles
|
||||
INFO: Started server process [46413]
|
||||
INFO: Waiting for application startup.
|
||||
INFO: Application startup complete.
|
||||
INFO: 127.0.0.1:61358 - "GET /health HTTP/1.1" 200 OK
|
||||
INFO: 127.0.0.1:61371 - "POST /api/auth/login HTTP/1.1" 500 Internal Server Error
|
||||
ERROR: Exception in ASGI application
|
||||
+ Exception Group Traceback (most recent call last):
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_utils.py", line 85, in collapse_excgroups
|
||||
| yield
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 190, in __call__
|
||||
| async with anyio.create_task_group() as task_group:
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 783, in __aexit__
|
||||
| raise BaseExceptionGroup(
|
||||
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
|
||||
+-+---------------- 1 ----------------
|
||||
| Traceback (most recent call last):
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
|
||||
| result = await app( # type: ignore[func-returns-value]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
|
||||
| return await self.app(scope, receive, send)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
|
||||
| await super().__call__(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
|
||||
| await self.middleware_stack(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
|
||||
| raise exc
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
|
||||
| await self.app(scope, receive, _send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
|
||||
| with collapse_excgroups():
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/contextlib.py", line 158, in __exit__
|
||||
| self.gen.throw(typ, value, traceback)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_utils.py", line 91, in collapse_excgroups
|
||||
| raise exc
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
|
||||
| response = await self.dispatch_func(request, call_next)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/Projects/PROJECT CONTORL/backend/app/middleware/audit.py", line 18, in dispatch
|
||||
| response = await call_next(request)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
|
||||
| raise app_exc
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
|
||||
| await self.app(scope, receive_or_disconnect, send_no_error)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
|
||||
| await self.simple_response(scope, receive, send, request_headers=headers)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
|
||||
| await self.app(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
|
||||
| await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
|
||||
| raise exc
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
|
||||
| await app(scope, receive, sender)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 762, in __call__
|
||||
| await self.middleware_stack(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 782, in app
|
||||
| await route.handle(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
|
||||
| await self.app(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
|
||||
| await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
|
||||
| raise exc
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
|
||||
| await app(scope, receive, sender)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
|
||||
| response = await func(request)
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 299, in app
|
||||
| raise e
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 294, in app
|
||||
| raw_response = await run_endpoint_function(
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
|
||||
| return await dependant.call(**values)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 732, in async_wrapper
|
||||
| self._check_request_limit(request, func, False)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 630, in _check_request_limit
|
||||
| self.__evaluate_limits(request, _endpoint_key, all_limits)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 509, in __evaluate_limits
|
||||
| if not self.limiter.hit(lim.limit, *args, cost=cost):
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/strategies.py", line 157, in hit
|
||||
| self.storage.incr(
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/storage/base.py", line 25, in inner
|
||||
| return fn(*args, **kwargs)
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/storage/redis.py", line 224, in incr
|
||||
| return int(self.lua_incr_expire([key], [expiry, amount]))
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 5948, in __call__
|
||||
| return client.evalsha(self.sha, len(keys), *args)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 6165, in evalsha
|
||||
| return self._evalsha("EVALSHA", sha, numkeys, *keys_and_args)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 6149, in _evalsha
|
||||
| return self.execute_command(command, sha, numkeys, *keys_and_args)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/client.py", line 657, in execute_command
|
||||
| return self._execute_command(*args, **options)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/client.py", line 663, in _execute_command
|
||||
| conn = self.connection or pool.get_connection()
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/utils.py", line 196, in wrapper
|
||||
| return func(*args, **kwargs)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 2603, in get_connection
|
||||
| connection.connect()
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 846, in connect
|
||||
| self.connect_check_health(check_health=True)
|
||||
| File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 863, in connect_check_health
|
||||
| raise ConnectionError(self._error_message(e))
|
||||
| redis.exceptions.ConnectionError: Error 61 connecting to localhost:6379. Connection refused.
|
||||
+------------------------------------
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
|
||||
result = await app( # type: ignore[func-returns-value]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
|
||||
return await self.app(scope, receive, send)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
|
||||
await super().__call__(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/applications.py", line 123, in __call__
|
||||
await self.middleware_stack(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
|
||||
raise exc
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
|
||||
await self.app(scope, receive, _send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 189, in __call__
|
||||
with collapse_excgroups():
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/contextlib.py", line 158, in __exit__
|
||||
self.gen.throw(typ, value, traceback)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_utils.py", line 91, in collapse_excgroups
|
||||
raise exc
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 191, in __call__
|
||||
response = await self.dispatch_func(request, call_next)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/Projects/PROJECT CONTORL/backend/app/middleware/audit.py", line 18, in dispatch
|
||||
response = await call_next(request)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 165, in call_next
|
||||
raise app_exc
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/base.py", line 151, in coro
|
||||
await self.app(scope, receive_or_disconnect, send_no_error)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
|
||||
await self.simple_response(scope, receive, send, request_headers=headers)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
|
||||
await self.app(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
|
||||
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
|
||||
raise exc
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
|
||||
await app(scope, receive, sender)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 762, in __call__
|
||||
await self.middleware_stack(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 782, in app
|
||||
await route.handle(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 297, in handle
|
||||
await self.app(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 77, in app
|
||||
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 64, in wrapped_app
|
||||
raise exc
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
|
||||
await app(scope, receive, sender)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/starlette/routing.py", line 72, in app
|
||||
response = await func(request)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 299, in app
|
||||
raise e
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 294, in app
|
||||
raw_response = await run_endpoint_function(
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
|
||||
return await dependant.call(**values)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 732, in async_wrapper
|
||||
self._check_request_limit(request, func, False)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 630, in _check_request_limit
|
||||
self.__evaluate_limits(request, _endpoint_key, all_limits)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/slowapi/extension.py", line 509, in __evaluate_limits
|
||||
if not self.limiter.hit(lim.limit, *args, cost=cost):
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/strategies.py", line 157, in hit
|
||||
self.storage.incr(
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/storage/base.py", line 25, in inner
|
||||
return fn(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/limits/storage/redis.py", line 224, in incr
|
||||
return int(self.lua_incr_expire([key], [expiry, amount]))
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 5948, in __call__
|
||||
return client.evalsha(self.sha, len(keys), *args)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 6165, in evalsha
|
||||
return self._evalsha("EVALSHA", sha, numkeys, *keys_and_args)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/commands/core.py", line 6149, in _evalsha
|
||||
return self.execute_command(command, sha, numkeys, *keys_and_args)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/client.py", line 657, in execute_command
|
||||
return self._execute_command(*args, **options)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/client.py", line 663, in _execute_command
|
||||
conn = self.connection or pool.get_connection()
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/utils.py", line 196, in wrapper
|
||||
return func(*args, **kwargs)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 2603, in get_connection
|
||||
connection.connect()
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 846, in connect
|
||||
self.connect_check_health(check_health=True)
|
||||
File "/Users/egg/miniconda3/envs/pjctrl/lib/python3.11/site-packages/redis/connection.py", line 863, in connect_check_health
|
||||
raise ConnectionError(self._error_message(e))
|
||||
redis.exceptions.ConnectionError: Error 61 connecting to localhost:6379. Connection refused.
|
||||
1
logs/run-20260107-212333/backend.pid
Normal file
1
logs/run-20260107-212333/backend.pid
Normal file
@@ -0,0 +1 @@
|
||||
46401
|
||||
18
logs/run-20260107-212333/env.log
Normal file
18
logs/run-20260107-212333/env.log
Normal file
@@ -0,0 +1,18 @@
|
||||
Timestamp: 2026-01-07T13:23:35Z
|
||||
Python: Python 3.11.14
|
||||
Python Path: /Users/egg/miniconda3/envs/pjctrl/bin/python
|
||||
Node: v22.19.0
|
||||
NPM: 11.6.2
|
||||
Env file: /Users/egg/Projects/PROJECT CONTORL/backend/.env
|
||||
OK: MYSQL_HOST
|
||||
OK: MYSQL_PORT
|
||||
OK: MYSQL_USER
|
||||
OK: MYSQL_PASSWORD
|
||||
OK: MYSQL_DATABASE
|
||||
OK: REDIS_HOST
|
||||
OK: REDIS_PORT
|
||||
OK: JWT_SECRET_KEY
|
||||
OK: AUTH_API_URL
|
||||
OK: SYSTEM_ADMIN_EMAIL
|
||||
WARN: ENCRYPTION_MASTER_KEY not set
|
||||
MySQL: Port reachable (mysql.theaken.com:33306)
|
||||
9
logs/run-20260107-212333/frontend.log
Normal file
9
logs/run-20260107-212333/frontend.log
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
> pjctrl-frontend@0.1.0 dev
|
||||
> vite --host 127.0.0.1 --port 5173
|
||||
|
||||
Re-optimizing dependencies because lockfile has changed
|
||||
|
||||
VITE v5.4.21 ready in 100 ms
|
||||
|
||||
➜ Local: http://127.0.0.1:5173/
|
||||
1
logs/run-20260107-212333/frontend.pid
Normal file
1
logs/run-20260107-212333/frontend.pid
Normal file
@@ -0,0 +1 @@
|
||||
46406
|
||||
2
logs/run-20260107-212333/health.log
Normal file
2
logs/run-20260107-212333/health.log
Normal file
@@ -0,0 +1,2 @@
|
||||
2026-01-07 21:23:37 OK backend http://127.0.0.1:8000/health
|
||||
2026-01-07 21:23:37 OK frontend http://127.0.0.1:5173/
|
||||
10
logs/run-20260107-212333/run.log
Normal file
10
logs/run-20260107-212333/run.log
Normal file
@@ -0,0 +1,10 @@
|
||||
[21:23:33] Run directory: /Users/egg/Projects/PROJECT CONTORL/logs/run-20260107-212333
|
||||
[21:23:35] WARN: Optional env key not set: ENCRYPTION_MASTER_KEY
|
||||
[21:23:35] WARN: Redis not reachable at localhost:6379
|
||||
[21:23:36] Starting backend on 127.0.0.1:8000 (python: /Users/egg/miniconda3/envs/pjctrl/bin/python)...
|
||||
[21:23:36] Starting frontend on 127.0.0.1:5173...
|
||||
[21:23:36] Running health checks...
|
||||
[21:23:37] Logs: /Users/egg/Projects/PROJECT CONTORL/logs/run-20260107-212333
|
||||
[21:23:37] Backend log: /Users/egg/Projects/PROJECT CONTORL/logs/run-20260107-212333/backend.log
|
||||
[21:23:37] Frontend log: /Users/egg/Projects/PROJECT CONTORL/logs/run-20260107-212333/frontend.log
|
||||
[21:23:37] Health log: /Users/egg/Projects/PROJECT CONTORL/logs/run-20260107-212333/health.log
|
||||
Reference in New Issue
Block a user