Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
3a6781c
Add TemporalFS CHASM archetype proto definitions
moedash Mar 18, 2026
a76b227
Add TemporalFS CHASM archetype core implementation
moedash Mar 18, 2026
eb6b67e
Add FSStoreProvider interface and InMemoryStoreProvider
moedash Mar 18, 2026
34dd7c0
Integrate temporal-fs for real FS storage backend
moedash Mar 18, 2026
3eff7da
Implement GC and quota task executors with temporal-fs
moedash Mar 18, 2026
4960587
Add unit tests for TemporalFS component and state machine
moedash Mar 18, 2026
dc6748e
Add unit tests for TemporalFS task executors
moedash Mar 18, 2026
db30042
Add unit tests for TemporalFS gRPC handler
moedash Mar 18, 2026
831245a
Add integration tests for TemporalFS lifecycle and store provider
moedash Mar 18, 2026
3b6f659
Add TemporalFS architecture documentation
moedash Mar 18, 2026
d4869d1
Use published temporal-fs v1.0.0 instead of local replace
moedash Mar 18, 2026
14dc543
Remove design docs from version control
moedash Mar 18, 2026
e671dbc
Refactor PebbleStoreProvider to use a single PebbleDB instance
moedash Mar 19, 2026
0c8df85
Implement all TemporalFS handler operations
moedash Mar 19, 2026
0256d82
Add handler tests for all TemporalFS operations
moedash Mar 19, 2026
c493c16
Use published temporal-fs v1.1.0 instead of local replace
moedash Mar 19, 2026
23ea7c9
Update FSStoreProvider comment to reflect CDSStoreProvider
moedash Mar 19, 2026
4677af6
Update TemporalFS architecture doc
moedash Mar 19, 2026
04ec055
Use moedash/temporal-fs fork for CI access to private repo
moedash Mar 19, 2026
3007b80
Configure CI to access moedash/temporal-fs private fork
moedash Mar 19, 2026
81041c4
Use GO_PRIVATE_TOKEN secret for private module git access
moedash Mar 19, 2026
72cb45a
Pass GO_PRIVATE_TOKEN to build-binaries composite action
moedash Mar 19, 2026
ce4ba1a
Fix critical partition ID bug in PebbleStoreProvider
moedash Mar 19, 2026
0591732
Fix store resource leaks in handler
moedash Mar 19, 2026
014a310
Fix error handling in task executors
moedash Mar 19, 2026
68675cf
Update architecture documentation
moedash Mar 19, 2026
f78a48a
Fix resource leak, nil-safety, and error handling issues
moedash Mar 19, 2026
1f923d9
Use ReadDirPlusByID to avoid N+1 queries in ReadDir handler
moedash Mar 19, 2026
9d4b555
Map remaining FS errors to proper gRPC status codes
moedash Mar 19, 2026
6cdf6c8
Guard against unsigned integer underflow in GC stats
moedash Mar 19, 2026
3520211
Add research agent handler-level integration test for TemporalFS
moedash Mar 20, 2026
f500130
Add crash recovery tests for handler-level research agent
moedash Mar 20, 2026
3ed3df6
Add real integration test for TemporalFS research agent
moedash Mar 20, 2026
ce884b1
Add workflow integration test for TemporalFS research agent
moedash Mar 20, 2026
694e4c0
Fixed the lint issues.
moedash Mar 20, 2026
bbfd94f
Fix import ordering and struct field alignment lint issues
moedash Mar 21, 2026
0de17ec
Fix golangci-lint issues: errcheck, cognitive complexity, testifylint…
moedash Mar 21, 2026
7b80d30
Add TemporalFS garbage collection on owner workflow deletion
moedash Mar 21, 2026
61a6475
Add PostDeleteHook to delete manager for TFS push-path GC
moedash Mar 21, 2026
659c687
Fix testifylint issues in temporalfs handler_test.go
moedash Mar 21, 2026
70bd32a
Fix constant alignment in config.go for gofmt/gci compliance
moedash Mar 21, 2026
c6b0d80
Regenerate delete_manager mock to include PostDeleteHook
moedash Mar 21, 2026
e4539ac
Updated docs.
moedash Mar 22, 2026
b57b9a3
Add research topics and content generators for TemporalFS demo
moedash Mar 25, 2026
5841f89
Add TemporalFS store, Temporal workflow, and activity implementations
moedash Mar 25, 2026
8f78c97
Add scale runner and live terminal dashboard
moedash Mar 25, 2026
2171e8b
Add entry point, HTML report generator, and README
moedash Mar 25, 2026
c317409
Verify durable FS state on retry and track retries in real-time
moedash Mar 25, 2026
179ee18
Add retry tracking to HTML report and manifest
moedash Mar 25, 2026
744ec59
Add run-demo.sh script for end-to-end demo execution
moedash Mar 25, 2026
6cdfcdf
Add continuous mode and update docs
moedash Mar 25, 2026
6db95cb
Fix stale task queue interference in research-agent-demo
moedash Mar 25, 2026
db402ae
Fix Ctrl+C hang in continuous mode by draining EventCh
moedash Mar 25, 2026
0a66b59
removed headless
moedash Mar 25, 2026
e66cf7d
Don't count cancelled workflows as failures on Ctrl+C
moedash Mar 25, 2026
12c1382
Add per-activity dashboard events and enable dashboard by default
moedash Mar 25, 2026
834c669
Redirect SDK logs to file and fix dashboard box alignment
moedash Mar 25, 2026
0429e68
Fix continuous mode stall from blocking EventCh sends
moedash Mar 25, 2026
8fab9e4
Use per-run unique workflow IDs to avoid cross-run collisions
moedash Mar 25, 2026
42a5b7b
Increase dashboard activity feed from 12 to 24 rows
moedash Mar 25, 2026
0912691
Rename temporal-fs to temporal-zfs across codebase
moedash Mar 26, 2026
a16e8e7
Update temporal-zfs dependency to v1.3.0 (renamed module)
moedash Mar 26, 2026
16fcb17
Rename TemporalFS to TemporalZFS in docs and comments
moedash Mar 26, 2026
158cdf3
Bump temporal-zfs to v1.4.0 (TemporalZFS rename)
moedash Mar 26, 2026
bc58826
Fix formatting: struct field alignment and long lines (make fmt)
moedash Mar 26, 2026
d3e2d9b
Rename temporalfs to temporalzfs across codebase
moedash Mar 26, 2026
d8a152e
Rename TemporalFS to TemporalZFS in docs and comments
moedash Mar 26, 2026
4122ea4
Regenerate proto files and fix shellcheck warning
moedash Mar 26, 2026
4eb21a8
Exclude chasm/lib examples from strict library lint rules
moedash Mar 26, 2026
74940b4
Updated example and added snapshots.
moedash Mar 26, 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
7 changes: 7 additions & 0 deletions .github/.golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@ linters:
text: "time.Now"
linters:
- forbidigo
# Example/demo apps under chasm/lib are not library code — exclude from
# strict chasm/lib rules (forbidigo, deep-exit, errcheck, complexity, etc.).
- path: chasm/lib/.*/examples/
linters:
- forbidigo
- errcheck
- revive
# Cassandra timestamp rules only apply to cassandra persistence package
- path-except: common/persistence/cassandra/.*\.go$
text: "Unix|UnixMilli|UnixNano"
Expand Down
20 changes: 20 additions & 0 deletions .github/actions/build-binaries/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,29 @@ inputs:
description: "Use release command (true) or build command (false). When true, single-arch is ignored and snapshot is respected."
required: false
default: "false"
go-private-token:
description: "Token for accessing private Go modules"
required: false
default: ""

