Version 0.5.0 release - GET9
Commit range: adda0a4..c7eeb32
Highlights
servenow uses a watcher-driven incremental compile path (dirty-set), significantly reducing rebuild scope and file writes.- Hot reload is decoupled from
kodama.jsonand now uses an independentkodama.reloadmarker file. buildandservenow share unified output flags, with explicit toggles forkodama.jsonandkodama.graph.json.- Compile and global environment paths continue removing panic-prone flows, with error propagation unified around
eyre. - Artifact/cache consistency improved: stale slug outputs are cleaned, and disabled outputs are removed.
Behavior changes and migration notes
serveno longer emitskodama.json/kodama.graph.jsonby default; enable them with--indexesand--graph.buildandserveboth support unified output controls:--indexes/--no-indexes, and--graph/--no-graph.- Live reload polling now targets
kodama.reloadinstead of relying onLast-Modifiedfromkodama.json.
Features and improvements
- Added config hot reload with automatic server process restart in
serve. - Expanded
servewatch coverage to import fragments, themes, and assets directories. - Added optional graph/index artifact generation for both build and serve modes.
- Added assets mirroring plus stale output cleanup.
- Restored and improved page structure capabilities:
parent, transparent backlinks, and font/style fixes.
Performance
- Optimized render string concatenation paths to avoid repeated
reduce-style joins. servewrites only slugs affected by dirty sources instead of rewriting everything.- Writer hash path now uses relative paths to reduce unnecessary rewrites.
Stability and error handling
- Added cyclic embed recursion detection and blocking.
- Replaced multiple panic paths with recoverable errors (core/build/compiler/typst/environment).
- Improved metadata and typst parse errors with slug/key context.
kodama.reloadwrite is now atomic (temp file + rename) to lower concurrent read/write conflicts.- Missing optional watch paths are downgraded to hints with a unified logging style.
Code organization and naming
- Replaced custom ordered map implementation with
indexmap. - Renamed
ShallowSectiontoUnresolvedSectionfor clearer compile-stage semantics. - Unified multiple predicate/state names (for example
no_cache_enabled,should_ignore_*). - Simplified path split implementation to
parent().zip(file_name())by @s-cerevisiae.
Testing and testability
- Made
servehot reload and watch logic unit-testable with dedicated tests. - Added typst HTML body extraction tests for error paths.
- Added regression tests for new behaviors (output controls, marker writes, logging, and path handling).
Full commit list
c7eeb32refactor(cli): update file paths for typst includes and remove obsolete files32eccfefix(section): improve error messages for missing metadata in UnresolvedSection930b8c6refactor(compiler): rename ShallowSection to UnresolvedSection57053abrefactor(naming): improve predicate and cache flag naming consistencyea74c78style(serve): normalize watch path logs to posix separatorsded5a7efix(serve): make reload marker atomic and clean disabled artifacts01b777drefactor(cli): unify build/serve output flags with shared controlse69c6a0refactor(path): simplify split_file_name with parent/file_name zip42c829afeat(serve): decouple reload marker and disable index outputs by default1d6f7adfeat(typst): duplicate content for enhanced structure and clarity70915c7feat(serve): enhance watch paths to include assets directory feat(kodama): update compatibility checks and improve HTML element rendering5072628style(serve): render optional watch hints with dim text5f2e628fix(serve): downgrade missing optional import watch paths to hint28e3e25feat(compile): add optional graph/index artifact outputs9c80ab6fix(compiler): clean stale slug artifacts from cache and outputff60b48perf(serve): write only slugs affected by dirty sources5ae98d3feat(serve): use watcher dirty-set for incremental parsecbd6975chore: bump version from 0.4.5 to 0.5.0 in Cargo filesf861daffix(compiler): finalize error propagation and remove exit helper289792erefactor(compiler): enhance error handling with eyre for metadata retrieval1aeed68refactor(env): remove panic paths from global environment statebc3b9c8fix(core): remove panic-prone unwrap/expect in compile pathfdda56efix(tests): update theme path from CSS to HTML in test setupd58c1aetest(serve): make hot-reload logic unit-testablec9f29acfix(typst): make html parser return recoverable errors8dd56f4test(typst): cover html body extraction error cases835e497fix(metadata): add slug/key context to parse errors374a1b7feat(assets): mirror source and prune stale output filescdf29edrefactor(core): replace custom ordered map with indexmape75f438fix(typst): replace panic paths with recoverable errorsa050077feat(serve): hot-reload import fragments and themes48f299afeat(serve): hot-reload config and restart server processd45a3a3perf(render): avoid repeated string reduce concatenations1fe743ffix(build): remove panic paths in compile/write flow7cc666dfix(core): harden path and editor-url error handlingaaef49efix(serve): debounce watch rebuilds and harden IO844a348fix(writer): hash output by relative path8d9ab7dfix(compiler): detect cyclic embed recursionf53f19afix: remove redundant font-size declaration for html in responsive stylesf15e862feat: transparent backlinksc4ad796fix: tolerant some error in serve mode3f58071feat:parentcomes backc71baadfeat: font "inria sans" came back