Skip to content

docs: audit feature verification catalog - #1345

Merged
khaliqgant merged 7 commits into
mainfrom
chore/audit-feature-manifest
Jul 21, 2026
Merged

docs: audit feature verification catalog#1345
khaliqgant merged 7 commits into
mainfrom
chore/audit-feature-manifest

Conversation

@miyaontherelay

Copy link
Copy Markdown
Contributor

Summary

  • correct feature commands, MCP tool names, prerequisites, and verification tiers against the repository
  • catalog omitted workflow, capability, message-upload, MCP, SDK, and plugin surfaces
  • map every category to detailed end-to-end procedures and guard the catalog with a manifest contract test

Validation

  • npm run typecheck
  • targeted manifest/guardian/CLI/MCP tests: 82 passed
  • clean built worktree: npm test — 1,297 passed, 20 skipped

Note: npm test in the existing checkout has a pre-existing integration test failure because ignored .agentworkforce/relay/ workspace state is intentionally present; the same built suite passes in a clean worktree.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 62b701ad-d91e-48ae-a2c3-74f149ca978b

📥 Commits

Reviewing files that changed from the base of the PR and between a9e356d and fa338f0.

📒 Files selected for processing (3)
  • .agentworkforce/agents/relay-feature-guardian/agent.test.ts
  • .agentworkforce/agents/relay-feature-guardian/agent.ts
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

📝 Walkthrough

Walkthrough

The feature catalog now maps expanded CLI, MCP, SDK, and plugin surfaces to executable verification procedures. Contract tests validate catalog coverage, while critical paths and guardian messaging support the updated manifest model.

Changes

Feature verification catalog

Layer / File(s) Summary
Manifest catalog and contract validation
.agentworkforce/features/manifest.yaml, .agentworkforce/agents/relay-feature-guardian/manifest-contract.test.ts, CHANGELOG.md, .agentworkforce/trajectories/...
The manifest adds verification categories and expands CLI, MCP, cloud, integration, harness, SDK, setup, telemetry, and node entries; contract tests validate identifiers, procedures, CLI coverage, and MCP coverage.
Executable verification procedures
.agentworkforce/features/verify/procedures.md
Verification procedures now cover disposable fixtures, assertions, cleanup, and workflows across local, cloud, messaging, MCP, SDK, plugin, telemetry, and node scenarios.
Critical paths and verification workflow guidance
.agentworkforce/features/critical-paths.md, .claude/skills/verify-features.md
Critical paths and feature-verification instructions now reference manifest-derived procedures, ordered health triage, expanded messaging/MCP/workflow checks, and cleanup expectations.
Guardian manifest parsing and quiz messaging
.agentworkforce/agents/relay-feature-guardian/agent.ts, .agentworkforce/agents/relay-feature-guardian/agent.test.ts
Manifest features support optional CLI values and mcp_prompt; quiz and fallback Slack output now include the available CLI, MCP, and prompt surfaces, with runtime coverage for MCP-only fallback behavior.

Estimated code review effort: 5 (Critical) | ~90 minutes

Possibly related PRs

Suggested labels: size:XXL

Suggested reviewers: khaliqgant, willwashburn

Poem

I’m a rabbit with a catalog bright,
Mapping each command through the night.
MCP prompts hop into view,
Tests check every surface true.
Procedures guide each run,
Slack notes sparkle when done.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main change: auditing the feature verification catalog.
Description check ✅ Passed The description includes the required Summary and Validation sections and is mostly complete, though Test Plan and Screenshots are not filled in.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/audit-feature-manifest

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install timed out. The project may have too many dependencies for the sandbox.


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.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request comprehensively updates the feature verification catalog for Agent Relay. It refactors the feature manifest, verification procedures, and critical paths to document exact CLI and MCP surfaces, adds previously unlisted SDK and plugin integrations, and maps every category to an end-to-end procedure. Additionally, a contract test suite is introduced to prevent CLI and MCP drift. The reviewer feedback suggests adding a nullish coalescing operator in the contract test to robustly handle cases where a category features array might be missing or undefined.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

const proceduresPath = new URL('../../features/verify/procedures.md', import.meta.url);
const manifest = parse(readFileSync(manifestPath, 'utf8')) as Manifest;
const procedures = readFileSync(proceduresPath, 'utf8');
const features = Object.values(manifest.categories).flatMap((category) => category.features);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If any category in the manifest does not define a features array (or if it is temporarily set to null/undefined during development), calling flatMap directly on it will result in undefined elements in the features array, which will subsequently cause a TypeError when mapping over feature.id in the tests. Using the nullish coalescing operator (?? []) ensures the test suite is robust against missing or malformed category features.

