lilleman
2a7499e93c
Parse and check a format in one call, keeping compileTemplate under the complexity gate
2026-09-24 23:36:27 +02:00
lilleman
467cb6fb18
Parse a format once into tokens, and have the fences read its ops
2026-09-24 23:36:27 +02:00
lilleman
2e778f3b31
Name a cell's line in its link-time errors, and say where a format holding a reference compiles
2026-09-24 22:45:36 +02:00
lilleman
526832fc3f
Compile a format holding a reference once, at link
2026-09-24 22:45:36 +02:00
lilleman
5aae86638b
Keep reference bindings out of template.fields, in template.refHeads
2026-09-24 19:38:10 +02:00
lilleman
9f00ad039e
Move the decisions to docs/decisions.md, indexed in AGENTS.md and linked from the fences they back
2026-09-24 13:44:06 +02:00
lilleman
def2a5f25d
Gather the family fence in family.go
2026-09-23 23:11:13 +02:00
lilleman
41dbbd3fda
Say hold where the prose still said draws
2026-09-21 22:06:01 +02:00
lilleman
d128621fc1
Name a render's holds apart from the draw fence
2026-09-21 22:06:01 +02:00
lilleman
a2074a455e
Put the reference write beside fields, and cut the header restatement
2026-09-21 11:43:58 +02:00
lilleman
311ed40d05
Say which pass fills the cell fields, and when the format recompiles
2026-09-21 11:43:58 +02:00
lilleman
1e80fd54f6
Group the template fields under the pass that fills each
2026-09-21 11:43:58 +02:00
lilleman
ce8ea550a3
Correct what the readers proved false, and lift the file map out of last place
Tests / vet + fmt + tests (pull_request) Successful in 1m26s
Tests / Gitea release from CHANGELOG.md (pull_request) Has been skipped
Tests / vet + fmt + tests (push) Successful in 7s
Tests / Gitea release from CHANGELOG.md (push) Successful in 5s
2026-09-20 21:47:17 +02:00
lilleman
fb0480e741
Identify a fence alternative by the table row rather than the cell, keep the outermost row through a reached table, and key reads and visits by it
Tests / vet + fmt + tests (pull_request) Successful in 1m8s
Tests / Gitea release from CHANGELOG.md (pull_request) Has been skipped
2026-09-17 15:53:44 +02:00
lilleman
7abd3e2d95
Refuse a blank TSV line, fence a table's family through any template, resolve a path before drawing, clamp the weighted pick, and say which countries and currencies the tables hold
Tests / vet + fmt + tests (pull_request) Successful in 1m8s
Tests / Gitea release from CHANGELOG.md (pull_request) Has been skipped
2026-09-17 13:15:33 +02:00
lilleman
f6b54c8ae6
Add the table node: rows TSV, key and name selection, linked tables drawn consistently, and the choice-of-rows fence
2026-09-17 12:28:46 +02:00
lilleman
68d2461704
Name the draw option drawGroup, refuse one whose reads all sit behind a nested draw group, and record why the two fences stay apart
Tests / vet + fmt + tests (pull_request) Successful in 1m7s
2026-09-16 08:55:55 +02:00
lilleman
d3f430bf53
Render a repeat iteration in no group, refuse a group that names nothing, key group names by category, and own reference overlap in one fence
Tests / vet + fmt + tests (pull_request) Successful in 1m6s
2026-09-15 23:31:48 +02:00
lilleman
5ed45cc55c
Rename the folder node type from group to folder, freeing group for the draw option
2026-09-15 23:25:39 +02:00
lilleman
246f99a319
One reference draw per render in both views: a repeat iteration draws anew, a group option draws apart, and one fence refuses what a render's draws cannot answer for
Tests / vet + fmt + tests (pull_request) Successful in 1m6s
2026-09-15 22:59:30 +02:00
lilleman
b4ebab5abf
Keep a read's null with its draw, share the lone-reference check, name a JSON-string item's object form again, prove each column once per pass, and read a record off template.record
Tests / vet + fmt + tests (pull_request) Successful in 1m3s
2026-09-15 20:42:13 +02:00
lilleman
2b2010bdd6
Take the datatype and null of the column a lone reference reads, and check a column's datatypes once its references are linked
Tests / vet + fmt + tests (pull_request) Successful in 1m3s
2026-09-15 20:20:25 +02:00
lilleman
3cd3f8f317
Spend the struct cap on embedded structs too, word it for any struct field, and route path advice through the name check
Tests / vet + fmt + tests (pull_request) Successful in 1m2s
Tests / vet + fmt + tests (push) Successful in 6s
2026-09-15 17:50:42 +02:00
lilleman
bbe6c5b1d9
Fold the range check into columnKind.past, refuse a leading / in IsTemplate, reserve the name -, and document fake:"-" on an embedded struct
Tests / vet + fmt + tests (pull_request) Successful in 1m1s
2026-09-15 17:11:20 +02:00
lilleman
3e7127da71
Parse a divisor's rounding half exactly, print zero unsigned, name int64 refusals, and quote CSV fields without a writer
Tests / vet + fmt + tests (pull_request) Successful in 1m0s
2026-09-15 15:08:26 +02:00
lilleman
5615ab6d89
Check a typed column's value, not its text: one literal, value call, calc or read, bounded by its arguments
Tests / vet + fmt + tests (pull_request) Successful in 59s
2026-09-15 14:33:04 +02:00
lilleman
94dc562c6c
Typed columns and null: a datatype option, null items, and a load check that every typed render parses
Tests / vet + fmt + tests (pull_request) Successful in 58s
2026-09-15 11:23:57 +02:00
lilleman
1cd422352b
Cut the comments the README already records, and record the cycle-fence and exit-code rules there
Tests / vet + fmt + tests (pull_request) Successful in 58s
2026-09-03 21:00:42 +02:00
lilleman
44c91668f9
Give the inline pipeline its own file, and record the shape, padding and template-API decisions
Tests / vet + fmt + tests (pull_request) Successful in 55s
2026-09-03 20:37:44 +02:00
lilleman
6916894ab5
One CLI classifier settling the argument shape before load; JSON strings are templates and a quote is reserved in names
2026-09-03 20:34:42 +02:00
lilleman
873b7678ba
Address reviewer findings: reference hint, consumer-terms type errors, misuse exit code, immutability and parity docs
Tests / vet + fmt + tests (pull_request) Successful in 57s
2026-09-03 19:21:42 +02:00
lilleman
305d8f8edd
Address stability nits: doc grammar, scalar-JSON note, bracket-rule rationale
Tests / vet + fmt + tests (pull_request) Successful in 56s
2026-09-03 17:53:05 +02:00
lilleman
d8ece597c8
Reserve brackets in names, add compile-once NewTemplate, let --repeat reuse it, record scope artifacts
Tests / vet + fmt + tests (pull_request) Failing after 16s
2026-09-03 17:48:20 +02:00
lilleman
3bc3e35045
Add FakeTemplate: compile an inline template and render it against the loaded tree
2026-09-03 17:27:54 +02:00
lilleman
addba9abf7
Give maxLen its own literal and repeats MaxRepeat; arg errors name the spelling and the range; write's comment says what Flush reports; assert 64-bit at compile time
Tests / vet + fmt + tests (pull_request) Successful in 59s
Tests / vet + fmt + tests (push) Successful in 6s
2026-09-02 19:25:19 +02:00
lilleman
c5304bb6e7
Record the repeat cap's reach, 64-bit only, the constant-divisor rule and the rejected default spellings; correct the repeat cap comment
Tests / vet + fmt + tests (pull_request) Successful in 58s
2026-09-02 19:09:50 +02:00
lilleman
4f9285ab5c
Reject non-finite float bounds, unplain integer args, constant samples, a constant zero divisor and the default separator; a binding key is no path segment; ascii keeps DEL; an unheld path panics
Tests / vet + fmt + tests (pull_request) Successful in 56s
2026-09-02 19:08:32 +02:00
lilleman
f9647ff6bb
Decompose compileTemplate, checkBoundLevelsHeld and loadDir; gate cyclomatic complexity at 14
Tests / vet + fmt + tests (pull_request) Successful in 54s
2026-09-02 18:31:38 +02:00
lilleman
bcbf044290
One path walk under checkPath, descend, readField, pathLeaves and coverPath; split the hold and the render graph into their own files
Tests / vet + fmt + tests (pull_request) Successful in 53s
2026-09-02 18:29:45 +02:00
lilleman
1bf5470c6f
Reference sigils follow the filesystem: / the root, . this folder, .. the folder above
Tests / vet + fmt + tests (pull_request) Successful in 53s
2026-09-02 18:26:02 +02:00
lilleman
1b1b93b35f
Reject weight 0, a never-numeric calc operand and a repeat product past the cap; the CLI classifies ErrNoData
Tests / vet + fmt + tests (pull_request) Successful in 52s
2026-09-02 18:23:03 +02:00
lilleman
c5c06375d8
Reject a repeated bare token of a held name, naming the single-token spelling
Tests / vet + fmt + tests (pull_request) Successful in 53s
2026-09-02 18:21:03 +02:00
lilleman
8cd603a2b1
Key the repeated-item check on the string itself; marshal only objects
Tests / vet + fmt + tests (pull_request) Successful in 51s
2026-09-02 12:59:12 +02:00
lilleman
31c2f12098
Hold a reference path like a sibling path; add the lowercase, uppercase and ascii transforms
2026-09-02 12:52:19 +02:00
lilleman
054f99c94f
One spelling per shape: reject a one-item choice, a repeated item and an inert object; reshape the data
2026-09-02 12:38:59 +02:00
lilleman
ff4b243148
Format text is literal; class runs are {digits(n)} {upper(n)} {lower(n)}; a string is a format
2026-09-02 12:37:21 +02:00
lilleman
05dc042e49
Rename the project to fejkdata and record the fork source
Tests / vet + fmt + tests (pull_request) Failing after 6s
2026-09-01 20:24:03 +02:00
M
64a0d29496
Say why an empty name is rejected, and finish what that removed
...
Tests / vet + fmt + tests (push) Failing after 42s
The reason given was wrong. A dot path did reach an empty-named field:
Fake("a.") returned it, Fake("a.b.") returned a nested one, and {..a.} bound
it. What was true is narrower — List never offered it, because an empty name
is no path segment — so the engine accepted spellings it would not advertise.
The message, the test comment and the README say that instead.
Two things the rejection finished off:
A {} token still reported "no field \"\"", pointing at a fix the loader now
rejects — two errors for one rule. It is told the name can never exist, like
an option token already is.
addressable is dead: both halves of "not empty and no dot" are now rejected
where a name is authored. Mutating it to panic leaves the suite green here
and panics on main, so it was live and is not. Keeping it would preserve the
silent-hiding this change removes — List quietly omitting a name rather than
New refusing it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-01 07:31:18 +02:00
M
138bd21d83
Reject an empty field name
...
A field named "" was reachable by exactly one spelling, a bare {} token,
and by no dot path: List hid it and Fake could not ask for it. checkName
rejects it now, for the reason it rejects a dot — a name no path can reach.
That also makes the empty-segment rule unconditional. {a.} was rejected
because a field really named "" would otherwise have made it resolve; no
data can carry one, so the rule now guards a shape that cannot exist.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-01 07:31:18 +02:00
M
909596ec2d
Trim comments that restate or argue
...
The operand order was written out in three places; it now lives at calcVars,
which fixes it, and the other two point there. Dropped the note explaining
why ')' is not reserved, which said what the set is not rather than what it
is, and shortened reservedList's doc to less than its body. The note on held
now states where it reaches instead of arguing against a design this repo no
longer contains.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-31 21:58:37 +02:00