跳到正文
cccskills
免费在 GitHub 公开

3-verify-pr-fix

Evaluate whether a proposed LinkedIn integration fix addresses its linked issue by reviewing the report, code changes, and tests. Flag implementation concerns and optionally compare live results with a genuine recorded baseline after approval.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Verify PR #N, does this PR fix #M, check the fix in #N, or test the candidate PR.

集成工具LinkedInGitHub
查看安装方法

适用场景

  • Checking whether a PR addresses its linked issue
  • Reviewing language-dependent detection and selectors
  • Comparing live results with a recorded baseline
  • Organizing concerns before a merge decision

包含的文件(1)

  • SKILL.md7.7 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Verify a candidate PR

Review the packet, the candidate diff, and relevant tests. Live comparison against a captured baseline is optional. No edits, no merges, no pushes.

1. Resolve the PR and its linked issue

PR=$(echo "$ARGUMENTS" | sed -E 's|.*/||; s|#||g' | grep -oE '^[0-9]+' | head -1)
[ -z "$PR" ] && { echo "Invalid input: '$ARGUMENTS'. Pass a PR number or URL." >&2; exit 1; }
REPO=stickerdaniel/linkedin-mcp-server

gh pr view $PR --repo $REPO --json title,body,baseRefName,headRefName,headRepositoryOwner,mergeable,mergeStateStatus,additions,deletions,changedFiles,maintainerCanModify,statusCheckRollup

