Skip to content

chore: prepare 2.0.0 release - #70

Merged
jack-arturo merged 3 commits into
mainfrom
chore/2.0.0-release-prep
Aug 12, 2026
Merged

chore: prepare 2.0.0 release#70
jack-arturo merged 3 commits into
mainfrom
chore/2.0.0-release-prep

Conversation

@jack-arturo

Copy link
Copy Markdown
Member

Prep work that must land on main before release PR #39 merges. The npm-publish job does a bare actions/checkout@v4 on the push: main event, so the tarball is built from main at the release commit — not from #39's diff. None of this can ride in the release PR.

Closes the packaging gap that would otherwise ship a personal permissions file to npm.

Packaging — the blocker

package.json had no files array and there is no .npmignore, so npm fell back to .gitignore:

files unpacked
Published 1.2.3 72 513 kB
main today 153 943 kB
This PR 80 482 kB

The 81 extra files included all 21 of src/, all 33 of __tests__/, 6 .github/ files, and .claude/settings.local.json.

There was also a latent hazard: .gitignore:2 is dist/. If a future npm applied the fallback strictly, the published package would contain no runtime code and every install would break. An explicit files allowlist is deny-by-default and makes the .gitignore coupling irrelevant.

Verified the result still contains everything the bins need — dist/index.js, dist/auth-standalone.js, both postbuild-copied .cjs files, and all four scripts/ files (postinstall runs scripts/post-install.js, which imports scripts/detect-environment.js).

Version reporting

Two hardcoded strings release-please does not touch:

  • src/index.ts:625version: "1.2.0" in the MCP Server constructor. This is what every client sees in the initialize handshake, and it was already wrong for 1.2.3.
  • src/index.ts:1339version: "1.2.3" in the connection({action:"status"}) payload.

Both are now 2.0.0 and carry // x-release-please-version annotations, with src/index.ts registered as a generic extra-file in release-please-config.json so future releases stay in sync. (Registering the path alone does nothing — the annotation is what the generic updater matches. Set by hand as well, so 2.0.0 is correct either way.)

CI

release-please.yml runs npm test on Node 24 at publish time, but the matrix only covered 20.16.x / 22.x. A Node-24-only failure would produce a git tag and GitHub Release with no npm publish — a half-released state costing a version bump to escape. Added 24.x.

Verified locally on Node 24.15.0 first: lint clean, build OK, 280/280 tests across 27 suites.

Docs

README

  • New Node.js requirement section. grep -ni node README.md previously returned zero matches — the >=20.16.0 floor lived only in package.json and AGENTS.md, neither of which a user reads.
  • Upgrade-from-1.x note covering the Node floor, the get_resource default flip, and the alias-compatible 27→15 consolidation.
  • Sections for the four undocumented tools: evernote_get_resource, evernote_add_resource_to_note, evernote_update_notebook, evernote_update_tag. The reference documented 11 of 15. get_resource is the important one — its binary→text default flip is the headline runtime break, and a README-only reader got no warning at all.
  • Contributing step said to target develop; corrected to main (contradicted AGENTS.md). Also dropped a stale "Railway template deployments" claim — nothing here deploys a Railway template.
  • Retitled ## Connection Resilience (v1.2.0+).

CONNECTION_TROUBLESHOOTING.md (linked twice from README) presented ten retired tool names as the current API rather than as aliases. evernote_reconnectevernote_connection({action:"reconnect"}), evernote_health_check({verbose:true})evernote_connection({action:"status", verbose:true}), plus two v1.2.0 headings.

Context

Unblocks #69 — npm has served the pre-getUserUrls() build since 2026-01-21 while the fix sat unreleased on main.

Follow-ups intentionally not in this PR: #61 (polling drops >100 changes/interval, real but gated behind EVERNOTE_POLLING_ENABLED) → 2.0.1; remaining doc debt (MIGRATION.md Node note, TEST_DOCUMENTATION.md Node matrix, README's 9 missing env vars incl. EVERNOTE_WEBHOOK_SECRET, SECURITY.md/CONTRIBUTING.md) → separate docs PR.

