This repository was archived by the owner on Jun 29, 2026. It is now read-only.
Pin yarn resolutions to close 67 of 75 Critical/High Dependabot alerts - #46
Merged
JerryS22 merged 3 commits intoApr 30, 2026
Merged
Conversation
Adds a resolutions block to package.json forcing transitive dependencies to their first non-vulnerable version, plus bumps the runtime moment constraint past the moment Highs. Bumps that require modernizing the webpack 2 / babel 6 toolchain are left out of resolutions and will be dismissed-with-justification on the 8 remaining alerts (loader-utils, json5, babel-traverse, ip, lodash.template, lodash.pick, hoek runtime, webpack-dev-server top-level). Verified: yarn test (21/21), yarn lint, yarn dist:all all green. Closes most alerts on TodayTix/ttg#15195
There was a problem hiding this comment.
Code Review
This pull request updates the moment dependency and introduces a comprehensive resolutions block in package.json to manage transitive dependency versions, which is reflected in significant updates to yarn.lock. Feedback was provided regarding the lodash resolution; although the intent was to avoid version 4.18.x, the use of a caret range (^4.17.21) allowed it to resolve to 4.18.1. It is recommended to use an exact version or a tilde range to strictly enforce the desired version.
…oken circle.yml is a CircleCI 1.0 config (deprecated 2018) pinning Node 6.9.4. The repo has no .circleci/config.yml or .github/workflows/, so this file cannot have been running CI. The current "build" / "deploy" / "report-build-status" checks on master come from elsewhere. The file also commits a Coveralls repo token in plain text: COVERALLS_REPO_TOKEN: hNalmUHJN5pol8yfYF5plY5wFcFNL0DNw Deleting the file removes both the dead infra and the credential. NOTE: rotating the token in the Coveralls dashboard is a separate manual step — the token in git history is still valid until invalidated upstream. See PR description for the rotation checklist.
Investigation: https://coveralls.io/github/TodayTix/tt-react-calendar returns 404 — Coveralls has no project record for this repo. No GitHub Actions secret named COVERALLS_REPO_TOKEN exists in any TTG repo. No modern coverallsapp/github-action workflow exists anywhere in the org. The previous commit removed the only file that referenced Coveralls config (circle.yml). Everything else that mentioned Coveralls in this repo was dead config or broken links. Removes: - `coveralls`, `nyc`, `babel-plugin-istanbul`, `tap-xunit` devDeps - `coverage`, `coveralls`, `test:coverage` scripts in package.json - `nyc` config block in package.json - `test:coverage` env block in .babelrc (referenced the istanbul plugin) - Coveralls and CircleCI status badges in README (both pointed at resources that no longer exist after circle.yml deletion) Net effect: yarn.lock shrinks ~230 lines as the istanbul/nyc/coveralls transitive trees drop out. yarn test still passes (21/21), yarn dist:all still produces a byte-stable consumer build. NOTE: the Coveralls token still in git history (~/circle.yml@HEAD~2) points at a Coveralls project that does not exist, so it cannot be used to publish fake coverage data. No upstream rotation needed.
JerryS22
marked this pull request as ready for review
April 30, 2026 15:20
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
JerryS22
requested review from
a team,
antarmy07,
dpiletski,
eriben and
jess-ingraham
and removed request for
a team and
jess-ingraham
April 30, 2026 16:15
leonardomorenozaga
approved these changes
Apr 30, 2026
8 tasks
JerryS22
added a commit
that referenced
this pull request
May 1, 2026
) Continues the PR #46 sweep into Medium and Low severity. Same approach: add yarn `resolutions` for transitive dev-tool packages, regen lockfile, no source changes. The 7 remaining alerts are toolchain-blocked or have no published fix and will be dismissed-with-justification post-merge: - M #243, #139 postcss (postcss-cssnext@2 incompatible with postcss 8) - M #178, #179 webpack-dev-server (same toolchain block as PR #46's #19) - M #242 uuid (uuid 14 is ESM-only; legacy `request` can't require ESM) - M #121 request (deprecated upstream, no fix forthcoming) - L #195 elliptic (advisory fixed_in=null) Verified: yarn test (21/21), yarn lint, yarn dist:all all green. dist-modules/ AND dist/index.js byte-identical vs current master — no published artifact change at all. Closes most Medium/Low on TodayTix/ttg#15195
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
tt-react-calendaris a top-10 hotspot in TodayTix's GitHub Security Overview, with 22 Critical and 53 High open Dependabot alerts. Reducing this to 0 is required to hit the Mythos GA pre-launch security bar. The 75 alerts span 33 packages, almost entirely transitives in the webpack 2 / babel 6 build toolchain (yarn.lock-only, dev-scope), with one runtime dep (moment) carrying 3 Highs. Separately:circle.ymlcommits a Coveralls repo token in plain text — discovered during this investigation.tt-react-calendarmaterially inflates the org's public Critical+High count and remains an obvious target for any agentic security tool sweeping public TodayTix repos. The library ships pre-builtdist/to consumers, so transitive vulnerabilities here don't reach downstream apps — but the open alerts still count against the org-wide tally that #15135 is racing to zero.dist/index.jsbytes change due to lodash 4.17.4 → 4.18.1 internals; API-compatible bug fixes only, no behavior change.dist-modules/(modern bundlers) is byte-identical. The dead Coveralls integration (and the leaked token committed alongside it) is removed.Approach
Three commits, three concerns:
Pin yarn resolutions to close 67 of 75 Critical/High Dependabot alerts— mirrors the inventory_fe pattern from sibling https://github.com/TodayTix/ttg/issues/15156. One sweep throughpackage.json#resolutionspinning every reachable fix version +yarn installto regenerate the lockfile. No source code changes.Remove deprecated CircleCI 1.0 config containing a leaked Coveralls token—circle.ymlis from 2017, pins Node 6.9.4, references a CircleCI YAML schema deprecated in 2018. The repo has no.circleci/config.ymlor.github/workflows/, so this file cannot have been running CI. Deleting it removes both the dead infra and the leaked credential.Remove dead Coveralls integration— investigation confirmed the Coveralls integration has been dead for years (coveralls.io/github/TodayTix/tt-react-calendarreturns 404; no Actions secret, no workflow). Removed the deadcoveralls/nyc/babel-plugin-istanbul/tap-xunitdevDeps, dead scripts, thenycconfig block, thetest:coverageenv in.babelrc(referenced the istanbul plugin), and the broken README badges.The full set of fix versions in commit 1 was bisected against
yarn testandyarn dist:allto identify resolutions the legacy webpack 2 / babel 6 toolchain cannot accept. Three Critical and four High alerts fall in that bucket and are documented as known exceptions rather than silently left open.Resolutions added
Closes 20 of 22 Critical and 47 of 53 High alerts (67 of 75 total). The remaining 2 Critical and 6 High are toolchain-blocked and documented in "Known exceptions" below u2014 they require a separate webpack 2 u2192 5 / babel 6 u2192 7 modernization ticket, or dismissal-with-justification. Bumped runtime
momentconstraint from>= 2.10.7 < 3to>= 2.29.4 < 3to close 3 runtime Highs (CVE-2017-18214, CVE-2022-31129, CVE-2022-24785).Plus runtime
momentdirect bump:>= 2.10.7 < 3→>= 2.29.4 < 3(closes 3 Highs).Known exceptions (will be dismissed-with-justification post-merge)
These fixes require the next major-version bump of webpack/babel — out of scope for a security PR; will be picked up if/when this library moves off webpack 2.
loader-utils1.4.1babel-loader@6callsparseQuery()with a non-?-prefixed string — fails buildbabel-traversefixed_in: null; root patch is in babel 7 (this lib uses babel 6)json51.0.2babel-core@6writes its babel-options cache via the older json5 dialect; 1.0.2 emits a syntax errorwebpack-dev-server3.1.11devDependencies: webpack-dev-server: ^2.5.0; webpack-dev-server 3 needs webpack 4+ipfixed_in: null— no patched version publishedlodash.templatefixed_in: nullfor one entry; the second (#235) closes via the lodash bumplodash.pickfixed_in: nullhoek(runtime)fixed_in: null; the other (#6) closes via the hoek 4.2.1 pinCoveralls token — investigation summary
The leaked token (
hNalmUHJN5pol8yfYF5plY5wFcFNL0DNw, removed at HEAD~1) is harmless without an active target:https://coveralls.io/github/TodayTix/tt-react-calendarCOVERALLS_REPO_TOKENGitHub Actions secret in any TTG repocoverallsapp/github-actionworkflow anywhere in orgcoveralls-nextdevDep inweb-monorepo(no workflow invokes it)No upstream rotation step required — there's no Coveralls account/project to rotate against. The token still lives in git history but cannot be used to publish coverage anywhere.
Decisions
resolutionsblock; splitting into per-package PRs would multiply review surface for zero functional benefit. Mirrors the inventory_fe approach (sibling https://github.com/TodayTix/ttg/issues/15156).lodashresolution at^4.17.21(yarn currently resolves this to lodash4.18.1). During the bisect,lodash@4.18.0shipped a buggy babel-options cache (extra comma inbabelrc: false,,) that crashedava@0.19. lodash patched it in 4.18.1, which is what yarn picks today and what the test suite verifies green against. The 4.17.21 floor closes all in-scope Critical/High alerts (CVE-2019-10744, CVE-2018-16487, CVE-2020-8203, CVE-2021-23337); the caret is intentional so future 4.x patches flow without manual edits.tarbumped to 7.x even though it's a major. Verified viayarn test/yarn dist:all— no caller in this lib invokestarprogrammatically; it's pulled in by node-pre-gyp/fsevents toolchain transitives only.package.json#resolutionsand the runtimemomentconstraint moved. webpack 2 / babel 6 / ava 0.19 stay on their current majors — that's the toolchain modernization conversation, separate from security.circle.ymlrather than just removing the token line. Leaving the file with a missing/emptyCOVERALLS_REPO_TOKENwould leave broken-but-credential-bearing dead config. CircleCI 1.0 was deprecated in 2018; the repo has no other CI config files..babelrcenv, and README badges in place would be confusing breadcrumbs to a working integration that doesn't exist.Verified
yarn install(clean, Node 18.20.8)yarn run testyarn run lintyarn run dist:alldist-modules/byte-diff vs mastermodulefield)dist/styles.cssbyte-diff vs masterdist/index.jsbyte-diff vs mastermainfield — including platform's asset pipeline).yarn pack+ scratch consumer renders<Calendar />TodayTix/platformpinstt-react-calendar: 1.5.8and already has resolutions ontt-react-calendar/momentandtt-react-calendar/react/fbjs/isomorphic-fetch/node-fetch(pre-existing workaround that this PR makes redundant; platform-side cleanup is platform's call).yarn auditbefore/afterOut of scope (separate work)
package.json(1.5.6) and the npm-published version platform pins (1.5.8). Suggests a manual publish workflow that drifted from the source. Not blocking, but worth tidying.Version bump
This PR does not bump
package.json#version. Whoever publishes after merge should bump and tag (masteris at 1.5.6, npm latest is 1.5.8 — pick the next minor or patch).Reviewer FAQ — questions raised during prep
Q: How was this verified beyond
yarn test?4-axis verification, all green: (A)
dist-modules/byte-diff vs master ✅ identical (modern bundler artifact unchanged); (B)yarn pack+ scratch consumer renders<Calendar />against the new tarball with React 15 + moment 2.29.4 ✅; (C) only known consumer isTodayTix/platform(vendors prebuilt UMD bundle, has its own pre-existing resolutions ontt-react-calendar/momentandtt-react-calendar/react/.../node-fetch); (D)yarn auditmaster 5H → PR 0H. See "Verified" table above.Q: Does this hit 0 Critical / 0 High like ticket #15195's AC says?
No — closes 67 of 75 alerts (22C+53H → 2C+6H). The 8 residual are documented as "Known exceptions" — toolchain-blocked (
loader-utils,babel-traverse,json5,webpack-dev-server) or have no published fix (ip,lodash.template,lodash.pick,hoekruntime). Closing the last 8 requires either webpack 2 → 5 / babel 6 → 7 modernization (noisy, separate ticket) or dismissal-with-justification post-merge.Q: Are we sure this doesn't affect users at all?
Modern bundler users (
modulefield): zero change —dist-modules/is byte-identical. Legacy UMD users (mainfield, including platform's asset pipeline):dist/index.jsbytes change because lodash internals upgrade 4.17.4 → 4.18.1. The diff is API-compatible bug fixes only — Verification B exercised this path against React 15 and the calendar rendered correctly. Risk is low but non-zero, hence the disclosure in the Outcome line.Q: Will merging this PR affect any user today?
No. Merging only updates this repo's
master. User impact requires a 5-step manual chain: merge → bumppackage.json#version→npm publish→ consumer bumps → consumer deploys. None of steps 2-5 are automated. Last published version (1.5.8) shipped September 2017; nothing has been published in 9 years. Possible this PR's bytes never reach a single user.Q: Does platform need an update to avoid vulnerability from this?
No. Platform has 0 npm-side Critical/High Dependabot alerts — all 51 of its open alerts live in
settings.gradle(Java/Gradle). Platform consumes the prebuiltdist/index.jsfrom npm 1.5.8 (2017), which contains lodash 4.17.4 internals — none of the dev-only transitives this PR closes ever made it into the runtime artifact platform ships. Platform additionally has pre-existingresolutionsontt-react-calendar/momentandtt-react-calendar/react/.../node-fetchthat already pin the only runtime-relevant deps. The user-visible risk picture for platform is unchanged whether this PR merges or not.Q: Do we need to set up CircleCI 2.0 so this can be tested in CI?
No — but the repo currently has zero automated
yarn test/yarn lint/yarn dist:allsignal. The legacycircle.yml(CircleCI 1.0, deprecated 2018) was almost certainly not running. Right fix is a small GitHub Actions workflow; out of scope for this PR, filed as a follow-up ticket onTodayTix/ttg.Q: What's the value of this PR if it doesn't reach users?
Drives the GitHub Security Overview count for
tt-react-calendarfrom 75 → 8 (with 8 documentable exceptions), contributing to parent epic https://github.com/TodayTix/ttg/issues/15135's org-wide attack-surface reduction ahead of Mythos GA. The value is shrinking the public-org Critical/High tally agentic security tools can enumerate, not removing runtime vulnerabilities from production code (they were never in the runtime artifact).🤖 This was posted by Claude
Workflow progress