Lemon-miaow
73f4c858bf
fix(panel): 切换服务器或用户时不再先显示上一个对象的数据,详情页随路由参数重新挂载,列表翻页与筛选保留旧行直到新结果到达
2026-09-25 12:55:58 +08:00
Lemon-miaow
f156e385f0
fix(panel): 服务器地址改为一键复制并带上非默认游戏端口,玩家列表去掉无意义的连接地址列,管理员列改称内部地址
2026-09-25 12:51:16 +08:00
Lemon-miaow
bb9c2168df
fix(panel): 服务器列表的归属与可认领改由后端按账号判定,无邮箱管理员也能认出自己的服务器,所有者查询失败时显示未知且不给认领
2026-09-25 12:36:38 +08:00
Lemon-miaow
06d5e652c6
fix(panel): 构建记录改由服务端分页列表提供,任何浏览器与管理员都能看到并取消进行中的构建,列表刷新失败保留原行并提示
2026-09-25 12:28:22 +08:00
Lemon-miaow
9d03386c83
fix(panel): 删除镜像与取消构建改用面板确认对话框,失败原因显示在对话框内,镜像来源徽标跟随界面语言
2026-09-25 12:08:29 +08:00
Lemon-miaow
a5307d44d4
fix(panel): op-login 轮询按请求截止时间停止并显示倒计时,过期可一键重新发起,失败指数退避,服务端拒绝即停并提示
2026-09-25 11:58:13 +08:00
Lemon-miaow
367ef2678a
fix(deploy): 安装脚本的 apt 调用抑制 needrestart 以免重跑时重启代理,服务单元与镜像列表先读完再匹配避免 pipefail 下的 SIGPIPE 误判
2026-09-25 11:49:39 +08:00
Lemon-miaow
9a5225f77e
fix(panel): passkey 无凭据与用户不存在改用错误码的本地化文案,补齐通用错误码映射,认证来源与日期跟随界面语言
2026-09-25 11:44:47 +08:00
Lemon-miaow
6c3421fe8c
fix(panel): 错误提示改为读屏即时播报,图标按钮、筛选下拉与表单字段补齐可读名称,上传区可用键盘选择文件,并加全页面无障碍巡检
2026-09-25 11:35:14 +08:00
Lemon-miaow
1a8cccf245
fix(panel): 版本徽标读取服务端构建信息并标出开发版,配置加载失败时显示提示条
2026-09-25 11:14:21 +08:00
Lemon-miaow
34ea733775
perf(panel): 日志控制台按帧批量提交、分块渲染只重绘变动块,§ 与 ANSI 颜色码解析为样式文本
2026-09-25 11:07:11 +08:00
Lemon-miaow
175c9721d4
style(offsite): 清单描述符直接转换成 ImageBlob,消除 staticcheck S1016
2026-09-25 10:57:21 +08:00
Lemon-miaow
2151e0cf92
fix(panel): 首页绑定状态查询失败只降级绑定卡片并可单独重试,身份改用 useTier,镜像数读不到显示横杠
2026-09-25 10:56:13 +08:00
Lemon-miaow
3d79293218
test(imagepush): 开只读窗口遇 409 时像 GC Job 一样重试,消除 -race 下的偶发失败
2026-09-25 10:48:51 +08:00
Lemon-miaow
2f99874d5e
test(panel): 加组件测试与浏览器冒烟、hooks lint、OpenAPI 双向类型对齐,修复 CI 类型检查空转、列表不显示服务器名称与玩家停服不确认
2026-09-25 10:47:19 +08:00
Lemon-miaow
ea425cffa4
fix(passkey): 删除 passkey 先确认并显示名称与注册时间,邮箱未验证时后端拒删最后一把,错误内联显示
2026-09-25 10:04:31 +08:00
Lemon-miaow
90c39afb0c
fix(panel): 手机端加导航抽屉和登出入口,服务器与备份列表在窄屏改为卡片,桌面服务器表不再挤成竖排
2026-09-25 09:50:12 +08:00
Lemon-miaow
3a2166ca87
fix(panel): 启停按钮统一为带忙碌态和失败原因的组件,有玩家在线或人数未知时停服先确认
2026-09-25 09:38:11 +08:00
Lemon-miaow
bcf245410a
fix(panel): 文件编辑器关闭或离开页面前确认放弃未保存修改,状态轮询失败只提示不再卸载编辑器
2026-09-25 09:38:11 +08:00
Lemon-miaow
6595a2c581
fix(panel): 路径参数逐段编码并拒绝点段,非 JSON 响应保留状态码,会话过期带回跳送回登录页,连不上时显示横幅
2026-09-25 09:34:15 +08:00
Lemon-miaow
e0fa0268e0
docs(troubleshooting): 新增整机灾难恢复清单、各类数据的恢复点、恢复顺序与重建后核验步骤
2026-09-25 09:24:54 +08:00
Lemon-miaow
2779d8f5cf
fix(offsite): 服务器或白名单按摘要钉住的 felis/ 与 mirror/ 版本也进异地副本,恢复只按摘要推回不动安装器的 tag
2026-09-25 05:00:02 +08:00
Lemon-miaow
8fb3d298ae
feat(offsite): 异地副本加入提交上传的整合包,按内容去重加密,索引按版本保留 14 天,新增 fetch-uploads 恢复
2026-09-25 04:48:34 +08:00
Lemon-miaow
e3ac9cd545
feat(offsite): 异地副本加入 registry 用户镜像,按摘要加密去重,索引按版本保留 14 天,新增 fetch-images 回推恢复
2026-09-25 04:33:23 +08:00
Lemon-miaow
0e93e961ed
fix(imagepush): 推送与拉取共用一个 HTTP 客户端复用连接,出错时先读响应体再关闭,错误信息不再为空
2026-09-25 04:33:17 +08:00
Lemon-miaow
5d1da31a48
fix(offsite): 数据库包与桶内已有份数合并排名,只传会留下的,不再每小时重传再剪掉
2026-09-25 04:32:42 +08:00
Lemon-miaow
e1c325d594
fix(files): 配置文件改为同目录临时文件 fsync 后原子改名写入,读取返回内容哈希、保存带期望哈希冲突返回 409,磁盘满返回 507,面板提示载入最新或仍然覆盖
2026-09-25 03:56:30 +08:00
Lemon-miaow
074bd1783c
fix(install): 重跑安装时撤销旧版本为世界根目录授予 uid 1000 的 ACL 与 o+x 遍历权限
2026-09-25 03:46:53 +08:00
Lemon-miaow
0770a4d676
feat(reaper): 未配置世界目录时渲染只清理备份库存的 CronJob,默认安装也每日删除过期备份,安装器与清单生成器说明回收开关状态
2026-09-25 03:42:55 +08:00
Lemon-miaow
fe15b56074
docs(reaper): 说明回收前停服持锁、归档回读校验与存储清扫、无世界卷时的处理及运行汇总各计数
2026-09-25 03:34:54 +08:00
Lemon-miaow
7766e8efa4
fix(reaper): 回收前先停服并持有世界维护锁再归档,锁丢失不删卷;无世界卷的无主服务器只重置时钟不再重复回收
2026-09-25 03:31:50 +08:00
Lemon-miaow
89a0134707
feat(backup): 归档先写 .partial 再 fsync 改名并记录 sha256,删除原件前回读校验,reaper 抽样巡检与清扫半截归档,保留权限与 mtime,面板标出损坏与已校验
2026-09-25 03:16:06 +08:00
Lemon-miaow
489eff4494
feat(restore): 恢复前默认为当前世界做安全快照并串接恢复 Job,快照失败则不恢复;并发恢复另一备份返回 409
2026-09-25 02:52:18 +08:00
Lemon-miaow
d44243c0ac
docs(ops): 支持矩阵标注 Ubuntu 24.04 x86_64 由 CI 跑全新安装、重跑与升级,README 链接已验证发行版
2026-09-25 02:52:17 +08:00
Lemon-miaow
a660b01efa
ci(e2e): 代理状态 ping 等待 Velocity 绑定端口,旧 release 安装检查跳过其后才有的 timer
2026-09-25 02:15:11 +08:00
Lemon-miaow
f8f112b8ca
feat(api): 访问日志与 HTTP/运行时指标、安全响应头与面板 CSP、跨站写拦截、请求体读截止、SSE 定期重鉴权与续传、404/405/413 信封、status 按所有权裁剪、停机并发排空
2026-09-25 02:14:08 +08:00
Lemon-miaow
cc85aac906
ci(e2e): 新增 Ubuntu 24.04 全新安装+重跑 e2e 与 release→当前 commit 升级 e2e
2026-09-25 01:51:53 +08:00
Lemon-miaow
3ed6603201
feat(store): api/reaper/offsite/migrate 按版本集合校验 schema,库比二进制新时拒绝启动;bootstrap 迁移前失败回滚宿主二进制
2026-09-25 01:46:33 +08:00
Lemon-miaow
b1678f78c8
feat(update): felis update 报告 JRE 与 PostgreSQL(含停更提示),bootstrap 支持 FELIS_UPGRADE_DEPS=1 升级 k3s/cloudflared
2026-09-25 01:35:52 +08:00
Lemon-miaow
6f7b8d7b30
feat(deploy): 新增 uninstall.sh(默认保留数据,--purge 全删)与 docs/operations.md 支持矩阵、容量与重装恢复手册
2026-09-25 01:20:52 +08:00
Lemon-miaow
989be55b4a
feat(bootstrap): Velocity 堆可由 FELIS_VELOCITY_XMX 配置,全新安装预建 k3s 存储根目录消除 reaper 警告
2026-09-25 01:20:52 +08:00
Lemon-miaow
3e61fde06d
fix(bootstrap): 关闭 BuildKit 默认 attestation,无改动重跑不再重启 login/lobby;同版本重跑同时重启 registry gate
2026-09-25 00:43:02 +08:00
Lemon-miaow
f0ac5b48ce
fix(cfsetup): 隧道凭据文件校验 JSON 与 TunnelID,损坏或不匹配时移开并重新获取,失败页提示重试可收敛
2026-09-25 00:37:07 +08:00
Lemon-miaow
1141ebcd49
ci: 加 -race、staticcheck、govulncheck、shellcheck 与真 PostgreSQL 集成测试门禁,release 复用 ci 门禁
2026-09-25 00:35:09 +08:00
Lemon-miaow
82545548e7
feat(bootstrap): game stack 按 lock 文件固定构建并校验 sha256,基础镜像按 digest 固定,JRE 固定补丁版本
2026-09-25 00:24:02 +08:00
Lemon-miaow
aace66e8d3
fix(bootstrap): 重跑只重启有变化的 Velocity、系统服与 PostgreSQL,无 firewalld 时用 nftables 收口 5432,PG 大版本不符拒绝启动
2026-09-25 00:06:47 +08:00
Lemon-miaow
b1627e9ba0
style(pgint): gofmt
2026-09-24 23:52:30 +08:00
Lemon-miaow
a4fa16ae69
feat(bootstrap): 控制面镜像按版本打 tag,升级后 rollout undo 可回到上一版本
2026-09-24 23:52:30 +08:00
Lemon-miaow
80fbc779d9
feat(operator): 平台升级不再重启运行中的游戏服,registry 清理保留游戏 pod 在用的镜像
2026-09-24 23:52:30 +08:00
Lemon-miaow
07eb682358
docs(upgrade): 列出安装器对下载物的校验与离线导入 registry 镜像的做法
2026-09-24 23:39:39 +08:00
Lemon-miaow
3ad817eeff
fix(update): 重跑命令从最新 release tag 读取安装脚本
2026-09-24 23:39:39 +08:00
Lemon-miaow
26dc1722f4
feat(bootstrap): 先校验 SHA256SUMS 再运行下载的 felis,固定 k3s、cloudflared 与 registry 镜像版本
2026-09-24 23:39:38 +08:00
Lemon-miaow
c4a4f1f25c
ci(release): 发布 SHA256SUMS、SBOM 与构建来源证明,action 固定到 commit,不再覆盖已发布资产
2026-09-24 23:39:38 +08:00
Lemon-miaow
8296153a38
docs(build): 说明构建工具镜像、定时刷新与离线环境做法
2026-09-24 23:25:21 +08:00
Lemon-miaow
bf18712a6c
feat(build): kaniko/trivy 与扫描库改用 registry 内的 mirror 副本,定时刷新并在过期时告警
2026-09-24 23:25:21 +08:00
Lemon-miaow
c0643af118
feat(imagepush): 从公共 registry 拷贝单平台镜像与 OCI 制品
2026-09-24 23:25:04 +08:00
Lemon-miaow
80c4ea8966
docs(registry): 说明 manifest 清理、GC 窗口、PVC 容量与上传上限
2026-09-24 23:10:40 +08:00
Lemon-miaow
e75448a118
feat(platform): registry/uploads/backup PVC 容量可配置
2026-09-24 23:10:40 +08:00
Lemon-miaow
720ab81bf8
feat(submit): 上传存储全局上限、磁盘余量检查,被拒上下文 7 天后回收
2026-09-24 23:10:40 +08:00
Lemon-miaow
9baa0a10af
fix(registrygate): 启动后先等写入静默再开放 GC 窗口
2026-09-24 23:10:28 +08:00
Lemon-miaow
151c9d2e30
feat(registry): api 定期删除无引用 manifest,gate 提供 manifest 索引
2026-09-24 22:58:07 +08:00
Lemon-miaow
05e8c64e47
fix(imagepin): 带 digest 的镜像引用也向 registry 确认仍存在
2026-09-24 22:58:07 +08:00
Lemon-miaow
7f772bccbb
feat(registry): 开启 manifest 删除,GC sidecar 在 gate 只读窗口内回收 blob
2026-09-24 22:46:37 +08:00
Lemon-miaow
c49336ba21
fix(bootstrap): 元数据下载在 TLS 握手中断时整体重试
2026-09-24 22:26:30 +08:00
Lemon-miaow
5cadbd40a9
fix(submit): 待审上限在事务内加咨询锁原子检查,跨副本不超额
2026-09-24 22:26:30 +08:00
Lemon-miaow
a27d76ae1d
docs(build): 修正上下文存储与构建镜像拉取的过时描述
2026-09-24 22:26:29 +08:00
Lemon-miaow
e836a73a8a
fix(build): 构建并发上限与排队,构建命名空间加 ResourceQuota,SyncAll 逐个容错
2026-09-24 22:26:21 +08:00
Lemon-miaow
e521cf5976
fix(submit): 审阅绑定上下文 sha256,批准须带摘要,构建只从内部 API 取上下文并校验字节
2026-09-24 22:24:50 +08:00
Lemon-miaow
13b65e19ec
fix(build): 构建 pod 等出口策略生效再运行,加 seccomp、可选 user namespace 与磁盘上限,上下文解包限总字节与条目数
2026-09-24 20:42:14 +08:00
Lemon-miaow
9bda3a52fa
fix(backup): 手动备份按服冷却、每服保留上限与独立保留期,容量驱逐不再删除回收世界的唯一副本
2026-09-24 19:58:59 +08:00
Lemon-miaow
f69cdec9d4
fix(reaper): 有服务器处理失败或过期备份删不掉时以非零码退出,让 Job 失败告警触达运维
2026-09-24 19:34:09 +08:00
Lemon-miaow
22becd6859
fix(reaper): 认领时重置活跃时钟与预警,回收只复用本次认领后的 reaper 归档
2026-09-24 19:31:23 +08:00
Lemon-miaow
47890ca913
feat(offsite): 世界归档与数据库备份加密同步到异地 S3,reaper 确认异地副本后才删除世界
2026-09-24 19:25:16 +08:00
Lemon-miaow
fa8db4c7e8
docs(audit): 告警条目补记 watchdog 邮件告警与真机演练
2026-09-24 18:36:07 +08:00
Lemon-miaow
d17524cd67
feat(watchdog): 主机侧巡检定时器按异常邮件通知平台所有者,operator 增加 phase 与 build_info 指标、卡死存活探针与告警规则
2026-09-24 18:06:19 +08:00
Lemon-miaow
d50492b86f
chore(panel): mock 服务器带固定镜像与内存存储以演示编辑对话框
2026-09-24 17:08:53 +08:00
Lemon-miaow
0c29ab3a96
fix(api): 未改动任何字段的 PATCH 返回空 patched 数组而非 null
2026-09-24 17:04:02 +08:00
Lemon-miaow
215bfd78d7
fix(images): 服务器镜像在创建时固定到仓库 digest,更换镜像需确认备份,安装器重建前先固定旧服并推送不可变版本标签
2026-09-24 16:57:38 +08:00
Lemon-miaow
857b6da886
fix(operator): 删除依赖 rcon-cli 的 preStop 死代码,缩容前由 operator 经 RCON 执行 save-all flush
2026-09-24 16:39:22 +08:00
Lemon-miaow
5521e498a9
fix(platform): minecraft 命名空间强制 PodSecurity baseline,reaper 世界根目录改走静态 hostPath PV
2026-09-24 16:28:12 +08:00
Lemon-miaow
346a93921e
fix(operator): 游戏 Pod 改以 UID 1000 运行并丢弃全部能力,prepare-data 初始化容器修正旧存档属主
2026-09-24 16:23:49 +08:00
Lemon-miaow
c1796bea17
feat(servers): 新建服务器默认空闲 10 分钟自动停服,面板可调,converge 回填旧服,系统服不休眠
2026-09-24 16:12:53 +08:00
Lemon-miaow
bd909d5858
fix(operator): 读不出玩家数时暂停空闲自动停服,支持 1.12/Bukkit/EssentialsX 与颜色码
2026-09-24 16:06:55 +08:00
Lemon-miaow
857c73a66a
fix(audit): 审计按账号 id 归属并记录来源 IP/UA,登录失败与限速入审计和指标,写入失败计数告警
2026-09-24 16:02:44 +08:00
Lemon-miaow
c4e4953f3d
fix(auth): 公开登录门按来源限速并设全站发信上限,冷却表定期清理
2026-09-24 15:51:42 +08:00
Lemon-miaow
15f729ffea
fix(auth): 邮箱验证码按账号累计错误次数封顶并通知
2026-09-24 15:37:01 +08:00
Lemon-miaow
18e2397272
fix(panel): 加错误边界与新版本 chunk 自动刷新,无 WebGL 时仪表盘降级为平面视图
2026-09-24 15:27:29 +08:00
Lemon-miaow
248fa5d100
fix(panel): 服主在控制台看得到 LuckPerms 入口,归属判定统一走 /me/servers
2026-09-24 15:23:20 +08:00
Lemon-miaow
c7db7d4126
feat(db): 控制面 PG 定时备份、迁移前快照与原子恢复
2026-09-24 15:19:42 +08:00
Lemon-miaow
abfe60d62d
fix(api): wake 与回档/备份/改文件按服务器互斥
2026-09-24 14:39:02 +08:00
Lemon-miaow
7819e5de50
feat(netpol): 锁定游戏服出站并为 registry 加入站围栏
2026-09-24 14:25:17 +08:00
Lemon-miaow
3424852a39
feat(registry): 写入改走鉴权网关,构建先扫描再推送
2026-09-24 14:25:17 +08:00
Lemon-miaow
8f684cedc0
feat(paper): 大厅菜单从代理动态拉取服务器列表并分页
2026-09-24 13:39:38 +08:00
Lemon-miaow
955433ba81
fix(limbo): 经 felis:control 放行玩家并在 felis-api 故障时退避重试
2026-09-24 13:39:38 +08:00
Lemon-miaow
4648175773
fix(velocity): felis:control 按来源服务器限权并关闭 bungeecord 通道
2026-09-24 13:39:38 +08:00
Lemon-miaow
3247b9e61a
docs(audit): batch-47 — v0.1.0 stable release fired end-to-end (release download → no-checkout full bootstrap → felis update)
2026-09-24 11:36:22 +08:00
Lemon-miaow
b9c97ffac9
docs(audit): batch-46 — upload-lane quotas/lifecycle, tracker #8/#1, release-pipeline smoke
...
Real-machine closure for everything batched since batch 45: #75/#76 verified
end to end on auditfix77 (cooldowns 429, pending cap 403, 2GiB budget 403 via
the real accounting path, failure-does-not-burn-window, withdraw/admin-delete
row+blob double clean, panel two-step confirms in CDP), tracker #8 and #1
landed and verified (#77 panel redirect, #78 felis converge), plus #79 docs.
Also: pgint's new assertions first run on real PG (17/17) and the release
pipeline's first-ever run — tag v0.1.0-rc1, multiarch assets published and
executed on the target arch, /releases/latest deliberately untouched.
2026-09-24 11:11:07 +08:00
Lemon-miaow
b9ebc872ad
docs(troubleshooting): the [INERT] legend points at a field that no longer exists
...
The legend said "§12 lists the one field this still applies to", but the last
inert field (spec.storage.retainOnDelete) was removed rather than implemented
(§13), and §12 has said "every field below is read by a controller" since.
Reworded so a reader whose change looks ignored follows the condition question
instead of hunting for a dead field.
2026-09-24 10:35:35 +08:00
Lemon-miaow
c57daaf861
feat(cli): add felis converge for fields a newer desired spec never delivered (tracker #1 )
...
Provisioning is create-if-absent, so a field the desired spec gained after an
install (spec.rcon, spec.startup.healthHTTPPort, a derived env key) never
reaches the existing login/lobby CR while every re-run of setup reports
success — the reported 'configuration updates never reach an installed
deployment' symptom. converge is the explicit pass: it fills exactly the
zero-valued whitelist fields and the derived env (including a missing key,
which refreshDerivedEnv deliberately never adds), and never overwrites a
non-zero value. The timing stays with the operator because enabling RCON or
the HTTP readiness gate on a pre-listener image would wedge that server in
Starting until it was marked Failed.
Tests: fills predated fields while operator edits survive / non-zero values
left alone / absent + foreign + unset-image guards. usage table updated so the
router-parity test passes; troubleshooting gains §12b.
2026-09-24 10:35:14 +08:00
Lemon-miaow
43699b46db
fix(panel): route a setup-locked session to the wizard, not a permission error (tracker #8 )
...
A session that still owes forced onboarding gets 403 setup_required from every
protected route, but the panel rendered it as the generic forbidden line — the
one step that unlocks the app read as missing authorization. api.ts now
announces the code on a window event (client module has no router) and the App
shell, inside the Router, navigates to /setup; the wizard resumes from the
surviving session with or without a token. Other 403s are untouched.
Panel tests: +2 (fires on setup_required, silent on any other 403).
2026-09-24 10:32:38 +08:00