runs:
using: composite
steps:
- name: Configure git for private modules
if: inputs.go-private-token != ''
shell: bash
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ inputs.go-private-token }}

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
env:
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

- name: Run GoReleaser (release)
if: inputs.release == 'true'
Expand All @@ -33,6 +47,8 @@ runs:
args: release ${{ inputs.snapshot == 'true' && '--snapshot --skip=publish' || '' }} --clean
env:
GITHUB_TOKEN: ${{ github.token }}
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

- name: Run GoReleaser (build - all architectures)
if: inputs.release != 'true' && inputs.single-arch == ''
Expand All @@ -43,6 +59,8 @@ runs:
args: build --snapshot
env:
GITHUB_TOKEN: ${{ github.token }}
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

- name: Run GoReleaser (build - single architecture)
if: inputs.release != 'true' && inputs.single-arch != ''
Expand All @@ -53,5 +71,7 @@ runs:
args: build --snapshot --single-target
env:
GITHUB_TOKEN: ${{ github.token }}
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs
GOOS: linux
GOARCH: ${{ inputs.single-arch }}
2 changes: 2 additions & 0 deletions .github/workflows/build-and-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
uses: ./.github/actions/build-binaries
with:
snapshot: true
go-private-token: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Build and push Docker images
uses: ./.github/actions/build-docker-images
Expand All @@ -54,6 +55,7 @@ jobs:
uses: ./.github/actions/build-binaries
with:
snapshot: true
go-private-token: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Build Docker images
uses: ./.github/actions/build-docker-images
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/docker-build-manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ jobs:
with:
snapshot: ${{ inputs.snapshot }}
single-arch: ${{ steps.arch-param.outputs.single-arch }}
go-private-token: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Build Docker images
id: build-docker
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/features-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
with:
snapshot: true
single-arch: amd64
go-private-token: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Build Docker images
id: build-docker
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,19 @@ jobs:
with:
fetch-depth: 0

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
check-latest: true
cache: true
env:
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

