Problem
From verify of #115 (Logic L1):
「Typo'd keys silently fall back:{"match_options": {"math_script_insensitve": true}}(缺 i)會被 silently 忽略而非 reject。Schema 缺 additionalProperties: false。」
— Source: team:logic L1 (P3)
Verify report: #115 (comment)
Type
policy decision / strict mode
Scope
不只 match_options — Server.swift 整個 schema surface 都沒有 additionalProperties: false。LLM caller 拼錯 key 會 silently fall back,very common footgun。
Strategy
Option 1(針對 match_options):在 parseAnchorLookupOptions 加 unknown key check:
let knownKeys: Set<String> = ["math_script_insensitive"]
if let .object(opts) = rawOptions {
let unknown = opts.keys.filter { !knownKeys.contains($0) }
if !unknown.isEmpty {
return (.exact, "Error: \(tool): unknown match_options keys: \(unknown.joined(separator: ", "))")
}
}
Option 2(policy-level):跨整個 Server.swift schema 系統加 additionalProperties: false,並寫 grep test 守護新工具。
Option 1 是 narrow fix;Option 2 影響面大、可能 break 既有 caller。建議:先 Option 1 covering match_options + critical args(doc_id/comment_id/paragraph_index 等),policy-level 改動拆獨立 SDD/PR。
Test
match_options.math_script_insensitve (typo) → reject with structured error
match_options.foo (unknown key) → reject
Related
Problem
Type
policy decision / strict mode
Scope
不只
match_options— Server.swift 整個 schema surface 都沒有additionalProperties: false。LLM caller 拼錯 key 會 silently fall back,very common footgun。Strategy
Option 1(針對
match_options):在parseAnchorLookupOptions加 unknown key check:Option 2(policy-level):跨整個 Server.swift schema 系統加
additionalProperties: false,並寫 grep test 守護新工具。Option 1 是 narrow fix;Option 2 影響面大、可能 break 既有 caller。建議:先 Option 1 covering match_options + critical args(doc_id/comment_id/paragraph_index 等),policy-level 改動拆獨立 SDD/PR。
Test
match_options.math_script_insensitve(typo) → reject with structured errormatch_options.foo(unknown key) → rejectRelated