Skip to content

refactor(op): Unified Method type, ReceiverRegistry, severed starlark (#264) - #269

Merged
David-Noble-at-work merged 1 commit into
developfrom
refactor/extract-starlark-from-op
Mar 27, 2026
Merged

David-Noble-at-work merged 1 commit into
developfrom
refactor/extract-starlark-from-op

Conversation

@David-Noble-at-work

Copy link
Copy Markdown
Contributor

Summary

Phases 5+6 of #264 — sever starlark from pkg/op, consolidate registries, unify method dispatch.

  • Method type (pkg/op/method.go) — unified action implementation replacing four separate types. Implements Action/CompensableAction. DoFunc/UndoFunc closures set by bind during registration. Shared between graph execution and starlark bridges.
  • ReceiverRegistry — stores factories by receiver name and *Method entries by action name. Legacy Register(Action) wraps handwritten actions.
  • ReceiverFactory interface — MethodParams()/MethodParamsFor() on interface, Register(ctx, registry).
  • Starlark severed — Context.Thread → any, MarshalStarvalue removed, ID()/OriginID() exported, factory interfaces in bind.
  • Code generator — single file per provider (no params.gen.go), *args/**kwargs inference, updated templates.

Test plan

  • make clean build test-race passes
  • All providers regenerated via star codegen
  • pkg/op source files: zero go.starlark.net imports
  • devlore-test, lore, star, writ tests pass

…#264)

Phase 5+6: sever starlark from pkg/op, consolidate registries, unify
method dispatch.

Method type (pkg/op/method.go):
- Unified action implementation replacing actionBase, action,
  fallibleAction, compensableAction
- Implements Action and CompensableAction interfaces
- DoFunc/UndoFunc closures set by bind during registration
- MethodKind enum: pure, fallible, compensable
- Shared between graph execution and starlark bridge construction

ReceiverRegistry (pkg/op/registry.go):
- Stores factories (by receiver name) and Methods (by action name)
- RegisterMethod for *Method entries
- Legacy Register path wraps handwritten actions into *Method
- Method() for typed lookup alongside Get() for Action interface

ReceiverFactory interface:
- MethodParams()/MethodParamsFor() on the interface
- Register(ctx, registry) — ctx first
- Generated receivers: single file, inline params, no params.gen.go

Starlark severed from pkg/op:
- Context.Thread: *starlark.Thread → any; bind.ThreadFrom() accessor
- ResourceBase.MarshalStarvalue removed; ID()/OriginID() exported
- PlanningReceiverFactory/ExecutingReceiverFactory moved to bind
- Override removed from both receivers

Code generator:
- params.gen.go.template deleted, params inline in receiver template
- *args/**kwargs inferred from Go types (args []T, kwargs map[string]any)
- ResolveAttr in SKIP_METHODS
- dependent_type template updated
- Register(ctx, registry) signature

Other:
- ActionRegistry renamed to ReceiverRegistry throughout
- RegisterReceiverParams calls removed from generated Register methods
- Flow integration tests use plangen.Receiver
- Test mocks updated for new ReceiverFactory interface
@David-Noble-at-work
David-Noble-at-work merged commit 6f591c0 into develop Mar 27, 2026
2 checks passed
@David-Noble-at-work
David-Noble-at-work deleted the refactor/extract-starlark-from-op branch March 27, 2026 19:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant