{"id":"ini-win-validate","version":"1.0.0","description":"Check initialization-file text against the pinned Windows profile grammar.","supported_operations":["validate windows initialization profile","check private profile grammar","windows profile syntax report","find unsupported profile line","count duplicate profile keys","verify initialization section form","private profile structure report","detect invalid section header"],"unsupported_operations":["return the retrieved profile string","rewrite the profile into canonical text","open Win.ini with GetProfileString"],"semantics":["Grammar getprivateprofilestring-pinned-1, the same line rules as ini-win-parse. A well-typed profile that breaks those rules returns valid false with a snake_case reason and a 1-based line. It does not throw.","Duplicate section headers and duplicate keys inside one span are valid. duplicate_sections and duplicate_keys count the extra occurrences. Counts on an invalid file include only lines accepted before the failing line.","Semicolon comments, hash comments, and colon separators are unsupported lines, not silently skipped. A line before the first section that contains = is key_before_section.","Limits, wrong types, unknown fields, and lone surrogates throw. valid true uses reason \"\" and line 0. An empty text is a valid profile with no sections."],"limits":{"max_input_bytes":4096,"max_lines":200,"max_sections":32,"max_keys":128,"max_name_chars":64,"max_value_chars":512,"max_depth":8,"max_nodes":1024,"max_output_bytes":512},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":4096}}},"output_schema":{"type":"object","additionalProperties":false,"required":["grammar","valid","reason","line","section_count","key_count","duplicate_sections","duplicate_keys"],"properties":{"grammar":{"type":"string","const":"getprivateprofilestring-pinned-1"},"valid":{"type":"boolean"},"reason":{"type":"string","enum":["","semicolon_comment","hash_comment","colon_separator","unsupported_control","unclosed_section","trailing_section_junk","empty_section_name","empty_key_name","key_before_section","invalid_line"]},"line":{"type":"integer","minimum":0,"maximum":200},"section_count":{"type":"integer","minimum":0,"maximum":32},"key_count":{"type":"integer","minimum":0,"maximum":128},"duplicate_sections":{"type":"integer","minimum":0,"maximum":32},"duplicate_keys":{"type":"integer","minimum":0,"maximum":128}}},"examples":[{"input":{"text":"[section]\nkey=string\n"},"output":{"grammar":"getprivateprofilestring-pinned-1","valid":true,"reason":"","line":0,"section_count":1,"key_count":1,"duplicate_sections":0,"duplicate_keys":0}},{"input":{"text":"[section]\nkey=\"string\"\n"},"output":{"grammar":"getprivateprofilestring-pinned-1","valid":true,"reason":"","line":0,"section_count":1,"key_count":1,"duplicate_sections":0,"duplicate_keys":0}},{"input":{"text":"[section]\n; comment\n"},"output":{"grammar":"getprivateprofilestring-pinned-1","valid":false,"reason":"semicolon_comment","line":2,"section_count":1,"key_count":0,"duplicate_sections":0,"duplicate_keys":0}}],"execute_url":"/v1/tools/ini-win-validate/versions/1.0.0/execute"}