Skip to content

Commit 3eccdd3

Browse files
committed
Add spec-conformance notes
1 parent 1248ef1 commit 3eccdd3

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

cross-sdk-design.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1972,6 +1972,42 @@ workflow_id: Optional[str]
19721972

19731973
## 5. Serialization context (TODO)
19741974

1975+
## 6. Python Implementation Notes (Current Status)
1976+
1977+
The following discrepancies exist between the spec above and the current Python SDK implementation:
1978+
1979+
### Intentionally Deferred (Would Require Significant Work)
1980+
1981+
1. **`GetActivityResultInput` and `get_activity_result` interceptor method**: Not implemented. The current implementation caches the result directly in `ActivityHandle._known_outcome` and doesn't expose a separate interceptor point for getting results. Adding this would require refactoring the result caching logic.
1982+
1983+
2. **`ActivityExecutionDescription` does not extend `ActivityExecution`**: Python frozen dataclasses don't support inheritance well. The two classes are separate with duplicated fields. This is a stylistic difference that doesn't affect functionality.
1984+
1985+
3. **Overload methods `start_activity_class`, `start_activity_method`, `execute_activity_class`, `execute_activity_method`**: Not implemented. Only the base `start_activity` and `execute_activity` methods exist. These additional overloads would provide better type inference for class-based and method-based activity definitions.
1986+
1987+
### Missing Fields
1988+
1989+
1. **`ActivityExecution.state_transition_count: Optional[int]`**: Removed from implementation. The spec says it should be present (though not always populated).
1990+
1991+
2. **`ActivityExecutionDescription.eager_execution_requested: bool`**: Missing from implementation.
1992+
1993+
3. **`ActivityExecutionDescription.paused: bool`**: Missing from implementation.
1994+
1995+
4. **`ActivityExecutionCountAggregationGroup.group_values`**: Spec says `Sequence[temporalio.common.SearchAttributeValue]`, implementation uses `Sequence[Any]`.
1996+
1997+
### Implemented Correctly
1998+
1999+
- All `ActivityIDReusePolicy`, `ActivityIDConflictPolicy`, `ActivityExecutionStatus` enums
2000+
- `ActivityHandle` with `activity_id`, `activity_run_id`, `result()`, `describe()`, `cancel()`, `terminate()`
2001+
- `ActivityExecution` with core fields (except `state_transition_count`)
2002+
- `ActivityExecutionDescription` with most fields (except `eager_execution_requested`, `paused`)
2003+
- `ActivityExecutionAsyncIterator` for listing
2004+
- `ActivityExecutionCount` and `ActivityExecutionCountAggregationGroup`
2005+
- `Client.start_activity()`, `execute_activity()`, `get_activity_handle()`, `list_activities()`, `count_activities()`
2006+
- `OutboundInterceptor` methods: `start_activity`, `describe_activity`, `cancel_activity`, `terminate_activity`, `list_activities`, `count_activities`
2007+
- All input dataclasses: `StartActivityInput`, `DescribeActivityInput`, `CancelActivityInput`, `TerminateActivityInput`, `ListActivitiesInput`, `CountActivitiesInput`
2008+
- `activity.Info` changes: `namespace`, `activity_run_id`, `in_workflow` property, optional workflow fields
2009+
- `AsyncActivityIDReference.workflow_id` is now `Optional[str]`
2010+
19752011
# TypeScript
19762012

19772013
## 1. New module `client.activity-client`

0 commit comments

Comments
 (0)