🤖 Generated with Claude Code

jack-arturo and others added 2 commits August 10, 2026 12:35
Packaging, version-reporting, and doc fixes that must land on main before
the release PR merges — npm-publish checks out main at the release commit,
so none of this can ride in the release PR itself.

Packaging (the blocker): package.json had no `files` array and there is no
.npmignore, so npm fell back to .gitignore. `npm pack` produced 153 files /
943kB including all of src/, all 33 test files, .github/, and
.claude/settings.local.json. Adding an explicit allowlist brings that to
80 files / 482kB. It also removes the latent hazard that .gitignore's
`dist/` entry could someday publish a package with no runtime code.

Version reporting: src/index.ts hardcoded "1.2.0" in the MCP Server
constructor (what every client sees in the initialize handshake) and
"1.2.3" in the connection status payload. Both are now 2.0.0 and carry
x-release-please-version annotations, with src/index.ts registered as a
generic extra-file so future releases stay in sync.

CI: add 24.x to the test matrix. The npm-publish job runs `npm test` on
Node 24, so a Node-24-only failure would otherwise surface as a git tag
and GitHub Release with no npm publish.

Docs: README gains a Node >=20.16.0 requirement (previously mentioned
nowhere), a 1.x upgrade note, and sections for the four undocumented
tools — most importantly evernote_get_resource, whose binary→text default
flip is the headline runtime break. Fixes the contributing instruction
that told people to target `develop`. CONNECTION_TROUBLESHOOTING.md, which
README links twice, presented ten retired tool names as the current API;
those now use evernote_connection({action}).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
release-please's config schema only allows json/toml/yaml/xml in the
object form of extra-files. `{"type": "generic", ...}` would have failed
validation and broken the release-please run outright — generic files
must be given as a plain path string.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: afda2f2c6d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md
Release PR #39 sat unmergeable for seven months. The org ruleset requires
the `test` status check, but release-please-action authored its PR with
the default GITHUB_TOKEN, and GitHub suppresses workflow triggers for
GITHUB_TOKEN-authored events. ci.yml therefore never ran on the release
branch — check-runs on its head SHA returned total_count 0 — so the
required check could never appear and the PR could never merge.

Passing the org-level RELEASE_PLEASE_TOKEN makes release PRs trigger CI
like any other PR. Adding a push/pull_request trigger for
release-please--* branches would not work; only workflow_dispatch and
repository_dispatch escape the suppression.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jack-arturo
jack-arturo merged commit 6ded94a into main Aug 12, 2026
15 checks passed
@jack-arturo
jack-arturo deleted the chore/2.0.0-release-prep branch August 12, 2026 00:23
jack-arturo added a commit that referenced this pull request Aug 12, 2026
package.json claimed `>=20.16.0`, but pdf-parse@2.4.5 declares
`>=20.16.0 <21 || >=22.3.0` — a disjoint range. We were therefore
claiming support for Node 21.x and 22.0-22.2, where an engine-strict
install fails or PDF extraction is unavailable. The README's "20.16.0 or
newer" repeated the same overclaim, and that README ships inside the
published tarball.

CI could not have caught this: the matrix pins `22.x`, which resolves to
a current 22 release far past 22.3, so the gap is invisible to it.

Adds __tests__/unit/engine-range.test.ts, which reads pdf-parse's own
engines field from node_modules and fails if ours ever admits a version
pdf-parse rejects. Verified it fails against the previous `>=20.16.0`,
naming 21.0.0, 21.7.3, 22.0.0 and 22.2.0. This matters because the range
is inherited from a dependency and will otherwise rot silently the next
time pdf-parse moves it.

semver was only present as an undeclared transitive; it and @types/semver
are now proper devDependencies. Neither reaches consumers — the `files`
allowlist excludes tests.

Reported by Codex on #70.

Co-authored-by: Claude Opus 5 <noreply@anthropic.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.

1 participant