Repository navigation
feat(workflow)!: carry the manifest version through every workflow - #322
Merged
Merged
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
This was referenced Oct 20, 2026
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 23, 2026 09:22
189b003 to
8ab1233
Compare
lokewate
changed the base branch from
feat/manifestcheck
to
feat/manifest-on-demand
October 23, 2026 09:22
13 of 17 tasks
lokewate
marked this pull request as ready for review
October 23, 2026 09:57
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 23, 2026 16:09
8ab1233 to
32b3d0e
Compare
mushrafmim
force-pushed
the
feat/manifest-version-engine
branch
from
October 24, 2026 19:20
32b3d0e to
aea2015
Compare
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 25, 2026 05:00
aea2015 to
c3098d3
Compare
mushrafmim
force-pushed
the
feat/manifest-version-engine
branch
from
October 26, 2026 14:38
c3098d3 to
ba2d581
Compare
mushrafmim
previously approved these changes
Oct 26, 2026
lokewate
dismissed
mushrafmim’s stale review
October 27, 2026 02:43
The merge-base changed after approval.
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 27, 2026 02:43
ba2d581 to
bd4a9eb
Compare
mushrafmim
previously approved these changes
Oct 27, 2026
lokewate
dismissed
mushrafmim’s stale review
October 27, 2026 03:49
The merge-base changed after approval.
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 27, 2026 03:49
bd4a9eb to
114d877
Compare
A host starts each top-level workflow with VarManifestVersion (_manifest_version) set to the artifact manifest version current at that moment. The engine carries it unchanged to every child workflow and reports it to the host wherever the host resolves templates: - ActivationRef and TaskPayload carry ManifestVersion, so every task activation names it. - FetchWorkflowDefinitionActivity takes it as a second argument, and DefinitionHandler is func(manifestVersion, templateID), so a dynamic split's branches come from the calling workflow's manifest. - AdminParkPayload carries it, so a park handler can show the parked node's template from the flow's own manifest. - Dynamic-split children get the variable explicitly. Batch and parallel children already copy the engine's underscore variables. The variable round-trips through Temporal's JSON, so a whole number that comes back as a float64 is read as the integer. Anything that is not a positive whole number counts as no version (0). The engine never resolves artifacts itself. BREAKING CHANGE: RegisterDefinitionHandler takes a DefinitionHandler (manifestVersion, templateID), and FetchWorkflowDefinitionActivity takes the version as a second argument. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lokewate
force-pushed
the
feat/manifest-version-engine
branch
from
October 27, 2026 03:56
114d877 to
e978bad
Compare
mushrafmim
approved these changes
Oct 27, 2026
Aravinda-HWK
approved these changes
Oct 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A host starts each top-level workflow with
VarManifestVersion(_manifest_version) set to the artifact manifest version current at that moment. The engine carries it unchanged to every child workflow and reports it to the host wherever the host resolves templates. The engine never resolves artifacts itself, so this PR does not depend on theartifactchanges before it.Stack
Manifest versioning, in five PRs to review and merge in order. Each one builds and passes its tests on its own.
#320 (validate every artifact a manifest lists) and #321 (
manifestcheck) are parked: pinning doesn't need them, and a release job can bring validation back later.Type of Change
Changes Made
ActivationRefandTaskPayloadcarryManifestVersion, so every task activation names it.FetchWorkflowDefinitionActivitytakes the version as a second argument, andRegisterDefinitionHandlertakes aDefinitionHandler(manifestVersion, templateID), so a dynamic split's branches come from the calling workflow's manifest.AdminParkPayloadcarries the version, so a park handler can show the parked node's template from the flow's own manifest.float64is read as the integer. Anything that is not a positive whole number counts as no version (0).RegisterDefinitionHandlerandFetchWorkflowDefinitionActivitysignatures. taskflow's test mock is updated to match.Testing
Run with
go test -race ./workflow/. The tests cover the version reaching every task activation in batch and parallel children, and the dynamic split's fetch and branches. A mutation check confirmed that dropping it from the split's children fails the test. They also covermanifestVersion()value forms (int, float64, json.Number, negative, fractional and string) and the admin park payload.Checklist
Related Issues
Part of OpenNSW/one-trade-artifacts#243. Host: OpenNSW/nsw-srilanka#660.
Screenshots/Demo
N/A
🤖 Generated with Claude Code