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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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