Seed via system settings and fix multi-instance mock toggle
ci / test (pull_request) Successful in 5m25s
ci / svc-realcombo (pull_request) Successful in 2m30s
ci / test-pg (pull_request) Failing after 2m27s

Why: P2 受管落地后的两处消费面适配——svc 播种内容(models/tavily)全为系统受管项须走系统管理面;两进程验收的 runtime.mock 开关同理由 user 层迁至系统面(无认证档本机即管理员)。
Evidence: bash -n 通过;受管拦截与系统面行为由 Backend PR #188 测试覆盖(已合入 76c75ce5);multi-instance 于 CI test-pg 档验证。
Impact: svc 认证档播种改为仅 admin(无管理员明确跳过);验收脚本断言语义不变。
Refs: modules/documents/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md P2
This commit is contained in:
2026-10-13 04:46:53 +00:00
parent 70304498c3
commit e35b210dbf
2 changed files with 20 additions and 13 deletions
+17 -11
View File
@@ -2819,10 +2819,13 @@ print_agent_plan() {
return 0
}
# seed_settings:把 CLI/环境变量给出的模型与搜索配置写入 settings(幂等)。
# 认证开启(PG 档默认)时 PUT /api/settings/user 同样要求凭证:自动铸一把临时
# API key(name=svc-seed)完成写入后立即回收;owner 缺省取库内首个管理员(回落
# 首个账号),--seed-owner / SVC_SEED_OWNER 可指定。铸 key 失败维持无头 PUT(旧行为)。
# seed_settings:把 CLI/环境变量给出的模型与搜索配置写入系统设置(幂等)。
# P2 受管(提案 2026-10-13 rdm-settings-members-duties-perms-increment):models.*
# 与 tools.tavily.* 是系统受管项,user 层写入整笔拒绝,播种改走系统管理面
# PUT /api/settings/system。认证开启(PG 档默认)时该面要求管理员凭证:自动铸一把
# 临时 API key(name=svc-seed)完成写入后立即回收;owner 缺省取库内首个管理员
#(系统面必须 isAdmin,不再回落普通账号),--seed-owner / SVC_SEED_OWNER 可指定。
# 铸 key 失败维持无头 PUT(仅无认证单机档可成)。
seed_settings() {
local host="$1" port="$2"
local cb="${CLI_MBASE:-${SVC_MODEL_BASE:-}}" ck="${CLI_MKEY:-${SVC_MODEL_KEY:-}}" cn="${CLI_MNAME:-${SVC_MODEL_NAME:-}}"
@@ -2865,18 +2868,21 @@ except Exception:
sys.exit(0)
for u in users:
if u.get("isAdmin"):
print(u["owner"]); break
else:
for u in users:
print(u["owner"]); break' 2>/dev/null || true)"
fi
if [ -n "$seed_owner" ]; then
seed_key="$("$ENV_BIN" apikey create ${seed_dbf[@]+"${seed_dbf[@]}"} --owner "$seed_owner" --name svc-seed 2>/dev/null || true)"
[ -n "$seed_key" ] && seed_hdr=(-H "Authorization: Bearer $seed_key")
if [ -z "$seed_owner" ]; then
c_warn "[$ENV_NAME] 跳过配置播种:系统设置面需要管理员账号(user list 未见 isAdmin)"
return 0
fi
seed_key="$("$ENV_BIN" apikey create ${seed_dbf[@]+"${seed_dbf[@]}"} --owner "$seed_owner" --name svc-seed 2>/dev/null || true)"
[ -n "$seed_key" ] && seed_hdr=(-H "Authorization: Bearer $seed_key")
if [ -z "$seed_key" ]; then
c_warn "[$ENV_NAME] 跳过配置播种:铸临时管理员 key 失败(认证档系统面拒绝无头写入)"
return 0
fi
fi
local resp
resp="$(curl -s -m 5 -X PUT "http://$host:$port/api/settings/user" -H 'Content-Type: application/json' ${seed_hdr[@]+"${seed_hdr[@]}"} -d "$payload")"
resp="$(curl -s -m 5 -X PUT "http://$host:$port/api/settings/system" -H 'Content-Type: application/json' ${seed_hdr[@]+"${seed_hdr[@]}"} -d "$payload")"
# 用后即回收;失败只提示吊销途径,不回显任何密钥材料。
if [ -n "$seed_key" ]; then
"$ENV_BIN" apikey revoke ${seed_dbf[@]+"${seed_dbf[@]}"} --owner "$seed_owner" --name svc-seed >/dev/null 2>&1 \
@@ -461,8 +461,9 @@ func (e *env) loginAlice(t *testing.T) *userClient {
}
// --mock 只写 OwnerDefault 的设置;alice 是独立租户,须显式开 mock
// (selectConversationRunner 按 EffectiveSettings 分流),否则 run 走
// LLMRunner 且无模型配置直接失败。
e.do(t, uc.api, "PUT", "/api/settings/user", map[string]any{"runtime": map[string]any{"mock": true}}, nil)
// LLMRunner 且无模型配置直接失败。P2 受管:runtime.mock 是系统受管项,
// user 层写入被拒;改走系统面(无认证单机档本机即管理员),对全部租户生效。
e.do(t, uc.api, "PUT", "/api/settings/system", map[string]any{"runtime": map[string]any{"mock": true}}, nil)
return uc
}