Skip to content

Agents#145

Open
DannyFi wants to merge 25 commits into
mainfrom
agents
Open

Agents#145
DannyFi wants to merge 25 commits into
mainfrom
agents

Conversation

@DannyFi
Copy link
Copy Markdown
Contributor

@DannyFi DannyFi commented May 14, 2026

Summary by CodeRabbit

  • New Features

    • Orchestrated dApp workflow plus many new Agent Skills and Skill playbooks; CLI commands to link/unlink skills and agents into local IDE/tool workspaces; skill-creator bridge and evaluation tooling.
  • Documentation

    • New contributor/agent/vision handbooks, agent specs, numerous Skill & docs pages, and README contributions for agent workspace setup.
  • Bug Fixes

    • Corrected doc links and adjusted transaction timing guidance.
  • Tests

    • Extensive new verification tests covering docs, skills, sidebars, toolchain, and test manifest.
  • Chores

    • CI freshness bot, pre-commit checks, package script and dependency updates.

Review Change Stack

@DannyFi DannyFi requested a review from a team as a code owner May 14, 2026 03:43
@DannyFi DannyFi requested review from dylanCai9 and removed request for a team May 14, 2026 03:43
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 14, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
pre-rail 86a687a May 27 2026, 02:58 AM

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 14, 2026

Deploying morph-doc with  Cloudflare Pages  Cloudflare Pages

Latest commit: 86a687a
Status: ✅  Deploy successful!
Preview URL: https://b80fca8e.morph-doc.pages.dev
Branch Preview URL: https://agents.morph-doc.pages.dev

View logs

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 14, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a doc–skill contract and vision, many SKILL docs and agent specs, Docusaurus multi-source docs/plugin updates, symlink CLI tools, extensive tests validating pairing/freshness/sidebars, AltFee and routing utilities, skill-creator integration tooling, and a weekly freshness bot workflow.

Changes

Morph doc + skills + tooling

Layer / File(s) Summary
All changes (see PR diff)
docs/*, skills/*, agents/*, __tests__/*, scripts/*, scripts/lib/*, plugins/markdown-source-plugin.js, src/utils/*, src/components/*, src/theme/Root.js, sidebars-*.js, .github/*, package.json, .gitignore, .husky/pre-commit, README.md, CONTRIBUTING.md, CLAUDE.md, AGENTS.md, VISION.md
Adds the doc-as-SKILL contract and vision, many new SKILL docs and agent runbooks, Docusaurus config and markdown-plugin updates to export docs, skills, and agents, symlink management scripts (morph-skill-ln, morph-agent-ln) and skill-creator bridge/tooling, AltFee and routing utilities, extensive new tests for pairing, sidebars, freshness, and examples, and a weekly GitHub Actions freshness bot.

Sequence Diagram(s)

  • (None generated — changes are broad and cross-cutting; no single 3+ component sequential flow meets the diagram conditions.)

Estimated code review effort
🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • dylanCai9
  • tomatoishealthy

"A rabbit hops through markdown glades,
stitching skills and agent ways.
Tests hum like beetles in the night,
links and scripts now working right.
Hooray — docs, skills, and CI plays!"

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agents

const lockHead = fs.readFileSync(lockPath, 'utf8').slice(0, 800);
assert.match(
lockHead,
new RegExp(`overrides:\\s*\\n\\s*webpack:\\s*${PINNED.replace(/\./g, '\\.')}`),
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 11

Caution

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

⚠️ Outside diff range comments (2)
skills/morph-skill-ln/SKILL.md (1)

69-75: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a ## Related Skills section for routing handoff.

The playbook is complete, but it should end with explicit sibling handoffs (for example, morph-agent-ln, skills/README.md entry skill) to match repository skill contracts.

As per coding guidelines, "skills/*/*.md: Skills should include a YAML name and description for tool routing, an optional doc_skill_id for page–skill pairing, and Related Skills section for handoffs".

🤖 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 `@skills/morph-skill-ln/SKILL.md` around lines 69 - 75, Add a "## Related
Skills" section at the end of SKILL.md and ensure the skill's frontmatter
includes a YAML name and description and an optional doc_skill_id (matching the
directory/name) for routing; in the Related Skills list explicitly reference
sibling handoffs such as morph-agent-ln and the skills/README.md entry skill
(and any Windsurf `.windsurf/skills` mappings) so tool routing and page–skill
pairing work with the existing routing contracts.
skills/morph-full-node-run-in-docker/SKILL.md (1)

34-35: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a ## Related Skills handoff section.

This skill currently ends without a Related Skills block, so it misses the required handoff metadata pattern used across the skill library.

As per coding guidelines, "skills/*/*.md: Skills should include a YAML name and description for tool routing, an optional doc_skill_id for page–skill pairing, and Related Skills section for handoffs".

🤖 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 `@skills/morph-full-node-run-in-docker/SKILL.md` around lines 34 - 35, Add a
"## Related Skills" section to the SKILL.md that follows the repository handoff
pattern and ensure the file's frontmatter contains the YAML keys name and
description (and doc_skill_id if applicable); specifically, create a "## Related
Skills" header and list related skill entries (referencing other skill YAML
names) to enable handoffs, and verify the top of the file includes the required
YAML keys "name" and "description" and an optional "doc_skill_id" for page–skill
pairing so tool routing and handoffs work correctly.
🧹 Nitpick comments (9)
skills/morph-js-sdk/SKILL.md (1)

71-84: ⚡ Quick win

Add ## Related Skills for cross-skill routing consistency.

Please add an explicit handoff section (for example: morph-contracts, morph-tx-cost, morph-rails) so agent routing follows the same pattern as other skills.

As per coding guidelines, "skills/*/*.md: Skills should include ... Related Skills section for handoffs."

🤖 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 `@skills/morph-js-sdk/SKILL.md` around lines 71 - 84, Add a "## Related Skills"
section to SKILL.md (near the Execution Steps or Self-Check sections) that
explicitly lists the downstream skills for handoff routing — e.g.
morph-contracts, morph-tx-cost, morph-rails — and a brief one-line purpose for
each to guide agent routing; ensure the section title uses the exact header
"Related Skills" so it matches the project's skills discovery convention.
skills/morph-contracts/SKILL.md (1)

123-129: ⚡ Quick win

Add an explicit ## Related Skills handoff section.

This skill currently ends at ## Self-Check; please add a dedicated ## Related Skills block (e.g., morph-bridge, morph-js-sdk, morph-tx-cost) to align with the repository’s routing contract.

As per coding guidelines, "skills/*/*.md: Skills should include ... Related Skills section for handoffs."

🤖 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 `@skills/morph-contracts/SKILL.md` around lines 123 - 129, Add a new "##
Related Skills" section after the existing "## Self-Check" heading in SKILL.md
that lists handoff targets (for example: morph-bridge, morph-js-sdk,
morph-tx-cost) so routing can pick up downstream connections; ensure the header
is exactly "## Related Skills" and include each related skill as a short bullet
or comma-separated list to match other skills' style and satisfy the repository
routing contract.
skills/morph-tx-cost/SKILL.md (1)

