Skip to content

Releases: alanbld/utf8proj

v0.17.0

10 Feb 13:17

Choose a tag to compare

What's New

Added

  • Duplicate task ID validation (E004) — Sibling tasks sharing the same ID now emit an E004 error diagnostic, preventing undefined scheduling behavior
  • Gantt header date range label — Header now shows the actual date range (e.g. "Feb – Mar 2026") instead of only the start month; applies to both HTML and SVG renderers
  • SVG critical path toggleSvgRenderer now supports hide_critical_path() for consistency with HTML, Mermaid, and PlantUML renderers

See CHANGELOG.md for full details.

v0.15.1 - Fix complete task scheduling bug

29 Jan 21:47

Choose a tag to compare

Bug Fix

  • Complete tasks without actual_start now correctly respect dependencies
  • Previously, such tasks were all locked to day 0, causing infeasible schedules

New Tests

  • Added 14 comprehensive tests for complete task scheduling edge cases
  • Total test count: 978 tests passing

Includes from v0.15.0

  • RFC-0018 Excel progress tracking (columns, visual, full modes)
  • Enhanced playground with Excel options panel

Full Changelog: v0.12.2...v0.15.1

v0.12.2

28 Jan 16:47

Choose a tag to compare

Full Changelog: v0.12.1...v0.12.2

v0.12.1

28 Jan 06:30

Choose a tag to compare

Full Changelog: v0.11.0...v0.12.1

v0.11.0

20 Jan 16:19

Choose a tag to compare

Full Changelog: v0.10.0...v0.11.0

utf8proj 0.10.0 — Temporal Regimes

18 Jan 18:59

Choose a tag to compare

utf8proj 0.10.0 — Temporal Regimes

Time is now part of the language. With Temporal Regimes, utf8proj distinguishes between different kinds of time in projects, moving beyond the traditional "everything is work on a calendar" model.

🔥 What's New

Temporal Regimes: A Paradigm Shift

Projects contain multiple kinds of time:

  • Work: Effort on working days (coding, construction)
  • Event: Exact calendar dates (releases, approvals, milestones)
  • Deadline: Calendar-day deadlines (contractual requirements)

Now you can declare these explicitly:

task milestone "Release v1.0" {
    regime: event                     # ← NEW: Explicit time semantics
    start_no_earlier_than: 2024-06-02  # Sunday? That's fine!
}

task "Development" {
    regime: work                       # Default, can be omitted
    duration: 10d                      # 10 working days
    depends: "Release v1.0"            # Starts Monday (next working day)
}

task "Contract Delivery" {
    regime: deadline                   # Calendar-day exact deadline
    finish_no_later_than: 2024-12-31   # Even if it's a holiday
}

Key Features

Explicit regime: syntax — Declare how time behaves for each task
Smart defaultsmilestone: true implies regime: event
Diagnostics with explanations — R001-R005 codes with --explain flag
Correct weekend scheduling — Events stay on weekends, work moves to Monday
Backward compatible — All existing projects continue to work

📊 Regime Comparison

Regime Advances On Constraint Rounding Use Case
Work Working days To nearest working day Development, construction
Event Any day None (exact dates) Releases, approvals, milestones
Deadline Calendar days None Contractual deadlines

🛠️ New Diagnostics

Run utf8proj check --explain project.proj for detailed guidance:

Code Message When It Helps
R001 Event regime with non-zero duration Events are typically point-in-time
R002 Work constraint on non-working day Explains automatic rounding to Monday
R003 Deadline regime without finish constraint Reminds to add a deadline
R004 Implicit Event regime (milestone) Shows why your milestone can be on Sunday
R005 Mixed regime dependency Explains why work starts Monday after Sunday event

🎯 Real-World Example

Before (0.9.x): Weekend releases were incorrectly scheduled

# Old behavior: Release moved to Friday (incorrect)
milestone "Go-Live" {
    start_no_earlier_than: 2024-06-02  # Sunday
}
# Result: Scheduled Friday May 31st ❌

After (0.10.0): Events stay on their dates

# New behavior: Release stays on Sunday (correct)
milestone "Go-Live" {
    start_no_earlier_than: 2024-06-02  # Sunday
}
# Result: Scheduled Sunday June 2nd ✅

🚀 Getting Started

For New Users:

# Download binary from below
chmod +x utf8proj
utf8proj init my-project
utf8proj schedule my-project.proj

For Existing Users:

No changes required! Your projects will work exactly as before, with improved semantics for milestones.

📈 Why This Matters

Traditional project tools conflate calendars (when work happens) with events (when things occur). This causes:

  • Weekend releases being incorrectly rescheduled
  • Contractual deadlines being "rounded" to workdays
  • Confusion about what "duration" means for different tasks

Temporal Regimes solves this by making time semantics explicit in your project definition.

🔗 Resources


Time is not uniform. Our tools should not pretend that it is.

v0.9.1: Demo Video & Polished README

17 Jan 10:59

Choose a tag to compare

What's New

Demo Video

Added a 3-minute overview video (generated with NotebookLM) showcasing utf8proj's explainable scheduling approach.

Demo Video

Polished README

  • Prominent video thumbnail and "Try Now" demo badge
  • Streamlined 60-second quick start example
  • Condensed value proposition to 3 scannable bullets
  • Reorganized for better discoverability

Focus View Example (RFC-0006)

  • Added Focus View example to the WASM playground
  • Demonstrates filtering large Gantt charts by task prefix
  • E2E test coverage for focus filtering behavior
  • Demo video script for Focus View feature

Other Improvements

  • Added 15 GitHub topics for improved discoverability
  • Comprehensive E2E and demo video coverage for all playground examples

Try It Now

Interactive Demo — no install required, runs in your browser

Full Changelog: v0.9.0...v0.9.1

v0.9.0

16 Jan 07:49

Choose a tag to compare

Full Changelog: v0.2.0...v0.9.0

v0.2.0

14 Jan 03:49

Choose a tag to compare

What's Changed

  • Add interactive WASM dashboard with progress tracking by @alanbld in #1
  • Add container progress rollup with weighted average calculation by @alanbld in #2

New Contributors

Full Changelog: https://github.com/alanbld/utf8proj/commits/v0.2.0