mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
sqlstore
667
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e0c8182042 |
store: shards may keep their rows on a shared SQL server
TASKSD_STORE=sql keeps every shard's rows in one table, tasks_kv, on the hanzoai/sql server TASKSD_SQL_ADDR names (its ZAP listener), so a process running the engine keeps nothing on disk and any process can take its place. A shard is (principal, ns), the same value it always was; its rows are a fileKV in its own SQLite file or an sqlKV in the table, behind one rows interface. Keys are bytea compared as bytes, so a scan walks keys in exactly a shard file's order whatever the server's collation; each value is sealed (AES-256-GCM) under the key a shard file of the same tenant and namespace derives from the master, bound to its shard and key, so the server holds only ciphertext. A shared store refuses to open without a master key. Copy moves every shard from one manager to another a page at a time, leaves the destination holding the source's rows and no others, and proves each shard by count and a SHA-256 over its rows in key order. SQLite stays the default; nothing changes for a deployment that sets nothing. Proved against a hanzoai/sql test server: scans equal a file shard's for UTF-8, DEL and prefix-boundary keys; the server holds no plaintext; a crashed engine recovers a workflow mid-activity from the table into a fresh data directory, the activity running exactly once. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
b808c06ebc |
Forward the request target a caller actually named
Hanzo CI/CD / cicd (push) Failing after 7m26s
CI/CD / cicd (push) Failing after 7m27s
An adapted net/http handler was handed a request with an empty RequestURI, so anything that routes or logs on the target saw "/" and answered for a path nobody asked for. The pin carries the fix. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
a5460ed12e |
Say which method each registration answers
Hanzo CI/CD / cicd (push) Failing after 6m22s
CI/CD / cicd (push) Failing after 6m23s
A registration that is not a typed operation is spelled Raw now, with the method named, so opting out of the typed model reads as what it is. The zip this pins also states the wire explicitly, which matters more than the version gap suggests: JSON semantics follow the toolchain, so the older pin answered with different bodies than the code was written against once the builder moved. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
435c0eb107 |
Build on Go 1.27
Hanzo CI/CD / cicd (push) Failing after 5m41s
CI/CD / cicd (push) Failing after 5m42s
1.27 is the released toolchain and the tree already compiles clean on it, so the go directive names it. Nothing here depends on a 1.27 language feature yet; this is the floor moving, which is what makes generic methods, the wider type inference and promoted-field struct literals available to the code that wants them next. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
6b231e7f05 |
go 1.26.8
One toolchain across the estate. The tree carried 1.26.0, .1, .3, .4 and .5 at once, so which compiler built a binary depended on which repo it came from. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
86301446c5 |
the engine hands a composer a zip app, not a handler
A composer had one way to mount the engine: take HTTPHandler and adapt it, which puts sixty-odd operations behind one opaque wildcard the composing router cannot see into. Surface registers them as real routes, so app.Use(engine.Surface()) puts every address in the composed router and in every projection that reads it. Both renderings reach the same functions -- a call in, an answer out -- so the two transports cannot describe one operation differently, and HTTPHandler is unchanged for callers that have it. The wire is held by a test rather than by intent. TestSurfaceAnswersWhatTheMuxAnswers drives the same requests through both and compares status, body, Content-Type and Location. It replaced a probe that printed the two answers and asserted nothing, and the first thing it found was real: http.ServeMux tidies a path with an empty or dot segment and redirects to the tidied form before matching, so /namespaces//workflows was a redirect through the mux and a 404 here. The wildcard answers that redirect now, with the body http.Redirect writes and only for the methods it writes one for. |
||
|
|
cdca774661 |
One derived key, no wrapping
tasks generated a DEK per shard, wrapped it under a KEK derived from the master, and stored the wrapped blob beside the database — so it also needed an upgrade path to rewrap, a principal vocabulary to derive against, and tests for all of it. hanzoai/cek derives the key from the master and the namespace instead. Nothing is stored, so there is nothing to wrap, rewrap, or upgrade. dek.go, principal.go and upgrade.go are gone with the tests that pinned them: they proved properties of a scheme that no longer exists, not properties the store still has to hold. That also unpins hanzoai/sqlite, which deleted the DEK API in v0.5.0. tasks now builds against it, which is what proves the migration is complete rather than merely compiling. Databases written under the old scheme will not open under the new derivation. There are no customers and no data to preserve. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
e6989b9dc4 |
deps: platform authority is membership of the reserved org (authz v1.10.29)
PlatformSudo read the HOME org, so every real operator was denied: an operator is anchored in a brand org where they bill and do ordinary work, and holds the reserved org as a further membership. The anchor and the authority are different questions. This is what made the reserved org unreachable in practice — nobody could cut a release or reach an admin surface — while the predicate read as though it were working. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
4cd9de6fed |
tasks: the namespace org comes from the subject's membership, not the app's
authz v1.10.26: the `owner` claim carries the org of the APPLICATION a token was minted through, so reading it as the subject's org made a person's durable state — engine.As(Org(...)) scopes the store by it — follow whichever app they signed in through. It is the first entry of the signed membership set now. A token stating no org gets none, with no fallback, so tasksd refuses it when identity is required rather than scoping a namespace to an app-selected value. Also edge.Inject→Apply and edge.Mint→Render: minting is issuing authority and only IAM does that. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
e3636baf8e |
tasks: the trusted issuer is a set, and an empty entry is not one
TASKSD_WHITELABEL_ISSUERS adds the brands this tasksd accepts tokens from beyond the primary, each of which signs its own. Adding one is configuration. The sharp edge is the empty entry: splitting an UNSET env var yields one empty string, and an empty trusted issuer would match a token that carries no `iss` at all. Entries are trimmed and dropped, pinned by TestIssuerAllowlistDropsEmptyEntries — which builds the verifier through the same code path production uses, so the guard is tested where it runs rather than in isolation. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
f927109617 |
tasks: retire the fourth reader of one contract
pkg/auth held 190 lines of JWKS cache and JWT verification — a fourth independent
reading of what an IAM token means — and it had two defects the shared reader does
not:
it verified against EVERY key in the published set and took the first that
worked, so a token naming kid A was accepted on a signature from key B. Naming a
key is what `kid` is for.
its issuer comparison was CONDITIONAL on the configured issuer being non-empty,
so an unset TASKSD_JWT_ISSUER did not fail closed — it accepted tokens from any
issuer.
It also stripped only the four names it reads. Every other minted header —
X-User-IsAdmin and X-User-Permissions (the platform and money signals),
X-User-Owner, X-Billing-Account-Id, X-Scope, X-Workspace-Id, and the retired names
— passed through from the client untouched. tasksd terminates identity itself (its
ingress routes straight to the Service), so nothing upstream was deleting them
either. Restoring the four-name strip turns
TestRequireIdentity_StripsTheWholeEstateSet red on seven forged headers.
And it had NO machine predicate at all, so an admin-org client_credentials token
arrived as a person. It now reads the membership set, like the rest of the estate.
What remains is the part that is genuinely tasksd's: which environment variables
the policy comes from. The audience stays optional and that is deliberate rather
than an oversight — IAM sets `aud` to the requesting CLIENT (RFC 8707), and tasksd
is not a client id, so it pins the issuer and the signing keys instead.
Both transports now answer "which org does this act in" with the same function,
Claims.EffectiveOrg(""), rather than the HTTP path reading `owner` and the ZAP path
reading it separately.
Cost, measured: 342 linked packages and an 18.3 MB binary, DOWN from 345 and
18.6 MB — dropping go-jose more than paid for the leaf, and tasks links ZERO zip
packages because the edge names no transport. go-jose is gone from the module
entirely; the tests now mint with golang-jwt, the library IAM signs with.
Rebased onto 12 upstream commits: kept their ServeGated(addr string) signature,
their engine.As(Org(...)) rename, their dependency versions, and the LLM.md fact
about explicit project/user isolation. Their only change to the deleted jwt.go was
a comment naming hanzo.id, which the replacement already says.
Co-authored-by: Hanzo Dev <[email protected]>
|
||
|
|
1555bd8f5a |
deps: pin zap v1.2.7
Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
679ae61163 |
feat(transport): address the engine and the SDK, so both can use a socket
The engine took a PORT and the SDK an Options.HostPort, so neither end
could use a unix socket for traffic that never leaves the host. The
field name was not the only obstacle: luxfi/zap bound net.Listen("tcp",
":port") and reached a peer with net.DialTimeout("tcp", addr), so a path
was refused at the dialer with "missing port in address" and could not
be bound at all. That is fixed upstream (luxfi/zap Address + Network);
this pins the commit until it is tagged.
EmbedConfig.Address, Embedded.Address, ServeGated(addr) and
client.Options.Address each take ONE address, because a port is a detail
of one transport rather than a thing every listener has. A path binds or
dials a unix socket; anything else is host:port.
TestDialRequiresHostPort became TestDialRequiresAddress: Dial needs an
address, and asserts a socket path is refused for being absent rather
than for being portless. TestE2E_UnixSocket runs a real workflow over a
socket end to end, and TestE2E_UnixSocketRebind proves the socket is
unlinked on stop so a restart binds cleanly.
Co-authored-by: Hanzo Dev <[email protected]>
|
||
|
|
b4529923c1 |
feat(store): principal-addressed shards, created on demand, encrypted at rest
The store addressed a shard by (org, namespace) and only the root org's `default` namespace existed, so anything else had to be declared before it could be used and there was no way to isolate a project or a user. Shards also had no way to be keyed, so tasks was the one Hanzo store writing tenant state in the clear. Both are the same missing value, so both are one change. Principal is the tenant that owns a shard: an org, optionally narrowed to a project and a user. It serves the two places tenancy is decided, so they cannot disagree — the shard's directory (<data>/<org>/<project>/<user>/<ns>.db, each unset leg written "_") and the key its DEK is wrapped under. The fixed-depth encoding is injective, so a project and a user of the same name are different tenants, and the KEK chain master -> org -> project -> user gives each of them a key contained in the one it narrows. Namespaces come into existence on first use (engine.namespace), the way their shards already did. ValidName is the one rule every name that becomes a path segment passes through, so a namespace can no longer escape or alias a directory. EmbedConfig.MasterKey opens every shard encrypted: each file carries a DEK of its own, wrapped for its principal and bound to a random file id in a sidecar beside it, so rotating the master rewraps sidecars and never rewrites ciphertext, and moving the data directory is harmless. A keyed shard is ciphertext on every build — hanzoai/sqlite v0.4.0 uses the live libsqlcipher codec when one is linked and its pure-Go SQLCipher envelope when one is not — so there is nothing here to branch on. On the envelope a shard is sealed at checkpoint/close rather than per commit, which is what Shard.Checkpoint and the manager's sweep bound. replication.Frame and migration.Job carry the canonical principal string instead of an org, so a frame lands in the directory its principal names. Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
2de84d773e |
chore(go): bump go directive to 1.26.5
Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
706aeb7411 |
refactor(replication): move quasar driver to its own package (base sheds consensus)
hanzoai/base transitively pulled github.com/luxfi/consensus solely through pkg/tasks → replication (quasar.go, the only consensus importer). That made base — and every base consumer — vulnerable to the recurring luxfi/consensus force-moved-tag / vanished-geth supply-chain rot, for a driver base never uses. Make Quasar replication optional by isolating it: - Add Kind() + a unified Stats(accepted,rejected,timeouts) to the Replicator interface so embed.go introspects drivers through the interface, never a concrete type. - Move quasar.go (+ its test) into a new pkg/tasks/replication/quasar package that imports the interface package; the consensus dependency now lives ONLY there. Only cmd/tasksd imports it. - pkg/tasks → replication now has ZERO consensus in its dep graph (`go list -deps ./pkg/tasks | grep consensus` = 0), so base sheds it via Go 1.17+ module-graph pruning. Also unbreak tasks' own consensus: v1.22.85 → v1.36.3 (geth v1.16.73 was a vanished revision; v1.36.3 floors the valid unified luxfi stack). Non-quasar packages build + test green CGO-off; the quasar package builds in CI (its consensus→secp256k1 CGO can't compile in this sandbox — environmental). |
||
|
|
6f6a6460ab |
chore(tasks): rip all gRPC + protobuf — ZAP-native only (HIP-0114) (#12)
Complete the documented 2026-04-26 native-ZAP migration whose deletion
was left incomplete. The engine (cmd/tasksd), SDK (pkg/sdk) and
in-process server (pkg/tasks) are already 100% ZAP-native with zero
real go.temporal.io / google.golang.org/grpc / protobuf imports; the
only residual gRPC+Temporal footprint was dead porting scaffolding:
- rm proto/ — 55 vendored Temporal .proto (4 gRPC service defs +
message shapes), zero generated .pb.go, zero Go references.
- rm cmd/tools/ — 4 Temporal-porting tools (genrpcwrappers,
genroutingkeyextractor, getproto, check-dependencies); the only
files importing google.golang.org/grpc + go.temporal.io/{api,server}.
- go mod tidy — drops go.temporal.io/api, go.temporal.io/server,
google.golang.org/grpc, grpc-gateway entirely (zero grpc/protobuf
direct or transitive in go.mod).
- CI: remove orphaned proto jobs (linters.yml lint-protos/lint-api,
check-release-dependencies.yml) that ran deleted tools / missing
make targets.
- LLM.md: scrub stale gRPC transport claims -> ZAP :9999 / HTTP :7243.
Transport is luxfi/zap on :9999. go build ./... , go vet, go test all green.
Co-authored-by: Hanzo Dev <[email protected]>
|
||
|
|
48beecff40 |
feat(tasks): embeddable identity + single sqlite driver for in-proc mount
Enables mounting the Tasks server natively inside the unified hanzoai/cloud binary (HIP-0106) without a JWT re-validation hop or a duplicate sqlite driver. - auth.WithIdentity injects an already-validated identity (org/user/email) into the handler context — the in-process twin of RequireIdentity's mint step, for an embedder that terminates the IAM trust boundary at its gateway before the request reaches Tasks. - store opens through github.com/hanzoai/sqlite (the one Hanzo sqlite driver) instead of blank-importing modernc directly, so a Tasks store embedded in the cloud binary shares the single "sqlite" driver registration rather than double-registering it and panicking at init. WAL/pragmas move to explicit schemaSQL so they apply on both cgo and !cgo backends. |
||
|
|
cc7a80f1cd |
deps: pin go.temporal.io/server v1.32.0-157.0 (fork base); finish temporal-fork rip; ui/dist embed placeholder
Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
4fcc600c64 | chore: bump luxfi/database v1.19.3 | ||
|
|
ec931d13dd |
build(deps): drop dead zap-proto/go dependency
The require github.com/zap-proto/go v1.0.0-rc1 had zero imports in the module (no .go file references it). Removed from go.mod and go.sum. |
||
|
|
8473a2c8ca |
deps: bump Go to 1.26.4 across go.mod, Dockerfiles, GH Actions
Workspace-wide sync. luxfi/node already shipped on 1.26.4 in v1.30.6 (commit 121aca1fa9); this is the cross-repo catch-up. |
||
|
|
279dc75477 |
deps: bump github.com/zap-proto/go to v1.0.0-rc1
Canonical bootstrap (commit f123708 series). Replaces the v0.2.x prototype lineage with the v1.x runtime. |
||
|
|
6b89892286 |
merge: upstream/main (preserve Hanzo brand, 494 commits)
# Conflicts: # .github/workflows/build-and-publish.yml # AGENTS.md # AGENTS.md~upstream_main # api/adminservice/v1/request_response.go-helpers.pb.go # api/adminservice/v1/request_response.pb.go # api/adminservice/v1/service.pb.go # api/adminservice/v1/service_grpc.pb.go # api/adminservicemock/v1/service_grpc.pb.mock.go # api/archiver/v1/message.pb.go # api/batch/v1/request_response.pb.go # api/checksum/v1/message.pb.go # api/deployment/v1/message.go-helpers.pb.go # api/deployment/v1/message.pb.go # api/enums/v1/replication.go-helpers.pb.go # api/enums/v1/replication.pb.go # api/enums/v1/task.go-helpers.pb.go # api/enums/v1/task.pb.go # api/errordetails/v1/message.go-helpers.pb.go # api/errordetails/v1/message.pb.go # api/historyservice/v1/request_response.go-helpers.pb.go # api/historyservice/v1/request_response.pb.go # api/historyservice/v1/service.pb.go # api/historyservice/v1/service_grpc.pb.go # api/historyservicemock/v1/service_grpc.pb.mock.go # api/matchingservice/v1/request_response.pb.go # api/matchingservice/v1/service.pb.go # api/persistence/v1/chasm.pb.go # api/persistence/v1/executions.go-helpers.pb.go # api/persistence/v1/executions.pb.go # api/persistence/v1/workflow_mutable_state.pb.go # api/replication/v1/message.pb.go # api/routing/v1/extension.pb.go # api/schedule/v1/message.pb.go # api/taskqueue/v1/message.go-helpers.pb.go # api/taskqueue/v1/message.pb.go # chasm/component.go # chasm/component_mock.go # chasm/context.go # chasm/context_mock.go # chasm/engine.go # chasm/engine_mock.go # chasm/field.go # chasm/field_test.go # chasm/lib/activity/activity.go # chasm/lib/activity/activity_tasks.go # chasm/lib/activity/activity_test.go # chasm/lib/activity/config.go # chasm/lib/activity/frontend.go # chasm/lib/activity/fx.go # chasm/lib/activity/gen/activitypb/v1/activity_state.pb.go # chasm/lib/activity/gen/activitypb/v1/request_response.go-helpers.pb.go # chasm/lib/activity/gen/activitypb/v1/request_response.pb.go # chasm/lib/activity/gen/activitypb/v1/service.pb.go # chasm/lib/activity/gen/activitypb/v1/service_client.pb.go # chasm/lib/activity/gen/activitypb/v1/service_grpc.pb.go # chasm/lib/activity/handler.go # chasm/lib/activity/library.go # chasm/lib/activity/proto/v1/activity_state.proto # chasm/lib/activity/proto/v1/request_response.proto # chasm/lib/activity/proto/v1/service.proto # chasm/lib/activity/proto/v1/tasks.proto # chasm/lib/activity/statemachine.go # chasm/lib/activity/statemachine_test.go # chasm/lib/activity/validator.go # chasm/lib/activity/validator_test.go # chasm/lib/buf.yaml # chasm/lib/callback/component.go # chasm/lib/callback/config.go # chasm/lib/callback/fx.go # chasm/lib/callback/invocable_internal.go # chasm/lib/callback/invocable_outbound.go # chasm/lib/callback/library.go # chasm/lib/callback/proto/v1/message.proto # chasm/lib/callback/proto/v1/tasks.proto # chasm/lib/callback/request.go # chasm/lib/callback/request_test.go # chasm/lib/callback/tasks.go # chasm/lib/callback/tasks_test.go # chasm/lib/nexusoperation/cancellation.go # chasm/lib/nexusoperation/cancellation_statemachine.go # chasm/lib/nexusoperation/config.go # chasm/lib/nexusoperation/fx.go # chasm/lib/nexusoperation/gen/nexusoperationpb/v1/operation.go-helpers.pb.go # chasm/lib/nexusoperation/gen/nexusoperationpb/v1/operation.pb.go # chasm/lib/nexusoperation/gen/nexusoperationpb/v1/tasks.go-helpers.pb.go # chasm/lib/nexusoperation/gen/nexusoperationpb/v1/tasks.pb.go # chasm/lib/nexusoperation/library.go # chasm/lib/nexusoperation/metrics.go # chasm/lib/nexusoperation/operation.go # chasm/lib/nexusoperation/operation_statemachine.go # chasm/lib/nexusoperation/proto/v1/operation.proto # chasm/lib/nexusoperation/proto/v1/tasks.proto # chasm/lib/scheduler/backfiller.go # chasm/lib/scheduler/backfiller_tasks.go # chasm/lib/scheduler/backfiller_tasks_test.go # chasm/lib/scheduler/config.go # chasm/lib/scheduler/export_test.go # chasm/lib/scheduler/fx.go # chasm/lib/scheduler/gen/schedulerpb/v1/message.go-helpers.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/message.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/request_response.go-helpers.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/request_response.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/service.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/service_client.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/service_grpc.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/tasks.go-helpers.pb.go # chasm/lib/scheduler/gen/schedulerpb/v1/tasks.pb.go # chasm/lib/scheduler/generator.go # chasm/lib/scheduler/generator_tasks.go # chasm/lib/scheduler/generator_tasks_test.go # chasm/lib/scheduler/handler.go # chasm/lib/scheduler/handler_test.go # chasm/lib/scheduler/helper_test.go # chasm/lib/scheduler/invoker.go # chasm/lib/scheduler/invoker_execute_task_test.go # chasm/lib/scheduler/invoker_process_buffer_task_test.go # chasm/lib/scheduler/invoker_tasks.go # chasm/lib/scheduler/library.go # chasm/lib/scheduler/migration/migration.go # chasm/lib/scheduler/migration/migration_test.go # chasm/lib/scheduler/proto/v1/message.proto # chasm/lib/scheduler/proto/v1/request_response.proto # chasm/lib/scheduler/proto/v1/service.proto # chasm/lib/scheduler/proto/v1/tasks.proto # chasm/lib/scheduler/scheduler.go # chasm/lib/scheduler/scheduler_idle_tasks_test.go # chasm/lib/scheduler/scheduler_tasks.go # chasm/lib/scheduler/scheduler_test.go # chasm/lib/scheduler/spec_processor.go # chasm/lib/tests/gen/testspb/v1/service.pb.go # chasm/lib/tests/handler.go # chasm/lib/tests/library.go # chasm/lib/tests/payload.go # chasm/lib/tests/proto/v1/message.proto # chasm/lib/tests/proto/v1/request_response.proto # chasm/lib/tests/proto/v1/service.proto # chasm/lib/tests/tasks.go # chasm/lib/workflow/fx.go # chasm/lib/workflow/library.go # chasm/lib/workflow/workflow.go # chasm/library_core.go # chasm/ms_pointer.go # chasm/nexus_operation_processor.go # chasm/node_backend_mock.go # chasm/ref.go # chasm/ref_test.go # chasm/registrable_component.go # chasm/registrable_task.go # chasm/registry.go # chasm/registry_test.go # chasm/search_attribute.go # chasm/search_attribute_test.go # chasm/statemachine.go # chasm/task.go # chasm/task_mock.go # chasm/test_component_test.go # chasm/test_library_test.go # chasm/test_task_test.go # chasm/test_var_test.go # chasm/tree.go # chasm/tree_test.go # chasm/visibility.go # chasm/visibility_manager.go # chasm/visibility_manager_mock.go # chasm/visibility_test.go # chasm/visibility_value.go # chasm/visibility_value_test.go # chasm/workflow.go # client/admin/client_gen.go # client/admin/metric_client.go # client/admin/metric_client_gen.go # client/admin/retryable_client_gen.go # client/frontend/client_gen.go # client/frontend/metric_client.go # client/frontend/metric_client_gen.go # client/frontend/retryable_client_gen.go # client/history/client_gen.go # client/history/metric_client.go # client/history/metric_client_gen.go # client/history/retryable_client_gen.go # client/matching/README.md # client/matching/client.go # client/matching/client_gen.go # client/matching/loadbalancer.go # client/matching/metric_client.go # client/matching/metric_client_gen.go # cmd/tools/genrpcwrappers/main.go # cmd/tools/getproto/files.go # cmd/tools/getproto/main.go # common/api/metadata.go # common/archiver/README.md # common/archiver/gcloud/connector/client.go # common/archiver/provider/provider.go # common/archiver/provider/provider_mock.go # common/archiver/s3store/history_archiver.go # common/archiver/s3store/history_archiver_test.go # common/archiver/s3store/mocks/generate.go # common/archiver/s3store/mocks/s3api.go # common/archiver/s3store/util.go # common/archiver/s3store/visibility_archiver.go # common/archiver/s3store/visibility_archiver_test.go # common/authorization/authorizer.go # common/authorization/claim_mapper.go # common/authorization/default_authorizer.go # common/authorization/default_jwt_claim_mapper.go # common/authorization/default_token_key_provider.go # common/authorization/interceptor.go # common/authorization/interceptor_test.go # common/authorization/roles.go # common/cluster/metadata.go # common/cluster/metadata_test.go # common/config/config.go # common/config/config_template_embedded.yaml # common/config/persistence.go # common/config/persistence_test.go # common/constants.go # common/contextutil/metadata.go # common/contextutil/metadata_test.go # common/dynamicconfig/constants.go # common/dynamicconfig/shared_constants.go # common/enums/defaults.go # common/headers/caller_info.go # common/headers/headers.go # common/headers/version_checker.go # common/log/tag/values.go # common/log/zap_logger.go # common/membership/ringpop/factory.go # common/membership/ringpop/monitor.go # common/membership/ringpop/service_resolver.go # common/membership/ringpop/test_cluster.go # common/metrics/config.go # common/metrics/metric_defs.go # common/metrics/tags.go # common/metrics/tally_metrics_handler.go # common/metrics/tally_metrics_handler_test.go # common/metrics/task_queues.go # common/namespace/namespace.go # common/namespace/nsregistry/registry.go # common/namespace/nsregistry/registry_test.go # common/namespace/nsregistry/registry_watch_test.go # common/namespace/nsreplication/replication_task_executor.go # common/namespace/nsreplication/replication_task_executor_test.go # common/namespace/nsreplication/transmission_task_handler.go # common/namespace/nsreplication/transmission_task_handler_test.go # common/namespace/registry.go # common/namespace/registry_mock.go # common/namespace/replication_resolver.go # common/namespace/replication_resolver_test.go # common/nexus/callback_token.go # common/nexus/endpoint_registry.go # common/nexus/endpoint_registry_test.go # common/nexus/failure.go # common/nexus/failure_test.go # common/nexus/link_converter.go # common/nexus/link_converter_test.go # common/nexus/nexustest/server.go # common/nexus/payload_serializer.go # common/nexus/payload_serializer_test.go # common/payload/payload.go # common/payload/payload_test.go # common/payloads/payloads.go # common/persistence/cassandra/matching_task_store_queue.go # common/persistence/cassandra/matching_task_store_user_data.go # common/persistence/cassandra/matching_task_store_v1.go # common/persistence/cassandra/matching_task_store_v2.go # common/persistence/cassandra/queue_v2_store.go # common/persistence/data_interfaces.go # common/persistence/faultinjection/cluster_metadata_store_gen.go # common/persistence/faultinjection/data_store_factory.go # common/persistence/faultinjection/execution_store_gen.go # common/persistence/faultinjection/fault_generator.go # common/persistence/faultinjection/gowrap_template # common/persistence/faultinjection/metadata_store_gen.go # common/persistence/faultinjection/method_fault_generator.go # common/persistence/faultinjection/nexus_endpoint_store_gen.go # common/persistence/faultinjection/queue_gen.go # common/persistence/faultinjection/queue_v2_gen.go # common/persistence/faultinjection/shard_store_gen.go # common/persistence/faultinjection/store_fault_generator.go # common/persistence/faultinjection/task_store_gen.go # common/persistence/persistence_interface.go # common/persistence/persistencetest/queues.go # common/persistence/persistencetest/queues_test.go # common/persistence/serialization/codec.go # common/persistence/serialization/codec_test.go # common/persistence/serialization/serializer.go # common/persistence/serialization/task_serializers.go # common/persistence/serialization/task_serializers_test.go # common/persistence/sql/sqlplugin/mysql/session/session.go # common/persistence/sql/sqlplugin/mysql/visibility.go # common/persistence/sql/sqlplugin/postgresql/driver/interface.go # common/persistence/sql/sqlplugin/postgresql/driver/pgx.go # common/persistence/sql/sqlplugin/postgresql/driver/pq.go # common/persistence/sql/sqlplugin/postgresql/plugin.go # common/persistence/sql/sqlplugin/postgresql/session/session.go # common/persistence/sql/sqlplugin/sqlite/driver.go # common/persistence/sql/sqlplugin/sqlite/plugin.go # common/persistence/task_manager.go # common/persistence/tests/postgresql_test.go # common/persistence/tests/postgresql_test_util.go # common/persistence/tests/util.go # common/persistence/tests/visibility_persistence_suite.go # common/persistence/visibility/chasm_visibility_manager.go # common/persistence/visibility/chasm_visibility_manager_test.go # common/persistence/visibility/manager/visibility_manager.go # common/persistence/visibility/manager/visibility_manager_mock.go # common/persistence/visibility/store/elasticsearch/client/aws.go # common/persistence/visibility/store/elasticsearch/query_interceptors.go # common/persistence/visibility/store/elasticsearch/query_interceptors_test.go # common/persistence/visibility/store/elasticsearch/visibility_store.go # common/persistence/visibility/store/elasticsearch/visibility_store_read_test.go # common/persistence/visibility/store/query/converter.go # common/persistence/visibility/store/query/converter_test.go # common/persistence/visibility/store/sql/query_converter_legacy.go # common/persistence/visibility/store/sql/query_converter_legacy_test.go # common/persistence/visibility/store/sql/visibility_store.go # common/persistence/visibility/store/util.go # common/persistence/visibility/store/visibility_store.go # common/persistence/visibility/store/visibility_store_mock.go # common/persistence/visibility/visibility_manager_dual.go # common/persistence/visibility/visibility_manager_impl.go # common/persistence/visibility/visibility_manager_rate_limited.go # common/persistence/visibility/visiblity_manager_metrics.go # common/primitives/task_queues.go # common/quotas/clocked_rate_limiter.go # common/quotas/dynamic_rate_limiter_impl.go # common/quotas/priority_rate_limiter_impl.go # common/quotas/rate_burst.go # common/resource/fx.go # common/rpc/encryption/fixedTLSConfigProvider.go # common/rpc/encryption/local_store_tls_provider.go # common/rpc/encryption/tls_config_test.go # common/rpc/interceptor/dc_redirection_policy.go # common/rpc/interceptor/health_check.go # common/rpc/interceptor/logtags/admin_service_server_gen.go # common/rpc/interceptor/logtags/history_service_server_gen.go # common/rpc/interceptor/logtags/workflow_service_server_gen.go # common/rpc/interceptor/namespace_handover.go # common/rpc/interceptor/namespace_rate_limit.go # common/rpc/interceptor/namespace_validator.go # common/rpc/interceptor/namespace_validator_test.go # common/rpc/interceptor/rate_limit.go # common/rpc/interceptor/redirection.go # common/rpc/interceptor/redirection_test.go # common/rpc/interceptor/request_error_handler.go # common/rpc/interceptor/routing_key_interceptor_test.go # common/rpc/interceptor/service_error_interceptor.go # common/rpc/interceptor/service_error_interceptor_test.go # common/rpc/rpc.go # common/rpc/test/http_test.go # common/rpc/test/rpc_localstore_tls_test.go # common/searchattribute/encode.go # common/searchattribute/encode_test.go # common/searchattribute/manager.go # common/searchattribute/mapper.go # common/searchattribute/mapper_test.go # common/searchattribute/name_type_map.go # common/searchattribute/name_type_map_test.go # common/searchattribute/sadefs/encode_value.go # common/searchattribute/sadefs/encode_value_test.go # common/searchattribute/sadefs/util.go # common/searchattribute/search_attirbute.go # common/searchattribute/stringify.go # common/searchattribute/stringify_test.go # common/searchattribute/system_provider.go # common/searchattribute/test_provider.go # common/searchattribute/validator.go # common/serviceerror/convert.go # common/tasks/interleaved_weighted_round_robin_test.go # common/testing/historyrequire/history_require.go # common/testing/mockapi/workflowservicemock/v1/service_grpc.pb.mock.go # common/testing/mocksdk/client_mock.go # common/testing/protorequire/require.go # common/testing/testhooks/hooks.go # common/testing/testhooks/test_impl.go # common/testing/testlogger/testlogger.go # common/testing/testvars/test_vars.go # common/tqid/task_queue_id.go # common/tqid/task_queue_id_test.go # common/tqid/task_queue_validator.go # common/util/util.go # common/util/wildcard.go # common/worker_versioning/version_membership_cache.go # common/worker_versioning/worker_versioning.go # common/worker_versioning/worker_versioning_test.go # components/callbacks/config.go # components/callbacks/config_test.go # components/callbacks/request.go # components/callbacks/request_test.go # components/nexusoperations/config.go # components/nexusoperations/executors_test.go # components/nexusoperations/fx.go # components/nexusoperations/workflow/commands.go # components/nexusoperations/workflow/commands_test.go # config/development-cluster-a.yaml # config/development-cluster-b.yaml # config/development-cluster-c.yaml # config/dynamicconfig/development-cass.yaml # config/dynamicconfig/development-sql.yaml # config/dynamicconfig/development-xdc.yaml # develop/docker-compose/docker-compose.yml # develop/docker-compose/grafana/provisioning/tempo/tempo.yaml # develop/github/docker-compose.yml # docker/docker-bake.hcl # docker/targets/admin-tools.Dockerfile # docker/targets/server.Dockerfile # docs/Makefile # docs/_assets/matching-context.d2 # docs/_assets/retries.d2 # docs/architecture/chasm.md # docs/architecture/nexus.md # docs/development/macos/cassandra.md # docs/development/testing.md # proto/internal/buf.yaml # proto/internal/temporal/server/api/adminservice/v1/request_response.proto # proto/internal/temporal/server/api/adminservice/v1/service.proto # proto/internal/temporal/server/api/archiver/v1/message.proto # proto/internal/temporal/server/api/batch/v1/request_response.proto # proto/internal/temporal/server/api/checksum/v1/message.proto # proto/internal/temporal/server/api/cli/v1/message.proto # proto/internal/temporal/server/api/clock/v1/message.proto # proto/internal/temporal/server/api/cluster/v1/message.proto # proto/internal/temporal/server/api/common/v1/api_category.proto # proto/internal/temporal/server/api/common/v1/dlq.proto # proto/internal/temporal/server/api/deployment/v1/message.proto # proto/internal/temporal/server/api/enums/v1/cluster.proto # proto/internal/temporal/server/api/enums/v1/common.proto # proto/internal/temporal/server/api/enums/v1/fairness_state.proto # proto/internal/temporal/server/api/enums/v1/nexus.proto # proto/internal/temporal/server/api/enums/v1/predicate.proto # proto/internal/temporal/server/api/enums/v1/replication.proto # proto/internal/temporal/server/api/enums/v1/task.proto # proto/internal/temporal/server/api/enums/v1/workflow.proto # proto/internal/temporal/server/api/enums/v1/workflow_task_type.proto # proto/internal/temporal/server/api/errordetails/v1/message.proto # proto/internal/temporal/server/api/health/v1/message.proto # proto/internal/temporal/server/api/history/v1/message.proto # proto/internal/temporal/server/api/historyservice/v1/request_response.proto # proto/internal/temporal/server/api/historyservice/v1/service.proto # proto/internal/temporal/server/api/matchingservice/v1/request_response.proto # proto/internal/temporal/server/api/matchingservice/v1/service.proto # proto/internal/temporal/server/api/metrics/v1/message.proto # proto/internal/temporal/server/api/namespace/v1/message.proto # proto/internal/temporal/server/api/persistence/v1/chasm.proto # proto/internal/temporal/server/api/persistence/v1/chasm_visibility.proto # proto/internal/temporal/server/api/persistence/v1/cluster_metadata.proto # proto/internal/temporal/server/api/persistence/v1/executions.proto # proto/internal/temporal/server/api/persistence/v1/history_tree.proto # proto/internal/temporal/server/api/persistence/v1/hsm.proto # proto/internal/temporal/server/api/persistence/v1/namespaces.proto # proto/internal/temporal/server/api/persistence/v1/nexus.proto # proto/internal/temporal/server/api/persistence/v1/predicates.proto # proto/internal/temporal/server/api/persistence/v1/queue_metadata.proto # proto/internal/temporal/server/api/persistence/v1/queues.proto # proto/internal/temporal/server/api/persistence/v1/task_queues.proto # proto/internal/temporal/server/api/persistence/v1/tasks.proto # proto/internal/temporal/server/api/persistence/v1/update.proto # proto/internal/temporal/server/api/persistence/v1/workflow_mutable_state.proto # proto/internal/temporal/server/api/replication/v1/message.proto # proto/internal/temporal/server/api/routing/v1/extension.proto # proto/internal/temporal/server/api/schedule/v1/message.proto # proto/internal/temporal/server/api/taskqueue/v1/message.proto # proto/internal/temporal/server/api/testservice/v1/request_response.proto # proto/internal/temporal/server/api/testservice/v1/service.proto # proto/internal/temporal/server/api/token/v1/message.proto # proto/internal/temporal/server/api/workflow/v1/message.proto # service/frontend/admin_handler.go # service/frontend/admin_handler_test.go # service/frontend/configs/quotas.go # service/frontend/configs/quotas_test.go # service/frontend/errors.go # service/frontend/fx.go # service/frontend/fx_test.go # service/frontend/health_check_test.go # service/frontend/namespace_handler.go # service/frontend/namespace_handler_test.go # service/frontend/nexus_completion_http_handler.go # service/frontend/nexus_handler.go # service/frontend/nexus_handler_test.go # service/frontend/nexus_operation_http_handler.go # service/frontend/nexus_operation_http_handler_test.go # service/frontend/operator_handler.go # service/frontend/operator_handler_test.go # service/frontend/service.go # service/frontend/workflow_handler.go # service/frontend/workflow_handler_second_test.go # service/frontend/workflow_handler_test.go # service/fx.go # service/history/api/command_attr_validator.go # service/history/api/command_attr_validator_test.go # service/history/api/create_workflow_util.go # service/history/api/describeworkflow/api.go # service/history/api/get_workflow_util.go # service/history/api/multioperation/api.go # service/history/api/namespace.go # service/history/api/pauseactivity/api.go # service/history/api/pollupdate/api_test.go # service/history/api/queryworkflow/api.go # service/history/api/recordactivitytaskstarted/api.go # service/history/api/recordactivitytaskstarted/api_test.go # service/history/api/recordworkflowtaskstarted/api.go # service/history/api/removesignalmutablestate/api.go # service/history/api/resetactivity/api.go # service/history/api/resetworkflow/api.go # service/history/api/respondactivitytaskcanceled/api.go # service/history/api/respondactivitytaskcompleted/api.go # service/history/api/respondactivitytaskfailed/api.go # service/history/api/respondactivitytaskfailed/api_test.go # service/history/api/respondworkflowtaskcompleted/api.go # service/history/api/respondworkflowtaskcompleted/api_test.go # service/history/api/respondworkflowtaskcompleted/workflow_task_completed_handler.go # service/history/api/respondworkflowtaskcompleted/workflow_task_completed_handler_test.go # service/history/api/respondworkflowtaskfailed/api.go # service/history/api/signalwithstartworkflow/api.go # service/history/api/signalwithstartworkflow/convert.go # service/history/api/signalwithstartworkflow/signal_with_start_workflow.go # service/history/api/signalwithstartworkflow/signal_with_start_workflow_test.go # service/history/api/signalworkflow/api.go # service/history/api/startworkflow/api.go # service/history/api/unpauseactivity/api.go # service/history/api/updateactivityoptions/api.go # service/history/api/updateactivityoptions/api_test.go # service/history/api/updateworkflow/api.go # service/history/api/updateworkflowoptions/api.go # service/history/api/updateworkflowoptions/api_test.go # service/history/api/verifychildworkflowcompletionrecorded/api.go # service/history/api/verifyfirstworkflowtaskscheduled/api_test.go # service/history/api/worker_versioning_util.go # service/history/api/workflow_id_dedup.go # service/history/api/workflow_id_dedup_test.go # service/history/archival_queue_factory_test.go # service/history/chasm_engine.go # service/history/chasm_engine_test.go # service/history/chasm_task_util.go # service/history/configs/config.go # service/history/configs/quotas.go # service/history/consts/const.go # service/history/deletemanager/delete_manager.go # service/history/deletemanager/delete_manager_test.go # service/history/fx.go # service/history/handler.go # service/history/history_engine.go # service/history/history_engine2_test.go # service/history/history_engine_factory.go # service/history/history_engine_test.go # service/history/history_test.go # service/history/historybuilder/event_factory.go # service/history/historybuilder/event_store.go # service/history/historybuilder/history_builder.go # service/history/historybuilder/history_builder_categorization_test.go # service/history/historybuilder/history_builder_test.go # service/history/interfaces/chasm_tree.go # service/history/interfaces/chasm_tree_mock.go # service/history/interfaces/mutable_state.go # service/history/interfaces/mutable_state_mock.go # service/history/interfaces/shard_context.go # service/history/interfaces/shard_context_mock.go # service/history/interfaces/workflow_context.go # service/history/interfaces/workflow_context_mock.go # service/history/ndc/events_reapplier_test.go # service/history/ndc/transaction_manager.go # service/history/ndc/transaction_manager_existing_workflow.go # service/history/ndc/transaction_manager_existing_workflow_test.go # service/history/ndc/transaction_manager_new_workflow.go # service/history/ndc/transaction_manager_new_workflow_test.go # service/history/ndc/workflow.go # service/history/ndc/workflow_mock.go # service/history/ndc/workflow_resetter.go # service/history/ndc/workflow_resetter_test.go # service/history/ndc/workflow_state_replicator_test.go # service/history/ndc_standby_task_util.go # service/history/ndc_task_util.go # service/history/outbound_queue_active_task_executor.go # service/history/outbound_queue_active_task_executor_test.go # service/history/outbound_queue_factory.go # service/history/outbound_queue_standby_task_executor.go # service/history/outbound_queue_standby_task_executor_test.go # service/history/queue_factory_base.go # service/history/queue_factory_base_test.go # service/history/queues/active_standby_executor.go # service/history/queues/active_standby_executor_test.go # service/history/queues/dlq_writer.go # service/history/queues/dlq_writer_test.go # service/history/queues/executable.go # service/history/queues/executable_factory.go # service/history/queues/executable_mock.go # service/history/queues/executable_test.go # service/history/queues/grouper.go # service/history/queues/metrics.go # service/history/queues/metrics_test.go # service/history/queues/priority_assigner.go # service/history/queues/queue_base.go # service/history/queues/queue_immediate.go # service/history/queues/queue_immediate_test.go # service/history/queues/reader.go # service/history/queues/scheduler.go # service/history/queues/speculative_workflow_task_timeout_queue.go # service/history/replication/ack_manager.go # service/history/replication/dlq_writer.go # service/history/replication/dlq_writer_test.go # service/history/replication/executable_sync_versioned_transition_task.go # service/history/replication/executable_task.go # service/history/replication/executable_task_converter.go # service/history/replication/executable_task_mock.go # service/history/replication/executable_task_tool_box.go # service/history/replication/executable_verify_versioned_transition_task.go # service/history/replication/fx.go # service/history/replication/metrics.go # service/history/replication/progress_cache.go # service/history/replication/progress_cache_test.go # service/history/replication/raw_task_converter.go # service/history/replication/raw_task_converter_test.go # service/history/replication/stream_receiver.go # service/history/replication/stream_receiver_monitor.go # service/history/replication/stream_receiver_monitor_test.go # service/history/replication/stream_sender.go # service/history/replication/task_processor.go # service/history/replication/task_processor_manager.go # service/history/replication/task_processor_manager_test.go # service/history/replication/task_processor_test.go # service/history/service.go # service/history/shard/context_factory.go # service/history/shard/context_impl.go # service/history/shard/context_test.go # service/history/shard/context_testutil.go # service/history/shard/controller_test.go # service/history/shard/fx.go # service/history/tasks/chasm_task.go # service/history/tasks/delete_workflow_execution_stage.go # service/history/tasks/predicates.go # service/history/tasks/state_machine_task.go # service/history/tasks/task.go # service/history/tasks/task_mock.go # service/history/tasks/utils.go # service/history/timer_queue_active_task_executor.go # service/history/timer_queue_active_task_executor_test.go # service/history/timer_queue_standby_task_executor.go # service/history/timer_queue_standby_task_executor_test.go # service/history/timer_queue_task_executor_base.go # service/history/timer_queue_task_executor_base_test.go # service/history/transfer_queue_active_task_executor.go # service/history/transfer_queue_active_task_executor_test.go # service/history/transfer_queue_factory.go # service/history/transfer_queue_standby_task_executor.go # service/history/transfer_queue_standby_task_executor_test.go # service/history/visibility_queue_factory.go # service/history/visibility_queue_task_executor.go # service/history/visibility_queue_task_executor_test.go # service/history/worker_versioning_util.go # service/history/workflow/activity.go # service/history/workflow/cache/cache.go # service/history/workflow/command_handler.go # service/history/workflow/context.go # service/history/workflow/fx.go # service/history/workflow/metrics.go # service/history/workflow/metrics_test.go # service/history/workflow/mutable_state_impl.go # service/history/workflow/mutable_state_impl_restart_activity_test.go # service/history/workflow/mutable_state_impl_test.go # service/history/workflow/mutable_state_rebuilder.go # service/history/workflow/mutable_state_rebuilder_test.go # service/history/workflow/noop_chasm_tree.go # service/history/workflow/retry.go # service/history/workflow/task_generator.go # service/history/workflow/task_generator_mock.go # service/history/workflow/task_generator_provider.go # service/history/workflow/task_generator_test.go # service/history/workflow/task_refresher.go # service/history/workflow/timer_sequence.go # service/history/workflow/update/abort_reason.go # service/history/workflow/update/errors_failures.go # service/history/workflow/update/export_test.go # service/history/workflow/update/store.go # service/history/workflow/update/store_mock_test.go # service/history/workflow/update/update.go # service/history/workflow/update/update_test.go # service/history/workflow/update/validation.go # service/history/workflow/util.go # service/history/workflow/workflow_task_state_machine.go # service/history/workflow/workflow_test/mutable_state_impl_test.go # service/matching/backlog_manager_test.go # service/matching/config.go # service/matching/configs/quotas.go # service/matching/counter/cmsketch.go # service/matching/counter/cmsketch_test.go # service/matching/counter/hybrid.go # service/matching/db.go # service/matching/fair_backlog_manager.go # service/matching/fair_task_reader.go # service/matching/forwarder.go # service/matching/fx.go # service/matching/handler.go # service/matching/handler_test.go # service/matching/matcher.go # service/matching/matcher_data.go # service/matching/matcher_data_test.go # service/matching/matching_engine.go # service/matching/matching_engine_test.go # service/matching/physical_task_queue_key.go # service/matching/physical_task_queue_key_test.go # service/matching/physical_task_queue_manager.go # service/matching/physical_task_queue_manager_interface.go # service/matching/physical_task_queue_manager_mock.go # service/matching/physical_task_queue_manager_test.go # service/matching/pri_backlog_manager.go # service/matching/pri_forwarder.go # service/matching/pri_matcher.go # service/matching/pri_matcher_test.go # service/matching/pri_task_reader.go # service/matching/task.go # service/matching/task_queue_partition_manager.go # service/matching/task_queue_partition_manager_test.go # service/matching/task_tracker.go # service/matching/task_tracker_test.go # service/matching/task_validation.go # service/matching/user_data_manager.go # service/matching/user_data_manager_test.go # service/matching/workers/registry.go # service/matching/workers/registry_impl.go # service/matching/workers/registry_impl_test.go # service/matching/workers/registry_test.go # service/matching/workers/worker_query_engine.go # service/matching/workers/worker_query_engine_test.go # service/worker/batcher/activities.go # service/worker/batcher/activities_test.go # service/worker/deletenamespace/deleteexecutions/activities.go # service/worker/deletenamespace/deleteexecutions/workflow_test.go # service/worker/deletenamespace/fx.go # service/worker/dummy/workflow.go # service/worker/fx.go # service/worker/migration/activities.go # service/worker/migration/activities_test.go # service/worker/migration/force_replication_workflow.go # service/worker/migration/force_replication_workflow_test.go # service/worker/migration/fx.go # service/worker/migration/handover_workflow.go # service/worker/migration/handover_workflow_test.go # service/worker/scheduler/activities.go # service/worker/scheduler/activities_test.go # service/worker/scheduler/workflow.go # service/worker/workerdeployment/activities.go # service/worker/workerdeployment/client.go # service/worker/workerdeployment/fx.go # service/worker/workerdeployment/util.go # service/worker/workerdeployment/util_test.go # service/worker/workerdeployment/version_activities.go # service/worker/workerdeployment/version_workflow.go # service/worker/workerdeployment/version_workflow_test.go # service/worker/workerdeployment/workflow.go # service/worker/workerdeployment/workflow_test.go # temporal/fx.go # temporal/server_option.go # temporal/server_options.go # tests/acquire_shard_test.go # tests/activity_api_batch_reset_test.go # tests/activity_api_batch_unpause_test.go # tests/activity_api_batch_update_options_test.go # tests/activity_api_pause_test.go # tests/activity_api_reset_test.go # tests/activity_api_rules_test.go # tests/activity_api_update_test.go # tests/activity_test.go # tests/add_tasks_test.go # tests/admin_test.go # tests/advanced_visibility_test.go # tests/archival_test.go # tests/callbacks_migration_test.go # tests/callbacks_test.go # tests/cancel_workflow_test.go # tests/chasm_test.go # tests/child_workflow_test.go # tests/client_data_converter_test.go # tests/client_misc_test.go # tests/continue_as_new_test.go # tests/describe_test.go # tests/dlq_test.go # tests/links_test.go # tests/max_buffered_event_test.go # tests/namespace_interceptor_test.go # tests/namespace_test.go # tests/nexus_api_test.go # tests/nexus_api_validation_test.go # tests/nexus_endpoint_test.go # tests/nexus_test_base.go # tests/nexus_workflow_test.go # tests/pause_workflow_execution_test.go # tests/premature_eos_test.go # tests/priority_fairness_test.go # tests/purge_dlq_tasks_api_test.go # tests/query_workflow_test.go # tests/relay_task_test.go # tests/schedule_migration_test.go # tests/schedule_test.go # tests/signal_workflow_test.go # tests/sizelimit_test.go # tests/stickytq_test.go # tests/task_queue_stats_test.go # tests/task_queue_test.go # tests/testcore/context.go # tests/testcore/dynamic_config_overrides.go # tests/testcore/functional_test_base.go # tests/testcore/matching_behavior.go # tests/testcore/onebox.go # tests/testcore/shard_salt.txt # tests/testcore/test_cluster.go # tests/testcore/test_cluster_pool.go # tests/testcore/test_env.go # tests/transient_task_test.go # tests/update_workflow_sdk_test.go # tests/update_workflow_test.go # tests/user_metadata_test.go # tests/user_timers_test.go # tests/versioning_3_test.go # tests/versioning_test.go # tests/worker_deployment_test.go # tests/worker_deployment_version_test.go # tests/workflow_alias_search_attribute_test.go # tests/workflow_buffered_events_test.go # tests/workflow_delete_execution_test.go # tests/workflow_failures_test.go # tests/workflow_memo_test.go # tests/workflow_task_reported_problems_test.go # tests/workflow_test.go # tests/workflow_timer_test.go # tests/workflow_visibility_test.go # tests/xdc/base.go # tests/xdc/chasm_test.go # tests/xdc/failover_test.go # tests/xdc/history_replication_dlq_test.go # tests/xdc/history_replication_signals_and_updates_test.go # tests/xdc/nexus_request_forwarding_test.go # tests/xdc/nexus_state_replication_test.go # tests/xdc/stream_based_replication_test.go # tests/xdc/visibility_test.go # tools/elasticsearch/handler.go # tools/elasticsearch/main.go # tools/elasticsearch/tasks.go # tools/flakereport/flakereport.go # tools/flakereport/github.go # tools/flakereport/slack.go # tools/flakereport/types.go # tools/flakereport/writer.go # tools/tdbg/chasm_registry.go # tools/tdbg/commands.go # tools/tdbg/flags.go # tools/tdbg/task_queue_commands.go # tools/tdbg/task_queue_commands_test.go # tools/tdbg/tdbg_commands.go # tools/tdbg/util.go # tools/testrunner/junit.go # tools/testrunner/junit_test.go # tools/testrunner/log.go # tools/testrunner/log_test.go # tools/testrunner/testdata/junit-alerts-output.xml # tools/testrunner/testdata/junit-crash-output.xml # tools/testrunner/testdata/junit-empty.xml # tools/testrunner/testdata/junit-timeout-output.xml # tools/testrunner/testrunner.go # tools/testrunner/testrunner_test.go |
||
|
|
b18ce1745b |
Update to API v1.62.13 (#10429)
## What changed? update api version to tagged release |
||
|
|
638fc6db67 |
Update modernc.org/sqlite to v1.51.0 and remove connection workaround (#10427)
## What changed? Bumped `modernc.org/sqlite` to v1.51.0 and removed the custom `Driver`/`conn` wrapper in `sqlite/driver.go` that implemented `ResetSession()` and `IsValid()`. ## Why? The wrapper existed to stop `database/sql` from discarding the single in-memory connection on a context-cancelled transaction (which lost the whole database). v1.51.0 fixes this upstream — in-memory connections now stay usable after interruption ([cznic/sqlite c1d418e](https://gitlab.com/cznic/sqlite/-/commit/c1d418e0de38d2757c5d0faa6ab569fdf6acdf03)) — so the workaround is redundant. ## How did you test it? - [x] built - [x] covered by existing tests `TestSQLiteTransactionContextCancellation` (the in-memory cancellation regression test) and the rest of the SQLite persistence suite pass. |
||
|
|
032496b3ee |
Adds StateSizeBytes to DescribeNexusOperation (#10423)
## What changed? Add StateSizeBytes to NexusOperationInfo set to ApproximateStateSize ## Why? Enables storage estimations ## How did you test it? - [ ] built - [ ] run locally and tested manually - [x] covered by existing tests - [x] added new unit test(s) - [ ] added new functional test(s) |
||
|
|
830f9dd163 |
Bump Go toolchain to 1.26.3 and thrift to 0.23.0 (security patch) (#10395)
Bumps Go from 1.26.2 to 1.26.3 to resolve scanner findings for 4 Go stdlib CVEs: - **CVE-2026-42499** — `net/mail` `consumePhrase` quadratic complexity - **CVE-2026-39820** — `net/mail` `consumeComment` quadratic complexity - **CVE-2026-33811** — `net` `LookupCNAME` double-free with cgo resolver - **CVE-2026-39836** — `net` `Dial`/`LookupPort` panic on NUL byte (Windows-only) None are practically exploitable against Temporal Server (no `net/mail` usage, `CGO_ENABLED=0`, Linux containers), but the Go version in the binary triggers customer vulnerability scanners. Also bumps `github.com/apache/thrift` from 0.22.0 → 0.23.0 (ref #10202). |
||
|
|
3e1ffa12e4 |
expose SDK name and version on DescribeActivityExecution (#10333)
## What changed? - Added `sdk_name`/`sdk_version` to `ActivityAttemptState and `ActivityExecutionInfo` (via the companion api PR). - Added `chasm.Context.RequestHeader(key) string` so transitions can read inbound gRPC metadata directly. - `TransitionStarted` stamps `client-name`/`client-version` onto the attempt; `buildActivityExecutionInfo` expose them through `DescribeActivityExecution`. Overwritten per attempt. - Consolidated the scattered `TestDescribeActivityExecution_*` methods into one parent with parallel subtests. ## Why? Standalone Activities had no way to convey which SDK ran a given activity. The SDK already sends `client-name`/`client-version` on every poll and `headers.Propagate` carries them to history, so the only missing piece was a way for the CHASM transition to read them. `RequestHeader(key)` is intentionally narrow: gRPC metadata lives in the Go context under an unexported key that `chasm.Context.Value()` can't reach. A single-purpose accessor for inbound transport metadata captures what we need without opening that door. ## How did you test it? - [X] built - [X] run locally and tested manually - [X] covered by existing tests - [X] added new unit test(s) - [X] added new functional test(s) |
||
|
|
94b3a93216 |
Implement SignalWithStart as a system nexus endpoint (#9833)
## What changed? This PR adds `SignalWithStartWorkflowExecution` as a synchronous Nexus operation exposed via `__temporal_system endpoint`, allowing workflows to signal-with-start other workflows through the CHASM Nexus operation framework. Key changes: - `chasm/lib/workflow/nexus_service.go`: `workflowServiceNexusHandler` implements the `SignalWithStartWorkflowExecution` Nexus sync operation by resolving the namespace and delegating to the History service. A `SignalWithStartOperationProcessor` handles input enrichment (namespace, request ID, links) and routing via CHASM's `NexusOperationProcessorResult`. - `chasm/lib/workflow/library.go` — library now holds the `workflowServiceNexusHandler`, the workflow `Config`, the SA mapper provider, and the SA validator. `newLibrary` (used by fx) takes those dependencies, while the public `NewLibrary` keeps its old signature for external callers. Adds `NexusServices()` so the library registers its Nexus service via CHASM. - `chasm/lib/workflow/validator.go`: `RequestValidator` consolidates the `SignalWithStartWorkflowExecution` validation logic (previously inlined in `WorkflowHandler`) into a reusable, injectable struct. This same validator is used by both the frontend handler and the new CHASM processor. - common/dynamicconfig/constants.go — adds `EnableSignalWithStartFromWorkflow` (namespace-scoped, default false). - `service/frontend/workflow_handler.go`: Removed the `SignalWithStart` validation block - `service/history/fx.go`: Provides a `HistoryServiceServerProvider` so the CHASM workflow library can call the history handler directly. - `temporal/fx.go`: Removes the now-redundant `ChasmLibraryOptions` grouping; each service module registers its own CHASM libraries. - `components/nexusoperations/workflow/commands.go`: `NotFound` and `InvalidArgument` errors during Nexus command handling are now surfaced as workflow task failures instead of being treated as transient handler errors. - `common/payloads`: Adds `EncodeSingle`, `MustEncodeSingle`, and `MustEncode` helpers used in tests. - `cmd/tools/getproto`: Adds support for nexus-proto-annotations proto imports. - `tests/signal_with_start_from_workflow_test.go`: Functional test suite covering the happy path, duplicate detection, conflict policies, and validation rejection for the new Nexus operation. ## Why? This functionality is one of our most requested GitHub issues. ## How did you test it? - [X] built - [X] run locally and tested manually - [ ] covered by existing tests - [X] added new unit test(s) - [X] added new functional test(s) ## Potential risks The history service now directly exposes a `HistoryServiceServer` interface via `fx` for injection into the CHASM workflow library. This tight coupling between the CHASM workflow library and the history handler could complicate future layering — callers outside the history service should not adopt this pattern. The feature is gated by `history.enableSignalWithStartFromWorkflow` for rollout. --------- Co-authored-by: Roey Berman <[email protected]> |
||
|
|
0e39d20cd8 |
Callback for workflow update support (#9614)
## What changed? Added support for Nexus workflow update completion callbacks via CHASM. This allows a Nexus caller to be notified when a workflow update completes by attaching completion callbacks to the update request. ## Why? Nexus operations that target workflow updates need a way to receive completion notifications. Without this, a Nexus caller that sends an update has no async mechanism to learn when the update finishes. Completion callbacks enable the same async notification pattern that already exists for workflow-level Nexus operations. ## How did you test it? - [ ] built - [x] run locally and tested manually - [ ] covered by existing tests - [x] added new unit test(s) - [x] added new functional test(s) ## Potential risks Touches speculative workflow updates, they are always hard to reason about. Tried to compensate with lots of test coverage. Note: Needs this API PR https://github.com/temporalio/api/pull/742/changes --- > [!NOTE] > **High Risk** > Touches workflow update state machine and mutable state event handling to persist/trigger per-update callbacks, including close/retry/reset paths, which is complex and can affect correctness of update outcomes and callback delivery. > > **Overview** > Adds **workflow update completion callbacks** via CHASM so Nexus callers can register callbacks on `UpdateWorkflowExecution` and have them fired on update completion or workflow close. > > This introduces a `WorkflowUpdate` CHASM component with new `UpdateState` protobuf (including persisted `rejection_failure`), stores update callbacks under `Workflow.Updates`, and extends callback processing to handle *update-level* callbacks on update completion, rejection (including reset/reapply), and on run transitions (retry/timeout/continue-as-new) where update callbacks must fire even if workflow-level callbacks are inherited. > > It also adds dynamic config gates/limits (`EnableWorkflowUpdateCallbacks`, `MaxCallbacksPerUpdateID`), updates `DescribeWorkflow` to surface update callback triggers, extends mutable state/history builder APIs to carry per-update callback options in `WorkflowExecutionOptionsUpdated`, and adds `Update.AttachCallbacks` logic to persist/flush callbacks (including buffering while `stateSent`, request-id dedup, and stricter validation requiring `request_id` when callbacks are present). > > <sup>Reviewed by [Cursor Bugbot]() for commit 4484fee104d73344ef5370c468008440c7df1c6a. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> --------- Co-authored-by: long-nt-tran <[email protected]> |
||
|
|
25ef1b2a67 |
Bump go.temporal.io/api to v1.62.12 (#10293)
## Summary Replace the pseudo-version pin of `go.temporal.io/api` with the freshly-tagged `v1.62.12`. This is a prerequisite for cutting cloud release 3.156, which requires all OSS dependencies to be on tagged versions (runbook step 2). ## Details - `v1.62.12` tags api-go commit `0a978d4fd72ccadc7666d7f19aa6df9b335b3133` — the same commit the previous pseudo-version pinned (`v1.62.12-0.20260511225354-0a978d4fd72c`). - No source code changes — the module content is identical (the `/go.mod` h1 hash didn't change in go.sum, only the version-identifier hash). - Tag created via `temporalio/api`'s `create-release.yml` workflow. ## Test plan - [x] `go mod tidy` clean - [ ] CI passes |
||
|
|
3e4fd2fb44 |
Add standalone Nexus operation namespace capability (#10206)
## What changed? Add standalone Nexus operation namespace capability |
||
|
|
e61c98608b | deps: luxfi/crypto v1.19.0 | ||
|
|
8fb2c40f01 | go.mod: bump go directive to 1.26.3 (security advisory) | ||
|
|
3b0c43fbd0 |
Add stubs for new activity execution APIs (#10158)
## What Bump `go.temporal.io/api` and add stubs for newly added `PauseActivityExecution`, `UnpauseActivityExecution`, `ResetActivityExecution`, and `UpdateActivityExecutionOptions` APIs. ## Why temporalio/api#743 added these RPCs to `WorkflowServiceClient`/`WorkflowServiceServer`. Without stubs, any branch bumping api-go fails to build. ## How did you test it? `go build ./...` passes. --------- Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
0108c8072d |
DescribeNamespace with weak consistency (#10103)
## What changed? Added server-side handling for the new `weak_consistency` flag on `DescribeNamespaceRequest` (proto change in https://github.com/temporalio/api/pull/775). When the flag is set, `DescribeNamespace` is served from the in-memory namespace registry, bypassing the metadata store. When unset, behavior is unchanged. ## Why? `DescribeNamespace` currently always reads through to the persistence store. The new field lets clients opt into eventually-consistent reads where read-after-write semantics aren't required, while preserving the existing strong-consistency contract for operator/admin callers (default behavior unchanged). ## How did you test it? - [X] built - [X] added new unit test(s) - [X] added new functional test(s) ## Potential risks - Eventual consistency on when weak_consistency is set. A namespace created within the registry's refresh interval may return `NamespaceNotFound` even though it exists in persistence. |
||
|
|
45bd80a26d |
feat(tasks): v3.9.0 — distributed engine: per-NS SQLite shards + PQ consensus + sticky routing
Architecture
One SQLite shard per (org, namespace) under <DataDir>/<org>/<ns>.db
with WAL mode, single writer, 5s busy timeout. Replaces the prior
shared memdb/zapdb store. Shard manager opens/caches/idle-evicts;
prefix scans, namespace isolation, and cross-restart durability all
proven by tests.
Replication (post-quantum, native)
New pkg/tasks/replication/ exposes a Replicator interface with two
drivers:
local — single-node passthrough (default for embedded/dev)
quasar — wraps github.com/luxfi/consensus NewPQ (BLS + Corona
dual-threshold). On every WAL-affecting op the shard
builds a Frame, calls Propose, awaits Decision, applies
on Accept. Followers receive accepted frames via the
same Subscribe path so every node converges.
Sticky task-queue routing
New pkg/tasks/routing/ — rendezvous-style smallest-hash leader
election keyed by SHA-256(shard|taskQueue|seed). OnChange fan-out
re-hashes on cluster membership change. Dispatcher consults Router
before accepting subscriptions and forwards non-leader requests.
Namespace migration
New pkg/tasks/migration/ — lock → checkpoint → copy → unlock with
a job lifecycle (pending|locking|copying|replaying|released|failed).
CLI: `tasksd migrate --org <id> --namespace <name> --to <node>`.
HTTP: POST /v1/tasks/namespaces/{ns}/migrate.
New env / flags
--data / TASKSD_DATA_DIR shard root (./tasks-data)
--replicator / TASKSD_REPLICATOR local | quasar (default local)
--node-id / TASKSD_NODE_ID stable id (required for quasar)
--validators / TASKSD_VALIDATORS CSV host:port
--validator-key / TASKSD_VALIDATOR_KEY (reserved for PQ key path)
TASKSD_STORE sqlite | memory (default sqlite)
New routes
GET /v1/tasks/cluster
GET /v1/tasks/cluster/health
POST /v1/tasks/namespaces/{ns}/migrate
UI bundle (synced)
Cluster page with status / validators / shards / leader-map.
NamespaceDetail "Migrate to node" button gated by
canWriteNamespace + cluster.enabled. MigrationDialog enforces
typed-name confirmation. Sidebar Cluster nav hidden when running
single-node.
Tests
+33 backend tests (store: 11, replication: 10, routing: 5,
migration: 3, cluster routes: 2, store factory: 2). All packages
PASS with -race; go vet clean.
+13 UI tests (effectiveHealth: 6, canSubmitMigration: 4,
useCluster: 3). 169 total UI tests, 1 pre-existing skip.
Migration v3.8.x → v3.9.0
Fresh-data startup. zapdb backend dropped. Operators drain old
cluster, snapshot for archival, deploy v3.9.0 with new --data
directory. To enable HA, scale to 3+ replicas with --replicator
quasar and matching --node-id / --validators.
|
||
|
|
1444d61c56 |
feat(tasks): v3.7.0 — multi-tenant hardening, durable store, full inverse-options, 13 new endpoints
Security (red-team pass)
- ZAP wire handlers were org-blind: every opcode bypassed WithOrg
and used the unscoped engine. Patched: zapHandlers takes a
JWTValidator; per-request engine is scoped to claims.Owner.
TASKSD_REQUIRE_IDENTITY enforces validation in production.
- /v1/tasks/mcp tools/call ran on the unscoped engine — patched
to use auth.OrgID(r.Context()).
- /v1/tasks/events SSE fan-out was global; events now stamp OrgID
via engine.emit(ev) and the SSE handler filters per-request org.
- AddSearchAttribute rejected reserved/system names (WorkflowId,
ExecutionStatus, TaskQueue, *StartTime, Temporal*).
- Path-traversal guards on every {ns}/{id} URL slot (validIdent +
validPathSegment).
- dispatcher.queries map is now bounded (4096 entries, 5m TTL,
drop-oldest on overflow) — closes a DoS via silent worker.
Durability
- newStoreFromEnv selects memdb (default) or zapdb via
TASKSD_STORE=zapdb. Survives restart; covered by
TestStore_ZapdbPersistsAcrossOpen.
Inverse-of-options
- RevokeIdentity, DeleteNexusEndpoint, RemoveSearchAttribute,
DeprecateNamespace, DeleteDeploymentVersion, UnsetCurrent.
- Schedule full update + trigger + matching-times.
13 new HTTP routes
GET /v1/tasks/settings
DELETE /v1/tasks/namespaces/{ns}
POST /v1/tasks/namespaces/{ns}/schedules/{id} (full update)
POST /v1/tasks/namespaces/{ns}/schedules/{id}/trigger
GET /v1/tasks/namespaces/{ns}/schedules/{id}/matching-times
POST /v1/tasks/namespaces/{ns}/deployments/{name}/set-current
DELETE /v1/tasks/namespaces/{ns}/deployments/{name}/versions/{buildId}
GET /v1/tasks/namespaces/{ns}/archival
GET /v1/tasks/namespaces/{ns}/workflows/{id}/executions
GET /v1/tasks/namespaces/{ns}/task-queues/{q}/partitions
GET /v1/tasks/namespaces/{ns}/workers/{identity}
DELETE /v1/tasks/namespaces/{ns}/nexus/{id}
DELETE /v1/tasks/namespaces/{ns}/identities/{email}
DELETE /v1/tasks/namespaces/{ns}/search-attributes/{name}
Tests
go test ./pkg/tasks/... -race -count=1 → PASS, +22 new tests
(cross-org keyspace isolation, query non-widening, reserved attrs,
pendingQuery bounds, TTL eviction, Identifier validation, persistence
cross-restart). go vet clean.
UI bundle (synced)
Canonical Hanzo H mark in HanzoMark.tsx replaces stylized H rectangle.
useSettings() hook gates write actions when namespaceWriteDisabled,
archival/heartbeats/advanced-visibility flags. New inverse buttons
(worker stop, identity revoke, search-attr delete, deployment unset,
batch terminate confirm).
|
||
|
|
fdb4067b4c |
feat(auth): JWT validation against IAM JWKS, strip+mint identity
tasksd is now self-sufficient multi-tenant: no gateway dependency required. Every inbound request has client-supplied X-Org-Id / X-User-Id / X-User-Email stripped unconditionally; if Authorization: Bearer <jwt> is present, the token is validated against the configured JWKS (TASKSD_JWKS_URL), checked against issuer/audience, and identity headers are minted from validated claims. Closes the spoofable-identity hole on tasks-api.hanzo.ai: any request with a self-set X-Org-Id previously passed through and got that org's scoped engine. Env: TASKSD_JWKS_URL e.g. https://hanzo.id/.well-known/jwks TASKSD_JWT_ISSUER e.g. https://hanzo.id TASKSD_JWT_AUDIENCE optional TASKSD_REQUIRE_IDENTITY=true rejects unauthenticated requests |
||
|
|
7380fed152 |
Wire worker_commands namespace capability (#10084)
## What Wire the new `worker_commands` namespace capability to the existing `WorkerCommandsEnabled` dynamic config flag. Also bumped the API version. ## Why SDKs need this capability to know when to create the implicit control task queue and poller for receiving worker commands (temporalio/api#771). ## How did you test it? Unit tests --------- Co-authored-by: Hanzo Dev <[email protected]> |
||
|
|
30e70000eb |
feat: native engine + @hanzo/ui shell (full Temporal Cloud parity)
Engine (pkg/tasks):
- store.go — KV layer over luxfi/database memdb (snapshot-and-iterate
list to avoid RWMutex upgrade deadlock)
- types.go — wire types: Namespace, WorkflowExecution, Schedule,
BatchOperation, Deployment, NexusEndpoint, Identity
- engine.go — domain ops: register/list/describe ns; start/list/
describe/cancel/terminate/signal workflow; create/list/
describe/delete/pause/unpause schedule; start/list/
describe batch; create/list deployment; create/list
nexus endpoint; grant/list identity; cron sweeper goroutine
- embed.go — every ZAP opcode (0x0060-0x0090) + every HTTP route
dispatches through the same model funcs; no drift
HTTP surface (browser-only JSON shim, ZAP is the canonical wire):
GET /v1/tasks/namespaces
POST /v1/tasks/namespaces
GET /v1/tasks/namespaces/{ns}
GET /v1/tasks/namespaces/{ns}/workflows
POST /v1/tasks/namespaces/{ns}/workflows
GET /v1/tasks/namespaces/{ns}/workflows/{id}
POST /v1/tasks/namespaces/{ns}/workflows/{id}/cancel
POST /v1/tasks/namespaces/{ns}/workflows/{id}/terminate
POST /v1/tasks/namespaces/{ns}/workflows/{id}/signal
GET /v1/tasks/namespaces/{ns}/schedules
POST /v1/tasks/namespaces/{ns}/schedules
GET /v1/tasks/namespaces/{ns}/schedules/{id}
DELETE /v1/tasks/namespaces/{ns}/schedules/{id}
POST /v1/tasks/namespaces/{ns}/schedules/{id}/pause
POST /v1/tasks/namespaces/{ns}/schedules/{id}/unpause
GET /v1/tasks/namespaces/{ns}/batches
POST /v1/tasks/namespaces/{ns}/batches
GET /v1/tasks/namespaces/{ns}/batches/{id}
GET /v1/tasks/namespaces/{ns}/deployments
POST /v1/tasks/namespaces/{ns}/deployments
GET /v1/tasks/namespaces/{ns}/nexus
POST /v1/tasks/namespaces/{ns}/nexus
GET /v1/tasks/namespaces/{ns}/identities
POST /v1/tasks/namespaces/{ns}/identities
UI (full Temporal Cloud parity):
- @hanzo/ui primitives in src/components/ui/{button,card,tabs,badge,
alert,dialog,input,label,skeleton,dropdown-menu}.tsx — same shadcn
pattern @hanzo/ui itself uses; CSS tokens from @hanzo/ui design system
- App.tsx: sidebar layout (Workflows/Schedules/Batches/Deployments/
Namespaces/Nexus/Support) with top bar (UTC clock, theme toggle,
account chip, ns indicator, embedded badge)
- pages/Namespaces.tsx + pages/NamespaceDetail.tsx — list + detail w/
Overview+Identities tabs, Region/Retention/APS cards, Connect
dropdown showing ZAP+HTTP endpoints with copy buttons, Active badge
- pages/Workflows.tsx — list + Start Workflow dialog (real POST)
- pages/WorkflowDetail.tsx — execution details
- pages/Schedules.tsx — list w/ cron / interval describe
- pages/Batches.tsx — list + Start Batch dialog (operation enum)
- pages/Deployments.tsx — list of worker version series
- pages/Nexus.tsx — list of cross-ns endpoints
- pages/Support.tsx — 4 cards linking to docs / GitHub / health
- ThemeToggle (light/dark, persisted), UTCClock (live ticker),
AccountChip (popover w/ identity + sign out)
Binary: 7.5 MB. Workflow execution semantics (deterministic replay of
user code) still pending — engine records state and tracks history len
on signals, but does NOT run user-supplied workflow goroutines yet.
Worker SDK runtime is the next phase.
|
||
|
|
aa83a0a1d2 |
rip: delete temporal fork — native ZAP-only tasksd
Goes from 135 MB binary with 1153 files importing go.temporal.io and 224
importing google.golang.org/grpc to a 10 MB native binary with ZERO of
either.
Deleted:
- tasks/, tasktests/, service/, chasm/, client/, api/, proto/, tools/
- cmd/tools/, components/, docker/
- schema/{cassandra,elasticsearch,mysql,postgresql,sqlite}/
- 40 tainted common/ subdirs + 7 top-level common files
- tests/testutils (no longer referenced after surviving deps drop common)
New cmd/tasksd (~100 lines) boots tasks.Embed (zap.Node) + http.Server.
New pkg/tasks/embed.go registers ZAP handlers for the SDK opcode surface
(0x0060-0x00A5). Workflow handlers return a 501 "not yet implemented"
envelope; native engine lands behind this contract.
Build: go build ./cmd/tasksd → 10 MB
Vet: go vet ./... → clean
Boot: tasksd --zap-port 9999 --http :7243
Probes: /healthz, /v1/tasks/health → 200
UI: /_/tasks/, / → 200 (embedded Vite bundle)
ZAP: _tasks._tcp on :9999 (mDNS disabled; direct connect)
go.mod: tidy. No go.temporal.io. No google.golang.org/grpc.
|
||
|
|
0601cbfe26 |
time-skipping propagation (#10013)
## What changed and Why? Paired with [api change](https://github.com/temporalio/api/pull/770/changes) Define the default time-skipping propagation behavior for current features: continue-as-new (CAN), child workflows, retry, and reset. **Group 1 — Inherit both from the current execution:** - Continue-as-new (CAN): inherits the current config and accumulated skipped duration; the configured bound is shared across both the inherited skipped duration and any duration skipped by the new run. - Child workflows: same behavior as CAN This design is because CAN is a technical reason to start a new run of current run, so logically they can be viewed as a same "run". For Child WFs they can be viewed as an extension of previous workflows or separate workflows, and in either case, they shall inherit the skipped duration so that the virtual time doesn't rewind back, and the default behavior is designed to treat them as an extension of the parent and share the config. We only consider adding new config to provide flexibility on demand. **Group 2 — Inherit from a specific point in history:** - Retry: inherits the config and skipped duration recorded in the StartWorkflowExecutionEvent of the current workflow, since retry is defined as restarting execution from that event - Cron: same with Retry **Group3 -- Both inherit from a specific point and catch up of config change to current** - Reset: retains the current time-skipping config, since reset is designed to replay all events up to the reset point and apply any UpdateWorkflowExecutionOptions changes made after that point — with no option to exclude them (covered by tests only) ## How did you test it? - [x] built - [x] run locally and tested manually - [x] covered by existing tests - [x] added new unit test(s) - [x] added new functional test(s) |
||
|
|
8ac3d89aa0 |
Update to API v1.62.11 (#10056)
## What changed? Update to latest `go.temporal.io/api` release ## Why? Prepare for releases ## How did you test it? - [ ] built - [ ] run locally and tested manually - [ ] covered by existing tests - [ ] added new unit test(s) - [ ] added new functional test(s) |
||
|
|
f8e2ad0e24 |
Add start delay support for standalone activities (#10008)
## What changed? Added StartDelay support for standalone activities, mirroring the existing WithStartDelay behavior on StartWorkflowExecution. - New start_delay field on ActivityState proto to persist the delay for retry deadline calculations. - TransitionScheduled defers the ActivityDispatchTask and extends ScheduleToStart and ScheduleToClose timeout timers by the delay duration. StartToClose and Heartbeat timeouts are unaffected. - Validation rejects negative durations; nil/zero means no delay. - Changed hasEnoughTimeForRetry to include start delay in the ScheduleToClose deadline: ScheduleTime + StartDelay + ScheduleToCloseTimeout. Without this, retries were rejected prematurely by StartDelay seconds. ## Why? Start delay is required for standalone activities to support deferred execution: scheduling work to run after a specified delay. This is a core capability that workflow start delay already provides, and standalone activities need parity. ## How did you test it? - [X] built - [X] run locally and tested manually - [X] covered by existing tests - [X] added new unit test(s) - [X] added new functional test(s) |
||
|
|
d1416bf492 | Nexus Standalone: assorted post-merge cleanup | ||
|
|
67fc8ae8b0 |
Stub Nexus Standalone APIs (#10042)
WISOTT |
||
|
|
5c1ed02cfc |
feat(sdk/activity): native call-site helpers, zero upstream deps
Implements pkg/sdk/activity: GetInfo, GetLogger, RecordHeartbeat plus the Scope / NewContext / FromContext contract that workers use to inject a per-task execution context. - Info, WorkflowExecution types matching the caller surface in base/commerce/ta (no upstream type aliases). - Scope is worker-owned; exposes Logger, HeartbeatSink, and a goroutine-safe Heartbeats() inspector for tests. - Context key is a private distinct-type struct (collision + impersonation safe). - GetInfo returns a deep copy (TaskToken []byte copied) -- activity code cannot mutate the scope's stored token. - RecordHeartbeat defensive-copies caller details before capture and forwards to the worker's HeartbeatSink (luxfi/zap transport at that layer). - Nil-safe fail-closed defaults: GetLogger -> log.Noop, GetInfo -> zero, RecordHeartbeat -> no-op when ctx carries no scope. Tests cover round-trip, TaskToken isolation, nil scope paths, logger field propagation (asserts JSON output contains bound fields), sink forwarding, defensive copy, concurrent heartbeat recording, and Heartbeats() snapshot independence. All 14 tests pass under -race. Imports: stdlib + github.com/luxfi/log only. Zero go.temporal.io, zero google.golang.org/grpc. |
||
|
|
cad381cde2 |
feat: kill gRPC-Gateway — gofiber + /v1/tasks/* only
External HTTP surface is now one path prefix: /v1/tasks/*. The
runtime.ServeMux + JSON-over-gRPC transcoding layer is gone.
Browsers get JSON here because they have to; every other caller
uses the ZAP binary transport on :9652 (_tasks-sdk._tcp).
Backend:
- service/frontend/http_api_server.go rewritten around gofiber
v3. Four read routes wired directly to WorkflowHandler
methods via Go function calls — no gRPC codec, no inline
client conn, no grpc-gateway registration:
GET /v1/tasks/healthz
GET /v1/tasks/namespaces
GET /v1/tasks/namespaces/:ns/workflows
GET /v1/tasks/namespaces/:ns/workflows/:id
GET /v1/tasks/namespaces/:ns/schedules
Embedded SPA catches everything else for client-routed deep
links.
- fx.go: operatorHandler, grpcServerOptions.UnaryInterceptors,
*mux.Router kept as accepted-but-unused until the fx graph
can be pruned (next commit). No runtime dependency on them.
- Response marshalling: protojson.MarshalOptions. The request
and response types are still go.temporal.io/api protos; task
#41 replaces them with ZAP schemas end-to-end.
UI:
- Every fetch URL flips /api/v1/ → /v1/tasks/.
- @hanzogui/lucide-icons-2 → lucide-react. The hanzo-gui
package was pulling react-native transitively and Vite 8 /
rolldown chokes on Flow syntax. lucide-react is the same
icon set, pure React, no native shim.
- vite.config.ts proxies /v1/tasks → :7234 so the SPA can use
relative URLs in dev.
Verified: /v1/tasks/namespaces returns "default" namespace over
the gofiber path with gRPC-Gateway unloaded from the binary.
|