Conversation
Introduces PacketFunctionProxy to fix read-only pipeline loading when the original packet function is unavailable. The proxy satisfies PacketFunctionProtocol, enabling full FunctionNode construction with CachedFunctionPod and DB access for cached data retrieval. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Also logs RC1 design issue for ResultCache.record_path not being overridable via public API. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add PacketFunctionProxy that stands in for unavailable packet functions in deserialized pipelines, enabling cached data access without the original function. Add PacketFunctionUnavailableError for invocation attempts on unbound proxies. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cover invocation behavior (unbound raises, empty variation/execution data), bind/unbind lifecycle, and identity mismatch detection for function name, version, and output schema. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ch tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tion When fallback_to_proxy=True and normal resolution fails (ImportError, AttributeError, unknown type ID), return a PacketFunctionProxy instead of raising. Mirrors the existing pattern in resolve_source_from_config. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When fallback_to_proxy=True, passes through to resolve_packet_function_from_config. If a PacketFunctionProxy is returned, injects the URI from the parent config's "uri" field. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…lity - Relax upstream usability checks to accept both FULL and READ_ONLY status, enabling downstream nodes to be reconstructed when their upstream uses a proxy. - Rewrite _load_function_node to use fallback_to_proxy=True so that unavailable functions get a PacketFunctionProxy instead of falling back to fully read-only mode. Nodes with a proxy get READ_ONLY status and their cached function pod record path is restored from the descriptor. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nction Add TestPipelineLoadWithUnavailableFunction class with 4 tests: - test_load_with_unavailable_function_has_read_only_status - test_load_with_unavailable_function_can_get_all_records - test_load_with_unavailable_function_iter_packets_yields_cached - test_downstream_operator_computes_from_cached These tests verify that when a pipeline is saved, the function module_path is corrupted (simulating an unavailable function), and the pipeline is reloaded, the function node gets a PacketFunctionProxy with READ_ONLY status and can still serve cached data. The downstream operator test confirms that a SelectPacketColumns operator can compute from the READ_ONLY function node's cached output. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Feature branch PRs always target dev; dev→main for versioning - Update Linear issue status to In Progress when starting work Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a PacketFunctionProxy mechanism to allow pipelines to load in a “read-only but cache-accessible” state when a serialized packet function can’t be imported, enabling cached-result access and downstream computation from cached data.
Changes:
- Introduces
PacketFunctionProxy+PacketFunctionUnavailableErrorto represent unavailable packet functions while preserving identity metadata. - Adds
fallback_to_proxysupport in packet-function resolution andFunctionPod.from_config, and uses proxy fallback duringPipeline.load. - Expands unit + integration test coverage for proxy behavior, resolver fallback, and pipeline load/read-only execution paths.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/orcapod/errors.py | Adds PacketFunctionUnavailableError for unbound proxy invocation. |
| src/orcapod/core/packet_function_proxy.py | Implements proxy packet function with bind/unbind and identity metadata. |
| src/orcapod/pipeline/serialization.py | Adds fallback_to_proxy option to packet-function resolver. |
| src/orcapod/core/function_pod.py | Adds proxy fallback to FunctionPod.from_config and injects URI into proxies. |
| src/orcapod/pipeline/graph.py | Loads function nodes with proxy fallback; treats READ_ONLY upstreams as usable. |
| tests/test_core/packet_function/test_packet_function_proxy.py | New unit tests for proxy behavior + FunctionPod integration. |
| tests/test_pipeline/test_serialization_helpers.py | Tests resolver/pod fallback behavior. |
| tests/test_pipeline/test_serialization.py | Integration tests for loading pipelines with unavailable functions and downstream ops. |
| DESIGN_ISSUES.md | Documents record-path override limitation as a design issue. |
| CLAUDE.md / .zed/rules | Updates workflow/policy documentation. |
| superpowers/specs/... / superpowers/plans/... | Design + implementation plan documentation for PLT-931. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
eywalker
commented
Mar 15, 2026
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
- Add uri to PythonPacketFunction.to_config() output - Refactor PacketFunctionProxy to read URI from config (remove uri param) - Move _BUILTIN_TYPE_MAP to pipeline/serialization.py - Coerce unrecognized type strings to object in _deserialize_schema_from_config - Simplify FunctionPod.from_config() (remove proxy-specific URI injection) - Remove record_path override from _load_function_node in graph.py - Fix result_path_prefix derivation in FunctionNode.from_descriptor - Narrow exception handling to ImportError/ModuleNotFoundError/AttributeError - Fix test specificity (pytest.raises with specific exception types) - Add schema round-trip consistency and hash preservation tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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
PacketFunctionProxy— a proxy that stands in for unavailable packet functions in deserialized pipelines, enabling cached data access without the original Python callablePacketFunctionProtocolsoFunctionNode,CachedFunctionPod, and DB access all work normally for cached resultsbind()with identity validation, andunbind()for revertingFixes PLT-931
Changes
src/orcapod/errors.py— AddPacketFunctionUnavailableErrorsrc/orcapod/core/packet_function_proxy.py— NewPacketFunctionProxyclass with metadata storage, stored URI/hashes, bind/unbind, invocation error on unboundsrc/orcapod/pipeline/serialization.py—fallback_to_proxyparam onresolve_packet_function_from_configsrc/orcapod/core/function_pod.py—fallback_to_proxyparam onFunctionPod.from_configwith URI injectionsrc/orcapod/pipeline/graph.py—_load_function_nodeuses proxy fallback; upstream usability acceptsREAD_ONLYCLAUDE.md/.zed/rules— Document PR target branch and Linear status policiesDESIGN_ISSUES.md— Log RC1:ResultCache.record_pathnot overridable via public APITest plan
PacketFunctionProxy(construction, metadata, invocation, bind/unbind, FunctionPod integration)🤖 Generated with Claude Code