Suggested change
const features = Object.values(manifest.categories).flatMap((category) => category.features);
const features = Object.values(manifest.categories).flatMap((category) => category.features ?? []);

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (1)
.agentworkforce/agents/relay-feature-guardian/agent.ts (1)

562-570: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prompt wording is CLI-centric but cli is now optional. For MCP-only features surface resolves to "CLI: (MCP-only surface)", yet the instructions still tell the LLM to "show the CLI command" and confirm "a specific CLI feature." This can produce messages that reference or invent a nonexistent CLI command. Consider generalizing the wording to "command or MCP tool/prompt."

♻️ Suggested wording generalization
-    'Write a brief, conversational Slack message (3-5 sentences, no markdown headers) asking the team to confirm whether a specific CLI feature is working as intended.',
-    'Be specific: name the feature, describe what it should do, show the CLI command, and ask if it behaves this way or if anything has drifted.',
+    'Write a brief, conversational Slack message (3-5 sentences, no markdown headers) asking the team to confirm whether a specific feature is working as intended.',
+    'Be specific: name the feature, describe what it should do, show the CLI command or MCP tool/prompt, and ask if it behaves this way or if anything has drifted.',
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/agents/relay-feature-guardian/agent.ts around lines 562 -
570, Generalize the prompt wording in the prompt array so it supports both CLI
and MCP-only features: replace CLI-specific references to the feature, command,
and expected behavior with language covering a command or MCP tool/prompt.
Preserve the existing specificity, conversational tone, feature interpolation,
and required reaction ending.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agentworkforce/features/critical-paths.md:
- Around line 23-26: Bind TOKEN_B explicitly to the critical-b agent before
using it: update .agentworkforce/features/critical-paths.md lines 23-26 so the
registration name matches the invite and list commands, and apply the same
explicit TOKEN_B-to-agent identity binding in lines 80-88 for DM send, list, and
read-receipt verification.

In @.agentworkforce/features/verify/procedures.md:
- Line 155: Remove the `|| true` fallback from the `relay node agent release
"$AGENT"` verification command so release failures propagate and fail the
procedure. Keep tolerant error handling limited to any separate cleanup trap.
- Line 151: Initialize every external fixture required by the verification
procedures: at .agentworkforce/features/verify/procedures.md:151-151, define and
export PROVIDER before the relay spawn command; at
.agentworkforce/features/verify/procedures.md:199-199, provide WORKER_TOKEN; at
.agentworkforce/features/verify/procedures.md:260-260, obtain CAPTURE_URL from a
controlled receiver fixture; and at
.agentworkforce/features/critical-paths.md:38-38, reuse the same explicit
provider fixture.
- Around line 131-140: Update the reaction verification flow around the
add/remove commands to read the target message after each mutation and assert
that thumbsup is present after add and absent after remove. Preserve the
existing token identities and message identifiers while making both
reaction-state assertions executable before continuing to inbox and archive
checks.
- Around line 74-82: Update the verification procedure’s jq assertion after the
channel invitation to validate the channel name, updated topic, and membership
of the invited audit agent, rather than checking only .name. Keep the existing
cleanup sequence that leaves and archives the channel, and ensure test
identities are removed as requested.
- Around line 54-58: Update the capability flow after the deletion commands to
verify both resources are absent: list capabilities and assert no entry matches
CAP, then list agents and assert no entry matches audit-extra-$RUN. Keep these
checks immediately after the corresponding relay capabilities delete and relay
agent remove operations, before completing verification.
- Around line 116-120: Update the group-DM procedure’s send_group command to
include RELAY_AGENT_TOKEN="$TOKEN_A", ensuring it uses the intended identity.
Move removal of audit-c-$RUN until after list_dms verification confirms the same
conversation is visible to both group recipients.

In @.claude/skills/verify-features.md:
- Around line 24-26: Update the manifest lookup command in the “View all
features in a category” section of verify-features.md to match the actual
four-space indentation of the nested messaging-messages key under
verification.categories, or replace the text search with a structural YAML
query. Ensure the command correctly locates the category.

---

