Skip to content

Releases: matthewsinclair/utilz

v1.3.1: lnrel utility

19 Feb 17:14

Choose a tag to compare

What's New

lnrel - Relative Symlink Creator

New utility that creates symlinks with relative paths. Computes the relative path from the link's directory to the target using GNU realpath, then creates a symlink with that relative path. Relative symlinks are portable — they survive directory tree moves.

Features:

  • Automatic grealpath/realpath detection for macOS/Linux portability
  • Strips backslash escapes from paths (handles the common tab-completion-in-quotes pattern)
  • Supports dangling symlinks (target need not exist)
  • Single-arg form defaults to basename in current directory
  • 12 comprehensive tests

Usage:

# Link to a file (creates ./file.txt in cwd)
lnrel /path/to/file.txt

# Explicit link name
lnrel ../shared/config.yaml config.yaml

# Cross-directory
lnrel /opt/data/db.sqlite ./data/db.sqlite

Platform requirements: GNU coreutils on macOS (brew install coreutils). Built-in on Linux.

CI Updates

  • coreutils added to macOS CI brew install
  • lnrel added to Linux CI test loop

Full Changelog: v1.3.0...v1.3.1

v1.3.0: pdf2md and xtrct

12 Feb 14:29

Choose a tag to compare

New Utilities

pdf2md — PDF to Markdown Converter

  • 7-stage pipeline using pdfplumber: char extraction, stats, line grouping, heading detection (H1-H6 by font size), list detection, header/footer removal, markdown emission
  • Bash wrapper with Python venv auto-management at lib/.venv/
  • --pages range selection, -o file output, --verbose progress
  • 15 BATS tests

xtrct — Schema-driven Semantic Data Extraction

  • Uses Claude API with descriptive JSON schemas to extract structured data
  • Supports json, csv, and table output formats
  • PDF input auto-converts via pdf2md; stdin piping supported
  • ANTHROPIC_API_KEY fail-fast before venv creation
  • 12 BATS tests (8 tier-1 always, 4 tier-2 require API key)

Composable Pipeline

pdf2md invoice.pdf | xtrct --schema invoice_schema.json

Other Changes

  • CI updated with python3-venv for Ubuntu
  • Both utilities added to Linux test loop
  • 10 utilities total

Utilz v1.2.1

10 Feb 16:27

Choose a tag to compare

syncz v1.3.0 — Bidirectional Sync & Scriptable Confirm

Added

  • syncz — Bidirectional sync mode (--bidi)
    • Two-way sync with automatic orphan detection using find + comm
    • Orphan resolution: interactive prompts, --delete (silent), --confirm yes/no/all (scriptable)
    • Two-pass rsync (dir1→dir2, dir2→dir1) with newer-wins strategy
    • rsync --delete never passed in bidi mode (orphan resolution handles deletions)
    • --source-wins and --dest-wins blocked in bidi mode
  • syncz--confirm optional argument (yes, no, all)
    • Auto-answers all prompts for fully scriptable operation
    • Works in both unidirectional and bidirectional modes
    • Peek-ahead parsing preserves positional argument compatibility

Fixed

  • syncz: empty orphan arrays caused silent exit on bash 3.2 (set -e + && short-circuit)
  • syncz: --confirm yes --delete now correctly deletes (macOS rsync missing delete count in stats)

Changed

  • syncz version bumped to 1.3.0
  • Framework version bumped to 1.2.1

Testing

  • 21 new tests (66 total), all passing on macOS and Linux

v1.2.0 - Add syncz directory-to-directory syncer

08 Feb 11:54

Choose a tag to compare

What's New

syncz - New utility: simple directory-to-directory syncer using rsync

Features

  • Three conflict resolution strategies: newer-wins (default), source-wins, dest-wins
  • Confirmation modes: --confirm (Y/N/A per-step), --force (no prompts), --just-do-it (single Y/N)
  • --delete with safety gate (requires --confirm, --force, or --just-do-it)
  • --backup creates .syncz-bak copies of overwritten files
  • --exclude pattern support (repeatable)
  • --dry-run with summary and itemized change listing
  • --verbose and --progress modes
  • Uses -rlptD instead of -a to avoid group/owner warnings for non-root syncs

Other Changes

  • rsync dependency check in utilz doctor
  • syncz added to Linux CI test loop
  • Framework version bumped to 1.2.0
  • 45 comprehensive BATS tests

See CHANGELOG.md for full details.