Releases: RemyFevry/fil
Release list
@color-sunset/fil@0.3.0
Minor Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
Patch Changes
-
d21fdd9: Smarter CI: precommit/push hooks via lefthook, split GitHub workflows (ADR-0005).
- New contributor prereq: lefthook — install with
brew install lefthook(macOS) orscoop install lefthook(Windows). Wires up automatically onpnpm installvia thepreparescript. - Git hooks: pre-commit runs
eslint --fix(withstage_fixed: true) on staged*.{ts,tsx}+pnpm lint:md. Pre-push runspnpm lint+pnpm typecheck(whole-project, parallel). Pre-commit + pre-push are belt-and-braces —pnpm ciis unchanged and still mirrors the CI gates locally. - CI split:
.github/workflows/ci.ymlis removed..github/workflows/lint-build.ymlruns lint + lint:md + typecheck + build once on Ubuntu + Node 26 (the pure-TS checks are platform-agnostic, so cross-OS legs were wasteful)..github/workflows/test.ymlruns the test matrix — Linux always; macOS on non-draft PRs; Node 26 throughout. Two jobs in steady state. - Windows is deferred to a follow-up issue — cross-platform test bugs (path-literal POSIX assumptions + an ESM URL resolver quirk in the proposal loader) surfaced on the first run on
windows-latestand need their own fix + ADR. Re-addingwindows-latestis a one-line matrix change once those land. The shell defaultbashis kept so the re-add is no-op. - Cross-OS shell: both new workflows set
defaults: run: { shell: bash }so futurerun:steps work uniformly on macOS and (when re-added) Windows. - Concurrency:
cancel-in-progress: ${{ github.event_name == 'pull_request' }}— cancel in-flight on PR iteration, preserve main-push integrity.
Branch-protection required checks are the three new job names (
lint-build / verify,test / test-linux,test / test-cross-os (macos-latest)). Maintainers with admin access can update the entries; non-admins see the same checks by workflow + job name so merge-gate semantics are preserved. - New contributor prereq: lefthook — install with
-
824ac0b: Worktree guard: allow
wt switch(and other read-onlywtsubcommands) as a bootstrap escape hatch from the primary worktree.Previously, an agent running in the primary worktree got a hard block on every mutating tool, including the very
wt switch …command needed to escape into a worktree. The only path wasFIL_ALLOW_MAIN_WORKTREE=1, which is meant for trunk maintenance — not bootstrap.The canonical guard (
scripts/require-worktree.sh) now accepts the bash command as$1and whitelists a strict subset ofwtsubcommands (switch,list,path,which,config,diff,log,step). The match is anchored and uses a safe-alphabet regex — shell metacharacters like;,&&,|,$(), backticks are denied, so a compound command likewt switch foo; rm -rf /is not smuggled through. The block message now also shows what was attempted, so the failed agent can see why it was blocked.The three call-sites were updated to forward the bash command:
.opencode/plugins/worktree-guard.ts— passesoutput.args.command.pi/extensions/worktree-guard.ts— passes the best-effortevent.input.{command,args}extraction (with stringification fallback).claude/settings.json— now pointsPreToolUseat a new Node wrapper (.claude/hooks/worktree-guard.mjs) that reads the hook event JSON from stdin and forwardstool_input.commandto the script
No behavior change inside a Worktrunk-linked worktree.
wt mergeandwt removeare intentionally not whitelisted — running them from the primary would mutatemaindirectly. -
Updated dependencies [9c4b161]
-
Updated dependencies [0e2a0c2]
- @color-sunset/fil-cli@0.4.0
- @color-sunset/fil-contract@0.3.0
- @color-sunset/fil-gate-runner@0.3.0
- @color-sunset/fil-engine@0.3.0
- @color-sunset/fil-orchestrator@0.2.1
- @color-sunset/fil-inspect-view@0.2.1
- @color-sunset/fil-flow-loader@0.2.1
- @color-sunset/fil-store@0.2.1
- @color-sunset/fil-evolution@0.2.1
@color-sunset/fil-store@0.2.1
Patch Changes
- Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
- @color-sunset/fil-engine@0.3.0
@color-sunset/fil-pi-adapter@0.3.1
Patch Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
-
Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
@color-sunset/fil-orchestrator@0.2.1
Patch Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
-
Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
- @color-sunset/fil-gate-runner@0.3.0
- @color-sunset/fil-engine@0.3.0
- @color-sunset/fil-store@0.2.1
@color-sunset/fil-inspect-view@0.2.1
Patch Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
-
Updated dependencies [0e2a0c2]
- @color-sunset/fil-engine@0.3.0
@color-sunset/fil-gate-runner@0.3.0
Minor Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
Patch Changes
- Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
@color-sunset/fil-flow-loader@0.2.1
Patch Changes
- Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
- @color-sunset/fil-engine@0.3.0
@color-sunset/fil-evolution@0.2.1
Patch Changes
- Updated dependencies [0e2a0c2]
- @color-sunset/fil-engine@0.3.0
@color-sunset/fil-engine@0.3.0
Minor Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking:
Patch Changes
- Updated dependencies [0e2a0c2]
- @color-sunset/fil-contract@0.3.0
@color-sunset/fil-contract@0.3.0
Minor Changes
-
0e2a0c2: A Phase now has multiple named gates (ADR-0004), AND-aggregated.
- Breaking:
PhaseConfig.gate: GateSpec→PhaseConfig.gates: NamedGate[](names required + unique per Phase).ReceiptgainsgateName.gate-runner.runGatenow takes aNamedGateso it can stamp the name onto the Receipt. fil nextruns every gate of every active Phase; all must pass (AND) to advance, and every failure is reported (no short-circuit — mirroring parallel-Phase semantics). Each gate produces its own Receipt, giving per-check audit granularity (e.g. lint, typecheck, tests, build as separate gates instead of one opaque shell script).- Built-in
default/hotfixflows, the CLI / inspect-view / pi-adapter renderers, and all tests migrate togates[]. - Migration: a Flow still using the old singular
gate:{...}fails to load with a hint to re-runfil initor renamegate:{...}→gates:[{name, type, ...}]. No backward-compat shim (early project).
- Breaking: