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 +34 -0
- package/README.md +3 -3
- package/package.json +1 -1
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-
|
|
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** · **
|
|
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
|
-
- **
|
|
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.
|
|
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",
|