chore(sdkx): bump sdk to v0.2.3 + deprecate knowledge/watcher for v0.3.0#48
Merged
Conversation
sdk/v0.2.3 was cut from main by auto-tag right after PR #47 merged and contains the pod-runtime errdefs/telemetry convergence: the hoisted errdefs.ClassifyProviderError dispatcher, the AttrXxx telemetry constants, the chain-terminal NotAvailable wrapping, and the ctx.Err() normalisation via errdefs.FromContext. The sdkx changes that *adopted* those new sdk APIs (sdkx/llm, sdkx/embedding, sdkx/retrieval/{sqlite,postgres}, sdkx/recall/jobqueue/sqlite) all shipped inside that same merge as local imports, but sdkx/go.mod was deliberately left at v0.2.2 in PR #47 (via [skip-tag:sdkx]) so that the bump and the corresponding sdkx tag could be cut as one atomic chore. This is that chore. Mechanics: go get github.com/GizClaw/flowcraft/sdk@v0.2.3 go mod tidy go.sum side-effect: github.com/expr-lang/expr v1.17.8 falls out of the indirect set. sdkx never directly imports sdk/graph (only errdefs, llm, telemetry, retrieval, recall, embedding), so expr — which is sdk/graph's edge-condition compiler — was always a spurious transitive in sdkx/go.sum that earlier tidies happened to keep around. v0.2.2..v0.2.3 contains zero changes to sdk/go.mod, which means this is purely a tidy hygiene fix triggered by re-resolving the dep graph; no sdkx code path observed it before or after. After this merges, auto-tag is expected to cut sdkx/v0.2.2 against the merge commit (no skip marker; sdkx is the only module touched). voice and bench remain on their existing pins; they will be bumped on their own cadence. Verified: go build ./... + go test ./... in sdkx all green. Made-with: Cursor
…ion map
Every type this package consumes from sdk/knowledge — *FSStore,
ChangeNotifier, NewReloader — has been //Deprecated in
sdk/knowledge/deprecated.go and is scheduled for removal in
sdk/v0.3.0. Once those go away this adapter cannot compile against
the new sdk, so the package will be dropped entirely. Add the
deprecation notice now so downstream callers have a release window
to plan, instead of being surprised by a hard break the moment
sdk/v0.3.0 lands.
The replacement is architecturally different — sdk's v0.3.0
EventNotifier emits typed knowledge.ChangeEvent values
(DatasetID / DocName / Kind) rather than opaque struct{} ticks, and
pairs with NewEventReloader (scope-aware, serialised). That means
no in-place upgrade is possible; call sites have to be rewritten
against factory.NewLocal + a typed EventNotifier impl + the new
EventReloader. The package doc spells out the migration shape.
A typed fsnotify-backed EventNotifier replacement will ship inside
sdkx itself post-v0.3.0; until then the deprecated package keeps
working against sdk/v0.2.x consumers and is the recommended bridge
for them. The notice is calibrated for "removed in sdkx/v0.3.0"
specifically, not "removed now".
Surface marked Deprecated:
- package doc — full migration map + rationale
- type Notifier — points to package doc
- func New(ctx, store) — points to package doc
Method receivers (Events, Close) are not individually annotated:
they implement the deprecated knowledge.ChangeNotifier interface,
so any caller already triggers SA1019 on the type / constructor /
interface; double-annotating the methods adds noise without
catching anything new.
Tests: watcher_test.go is the only in-tree caller of the deprecated
surface and exists exactly to keep the v0.2.x compatibility window
honest. Added //lint:file-ignore SA1019 at the top so static
analysis treats "tests of a deprecated package" as intended rather
than as latent SA1019 hits.
Out of scope for this PR (intentional):
- sdkx/internal/testenv is NOT deleted. It is the active shared
.env loader for sdkx/llm and sdkx/embedding integration tests
(mirrors sdk/knowledge/e2e/internal/testenv on the sdk side).
"internal" here is the Go visibility boundary, not a code-smell
flag, and removing it would silently break those test binaries.
Verified: go build ./... + go vet ./knowledge/watcher/... +
go test ./... in sdkx all green.
Made-with: Cursor
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
Two small changes that belong in the same sdkx release window:
1. Bump
sdkx/go.modfromsdk v0.2.2→v0.2.3Atomic follow-up to PR #47: pick up the just-released
sdk/v0.2.3(cut by auto-tag against the PR #47 merge commit). PR #47 deliberately suppressed sdkx's auto-tag via[skip-tag:sdkx]so that the dep bump and the corresponding sdkx tag could be cut as one self-contained chore — this commit is the dep-bump half. The sdkx code that adopted the new sdk APIs (errdefs.ClassifyProviderError,telemetry.AttrXxx,errdefs.NotAvailablewrapping in retrieval/recall storage paths, etc.) already shipped inside the PR #47 merge using the local module imports; this commit only switches the published dep coordinate.Mechanics:
go.sumside-effect:github.com/expr-lang/expr v1.17.8falls out of the indirect set. sdkx never directly importssdk/graph(onlyerrdefs,llm,telemetry,retrieval,recall,embedding), soexpr—sdk/graph's edge-condition compiler — was always a spurious transitive that earlier tidies happened to keep around.sdk/v0.2.2..v0.2.3contains zero changes tosdk/go.mod, so this is purely a re-tidy artefact, not a behaviour change.2. Deprecate
sdkx/knowledge/watcherfor sdkx/v0.3.0Every type this package consumes from
sdk/knowledge—*FSStore,ChangeNotifier,NewReloader— has been marked// Deprecated:insdk/knowledge/deprecated.goand is scheduled for removal insdk/v0.3.0. Once those go awaysdkx/knowledge/watchercannot compile against the new sdk, so the package will be dropped entirely insdkx/v0.3.0.The replacement is architecturally different: sdk's v0.3.0
EventNotifieremits typedknowledge.ChangeEventvalues (DatasetID/DocName/Kind) rather than opaquestruct{}ticks, and pairs withNewEventReloader(scope-aware, serialised). No in-place upgrade is possible — call sites have to be rewritten againstfactory.NewLocal+ a typedEventNotifierimpl + the newEventReloader. The package doc spells out the migration shape so downstream callers have a release window to plan instead of being surprised by the v0.3.0 hard break.Surface marked
// Deprecated::type Notifier(points to package doc)func New(ctx, store)(points to package doc)Interface-method receivers (
Events,Close) are not individually annotated — any caller already trips SA1019 on the constructor / type / the deprecatedknowledge.ChangeNotifierinterface they implement, so double-annotating adds noise without catching anything new.watcher_test.gois the only in-tree caller of the deprecated surface and exists exactly to keep the v0.2.x compatibility window honest. Added//lint:file-ignore SA1019at the top so static analysis treats "tests of a deprecated package" as intended.A typed fsnotify-backed
EventNotifierreplacement will ship inside sdkx itself post-v0.3.0; until then the deprecated package keeps working againstsdk/v0.2.xand is the recommended bridge for them.Out of scope (intentional)
sdkx/internal/testenvis NOT deleted. It is the active shared.envloader forsdkx/llm/provider_integration_test.goandsdkx/embedding/embedding_integration_test.go(mirrorssdk/knowledge/e2e/internal/testenvon the sdk side).internalhere is the Go visibility boundary, not a code-smell flag; removing it would silently break those integration test binaries.voice/go.modstill pinssdk v0.2.2;bench/go.modpinsv0.2.0;examples/chatbot-with-recalluses areplaceon the local sdk. They will be bumped on their own cadence — this round is sdkx-only by user scope.Auto-tag policy after merge
.github/workflows/auto-tag.ymlwill see onlysdkx/**change in the merge commit, find no skip marker, and cutsdkx/v0.2.2(next patch aftersdkx/v0.2.1) against the merge commit.sdk/andvoice/will be untouched (no diff under those prefixes).Test plan
go build ./...green insdkx/againstsdk@v0.2.3.go vet ./knowledge/watcher/...clean (file-level SA1019 ignore in the test file is the only suppression).go test ./...green insdkx/(no FAIL lines), watcher tests included.sdkx/v0.2.2and that nosdk/orvoice/tag was created.