Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e6efcd4
feat(effects): add resource-controlled trusted writes
heggria Aug 7, 2026
f2cee92
docs: record clean 0.3 candidate evidence
heggria Aug 7, 2026
5529ae1
docs: record remote candidate CI evidence
heggria Aug 7, 2026
467bc28
fix(effects): close composition and transaction gaps
heggria Aug 7, 2026
6071fb2
docs: refresh trusted effects candidate evidence
heggria Aug 7, 2026
96a32e8
fix(store): harden project .pi discovery against tmp and home roots
Aug 10, 2026
0834c59
docs: refresh 0.3 scoreboard for rc/96a32e8
Aug 10, 2026
7add160
docs: add draft PR body for 0.3 trusted-effects RC
Aug 10, 2026
59fd9c3
docs(skills): teach 0.3 Trusted Effects authoring surface
Aug 10, 2026
d532f69
docs: raise scoreboard to L4 built-MCP fixture for rc/96a32e8
Aug 10, 2026
0f9cf16
docs: sync 0.3 draft PR body to rc tip d532f69
Aug 11, 2026
e7c5e31
fix(test): make child-process store imports portable on Windows
Aug 11, 2026
d3b2878
docs: refresh 0.3 scoreboard after exact-SHA CI green (NOT GA)
Aug 11, 2026
1352193
docs(review): add ADV-R4 honesty review artifact
Aug 11, 2026
10c8a0f
docs: ADV-R1 contracts review findings for 0.3 trusted-effects rc
Aug 11, 2026
7b8bfb8
docs: ADV-R2 resources review verdict (no blockers; 1 MED + 4 LOW)
Aug 11, 2026
01ab73f
docs: ADV-R3 security review findings for 0.3 trusted-effects rc
Aug 11, 2026
d824aef
docs: ADV-SYNTH multi-agent cross review of 0.3 TE RC
Aug 11, 2026
93f80d3
docs: ADV-SYNTH addendum from chat parallel subagents
Aug 11, 2026
cbb4131
fix(security): harden .pi discovery walks and file-transaction commit…
Aug 11, 2026
77abef1
docs: note ADV High fix wave cbb4131 CI green; S-H2 still open
Aug 11, 2026
580daa0
fix(effects): downgrade unresolved flow{use} taint at static gates (S…
Aug 11, 2026
e8a027c
docs: mark S-H2 static flow{use} over-taint fixed at 580daa0
Aug 11, 2026
0551f62
docs: residual recheck + Ready checklist at e8a027c (NOT GA)
Aug 11, 2026
4524d2d
docs: point residual handoff tip/CI to 0551f62 / 31466355338
Aug 11, 2026
b8ffb70
docs: live Codex E2E PASS on tip 4524d2d (A→B→C + TE write)
Aug 11, 2026
41c7a9a
docs: add live Codex e2e raw log for 4524d2d
Aug 11, 2026
b5beb8e
fix: harden CI process cleanup races
Aug 11, 2026
004c3ec
merge: sync trusted effects RC with taskflow 0.2.9
Aug 11, 2026
1bc54d6
fix: preserve resume execution context
Aug 11, 2026
2cf1c12
docs: archive Control Plane legacy as future-notes (TE supersedes)
Aug 12, 2026
8b03b67
Merge remote-tracking branch 'origin/main' into rc/0.3.0-trusted-effects
Aug 12, 2026
537150a
docs: 0.3-C control-plane plan (approved, kanban)
Aug 12, 2026
653edd1
docs: freeze 0.3-C P1-P16 ADRs and wire proposal
Aug 12, 2026
57d927e
feat(control): add taskflow-control package with frozen wire contract…
Aug 12, 2026
e3d128f
fix(test): make storage boundary probes portable
Aug 12, 2026
e2f8990
fix(test): normalize cross-platform storage assertions
Aug 12, 2026
ab622c8
docs: rewrite 0.3 trusted effects story
Aug 12, 2026
f5284da
docs: clarify control plane candidate boundaries
Aug 12, 2026
5bbb566
chore(release): prepare 0.3.0-beta.1
Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
"plugins": [
{
"name": "taskflow",
"description": "Multi-phase subagent orchestration for Codex: 19 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (codex-taskflow).",
"description": "Multi-phase subagent orchestration for Codex: 20 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/why_effect/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (codex-taskflow).",
"source": "./packages/codex-taskflow/plugin",
"category": "developer-tools",
"homepage": "https://github.com/heggria/taskflow"
},
{
"name": "claude-taskflow",
"description": "Multi-phase subagent orchestration for Claude Code: 19 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (claude-taskflow).",
"description": "Multi-phase subagent orchestration for Claude Code: 20 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/why_effect/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (claude-taskflow).",
"source": "./packages/claude-taskflow/plugin",
"category": "developer-tools",
"homepage": "https://github.com/heggria/taskflow"
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ jobs:
run: pnpm install --frozen-lockfile --registry https://registry.npmjs.org/
- name: Shared completion and process-tree tests
run: node --conditions=development --experimental-strip-types --test packages/taskflow-core/test/runner-process.test.ts
- name: Project storage boundary tests
run: node --conditions=development --experimental-strip-types --test packages/taskflow-core/test/store.test.ts

test:
name: test (node ${{ matrix.node }})
Expand Down
44 changes: 34 additions & 10 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ name: Publish & Release
# Publishes all ten packages (taskflow-core, taskflow-mcp-core, taskflow-hosts,
# taskflow-dsl, pi-taskflow, codex-taskflow, claude-taskflow, opencode-taskflow,
# grok-taskflow, hermes-taskflow) to npmjs.com and creates a GitHub Release when a v* tag is
# pushed (e.g. `git tag v0.2.0 && git push origin v0.2.0`). All ten workspace
# versions must equal the tag.
# pushed (e.g. `git tag v0.3.0-beta.1 && git push origin v0.3.0-beta.1`). All ten
# publishable workspace versions must equal the tag. Stable tags use npm's
# `latest` channel; prerelease tags such as `v0.3.0-beta.1` use `beta`.

on:
push:
Expand Down Expand Up @@ -87,6 +88,10 @@ jobs:
exit 1
fi
VERSION="${TAG#v}"
if [[ "$VERSION" == *-* && "$VERSION" != 0.3.0-beta.* ]]; then
echo "::error::Only 0.3.0-beta.* prereleases are supported by this beta workflow (got $VERSION)"
exit 1
fi
if grep -Fqx "## [$VERSION] — Unreleased" CHANGELOG.md; then
echo "::error::CHANGELOG.md still marks $VERSION as Unreleased"
exit 1
Expand Down Expand Up @@ -145,7 +150,7 @@ jobs:
HERMES_PINNED="v$(node -e '
const fs = require("fs");
const text = fs.readFileSync("packages/hermes-taskflow/plugin/hermes.config.snippet.yaml", "utf8");
const match = text.match(/hermes-taskflow@(\d+\.\d+\.\d+)/);
const match = text.match(/hermes-taskflow@(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)/);
if (!match) process.exit(2);
process.stdout.write(match[1]);
')"
Expand All @@ -162,6 +167,19 @@ jobs:
# pre-publishing name@version must never be mistaken for our release.
run: |
set -euo pipefail
VERSION="${GITHUB_REF_NAME#v}"
if [[ "$VERSION" == *-* ]]; then
NPM_TAG="${VERSION#*-}"
NPM_TAG="${NPM_TAG%%.*}"
RELEASE_PRERELEASE=true
if [ "$NPM_TAG" != "beta" ]; then
echo "::error::Prerelease $VERSION must publish with npm dist-tag beta, not $NPM_TAG"
exit 1
fi
else
NPM_TAG="latest"
RELEASE_PRERELEASE=false
fi
tarball_for() {
node -e '
const fs = require("fs");
Expand All @@ -183,7 +201,7 @@ jobs:
echo "::notice::$name@$version already published and verified — skipping"
else
echo "Publishing $name@$version"
npm publish "$tarball" --provenance --access public
npm publish "$tarball" --provenance --access public --tag "$NPM_TAG"
fi
}
publish_one taskflow-core
Expand Down Expand Up @@ -280,8 +298,10 @@ jobs:
exit 1
;;
esac
if [ "$RELEASE_DRAFT" != "false" ] || [ "$RELEASE_PRERELEASE" != "false" ]; then
echo "::error::Existing release must be published and non-prerelease (draft=$RELEASE_DRAFT, prerelease=$RELEASE_PRERELEASE)"
EXPECTED_PRERELEASE="false"
if [[ "$VERSION" == *-* ]]; then EXPECTED_PRERELEASE="true"; fi
if [ "$RELEASE_DRAFT" != "false" ] || [ "$RELEASE_PRERELEASE" != "$EXPECTED_PRERELEASE" ]; then
echo "::error::Existing release has wrong draft/prerelease state (draft=$RELEASE_DRAFT, prerelease=$RELEASE_PRERELEASE, expected prerelease=$EXPECTED_PRERELEASE)"
exit 1
fi
echo "::notice::Release $GITHUB_REF_NAME already exists with a verified target; skipping creation"
Expand All @@ -294,10 +314,14 @@ jobs:
exit 1
fi

gh release create "$GITHUB_REF_NAME" \
--notes-file /tmp/release-notes.md \
--title "v$VERSION" \
--target "$TAG_COMMIT" \
RELEASE_ARGS=(
"$GITHUB_REF_NAME"
--notes-file /tmp/release-notes.md
--title "v$VERSION"
--target "$TAG_COMMIT"
--verify-tag
)
if [[ "$VERSION" == *-* ]]; then RELEASE_ARGS+=(--prerelease); fi
gh release create "${RELEASE_ARGS[@]}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .grok-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"plugins": [
{
"name": "taskflow",
"description": "Multi-phase subagent orchestration for Grok Build: 19 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (grok-taskflow).",
"description": "Multi-phase subagent orchestration for Grok Build: 20 taskflow_* MCP tools (run/runs/resume/version/list/show/verify/compile/lint/plan/analytics/peek/trace/replay/why_stale/why_effect/recompute/reconcile_workspace/save/search) plus a routing skill. Background runs support status/wait/cancel; compile returns SVG + text outline. The server runs via npx (grok-taskflow).",
"source": {
"type": "local",
"path": "./packages/grok-taskflow/plugin"
Expand Down
33 changes: 32 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,38 @@

All notable changes to taskflow are documented here. This project follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.

## [Unreleased]
## [0.3.0-beta.1] — 2026-08-13

> **Pre-release candidate:** `0.3.0-beta.1` is prepared for npm's `beta` dist-tag. It is **not GA**. The 0.3-C Control Plane remains a follow-on candidate track, not part of this beta's shipped product definition.

### Added

- **Trusted Effects MVP** (`packages/taskflow-core/src/effects/`):
- EffectIR (`EFFECT_KINDS`), PathRef reuse, SecretRef/ServiceRef (type-only fail-closed)
- closed TypeBox EffectIR + confidentiality/integrity source-to-sink validation
- resource-controlled FS transaction: durable snapshot → persistent lease → journal intent/permit → stage → Commit or Restore+Reject
- declaration-only bridge in `effects/runtime-apply.ts`; no second changeset/gateway authority
- ledger-backed `whyAuthorized` / `whyContext` / `whyEffect`
- Optional phase `effects[]`; FlowIR translate/compile/hash include effects
- Built-in `detectEffectsIssues` (category `effects`) + `effectsLintVerifier`
- Every imperative phase fast path finalizes declared `fs.write` through the resource transaction; event-kernel-enabled runs use the same safe imperative path
- Honest host baseline: `conformance/workspace/host-support-baseline.json`
- Docs: `docs/internal/0.3.0-trusted-effects-mvp.md`, `0.3.0-agent-goal.md`, `0.3.0-ga-scoreboard.md`
- Example: `examples/trusted-effects-write.json`
- Tests: `test/effects*.test.ts`, `test/verify-effects.test.ts`

### Fixed

- Resource-bearing inline/saved/expanded/`ctx_spawn` children can no longer be skipped by parent cache or resume reuse.
- Information-flow labels compose across nested flow boundaries; unresolved dynamic definitions remain tainted, malformed non-array `effects` fail admission/compile, and `why-effect` follows DAG dependencies.
- Durable commit/abort results survive staging/lease cleanup faults, activation double faults release leases, and clean-terminal/aged-orphan before-images are garbage-collected.

### Notes

- SecretRef/ServiceRef have **no** vault/network backends in this cut.
- Resolve-only is not an OS sandbox. Direct writes to declared targets are detected and restored; writes outside declared targets remain host-policy dependent.
- Historical Control Plane (`feat/0.3.0`) is **not** this release definition.
- **Beta release; not GA.**

## [0.2.10] — 2026-08-12

Expand Down
Loading