54-82: ⚡ Quick win

Add an explicit ## Related Skills section.

Please include a standard Related Skills handoff block (e.g., morph-js-sdk, morph-contracts, morph-bridge) instead of relying only on Sub-topics.

As per coding guidelines, "skills/*/*.md: Skills should include ... Related Skills section for handoffs."

🤖 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 `@skills/morph-tx-cost/SKILL.md` around lines 54 - 82, Add a new "## Related
Skills" section to this SKILL.md that explicitly lists and links the handoff
skills referenced elsewhere (e.g., morph-js-sdk/SKILL.md,
morph-contracts/SKILL.md, morph-bridge/SKILL.md and
docs/about-morph/10-altfeetx.md) so readers get a clear next-step handoff; place
it near the top-level sections (after "Sub-topics → Specific Skills" or "Common
Boundary Confusion"), include each skill name and a short one-line purpose
(e.g., "morph-js-sdk — client/SDK usage", "morph-contracts — contract addresses
& chain IDs", "morph-bridge — L1↔L2 bridge details") and ensure the section
follows the same formatting style used in other skills files.
skills/morph-rails/SKILL.md (1)

48-79: ⚡ Quick win

Add a dedicated ## Related Skills section in addition to Sub-topics.

The sub-topic table is useful, but please include a standard Related Skills block for consistent handoff structure across SKILL files.

As per coding guidelines, "skills/*/*.md: Skills should include ... Related Skills section for handoffs."

🤖 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 `@skills/morph-rails/SKILL.md` around lines 48 - 79, Add a new "## Related
Skills" section to skills/morph-rails/SKILL.md immediately after the "##
Sub-topics → Specific Skills / Docs" table (or right before "## Common Boundary
Confusion") that lists the key related skill SKILL.md files (e.g.,
skills/morph-js-sdk/SKILL.md, skills/..., and any Agent Skill docs referenced in
the table) and provides one-line reasons for each link; ensure the new section
follows the repo's standard handoff structure and satisfies the Self-Check
checklist by referencing the same target docs already cited (0-overview.md,
1-x402-facilitator.md, 10-altfeetx.md, 2-reference-key.md) for consistent
navigation.
skills/morph-verify-contracts/SKILL.md (1)

80-87: ⚡ Quick win

Add a ## Related Skills section for handoffs.

Please add explicit related-skill links (for example morph-contracts, morph-js-sdk, morph-bridge) to satisfy the skill handoff contract.

As per coding guidelines, "skills/*/*.md: Skills should include ... Related Skills section for handoffs."

🤖 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 `@skills/morph-verify-contracts/SKILL.md` around lines 80 - 87, Add a new "##
Related Skills" section in the SKILL.md after the Self-Check block that lists
explicit related-skill links for handoffs (e.g., morph-contracts, morph-js-sdk,
morph-bridge); ensure each related skill is referenced by its skill name (as a
relative link or plain identifier consistent with other skills) so the skill
handoff contract is satisfied and downstream consumers (morph-contracts,
morph-js-sdk, morph-bridge) can be easily located.
__tests__/morph-rails-skill.test.mjs (1)

21-36: ⚡ Quick win

Assert that referenced documentation files actually exist.

These checks only validate literal strings; they won’t catch stale/broken paths.

♻️ Proposed fix
+const REQUIRED_DOC_PATHS = [
+  'docs/morph-rails/0-overview.md',
+  'docs/about-morph/morph-rails.md',
+  'docs/morph-rails/agentic-payment/1-x402-facilitator.md',
+  'docs/about-morph/10-altfeetx.md',
+];
+
+for (const relPath of REQUIRED_DOC_PATHS) {
+  assert.ok(content.includes(relPath), `should reference ${relPath}`);
+  assert.ok(fs.existsSync(path.join(ROOT, relPath)), `referenced doc is missing: ${relPath}`);
+}
+
 assert.ok(
   content.includes('docs/morph-rails/0-overview.md'),
   'should cite 0-overview as source of truth'
 );

As per coding guidelines __tests__/**/*: “Automated checks under __tests__/ must cover executable helpers and behaviors that are tied to documentation content; extend or add tests when changing these behaviors”.

🤖 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 `@__tests__/morph-rails-skill.test.mjs` around lines 21 - 36, The test
currently only asserts that the string variable content includes literal paths,
which can miss stale or missing docs; update the test in
__tests__/morph-rails-skill.test.mjs to also verify each referenced file
actually exists by converting the cited relative paths (the same strings used in
the existing assert.ok checks) into filesystem paths (e.g. with
path.join(process.cwd(), <docPath>) or require.resolve) and using fs.existsSync
(or equivalent async stat) to assert existence; for each path add an assertion
like assert.ok(fs.existsSync(resolvedPath), `doc exists: ${docPath}`) so
stale/broken paths fail the test.
__tests__/morph-dapp-code-review-skill.test.mjs (1)

16-19: ⚡ Quick win

Scope metadata assertions to the parsed frontmatter block.

name and trigger-phrase checks currently scan the whole file, so body content could satisfy them even if frontmatter is wrong.

♻️ Proposed fix
 const content = fs.readFileSync(SKILL_PATH, 'utf8');
+const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
+assert.ok(fm, 'should have YAML frontmatter');
+const frontmatter = fm[1];

-assert.match(content, /^---\r?\n[\s\S]*?\r?\n---/, 'should have YAML frontmatter');
-assert.match(content, /^name:\s*morph-dapp-code-review\s*$/m, 'name must equal directory');
-assert.match(content, /Use when|当用户/i, 'description should include trigger phrasing');
+assert.match(frontmatter, /^name:\s*morph-dapp-code-review\s*$/m, 'name must equal directory');
+assert.match(frontmatter, /Use when|当用户/i, 'description should include trigger phrasing');
🤖 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 `@__tests__/morph-dapp-code-review-skill.test.mjs` around lines 16 - 19, The
tests currently run assert.match against the whole file content; change them to
first extract the YAML frontmatter from the captured group (e.g. use the
existing regex /^---\r?\n([\s\S]*?)\r?\n---/ to get a frontmatter string) and
then run the assertions for name and trigger-phrases against that extracted
frontmatter variable instead of the full content (keep the initial assertion
that the frontmatter exists, then assert.match(frontmatter,
/^name:\s*morph-dapp-code-review\s*$/m, ...) and assert.match(frontmatter, /Use
when|当用户/i, ...)).
__tests__/morph-skill-ln.test.mjs (1)

20-27: ⚡ Quick win

Add subprocess timeout guard in run() to avoid hung test jobs.

A single timeout in run() protects the whole suite if scripts/morph-skill-ln ever blocks unexpectedly.

Suggested patch
 function run(args, env = {}) {
   const r = spawnSync('bash', [SCRIPT, ...args], {
     cwd: ROOT,
     encoding: 'utf8',
     env: { ...process.env, ...env },
+    timeout: 15000,
+    maxBuffer: 1024 * 1024,
   });
   return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
 }
🤖 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 `@__tests__/morph-skill-ln.test.mjs` around lines 20 - 27, The run() helper can
hang if the spawned script blocks; add a subprocess timeout to the spawnSync
options in run() (use the timeout option, e.g. 10000 ms or another
project-appropriate value) so the call is killed if it exceeds the limit; update
the options object passed to spawnSync in the run function and ensure the
function still returns { status, stdout, stderr } from the spawnSync result even
when the timeout triggers.
__tests__/examples-viem-alt-fee.test.mjs (1)

22-35: ⚡ Quick win

Bound subprocess runtime for this smoke test.

Adding timeout prevents this test from hanging indefinitely if the example script regresses.

Suggested patch
 const check = spawnSync(process.execPath, ["--check", SCRIPT], {
   encoding: "utf8",
+  timeout: 15000,
 });
@@
 const dry = spawnSync(
   process.execPath,
   [SCRIPT],
   {
     cwd: EXAMPLE_DIR,
     encoding: "utf8",
     env: { ...process.env, MORPH_DRY_RUN: "1" },
+    timeout: 15000,
   }
 );
🤖 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 `@__tests__/examples-viem-alt-fee.test.mjs` around lines 22 - 35, The
subprocess spawnSync calls for the `check` and `dry` runs can hang indefinitely;
add a `timeout` field to the options objects passed to both `spawnSync`
invocations (the `check = spawnSync(process.execPath, ["--check", SCRIPT], { ...
})` call and the `dry = spawnSync(process.execPath, [SCRIPT], { cwd:
EXAMPLE_DIR, encoding: "utf8", env: { ...process.env, MORPH_DRY_RUN: "1" } })`
call) so the tests fail fast on regressions — choose a sensible timeout (e.g., a
few seconds) and include it in each options object.
🤖 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 `@__tests__/build-toolchain-constraints.test.mjs`:
- Around line 35-39: The test truncates the lockfile by using lockHead =
fs.readFileSync(lockPath, 'utf8').slice(0, 800) which can miss the overrides
block; change it to read the full file (e.g., use a variable like lockContents
from fs.readFileSync(lockPath, 'utf8') without slice) and run the existing
assert.match against that full contents, keeping the same regex and references
to PINNED and lockPath so the override check reliably finds the webpack
override.

In `@__tests__/morph-contracts-skill-tokenlist.test.mjs`:
- Around line 29-35: The test currently returns early when TOKEN_LIST_PATH is
missing (using fs.existsSync) which lets CI silently pass; modify the setup in
__tests__/morph-contracts-skill-tokenlist.test.mjs so that when
fs.existsSync(TOKEN_LIST_PATH) is false it fails the test instead of logging and
returning — e.g., replace the early return with an explicit throw or assertion
(AssertionError or expect(...).toBeTruthy()) referencing TOKEN_LIST_PATH to
produce a clear failure message; ensure the change is applied where the
TOKEN_LIST_PATH existence check is performed so the parity guard enforces
presence of morph-bridge/public/morph-list/src/mainnet/tokenList.json in CI.

In `@__tests__/morph-doc-skill-inventory.test.mjs`:
- Around line 39-46: The parseIsoDate function accepts invalid calendar dates
because Date.UTC() normalizes out-of-range days; update parseIsoDate to perform
a round-trip validation after creating dt by comparing dt.getUTCFullYear(),
dt.getUTCMonth()+1, and dt.getUTCDate() against the parsed y, mo, d values and
return null if they don't match so only exact ISO dates (e.g., 2026-02-31) are
accepted; keep the existing regex and null-return behavior but add this extra
check inside parseIsoDate.

In `@__tests__/morph-js-sdk-skill.test.mjs`:
- Line 20: The current assertion using assert.match with
/```typescript\n[\s\S]*```\n[\s\S]*```typescript/ can pass malformed markdown
because it doesn't require the second ```typescript block to close; replace this
check by extracting all complete TypeScript fenced blocks using a non-greedy
regex like /```typescript\r?\n[\s\S]*?```/g (assign to a variable such as
tsBlocks) and then assert that tsBlocks.length >= 2 with assert.ok to ensure at
least two properly closed TypeScript fenced blocks are present (update the
assertion in the test that currently calls assert.match).

In `@__tests__/skills-sidebar.test.mjs`:
- Around line 15-19: The test builds expectedIds from all directories in entries
but should only include directories that actually contain a SKILL.md file;
update the logic that computes expectedIds so after filtering
entry.isDirectory() you check for the presence of SKILL.md inside that directory
(e.g., use fs.existsSync or fs.promises.access on path.join(entry.name,
'SKILL.md')) and only map those directories to `${id}/SKILL`, keeping the
variable name expectedIds and using the existing entries array to locate
directories.

In `@__tests__/vision-md.test.mjs`:
- Around line 18-28: The parseFrontmatter function inconsistently strips
surrounding quotes for the parsed fields: it removes surrounding quotes for the
name match (variable name) but not for the description match (variable desc).
Update parseFrontmatter so the description extraction mirrors the name logic:
after capturing desc[1], call .trim() and remove leading/trailing single or
double quotes using the same regex replace (/^["']|["']$/g) before returning the
description value; keep the existing null fallback behavior unchanged.

In `@skills/morph-dapp-codegen/SKILL.md`:
- Around line 53-55: Update the contradictory commit policy in SKILL.md by
making the Red-phase (Phase 1) test commit conditional on explicit user approval
instead of automatic; replace step "Commit the tests immediately with a message
like `test: add failing tests for <feature-id>`" with instructions that the tool
should stage the failing tests and prompt for explicit confirmation or an
explicit "allow-autocommit" flag before performing the commit, and ensure the
documentation references the existing rule that auto-commit is forbidden unless
explicitly requested (the Line 88 rule) so the two statements are consistent.

In `@skills/morph-dapp-planning/SKILL.md`:
- Around line 131-134: The checklist item "Each `Target Files` entry has a
paired impl / test path that exists" is too strict for greenfield plans; change
the validation to accept target paths that either already exist or are
explicitly marked as "will be created in Stage 2". Update the self-check logic
that verifies Target Files entries to treat a target as valid if the filesystem
check passes OR the entry includes a Stage-2 creation marker (e.g., a boolean
flag or a parenthetical note like "will be created in Stage 2"); ensure the
validation references the `Target Files` entries and the checklist item text so
the planner can opt-in without failing Stage 1.

In `@skills/morph-verify-contracts/SKILL.md`:
- Around line 23-41: Remove the trailing whitespace in the Hardhat config's
apiURL value (apiURL in the hardhat.config.js customChains entry for network
'morph') so it reads exactly 'https://explorer-api.morph.network/api?' and
update the "Hoodi Testnet" Explorer API URL table entry to the exact endpoint
'https://explorer-api-hoodi.morph.network' (no '/api?' suffix and no trailing
spaces) to ensure copy-paste verification works correctly.

In `@src/utils/isAltFee.js`:
- Around line 20-23: The isAltFee check fails for mixed-case hex literals like
"0x7F" because it only checks exact cases; normalize the incoming type (e.g.,
const t = String(type).trim().toLowerCase()) and then compare t === '0x7f' or t
=== 'altfee' so any casing of the hex literal or the word "AltFee" is accepted;
update the logic in the isAltFee function that reads the variable type
accordingly.

In `@src/utils/isMarkdownActionsPathname.js`:
- Around line 10-13: The pathname checks in isMarkdownActionsPathname only match
routes with a trailing slash (e.g., '/docs/'), so bare base routes like '/docs',
'/skills', and '/agents' return false; update the conditions inside
isMarkdownActionsPathname to also match the exact base paths (e.g., add pathname
=== '/docs' || pathname.startsWith('/docs/') etc. for each of '/docs',
'/skills', and '/agents') so both the base route and subpaths are covered.

---

Outside diff comments:
In `@skills/morph-full-node-run-in-docker/SKILL.md`:
- Around line 34-35: Add a "## Related Skills" section to the SKILL.md that
follows the repository handoff pattern and ensure the file's frontmatter
contains the YAML keys name and description (and doc_skill_id if applicable);
specifically, create a "## Related Skills" header and list related skill entries
(referencing other skill YAML names) to enable handoffs, and verify the top of
the file includes the required YAML keys "name" and "description" and an
optional "doc_skill_id" for page–skill pairing so tool routing and handoffs work
correctly.

In `@skills/morph-skill-ln/SKILL.md`:
- Around line 69-75: Add a "## Related Skills" section at the end of SKILL.md
and ensure the skill's frontmatter includes a YAML name and description and an
optional doc_skill_id (matching the directory/name) for routing; in the Related
Skills list explicitly reference sibling handoffs such as morph-agent-ln and the
skills/README.md entry skill (and any Windsurf `.windsurf/skills` mappings) so
tool routing and page–skill pairing work with the existing routing contracts.

---

Nitpick comments:
In `@__tests__/examples-viem-alt-fee.test.mjs`:
- Around line 22-35: The subprocess spawnSync calls for the `check` and `dry`
runs can hang indefinitely; add a `timeout` field to the options objects passed
to both `spawnSync` invocations (the `check = spawnSync(process.execPath,
["--check", SCRIPT], { ... })` call and the `dry = spawnSync(process.execPath,
[SCRIPT], { cwd: EXAMPLE_DIR, encoding: "utf8", env: { ...process.env,
MORPH_DRY_RUN: "1" } })` call) so the tests fail fast on regressions — choose a
sensible timeout (e.g., a few seconds) and include it in each options object.

In `@__tests__/morph-dapp-code-review-skill.test.mjs`:
- Around line 16-19: The tests currently run assert.match against the whole file
content; change them to first extract the YAML frontmatter from the captured
group (e.g. use the existing regex /^---\r?\n([\s\S]*?)\r?\n---/ to get a
frontmatter string) and then run the assertions for name and trigger-phrases
against that extracted frontmatter variable instead of the full content (keep
the initial assertion that the frontmatter exists, then
assert.match(frontmatter, /^name:\s*morph-dapp-code-review\s*$/m, ...) and
assert.match(frontmatter, /Use when|当用户/i, ...)).

In `@__tests__/morph-rails-skill.test.mjs`:
- Around line 21-36: The test currently only asserts that the string variable
content includes literal paths, which can miss stale or missing docs; update the
test in __tests__/morph-rails-skill.test.mjs to also verify each referenced file
actually exists by converting the cited relative paths (the same strings used in
the existing assert.ok checks) into filesystem paths (e.g. with
path.join(process.cwd(), <docPath>) or require.resolve) and using fs.existsSync
(or equivalent async stat) to assert existence; for each path add an assertion
like assert.ok(fs.existsSync(resolvedPath), `doc exists: ${docPath}`) so
stale/broken paths fail the test.

In `@__tests__/morph-skill-ln.test.mjs`:
- Around line 20-27: The run() helper can hang if the spawned script blocks; add
a subprocess timeout to the spawnSync options in run() (use the timeout option,
e.g. 10000 ms or another project-appropriate value) so the call is killed if it
exceeds the limit; update the options object passed to spawnSync in the run
function and ensure the function still returns { status, stdout, stderr } from
the spawnSync result even when the timeout triggers.

In `@skills/morph-contracts/SKILL.md`:
- Around line 123-129: Add a new "## Related Skills" section after the existing
"## Self-Check" heading in SKILL.md that lists handoff targets (for example:
morph-bridge, morph-js-sdk, morph-tx-cost) so routing can pick up downstream
connections; ensure the header is exactly "## Related Skills" and include each
related skill as a short bullet or comma-separated list to match other skills'
style and satisfy the repository routing contract.

In `@skills/morph-js-sdk/SKILL.md`:
- Around line 71-84: Add a "## Related Skills" section to SKILL.md (near the
Execution Steps or Self-Check sections) that explicitly lists the downstream
skills for handoff routing — e.g. morph-contracts, morph-tx-cost, morph-rails —
and a brief one-line purpose for each to guide agent routing; ensure the section
title uses the exact header "Related Skills" so it matches the project's skills
discovery convention.

In `@skills/morph-rails/SKILL.md`:
- Around line 48-79: Add a new "## Related Skills" section to
skills/morph-rails/SKILL.md immediately after the "## Sub-topics → Specific
Skills / Docs" table (or right before "## Common Boundary Confusion") that lists
the key related skill SKILL.md files (e.g., skills/morph-js-sdk/SKILL.md,
skills/..., and any Agent Skill docs referenced in the table) and provides
one-line reasons for each link; ensure the new section follows the repo's
standard handoff structure and satisfies the Self-Check checklist by referencing
the same target docs already cited (0-overview.md, 1-x402-facilitator.md,
10-altfeetx.md, 2-reference-key.md) for consistent navigation.

In `@skills/morph-tx-cost/SKILL.md`:
- Around line 54-82: Add a new "## Related Skills" section to this SKILL.md that
explicitly lists and links the handoff skills referenced elsewhere (e.g.,
morph-js-sdk/SKILL.md, morph-contracts/SKILL.md, morph-bridge/SKILL.md and
docs/about-morph/10-altfeetx.md) so readers get a clear next-step handoff; place
it near the top-level sections (after "Sub-topics → Specific Skills" or "Common
Boundary Confusion"), include each skill name and a short one-line purpose
(e.g., "morph-js-sdk — client/SDK usage", "morph-contracts — contract addresses
& chain IDs", "morph-bridge — L1↔L2 bridge details") and ensure the section
follows the same formatting style used in other skills files.

In `@skills/morph-verify-contracts/SKILL.md`:
- Around line 80-87: Add a new "## Related Skills" section in the SKILL.md after
the Self-Check block that lists explicit related-skill links for handoffs (e.g.,
morph-contracts, morph-js-sdk, morph-bridge); ensure each related skill is
referenced by its skill name (as a relative link or plain identifier consistent
with other skills) so the skill handoff contract is satisfied and downstream
consumers (morph-contracts, morph-js-sdk, morph-bridge) can be easily located.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: ddaed3d0-a35c-4c7c-bfab-141834591c4a

📥 Commits

Reviewing files that changed from the base of the PR and between e00b434 and d5f4443.

⛔ Files ignored due to path filters (2)
  • assets/docs/protocol/general/bridge/withdraw.png is excluded by !**/*.png
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (78)
  • .github/ISSUE_TEMPLATE/skill-feedback.yaml
  • .gitignore
  • .husky/pre-commit
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • VISION.md
  • __tests__/agent-driven-development-workflow-doc.test.mjs
  • __tests__/agents-sidebar.test.mjs
  • __tests__/build-toolchain-constraints.test.mjs
  • __tests__/contributing-md.test.mjs
  • __tests__/doc-skill-pairing.test.mjs
  • __tests__/examples-viem-alt-fee.test.mjs
  • __tests__/is-alt-fee.test.mjs
  • __tests__/markdown-actions-routes.test.mjs
  • __tests__/markdown-source-export.test.mjs
  • __tests__/mdx-navigation-pages.test.mjs
  • __tests__/morph-agent-ln.test.mjs
  • __tests__/morph-contracts-skill-tokenlist.test.mjs
  • __tests__/morph-dapp-agent.test.mjs
  • __tests__/morph-dapp-code-review-skill.test.mjs
  • __tests__/morph-dapp-codegen-skill.test.mjs
  • __tests__/morph-dapp-planning-skill.test.mjs
  • __tests__/morph-dapp-workflow-skill.test.mjs
  • __tests__/morph-doc-agent.test.mjs
  • __tests__/morph-doc-skill-inventory.test.mjs
  • __tests__/morph-js-sdk-skill.test.mjs
  • __tests__/morph-rails-skill.test.mjs
  • __tests__/morph-skill-ln.test.mjs
  • __tests__/morph-tx-cost-skill.test.mjs
  • __tests__/run-tests-manifest.test.mjs
  • __tests__/skill-trigger-eval-examples.test.mjs
  • __tests__/skills-sidebar.test.mjs
  • __tests__/vision-md.test.mjs
  • agents/morph-dapp-agent.md
  • agents/morph-doc-agent.md
  • docs/about-morph/0-user-navigation-page.mdx
  • docs/about-morph/4-morphs-architecture.md
  • docs/build-on-morph/0-developer-navigation-page.mdx
  • docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md
  • docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md
  • docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md
  • docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md
  • docs/build-on-morph/developer-resources/1-contracts.md
  • docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md
  • docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md
  • docs/build-on-morph/sdk/js-sdk.mdx
  • docs/how-morph-works/general-protocol-design/3-transaction-statuses-on-morph-mainnet.md
  • docs/morph-rails/0-overview.md
  • docusaurus.config.js
  • package.json
  • plugins/markdown-source-plugin.js
  • scripts/morph-agent-ln
  • scripts/morph-skill-ln
  • scripts/run-tests.mjs
  • scripts/skill-trigger-evals.morph-js-sdk.example.json
  • sidebars-agents.js
  • sidebars-skills.js
  • skills/README.md
  • skills/morph-bridge/SKILL.md
  • skills/morph-contracts/SKILL.md
  • skills/morph-dapp-code-review/SKILL.md
  • skills/morph-dapp-codegen/SKILL.md
  • skills/morph-dapp-planning/SKILL.md
  • skills/morph-dapp-workflow/SKILL.md
  • skills/morph-full-node-run-in-docker/SKILL.md
  • skills/morph-js-sdk/SKILL.md
  • skills/morph-rails/SKILL.md
  • skills/morph-rpc-api/SKILL.md
  • skills/morph-skill-ln/SKILL.md
  • skills/morph-tx-cost/SKILL.md
  • skills/morph-verify-contracts/SKILL.md
  • src/components/ApiExplorer/configs/networks.ts
  • src/components/MarkdownActionsDropdown/index.js
  • src/theme/Root.js
  • src/utils/isAltFee.js
  • src/utils/isMarkdownActionsPathname.js

Comment thread __tests__/build-toolchain-constraints.test.mjs Outdated
Comment thread __tests__/morph-contracts-skill-tokenlist.test.mjs
Comment thread __tests__/morph-doc-skill-inventory.test.mjs Outdated
Comment thread __tests__/morph-js-sdk-skill.test.mjs Outdated
Comment thread __tests__/skills-sidebar.test.mjs Outdated
Comment thread skills/morph-dapp-codegen/SKILL.md Outdated
Comment thread skills/morph-dapp-planning/SKILL.md
Comment thread skills/morph-verify-contracts/SKILL.md
Comment thread src/utils/isAltFee.js
Comment thread src/utils/isMarkdownActionsPathname.js Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
__tests__/markdown-actions-routes.test.mjs (1)

33-38: ⚡ Quick win

Make wiring assertions less brittle to formatting/import-style changes.

These includes(...) checks can fail on harmless quote/style/path formatting edits while behavior stays correct. Prefer tolerant regex checks so the test keeps validating intent instead of exact text shape.

Proposed hardening
-assert.ok(
-  rootSrc.includes("from '../utils/isMarkdownActionsPathname'"),
-  'Root.js should use isMarkdownActionsPathname'
-);
-assert.ok(
-  dropdownSrc.includes("from '../../utils/isMarkdownActionsPathname'"),
-  'MarkdownActionsDropdown should use isMarkdownActionsPathname'
-);
+assert.match(
+  rootSrc,
+  /from\s+['"]\.\.\/utils\/isMarkdownActionsPathname(?:\.js)?['"]/,
+  'Root.js should use isMarkdownActionsPathname'
+);
+assert.match(
+  dropdownSrc,
+  /from\s+['"]\.\.\/\.\.\/utils\/isMarkdownActionsPathname(?:\.js)?['"]/,
+  'MarkdownActionsDropdown should use isMarkdownActionsPathname'
+);

Also applies to: 41-42

🤖 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 `@__tests__/markdown-actions-routes.test.mjs` around lines 33 - 38, The test is
brittle because it checks exact import text via rootSrc.includes and
dropdownSrc.includes; update the assertions to use tolerant regex matches that
verify the module imports isMarkdownActionsPathname regardless of quote style or
minor path formatting. Replace the two includes checks for rootSrc and
dropdownSrc with regex assertions (e.g., testing that the source contains an
import/require of isMarkdownActionsPathname) so the test still targets the
intent while accepting single/double quotes, whitespace, or minor path
variations for the symbols rootSrc, dropdownSrc and the module name
isMarkdownActionsPathname.
skills/morph-dapp-codegen/SKILL.md (1)

90-90: 💤 Low value

Consider hyphenating compound modifier.

"auto commit" should be hyphenated as "auto-commit" when used as a compound modifier before a noun/verb.

✏️ Proposed style fix
-4. **Do not auto commit in any phase** (including Red) unless the user explicitly asks.
+4. **Do not auto-commit in any phase** (including Red) unless the user explicitly asks.
🤖 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 `@skills/morph-dapp-codegen/SKILL.md` at line 90, Update the phrase "auto
commit" to the hyphenated compound modifier "auto-commit" in the SKILL.md line
that currently reads "Do not auto commit in any phase" so it becomes "Do not
auto-commit in any phase"; search for other occurrences of the same phrase in
the document and apply the same hyphenation to maintain consistent style.
🤖 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 `@skills/morph-dapp-codegen/SKILL.md`:
- Around line 58-77: The SKILL.md currently references Alt Fee field names
feeTokenID and feeLimit but does not list a canonical source that documents
them; update the verified_against section in SKILL.md to either (A) add the
canonical documentation path or repo file that explicitly defines these fields
(e.g., the SDK or API docs file that exports or documents feeTokenID/feeLimit),
or (B) if those names are taken directly from runtime SDK exports, confirm by
importing/inspecting the SDK package (e.g., `@morph-network/chain` or the JS SDK
source) and cite the exact module/file and version that defines feeTokenID and
feeLimit, then add that canonical path and version to verified_against so the
skill meets the guideline.

---

Nitpick comments:
In `@__tests__/markdown-actions-routes.test.mjs`:
- Around line 33-38: The test is brittle because it checks exact import text via
rootSrc.includes and dropdownSrc.includes; update the assertions to use tolerant
regex matches that verify the module imports isMarkdownActionsPathname
regardless of quote style or minor path formatting. Replace the two includes
checks for rootSrc and dropdownSrc with regex assertions (e.g., testing that the
source contains an import/require of isMarkdownActionsPathname) so the test
still targets the intent while accepting single/double quotes, whitespace, or
minor path variations for the symbols rootSrc, dropdownSrc and the module name
isMarkdownActionsPathname.

In `@skills/morph-dapp-codegen/SKILL.md`:
- Line 90: Update the phrase "auto commit" to the hyphenated compound modifier
"auto-commit" in the SKILL.md line that currently reads "Do not auto commit in
any phase" so it becomes "Do not auto-commit in any phase"; search for other
occurrences of the same phrase in the document and apply the same hyphenation to
maintain consistent style.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6a055165-8840-44b8-838e-239103a4ec7a

📥 Commits

Reviewing files that changed from the base of the PR and between d5f4443 and 51544ad.

📒 Files selected for processing (21)
  • CLAUDE.md
  • CONTRIBUTING.md
  • __tests__/build-toolchain-constraints.test.mjs
  • __tests__/claude-md.test.mjs
  • __tests__/contributing-md.test.mjs
  • __tests__/is-alt-fee.test.mjs
  • __tests__/markdown-actions-routes.test.mjs
  • __tests__/morph-contracts-skill-tokenlist.test.mjs
  • __tests__/morph-dapp-planning-skill.test.mjs
  • __tests__/morph-doc-skill-inventory.test.mjs
  • __tests__/morph-js-sdk-skill.test.mjs
  • __tests__/skills-sidebar.test.mjs
  • __tests__/vision-md.test.mjs
  • scripts/run-tests.mjs
  • skills/morph-dapp-codegen/SKILL.md
  • skills/morph-dapp-planning/SKILL.md
  • skills/morph-full-node-run-in-docker/SKILL.md
  • skills/morph-skill-ln/SKILL.md
  • skills/morph-verify-contracts/SKILL.md
  • src/utils/isAltFee.js
  • src/utils/isMarkdownActionsPathname.js
✅ Files skipped from review due to trivial changes (4)
  • CONTRIBUTING.md
  • skills/morph-skill-ln/SKILL.md
  • skills/morph-dapp-planning/SKILL.md
  • skills/morph-full-node-run-in-docker/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (11)
  • skills/morph-verify-contracts/SKILL.md
  • tests/morph-js-sdk-skill.test.mjs
  • scripts/run-tests.mjs
  • tests/skills-sidebar.test.mjs
  • tests/morph-dapp-planning-skill.test.mjs
  • tests/morph-contracts-skill-tokenlist.test.mjs
  • tests/contributing-md.test.mjs
  • tests/morph-doc-skill-inventory.test.mjs
  • src/utils/isAltFee.js
  • tests/is-alt-fee.test.mjs
  • tests/vision-md.test.mjs

Comment thread skills/morph-dapp-codegen/SKILL.md
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@agents/morph-doc-agent.md`:
- Around line 18-20: Update the agent documentation to mark the YAML frontmatter
fields last_verified and verified_against as required rather than recommended:
change the "Recommended frontmatter" line into the required list (so frontmatter
now includes name, description, last_verified, and verified_against) and update
the explanatory text to reference the SKILL.md contract and the 90-day decay
rule; ensure the body guidance and examples reflect that last_verified and
verified_against are mandatory when creating/updating skills.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8b33e726-df23-453e-b394-0e6536f3bfdc

📥 Commits

Reviewing files that changed from the base of the PR and between 51544ad and 7fd6ae9.

📒 Files selected for processing (11)
  • CONTRIBUTING.md
  • VISION.md
  • __tests__/agent-driven-development-workflow-doc.test.mjs
  • __tests__/morph-dapp-workflow-skill.test.mjs
  • __tests__/morph-doc-agent.test.mjs
  • __tests__/vision-md.test.mjs
  • agents/morph-dapp-agent.md
  • agents/morph-doc-agent.md
  • docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md
  • skills/morph-dapp-codegen/SKILL.md
  • skills/morph-dapp-workflow/SKILL.md
✅ Files skipped from review due to trivial changes (1)
  • CONTRIBUTING.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • skills/morph-dapp-workflow/SKILL.md
  • tests/agent-driven-development-workflow-doc.test.mjs
  • tests/morph-doc-agent.test.mjs
  • tests/morph-dapp-workflow-skill.test.mjs

Comment thread agents/morph-doc-agent.md Outdated
…bcategory

Add 9 pages under skills/morph-skill/ mirroring the 8 runtime CLI skills from
github.com/morph-l2/morph-skill (wallet, explorer, identity, dex, bridge,
altfee, 7702, x402) plus an overview index.md with role boundary, routing
table, and BGW handoff guidance.

- New nested category in sidebars-skills.js (under Skill playbooks)
- Whitelist morph-skill/ in skills-sidebar.test.mjs and
  morph-doc-skill-inventory.test.mjs (flat .md pattern, not <id>/SKILL.md)
- Add see-also disambiguation between L1↔L2 native bridge and the new
  cross-chain swap mirror (both named morph-bridge upstream)
- All facts (addresses, commands, tx types, formulas) verbatim-checked
  against upstream SKILL.md files; first BGW mention links to the
  social-wallet-integration doc on each page
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

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

⚠️ Outside diff range comments (1)
skills/morph-skill/morph-bridge.md (1)

11-97: 🛠️ Refactor suggestion | 🟠 Major | 🏗️ Heavy lift

Restructure this skill to pointer-first format with explicit Execution Steps.

This page is currently a full playbook-style content block. Please convert it to pointer-first navigation (prompt triggers → Execution Steps → deep links into docs/ sections), and keep only concise routing context plus Related Skills links.

Based on learnings: "Skills must be pointer-first with Execution Steps and links into concrete docs/ sections; avoid pasting full MDX content into skills and use Related Skills and references only as directed pointers."

🤖 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 `@skills/morph-skill/morph-bridge.md` around lines 11 - 97, The file currently
contains a full playbook-style MDX; refactor skills/morph-skill/morph-bridge.md
into a pointer-first format by replacing the long narrative with: 1) a short
"Prompt triggers" list (commands like bridge-chains, bridge-quote, bridge-login,
bridge-swap), 2) a concise "Execution Steps" section that enumerates
step-by-step actions for each trigger (e.g., for bridge-swap: 1. get quote via
bridge-quote, 2. login via bridge-login for JWT, 3. make order via
bridge-make-order, 4. sign and submit via bridge-submit-order or bridge-swap)
and 3) "Deep links" to the canonical docs (reference the existing SKILL.md link
and any docs/ sections) plus a "Related Skills" block (morph-dex, morph-wallet).
Remove the long tables and playbook prose, keep only short routing context,
safety bullet reminders, and the existing canonical reference link
(`skills/morph-bridge/SKILL.md`) so readers are directed to detailed docs.
🤖 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 `@skills/morph-skill/morph-7702.md`:
- Around line 44-46: The fenced code block containing the expression
keccak256(0x05 || RLP([chainId, contract, nonce])) is missing a language tag;
update that triple-backtick fence to include a language identifier (for example
add ```text) so the block becomes a labeled fenced code block for MD040
compliance.

In `@skills/morph-skill/morph-altfee.md`:
- Around line 56-58: The code fence around the fee formula in morph-altfee.md is
missing a language tag; update the triple-backtick fence that surrounds the line
containing "feeLimit >= (gasFeeCap × gasLimit + L1DataFee) × tokenScale /
feeRate" to use a language tag (e.g., change ``` to ```text) so the fence
becomes ```text ... ``` to satisfy MD040 and strict markdown checks.

In `@skills/morph-skill/morph-identity.md`:
- Line 81: Replace the compound modifier "5 minute window" with the hyphenated
form "5-minute window" in the morph-identity documentation where the phrase
appears (look for the exact string "5 minute window" in morph-identity.md / the
section containing the heading or sentence around Line 81) so the user-facing
docs use the correct hyphenated compound modifier.

In `@skills/morph-skill/morph-x402.md`:
- Line 46: The table row for `x402-server` contains an unescaped pipe inside the
flags cell (`--dev | --name myagent`) which breaks the 3-column table; edit the
`x402-server` row in morph-x402.md and either escape the pipe as `\|`, replace
it with a word (e.g., "or") or use an HTML entity (`&`#124`;`) so the flags cell
remains a single table cell (update the backticked flags string accordingly).

---

Outside diff comments:
In `@skills/morph-skill/morph-bridge.md`:
- Around line 11-97: The file currently contains a full playbook-style MDX;
refactor skills/morph-skill/morph-bridge.md into a pointer-first format by
replacing the long narrative with: 1) a short "Prompt triggers" list (commands
like bridge-chains, bridge-quote, bridge-login, bridge-swap), 2) a concise
"Execution Steps" section that enumerates step-by-step actions for each trigger
(e.g., for bridge-swap: 1. get quote via bridge-quote, 2. login via bridge-login
for JWT, 3. make order via bridge-make-order, 4. sign and submit via
bridge-submit-order or bridge-swap) and 3) "Deep links" to the canonical docs
(reference the existing SKILL.md link and any docs/ sections) plus a "Related
Skills" block (morph-dex, morph-wallet). Remove the long tables and playbook
prose, keep only short routing context, safety bullet reminders, and the
existing canonical reference link (`skills/morph-bridge/SKILL.md`) so readers
are directed to detailed docs.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: b7bd7fda-e4db-4723-8f0e-37b5f2ebdde0

📥 Commits

Reviewing files that changed from the base of the PR and between 7fd6ae9 and a99b355.

📒 Files selected for processing (13)
  • __tests__/morph-doc-skill-inventory.test.mjs
  • __tests__/skills-sidebar.test.mjs
  • sidebars-skills.js
  • skills/morph-bridge/SKILL.md
  • skills/morph-skill/index.md
  • skills/morph-skill/morph-7702.md
  • skills/morph-skill/morph-altfee.md
  • skills/morph-skill/morph-bridge.md
  • skills/morph-skill/morph-dex.md
  • skills/morph-skill/morph-explorer.md
  • skills/morph-skill/morph-identity.md
  • skills/morph-skill/morph-wallet.md
  • skills/morph-skill/morph-x402.md
✅ Files skipped from review due to trivial changes (5)
  • skills/morph-skill/morph-wallet.md
  • skills/morph-skill/morph-dex.md
  • sidebars-skills.js
  • skills/morph-skill/index.md
  • skills/morph-bridge/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • tests/skills-sidebar.test.mjs
  • tests/morph-doc-skill-inventory.test.mjs

Comment thread skills/morph-skill/morph-7702.md Outdated
Comment thread skills/morph-skill/morph-altfee.md Outdated
Comment thread skills/morph-skill/morph-identity.md Outdated
Comment thread skills/morph-skill/morph-x402.md Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🧹 Nitpick comments (1)
__tests__/morph-skill-creator.test.mjs (1)

43-47: ⚡ Quick win

Avoid coupling this test to the current absence of morph-tx-cost evals.

This will fail as soon as that skill legitimately adds trigger evals. Use a guaranteed-missing synthetic skill id to keep the test stable.

Suggested fix
-assert.equal(
-  resolveTriggerEvalSetPath(ROOT, 'morph-tx-cost'),
-  null,
-  'morph-tx-cost should have no trigger eval until added',
-);
+assert.equal(
+  resolveTriggerEvalSetPath(ROOT, '__nonexistent-skill-for-test__'),
+  null,
+  'unknown skill id should resolve to no trigger eval set',
+);
🤖 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 `@__tests__/morph-skill-creator.test.mjs` around lines 43 - 47, Test is coupled
to a real skill id ('morph-tx-cost') which may gain triggers; change it to a
guaranteed-missing synthetic id. Update the assertion in the test that calls
resolveTriggerEvalSetPath (in __tests__/morph-skill-creator.test.mjs) to use a
made-up id (e.g., '___missing-synthetic-skill-id___') instead of 'morph-tx-cost'
so the expectation of null remains stable even if real skills add evals.
🤖 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 @.github/workflows/skill-freshness-bot.yml:
- Line 23: Replace mutable GitHub Action tags with immutable commit SHAs: locate
all action usages such as "actions/checkout@v4" and any other occurrences using
tag refs like "`@v4`" or "`@v7`" in this workflow, fetch the corresponding full
commit SHA from each action's GitHub release/tags page, and update the workflow
to reference the full SHA (e.g., actions/checkout@<full-commit-sha>) for each
action to remove supply-chain risk and ensure reproducible runs.
- Around line 22-24: The Checkout step using actions/checkout@v4 currently
leaves GitHub credentials persisted; update the Checkout step (the step named
"Checkout" that uses actions/checkout@v4) to add persist-credentials: false so
the workflow does not retain the GITHUB_TOKEN after checkout, reducing token
exposure for scheduled runs.

In `@agents/morph-skill-creator-agent.md`:
- Around line 17-25: Add an explicit reference to skills/README.md in the
Default stack section (and the similar block at lines ~53-58) so
agents/morph-skill-creator-agent.md follows the agents/*.md guideline: update
the table (Layer/Artifact) or nearby prose to include a bullet or table row
pointing to "skills/README.md" and a short note like "See skills/README.md for
IDE mirrors/symlink configuration" so IDE mirror/symlink setup is clearly
documented alongside the canonical skill paths.

In `@scripts/lib/skill-creator-path.mjs`:
- Around line 33-40: The current return block in
scripts/lib/skill-creator-path.mjs returns paths even when some script files are
missing; update the logic that constructs and returns the object (the variables
runLoop, runEval, quickValidate, aggregateBenchmark) to validate existence of
runEval, quickValidate and aggregateBenchmark with fs.existsSync before
returning, and if any are missing either throw an Error or return a clear
failure (so install/reporting does not succeed); only return the object from the
function when all four paths exist, otherwise surface a descriptive error
message indicating which of run_eval.py, quick_validate.py or
aggregate_benchmark.py is missing.

In `@scripts/lib/skill-freshness.mjs`:
- Around line 117-126: The code currently computes ageDays from lastVerified and
ignores negative values (future dates); update the logic around ageDays
(computed from now, lastVerified, MS_PER_DAY) to explicitly detect when ageDays
< 0 and push a new warning into warnings (including skillId, code:
'future_last_verified' or similar, a clear message referencing lastVerifiedRaw
and ageDays, and lastVerified: lastVerifiedRaw) instead of silently skipping;
keep the existing stale branch (ageDays > thresholdDays) untouched and ensure
you still parse/validate lastVerified before using it (the variables to modify
are ageDays, lastVerified, lastVerifiedRaw, warnings, thresholdDays).

In `@scripts/morph-skill-creator.mjs`:
- Around line 193-203: The current spawnSync invocation (const r =
spawnSync(python, [install.quickValidate, path.join(ROOT, 'skills', skillId)],
...)) downgrades any non-zero exit into a console.warn; change this so that when
r.status !== 0 you write r.stdout/r.stderr to stdout/stderr (as done above) and
then fail the process (e.g., throw an Error or call process.exit(r.status))
instead of only warning, so interpreter/runtime errors and quick_validate
failures block the run; update the handling around the r.status check to surface
the real failure and include the stdout/stderr details in the error path.

In `@scripts/skill-freshness-report.mjs`:
- Around line 29-31: The CLI currently accepts "--out --json" and treats
"--json" as the filepath; update the argument parsing in the script's
option-handling block (the branch that checks a === '--out' and uses argv[++i]
to set outPath) to validate the next token: ensure argv[i+1] exists and does not
start with '-' (i.e., is not another flag); if validation fails, emit a clear
error (or print help) and exit instead of consuming the flag as a path; adjust
the same branch that sets outPath so it only advances i after a successful
validation.

---

Nitpick comments:
In `@__tests__/morph-skill-creator.test.mjs`:
- Around line 43-47: Test is coupled to a real skill id ('morph-tx-cost') which
may gain triggers; change it to a guaranteed-missing synthetic id. Update the
assertion in the test that calls resolveTriggerEvalSetPath (in
__tests__/morph-skill-creator.test.mjs) to use a made-up id (e.g.,
'___missing-synthetic-skill-id___') instead of 'morph-tx-cost' so the
expectation of null remains stable even if real skills add evals.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: f21f4b82-a6e4-4ca8-b562-eedaa65b8ff6

📥 Commits

Reviewing files that changed from the base of the PR and between a99b355 and e06190d.

📒 Files selected for processing (31)
  • .github/workflows/skill-freshness-bot.yml
  • .gitignore
  • AGENTS.md
  • CONTRIBUTING.md
  • __tests__/agent-driven-development-workflow-doc.test.mjs
  • __tests__/contributing-md.test.mjs
  • __tests__/morph-doc-skill-inventory.test.mjs
  • __tests__/morph-skill-creator-agent.test.mjs
  • __tests__/morph-skill-creator.test.mjs
  • __tests__/skill-freshness-report.test.mjs
  • __tests__/skills-readme.test.mjs
  • agents/morph-dapp-agent.md
  • agents/morph-doc-agent.md
  • agents/morph-skill-creator-agent.md
  • docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md
  • package.json
  • scripts/lib/skill-creator-path.mjs
  • scripts/lib/skill-creator-python.mjs
  • scripts/lib/skill-freshness.mjs
  • scripts/morph-skill-creator-install.sh
  • scripts/morph-skill-creator.mjs
  • scripts/run-tests.mjs
  • scripts/skill-behavior-evals.template.json
  • scripts/skill-creator-requirements.txt
  • scripts/skill-freshness-bot.DESIGN.md
  • scripts/skill-freshness-report.mjs
  • scripts/skill-trigger-evals.morph-bridge.example.json
  • sidebars-agents.js
  • sidebars-skills.js
  • skills/README.md
  • skills/morph-skill-creator/SKILL.md
✅ Files skipped from review due to trivial changes (7)
  • scripts/skill-behavior-evals.template.json
  • scripts/skill-creator-requirements.txt
  • CONTRIBUTING.md
  • AGENTS.md
  • agents/morph-dapp-agent.md
  • skills/README.md
  • docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md

Comment thread .github/workflows/skill-freshness-bot.yml
Comment thread .github/workflows/skill-freshness-bot.yml Outdated
Comment thread agents/morph-skill-creator-agent.md
Comment thread scripts/lib/skill-creator-path.mjs
Comment thread scripts/lib/skill-freshness.mjs
Comment thread scripts/morph-skill-creator.mjs Outdated
Comment thread scripts/skill-freshness-report.mjs Outdated
DannyGet and others added 2 commits May 27, 2026 10:42
- Require last_verified/verified_against in morph-doc-agent; add Related Skills
  handoffs across core skills and morph-skill-ln (incl. morph-agent-ln).
- Refactor morph-skill/morph-bridge.md to pointer-first; fix mirror MD lint.
- Harden tests and scripts (freshness future dates, skill-creator paths, CLI --out,
  subprocess timeouts); pin skill-freshness-bot actions to SHAs.

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

5 participants