pi-taskflow 0.0.26 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  All notable changes to pi-taskflow are documented here. This project follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
4
4
 
5
+ ## [0.0.27] — 2026-06-25
6
+
7
+ > Evidence release: **the incremental-recompute cost win is now proven, not
8
+ > asserted.** v0.0.25 made `/tf recompute` trustworthy and v0.0.26 made the
9
+ > dependency contract under it real — but the only cascade test re-ran *every*
10
+ > phase, so "rerun only what changed" had no regression proof. This release pins
11
+ > the two ways recompute actually saves money, closing the flagship's open
12
+ > acceptance criterion (the prerequisite for ever flipping recompute on by
13
+ > default).
14
+
15
+ ### Added
16
+ - **Flagship cost-win tests** (`test/recompute.test.ts`):
17
+ - **Partial cascade — `rerun < full`.** A diamond where one branch shares no
18
+ edge with the changed seed proves the unrelated phase is *reused* (0 tokens),
19
+ never re-run, and the rerun set is strictly smaller than the full flow.
20
+ - **Early-cutoff propagation.** Re-seeding a phase whose output is unchanged
21
+ cuts off its entire transitive downstream — only the seed spends a token,
22
+ every descendant hits its cache. This is the "changed a file that didn't
23
+ actually affect the result ⇒ near-zero rerun" guarantee.
24
+ - Tests: 802 → 804 (+2).
25
+
26
+ ### Changed
27
+ - **README test count and feature line refreshed** (was stale at 702/34 files):
28
+ now 804 tests across 42 files, with `incremental recompute` and
29
+ `FlowIR compile seam` listed among the headline capabilities.
30
+
31
+ ### Notes
32
+ - **Scope held deliberately.** Two further H2 ideas — flipping `run` to
33
+ auto-recompute by default, and precise `ir-changed` / map item-level reuse —
34
+ are *not* in this release. The first changes every user's `run` behavior
35
+ (a kernel-level, post-M5 decision); the latter two are scoped-out in the
36
+ roadmap (§6) as later RFCs. Shipping the proof first keeps each step
37
+ independently releasable.
38
+
5
39
  ## [0.0.26] — 2026-06-25
6
40
 
7
41
  > Foundation release: **the convergence roadmap's H1 lands** — a real FlowIR
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-43D9AD?style=flat-square" alt="MIT license"></a>
9
9
  <a href="#whats-inside"><img src="https://img.shields.io/badge/runtime%20deps-0-43D9AD?style=flat-square" alt="zero runtime dependencies"></a>
10
10
  <a href="https://github.com/heggria/pi-taskflow/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/heggria/pi-taskflow/ci.yml?branch=main&style=flat-square&label=CI" alt="CI status"></a>
11
- <a href="#whats-inside"><img src="https://img.shields.io/badge/tests-702-6E8BFF?style=flat-square" alt="702 tests"></a>
11
+ <a href="#whats-inside"><img src="https://img.shields.io/badge/tests-804-6E8BFF?style=flat-square" alt="804 tests"></a>
12
12
  <a href="#whats-inside"><img src="https://img.shields.io/badge/dogfooded-%E2%9C%93-43D9AD?style=flat-square" alt="dogfooded"></a>
13
13
  <a href="https://pi.dev"><img src="https://img.shields.io/badge/for-Pi%20coding%20agent-B692FF?style=flat-square" alt="for the Pi coding agent"></a>
14
14
  </p>
@@ -728,12 +728,12 @@ Copy one into `.pi/taskflows/<name>.json` (or `~/.pi/agent/taskflows/`) and it r
728
728
 
729
729
  <div align="center">
730
730
 
731
- **0 runtime dependencies** · **702 tests** · **9 phase types** · **shared context tree** · **cross-session resume** · **cross-run memoization** · **detached execution** · **`compile` Mermaid renderer** · **~9k LOC runtime**
731
+ **0 runtime dependencies** · **804 tests** · **9 phase types** · **shared context tree** · **cross-session resume** · **cross-run memoization** · **incremental recompute** · **FlowIR compile seam** · **detached execution** · **`compile` Mermaid renderer** · **~9k LOC runtime**
732
732
 
733
733
  </div>
734
734
 
735
735
  - **Zero runtime dependencies.** No `dependencies` field — the runtime is built entirely on Node built-ins (`fs` / `path` / `os` / `child_process` / `crypto`). The file lock is `fs.openSync("wx")`, not a third-party library.
736
- - **702 tests across 34 test files** covering concurrency, atomic file locking (8-process race regressions), path-traversal hardening, cross-session resume, cross-run cache freshness (flow/thinking/tools key isolation, fingerprint invalidation, TTL/LRU eviction), gate verdicts, budget caps, retry/backoff, approval flows, loop termination, tournament judging, sub-flow composition, the shared context tree (blackboard reuse, supervision spawn, subflow validation/nesting), workspace isolation (temp/dedicated/worktree lifecycle, fail-open degrade, dynamic-flow rejection), dynamic sub-flow security hardening, detached execution (PID persistence, stale detection, crash→failed, resume after failure), live run-history refresh, callback isolation, the idle watchdog, model-role init config, parseModelFromLabel with parenthesized-model-name regression, and multi-fence `safeParse` recovery, plus the `compile` Mermaid renderer (id-collision disambiguation, markdown-injection hardening, and full verify-overlay category coverage).
736
+ - **804 tests across 42 test files** covering concurrency, atomic file locking (8-process race regressions), path-traversal hardening, cross-session resume, cross-run cache freshness (flow/thinking/tools key isolation, fingerprint invalidation, TTL/LRU eviction), backward-compatible cache-key migration (3-tier legacy fallback), the FlowIR compile seam (determinism, declared-plane synthesis), incremental recompute (early-cutoff propagation, partial cascade strictly < full, observed ∪ declared union frontier), gate verdicts, budget caps, retry/backoff, approval flows, loop termination, tournament judging, sub-flow composition, the shared context tree (blackboard reuse, supervision spawn, subflow validation/nesting), workspace isolation (temp/dedicated/worktree lifecycle, fail-open degrade, dynamic-flow rejection), dynamic sub-flow security hardening, detached execution (PID persistence, stale detection, crash→failed, resume after failure), live run-history refresh, callback isolation, the idle watchdog, model-role init config, parseModelFromLabel with parenthesized-model-name regression, and multi-fence `safeParse` recovery, plus the `compile` Mermaid renderer (id-collision disambiguation, markdown-injection hardening, and full verify-overlay category coverage).
737
737
  - **Hardened by design.** Path-traversal defense (lexical + `realpath` containment check), runId validation, HTML/error sanitization, atomic writes, stale-lock stealing via `rename`, and an idle watchdog that kills wedged subagents (SIGTERM → SIGKILL after 5 minutes of silence). Dynamic sub-flows additionally get breadth caps, `cwd` containment, budget clamping, nesting depth caps, and prototype-pollution defense.
738
738
  - **Dogfooded.** Every new feature has to survive the project's own `self-improve` taskflow before it ships.
739
739
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-taskflow",
3
- "version": "0.0.26",
3
+ "version": "0.0.27",
4
4
  "description": "A declarative, verifiable graph of task nodes for the Pi coding agent — not a workflow you script, but a DAG you declare: statically verified before it runs, with dynamic fan-out, gates, isolated subagent context, resumable runs, and saveable commands.",
5
5
  "keywords": [
6
6
  "pi-package",