ludic/tools
Orkuncakilkaya cf814d4a97 feat(pack): .packignore, so a pack root can leave build artefacts out
A pack root is packed wholesale, and that is the right default - a game writes
`pack "assets"` and everything it opens is in the pack. What also goes in is
everything the game does NOT open: the preview renders a model pipeline leaves
beside its meshes, the intermediate a texture bake writes and never reads again,
the .blend the .gltf came out of. Nothing errors, nothing looks wrong, and the
app is simply bigger than the game. The only way out the manifest offered was
naming every file by hand, which is worse - a list that goes stale the day
someone adds a texture.

So `.packignore`, with gitignore's rules, because that is the file everyone
already knows. Anchored and floating patterns, `preview/` for directories only,
`*` and `?` stopping at a separator where `**` crosses one, `[a-z]` classes, `!`
re-includes with the last line winning, a deeper file beating a shallower one,
and no re-including out of an ignored directory.

The semantics are not claimed, they are checked: the implementation was diffed
against git itself over two fixtures - 35 paths, 19 patterns, nested ignore
files, directory negation, `[!0-9]` and `\#` escaping - and `git check-ignore`
and `ludic pack` agree on every path.

Two rules of its own, because a pack is not a working tree. `.packignore` is
never packed (nothing reads one at run time, and --no-ignore does not bring it
back). And it governs the project's own roots only: a package's resources - the
renderer's shaders above all - are added after the gather, so a stray `*.frag`
in a game's ignore file cannot quietly un-ship what it needs to draw anything.

`ludic pack` reports what it left out; `--no-ignore` packs everything so you can
see what a rule is costing. `ludic bundle` gathers through the same path, so the
two agree by construction.
2026-09-11 18:29:32 +03:00
..
ci feat(compiler): list literals, typed compound assignment, file:line diagnostics 2026-09-05 01:12:16 +03:00
docgen refactor(cli)!: split the contributor tool out of the ludic CLI 2026-09-05 23:15:12 +03:00
editors refactor(cli)!: split the contributor tool out of the ludic CLI 2026-09-05 23:15:12 +03:00
git-hooks build(git-hooks): enforce Conventional Commits via a hook + CI, record history decision 2026-08-30 23:30:45 +03:00
ludic-cli feat(pack): .packignore, so a pack root can leave build artefacts out 2026-09-11 18:29:32 +03:00
ludic-tools fix(tools): formatter bracket rules, LSP compiler diagnostics, vocabulary sync 2026-09-05 01:12:26 +03:00
ludic-web Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
atlas.ludic refactor(x): per-process scratch dirs, Ludic ports of the LSP test and Forgejo release 2026-09-05 01:12:26 +03:00
test-grammar.js refactor(x): per-process scratch dirs, Ludic ports of the LSP test and Forgejo release 2026-09-05 01:12:26 +03:00