Repository navigation
Conversation
An artifact source publishes manifest_v1.json, manifest_v2.json, … and artifact.Set keeps one Registry per version. A published manifest and the files it lists never change: a change is a new file plus a new manifest. A flow records Set.Current() when it starts and resolves every artifact through Set.Registry(ctx, version), so a deploy never changes the templates of a running flow. - LoadSet probes manifest_v1.json upward until the loader reports one missing; any other error fails it. The highest version is current unless WithPinnedVersion names an older one, and with a pin only manifests up to it are read. - RegisterFromConfig rejects two rows with the same id, kind and version. LoadSet rejects an explicitly versioned row whose path differs between manifests, and GetExplicit serves such a row outside any flow. - Latest returns a manifest's unversioned row even when the manifest also lists explicit versions. BREAKING CHANGE: ManifestFilename gives way to ManifestPath(v), LoadManifest takes a version, and workflowdef.LoadVersion is removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replicas load their sets at different times, so a flow pinned by a replica that started after a manifest was published can run its next step on a replica that started before it. Set.Registry now loads a version above the highest it has, and GetExplicit probes for a newer manifest when no loaded one lists the version asked for. A probe fetches only up to the version asked for, so a broken later manifest cannot fail it, and holds no lock that lookups of loaded versions wait on. After a probe that fails or finds nothing it waits 10s before probing again, so retries of a pinned flow do not each cost a loader round trip. Current does not move until the set is reloaded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Set.Validate fetches every artifact a manifest version lists and runs the Check for its kind, reporting every missing file, malformed artifact and dangling reference at once. Run on the current version at startup, it stops a deploy on a broken manifest instead of the first flow that reaches the broken artifact. Each core adapter gains a Check, collected in corechecks.Checks(): - a task template must name a listed workflow and render config; - a workflow's TASK nodes must name a listed task or step template; - a split that runs one template for every branch must name a listed workflow; - a render config's sections must name listed templates. adapter/kinds holds the core kind constants, so adapters that point at each other share them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This was referenced Oct 20, 2026
lokewate
force-pushed
the
feat/manifest-on-demand
branch
from
October 23, 2026 09:22
4a01b8c to
07c2adc
Compare
13 of 17 tasks
Contributor
Author
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
Set.Validatefetches every artifact a manifest version lists and runs theCheckfor its kind. It reports every missing file, malformed artifact and dangling reference at once. A host runs it on the current version at startup, so a broken manifest stops the deploy instead of the first flow that reaches the broken artifact.Stack
Manifest versioning, split into six PRs to review and merge in order. Each one builds and passes its tests on its own.
Type of Change
Changes Made
Set.Validate(ctx, v, checks)and theCheck/Checks/Reftypes.Checkfor each core adapter, collected incorechecks.Checks():adapter/kindsholds the core kind constants, so adapters that point at each other share them. Each adapter'sKindis now an alias of its constant; the values are unchanged.corechecks.Checks()returns.Testing
Run with
go test -race ./artifact/.... The tests coverValidatepassing, reporting several problems together and refusing an unknown version, and each adapter'sCheck, including a DIFFERENT_TEMPLATES split being skipped and render-config sections.Checklist
Related Issues
Hosts: OpenNSW/nsw-srilanka#660. Artifacts: OpenNSW/one-trade-artifacts#156.
Screenshots/Demo
N/A
Additional Notes
template_ids.🤖 Generated with Claude Code