Releases: alanbld/utf8proj
v0.17.0
What's New
Added
- Duplicate task ID validation (E004) — Sibling tasks sharing the same ID now emit an
E004error 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 toggle —
SvgRenderernow supportshide_critical_path()for consistency with HTML, Mermaid, and PlantUML renderers
See CHANGELOG.md for full details.
v0.15.1 - Fix complete task scheduling bug
Bug Fix
- Complete tasks without
actual_startnow 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
Full Changelog: v0.12.1...v0.12.2
v0.12.1
Full Changelog: v0.11.0...v0.12.1
v0.11.0
Full Changelog: v0.10.0...v0.11.0
utf8proj 0.10.0 — Temporal Regimes
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 defaults — milestone: 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.projFor 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
What's New
Demo Video
Added a 3-minute overview video (generated with NotebookLM) showcasing utf8proj's explainable scheduling approach.
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
Full Changelog: v0.2.0...v0.9.0