Extract the linked issue number from the PR body (Closes #, Fixes #, Resolves #, or plain #N). Call it ISSUE. If multiple, ask which one is the verification target.

Read that issue's packet and comments.

2. Packet, diff, and tests

This path does not need /tmp/repro-issue-$ISSUE-main.json. Absence of a local baseline limits the live branch, not the whole PR verdict. Do not create fake success or failure files.

gh pr diff $PR --repo $REPO
gh pr view $PR --repo $REPO --json files --jq '.files[].path'

Hard flags (any one downgrades a clean live pass to concerns):

  • Locale-dependent detection: == "Connect", in ["Pending", "Follow"], contains("1st"), aria-label="..." with translated text. Attribute presence is the locale-independent signal.
  • LinkedIn class-name selectors: .entity-result__item, .artdeco-button__text. Minimal generic selectors only (a[href*="/jobs/view/"]).
  • Multiple navigations behind one PERSON_SECTIONS / COMPANY_SECTIONS entry.
  • Missing tests beside the canonical owner from docs/linkedin-architecture.md.

A supplied capture or regression fixture can support a before-and-after claim within its scope. Protocol or startup failures are execution limits, not a pass.

This step is complete when the report can say whether the diff addresses the packet at this SHA, which audit flags apply, and whether a live comparison is still needed.

3. Optional live comparison

Only after an explicit yes, and only when a genuine captured baseline exists.

/2-repro-issue writes:

  • /tmp/repro-issue-<ISSUE>-main.json. Captured response
  • /tmp/repro-issue-<ISSUE>-meta.json. {tool, arguments, sha}

If either file is missing or empty, keep the packet-and-diff verdict. Offer the evidence-and-code path. A new live baseline requires approval.

Read sha from the meta file. Do not claim an on-main baseline merely because of the filename. Compare the same call and a sufficiently comparable account context before claiming a live fix.

if [ ! -s /tmp/repro-issue-$ISSUE-main.json ] || [ ! -s /tmp/repro-issue-$ISSUE-meta.json ]; then
  echo "No captured baseline. Keep the packet-and-diff verdict. Do not check out or call the server." >&2
  exit 0
fi
TOOL=$(jq -r .tool /tmp/repro-issue-$ISSUE-meta.json)
ARGS_JSON=$(jq -c .arguments /tmp/repro-issue-$ISSUE-meta.json)
BASE_SHA=$(jq -r .sha /tmp/repro-issue-$ISSUE-meta.json)
echo "Replaying: $TOOL($ARGS_JSON) from sha $BASE_SHA"

Guarded checkout. Leave the user's original branch or detached SHA intact. Clean up only processes and files this run created.

if [ -n "$(git status --porcelain)" ]; then
  echo "Worktree is dirty. Ask before checkout. Do not continue live comparison on a dirty tree." >&2
  exit 1
fi
CURRENT_REF=$(git symbolic-ref -q --short HEAD || git rev-parse HEAD)

git fetch origin "pull/$PR/head" || { echo "git fetch for PR #$PR failed, aborting before checkout." >&2; exit 1; }
PR_SHA=$(git rev-parse FETCH_HEAD)
git checkout --detach "$PR_SHA"

cleanup_verify() {
  rc=$?
  trap - EXIT INT TERM
  kill $SERVER_PID 2>/dev/null
  wait $SERVER_PID 2>/dev/null
  git checkout "$CURRENT_REF" 2>/dev/null
  rm -f /tmp/verify-pr-$PR.json /tmp/verify-pr-$PR-headers /tmp/verify-pr-$PR.log /tmp/verify-pr-$PR-init.json /tmp/verify-pr-$PR-initialized.json
  exit $rc
}
trap cleanup_verify EXIT INT TERM

Restart the server after checkout.

PORT=8765
while lsof -nP -iTCP:$PORT -sTCP:LISTEN >/dev/null 2>&1; do PORT=$((PORT+1)); done
uv run -m linkedin_mcp_server --transport streamable-http --port $PORT --log-level INFO > /tmp/verify-pr-$PR.log 2>&1 &
SERVER_PID=$!

for i in $(seq 1 30); do
  lsof -nP -iTCP:$PORT -sTCP:LISTEN >/dev/null 2>&1 && break
  kill -0 $SERVER_PID 2>/dev/null || { echo "Server died during startup. Tail of /tmp/verify-pr-$PR.log:" >&2; tail -20 /tmp/verify-pr-$PR.log >&2; exit 1; }
  sleep 1
done
lsof -nP -iTCP:$PORT -sTCP:LISTEN >/dev/null 2>&1 || { echo "Server never bound port $PORT after 30s" >&2; tail -20 /tmp/verify-pr-$PR.log >&2; exit 1; }

curl -s -D /tmp/verify-pr-$PR-headers -X POST http://127.0.0.1:$PORT/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"verify-pr","version":"1.0"}}}' \
  > /tmp/verify-pr-$PR-init.json

SESSION_ID=$(grep -i 'Mcp-Session-Id' /tmp/verify-pr-$PR-headers | awk '{print $2}' | tr -d '\r')
[ -z "$SESSION_ID" ] && { echo "MCP initialize returned no Mcp-Session-Id. Tail of /tmp/verify-pr-$PR.log:" >&2; tail -20 /tmp/verify-pr-$PR.log >&2; kill $SERVER_PID 2>/dev/null; exit 1; }
grep -q '"error"' /tmp/verify-pr-$PR-init.json && { echo "Initialize returned a protocol error. Execution limit." >&2; cat /tmp/verify-pr-$PR-init.json >&2; kill $SERVER_PID 2>/dev/null; exit 1; }

curl -s -X POST http://127.0.0.1:$PORT/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: $SESSION_ID" \
  -d '{"jsonrpc":"2.0","id":2,"method":"notifications/initialized","params":{}}' \
  > /tmp/verify-pr-$PR-initialized.json
grep -q '"error"' /tmp/verify-pr-$PR-initialized.json && { echo "notifications/initialized returned a protocol error. Execution limit." >&2; cat /tmp/verify-pr-$PR-initialized.json >&2; kill $SERVER_PID 2>/dev/null; exit 1; }

Capture and inspect both response bodies before tools/call. A protocol or validation error is an execution limit.

curl -s -X POST http://127.0.0.1:$PORT/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: $SESSION_ID" \
  -d "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"$TOOL\",\"arguments\":$ARGS_JSON}}" \
  | tee /tmp/verify-pr-$PR.json | head -200

kill $SERVER_PID 2>/dev/null; wait $SERVER_PID 2>/dev/null
diff -u /tmp/repro-issue-$ISSUE-main.json /tmp/verify-pr-$PR.json | head -200

Live outcomes: fixes in this environment, fixes with concerns, does not fix in this environment, execution limit. A success here never refutes a reporter failure on a different account.

4. Report

**PR #<PR>** (linked #<ISSUE>). <one-line PR title>
**Mergeable:** <CLEAN | DIRTY conflicts | BLOCKED>
**Scope:** <+X/-Y, N files>
**Packet/diff verdict:** <addresses the packet | does not address the packet | needs more evidence>
**Live verdict:** <optional, or skipped: no baseline>
**Audit flags:** <locale-dependent | DOM-class selectors | section-mapping violation | missing tests | none>
**Recommended next step:** <merge | request changes | take over via maintainer-edits | no live check needed>

Non-negotiables

  • Packet and diff first. Live comparison only after yes, with a genuine baseline.
  • Restart the server after checkout. Running workers hold stale code.
  • Do not push, edit the PR, or merge.
  • Leave the user's original branch or detached SHA intact.
  • Locale and DOM-class flags remain concerns even if a live call looks fixed on one target.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Prioritize open LinkedIn integration issues and pull requests, or proposed code changes, using report completeness, severity, reach, and readiness checks. Produce ranked lists, identify missing evidence, and recommend concrete next steps for maintainers.

中文简介正在准备中。当前显示英语简介。

  • Prioritizing a backlog of open issues
  • Separating reports that need more evidence
  • Comparing pull requests for production readiness
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

Investigate LinkedIn integration bugs by comparing issue reports with source code. Separate established facts from unverified claims, identify missing evidence, and optionally check reproduction in a live environment after explicit approval.

中文简介正在准备中。当前显示英语简介。

  • Investigating a reported LinkedIn integration bug
  • Identifying evidence missing from an issue report
  • Checking live reproduction after approval
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

Search Git repositories locally to answer questions about implementation or usage. The skill clones or updates repositories, examines their contents, and presents findings with source links and complete code examples, including necessary imports.

中文简介正在准备中。当前显示英语简介。

  • Investigating how a repository implements a feature
  • Finding usage examples with complete imports
  • Revisiting and searching previously cloned repositories
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

Prepare GitHub bug reports, feature requests, documentation issues, and chores using repository forms and supporting evidence. Search existing issues to choose between a new report and a comment, then publish only after approval of the exact public text.

中文简介正在准备中。当前显示英语简介。

  • Preparing a bug report with supporting evidence
  • Drafting a feature request using the repository form
  • Adding new evidence to an existing issue
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

Use LinkedIn profiles, company information, jobs, posts, and inbox conversations for recruiting, job searches, and outreach research. Through the bundled MCP server, an agent connection to LinkedIn, the skill also handles explicitly authorized messages and connection requests.

中文简介正在准备中。当前显示英语简介。

  • Researching people and companies for recruiting
  • Finding jobs and checking application links
  • Reviewing posts and feed content
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

Collect PR review feedback, check each finding against code and documentation, and fix valid issues. Run project checks, commit and push changes, then reply to review threads and resolve fixed findings or false positives.

中文简介正在准备中。当前显示英语简介。

  • Deduplicating feedback from multiple reviewers
  • Checking review findings against current code
  • Testing and pushing fixes for valid findings
stickerdaniel/linkedin-mcp-server39742026年10月21日 更新

查看 stickerdaniel 的全部技能

报告此技能的问题