release: publish api-to-typemcp v0.2.2 - #78
Merged
Merged
Conversation
feat(agent-install): register generated MCPs safely
* feat(agent-install): register Hermes and Claude MCPs * fix(agent-install): harden CLI registration verification
…-v0-2-2 chore(release): prepare api-to-typemcp v0.2.2
sjungwon03-ai
approved these changes
Jul 29, 2026
sjungwon03-ai
left a comment
Member
There was a problem hiding this comment.
Code Review — api-to-typemcp v0.2.2 Release Promotion
Verdict: APPROVE
This dev → main release promotion is well-structured and safe to merge.
Security & Safety
- All file mutations use
O_NOFOLLOW,O_DIRECTORY, and per-component symlink traversal — no symlink-following path exists. - Atomic backup-and-replace with
O_EXCLbackup creation,fsync, inode-identity TOCTOU checks, and post-write reread/parse validation. - Secret-free by design: plans expose
env_namesonly;.envis never read; args resembling literal secrets are rejected. - Fingerprint-bound, single-use receipt gating prevents replay or plan mutation after approval.
- Batch rollback restores prior targets; CLI adapters attempt compensating
removeon failure.
Code Quality
- Clean module separation:
agent_clients(read-only detection),install_plan(immutable plan construction),config_codecs(narrow format adapters),install_mcp(atomic mutation). - Fail-closed throughout: unsupported formats, missing configs, symlinks, and changed fingerprints all raise typed errors.
patch_jsonccorrectly refuses to operate until a comment-preserving writer is proven — honest engineering.
Testing
- 140 engine tests + new dedicated suites for every module (plan, install, codecs, CLI adapters, docs contract).
- Edge cases covered: symlinked ancestors, raced writes, duplicate names, batch partial failure, receipt single-use, Claude name-prefix false positives.
CI
e2e,release-promotion,docs-and-harness,bundled-engineall pass on headda8e4f2.release-skillcorrectly skipped (PR context, not main push).
Minor Observations (non-blocking)
write_portable_exportuses a plainwrite_textrather than atomic temp+replace; acceptable since it targets a project-local export, not an agent config._snapshot_specrestricts exports tonodecommand only — reasonable scope for v0.2.2.
No blocking findings. Clean release promotion with strong safety invariants.
sjungwon03-ai
approved these changes
Jul 29, 2026
sjungwon03-ai
left a comment
Member
There was a problem hiding this comment.
Release Promotion Review — APPROVE
Exact head: da8e4f22b81d7b2ede0683bdfd2f942b2f737b9d
Base main: 169bf82f4460c19c36c001de11a09cdd5c9e11f9
Verification evidence
| Gate | Result |
|---|---|
| main/dev lineage preserved | ✅ merge-base --is-ancestor origin/main HEAD + origin/dev HEAD enforced by release-promotion.yml:27-28; CI passed |
| 0.2.2 version consistency | ✅ SKILL.md:4 frontmatter, README.md:22 release link, .agents/scripts/test_skill_release.py:77 fixture all declare 0.2.2 / v0.2.2 |
| No secrets or artifacts in diff | ✅ grep across full diff returned only test fixtures and documentation references; no .env, dist/, .next/, node_modules/, binaries, or credential patterns |
| Main-push-gated release workflow | ✅ skill-release.yml:23-24 requires GITHUB_EVENT_NAME=push + GITHUB_REF=refs/heads/main; credential validation (lines 30-42) precedes release mutation (lines 111-127); least-privilege permissions (contents: read top-level, contents: write release job only, persist-credentials: false on publish checkouts) |
| Exact-head CI checks | ✅ All on da8e4f2: release-promotion pass 7s, docs-and-harness pass 6s, bundled-engine pass 19s, e2e pass 40s, release-skill correctly skipped (PR trigger, not main push) |
| PR governance | ✅ head dev → base main, MERGEABLE, Closes #77, correct labels/assignee per AGENTS.md |
No blocking findings. Release promotion is safe to squash-merge after this approval.
Independent formal review by sjungwon03-ai via Hermes Agent
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
devrelease candidateda8e4f22b81d7b2ede0683bdfd2f942b2f737b9dto release-onlymainapi-to-typemcpv0.2.2 skill through the main-push GitHub Release, ClawHub, and skills-hub.ai workflowVerification
python3 .agents/scripts/test_skill_release.py— 16 passedpython3 -m unittest discover -s skills/api-to-typemcp/tests -p "test_*.py" -q— 140 passedpython3 .agents/scripts/test_validate_docs.py— 8 passedpython3 .agents/scripts/test_workspace.py— 3 passedpython3 .agents/scripts/validate_docs.pypython3 .agents/scripts/validate_release_promotion.pypython3 -m py_compile .agents/scripts/*.py skills/api-to-typemcp/scripts/*.pygit diff --checkCloses #77