- name: format golang import statements
run: |
Expand Down Expand Up @@ -145,11 +153,19 @@ jobs:
with:
fetch-depth: 0

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
check-latest: true
cache: true
env:
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

- name: lint code
run: |
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ jobs:
with:
snapshot: false
release: true
go-private-token: ${{ secrets.GO_PRIVATE_TOKEN }}
37 changes: 37 additions & 0 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ env:
TEMPORAL_VERSION_CHECK_DISABLED: 1
MAX_TEST_ATTEMPTS: 3
SHARD_COUNT: 3 # NOTE: must match shard count in optimize-test-sharding.yml
GOPRIVATE: github.com/moedash/temporal-fs
GONOSUMCHECK: github.com/moedash/temporal-fs

jobs:
test-setup:
Expand All @@ -42,6 +44,11 @@ jobs:
ref: ${{ env.COMMIT }}
fetch-depth: 0

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Fetch base branch
if: ${{ github.event_name == 'pull_request' }}
run: git fetch origin ${{ github.event.pull_request.base.ref }}:${{ github.event.pull_request.base.ref }}
Expand Down Expand Up @@ -221,6 +228,11 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ env.COMMIT }}

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
Expand Down Expand Up @@ -260,6 +272,11 @@ jobs:
# buf-breaking tries to compare HEAD against merge base so we need to be able to find it
fetch-depth: 100

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
Expand Down Expand Up @@ -297,6 +314,11 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ env.COMMIT }}

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
Expand Down Expand Up @@ -381,6 +403,11 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ env.COMMIT }}

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Start containerized dependencies
uses: hoverkraft-tech/compose-action@v2.0.1
with:
Expand Down Expand Up @@ -501,6 +528,11 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ env.COMMIT }}

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Start containerized dependencies
if: ${{ toJson(matrix.containers) != '[]' }}
uses: hoverkraft-tech/compose-action@v2.0.1
Expand Down Expand Up @@ -611,6 +643,11 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ env.COMMIT }}

- name: Configure git for private modules
run: git config --global url."https://x-access-token:${GO_PRIVATE_TOKEN}@github.com/".insteadOf "https://github.com/"
env:
GO_PRIVATE_TOKEN: ${{ secrets.GO_PRIVATE_TOKEN }}

- name: Start PostgreSQL
uses: hoverkraft-tech/compose-action@v2.0.1
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
/tctl*
/tdbg
/fairsim
/research-agent-demo

# proto images
/proto/image.bin
Expand Down
48 changes: 48 additions & 0 deletions chasm/lib/temporalzfs/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package temporalzfs

import (
"time"

temporalzfspb "go.temporal.io/server/chasm/lib/temporalzfs/gen/temporalzfspb/v1"
"go.temporal.io/server/common/dynamicconfig"
"google.golang.org/protobuf/types/known/durationpb"
)

var (
Enabled = dynamicconfig.NewNamespaceBoolSetting(
"temporalzfs.enabled",
false,
`Toggles TemporalZFS functionality on the server.`,
)
)

const (
defaultChunkSize = 256 * 1024 // 256KB
defaultMaxSize = 1 << 30 // 1GB
defaultMaxFiles = 100_000
defaultGCInterval = 5 * time.Minute
defaultSnapshotRetention = 24 * time.Hour
defaultOwnerCheckInterval = 10 * time.Minute
ownerCheckNotFoundThreshold = int32(2)
dataCleanupMaxBackoff = 30 * time.Minute
)

type Config struct {
Enabled dynamicconfig.BoolPropertyFnWithNamespaceFilter
}

func ConfigProvider(dc *dynamicconfig.Collection) *Config {
return &Config{
Enabled: Enabled.Get(dc),
}
}

func defaultConfig() *temporalzfspb.FilesystemConfig {
return &temporalzfspb.FilesystemConfig{
ChunkSize: defaultChunkSize,
MaxSize: defaultMaxSize,
MaxFiles: defaultMaxFiles,
GcInterval: durationpb.New(defaultGCInterval),
SnapshotRetention: durationpb.New(defaultSnapshotRetention),
}
}
7 changes: 7 additions & 0 deletions chasm/lib/temporalzfs/examples/research-agent-demo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Compiled binary
research-agent-demo

# Generated artifacts
*.html
demo-output.md
demo-plan.md
Loading
Loading