Skip to content

Enforce desktop release contract and improve MCP failure handling - #236

Merged
geffzhang merged 11 commits into
nacosfrom
main
Sep 13, 2026
Merged

geffzhang merged 11 commits into
nacosfrom
main

Conversation

@geffzhang

Copy link
Copy Markdown
Collaborator

Description

This pull request standardizes the desktop product naming as "AgentQi Companion" across documentation and introduces new release engineering gates to improve release quality and clarity. It also updates release and roadmap documentation to accurately reflect recent changes and release availability, and adds new contract and documentation validation steps to the release workflow.

Release engineering improvements:

  • Added a release-blocking "desktop first-success contract" (desktop-first-success job in .github/workflows/release.yml) that validates AgentQi Companion's key desktop scenarios before assets are built, including preset persistence, shared capabilities, multi-tool selection, and Ollama compatibility. [1] [2] [3]
  • Introduced a release documentation gate (release-documentation job in .github/workflows/release.yml) that rejects release tags if documentation still describes features as future or unavailable work, ensuring documentation matches release state. [1] [2]

Naming and documentation updates:

  • Standardized the desktop product name as "AgentQi Companion" throughout documentation, including README.md, docs/RELEASES.md, and docs/ARCHITECTURE_BOUNDARIES.md, clarifying its relationship to OpenClaw.NET and updating all relevant references. [1] [2] [3] [4] [5] [6]
  • Updated release and roadmap documentation to clarify that reliability, recovery, and desktop companion features are available starting in v0.3.0, replacing previous "main only" or future availability language. [1] [2] [3] [4]

Minor documentation additions:

  • Added new guide entries for the Nacos MCP Router PoC in both English and Chinese to the documentation site map.

These changes improve release reliability, clarify product identity, and ensure that documentation and release processes accurately reflect the current state of the project.

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: cc20cd2f-7d7f-4068-a5f4-9fec34c743d1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@geffzhang
geffzhang merged commit 7db4d76 into nacos Sep 13, 2026
20 checks passed
geffzhang added a commit that referenced this pull request Sep 13, 2026
Follow-up to PR #236 (Merge main into nacos) addressing nine findings
from the issue #229 implementation review against upstream Router
0ee95f4f:

F1 (CRITICAL) params wire type. Upstream Router declares params as
type 'string' and runs json.loads(arguments['params']) before
dispatching to the inner MCP tool. Previous code treated params as a
JSON object: the SKILL.md passed a YAML mapping, the docs table left
the type unspecified, and the fixture accepted a Dictionary. Against
the live Router this caused TypeError on every use_tool call. Fix:
  - FakeNacosRouterMcpTools.Use now takes params as string @params
    and decodes via JsonDocument.Parse, mirroring upstream.
  - nacos-router-weather/SKILL.md uses inline JSON
    params: '{"city": "{{ input }}"}'.
  - nacos-router-weather-explore/SKILL.md instructs the model to
    pass params as a JSON-encoded string.
  - docs/nacos-mcp-router.md table now reads 'params (JSON-encoded
    string)' with an explanatory paragraph below.

F2 search envelope. Upstream emits
  ## 获取{task_description}的步骤如下:\n
  ### 1. 当前可用的mcp server列表为:{json}\n### 2. ...
The fixture now includes the leading header line.

F3 add envelope. Upstream appends
  \n2.{name}的工具需要通过nacos-mcp-router的use_tool工具代理使用
The fixture now mirrors that suffix verbatim.

F4 test assertions. The Theory test now asserts the three envelope
markers (header line, ### 1, ### 2) so contract drift surfaces as a
test failure instead of a silent fixture-vs-upstream split.

F5 docs contract row. Covered by the F1 docs update.

F6 bind fallback. nacos-router-weather now declares
on_failure: fallback_bind (emit_text) so an add_mcp_server failure
surfaces a user-facing message instead of aborting the DAG.

F7 McpNativeTool asymmetry. Added a comment explaining that the
ToolOutcomeException + 'mcp_tool_error' path requires a
ToolExecutionContext and that direct ITool callers silently degrade
to the prefixed string.

F8 always: false. Removed the top-level frontmatter line from both
SKILL.md files - the loader only reads metadata.openclaw.always, so
the field was being silently dropped.

F9 temp-dir hygiene. NacosRouterIntegrationTests now uses
Path.Join(GetTempPath(), Guid.NewGuid().ToString('N')) directly
instead of nesting inside a permanent 'nacos-poc-tests' parent.

Verification:
  dotnet build src/OpenClaw.Tests - 0 warnings, 0 errors
  dotnet test --filter NacosRouterIntegrationTests|DesktopFirstSuccessContractTests|DocsConsistencyTests
    - 10 passed, 1 skipped (live Router gated), 0 failed

Two pre-existing unrelated failures observed in the full suite
(PluginCommandsTests npm lifecycle / CompanionCanvasUiTests line
ending) verified to fail on the previous commit as well.
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.

2 participants