Nitpick comments:
In @.agentworkforce/agents/relay-feature-guardian/agent.ts:
- Around line 562-570: Generalize the prompt wording in the prompt array so it
supports both CLI and MCP-only features: replace CLI-specific references to the
feature, command, and expected behavior with language covering a command or MCP
tool/prompt. Preserve the existing specificity, conversational tone, feature
interpolation, and required reaction ending.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f5ac7d8c-6283-42f6-9114-d00512b0f6c9

📥 Commits

Reviewing files that changed from the base of the PR and between 969686d and 229ce47.

📒 Files selected for processing (8)
  • .agentworkforce/agents/relay-feature-guardian/agent.ts
  • .agentworkforce/agents/relay-feature-guardian/manifest-contract.test.ts
  • .agentworkforce/features/critical-paths.md
  • .agentworkforce/features/manifest.yaml
  • .agentworkforce/features/verify/procedures.md
  • .agentworkforce/trajectories/active/traj_rtyte8r4g07t/trajectory.json
  • .claude/skills/verify-features.md
  • CHANGELOG.md

Comment thread .agentworkforce/features/critical-paths.md
Comment thread .agentworkforce/features/verify/procedures.md Outdated
Comment thread .agentworkforce/features/verify/procedures.md
Comment thread .agentworkforce/features/verify/procedures.md Outdated
Comment thread .agentworkforce/features/verify/procedures.md
Comment thread .agentworkforce/features/verify/procedures.md Outdated
Comment thread .agentworkforce/features/verify/procedures.md Outdated
Comment thread .claude/skills/verify-features.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (6)
.agentworkforce/features/verify/procedures.md (6)

12-14: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use collision-resistant run identifiers.

RUN contains only second-level timestamps. Concurrent verification runs in the same hosted workspace can reuse agent/resource names, causing cross-run assertions or cleanup to target another run’s fixtures. Include a CI run identifier or a cryptographically/randomly unique suffix.

Also applies to: 20-25

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 12 - 14, Update
the RUN identifier setup in the verification procedure to append a CI-provided
run identifier or cryptographically/randomly generated suffix to the timestamp,
ensuring concurrent runs receive unique agent and resource names. Apply the same
collision-resistant identifier pattern to the additional RUN usage around the
referenced setup and cleanup steps.

238-252: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Make cloud-worker cleanup executable.

The procedure starts a daemon but only describes PID termination in prose; no command captures the PID or terminates it. A successful run therefore leaves a worker daemon—and potentially its registration—behind.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 238 - 252, Update
the cloud-workers procedure around the daemon start commands to capture the
launched worker PID, record its log path, and explicitly terminate that PID
during cleanup. Ensure cleanup also removes the temporary worker registration
when applicable, while preserving the guidance to use --once for bounded
assignment fixtures.

187-204: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Assert the spawned task’s result before release.

The flow verifies that the agent exists and accepts hold/auto/release commands, but never confirms that the bounded task produced relay-e2e-ok or reached its expected terminal state. A spawn that fails immediately could therefore pass this procedure.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 187 - 204, Update
the local-agent-lifecycle procedure after the spawn and before release to poll
the spawned agent’s status or output until the bounded task reaches its expected
terminal state, asserting that it produced “relay-e2e-ok”. Keep the existing
hold/auto checks, and only run relay node agent release after the task-result
assertion succeeds.

300-314: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Assert webhook delivery at the controlled receiver.

The commands create, trigger, list, and delete the webhook, but never read the receiver’s captured request. The procedure can pass even when delivery, payload content, or signature verification fails. Add a receiver-side wait/query and assert the exact payload and signature before deletion.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 300 - 314, Update
the integrations-and-webhooks procedure to wait for and query the controlled
receiver after triggering the webhook, then assert the captured request’s exact
payload and signature before deleting the webhook. Preserve the existing create,
list, and cleanup flow, and ensure deletion occurs only after receiver-side
delivery validation.

23-26: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Install cleanup for hosted fixtures.

cleanup_agents is defined but never registered as an exit trap. Any failed assertion after registration leaks hosted identities, and the function does not cover dynamically created identities such as C or audit-extra-$RUN.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 23 - 26, Update
cleanup_agents in the fixture setup to register it with an exit trap immediately
after defining it, and include every hosted identity created by the procedure,
including dynamically created C and audit-extra-$RUN agents. Preserve
best-effort removal and ensure cleanup runs when assertions or later commands
fail.

12-15: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make verification failures fail the procedure.

The shared shell setup does not enable set -e/pipefail, so a failed jq -e assertion can be ignored and later commands can still make the procedure appear successful.

