Skip to content

match_options: reject typo'd / unknown keys instead of silent fallback (additionalProperties: false policy) #152

Description

@kiki830621

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions