From 184530a9d0b75eeba4831cedde786eebd967891f Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Tue, 22 Sep 2026 20:03:23 +0200 Subject: [PATCH 1/3] format: yaml and toml, two configuration formats for a DevOps shelf A config file at an exact size is what a size-limited upload is for a picture, and neither format had a way to ask for one. Both write records: YAML in block style rather than flow, because YAML is a superset of JSON and a flow document would be a JSON document with a different extension. TOML as an array of [[records]] tables, one field shorter because TOML 1.0 has no null at all, and the plan says so rather than leaving somebody to count fields. Zero new dependencies: both are written by hand, the way json, xml and csv are, because D11 freezes these bytes and a library bump moves them. The padding channel is the note value of the last record, and that is a decision AGAINST the measurement rather than from it. Measured across twelve candidates and seven readers, a comment holds everywhere to 10 MB - and a parser throws comments away, so a five megabyte document padded with one has the right size and hands the system under test two kilobytes of work. The comment carries the label instead, which makes these the first record formats whose label sits inside the file without touching the structure being tested. Four things the measurement said that nothing had written down: the channel takes printable ASCII and a tab rather than arbitrary bytes, a multi document YAML file is refused by the Python readers and silently truncated to its first document by the Go ones, TOML refuses a byte order mark while YAML reads UTF-16 with one, and PyYAML accepts a duplicate key that every other implementation refuses - so the hand written structural check carries that half. Also fixes the instructions the social picture guard prints. Following them in the order they gave left a picture of the old card carrying a stamp of the new one, with the guard green over both - measured while adding these two formats. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 33 +- README.md | 4 +- internal/format/all/all.go | 2 + internal/format/tomlfile/toml.go | 329 +++++++++++++++++ internal/format/yamlfile/yaml.go | 343 ++++++++++++++++++ internal/guard/generatorbytes_test.go | 10 + internal/guard/layers_test.go | 6 + internal/guard/oracle_test.go | 4 + internal/guard/parity_test.go | 2 + internal/guard/socialpicture_test.go | 12 +- internal/guard/testdata/generator-golden.json | 20 + .../screens/generate-menu-hovered.png | Bin 90680 -> 90774 bytes .../screens/generate-menu-hovered.xml | 28 +- .../testdata/screens/generate-menu-keyed.png | Bin 90798 -> 90892 bytes .../testdata/screens/generate-menu-keyed.xml | 28 +- .../guard/testdata/screens/generate-menu.png | Bin 90528 -> 90623 bytes .../guard/testdata/screens/generate-menu.xml | 28 +- .../testdata/screens/preset-menu-setting.png | Bin 118747 -> 118687 bytes .../testdata/screens/preset-menu-setting.xml | 16 +- .../guard/testdata/screens/preset-menu.png | Bin 125804 -> 126464 bytes .../guard/testdata/screens/preset-menu.xml | 4 +- internal/guard/testdata/screens/preset.png | Bin 126864 -> 127524 bytes internal/guard/testdata/screens/preset.xml | 4 +- internal/guard/textformats_test.go | 4 +- internal/gui/parts/filekind.go | 2 + internal/oracle/configscripts.go | 82 +++++ internal/oracle/oracle.go | 27 +- internal/oracle/strict.py | 138 ++++++- web/assets/social-preview.png | Bin 161621 -> 161815 bytes web/public/assets/social-preview.png | Bin 161621 -> 161815 bytes web/public/faq/index.html | 4 +- web/public/formats/index.html | 22 +- web/public/index.html | 12 +- web/public/pl/faq/index.html | 4 +- web/public/pl/formaty/index.html | 22 +- web/public/pl/index.html | 12 +- web/public/social.html | 4 +- web/social-preview.sha256 | 2 +- 38 files changed, 1118 insertions(+), 90 deletions(-) create mode 100644 internal/format/tomlfile/toml.go create mode 100644 internal/format/yamlfile/yaml.go create mode 100644 internal/oracle/configscripts.go diff --git a/CHANGELOG.md b/CHANGELOG.md index dea16f1a..f0470ae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ because it turns other people's test suites red. used to start on whichever preset came first alphabetically - so what you saw when you opened the tab changed whenever a preset was added. A preset says now whether it is the one to start on, and `empty-and-minimal` is it: - pressing Generate without touching anything writes 32 214 B rather than the + pressing Generate without touching anything writes 32 667 B rather than the 73 MB the size-boundaries defaults come to, and its set means something without a number from you first. - **A recipe this program writes for you reads like one written by hand.** @@ -195,6 +195,33 @@ because it turns other people's test suites red. ### Added +- **Two more formats, both for configuration: `yaml` and `toml`.** A config + file at an exact size is what a size-limited upload is for a picture, and + neither format had a way to ask for one. Run `tfg formats` for all twenty + six, or `tfg formats yaml` for what one takes. + + Both write records: a `records` block of entries carrying an id, a name, an + email, an amount, a flag, a list of tags, a nested address and a note. YAML + comes out in block style rather than flow style, so it reads like a YAML + file rather than like JSON with a different extension. TOML comes out as an + array of `[[records]]` tables. + + **The smallest yaml is 241 B and the smallest toml is 212 B**, each one + whole record. An empty file is legal in both - and it stays something you + ask for by shape rather than by byte count, the same answer `json` gives + about an empty array. + + **The label rides in a comment**, which is new: these are the first record + formats whose label sits inside the file without touching the data being + tested. `csv` and `json` label from the outside because an extra field + changes the very structure under test, and a comment is not data. Ask for a + file at exactly the minimum and there is no room for it beside a whole + record, so it is left out and the run says so. + + **TOML takes no `encoding` or `bom` setting and says why rather than + calling it an unknown option.** TOML is UTF-8 by its own specification, and + both readers tested refuse a TOML file that opens with a byte order mark. + - **Three more presets: `upload-validation`, `text-encoding` and `tabular-import`.** Run `tfg preset list` for all five, or `tfg preset show ` for what one takes and what it would produce before @@ -246,8 +273,8 @@ because it turns other people's test suites red. - **A second preset: `empty-and-minimal`.** It answers "does a file that is valid and as small as the format allows get through?" and builds the smallest legal file of every format this build has, plus a file of nought - bytes for every format that has a legal empty form. The whole set is 26 - files and 32 214 B, so it checks twenty-four paths through your reader for + bytes for every format that has a legal empty form. The whole set is 28 + files and 32 667 B, so it checks twenty-six paths through your reader for the price of thirty-two kilobytes. Run it with `tfg generate --preset empty-and-minimal`, or pick it on the Presets screen. diff --git a/README.md b/README.md index d574c255..7a9dca3a 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ reference is below it. ## 📁 Formats it generates -Twenty four, and every one is a **real file of that format** - it opens in the +Twenty six, and every one is a **real file of that format** - it opens in the software that owns it, at the exact size you asked for: | group | formats | @@ -84,6 +84,7 @@ software that owns it, at the exact size you asked for: | 📄 **Documents** | `pdf`, `docx` (Word), `xlsx` (Excel), `pptx` (PowerPoint) | | 🖼️ **Images** | `png`, `jpg`, `bmp`, `gif`, `ico`, `svg`, `tiff`, `webp`, `avif`, `jxl` | | 📝 **Text and markup** | `txt`, `md`, `csv`, `json`, `xml`, `html`, `log` | +| ⚙️ **Configuration** | `yaml`, `toml` | | 🗜️ **Archives** | `zip`, `targz` (`.tar.gz`) | | 🔊 **Audio** | `wav` | @@ -555,6 +556,7 @@ recipe. `tfg formats ` prints the allowed range or list for each: | `json` | `formatting` | | `svg` | `width`, `height` | | `html` | `structure` | +| `yaml`, `toml` | none in this build - the document is a fixed shape, and a size is the only thing to ask for | ``` tfg generate --format jpg --size 500kb --set width=1920 --set height=1080 --set quality=85 diff --git a/internal/format/all/all.go b/internal/format/all/all.go index 5bb02e34..67ab8fcf 100644 --- a/internal/format/all/all.go +++ b/internal/format/all/all.go @@ -26,10 +26,12 @@ import ( _ "github.com/donislawdev/TestingFilesGenerator/internal/format/svgfile" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/targz" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/tiff" + _ "github.com/donislawdev/TestingFilesGenerator/internal/format/tomlfile" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/txt" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/wav" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/webp" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/xlsx" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/xmlfile" + _ "github.com/donislawdev/TestingFilesGenerator/internal/format/yamlfile" _ "github.com/donislawdev/TestingFilesGenerator/internal/format/zip" ) diff --git a/internal/format/tomlfile/toml.go b/internal/format/tomlfile/toml.go new file mode 100644 index 00000000..e5c5f7ee --- /dev/null +++ b/internal/format/tomlfile/toml.go @@ -0,0 +1,329 @@ +// Package tomlfile generates TOML documents. +// +// The package is not called "toml" so that it cannot be confused with the +// parser the toolkit already pulls into this module, the same reason jsonfile +// is not called json. The format id is "toml". +package tomlfile + +import ( + "context" + "fmt" + "io" + // D11 promises the same bytes from the same seed, so a deliberate, + // reproducible generator is the product rather than a weakness. Nothing + // here ever makes a secret. + // nosemgrep: go.lang.security.audit.crypto.math_random.math-random-used + "math/rand/v2" + "strconv" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" + "github.com/donislawdev/TestingFilesGenerator/internal/format" + "github.com/donislawdev/TestingFilesGenerator/internal/format/textenc" +) + +// Measured on 2026-09-22 across five candidate channels and three readers - +// Python's tomllib, tomlkit 0.15.1 and BurntSushi/toml 1.6.0. Comments, basic +// strings and multi line strings all hold to 10 MB, and odd sizes are +// reachable. Written up in docs/YAML-TOML-2026-09-22.md. +// +// tomllib and tomli are the same code vendored twice, so they count as one +// reader rather than two. The second one is tomlkit. +// +// A comment wins that measurement and loses the design. A parser throws +// comments away, so a document padded with one has the right size and gives +// the system under test nothing to do. The filler goes into the note value of +// the last record, where the reader has to carry it, and the comment takes the +// label instead. +const ( + generatorVersion = "1" + + emailDomain = "@example.com" + + // An array of tables rather than one inline array, because that is the + // shape a person meets in a real TOML file. There is no root key: a TOML + // document is a table already. + openID = "[[records]]\nid = " + openName = "\nname = \"" + openMail = "\"\nemail = \"" + openAmt = "\"\namount = " + openAct = "\nactive = " + openTags = "\ntags = [\"" + tagSep = "\", \"" + openAddr = "\"]\naddress = { city = \"" + openZip = "\", zip = " + openNote = " }\nnote = \"" + tail = "\"\n" + + // maxIDDigits bounds the width of the record number, so the shortest whole + // record holds for every draw rather than for the lucky one. + maxIDDigits = 19 + + amountDigits = 9 + zipDigits = 5 + // "false" is the longer of the two, and the minimum has to hold for both. + longestBool = 5 +) + +func init() { + format.Register(format.Descriptor{ + ID: "toml", + Extension: ".toml", + Fidelity: format.FidelityFull, + Determinism: format.DeterminismByte, + + // An empty file is legal TOML - measured, it reads back as an empty + // table. It is still not what a byte count orders, the same answer + // JSON gives about an empty array. The minimum is one whole record. + MinBytes: minimumBytes(), + + Padding: format.PaddingChannel{ + Name: "the note value of the last record", + Where: format.PlacementEnd, + // No ceiling found to 10 MB, which is where the measurement + // stopped. + Capacity: 0, + }, + + Label: format.LabelInternal, + Oracle: "python-toml", + // Record counts and table layouts come later. Declaring only what is + // here makes a recipe asking for them fail loudly. + Properties: nil, + + // Encoding is not a gap here, it is the format. TOML 1.0 says a + // document is UTF-8, and measured on 2026-09-22 both readers refuse a + // byte order mark even in front of UTF-8 - so there is nothing to + // offer rather than something not built yet. Saying so with the reason + // beats the generic "no such property", which reads as a hole in this + // build. + Unsupported: []format.UnsupportedSetting{ + { + Name: textenc.Setting, + Why: "TOML is UTF-8 by its own specification, so there is no other " + + "encoding for a document to be in", + Instead: "Use yaml, xml, txt or md for a file in another encoding.", + }, + { + Name: textenc.SettingBOM, + Why: "both readers on this machine refuse a TOML file that opens with a " + + "byte order mark, even in UTF-8", + Instead: "Use txt or md for a file that opens with a byte order mark.", + }, + }, + GeneratorVersion: generatorVersion, + Generator: generator{}, + }) +} + +type generator struct{} + +type memo struct { + seed uint64 + comment string +} + +func (generator) Plan(r format.Request) (format.Plan, error) { + min := minimumBytes() + if r.Bytes < min { + return format.Plan{}, &format.BelowMinimumError{ + Format: "TOML", + Requested: r.Bytes, + Minimum: min, + Reason: "a document holds whole records, and one table of them with every value type needs that much", + Hint: fmt.Sprintf("Ask for %d B or more.", min), + } + } + + p := format.Plan{ + Bytes: r.Bytes, + Exact: true, + Determinism: format.DeterminismByte, + Properties: map[string]any{ + "encoding": "utf-8", + "line_ending": "lf", + "root": "records", + "style": "array-of-tables", + // A TOML document has no null. The record here carries one value + // of every type the format does have, and the absence is stated + // rather than left for somebody to notice it is shorter than the + // JSON one. + "null_supported": false, + }, + } + + m := memo{seed: r.Seed} + if r.Label { + line := "# " + core.Label("toml", r.Bytes, r.Seed) + "\n" + if int64(len(line))+min <= r.Bytes { + m.comment = line + } else { + p.Notes = append(p.Notes, format.Note{ + Code: "label_omitted", + Detail: fmt.Sprintf( + "The label comment needs %d B and this file has no room for it beside a whole record. Its name and the manifest still identify it.", + len(line)), + }) + } + } + + p.Properties[format.PropertyLabelEmbedded] = m.comment != "" + p.Memo = m + return p, nil +} + +func (generator) Write(ctx context.Context, w io.Writer, p format.Plan) error { + m, ok := p.Memo.(memo) + if !ok { + return fmt.Errorf("toml: the plan was not produced by this generator") + } + + // The comment is the whole of the prologue, so with no label there is + // nothing in front of the first table and the document opens with it. + if err := core.WriteAll(w, []byte(m.comment)); err != nil { + return err + } + + rng := core.NewRand(m.seed) + return core.FillRecords(ctx, w, rng, p.Bytes-int64(len(m.comment)), &records{}) +} + +// minimumBytes is one shortest whole record, with no label. +func minimumBytes() int64 { + r := &records{} + return r.Shortest() +} + +// records builds the tables. It carries the record number, so the id counts up +// the way a real export does. +type records struct { + next int64 +} + +// Shortest is the smallest record this builder can close a document with: the +// widest record number, the longest word in all five places a word appears, +// the longer of the two booleans, and an empty note. +func (r *records) Shortest() int64 { + return int64(maxIDDigits + 5*longestWord + fixed()) +} + +func (r *records) Append(dst []byte, rng *rand.Rand) []byte { + return r.append(dst, rng, -1) +} + +func (r *records) AppendExact(dst []byte, rng *rand.Rand, n int64) []byte { + return r.append(dst, rng, n) +} + +// Discard hands back the number the thrown away record took with it, so the +// ids read 1..N with nothing missing. +func (r *records) Discard() { r.next-- } + +// fixed is every byte of a record that does not depend on a draw, measured +// from the literals beside it rather than written out as a number. +func fixed() int { + return len(openID) + len(openName) + len(openMail) + len(emailDomain) + + len(openAmt) + amountDigits + len(openAct) + longestBool + + len(openTags) + len(tagSep) + len(openAddr) + len(openZip) + zipDigits + + len(openNote) + len(tail) +} + +// append writes one record. A want below zero means whatever length it comes +// out, any other value is the exact length the record must have. +// +// It appends rather than returning a new slice because a document of any size +// is millions of records, and one allocation per record is a multiple of the +// file in garbage. +func (r *records) append(dst []byte, rng *rand.Rand, want int64) []byte { + r.next++ + start := len(dst) + + name := words[rng.IntN(len(words))] + whole := 100000 + rng.IntN(899999) + cents := rng.IntN(100) + active := rng.IntN(2) == 0 + tagA := words[rng.IntN(len(words))] + tagB := words[rng.IntN(len(words))] + city := words[rng.IntN(len(words))] + zip := 10000 + rng.IntN(90000) + + dst = append(dst, openID...) + dst = strconv.AppendInt(dst, r.next, 10) + dst = append(dst, openName...) + dst = append(dst, name...) + dst = append(dst, openMail...) + dst = append(dst, name...) + dst = append(dst, emailDomain...) + dst = append(dst, openAmt...) + dst = strconv.AppendInt(dst, int64(whole), 10) + dst = append(dst, '.') + if cents < 10 { + dst = append(dst, '0') + } + dst = strconv.AppendInt(dst, int64(cents), 10) + dst = append(dst, openAct...) + if active { + dst = append(dst, "true"...) + } else { + dst = append(dst, "false"...) + } + dst = append(dst, openTags...) + dst = append(dst, tagA...) + dst = append(dst, tagSep...) + dst = append(dst, tagB...) + dst = append(dst, openAddr...) + dst = append(dst, city...) + dst = append(dst, openZip...) + dst = strconv.AppendInt(dst, int64(zip), 10) + dst = append(dst, openNote...) + + if want < 0 { + dst = appendPhrase(dst, rng, 3+rng.IntN(5)) + return append(dst, tail...) + } + + used := int64(len(dst)-start) + int64(len(tail)) + dst = core.AppendFiller(dst, words, want-used, nil) + return append(dst, tail...) +} + +// appendPhrase writes a readable note. Words and single spaces only - a basic +// string cannot take a quote or a backslash raw, and neither appears in the +// vocabulary. Measured 2026-09-22: every other byte from 20 to 7E goes in as +// itself, so an escape never costs a byte the arithmetic did not budget for. +func appendPhrase(dst []byte, rng *rand.Rand, n int) []byte { + for i := 0; i < n; i++ { + if i > 0 { + dst = append(dst, ' ') + } + dst = append(dst, words[rng.IntN(len(words))]...) + } + return dst +} + +// longestWord is the widest draw, because the minimum has to hold for every +// draw rather than for the lucky one. +var longestWord = func() int { + longest := 0 + for _, w := range words { + if len(w) > longest { + longest = len(w) + } + } + return longest +}() + +// words is the vocabulary for names, tags, cities and notes. Its own copy +// rather than a shared one, like every other format here: D11 freezes these +// bytes per format, so one shared list would move every file at once the day a +// word changed. +var words = []string{ + "account", "amount", "balance", "branch", "broker", "budget", "buyer", + "carrier", "charge", "client", "column", "contact", "contract", "credit", + "customer", "delivery", "deposit", "discount", "dispatch", "district", + "invoice", "ledger", "manager", "market", "member", "monthly", "order", + "partner", "payment", "pending", "product", "profile", "project", "quarter", + "receipt", "record", "refund", "region", "report", "reseller", "revenue", + "sample", "seller", "service", "shipment", "status", "storage", "summary", + "supplier", "support", "tariff", "ticket", "transfer", "vendor", "voucher", + "warehouse", "weekly", "wholesale", +} diff --git a/internal/format/yamlfile/yaml.go b/internal/format/yamlfile/yaml.go new file mode 100644 index 00000000..621f78ae --- /dev/null +++ b/internal/format/yamlfile/yaml.go @@ -0,0 +1,343 @@ +// Package yamlfile generates YAML documents. +// +// The package is not called "yaml" so that it cannot be confused with the +// parser this module already links, the same reason jsonfile is not called +// json and logfile is not called log. The format id is "yaml". +package yamlfile + +import ( + "context" + "fmt" + "io" + // D11 promises the same bytes from the same seed, so a deliberate, + // reproducible generator is the product rather than a weakness. Nothing + // here ever makes a secret. + // nosemgrep: go.lang.security.audit.crypto.math_random.math-random-used + "math/rand/v2" + "strconv" + + "github.com/donislawdev/TestingFilesGenerator/internal/core" + "github.com/donislawdev/TestingFilesGenerator/internal/format" +) + +// Measured on 2026-09-22 across twelve candidate channels and four readers - +// PyYAML 6.0.3, ruamel.yaml 0.19.1, goccy/go-yaml 1.19.2 and gopkg.in/yaml.v3 +// 3.0.1. Comments, quoted scalars, block scalars and blank lines all hold to +// 10 MB, and odd sizes are reachable everywhere. Written up in +// docs/YAML-TOML-2026-09-22.md. +// +// A comment wins that measurement and loses the design, which is the second +// half of the lesson rather than a footnote. A parser throws comments away, so +// a five megabyte document built as two kilobytes of records and five +// megabytes of comment is the right size and a useless fixture - the system +// under test gets two kilobytes of work. It is the same trap JSON turned down +// with whitespace. +// +// So the filler goes where the reader has to carry it: the note value of the +// last record. The comment carries the label instead, and that is worth +// something on its own - a comment is not data, so YAML is the first record +// format here whose label rides inside the file without changing the structure +// under test. CSV and JSON label from the outside for exactly that reason. +const ( + generatorVersion = "1" + + emailDomain = "@example.com" + + // The document is a block mapping holding a block sequence, rather than + // the flow style that would also be legal. YAML is a superset of JSON, so + // a flow document would BE a JSON document with a different extension - + // which is the one thing this format must not produce if it is to be worth + // having beside jsonfile. + rootOpen = "records:\n" + + openID = " - id: " + openName = "\n name: " + openMail = "\n email: " + openAmt = "\n amount: " + openAct = "\n active: " + openTags = "\n tags:\n - " + tagSep = "\n - " + openAddr = "\n address:\n city: " + openZip = "\n zip: " + // The note is quoted where every other scalar is plain, and the reason is + // the smallest file rather than taste. The filler in a closing record can + // come to nought bytes, and a plain scalar with nothing after the colon is + // null - so the type of this value would depend on the size asked for, + // which is a defect no size guard could see. Quoted, it is the empty + // string at every size. + openNote = "\n note: \"" + tail = "\"\n" + + // maxIDDigits bounds the width of the record number, so the shortest whole + // record holds for every draw rather than for the lucky one. A document + // cannot carry more records than this many digits allow. + maxIDDigits = 19 + + // The amount is always six digits, a point and two more, and the postcode + // is always five. Fixed widths, so the arithmetic does not have to ask. + amountDigits = 9 + zipDigits = 5 + // "false" is the longer of the two, and the minimum has to hold for both. + longestBool = 5 +) + +func init() { + format.Register(format.Descriptor{ + ID: "yaml", + Extension: ".yaml", + Fidelity: format.FidelityFull, + Determinism: format.DeterminismByte, + + // An empty file is legal YAML - measured, all four readers take it and + // return a null document. It is still not what a byte count orders: + // that is a shape request, and it arrives with a record count property + // this build does not have yet. The minimum here is the root and one + // whole record, the same answer JSON gives to the same question about + // an empty array. + MinBytes: minimumBytes(), + + Padding: format.PaddingChannel{ + Name: "the note value of the last record", + Where: format.PlacementEnd, + // No ceiling found to 10 MB, which is where the measurement + // stopped. Above that is not knowledge this project has. + Capacity: 0, + }, + + Label: format.LabelInternal, + Oracle: "python-yaml", + // Record counts, flow style, multiple documents and encodings other + // than UTF-8 come later. Declaring only what is here makes a recipe + // asking for them fail loudly rather than quietly producing something + // else. + // + // UTF-16 is a measured possibility rather than an oversight: with a + // byte order mark in front of it, all four readers took utf-16le and + // utf-16be, and refused both without one. That is a joint rule between + // two settings, so it arrives with them or not at all. + Properties: nil, + GeneratorVersion: generatorVersion, + Generator: generator{}, + }) +} + +type generator struct{} + +type memo struct { + seed uint64 + comment string +} + +func (generator) Plan(r format.Request) (format.Plan, error) { + min := minimumBytes() + if r.Bytes < min { + return format.Plan{}, &format.BelowMinimumError{ + Format: "YAML", + Requested: r.Bytes, + Minimum: min, + Reason: "a document holds a root key and whole records, and one of each needs that much", + Hint: fmt.Sprintf("Ask for %d B or more.", min), + } + } + + p := format.Plan{ + Bytes: r.Bytes, + Exact: true, + Determinism: format.DeterminismByte, + Properties: map[string]any{ + "encoding": "utf-8", + "line_ending": "lf", + "root": "records", + "style": "block", + "depth": 3, + }, + } + + m := memo{seed: r.Seed} + if r.Label { + // A comment carries the label without touching the content, and it + // sits in front of the document where a person opening the file reads + // it first. Nothing in the label needs escaping: it is plain ASCII and + // a comment runs to the end of the line. + line := "# " + core.Label("yaml", r.Bytes, r.Seed) + "\n" + // It has to leave room for a whole document beside it, or the file + // would be a comment and a root key with nothing under it. + if int64(len(line))+min <= r.Bytes { + m.comment = line + } else { + p.Notes = append(p.Notes, format.Note{ + Code: "label_omitted", + Detail: fmt.Sprintf( + "The label comment needs %d B and this file has no room for it beside a whole record. Its name and the manifest still identify it.", + len(line)), + }) + } + } + + p.Properties[format.PropertyLabelEmbedded] = m.comment != "" + p.Memo = m + return p, nil +} + +func (generator) Write(ctx context.Context, w io.Writer, p format.Plan) error { + m, ok := p.Memo.(memo) + if !ok { + return fmt.Errorf("yaml: the plan was not produced by this generator") + } + + head := m.comment + rootOpen + if err := core.WriteAll(w, []byte(head)); err != nil { + return err + } + + rng := core.NewRand(m.seed) + return core.FillRecords(ctx, w, rng, p.Bytes-int64(len(head)), &records{}) +} + +// minimumBytes is the root key and one shortest whole record, with no label. +func minimumBytes() int64 { + r := &records{} + return int64(len(rootOpen)) + r.Shortest() +} + +// records builds the sequence items under the root key. It carries the record +// number, so the id counts up the way a real export does. +type records struct { + next int64 +} + +// Shortest is the smallest record this builder can close a document with: the +// widest record number, the longest word in all five places a word appears, +// the longer of the two booleans, and an empty note. +func (r *records) Shortest() int64 { + return int64(maxIDDigits + 5*longestWord + fixed()) +} + +func (r *records) Append(dst []byte, rng *rand.Rand) []byte { + return r.append(dst, rng, -1) +} + +func (r *records) AppendExact(dst []byte, rng *rand.Rand, n int64) []byte { + return r.append(dst, rng, n) +} + +// Discard hands back the number the thrown away record took with it, so the +// closing record carries it instead and the ids read 1..N with nothing +// missing. The gap that shape leaves was a real defect in three record +// formats, found by looking at a file rather than by any guard. +func (r *records) Discard() { r.next-- } + +// fixed is every byte of a record that does not depend on a draw. +// +// Measured from the literals beside it rather than written out as a number. +// Arithmetic that has to agree with the bytes next to it is a defect waiting +// for the day somebody adds a field and updates one of the two. +func fixed() int { + return len(openID) + len(openName) + len(openMail) + len(emailDomain) + + len(openAmt) + amountDigits + len(openAct) + longestBool + + len(openTags) + len(tagSep) + len(openAddr) + len(openZip) + zipDigits + + len(openNote) + len(tail) +} + +// append writes one record. A want below zero means whatever length it comes +// out, any other value is the exact length the record must have. +// +// It appends rather than returning a new slice because a document of any size +// is millions of records, and one allocation per record is a multiple of the +// file in garbage. The resource guard measures that. +func (r *records) append(dst []byte, rng *rand.Rand, want int64) []byte { + r.next++ + start := len(dst) + + name := words[rng.IntN(len(words))] + whole := 100000 + rng.IntN(899999) + cents := rng.IntN(100) + active := rng.IntN(2) == 0 + tagA := words[rng.IntN(len(words))] + tagB := words[rng.IntN(len(words))] + city := words[rng.IntN(len(words))] + zip := 10000 + rng.IntN(90000) + + dst = append(dst, openID...) + dst = strconv.AppendInt(dst, r.next, 10) + dst = append(dst, openName...) + dst = append(dst, name...) + dst = append(dst, openMail...) + dst = append(dst, name...) + dst = append(dst, emailDomain...) + dst = append(dst, openAmt...) + dst = strconv.AppendInt(dst, int64(whole), 10) + dst = append(dst, '.') + if cents < 10 { + dst = append(dst, '0') + } + dst = strconv.AppendInt(dst, int64(cents), 10) + dst = append(dst, openAct...) + if active { + dst = append(dst, "true"...) + } else { + dst = append(dst, "false"...) + } + dst = append(dst, openTags...) + dst = append(dst, tagA...) + dst = append(dst, tagSep...) + dst = append(dst, tagB...) + dst = append(dst, openAddr...) + dst = append(dst, city...) + dst = append(dst, openZip...) + dst = strconv.AppendInt(dst, int64(zip), 10) + dst = append(dst, openNote...) + + if want < 0 { + dst = appendPhrase(dst, rng, 3+rng.IntN(5)) + return append(dst, tail...) + } + + // Everything written so far, plus the bytes that close the record. + used := int64(len(dst)-start) + int64(len(tail)) + dst = core.AppendFiller(dst, words, want-used, nil) + return append(dst, tail...) +} + +// appendPhrase writes a readable note. Words and single spaces only - the one +// thing a quoted scalar cannot take raw is a quote or a backslash, and neither +// appears in the vocabulary. Measured 2026-09-22: every other byte from 20 to +// 7E goes in as itself, so an escape never costs a byte the arithmetic did not +// budget for. +func appendPhrase(dst []byte, rng *rand.Rand, n int) []byte { + for i := 0; i < n; i++ { + if i > 0 { + dst = append(dst, ' ') + } + dst = append(dst, words[rng.IntN(len(words))]...) + } + return dst +} + +// longestWord is the widest draw, because the minimum has to hold for every +// draw rather than for the lucky one. +var longestWord = func() int { + longest := 0 + for _, w := range words { + if len(w) > longest { + longest = len(w) + } + } + return longest +}() + +// words is the vocabulary for names, tags, cities and notes. Its own copy +// rather than a shared one, like every other format here: D11 freezes these +// bytes per format, so one shared list would move twenty four files at once +// the day a word changed. +var words = []string{ + "account", "amount", "balance", "branch", "broker", "budget", "buyer", + "carrier", "charge", "client", "column", "contact", "contract", "credit", + "customer", "delivery", "deposit", "discount", "dispatch", "district", + "invoice", "ledger", "manager", "market", "member", "monthly", "order", + "partner", "payment", "pending", "product", "profile", "project", "quarter", + "receipt", "record", "refund", "region", "report", "reseller", "revenue", + "sample", "seller", "service", "shipment", "status", "storage", "summary", + "supplier", "support", "tariff", "ticket", "transfer", "vendor", "voucher", + "warehouse", "weekly", "wholesale", +} diff --git a/internal/guard/generatorbytes_test.go b/internal/guard/generatorbytes_test.go index a275d9f8..a35e0b2c 100644 --- a/internal/guard/generatorbytes_test.go +++ b/internal/guard/generatorbytes_test.go @@ -289,6 +289,16 @@ func goldenCases() map[string]engine.Target { // would pin the same file. "xml_8kib_no_label": {ID: "g", Format: "xml", Sizes: engine.Uniform(1, 8192), Label: false}, + // The two configuration formats. Both carry the label inside the file, + // in a comment, so like XML the switch moves their bytes and both + // positions are pinned. Unlike XML the comment sits in front of + // everything, so what the second case pins is the whole document + // shifting rather than a line coming out of the middle. + "yaml_8kib": {ID: "g", Format: "yaml", Sizes: engine.Uniform(1, 8192), Label: true}, + "yaml_8kib_no_label": {ID: "g", Format: "yaml", Sizes: engine.Uniform(1, 8192), Label: false}, + "toml_8kib": {ID: "g", Format: "toml", Sizes: engine.Uniform(1, 8192), Label: true}, + "toml_8kib_no_label": {ID: "g", Format: "toml", Sizes: engine.Uniform(1, 8192), Label: false}, + // The label is a byte affecting switch, not a cosmetic one, so it is // pinned in both positions. "txt_4kib_no_label": {ID: "g", Format: "txt", Sizes: engine.Uniform(1, 4096), Label: false}, diff --git a/internal/guard/layers_test.go b/internal/guard/layers_test.go index 33bee3ff..db6fa2dc 100644 --- a/internal/guard/layers_test.go +++ b/internal/guard/layers_test.go @@ -44,6 +44,8 @@ var layer = map[string]int{ "internal/format/logfile": 1, "internal/format/csvfile": 1, "internal/format/jsonfile": 1, + "internal/format/yamlfile": 1, + "internal/format/tomlfile": 1, "internal/format/xmlfile": 1, "internal/format/htmlfile": 1, "internal/format/svgfile": 1, @@ -109,6 +111,8 @@ var sameLayerAllowed = map[string][]string{ "internal/format/logfile", "internal/format/csvfile", "internal/format/jsonfile", + "internal/format/yamlfile", + "internal/format/tomlfile", "internal/format/xmlfile", "internal/format/htmlfile", "internal/format/svgfile", @@ -138,6 +142,8 @@ var sameLayerAllowed = map[string][]string{ "internal/format/logfile": {"internal/format"}, "internal/format/csvfile": {"internal/format"}, "internal/format/jsonfile": {"internal/format"}, + "internal/format/yamlfile": {"internal/format"}, + "internal/format/tomlfile": {"internal/format", "internal/format/textenc"}, "internal/format/xmlfile": {"internal/format", "internal/format/textenc"}, "internal/format/htmlfile": {"internal/format"}, "internal/format/svgfile": {"internal/format", "internal/format/imagedim"}, diff --git a/internal/guard/oracle_test.go b/internal/guard/oracle_test.go index 6301dfde..5d37a9ad 100644 --- a/internal/guard/oracle_test.go +++ b/internal/guard/oracle_test.go @@ -163,6 +163,10 @@ var structurallyChecked = map[string]bool{ // Since 2026-09-07, when a text file gained something to be checked // against: the encoding it declares. "txt": true, "md": true, + // Since 2026-09-22, and these two carry more here than most: the reader + // beside YAML accepts a duplicate key, and field order is something a + // parser throws away before anybody could ask about it. + "yaml": true, "toml": true, } func TestTheStructuralCheckerCoversEveryFormatItShould(t *testing.T) { diff --git a/internal/guard/parity_test.go b/internal/guard/parity_test.go index 9d7c79df..6471eafa 100644 --- a/internal/guard/parity_test.go +++ b/internal/guard/parity_test.go @@ -132,6 +132,8 @@ var reachableFromTheWindow = []string{ "format:txt", "format:wav", "format:xml", + "format:yaml", + "format:toml", "format:zip", // Drawn from the declaration and nothing else, which is what declaring diff --git a/internal/guard/socialpicture_test.go b/internal/guard/socialpicture_test.go index 607f9e16..b048f059 100644 --- a/internal/guard/socialpicture_test.go +++ b/internal/guard/socialpicture_test.go @@ -95,10 +95,18 @@ func TestTheSocialPictureShowsTheCardAsItIsNow(t *testing.T) { "nothing else notices it is stale - the site guard copies it rather than "+ "rendering it. Measured once already: it sat three formats out of date for "+ "three days.\n"+ - "Take it again, then rewrite the site and the stamp:\n"+ + "The site is written TWICE and that is not a typo. The camera photographs "+ + "web/public/social.html as it is on disk, and the site copies the picture "+ + "back into web/public - so one write puts the new card where the camera can "+ + "see it, and the second carries the new picture into the site. Measured on "+ + "2026-09-22, when three lines in the other order left a picture of the old "+ + "card with a stamp of the new one, and this guard green over both.\n"+ + " TFG_WRITE_SITE=1 go test ./internal/guard/ -run TestTheSiteSaysWhatTheToolSays\n"+ " python tools/probes/social-shot.py web/public web/assets/social-preview.png\n"+ " TFG_WRITE_SITE=1 go test ./internal/guard/ -run TestTheSiteSaysWhatTheToolSays\n"+ - " TFG_WRITE_SOCIAL_STAMP=1 go test ./internal/guard/ -run TestTheSocialPicture", + " TFG_WRITE_SOCIAL_STAMP=1 go test ./internal/guard/ -run TestTheSocialPicture\n"+ + "Then LOOK at web/assets/social-preview.png. If git says it did not change, "+ + "the camera photographed the old card.", was, now) } } diff --git a/internal/guard/testdata/generator-golden.json b/internal/guard/testdata/generator-golden.json index 9a472b47..ef8ecfb8 100644 --- a/internal/guard/testdata/generator-golden.json +++ b/internal/guard/testdata/generator-golden.json @@ -301,6 +301,26 @@ "json_8kib_indented": { "bytes": 8192, "sha256": "9b00c22a11836d66cbf653275bb943b299d6864d391cff8ca13fa8ac7bdcc8c9" + }, + "yaml_8kib": { + "bytes": 8192, + "sha256": "e320add3591cb6708fc7d8adb786cb26de6237b2759eb6f4587dcfe99b54157f", + "measured_on": "2026-09-22" + }, + "yaml_8kib_no_label": { + "bytes": 8192, + "sha256": "83f0fbcd19fa41d5952226e919cc88f99e8cdd3b8729bf3074b745c0e6b38f05", + "measured_on": "2026-09-22" + }, + "toml_8kib": { + "bytes": 8192, + "sha256": "65c7f12bc32bf311dc89f48ca6f99ded025554cabc40d683f1caa4f4301a7a28", + "measured_on": "2026-09-22" + }, + "toml_8kib_no_label": { + "bytes": 8192, + "sha256": "eae81b32d70ff0380a09aa2d5cfbbbe85e8595c34d66187b9ca30cd7cc668540", + "measured_on": "2026-09-22" } }, "remeasured": [ diff --git a/internal/guard/testdata/screens/generate-menu-hovered.png b/internal/guard/testdata/screens/generate-menu-hovered.png index eca08b8474183158a3eb2b2d1a6e94983e4efe8f..1b0eb6ca828e0509078622172d78a3b5cab9f2e5 100644 GIT binary patch delta 30566 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 delta 30510 zcmaI81zc3k_c#oqfYQ>iqzFhWxuk?3jdZ8dxpZEUZea<51w=|(x~>qvAg~^MzB~7cUFoh-nS-m2t7(!cEy?x0$E**X1Th{0lGw=lg4nWKX(&ENNy#i6>k zUjo|Aa45Z+Dvpf!pmfqP*D8fuTU)yY7(;HC?rwrPw)5APg4bN3+KUUU6hhwT8{6Cc zi$@U^(_38f3Egk_s?legZuAaaPqw|u`+7$Imshtdsw^w3D=Q

