--- id: custodian-WP-0001 type: workplan domain: custodian repo: activity-core status: done state_hub_workstream_id: e22516cc-4fdf-4dad-a928-a9e04a9fa7c7 tasks: - id: T01 title: Define event envelope schema status: done state_hub_task_id: 3dc749eb-7a73-4199-9c8d-e8f31bac5372 - id: T02 title: Write ActivityDefinition schema (Pydantic + JSON Schema) status: done state_hub_task_id: 107115b0-4476-424d-84ff-03992a85d40b - id: T03 title: Document idempotency contract status: done state_hub_task_id: aa638595-0bca-41ab-b140-b077d05994e1 - id: T04 title: Define Temporal namespace and task queue naming conventions status: done state_hub_task_id: a03c823e-5873-4586-912a-6d1370383c7b - id: T05 title: Stand up Temporal via docker-compose status: done state_hub_task_id: 70e7f742-378f-4129-a0f4-f25ccaccffd0 - id: T06 title: Add docker-compose.dev.yml to repo status: done state_hub_task_id: 61cb7426-e0ec-4a52-870d-18a26b3c4f3e - id: T07 title: Smoke test Temporal cluster and UI status: done state_hub_task_id: f28a405d-ddcc-44d8-b443-f26f3ab34eaa - id: T08 title: Choose and configure DB migration tool status: done state_hub_task_id: d9fe3e54-ec1a-4e23-aa76-d8869f4e024d - id: T09 title: Write activity_definitions migration status: done state_hub_task_id: 47774e01-1026-478e-9a46-7d676bfed45c - id: T10 title: Write activity_runs migration status: done state_hub_task_id: 0a74f29f-c07d-4338-be90-e5cf4087261b - id: T11 title: Write task_instances migration status: done state_hub_task_id: 491a6903-8189-43bb-958f-4d16abc84f8e - id: T12 title: Seed one example ActivityDefinition status: done state_hub_task_id: f24662ff-4a26-48bd-b997-57e7586c7f11 - id: T13 title: Scaffold Python worker project status: done state_hub_task_id: e0205c56-1d40-4142-952b-e27ff6a44e1d - id: T14 title: Implement load_activity_definition activity status: done state_hub_task_id: b05f046f-a6ba-4d96-a298-a0bbea067427 - id: T15 title: Implement resolve_context activity (stub) status: done state_hub_task_id: 2417912f-845d-489a-ace4-fb9280d3b679 - id: T16 title: Implement evaluate_templates (pure function) status: done state_hub_task_id: b7decbb6-ad2b-4fa5-8efc-05a7eb435d76 - id: T17 title: Implement log_run activity status: done state_hub_task_id: e019cb5a-adf0-4a5d-9410-c41810128190 - id: T18 title: Implement RunActivityWorkflow status: done state_hub_task_id: fb6b3440-47d2-4b0a-97c1-6e780cc497c4 - id: T19 title: Implement TaskExecutorWorkflow (stub) status: done state_hub_task_id: 70a7365f-3042-4770-b3cd-3c6724b0790d - id: T20 title: Wire up worker entrypoint status: done state_hub_task_id: 1da921f5-86a8-488f-a015-402079194e10 - id: T21 title: Manual end-to-end test status: done state_hub_task_id: f72bba1a-eb24-496e-9498-f4676facc5c9 --- # activity-core Foundation — Temporal Backbone **Workstream:** activity-core Foundation — Temporal Backbone **Hub ID:** `e22516cc-4fdf-4dad-a928-a9e04a9fa7c7` ## Purpose Build the first working slice of `activity-core`: contracts, a self-hosted Temporal cluster, PostgreSQL schema, and the `RunActivityWorkflow` end-to-end. Deliverable: a manually-triggered workflow that loads an `ActivityDefinition`, resolves context, evaluates task templates, spawns child workflows, and writes a run log — all durable and observable via Temporal Web UI. ## Architecture reference `wiki/ActivityCorePlan_chtgpt.md` and `wiki/ActivityCorePlan_grok.md` — both converge on Temporal self-hosted · Python SDK · PostgreSQL. | Concept | Implementation | |---|---| | `ActivityDefinition` | Versioned Postgres record: trigger config, context sources, task templates | | Activity Orchestrator | `RunActivityWorkflow` — durable Temporal workflow | | `TaskInstance` | Child `TaskExecutorWorkflow` (stub in this workstream) | | Idempotency | Workflow ID = `activity_id + ":" + scheduled_for` | ## Open decisions (resolve before Phase 1) - **Dev deployment target** (hub: `9672adcc-da86-4038-9263-b556789c109e`): Docker Compose vs K8s — proto-plans recommend Docker Compose for the initial dev slice. --- ## Phase 0 — Contracts & Conventions | Task | Priority | Hub task ID | |---|---|---| | T01: Define event envelope schema | high | `3dc749eb-7a73-4199-9c8d-e8f31bac5372` | | T02: Write ActivityDefinition schema (Pydantic + JSON Schema) | high | `107115b0-4476-424d-84ff-03992a85d40b` | | T03: Document idempotency contract | high | `aa638595-0bca-41ab-b140-b077d05994e1` | | T04: Define Temporal namespace + task queue naming conventions | high | `a03c823e-5873-4586-912a-6d1370383c7b` | --- ## Phase 1 — Temporal Cluster (dev) | Task | Priority | Hub task ID | |---|---|---| | T05: Stand up Temporal via docker-compose | high | `70e7f742-378f-4129-a0f4-f25ccaccffd0` | | T06: Add docker-compose.dev.yml to repo | high | `61cb7426-e0ec-4a52-870d-18a26b3c4f3e` | | T07: Smoke test Temporal cluster and UI | high | `f28a405d-ddcc-44d8-b443-f26f3ab34eaa` | --- ## Phase 2 — App DB Schema | Task | Priority | Hub task ID | |---|---|---| | T08: Choose and configure DB migration tool | high | `d9fe3e54-ec1a-4e23-aa76-d8869f4e024d` | | T09: Write activity_definitions migration | high | `47774e01-1026-478e-9a46-7d676bfed45c` | | T10: Write activity_runs migration | high | `0a74f29f-c07d-4338-be90-e5cf4087261b` | | T11: Write task_instances migration | high | `491a6903-8189-43bb-958f-4d16abc84f8e` | | T12: Seed one example ActivityDefinition | medium | `f24662ff-4a26-48bd-b997-57e7586c7f11` | --- ## Phase 3 — RunActivityWorkflow | Task | Priority | Hub task ID | |---|---|---| | T13: Scaffold Python worker project | medium | `e0205c56-1d40-4142-952b-e27ff6a44e1d` | | T14: Implement load_activity_definition activity | medium | `b05f046f-a6ba-4d96-a298-a0bbea067427` | | T15: Implement resolve_context activity (stub) | medium | `2417912f-845d-489a-ace4-fb9280d3b679` | | T16: Implement evaluate_templates (pure function) | medium | `b7decbb6-ad2b-4fa5-8efc-05a7eb435d76` | | T17: Implement log_run activity | medium | `e019cb5a-adf0-4a5d-9410-c41810128190` | | T18: Implement RunActivityWorkflow | medium | `fb6b3440-47d2-4b0a-97c1-6e780cc497c4` | | T19: Implement TaskExecutorWorkflow (stub) | medium | `70a7365f-3042-4770-b3cd-3c6724b0790d` | | T20: Wire up worker entrypoint | medium | `1da921f5-86a8-488f-a015-402079194e10` | | T21: Manual end-to-end test | medium | `f72bba1a-eb24-496e-9498-f4676facc5c9` | --- ## Completion criteria Trigger `RunActivityWorkflow` manually → workflow completes in Temporal UI → `activity_runs` row written → `task_instances` rows written. Zero scheduler or queue infrastructure required.