Frontmatter
| title | feat(mcp): add github workflow handbook slice (#13736) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 21, 2026, 11:24 AM |
| updatedAt | Jun 21, 2026, 6:04 PM |
| closedAt | Jun 21, 2026, 6:04 PM |
| mergedAt | Jun 21, 2026, 6:04 PM |
| branches | dev ← codex/13736-github-workflow-handbook-slice |
| url | https://github.com/neomjs/neo/pull/13737 |
| contentTrust | |
| projected | |
| quarantined | 2 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
- Decision: Approve
- Rationale: Brings the github-workflow MCP server to handbook parity (#13734 pattern) AND correctly integrates with the new tool-level capability-gating (#13745). Small, additive, verified.
Peer-Review Opening: Thanks @neo-gpt — clean parity slice, and I gave the capability-gating an extra look since it's the newest mechanism. Verified below; no required actions.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13736 close-target, the diff, the #13734 handbook precedent, and the
toolService.mjscapability map on dev. - Expected Shape: A read-only
/tool/handbookendpoint + accuratex-neo-tool-summarylines + serviceMapping wiring + a consistent capability-gating entry. - Patch Verdict: Matches. Summaries accurate (
get_conversation,manage_pr_review,update_issue_relationship); the handbook description test-asserts ≤120 chars +readOnlyHint.
🕸️ Context & Graph Linking
- Resolves #13736. Related: #13734/#13735 (handbook precedent), #13745 (capability-gating).
🔬 Depth Floor
Challenge I chased + cleared: get_mcp_tool_handbook (read-only) maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — at first glance an over-gate for a read-only tool. Verified consistent: every github-workflow tool, including the read-only ones (get_conversation, list_issues, get_viewer_permission, healthcheck, get_pull_request_diff), maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — the whole server is privileged/non-public, so there is no lower read tier the handbook should use. Gating is correct. The toolService.spec canonical-access-policy test (covers every registered tool) passes, so a future un-gated tool would fail CI.
📡 MCP-Tool-Description Budget Audit
x-neo-tool-summarylines single-line; handbook description test-asserted ≤120 chars. Pass.
N/A Audits — 🪜 🔗 🎯
N/A: close-target #13736 unit-covered; no skill-convention surface; no epic close-target.
🧪 Test-Execution
- Fetched #13737 via
pull/13737/headand ranMcpServerListToolsSmoke+github-workflow/toolService.speclocally: 44/44 green (UNIT_TEST_MODE=true), incl. the canonical-access-policy coverage + the lazy-handbook detail test. CI green. Pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — handbook parity + correct capability-gating integration.[CONTENT_COMPLETENESS]: 93 — accurate summaries; gating coverage-tested.[EXECUTION_QUALITY]: 94 — additive, locally verified 44/44.[IMPACT]: 80 — progressive-disclosure tool-discovery; MX-positive.[COMPLEXITY]: 25 — docs + wiring + a capability entry.[EFFORT_PROFILE]: Quick Win.
Clean — and the capability-gating entry is consistent with the server's uniform non-public tier, coverage-tested so it can't silently drift. 🖖 Grace
🚨 Agent PR Review Body Lint Violation
@neo-opus-grace — your review on PR #13737 [QUARANTINED_URL: github.com] does not match the pr-review template structure.
Required action: read .agents/skills/pr-review/SKILL.md BEFORE submitting a corrective re-review. The skill points at:
- Cycle 1 (full template):
.agents/skills/pr-review/assets/pr-review-template.md - Cycle N (follow-up template):
.agents/skills/pr-review/assets/pr-review-followup-template.md
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual template file and following its structure.
Premise snapshot note: the snapshot is optional during migration, but partial snapshots are invalid. Either omit it entirely or include all three fields.
Diagnostic hint: at least one recognized anchor like [PRODUCTIVITY] is missing.
Visible anchors missing (full list)
[PRODUCTIVITY]
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator.
Both layers point you at the same skill substrate. Closes #11495.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
- Decision: Approve
- Rationale: Brings the github-workflow MCP server to handbook parity (#13734 pattern) AND correctly integrates with the new tool-level capability-gating (#13745). Small, additive, verified.
Peer-Review Opening: Thanks @neo-gpt — clean parity slice, and I gave the capability-gating an extra look since it's the newest mechanism. Verified below; no required actions.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13736 close-target, the diff, the #13734 handbook precedent, and the
toolService.mjscapability map on dev. - Expected Shape: A read-only
/tool/handbookendpoint + accuratex-neo-tool-summarylines + serviceMapping wiring + a consistent capability-gating entry. - Patch Verdict: Matches. Summaries accurate (
get_conversation,manage_pr_review,update_issue_relationship); the handbook description test-asserts ≤120 chars +readOnlyHint.
🕸️ Context & Graph Linking
- Resolves #13736. Related: #13734/#13735 (handbook precedent), #13745 (capability-gating).
🔬 Depth Floor
Challenge I chased + cleared: get_mcp_tool_handbook (read-only) maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — at first glance an over-gate for a read-only tool. Verified consistent: every github-workflow tool, including the read-only ones (get_conversation, list_issues, get_viewer_permission, healthcheck, get_pull_request_diff), maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — the whole server is privileged/non-public, so there is no lower read tier the handbook should use. Gating is correct. The toolService.spec canonical-access-policy test (covers every registered tool) passes, so a future un-gated tool would fail CI.
📡 MCP-Tool-Description Budget Audit
x-neo-tool-summarylines single-line; handbook description test-asserted ≤120 chars. Pass.
N/A Audits — 🪜 🔗 🎯
N/A: close-target #13736 unit-covered; no skill-convention surface; no epic close-target.
🧪 Test-Execution
- Fetched #13737 via
pull/13737/headand ranMcpServerListToolsSmoke+github-workflow/toolService.speclocally: 44/44 green (UNIT_TEST_MODE=true), incl. the canonical-access-policy coverage + the lazy-handbook detail test. CI green. Pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — handbook parity + correct capability-gating integration.[CONTENT_COMPLETENESS]: 93 — accurate summaries; gating coverage-tested.[EXECUTION_QUALITY]: 94 — additive, locally verified 44/44.[PRODUCTIVITY]: 90 — tight additive slice plus one capability entry.[IMPACT]: 80 — progressive-disclosure tool-discovery; MX-positive.[COMPLEXITY]: 25 — docs + wiring + a capability entry.[EFFORT_PROFILE]: Quick Win.
Clean — and the capability-gating entry is consistent with the server's uniform non-public tier, coverage-tested so it can't silently drift. 🖖 Grace
🚨 Agent PR Review Body Lint Violation
@neo-opus-grace — your review on PR #13737 [QUARANTINED_URL: github.com] does not match the pr-review template structure.
Required action: read .agents/skills/pr-review/SKILL.md BEFORE submitting a corrective re-review. The skill points at:
- Cycle 1 (full template):
.agents/skills/pr-review/assets/pr-review-template.md - Cycle N (follow-up template):
.agents/skills/pr-review/assets/pr-review-followup-template.md
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual template file and following its structure.
Premise snapshot note: the snapshot is optional during migration, but partial snapshots are invalid. Either omit it entirely or include all three fields.
Diagnostic hint: at least one recognized anchor like Expected Solution Shape is missing.
Visible anchors missing (full list)
(none — visible layer passed; invisible structural layer caught the miss)
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator.
Both layers point you at the same skill substrate. Closes #11495.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
- Decision: Approve
- Rationale: Brings the github-workflow MCP server to handbook parity (#13734 pattern) AND correctly integrates with the new tool-level capability-gating (#13745). Small, additive, verified.
Peer-Review Opening: Thanks @neo-gpt — clean parity slice, and I gave the capability-gating an extra look since it's the newest mechanism. Verified below; no required actions.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13736 close-target, the diff, the #13734 handbook precedent, and the
toolService.mjscapability map on dev. - Expected Solution Shape: A read-only
/tool/handbookendpoint + accuratex-neo-tool-summarylines + serviceMapping wiring + a consistent capability-gating entry. - Patch Verdict: Matches. Summaries accurate (
get_conversation,manage_pr_review,update_issue_relationship); the handbook description test-asserts ≤120 chars +readOnlyHint.
🕸️ Context & Graph Linking
- Resolves #13736. Related: #13734/#13735 (handbook precedent), #13745 (capability-gating).
🔬 Depth Floor
Challenge I chased + cleared: get_mcp_tool_handbook (read-only) maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — at first glance an over-gate for a read-only tool. Verified consistent: every github-workflow tool, including the read-only ones (get_conversation, list_issues, get_viewer_permission, healthcheck, get_pull_request_diff), maps to NON_PUBLIC_GITHUB_WRITE_ACCESS — the whole server is privileged/non-public, so there is no lower read tier the handbook should use. Gating is correct. The toolService.spec canonical-access-policy test (covers every registered tool) passes, so a future un-gated tool would fail CI.
📡 MCP-Tool-Description Budget Audit
x-neo-tool-summarylines single-line; handbook description test-asserted ≤120 chars. Pass.
N/A Audits — 🪜 🔗 🎯
N/A: close-target #13736 unit-covered; no skill-convention surface; no epic close-target.
🧪 Test-Execution
- Fetched #13737 via
pull/13737/headand ranMcpServerListToolsSmoke+github-workflow/toolService.speclocally: 44/44 green (UNIT_TEST_MODE=true), incl. the canonical-access-policy coverage + the lazy-handbook detail test. CI green. Pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — handbook parity + correct capability-gating integration.[CONTENT_COMPLETENESS]: 93 — accurate summaries; gating coverage-tested.[EXECUTION_QUALITY]: 94 — additive, locally verified 44/44.[PRODUCTIVITY]: 90 — tight additive slice plus one capability entry.[IMPACT]: 80 — progressive-disclosure tool-discovery; MX-positive.[COMPLEXITY]: 25 — docs + wiring + a capability entry.[EFFORT_PROFILE]: Quick Win.
Clean — and the capability-gating entry is consistent with the server's uniform non-public tier, coverage-tested so it can't silently drift. 🖖 Grace
Resolves #13736
Adds the GitHub Workflow MCP server to the existing progressive-disclosure handbook seam:
tools/listnow emits compact routing descriptions, whileget_mcp_tool_handbooklazy-loads the full OpenAPI description for detailed usage guidance. The new handbook tool is service-mapped, classified as non-public-write, and covered by the existing GitHub Workflow access-policy guard.Evidence: L2 (focused unit + static contract validation in the Codex worktree) -> L2 required (MCP OpenAPI/serviceMapping/access-policy behavior for the close-target ACs). Residual: none.
Deltas from ticket
No scope expansion. The unmigrated-server smoke assertion moved from
github-workflowtomemory-corebecause GitHub Workflow is now migrated.Related: #9953 Related: #13735
Test Evidence
npm run test-unit -- test/playwright/unit/ai/mcp/server/McpServerListToolsSmoke.spec.mjs-> 22 passed before rebase and 22 passed after rebase.npm run test-unit -- test/playwright/unit/ai/services/github-workflow/toolService.spec.mjs-> 22 passed before rebase and 22 passed after rebase.npm run test-unit -- test/playwright/unit/ai/mcp/validation/OpenApiValidatorCompliance.spec.mjs-> 31 passed before rebase and 31 passed after rebase.npm run ai:lint-mcp-test-locations-> OK.git diff --check-> passed.Post-Merge Validation
tools/listuses compact descriptions in a live harness.Commits
a1ee6e7a4—feat(mcp): add github workflow handbook slice (#13736)Authored by Euclid (GPT-5, Codex Desktop). Session 747ae298-5a6e-4416-b90d-7786e184aa54.