&vb!V*gX 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

gcm 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 diff --git a/internal/guard/testdata/screens/generate-menu-hovered.xml b/internal/guard/testdata/screens/generate-menu-hovered.xml index 84deb1f9..f6fb6f75 100644 --- a/internal/guard/testdata/screens/generate-menu-hovered.xml +++ b/internal/guard/testdata/screens/generate-menu-hovered.xml @@ -440,7 +440,7 @@ - + @@ -572,42 +572,42 @@ - txt + toml - - wav + + txt - - webp + + wav - - xlsx + + webp - - xml + + xlsx - - zip + + xml @@ -687,8 +687,8 @@ - - + + diff --git a/internal/guard/testdata/screens/generate-menu-keyed.png b/internal/guard/testdata/screens/generate-menu-keyed.png index ca291bab392d607d4e3e01534c56818b9be6da5e..483bae04c45ceaa0d13c56ae430db45e62a2e605 100644 GIT binary patch delta 30550 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 Z_ZRP;>804P2>pGtq^O)ov9R9f{{xFpvPJ*^ diff --git a/internal/guard/testdata/screens/generate-menu-keyed.xml b/internal/guard/testdata/screens/generate-menu-keyed.xml index bceb88f1..dfbeff4b 100644 --- a/internal/guard/testdata/screens/generate-menu-keyed.xml +++ b/internal/guard/testdata/screens/generate-menu-keyed.xml @@ -440,7 +440,7 @@ - + @@ -572,42 +572,42 @@ - txt + toml - - wav + + txt - - webp + + wav - - xlsx + + webp - - xml + + xlsx - - zip + + xml @@ -687,8 +687,8 @@ - - + + diff --git a/internal/guard/testdata/screens/generate-menu.png b/internal/guard/testdata/screens/generate-menu.png index 77ce6bf3299a000e3dc129609b65bac35a2d6383..1106dffc5547a2a3440fc074b2a48ec92f4429ef 100644 GIT binary patch delta 30793 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