Lemon-miaow
7f7e459746
fix(operator): enforce startup and readiness timeouts (§5, §8)
...
Previously a server whose pod was ready but RCON probe kept failing
would stay in Starting phase forever. The CRD defines TimeoutSeconds
and ReadinessTimeoutSeconds but the reconciler never checked them.
- PodNotReady path: if the pod stays not-ready past timeoutSeconds
(default 300s), transition to Failed
- RCON unreachable path: if RCON stays unreachable past
readinessTimeoutSeconds (default 300s), transition to Failed
- Helper methods startupTimedOut/readinessTimedOut compare
StartRequestedAt against the respective timeout, falling back to
300s defaults when unset
- 2 new tests: ReadinessTimeoutConvertsToFailed, StartupTimeoutConvertsToFailed
Fixes the scenario where a broken backend (bad jar, crash-looping
process) would permanently occupy a Starting server slot.
2026-07-05 16:22:08 +08:00
Lemon-miaow
e574749877
feat(api): enforce CPU/memory/storage quotas (spec §9.3, §22)
...
Add per-user resource quota enforcement across all four dimensions:
max_servers, max_cpu_milli, max_memory_mb, and max_storage_gb.
- Migration 0013: add cached_cpu_milli, cached_memory_mb, cached_storage_mb
columns to servers table for pure-SQL per-owner aggregation
- SeedServer now writes resource cache alongside server row
- QuotaCheck replaces QuotaAvailable at claim time, checking all four caps
against the owning user's cumulative usage
- handlePatchServer checks owner's quota before allowing memory/resource
changes on owned servers; unowned servers skip the gate
- handleInternalClaim mirrors the full quota check
- UpdateServerResources keeps the cache in sync after spec mutations
- Reaper zeros resource cache on ReleaseWorld so released resources
are not counted against a former owner
- quantityToMilli/quantityToMB helpers convert K8s quantities to
quota-comparable integers
19 test packages pass.
2026-07-05 02:05:44 +08:00
Lemon-miaow
91bfa27e8c
feat(operator): implement idle auto-stop (spec §8)
...
Adds empty-server auto-stop to the reconciler. When Idle.AutoStopEnabled
is true and the RCON player tally is zero for EmptySecondsBeforeStop seconds,
the operator flips desiredState to Stopped, which triggers the normal
graceful-shutdown path.
- Add EmptySince status field to track empty duration
- Clear EmptySince on stop and when players return
- Reuse existing RCON probe's player count (zero extra network cost)
- 4 new test cases covering timestamp, timeout, player-join reset, and
disabled-by-default
2026-07-05 01:52:45 +08:00
Lemon-miaow
bd49313e7e
refactor(panel): 抽取 10 个公共组件,消除 ~150 处重复代码
...
新增组件:
- PageHeader: 统一页面头部(14 个页面)
- StatCard: 统一数值统计卡片(6 个页面)
- MessageLine: 统一错误/成功提示条(16 处)
- ConfirmFooter: 统一 Dialog 底部按钮(8 个文件)
- SearchInput: 统一搜索框(5 个页面)
- SubmissionStatusBadge: 统一提交状态徽章
- RoleBadge / UserStatusBadge: 统一用户角色/状态徽章
- BackLink: 统一返回导航链接(5 个页面)
- InlineConfirm: 统一二次确认交互(3 个 section)
修复:
- Pagination 图标尺寸统一 h-4 w-4
- 右上角按钮统一 size=sm gap-1.5
- StatCard 默认值恢复 text-2xl(24px)
States.tsx 新增 NotYours / NotRunning 通用状态组件
已有文件 -659 行,新组件 +353 行,净减 306 行
2026-07-05 01:15:03 +08:00
Lemon-miaow
627883e89a
fix(panel): refine reset password messages and fix empty email placeholder in mock api response
2026-07-04 09:40:14 +08:00
Lemon-miaow
2c95da8d63
fix(panel/i18n): add missing users_col_user key to translation files
2026-07-04 09:36:03 +08:00
Lemon-miaow
67b4e1904e
fix(panel): override generic already_exists error message during user creation and profile editing
2026-07-04 09:33:41 +08:00
Lemon-miaow
3347cc05d5
feat(panel): implement user management administration panel with sessions and minecraft link support
2026-07-04 04:08:14 +08:00
Lemon-miaow
83e57b4c45
fix(panel): implement two-step confirmation for claiming a server to prevent accidental operations
2026-07-04 00:52:38 +08:00
Lemon-miaow
439f19e209
fix(panel): prevent page collapse and scroll shifts in players and bans management sections during reload
2026-07-04 00:32:38 +08:00
Lemon-miaow
e60784b5b2
fix(panel): eliminate page collapse and scroll shifts during LuckPerms query reload
2026-07-04 00:29:19 +08:00
Lemon-miaow
b7d8000eaf
feat(panel): implement dedicated LuckPerms permissions and groups management sub-page
2026-07-04 00:27:09 +08:00
Lemon-miaow
5f402b190c
fix(panel): force dark mode and pure black bg on server console card
2026-07-03 21:56:36 +08:00
Lemon-miaow
f749c2c606
style(panel): resolve double borders and uneven padding in server console
2026-07-03 21:55:25 +08:00
Lemon-miaow
a8701c1853
fix(panel): prevent automatic wake during server claim in mock api
2026-07-03 21:53:43 +08:00
Lemon-miaow
dd7dff69f0
feat(panel): support importing parameters from submission with owner-restricted unapproved entries
2026-07-03 03:13:16 +08:00
Lemon-miaow
804459c08d
feat(panel): implement admin maintenance window settings page
2026-07-03 02:46:50 +08:00
Lemon-miaow
55592ed123
feat(auth): support public auth bind endpoint
2026-07-03 02:11:57 +08:00
Lemon-miaow
5427bc7623
feat(servers): support claiming servers directly from ServersPage list
2026-07-03 02:01:06 +08:00
Lemon-miaow
73d6ec10d0
feat(mock): add mock submissions for owner account
2026-07-03 01:51:33 +08:00
Lemon-miaow
adf0d9953c
feat(panel): implement user-side modpack submissions with drag & drop context upload
2026-07-02 23:38:46 +08:00
Lemon-miaow
598f3d31f4
feat(submit): local + S3 backends for modpack upload contexts, installer-selectable
2026-07-02 23:38:46 +08:00
Lemon-miaow
191640c3f5
feat(panel): implement admin submission approval and reject queue
2026-07-02 23:38:46 +08:00
Lemon-miaow
8594622e23
feat(panel): implement email OTP verification and passkey registration management
2026-07-02 18:20:40 +08:00
Lemon-miaow
e0bc288444
feat(panel): implement image build pipeline and admin whitelist with mock dev api
2026-07-02 18:01:05 +08:00
Lemon-miaow
19f500b54a
style(panel): update destructive red color and rename wake to start
2026-07-02 13:43:35 +08:00
Lemon-miaow
c0d333bb98
feat(panel): support full server config edit dialog with status prefilling
2026-07-02 04:24:48 +08:00
Lemon-miaow
3b4298d777
refactor(panel): unify servers cockpit layout, resolve duplicate pages and adjust spacing
2026-07-02 03:30:51 +08:00
Lemon-miaow
6e43a466e0
fix(panel): pin sidebar navigation and enable independent content scroll
2026-07-02 03:30:51 +08:00
Lemon-miaow
92770eade8
style(panel): adjust pagination padding to pt-3 for balanced spacing
2026-07-02 03:30:51 +08:00
Lemon-miaow
5a8eff1935
feat(panel): remove developer comment footer cards from my servers and server admin pages
2026-07-02 03:30:50 +08:00
Lemon-miaow
70d17a0d57
feat(panel): align my servers page search layout with fleet table
2026-07-02 03:30:50 +08:00
Lemon-miaow
fa7bab5ec1
style(panel): refine search and filter layout to align with header
2026-07-02 03:30:50 +08:00
Lemon-miaow
a9dbc8bc61
feat(panel): add search and status filtering to my servers page
2026-07-02 03:30:50 +08:00
Lemon-miaow
4ecaf3c6cb
refactor(panel): set defaultOpen parameter of whitelist card to false
2026-07-02 03:30:50 +08:00
Lemon-miaow
149f01a332
fix(panel): change console button to outline variant on my servers page
2026-07-02 03:30:50 +08:00
Lemon-miaow
a15ff55342
refactor(panel): optimize player list layout and horizontal operations
2026-07-02 03:30:50 +08:00
Lemon-miaow
8ae65ae74a
feat(panel): backup management
2026-07-02 03:30:50 +08:00
Lemon-miaow
15c58d982d
feat(panel): player management
2026-07-02 03:30:50 +08:00
Lemon-miaow
d2de11af22
feat(panel): fleet
2026-07-01 03:46:07 +08:00
Lemon-miaow
7507cfaae4
Revert "feat(panel): wire role-switcher into the app shell"
...
This reverts commit 50b8487ff5 .
2026-07-01 00:05:51 +08:00
Lemon-miaow
346ec68e51
refactor(deploy): improved cloudflare walkthrough
2026-06-30 04:20:36 +08:00
Lemon-miaow
28c3eee361
refactor(deploy): improved TUI walkthrough
2026-06-30 02:25:18 +08:00
Lemon-miaow
e5f1682898
refactor(deploy)!: TUI
2026-06-29 20:17:17 +08:00
Lemon-miaow
318a724f98
feat(deploy): add pacman support for Arch Linux
2026-06-28 20:13:12 +08:00
Lemon-miaow
deaa2f8c85
feat(deploy): add zypper support for openSUSE/SLES
2026-06-28 16:45:16 +08:00
Lemon-miaow
94a3b7b5e8
fix(deploy): harden bootstrap for RHEL-family Linux
2026-06-28 14:53:25 +08:00
Lemon-miaow
c9cd9dcb14
style(panel): unify dialog animation to fade and scale from center
2026-06-28 03:51:41 +08:00
Lemon-miaow
832b200d55
fix(panel): reactive system theme detection
2026-06-28 03:41:50 +08:00
Lemon-miaow
f5d00f389e
feat(cli): implement felis apply command for direct CRD creation
2026-06-28 02:20:43 +08:00
Lemon-miaow
86f2ae41af
feat(panel): sidebar foot shows current account + sign-out; reorder Account cards
2026-06-28 00:37:25 +08:00
Lemon-miaow
a49443cd1f
refactor(panel): simplify sidebar
2026-06-28 00:04:27 +08:00
Lemon-miaow
b512a18d83
refactor(panel): adjust margins
2026-06-27 23:48:35 +08:00
Lemon-miaow
f4df3e20ea
feat(panel): pagination for server lists
2026-06-27 23:46:17 +08:00
Lemon-miaow
e1892659ef
refactor(panel): compact server card layout, denser grid
2026-06-27 23:33:18 +08:00
Lemon-miaow
ae91133ede
style(panel): refine button styles with shadow, active scale, toned-down colors
2026-06-27 23:16:45 +08:00
Lemon-miaow
cfe126fbee
feat(panel): add RCON command input to server console
2026-06-27 23:10:16 +08:00
Lemon-miaow
061482d380
fix(panel): extract hardcoded Chinese text to i18n keys
2026-06-27 21:26:31 +08:00
Lemon-miaow
cf88bcc3aa
fix(panel): extract hardcoded security note into i18n keys
2026-06-27 21:20:47 +08:00
Lemon-miaow
665841bebc
fix(panel): remove internal spec references from user-facing text
2026-06-27 21:20:00 +08:00
Lemon-miaow
18b4be0407
refactor(panel): uniform title icon styles
2026-06-27 21:17:30 +08:00
Lemon-miaow
f3521e3712
refactor(panel): uniform margins
2026-06-27 20:59:58 +08:00
Lemon-miaow
9d1378793e
refactor(panel): dashboard
2026-06-27 20:59:58 +08:00
Lemon-miaow
74e7e6efb6
docs: CONTRIBUTING.md
2026-06-27 18:59:50 +08:00
Lemon-miaow
51c9eab4e2
docs: CONTRIBUTOR.md
2026-06-27 18:56:21 +08:00
Lemon-miaow
7b458daf77
feat(panel): light/dark theme
2026-06-27 18:48:12 +08:00
Lemon-miaow
dd2fc6fa82
feat(panel): i18n
2026-06-27 18:31:26 +08:00
Lemon-miaow
a5a64821d8
feat: dev mock
2026-06-27 17:35:31 +08:00