Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
30df3f6
🤖 Add gitmoji directive to AGENTS.md (#166)
cowboyd Mar 8, 2026
56beee6
🔖 Bump @effectionx/bdd to 0.5.1 (#183)
taras Mar 8, 2026
02b4a86
✨ Add @effectionx/middleware package (#186)
taras Mar 10, 2026
0c0caa3
♻️ Refactor context-api to use @effectionx/middleware with min/max pr…
taras Mar 13, 2026
18fc186
remove engines field (#188)
jbolda Mar 13, 2026
35b018c
🐛 Fix @effectionx/vitest compatibility with Vitest 4 (#190)
taras Mar 13, 2026
e41219a
fix(effect-ts): await Effect cleanup during Effection scope teardown …
taras Mar 16, 2026
a495cb4
process finally block test (#192)
jbolda Mar 17, 2026
60ea3a3
✨ Support any handler type in context-api (#196)
taras Mar 20, 2026
de97697
Strip development export condition before npm publish (#199)
taras Mar 22, 2026
e42d703
🤖 Add no-marketing-material directive to AGENTS.md
cowboyd Mar 25, 2026
246a732
🤖 Add no-agent-marketing policy with CodeRabbit enforcement
cowboyd Mar 25, 2026
cdf75f3
Merge pull request #200 from thefrontside/agentmoji
cowboyd Mar 25, 2026
cb4b593
Fix process stderr tests broken by Node ExperimentalWarning (#202)
taras Mar 28, 2026
e35d48e
feat: add @effectionx/durable-streams package
taras Mar 6, 2026
2dc522a
style: fix lint and formatting for durable-streams
taras Mar 6, 2026
78dd118
fix(durable-streams): accept void-returning workflows
taras Mar 6, 2026
6fcda25
docs(durable-streams): add durable dinner demo instructions
taras Mar 6, 2026
3d2666d
fix(durable-streams): sync tsconfig project references
taras Mar 6, 2026
28679a6
refactor(durable-streams): apply CodeRabbit review feedback
taras Mar 6, 2026
7d47b92
refactor(durable-streams): convert demo scripts to idiomatic Effection
taras Mar 6, 2026
401c779
refactor(durable-streams): merge server + tailer into single observer…
taras Mar 6, 2026
bbaeacd
refactor(durable-streams): rearrange tmux layout — cook full-height left
taras Mar 6, 2026
8b2fcbd
fix(durable-streams): fix tailer 404 retry and swap demo layout
taras Mar 6, 2026
afefa5b
fix(durable-streams): move control pane under cook (bottom-right)
taras Mar 6, 2026
666eb1c
fix(durable-streams): kill only node process, not the pane shell
taras Mar 6, 2026
d1aff2e
fix(durable-streams): use pkill -f to kill cook process by name
taras Mar 6, 2026
26879fe
style(durable-streams): fix tsconfig.json formatting
taras Mar 6, 2026
7286def
refactor(durable-streams): add DurableRuntime interface, remove file-…
taras Mar 7, 2026
f1921e9
style(durable-streams): fix import sorting across test files
taras Mar 7, 2026
bea5cf8
docs(durable-streams): update README for runtime abstraction and guar…
taras Mar 7, 2026
df8003a
fix: address CodeRabbit review feedback for durable-streams
taras Mar 7, 2026
7a72630
docs(durable-streams): add design specification documents
taras Mar 7, 2026
311d0fb
feat(durable-streams): add stat method and StatResult to DurableRunti…
taras Mar 7, 2026
716ec82
feat(durable-effects): scaffold @effectionx/durable-effects package
taras Mar 6, 2026
a36083e
feat(durable-effects): add DurableRuntime interface and context
taras Mar 6, 2026
4139d41
feat(durable-effects): add computeSHA256 hashing utility
taras Mar 6, 2026
7a9e360
feat(durable-effects): add stubRuntime() test helper
taras Mar 6, 2026
06ac1ac
feat(durable-effects): add nodeRuntime() using effectionx packages
taras Mar 6, 2026
5e79bb9
fix(durable-effects): resolve type errors in operations.ts using crea…
taras Mar 7, 2026
3ac98b2
test(durable-effects): add operations tests for all 6 effects + conve…
taras Mar 7, 2026
7d99803
feat(durable-effects): add 3 replay guards (file, glob, code freshness)
taras Mar 7, 2026
9b28c3a
test(durable-effects): add guards tests for all 3 replay guards
taras Mar 7, 2026
5a62982
feat(durable-effects): complete mod.ts public API barrel exports
taras Mar 7, 2026
e6ef30b
docs(durable-effects): update PLAN.md checkboxes — steps 0-8 complete
taras Mar 7, 2026
dd21e6c
fix(durable-effects): use approved category keywords per package-json…
taras Mar 7, 2026
88192b6
refactor(durable-effects): switch to workspace dep, re-export runtime…
taras Mar 7, 2026
8f58cf6
fix: address CodeRabbit review feedback for durable-effects
taras Mar 7, 2026
0f8b82d
chore: remove durable-effects PLAN.md
taras Mar 7, 2026
640e3cc
docs(durable-effects): add effect types design specification
taras Mar 7, 2026
b0b1cac
refactor(durable-effects): split operations.ts into per-effect files
taras Mar 7, 2026
26e374a
feat(durable-effects): implement stat method on nodeRuntime
taras Mar 7, 2026
6b63d3d
chore: regenerate preview package
taras Mar 11, 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: 4 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ reviews:
- For `**/package.json`, enforce `.policies/package-json-metadata.md` (non-empty `description` with required format).
- For package source changes, enforce `.policies/version-bump.md`.

Enforce `.policies/no-agent-marketing.md` (Strict): reject any commit message,
PR title, or PR description containing AI tool promotional material such as
"Co-Authored-By" trailers referencing AI agents or "Generated with..." footers.

Experimental policies (advisory feedback):
- Type-Driven Design, Structured Concurrency, Minimal APIs
- Deterministic Tests, Documentation, Backwards Compatibility
Expand Down
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
NODE_OPTIONS=--experimental-strip-types --conditions=development
NODE_OPTIONS=--experimental-strip-types --disable-warning=ExperimentalWarning --conditions=development
3 changes: 3 additions & 0 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ jobs:

- run: pnpm build

- name: Strip development export condition
run: node --experimental-strip-types .internal/strip-dev-exports.ts

- name: Check token for first publish
if: matrix.firstPublish == true
run: |
Expand Down
42 changes: 42 additions & 0 deletions .internal/strip-dev-exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { call, main } from "effection";
import { promises as fsp } from "node:fs";
import { resolve } from "node:path";
import { readPackages } from "./lib/read-packages.ts";

await main(function* () {
const packages = yield* readPackages();

let stripped = 0;

for (const pkg of packages) {
const pkgPath = resolve(pkg.workspacePath, "package.json");
const content = yield* call(() => fsp.readFile(pkgPath, "utf-8"));

const json = JSON.parse(content);
if (!json.exports) continue;

let modified = false;
for (const value of Object.values(json.exports)) {
if (
typeof value === "object" &&
value !== null &&
"development" in value
) {
(value as Record<string, unknown>).development = undefined;
modified = true;
}
}

if (modified) {
yield* call(() =>
fsp.writeFile(pkgPath, `${JSON.stringify(json, null, 2)}\n`),
);
stripped++;
console.log(
`Stripped development exports from ${pkg.workspace}/package.json`,
);
}
}

console.log(`Done: stripped ${stripped} package(s)`);
});
1 change: 1 addition & 0 deletions .policies/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ This is the **single source of truth** for all policies in this repository.
| [Stateless Stream Operations](./stateless-streams.md) | Recommended | Use `*[Symbol.iterator]` pattern for reusable stream operations |
| [Version Bump](./version-bump.md) | Recommended | PRs changing package code must include a semantic version bump |
| [Package.json Metadata](./package-json-metadata.md) | Strict | Every published package must include a description field |
| [No Agent Marketing](./no-agent-marketing.md) | Strict | No AI tool promotional material in commits, PRs, issues, or comments |

### Experimental Policies (cowboyd Review Patterns)

Expand Down
93 changes: 93 additions & 0 deletions .policies/no-agent-marketing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# No Agent Marketing Policy (Strict)

This document defines the strict policy for prohibiting agent marketing material in project artifacts.

## Core Principle

**Commits, pull requests, issues, and comments must not contain promotional material for AI tools.** We are not paid for this advertising and it does not belong in our project history.

## The Rule

| Artifact | Prohibited content |
|----------|-------------------|
| Commit messages | Co-Authored-By trailers referencing AI agents; marketing footers |
| PR titles | "Generated with...", "Built with...", or similar AI tool attributions |
| PR descriptions | Marketing footers, AI tool attribution links, co-author trailers |
| Issues | AI tool attribution or promotional footers |
| Comments | AI tool attribution or promotional footers |

### Patterns that violate this policy

- `Co-Authored-By:` trailers referencing AI agents (Claude, Copilot, ChatGPT, Gemini, Cursor, etc.)
- `Co-Authored-By:` trailers using agent noreply addresses (e.g. `noreply@anthropic.com`, `noreply@github.com`)
- Footers like "Generated with [Tool Name]", "Built with [Tool Name]", "Created using [Tool Name]"
- Markdown-link attributions like `Generated with [Claude Code](https://...)`

## Examples

### Compliant: Clean commit message

```
feat(worker): add request batching support
```

### Compliant: PR description without marketing

```markdown
## Motivation

Workers currently process requests one at a time.

## Approach

Add a batching queue that groups requests by type.
```

### Non-Compliant: Co-author trailer for AI agent

```
feat(worker): add request batching support

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
```

### Non-Compliant: Marketing footer in PR body

```markdown
## Motivation

Workers currently process requests one at a time.

## Approach

Add a batching queue that groups requests by type.

🤖 Generated with [Claude Code](https://claude.ai/claude-code)
```

### Non-Compliant: Attribution in PR title

```
feat(worker): add request batching support (built with Copilot)
```

## Verification Checklist

Before marking a review complete, verify:

- [ ] No commit messages contain `Co-Authored-By:` referencing AI agents
- [ ] PR title does not contain AI tool attributions
- [ ] PR description does not contain marketing footers or attribution links
- [ ] No "Generated with", "Built with", or "Created using" followed by an AI tool name

## Common Mistakes

| Mistake | Fix |
|---------|-----|
| Leaving default Co-Authored-By trailer from AI tool | Remove the trailer from the commit message |
| Forgetting to remove "Generated with..." footer from PR template | Delete the footer line |
| Including AI tool attribution in a markdown link | Remove the entire attribution line |

## Related Policies

- [Policies Index](./index.md)
9 changes: 9 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,15 @@ When reviewing PRs:
- Use `*[Symbol.iterator]` pattern for reusable stream operations (see Stateless Streams policy)
- Avoid `sleep()` for test synchronization (see No-Sleep Test Sync policy)

## Commit and PR conventions

Use [gitmoji](https://gitmoji.dev) for commit and pull request subjects. For
changes to files that direct the behavior of AI such as AGENTS.md or llms.txt
use a robot emoji instead of the standard gitmoji for documentation

Do not include any agent marketing material (e.g. "Generated with...",
"Co-Authored-By: \<agent>") in commits, pull requests, issues, or comments.

## Package Structure

Each package requires:
Expand Down
5 changes: 1 addition & 4 deletions bdd/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@effectionx/bdd",
"description": "BDD testing harness with describe/it/beforeEach for Effection operations",
"version": "0.5.0",
"version": "0.5.2",
"keywords": ["effection", "effectionx", "testing", "bdd", "describe", "it"],
"type": "module",
"main": "./dist/mod.js",
Expand Down Expand Up @@ -44,8 +44,5 @@
"bugs": {
"url": "https://github.com/thefrontside/effectionx/issues"
},
"engines": {
"node": ">= 22"
},
"sideEffects": false
}
12 changes: 12 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@
"indentStyle": "space",
"indentWidth": 2
},
"overrides": [
{
"include": ["context-api/mod.ts"],
"linter": {
"rules": {
"suspicious": {
"noExplicitAny": "off"
}
}
}
}
],
"files": {
"ignore": ["**/dist", "**/node_modules", "**/build"]
}
Expand Down
5 changes: 1 addition & 4 deletions chain/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@effectionx/chain",
"description": "Promise-like chaining with then/catch/finally for Effection operations",
"version": "0.2.2",
"version": "0.2.3",
"keywords": [
"effection",
"effectionx",
Expand Down Expand Up @@ -33,9 +33,6 @@
"bugs": {
"url": "https://github.com/thefrontside/effectionx/issues"
},
"engines": {
"node": ">= 22"
},
"sideEffects": false,
"devDependencies": {
"@effectionx/bdd": "workspace:*",
Expand Down
Loading