Repository navigation
Conversation
- turbo.json: pipeline -> tasks. - Turbo 2 runs tasks in strict env mode, so the release task now passes through the CI/GitHub/npm/Yarn variables semantic-release needs. - Turbo 2 ships a built-in `turbo docs <query>` command, so root scripts now use the explicit `turbo run <task>` form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
typedoc 0.25.8 -> 0.28.20, typedoc-plugin-markdown 3.17.1 -> 4.14.0, typedoc-plugin-merge-modules 5.1.0 -> 7.0.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
semantic-release 23.1.1 -> 25.0.9 (semantic-release-yarn is already on its latest, 3.0.2). semantic-release 25 needs Node ^22.14 || >=24.10; the release workflow runs on .nvmrc (25.2.1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3f52540 to
729a4d2
Compare
The next commit's yarn dedupe collapses the stale @types/react@* 18.3.3 lockfile entry into 19.2.18 (the version packages/native already declares). React 19's types no longer declare a global JSX namespace, so `JSX.Element` would stop compiling. ReactElement works on both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lockfile only, no new resolutions: brace-expansion (1.1.21 / 2.1.7 / 5.0.12), braces 3.0.3, compression 1.8.2, flatted 3.4.4, form-data 4.0.6, joi 17.13.8, js-yaml@3 3.15.2, lodash / lodash-es 4.18.1, micromatch 4.0.8, picomatch (2.3.2 / 4.0.7), ws (7.5.13 / 8.22.0). js-yaml 4.x is left to #182. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every mocha 11.x release pins serialize-javascript to ^6, which is vulnerable (GHSA-5c6j-r48x-rmvq, high; GHSA-qj8w-gfj5-8c6v, moderate). mocha 12 depends on ^7.1.1 (resolves 7.1.2), so this clears both without forcing a major on mocha 11 through a resolution. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mocha 12 needs Node ^20.19.0 || >=22.12.0; the old ">=20" let 20.0-20.18 install and then fail at test time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
typedoc writes to ../../docs/<pkg>/build, outside the package, so turbo can't capture it as an output: a cache hit restored no docs (turbo 2 now warns about this). Always run it instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Hi @fefi95, thanks for batching these upgrades. Moving to Turbo 2 and clearing the transitive alerts in one go is really helpful.
I'm requesting changes for one item that I think will break the next real release. The rest are smaller and I've left them inline.
Blocking
turbo.json: Turbo 2's strict env mode will likely keep the GitHub OIDC variables away fromsemantic-release. Every package publishes with"provenance": true, and provenance needsACTIONS_ID_TOKEN_REQUEST_URL/_TOKEN. A dry run can't catch this, so it would only show up on the nextworkflow_dispatchrelease.
Non-blocking
mocha12 /semantic-release25 need a newer Node than our rootengines.node: ">=20"allows.@types/mochais still on v10 whilemochais on v12.- semantic-release jumps two majors (23 → 25, which brings commit-analyzer 13) and hasn't been run for real yet, so the scope-negation
releaseRulesare worth a quick check. - The same five devDependency bumps are repeated in 4 packages plus
examples/mocha. They could be hoisted to the root, but that can be a follow-up.
Pre-existing (not caused by this PR, FYI): the docs task's outputs: ["docs/*/build/**"] is resolved per package, but typedoc writes to ../../docs/<pkg>/build. So turbo caches no files, and after yarn clean a cache hit can leave docs/*/build empty. typedoc.json is also missing from inputs. It might be worth a follow-up issue, since this PR changes the typedoc majors.
🤖 Generated with Claude Code
| "cache": false, | ||
| "dependsOn": ["^build"] | ||
| "dependsOn": ["^build"], | ||
| "passThroughEnv": ["CI", "GITHUB_*", "GH_*", "NPM_*", "YARN_*"] |
There was a problem hiding this comment.
Turbo 2 runs tasks in strict env mode, so anything not listed here (or in turbo's small built-in allowlist) is removed from the task's environment. All four packages publish with publishConfig.provenance: true, and release.yml grants id-token: write for that. Provenance needs ACTIONS_ID_TOKEN_REQUEST_URL and ACTIONS_ID_TOKEN_REQUEST_TOKEN, and neither matches these globs. A dry run wouldn't catch this because nothing is published.
| "passThroughEnv": ["CI", "GITHUB_*", "GH_*", "NPM_*", "YARN_*"] | |
| "passThroughEnv": ["CI", "GITHUB_*", "GH_*", "NPM_*", "YARN_*", "ACTIONS_*", "RUNNER_*", "GIT_*", "SEMANTIC_RELEASE_*", "DEBUG"] |
(DEBUG is so DEBUG=semantic-release:* still works for troubleshooting. Alternatively, "envMode": "loose" on just this task would avoid keeping an allowlist up to date.)
There was a problem hiding this comment.
Applied your list in 8495f57. With ACTIONS_ID_TOKEN_REQUEST_URL=x turbo run release --dry=json, the variable now shows up in the release task's passthrough env; with the previous turbo.json it was dropped.
Related finding: provenance isn't in effect today. npm view @assertive-ts/core dist.attestations is empty for 2.0.0 and 2.1.0 (same for @assertive-ts/sinon), while it returns an attestation for e.g. semantic-release. And ACTIONS_ID_TOKEN doesn't appear anywhere in .yarn/releases/yarn-4.1.0.cjs. So the passthrough only matters once Yarn is upgraded. Noted in the PR description.
| "all-contributors-cli": "^6.26.1", | ||
| "mocha": "^11.8.0", | ||
| "semantic-release": "^23.1.1", | ||
| "mocha": "^12.0.3", |
There was a problem hiding this comment.
mocha@12 requires Node ^20.19.0 || >=22.12.0, and semantic-release@25 requires ^22.14.0 || >=24.10.0. The root engines.node is still >=20, so the engines plugin lets someone on Node 20.11 / 22.0 install and then fail with a confusing error in yarn test / yarn release. CI is fine because it resolves the latest 20/22/24. Should we raise the root engines.node to ^20.19.0 || >=22.12.0?
There was a problem hiding this comment.
Done in 257bdb0: root engines.node is now ^20.19.0 || >=22.12.0. The release job reads .nvmrc (25.2.1), which also satisfies semantic-release 25.
| @@ -11,7 +11,7 @@ | |||
| "@examples/symbol-plugin": "workspace:^", | |||
| "@types/mocha": "^10.0.6", | |||
There was a problem hiding this comment.
@types/mocha is still ^10.0.6 (10.0.6 in the lockfile) while the runtime is now mocha 12, so the tests type-check against an older API. Could we bump it together with mocha?
There was a problem hiding this comment.
Bumped to ^10.0.10 in all five packages (715c8b2). That's the latest @types/mocha on npm; there is no v11 or v12, and mocha 12.0.3 doesn't ship its own type definitions.
| "mocha": "^11.8.0", | ||
| "semantic-release": "^23.1.1", | ||
| "mocha": "^12.0.3", | ||
| "semantic-release": "^25.0.9", |
There was a problem hiding this comment.
This is two majors of semantic-release (and commit-analyzer 12 → 13, @semantic-release/github → 12). Since yarn release wasn't run for real, could you double-check that the releaseRules scope negations in .releaserc.json (!core, !all, …) still match the same way under commit-analyzer 13? If not, the first release after merge could publish every package for a commit scoped to one package, or publish none.
There was a problem hiding this comment.
Checked by running analyzeCommits from commit-analyzer 12.0.0 (main's lockfile) and 13.0.1 (this PR) with the packages/core/.releaserc.json rules on the same commits. Results are identical:
| Commit | 12.0.0 | 13.0.1 |
|---|---|---|
feat(core), fix(core), feat(dom), feat(all), chore(all) |
no release | no release |
feat: |
minor | minor |
fix: |
patch | patch |
feat(core)!: + BREAKING CHANGE |
major | major |
Unchanged by this PR, but worth knowing: with these rules a scoped feat(core) / fix(core) doesn't trigger a release on either version.
| "jsdom": "^24.0.0", | ||
| "jsdom-global": "^3.0.2", | ||
| "mocha": "^11.8.0", | ||
| "mocha": "^12.0.3", |
There was a problem hiding this comment.
The same mocha / semantic-release / typedoc* bumps are hand-edited in core, dom, native, sinon and examples/mocha. We could hoist them to the root devDependencies so the next upgrade is a single edit and can't drift. That's fine as a follow-up and doesn't need to be in this PR.
There was a problem hiding this comment.
Agreed, leaving the hoisting for a follow-up so this PR stays scoped to the alerts.
729a4d2 to
3f1c7ff
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #188
Closes #198
Parent tools are bumped first, then the lockfile is refreshed within existing ranges. No
resolutionsadded. One commit per step. No published package's runtimedependencieschanged: onlydevDependencieswere edited.Not covered here, because other PRs own them:
js-yaml4.x (#182),minimatch(#185),ip-address/socks(#186) andshell-quote(#187). Expect ayarn.lockconflict with whichever of these merges first. The parent bumps and the dedupe did shift someminimatchlockfile entries as a side effect (for example,^9.0.4moved from 9.0.5 to 9.0.9). This wasn't deliberate, and #185's targeted fix still applies.Changes
turbotypedoc/typedoc-plugin-markdown/typedoc-plugin-merge-modulessemantic-releasemochaserialize-javascript6.0.2 → 7.1.2; mocha 11 pins^6)@types/mochapacote,sigstore@isaacs/brace-expansion,browserslist,cross-spawn,glob@10yarn dedupebrace-expansionbraces,compression,flatted,form-data,joijs-yaml@3,lodash,lodash-es,micromatch,picomatch,wshttp-cache-semantics,sprintf-js,elliptic,braces(new advisory),tmpBreaking changes handled
turbo.jsonmoved frompipelinetotasks.turbo docscommand, so the root scripts now useturbo run <task>.releasetask now getspassThroughEnvforCI,GITHUB_*,GH_*,NPM_*,YARN_*,ACTIONS_*,RUNNER_*,GIT_*,SEMANTIC_RELEASE_*andDEBUG. A--dry=jsonrun shows a setACTIONS_ID_TOKEN_REQUEST_URLreaching the task (it was stripped before).SinonSpyAssertionandSinonSpyCallAssertionare type-only exports, so their pages move fromclasses/tointerfaces/. External links to the old pages will 404.^20.19.0 || >=22.12.0. Rootenginesis tightened to match..mocharc.json,--forbid-onlyand the test counts are unchanged.docstask: caching is turned off. typedoc writes to../../docs/<pkg>/build, outside the package, so theoutputsglob matched nothing and a cache hit restored no docs..nvmrc(25.2.1), so this is fine. The.releaserc.jsonrules give identical results under commit-analyzer 12 (main) and 13 (this PR) on the same sample commits.yarn releasewas not run.yarn dedupemoved@types/reactto 19, which drops the globalJSXnamespace. One native test fixture now usesReactElementinstead.No upstream fix (for Vanta dismissal)
None of these is in the dependency tree of a published
@assertive-ts/*package. They are all dev-only, although Dependabot labels the alertsscope: runtime.http-cache-semantics4.1.1 (high, #180)semantic-release→@semantic-release/npm→npm→make-fetch-happen; also Yarn's implicitnode-gyp@10→make-fetch-happen@13make-fetch-happencopies build their cache policy withshared: false(lib/cache/policy.js). Also, no.releaserc.jsonloads@semantic-release/npm, so semantic-release never runs that npm code. Note: 4.3.0 is outside the advisory's<=4.2.0range and would close the alert, but itsmax-stalehandling is unchanged, so this PR keeps 4.1.1 rather than close the alert without a fix.sprintf-js1.0.3 (moderate, #184)jest/react-native→babel-plugin-istanbul→@istanbuljs/load-nyc-config→js-yaml@3→argparse@1js-yaml@3requiresargparseonly from its CLI (bin/js-yaml.js);load-nyc-configuses the library, soargparse/sprintf-jsare never loaded. Everysprintf-jsrelease is affected.elliptic6.6.1 (low, #162)@assertive-ts/native(dev) →react-native-testing-mocks→rewiremock→node-libs-browser→crypto-browserifyrewiremockloadsnode-libs-browseronly when__webpack_require__is defined; the tests run under mocha on Node, not webpack.braces3.0.3 (high, GHSA-vfj7)micromatch← jest / metro / semantic-releasetmp0.0.33 (high)all-contributors-cli→inquirer@7→external-editorexternal-editorpinstmp@^0.0.33, so the fix needs a 0.x major.all-contributors-clihas no editor prompt (noeditorreference in itsdist). Reviewer call:"external-editor/tmp": "^0.2.6"would close it.Still open: moderate and low (follow-up)
ip-address(Chore: bump ip-address to 10.7.4 and drop socks resolution #186) andjs-yaml@4(Chore: JS-yaml vulnerability #182)@babel/runtime,@humanfs/node,@sinonjs/text-encoding,@testing-library/react-native,ajv,core-js,eslint,fast-xml-parser,glob@7/inflight,lodash.get,pbkdf2,postcss-selector-parser,qs,rimraf@3,whatwg-encodingdiffAll are dev-only.
Verification
yarn install --immutable, with the turbo cache bypassed, on the PR tip.yarn build,yarn docs,yarn compile,yarn lintandyarn testall pass, with the same test counts asmain.Notes for the release
yarn releasewas not run here.publishConfig.provenance: truecurrently has no effect: the bundled Yarn 4.1.0 never reads the OIDC token (ACTIONS_ID_TOKENdoes not appear in it), andnpm view @assertive-ts/core dist.attestationsis empty for published versions. TheACTIONS_*passthrough only matters once Yarn is upgraded.yarn npm audit --all --recursive --severity high🤖 Generated with Claude Code