Releases: jlevy/markform
Releases · jlevy/markform
Release list
v0.1.29
What's Changed
Fixes
- Parallel execution callback:
onPatchesGeneratednow fires correctly in parallel execution mode, enabling token composition tracking and other observability features for all execution paths (#167)
Refactoring
- Explicit
maxRetriesAPI:maxRetriesis now a required field onFillOptionsandLiveAgentConfig, eliminating hidden defaults; addedCLI_DEFAULT_MAX_RETRIESconstant and--max-retriesflag tofillandresearchCLI commands (#165)
Full commit history: v0.1.28...v0.1.29
v0.1.28
What's Changed
Features
- Fill observability and signal propagation: Added comprehensive observability for
fillForm()operations with signal propagation togenerateText()for proper cancellation, extendedonLlmCallEndcallbacks with duration and provider metadata, LLM call details in timeline entries, structured error classification (errorType/errorCode), and raw event logs for debugging (#158) - FillRecord source-of-truth enrichment: Transform FillRecord into comprehensive source of record with provenance tracking (markform version, input hash, schema version), effective config snapshot, per-turn enrichment (form progress, rejection details, issue refs), and opt-in raw patches via
--record-patchesflag (#161) - External retry control: Expose
maxRetriesinFillOptionsto allow production harnesses to disable hidden AI SDK retries and manage retries externally with full observability (#162) - Table row validation improvements: Drop fully-empty table rows during normalization, warn on sparse rows (>50% empty cells), strengthen
minRowsvalidation, and add defensive handling of unknown cell states (#161, #163)
Fixes
- Fixed signal propagation bug where
FillOptions.signalwasn't reachinggenerateText(), preventing cancellation of in-flight LLM calls (#158) - Fixed
onLlmCallEndcallback to fire on failure (timeout, rate limit, network error), not just success, eliminating orphaned pending call entries (#158) - Fixed
isRowFullyEmpty()to defensively treat unknown/malformed cell states as NOT empty, avoiding accidental data loss (#163) - Fixed aborted table row handling to preserve aborted cells since they carry intentional agent signal (#161)
Refactoring
- Extracted shared
isCellEmpty()helper to eliminate duplication between row normalization and validation (#163)
Full commit history: v0.1.27...v0.1.28
v0.1.27
What's Changed
Features
- Fill harness observability: Complete observability and signal propagation for the fill harness (MF-1 through MF-5), including event callbacks, raw event logging, and structured observability hooks
Fixes
- Fixed
onLlmCallEndnot firing ongenerateText()failure — now reports error and duration - Fixed italic formatting on report sentinel values (empty/skipped/aborted)
- Fixed JSON serialization of eventLog tool input/output
Documentation
- Added observability documentation for fill harness covering MF-1 through MF-5
Full commit history: v0.1.26...v0.1.27
v0.1.26
What's Changed
Fixes
- Tool error handling: Fixed
wrapTool()to re-throw errors with guaranteed non-empty messages instead of swallowing them, preserving AI SDK's properis_errorsemantics and telemetry (#153) - Parallel fill path:
fillFormParallelnow correctly receives and passesproviderToolsto sub-agents, matching the serial path behavior (#154)
Documentation
- Updated plan spec to reflect revised error handling approach
Full commit history: v0.1.25...v0.1.26
v0.1.25
What’s Changed
Features
- Per-column constraints for table fields: Table columns now support type-specific
constraints (minLength,maxLength,pattern,enumfor strings;min,max,
integerfor numbers;min/maxfor dates and years).
Specified viacolumnTypesattributes, enforced during validation, preserved through
round-trips, and mapped to JSON Schema. - FillRecord performance metrics: FillRecord now includes
llmParallelism,
llmTimeMs/totalMstiming breakdown, andavgDurationMsper tool.
Text summaries show s/turn and s/field rates.
HTML dashboard gains a parallelism card and duration rates. onErrorcallback and error preservation: NewonErrorcallback in
FillCallbacksfor real-time error reporting with turn context.
FillStatusnow preserves the full Error object (cause chain, statusCode, etc.)
as a discriminated union.- Agent-friendly
examples --list:markform examples --listnow supports
--format=json. Examples reordered by complexity with twitter-thread registered.
Fixes
- Serve UI: Tabs reorganized (Form, Report, Source, ...) with hash-based routing for
direct linking setcommand: Now surfaces validation warnings for patched fields- Parse/serialize: Fixed instruction line-break loss during round-trip; explicit
checkboxes render as Yes/No in reports - CLI logging: All diagnostic log functions now write to stderr for pipeline
compatibility
Documentation
- Per-column constraints documented in spec and reference
- QA and manual tests consolidated into
tests/qa/
Full commit history: v0.1.24...v0.1.25
v0.1.24
What's Changed
Features
- CLI form-filling commands: New
setcommand with auto-coercion andnextcommand for field advisor, plus rename ofapplytopatch - Append/delete patch operations: Support for append and delete ops on tables, string_list, and url_list fields
- Claude Code skill integration: New
skillandsetupcommands for Claude Code agent integration - Fill record improvements: Empty fill record guard skips
.fill.jsonwhen no turns executed; coercion warnings plumbed through to fill record timeline - Configurable agent retries: Added
maxRetriesoption for live agent API calls - Enriched AI SDK inspect:
markform_inspectnow includes field advisor data
Fixes
- Fixed CLI form-filling review findings across multiple commands
- Fixed
helpWidthto 88 for consistent CLI output - Updated tryscript golden files for new setup/skill commands
Refactoring
- Extracted shared
resolvePackagePathutility for bundled doc loading
Tests
- Added tryscript tests for CLI
setcommand error paths - Added unit tests for
serialize.tsedge cases andapply.tserror branches - Added golden session test for multi-turn CLI form filling
- Raised coverage thresholds to lock in test improvements
Full commit history: v0.1.23...v0.1.24
v0.1.23
What's Changed
Features
- Extensible provider support: New
ProviderAdapterinterface allows custom AI SDK providers beyond the 5 built-in ones. Pass custom providers viaFillOptions.providersfor per-call resolution with full tool support. - Pure model ID parsing:
parseModelId()is now a pure format parser; anyprovider/model-idstring parses successfully. Provider validation moves toresolveModel(). - Provider utilities: New
normalizeProvider(),extractToolsFromProvider(), andBUILT_IN_PROVIDERSexports for working with custom and built-in providers.
Fixes
- Fixed skip reason displaying in badge pill instead of only in field content
Full commit history: v0.1.22...v0.1.23
v0.1.22
What's Changed
Features
- Render subpath export: New
markform/rendersubpath exports rendering functions (renderViewContent,renderSourceContent,renderFillRecordContent, etc.) so external consumers can render forms with visual parity tomarkform servewithout CLI/server dependencies - Twitter thread example: New content transformation example form for Twitter thread workflows
Fixes
- Skip reason display: Skip reasons from agents (e.g., "Not applicable") now display correctly in View, Edit, and Report tabs of the serve UI
- URL preservation in tables: Fixed URL validation in table cells that incorrectly checked link display text instead of the actual URL, causing valid URLs to be rejected
- API error messages: Improved error context for model API failures with HTTP status codes, response bodies, and actionable troubleshooting hints
Refactoring
- Extracted ~1600 lines of rendering code from
serve.tsinto dedicatedsrc/render/module
Full commit history: v0.1.21...v0.1.22
v0.1.21
What's Changed
Features
- Frontmatter validation: Added MarkformSectionInputSchema with Zod validation for more reliable frontmatter parsing
- Timing metrics: Added startMs to timeline entries and tool calls for relative timing analysis in FillRecords
Fixes
- Reliable tool calling: Default toolChoice to 'required' for consistent agent behavior
- Parallel execution tracking: Fixed executionId passing and per-execution turn tracking for correct tool call matching
- Frontmatter round-trips: Preserve title/description fields when serializing forms
- Concurrency handling: Corrected parallel execution concurrency and FillRecord tracking
Refactoring
- YAML formatting: Centralized stringify options and improved output readability
- HTML comment syntax: Migrated all forms to HTML comment syntax for field attributes
- Config handling: Centralized harness config snake_case/camelCase mapping
- Execution IDs: Self-documenting format with eid: prefix
Testing
- Comprehensive frontmatter unit tests
- Parallel execution integration and tracking tests
- Updated test expectations for HTML comment syntax
Documentation
- Clarified .env file loading behavior
- Updated manual test docs and gitignore patterns
Full commit history: v0.1.20...v0.1.21
v0.1.20
What's Changed
Features
- FillRecord visualization: New interactive Gantt chart display with timeline view
- Tooltips and copy handlers: Hover tooltips show details, click to copy YAML
- Fill Record tab: New tab in serve command for viewing fill records
- Enhanced error tracking: Full FillRecord capture for all error paths including pre-fill failures
Fixes
- Fixed FillRecord capture for all error paths in programmaticFill
- Pre-fill errors now fail fast without creating incomplete FillRecords
- Wired up missing CLI callbacks for FillRecord timeline events
- Fixed frCopyYaml handler placement for Fill Record copy functionality
Refactoring
- Modernized fill record visualization with CSS custom properties
Full commit history: v0.1.19...v0.1.20