After yet another blog post trashed YAML over the Norway problem, PJB decided to check what the specification actually says. The result is a long piece of standards archaeology based on the yaml-core mailing list archive, scraped from SourceForge with self-written Python scripts and loaded into Thunderbird.

The spec trail is clear. The December 2001 draft had mandatory implicit typing, but by October 2002 the authors had reversed course. YAML 1.0 (January 2004) and 1.1 (January 2005) describe tag resolution as application-specific, with words like "may" doing heavy lifting. YAML 1.2 (July 2009) finally defined schemas and recommends a Core schema that contains neither yes/no booleans nor base-60 integers.

The emails show the authors knew the risks. In June 2002 they debated unambiguous implicit rules; in September 2002 the DWIM or unknown types proposal shifted typing to loaders. From 2003 to 2007 the authors repeatedly stated that generic loaders should treat all scalars as strings, that the type repository is a portability recommendation, and that PyYAML's implicit typing was a leftover from before the October 2002 change.

The failure happened downstream. The Ruby library Syck never got the memo, and in August 2003 it entered Ruby's standard library with the old broken behavior. In a June 2006 email a spec author admitted they knew Syck was wrong but did not want to rain on Why's parade. For thousands of Rubyists, YAML loaded "no" as a boolean, and reality beat the spec.

PJB's own practice matches the spec's intent: in Space Station 14, YAML node objects are parsed against a model in code, so booleans are only coerced where a boolean is expected. His conclusion: the spec is not blameless since a spec without implementations is meaningless, but no single person is at fault. It was a slow moving train wreck run by a few passionate nerds on a mailing list. His final verdict on YAML itself: it is alright.