Infer per command whether a tool uses file paths or streams: if the command
omits {{in}}, thor feeds the source on the tool's stdin; if it omits {{out}},
thor captures stdout and writes it to the output file. All four
in/out x stdin/stdout combinations end with a real file at out_path.
This makes the docs' recommended stdin/stdout form actually work and removes
the silent "ships unprocessed CSS" failure mode. Adds tests for the streaming
forms and a TODO recording the future fingerprint/contents-Resource migration.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7.2 KiB
TODOs
Priority Unclear (Evaluate Later)
- Decide the parallel-parsing strategy for the grammar cache (pool vs
thread-local parsers) — deferred until the parallel usage shape is clear.
- Resolved already: the registry (
grammar()) is thread-safe and self- initializing, its allocator is pinned to the heap, and parsers/cursors are now caller-owned (open_parser) instead of cached — so the library holds no single-thread-use state and the multi-threaded tests pass without locks. - Remaining choice only matters once we actually parse in parallel: reuse
parsers via a pool or per-thread storage, plugged in behind
open_parserwithout touching call sites. ATSParser/TSQueryCursoris one-per-thread. - Full write-up:
GRAMMAR_CACHE_THREADING.md.
- Resolved already: the registry (
- Restore parallel grammar preload (serialized in
edb2e64);preload_grammarsnow fansbuild_grammaracross a boundedcore:thread.Pool.- Add tests: pool fan-out correctness +
-sanitize:threadfor race-freedom. - Concurrent-read path: an
RW_Mutexongrammar()only helps a future multi-threaded render, not the load side. Revisit if render goes parallel.
- Add tests: pool fan-out correctness +
- instead of
warnings: [dynamic]Errorwe should usewarnings: [dynamic; 8]Error- when limit reached, the template fails and stops rendering.
- Brainstorm plugin/tool/(postccs/less/tailwind/sass) support.
fingerprintpipe + contents-based composition. Thetoolpipe currently carries a URL string and each stage publishes a file to the output dir, so| tool sass | fingerprintwould leave a dead unhashed intermediate. When fingerprint lands, move the pipe value from a URL string to a contents/ Resource (bytes + logical name) where only the terminal stage publishes; a Resource must stringify to its URL so existing bare-tooltemplates keep working. stdin/stdout tools compose best there (bytes stay in memory), which is why stdin/stdout is the documented preferred form over{{in}}/{{out}}.- Reconsider
"menus": {}opt-out: it currently discards all page frontmatter menus (with only a warning). Decide whether empty config should instead just suppress the auto-generated menu while still honoring frontmatter. - asset css files not automatically included in site.
- should we at least warn about them?
- Review the whole
copy_assets_dirpipeline. It copies every file underassets/to the output dir blindly, whether or not anything references it, and now also skips dests that already exist (a blunt collision guard so the raw copy doesn't clobbertool-pipe output written earlier in the build). Reconsider tracking which assets are actually used/published instead. - warn if stylesheet url starts with /assets (and is therefore invalid).
- warn when heading levels are skipped in a toc.
- extract
[TOC]from.mdbody (or at least from the start.) - add
--productionflag- set
minifyto true - warn when
base_urlunset
- set
General
Remember to polish existing features before moving on to new ones.
- Bake the default
layoutsinto the binary at compile time via#load_directoryso the binary is self-contained and doesn't readDEFAULTS_PATHfrom disk at runtime.#load_directoryis NOT recursive and itsnameis the base filename only, sodefaults/layoutsanddefaults/layouts/partialsmust be loaded separately and mounted into the VFS withdataset (notfs_path).- Removes the runtime dependency on
THOR_DEFAULTS_PATH/#directoryand the need to shipdefaults/alongside the binary (seeflake.nix).
buildcommand alias of defaultnew sitecommand to set up new project- Some render errors blank the entire page instead of scoping to the failing tag.
- We must remove all mention of
postsfrom the odin code. At present, "posts" are a user-level construct defined as pages in a particular collection. - ? Clean up the default layouts (no idea what this means)
group_bycurrently requires a computedyearfield on the page.- We should replace this with
{{ pages | group_by (date | "2006") }}or similar
- We should replace this with
- does it make sense for partials to be inside layouts?
- current:
layouts/partials - alt1:
layouts,partials - alt2:
templates/layouts,templates/partials
- current:
- add
sort_bypipe - pipes
- first/last
- write test for error when n == 0
- warn when using negative numbers
- warn when using default arg on string
- add the above warnings to DIAGNOSTIC_TESTS.md
- Instead of "clearer form", be exact: "last 5"
- write tests for
first 0&last 0 - update tests to assert diagnostics when appropriate
- do we want to do this or just use DIAGNOSTIC_TESTS.md as the tests?
- also update to use file logger so they don't clog up the output
- narrow highlight in diagnostic to relevent part of line.
- first/last
- page.url and page.permalink are confusing names. Switch to url + page_url
- There is confusion over how to do this and whethor or not
| rel_urlshould be needed to render these. Requires careful thought.
- There is confusion over how to do this and whethor or not
Documentation
- talk about the context stack (and its limit).
- highlight the differences in the way menus are handled.
- explain that html/css/js comments are rendered, except in minify mode.
Investigate
- running ./thor/thor still logs the debug message: using config /home/spencer/github.com/sbrow.github.io/thor.json
- wrong cwd?
Diagnostics
All diagnostics (errors) should show
-
What went wrong
-
where (in the file)
-
where (in the stack trace)
-
how you can fix it (if applicable)
-
try to make file paths clickable links.
-
make sure the frontmatter parser has good diagnostics.
-
add all known diagnostics to DIAGNOSTIC TODOS.
-
fix the broken diagnostics in DIAGNOSTIC TODOS
-
show stack trace for template partials?
-
show where the typo occurred (config file path for
apply_extension_config, full-ext:valueforparse_extension_list) -
all diagnostics in DIAGNOSTIC TODOS must be tested.
-
only report format errors once.
-
only report missing partial errors once.
-
better diagnostics for syntax errors in treesitter.
-
Ensure diagnostics for MAX_CONTEXT_DEPTH are good.
-
improve matching weights message.
-
Test menu diagnostics
-
Extend
tag_errorto all render-time errors, not just pipe errors. Currently only pipe errors (4 sites inrender_nodes) get stamped with the correct template source/path. Other render errors still use the content template's source/path, which can point at the wrong file.
Analytics
Debug log stats:
- final Context_Stack cap
- highest PIPE args used
- longest slug length + name that generated it
- number of pages
- number of blocks
- enabled features / extensions
- etc
sbrow.github.io
- The home file was accidentally deleted in commit 9a9f731
- Ideas is now in the wrong spot. Date is wrong, and it is showing date when it shouldn't be.