Suggested fix
 RUN="feature-$(date +%s)"; TMP="$(mktemp -d)"; cd "$TMP"
+set -Eeuo pipefail
 relay node up --background --no-spawn
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/features/verify/procedures.md around lines 12 - 15, Update
the shared shell setup in the verification procedure to enable fail-fast
behavior and pipeline error propagation before running commands, including `jq
-e` assertions. Ensure any failed command causes the procedure to exit nonzero
while preserving the existing temporary-directory cleanup trap.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.agentworkforce/features/verify/procedures.md:
- Around line 12-14: Update the RUN identifier setup in the verification
procedure to append a CI-provided run identifier or cryptographically/randomly
generated suffix to the timestamp, ensuring concurrent runs receive unique agent
and resource names. Apply the same collision-resistant identifier pattern to the
additional RUN usage around the referenced setup and cleanup steps.
- Around line 238-252: Update the cloud-workers procedure around the daemon
start commands to capture the launched worker PID, record its log path, and
explicitly terminate that PID during cleanup. Ensure cleanup also removes the
temporary worker registration when applicable, while preserving the guidance to
use --once for bounded assignment fixtures.
- Around line 187-204: Update the local-agent-lifecycle procedure after the
spawn and before release to poll the spawned agent’s status or output until the
bounded task reaches its expected terminal state, asserting that it produced
“relay-e2e-ok”. Keep the existing hold/auto checks, and only run relay node
agent release after the task-result assertion succeeds.
- Around line 300-314: Update the integrations-and-webhooks procedure to wait
for and query the controlled receiver after triggering the webhook, then assert
the captured request’s exact payload and signature before deleting the webhook.
Preserve the existing create, list, and cleanup flow, and ensure deletion occurs
only after receiver-side delivery validation.
- Around line 23-26: Update cleanup_agents in the fixture setup to register it
with an exit trap immediately after defining it, and include every hosted
identity created by the procedure, including dynamically created C and
audit-extra-$RUN agents. Preserve best-effort removal and ensure cleanup runs
when assertions or later commands fail.
- Around line 12-15: Update the shared shell setup in the verification procedure
to enable fail-fast behavior and pipeline error propagation before running
commands, including `jq -e` assertions. Ensure any failed command causes the
procedure to exit nonzero while preserving the existing temporary-directory
cleanup trap.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c468d7bd-21b8-4eff-8267-0978577285be

📥 Commits

Reviewing files that changed from the base of the PR and between 229ce47 and 86ac787.

📒 Files selected for processing (3)
  • .agentworkforce/features/critical-paths.md
  • .agentworkforce/features/verify/procedures.md
  • .claude/skills/verify-features.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • .claude/skills/verify-features.md
  • .agentworkforce/features/critical-paths.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.agentworkforce/agents/relay-feature-guardian/agent.ts (1)

584-593: 🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

Fix the fallback branch
mcpNote and mcpPromptNote are undefined here, so the catch path throws a ReferenceError instead of returning the backup Slack message. Also, this fallback only shows the first available surface; reuse the existing surface list so CLI/MCP features aren’t truncated.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agentworkforce/agents/relay-feature-guardian/agent.ts around lines 584 -
593, Fix the fallback Slack message construction in the catch path so it does
not reference the undefined mcpNote or mcpPromptNote variables. Reuse the
existing surface list when rendering the feature surface, preserving all
available CLI, MCP, and MCP prompt entries instead of selecting only the first
one.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.agentworkforce/agents/relay-feature-guardian/agent.ts:
- Around line 584-593: Fix the fallback Slack message construction in the catch
path so it does not reference the undefined mcpNote or mcpPromptNote variables.
Reuse the existing surface list when rendering the feature surface, preserving
all available CLI, MCP, and MCP prompt entries instead of selecting only the
first one.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5d533681-d095-4780-9d01-9ac62f0d3156

📥 Commits

Reviewing files that changed from the base of the PR and between 86ac787 and a9e356d.

📒 Files selected for processing (3)
  • .agentworkforce/agents/relay-feature-guardian/agent.ts
  • .agentworkforce/features/verify/procedures.md
  • .agentworkforce/trajectories/active/traj_rtyte8r4g07t/trajectory.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • .agentworkforce/features/verify/procedures.md

@miyaontherelay

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@khaliqgant
khaliqgant merged commit 7b68b56 into main Jul 21, 2026
36 checks passed
@khaliqgant
khaliqgant deleted the chore/audit-feature-manifest branch July 21, 2026 07:03
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