REGRESSION: codex doesnt know defs and refs
This commit is contained in:
@@ -324,6 +324,22 @@ The `wf.std` self-binding is present when the saved graph depends on standard
|
|||||||
library capabilities. This tiny echo graph does not need much from `wf.std`, but
|
library capabilities. This tiny echo graph does not need much from `wf.std`, but
|
||||||
keeping local system-source bindings explicit is the current general pattern.
|
keeping local system-source bindings explicit is the current general pattern.
|
||||||
|
|
||||||
|
System-source bindings can look redundant:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"wf.std": "wf.std",
|
||||||
|
"wf.mcp": "wf.mcp"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
They mean "bind the artifact's logical local source to the concrete local source
|
||||||
|
with the same id." They are not external account bindings. Keep them explicit
|
||||||
|
for now when validation reports `binding_missing` for `wf.std` or `wf.mcp`.
|
||||||
|
Later the platform may make system-source self-bindings implicit, but current
|
||||||
|
artifacts and deployments use one uniform binding mechanism for both local and
|
||||||
|
external sources.
|
||||||
|
|
||||||
## 8. Validate Before Running
|
## 8. Validate Before Running
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|||||||
@@ -150,8 +150,14 @@ deployment bindings: {}
|
|||||||
Fix:
|
Fix:
|
||||||
|
|
||||||
- add a binding such as `"demo": "demo.personal"`
|
- add a binding such as `"demo": "demo.personal"`
|
||||||
|
- if the missing logical source is local, add a self-binding such as
|
||||||
|
`"wf.std": "wf.std"` or `"wf.mcp": "wf.mcp"`
|
||||||
- then validate again
|
- then validate again
|
||||||
|
|
||||||
|
System-source self-bindings look redundant, but they mean "use the local
|
||||||
|
standard source with the same id." Current deployments bind local and external
|
||||||
|
sources through the same field.
|
||||||
|
|
||||||
Use:
|
Use:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
@@ -396,6 +396,21 @@ artifact reference: context7.query-docs
|
|||||||
runtime binding: context7 -> context7.default
|
runtime binding: context7 -> context7.default
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Local system sources use the same binding mechanism. For example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
artifact reference: wf.std.replace
|
||||||
|
runtime binding: wf.std -> wf.std
|
||||||
|
|
||||||
|
artifact reference: wf.mcp.call_tool
|
||||||
|
runtime binding: wf.mcp -> wf.mcp
|
||||||
|
```
|
||||||
|
|
||||||
|
These self-bindings are not external account choices. They keep dependency
|
||||||
|
resolution uniform across local system sources and upstream connection sources.
|
||||||
|
They may become implicit later, but today deployments should include them when
|
||||||
|
validation reports `binding_missing` for `wf.std` or `wf.mcp`.
|
||||||
|
|
||||||
or:
|
or:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from wf_artifacts import ArtifactKind
|
|||||||
from wf_artifacts.models import RequiredCapability
|
from wf_artifacts.models import RequiredCapability
|
||||||
from wf_mcp.broker.service import WfMcpService
|
from wf_mcp.broker.service import WfMcpService
|
||||||
|
|
||||||
from ..models import RawWorkflowPlan
|
|
||||||
from .handlers import WorkflowSurfaceHandlers
|
from .handlers import WorkflowSurfaceHandlers
|
||||||
|
|
||||||
|
|
||||||
@@ -87,7 +86,7 @@ def register_workflow_tools(server: FastMCP[Any], service: WfMcpService) -> None
|
|||||||
artifact_id: str,
|
artifact_id: str,
|
||||||
version: int,
|
version: int,
|
||||||
title: str,
|
title: str,
|
||||||
plan: RawWorkflowPlan,
|
plan: dict[str, Any],
|
||||||
outcomes: list[str],
|
outcomes: list[str],
|
||||||
kind: ArtifactKind = "workflow",
|
kind: ArtifactKind = "workflow",
|
||||||
description: str | None = None,
|
description: str | None = None,
|
||||||
|
|||||||
@@ -186,6 +186,26 @@ def test_workflow_tools_have_human_metadata() -> None:
|
|||||||
asyncio.run(run_proxy())
|
asyncio.run(run_proxy())
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_artifact_from_plan_exposes_plan_as_plain_object() -> None:
|
||||||
|
config = BrokerConfig(
|
||||||
|
store_root=local_temp_root() / "unified_create_artifact_schema_store",
|
||||||
|
connections=[],
|
||||||
|
)
|
||||||
|
|
||||||
|
async def run_proxy() -> None:
|
||||||
|
client = create_server_client(config, admin_tools=False)
|
||||||
|
async with client:
|
||||||
|
tools = await client.list_tools()
|
||||||
|
by_name = {tool.name: tool for tool in tools}
|
||||||
|
schema = by_name["wf.workflow.create_artifact_from_plan"].inputSchema
|
||||||
|
plan_schema = schema["properties"]["plan"]
|
||||||
|
|
||||||
|
assert plan_schema["type"] == "object"
|
||||||
|
assert plan_schema.get("additionalProperties") is True
|
||||||
|
|
||||||
|
asyncio.run(run_proxy())
|
||||||
|
|
||||||
|
|
||||||
def test_server_exposes_platform_documentation_resources() -> None:
|
def test_server_exposes_platform_documentation_resources() -> None:
|
||||||
config = BrokerConfig(
|
config = BrokerConfig(
|
||||||
store_root=local_temp_root() / "unified_docs_resource_store",
|
store_root=local_temp_root() / "unified_docs_resource_store",
|
||||||
|
|||||||
Reference in New Issue
Block a user