{"id":"tap-output-parse","version":"1.0.0","description":"Parse TAP version 13 text into ordered assertions, plan validity, diagnostics, directives, and bailout state.","supported_operations":["parse TAP output","summarize TAP version 13","extract TAP assertions","inspect TAP test plans","read TAP TODO and SKIP directives","capture TAP YAML diagnostics","detect TAP bailouts"],"unsupported_operations":["execute tests or embedded diagnostic content","parse non-TAP test reporter formats","interpret YAML diagnostic values"],"semantics":["Recognizes TAP version 13, plans, ok/not ok assertions, TODO/SKIP directives, YAML diagnostic blocks, and Bail out! lines; assertion order is preserved.","YAML diagnostic blocks are returned verbatim and never parsed or executed.","A TAP 13 plan is optional; when absent plan is null and plan_valid is true. A plan before assertions is a valid leading plan; only assertions after an end plan set trailing_tests.","Assertion keywords are case-sensitive, while TODO/SKIP and skip-all plan directives are case-insensitive; plan and assertion numbers are bounded at 2000.","Semantic parsing stops at the first Bail out! line; later content is not counted as assertions.","Line endings are normalized to LF; unrelated comment and harness lines are ignored.","More than 65536 UTF-8 input bytes, 2000 lines, or 8192 cumulative YAML diagnostic bytes returns limit_exceeded."],"limits":{"max_input_bytes":65536,"max_lines":2000,"max_yaml_diagnostic_bytes":8192},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":65536}}},"output_schema":{"type":"object","additionalProperties":false,"required":["tap_version","plan","plan_valid","assertions","counts","bailout","trailing_tests","valid","errors"],"properties":{"tap_version":{"type":["integer","null"],"enum":[13,null]},"plan":{"type":["object","null"],"additionalProperties":false,"required":["start","end","skip","reason","line"],"properties":{"start":{"type":"integer","minimum":0,"maximum":2000},"end":{"type":"integer","minimum":0,"maximum":2000},"skip":{"type":"boolean"},"reason":{"type":["string","null"]},"line":{"type":"integer","minimum":1,"maximum":2000}}},"plan_valid":{"type":"boolean"},"assertions":{"type":"array","maxItems":2000,"items":{"type":"object","additionalProperties":false,"required":["ok","number","name","directive","reason","diagnostic","line"],"properties":{"ok":{"type":"boolean"},"number":{"type":["integer","null"],"minimum":0,"maximum":2000},"name":{"type":"string"},"directive":{"type":["string","null"],"enum":["TODO","SKIP",null]},"reason":{"type":["string","null"]},"diagnostic":{"type":["string","null"]},"line":{"type":"integer","minimum":1,"maximum":2000}}}},"counts":{"type":"object","additionalProperties":false,"required":["total","passed","failed","todo","skipped"],"properties":{"total":{"type":"integer","minimum":0,"maximum":2000},"passed":{"type":"integer","minimum":0,"maximum":2000},"failed":{"type":"integer","minimum":0,"maximum":2000},"todo":{"type":"integer","minimum":0,"maximum":2000},"skipped":{"type":"integer","minimum":0,"maximum":2000}}},"bailout":{"type":"object","additionalProperties":false,"required":["occurred","reason","line"],"properties":{"occurred":{"type":"boolean"},"reason":{"type":["string","null"]},"line":{"type":["integer","null"],"minimum":1,"maximum":2000}}},"trailing_tests":{"type":"boolean"},"valid":{"type":"boolean"},"errors":{"type":"array","maxItems":2000,"items":{"type":"string","enum":["missing_version","duplicate_version","unsupported_version","missing_plan","duplicate_plan","invalid_plan","plan_count_mismatch","assertion_number_mismatch","malformed_diagnostic"]}}}},"examples":[{"input":{"text":"TAP version 13\n1..2\nok 1 - input accepted\nnot ok 2 - output matches # TODO pending fixture"},"output":{"tap_version":13,"plan":{"start":1,"end":2,"skip":false,"reason":null,"line":2},"plan_valid":true,"assertions":[{"ok":true,"number":1,"name":"input accepted","directive":null,"reason":null,"diagnostic":null,"line":3},{"ok":false,"number":2,"name":"output matches","directive":"TODO","reason":"pending fixture","diagnostic":null,"line":4}],"counts":{"total":2,"passed":1,"failed":1,"todo":1,"skipped":0},"bailout":{"occurred":false,"reason":null,"line":null},"trailing_tests":false,"valid":true,"errors":[]}},{"input":{"text":"TAP version 13\nok 1 - starts\nBail out! database unavailable"},"output":{"tap_version":13,"plan":null,"plan_valid":true,"assertions":[{"ok":true,"number":1,"name":"starts","directive":null,"reason":null,"diagnostic":null,"line":2}],"counts":{"total":1,"passed":1,"failed":0,"todo":0,"skipped":0},"bailout":{"occurred":true,"reason":"database unavailable","line":3},"trailing_tests":false,"valid":false,"errors":[]}}],"execute_url":"/v1/tools/tap-output-parse/versions/1.0.0/execute"}