Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-23 12:44 UTC

openedx / edx-enterprise

PythonAGPL-3.0★ 50 stars⑂ 71 forkssince Oct 2016View on GitHub ↗

openedx/edx-enterprise holds a health index of 81 out of 100, placing it in the Good band. It scores highest on Vitality (96/100) and lowest on Security (72/100). It was last updated today. 11 contributors account for most of its recent work.

81
overall / 100
Good

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

81
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Open edXOrganization
757 followers185 public repossince Jun 2018

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
PyPIedx-enterprise8.7.1-1,4610 days agodjangoedx

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

96Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
29.1/36Commit cadence — 42/52 weeks with commits
18/18Commit volume — 187 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year187
human_commit_share0.96
days_since_last_push0
active_weeks_last_year42

Release discipline

100Excellent
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~4 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tag8.7.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases4
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

75Good · 18% of overall
How it's scored
27.4/60Stars — 50 stars
15.4/25Forks — 71 forks
10.4/15Watchers — 74 watchers
Inputs used
forks71
stars50
watchers74
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

100Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (AGPL-3.0)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
7.2/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateyes
has_code_of_conductyes
has_pull_request_templateyes

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

86Excellent · 24% of overall
How it's scored
54/54Bus factor — 11 contributor(s) cover half of all commits
19.8/22.5Commit distribution — top contributor authored 12% of commits
13.5/13.5Contributor breadth — 99 contributors
10/10OpenSSF Scorecard: Contributors — project has 21 contributing companies or organizations
Inputs used
bus_factor11
contributors_sampled99
top_contributor_share0.12
How it's scored
28.5/46.8Issue resolution — 61% of issues closed
29.6/38.3PR acceptance — 1,966/2,542 decided PRs merged
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Inputs used
merged_prs1,966
open_issues9
closed_issues14
issue_closed_ratio0.609
closed_unmerged_prs576
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
20.7/25Owner reach — 757 followers of openedx
25/25Track record — 185 public repos, account ~8 yr old
Inputs used
followers757
owner_typeOrganization
is_verified
owner_loginopenedx
public_repos185
account_age_days2,963
How it's scored
25/25Published & resolvable — 1 package(s) on pypi
35/35Publish recency — latest publish 0 days ago
20/20Version history — 1,461 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesedx-enterprise
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Engineering Quality

Are baseline engineering and documentation practices in place?

72Good · 20% of overall
How it's scored
24/24CI workflows — 10 workflow(s)
24/24Tests present
16/16Linter config — tox.ini
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 23 out of 23 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

55Moderate
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
0/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionno

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

72Good · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
2.5/2.5CI-Tests — 23 out of 23 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 21 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 46 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6.5
Excluded from scoring (no data or not applicable): branch_protection, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories86
affected_packages39
assessed_packages1,041
unassessed_packages50
affected_by_severitycritical 3, high 20, moderate 16
direct_affected_packages0
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 1041 resolved dependencies against OSV. 50 could not be assessed — no resolved version, an unsupported ecosystem, or beyond the reported package list. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

78Good · 0% of overall
How it's scored
45/45Agent instructions — .github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 94 of 96 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.979
agent_instruction_files.github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md
agent_instruction_max_bytes7,063
How it's scored
18/18One-command bootstrap — Makefile, docs/Makefile
22/22Automated tests
11/11Lint / format config — tox.ini
0/11Static type checking
10/10Reproducible environment — Dockerfile, lockfile
10/10Demonstrated agent practice — 11 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 4 of the last 100 commits are automated dependency updates
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileyes
typed_languageno
bootstrap_filesMakefile, docs/Makefile
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0.11
toolchain_manifests
dependency_bot_commit_share0.04
How it's scored
0/45Type-checkable code — Python without a type-check config
54.3/55Manageable file sizes — 13/1,039 source files over 60KB
Inputs used
primary_languagePython
largest_source_bytes458,598
source_files_sampled1,039
oversized_source_files13

Key facts

50GitHub stars
99contributors
187commits, last 12 months
0days since last push
100releases
11bus factor
9open issues
npm, PyPIpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'edx-enterprise' from its registry
  • deps.dev does not index pypi:edx-enterprise@8.7.1; advisories assessed against the repository dependency graph instead

More detail

Star and fork history 0 ★ / 71 ⇿
0Stars
71Forks
88Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

01325385063757122016-112021-082026-06
Major 2Minor 9Patch 77

Each point covers 9 days.

OpenSSF Scorecard 6.5 / 10
6.5aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-23 12:43 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests23 out of 23 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 21 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities46 existing vulnerabilities detected
Direct dependencies 2
RegistryPackageVersion constraintManifest
npm@edx/brandnpm:@edx/brand-edx.org@^1.3.0package.json
npm@openedx/paragon^21.5.7package.json
All dependencies 1,091

Full resolved dependency set from the GitHub dependency graph: 1 direct and 1,090 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@openedx/paragon21.13.1direct
npm@babel/runtime7.25.6indirect
npm@babel/runtime-corejs37.25.6indirect
npm@edx/brand-edx.org1.6.1indirect
npm@formatjs/ecma402-abstract2.0.0indirect
npm@formatjs/fast-memoize2.2.0indirect
npm@formatjs/icu-messageformat-parser2.7.8indirect
npm@formatjs/icu-skeleton-parser1.8.2indirect
npm@formatjs/intl2.10.4indirect
npm@formatjs/intl-displaynames6.6.8indirect
npm@formatjs/intl-listformat7.5.7indirect
npm@formatjs/intl-localematcher0.5.4indirect
npm@fortawesome/fontawesome-common-types6.6.0indirect
npm@fortawesome/fontawesome-svg-core6.6.0indirect
npm@fortawesome/react-fontawesome0.1.19indirect
npm@popperjs/core2.11.8indirect
npm@restart/context2.1.4indirect
npm@restart/hooks0.4.16indirect
npm@types/hoist-non-react-statics3.3.5indirect
npm@types/invariant2.2.37indirect
npm@types/prop-types15.7.12indirect
npm@types/react18.3.5indirect
npm@types/react-transition-group4.4.11indirect
npm@types/warning3.0.3indirect
npmacorn4.0.13indirect
npmacorn5.7.4indirect
npmacorn-dynamic-import2.0.2indirect
npmajv5.5.2indirect
npmajv6.12.6indirect
npmajv-keywords3.5.2indirect
npmalign-text0.1.4indirect
npmalphanum-sort1.0.2indirect
npmansi-escapes4.3.2indirect
npmansi-regex2.1.1indirect
npmansi-regex3.0.1indirect
npmansi-regex5.0.1indirect
npmansi-styles2.2.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.3.0indirect
npmanymatch2.0.0indirect
npmanymatch3.1.3indirect
npmargparse1.0.10indirect
npmaria-hidden1.2.4indirect
npmarr-diff4.0.0indirect
npmarr-flatten1.1.0indirect
npmarr-union3.1.0indirect
npmarray-unique0.3.2indirect
npmasn1.js4.10.1indirect
npmassert1.5.1indirect
npmassert-ok1.0.0indirect
npmassign-symbols1.0.0indirect
npmasync2.6.4indirect
npmasync-each1.0.6indirect
npmatob2.1.2indirect
npmattr-accept2.2.2indirect
npmautoprefixer6.7.7indirect
npmavailable-typed-arrays1.0.7indirect
npmbabel-code-frame6.26.0indirect
npmbalanced-match0.4.2indirect
npmbalanced-match1.0.2indirect
npmbase0.11.2indirect
npmbase64-js1.5.1indirect
npmbig.js5.2.2indirect
npmbinary-extensions1.13.1indirect
npmbinary-extensions2.3.0indirect
npmbindings1.5.0indirect
npmbl4.1.0indirect
npmbn.js4.12.0indirect
npmbn.js5.2.1indirect
npmbootstrap4.6.2indirect
npmbrace-expansion1.1.11indirect
npmbrace-expansion2.0.1indirect
npmbraces2.3.2indirect
npmbraces3.0.3indirect
npmbrorand1.1.0indirect
npmbrowserify-aes1.2.0indirect
npmbrowserify-cipher1.0.1indirect
npmbrowserify-des1.0.2indirect
npmbrowserify-rsa4.1.0indirect
npmbrowserify-sign4.2.3indirect
npmbrowserify-zlib0.2.0indirect
npmbrowserslist1.7.7indirect
npmbuffer4.9.2indirect
npmbuffer5.7.1indirect
npmbuffer-xor1.0.3indirect
npmbuiltin-status-codes3.0.0indirect
npmcache-base1.0.1indirect
npmcall-bind1.0.8indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmcamelcase1.2.1indirect
npmcamelcase4.1.0indirect
npmcaniuse-api1.6.1indirect
npmcaniuse-db1.0.30001657indirect
npmcast-array1.0.1indirect
npmcenter-align0.1.3indirect
npmchalk1.1.3indirect
npmchalk2.4.2indirect
npmchalk4.1.2indirect
npmchardet0.7.0indirect
npmchild_process1.0.2indirect
npmchokidar2.1.8indirect
npmchokidar3.6.0indirect
npmcipher-base1.0.4indirect
npmclap1.2.3indirect
npmclass-utils0.3.6indirect
npmclassnames2.5.1indirect
npmcli1.0.1indirect
npmcli-cursor3.1.0indirect
npmcli-spinners2.9.2indirect
npmcli-width3.0.0indirect
npmcliui2.1.0indirect
npmcliui3.2.0indirect
npmclone1.0.4indirect
npmclone-deep4.0.1indirect
npmco4.6.0indirect
npmcoa1.0.4indirect
npmcode-point-at1.1.0indirect
npmcollection-visit1.0.0indirect
npmcolor0.11.4indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcolor-string0.3.0indirect
npmcolormin1.1.2indirect
npmcolors1.1.2indirect
npmcomponent-emitter1.3.1indirect
npmconcat-map0.0.1indirect
npmconsole-browserify1.1.0indirect
npmconstants-browserify1.0.0indirect
npmcopy-descriptor0.1.1indirect
npmcore-js-pure3.38.1indirect
npmcore-util-is1.0.3indirect
npmcreate-ecdh4.0.4indirect
npmcreate-hash1.1.3indirect
npmcreate-hash1.2.0indirect
npmcreate-hmac1.1.7indirect
npmcross-spawn5.1.0indirect
npmcrypto-browserify3.12.0indirect
npmcss-color-names0.0.4indirect
npmcss-loader0.28.11indirect
npmcss-mediaquery0.1.2indirect
npmcss-selector-tokenizer0.7.3indirect
npmcssesc3.0.0indirect
npmcssnano3.10.0indirect
npmcsso2.3.2indirect
npmcsstype3.1.3indirect
npmd1.0.2indirect
npmdate-now0.1.4indirect
npmdebug2.6.9indirect
npmdecamelize1.2.0indirect
npmdecode-uri-component0.2.2indirect
npmdefaults1.0.4indirect
npmdefine-data-property1.1.4indirect
npmdefine-properties1.2.1indirect
npmdefine-property0.2.5indirect
npmdefine-property1.0.0indirect
npmdefine-property2.0.2indirect
npmdefined1.0.1indirect
npmdequal2.0.3indirect
npmdes.js1.1.0indirect
npmdetect-node-es1.1.0indirect
npmdiffie-hellman5.0.3indirect
npmdom-helpers5.2.1indirect
npmdom-serializer0.2.2indirect
npmdomain-browser1.2.0indirect
npmdomelementtype1.3.1indirect
npmdomelementtype2.3.0indirect
npmdomhandler2.3.0indirect
npmdomutils1.5.1indirect
npmdunder-proto1.0.1indirect
npmelectron-to-chromium1.5.14indirect
npmelliptic6.6.1indirect
npmemail-prop-type3.0.1indirect
npmemail-validator2.0.4indirect
npmemoji-regex8.0.0indirect
npmemojis-list3.0.0indirect
npmenhanced-resolve3.4.1indirect
npmentities1.0.0indirect
npmentities2.2.0indirect
npmerrno0.1.8indirect
npmerror-ex1.3.2indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-object-atoms1.1.1indirect
npmes5-ext0.10.64indirect
npmes6-iterator2.0.3indirect
npmes6-map0.1.5indirect
npmes6-set0.1.6indirect
npmes6-symbol3.1.4indirect
npmes6-weak-map2.0.3indirect
npmescape-string-regexp1.0.5indirect
npmescope3.6.0indirect
npmesniff2.0.1indirect
npmesprima2.7.3indirect
npmesrecurse4.3.0indirect
npmestraverse4.3.0indirect
npmestraverse5.3.0indirect
npmesutils2.0.3indirect
npmevent-emitter0.3.5indirect
npmevents3.3.0indirect
npmevp_bytestokey1.0.3indirect
npmexeca0.7.0indirect
npmexit0.1.2indirect
npmexpand-brackets2.1.4indirect
npmext1.7.0indirect
npmextend-shallow2.0.1indirect
npmextend-shallow3.0.2indirect
npmexternal-editor3.1.0indirect
npmextglob2.0.4indirect
npmextract-text-webpack-plugin3.0.2indirect
npmfast-deep-equal1.1.0indirect
npmfast-deep-equal3.1.3indirect
npmfast-json-stable-stringify2.1.0indirect
npmfastparse1.1.2indirect
npmfigures3.2.0indirect
npmfile-selector0.6.0indirect
npmfile-uri-to-path1.0.0indirect
npmfill-range4.0.0indirect
npmfill-range7.1.1indirect
npmfilter-obj1.1.0indirect
npmfind-up2.1.0indirect
npmflatten1.0.3indirect
npmfocus-lock1.3.5indirect
npmfont-awesome4.7.0indirect
npmfor-each0.3.5indirect
npmfor-in1.0.2indirect
npmfragment-cache0.2.1indirect
npmfs.realpath1.0.0indirect
npmfsevents1.2.13indirect
npmfsevents2.3.3indirect
npmfunction-bind1.1.2indirect
npmget-caller-file1.0.3indirect
npmget-intrinsic1.3.0indirect
npmget-nonce1.0.1indirect
npmget-proto1.0.1indirect
npmget-stream3.0.0indirect
npmget-value2.0.6indirect
npmglob7.2.3indirect
npmglob8.1.0indirect
npmglob-parent3.1.0indirect
npmglob-parent5.1.2indirect
npmgopd1.2.0indirect
npmgraceful-fs4.2.11indirect
npmhas1.0.4indirect
npmhas-ansi2.0.0indirect
npmhas-flag1.0.0indirect
npmhas-flag2.0.0indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-property-descriptors1.0.2indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhas-value0.3.1indirect
npmhas-value1.0.0indirect
npmhas-values0.1.4indirect
npmhas-values1.0.0indirect
npmhash-base2.0.2indirect
npmhash-base3.0.4indirect
npmhash.js1.1.7indirect
npmhasown2.0.2indirect
npmhmac-drbg1.0.1indirect
npmhoist-non-react-statics3.3.2indirect
npmhosted-git-info2.8.9indirect
npmhtml-comment-regex1.1.2indirect
npmhtmlparser23.8.3indirect
npmhttps-browserify1.0.0indirect
npmhyphenate-style-name1.1.0indirect
npmiconv-lite0.4.24indirect
npmicss-replace-symbols1.1.0indirect
npmicss-utils2.1.0indirect
npmieee7541.2.1indirect
npmimask7.6.1indirect
npmimmutable4.3.7indirect
npmindexes-of1.0.1indirect
npminflight1.0.6indirect
npminherits2.0.3indirect
npminherits2.0.4indirect
npminquirer8.2.6indirect
npminterpret1.4.0indirect
npmintl-messageformat10.5.14indirect
npminvariant2.2.4indirect
npminvert-kv1.0.0indirect
npmis-absolute-url2.1.0indirect
npmis-accessor-descriptor1.0.1indirect
npmis-arrayish0.2.1indirect
npmis-binary-path1.0.1indirect
npmis-binary-path2.1.0indirect
npmis-buffer1.1.6indirect
npmis-callable1.2.7indirect
npmis-core-module2.15.1indirect
npmis-data-descriptor1.0.1indirect
npmis-descriptor0.1.7indirect
npmis-descriptor1.0.3indirect
npmis-extendable0.1.1indirect
npmis-extendable1.0.1indirect
npmis-extglob2.1.1indirect
npmis-fullwidth-code-point1.0.0indirect
npmis-fullwidth-code-point2.0.0indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-glob3.1.0indirect
npmis-glob4.0.3indirect
npmis-interactive1.0.0indirect
npmis-number3.0.0indirect
npmis-number7.0.0indirect
npmis-plain-obj1.1.0indirect
npmis-plain-object2.0.4indirect
npmis-stream1.1.0indirect
npmis-svg2.1.0indirect
npmis-typed-array1.1.15indirect
npmis-unicode-supported0.1.0indirect
npmis-windows1.0.2indirect
npmisarray0.0.1indirect
npmisarray1.0.0indirect
npmisarray2.0.5indirect
npmisexe2.0.0indirect
npmisobject2.1.0indirect
npmisobject3.0.1indirect
npmjasmine-ajax3.4.0indirect
npmjasmine-jquery2.1.1indirect
npmjquery2.2.4indirect
npmjs-base642.6.4indirect
npmjs-tokens3.0.2indirect
npmjs-yaml3.7.0indirect
npmjshint2.13.6indirect
npmjson-loader0.5.7indirect
npmjson-schema-traverse0.3.1indirect
npmjson-schema-traverse0.4.1indirect
npmjson50.5.1indirect
npmjson51.0.2indirect
npmkind-of3.2.2indirect
npmkind-of4.0.0indirect
npmkind-of6.0.3indirect
npmlazy-cache1.0.4indirect
npmlcid1.0.0indirect
npmload-json-file2.0.0indirect
npmloader-runner2.4.0indirect
npmloader-utils1.4.2indirect
npmlocate-path2.0.0indirect
npmlodash4.17.21indirect
npmlodash.camelcase4.3.0indirect
npmlodash.memoize4.1.2indirect
npmlodash.uniq4.5.0indirect
npmlodash.uniqby4.7.0indirect
npmlog-symbols4.1.0indirect
npmlongest1.0.1indirect
npmloose-envify1.4.0indirect
npmlru-cache4.1.5indirect
npmmailto-link2.0.0indirect
npmmap-cache0.2.2indirect
npmmap-visit1.0.0indirect
npmmatchmediaquery0.3.1indirect
npmmath-expression-evaluator1.4.0indirect
npmmath-intrinsics1.1.0indirect
npmmd5.js1.3.5indirect
npmmem1.1.0indirect
npmmemory-fs0.4.1indirect
npmmicromatch3.1.10indirect
npmmiller-rabin4.0.1indirect
npmmimic-fn1.2.0indirect
npmmimic-fn2.1.0indirect
npmminimalistic-assert1.0.1indirect
npmminimalistic-crypto-utils1.0.1indirect
npmminimatch3.0.8indirect
npmminimatch3.1.2indirect
npmminimatch5.1.6indirect
npmminimist1.2.8indirect
npmmixin-deep1.3.2indirect
npmmkdirp0.5.6indirect
npmms2.0.0indirect
npmmute-stream0.0.8indirect
npmnan2.20.0indirect
npmnanomatch1.2.13indirect
npmneo-async2.6.2indirect
npmnext-tick1.1.0indirect
npmnode-libs-browser2.2.1indirect
npmnormalize-package-data2.5.0indirect
npmnormalize-path2.1.1indirect
npmnormalize-path3.0.0indirect
npmnormalize-range0.1.2indirect
npmnormalize-url1.9.1indirect
npmnpm-run-path2.0.2indirect
npmnum2fraction1.2.2indirect
npmnumber-is-nan1.0.1indirect
npmobject-assign4.1.1indirect
npmobject-copy0.1.0indirect
npmobject-filter1.0.2indirect
npmobject-inspect1.13.4indirect
npmobject-keys1.1.1indirect
npmobject-visit1.0.1indirect
npmobject.assign4.1.5indirect
npmobject.pick1.3.0indirect
npmonce1.4.0indirect
npmonetime5.1.2indirect
npmora5.4.1indirect
npmos-browserify0.3.0indirect
npmos-locale2.1.0indirect
npmos-tmpdir1.0.2indirect
npmp-finally1.0.0indirect
npmp-limit1.3.0indirect
npmp-locate2.0.0indirect
npmp-try1.0.0indirect
npmpako1.0.11indirect
npmparse-asn15.1.7indirect
npmparse-json2.2.0indirect
npmpascalcase0.1.1indirect
npmpath-browserify0.0.1indirect
npmpath-dirname1.0.2indirect
npmpath-exists3.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key2.0.1indirect
npmpath-parse1.0.7indirect
npmpath-type2.0.0indirect
npmpbkdf23.1.3indirect
npmpicomatch2.3.1indirect
npmpify2.3.0indirect
npmpify4.0.1indirect
npmpopper.js1.16.1indirect
npmposix-character-classes0.1.1indirect
npmpossible-typed-array-names1.1.0indirect
npmpostcss5.2.18indirect
npmpostcss6.0.23indirect
npmpostcss-calc5.3.1indirect
npmpostcss-colormin2.2.2indirect
npmpostcss-convert-values2.6.1indirect
npmpostcss-discard-comments2.0.4indirect
npmpostcss-discard-duplicates2.1.0indirect
npmpostcss-discard-empty2.1.0indirect
npmpostcss-discard-overridden0.1.1indirect
npmpostcss-discard-unused2.2.3indirect
npmpostcss-filter-plugins2.0.3indirect
npmpostcss-merge-idents2.1.7indirect
npmpostcss-merge-longhand2.0.2indirect
npmpostcss-merge-rules2.1.2indirect
npmpostcss-message-helpers2.0.0indirect
npmpostcss-minify-font-values1.0.5indirect
npmpostcss-minify-gradients1.0.5indirect
npmpostcss-minify-params1.2.2indirect
npmpostcss-minify-selectors2.1.1indirect
npmpostcss-modules-extract-imports1.2.1indirect
npmpostcss-modules-local-by-default1.2.0indirect
npmpostcss-modules-scope1.1.0indirect
npmpostcss-modules-values1.3.0indirect
npmpostcss-normalize-charset1.1.1indirect
npmpostcss-normalize-url3.0.8indirect
npmpostcss-ordered-values2.2.3indirect
npmpostcss-reduce-idents2.4.0indirect
npmpostcss-reduce-initial1.0.1indirect
npmpostcss-reduce-transforms1.0.4indirect
npmpostcss-selector-parser2.2.3indirect
npmpostcss-svgo2.1.6indirect
npmpostcss-unique-selectors2.0.2indirect
npmpostcss-value-parser3.3.1indirect
npmpostcss-zindex2.2.0indirect
npmprepend-http1.0.4indirect
npmprocess0.11.10indirect
npmprocess-nextick-args2.0.1indirect
npmprop-types15.8.1indirect
npmprop-types-extra1.1.1indirect
npmprr1.0.1indirect
npmpseudomap1.0.2indirect
npmpublic-encrypt4.0.3indirect
npmpunycode1.4.1indirect
npmpunycode2.3.1indirect
npmq1.5.1indirect
npmqs6.14.1indirect
npmquery-string4.3.4indirect
npmquery-string7.0.1indirect
npmquerystring-es30.2.1indirect
npmrandombytes2.1.0indirect
npmrandomfill1.0.4indirect
npmreact17.0.2indirect
npmreact-bootstrap1.6.8indirect
npmreact-clientside-effect1.2.6indirect
npmreact-colorful5.6.1indirect
npmreact-dom17.0.2indirect
npmreact-dropzone14.2.3indirect
npmreact-fast-compare3.2.2indirect
npmreact-focus-lock2.13.2indirect
npmreact-focus-on3.9.3indirect
npmreact-imask7.6.1indirect
npmreact-intl6.6.8indirect
npmreact-is16.13.1indirect
npmreact-lifecycles-compat3.0.4indirect
npmreact-loading-skeleton3.4.0indirect
npmreact-overlays5.2.1indirect
npmreact-popper2.3.0indirect
npmreact-proptype-conditional-require1.0.4indirect
npmreact-remove-scroll2.5.10indirect
npmreact-remove-scroll-bar2.3.6indirect
npmreact-responsive8.2.0indirect
npmreact-style-singleton2.2.1indirect
npmreact-table7.8.0indirect
npmreact-transition-group4.4.5indirect
npmread-pkg2.0.0indirect
npmread-pkg-up2.0.0indirect
npmreadable-stream1.1.14indirect
npmreadable-stream2.3.8indirect
npmreadable-stream3.6.2indirect
npmreaddirp2.2.1indirect
npmreaddirp3.6.0indirect
npmreduce-css-calc1.3.0indirect
npmreduce-function-call1.0.3indirect
npmregenerator-runtime0.14.1indirect
npmregex-not1.0.2indirect
npmremove-trailing-separator1.1.0indirect
npmrepeat-element1.1.4indirect
npmrepeat-string1.6.1indirect
npmrequire-directory2.1.1indirect
npmrequire-main-filename1.0.1indirect
npmresolve1.22.8indirect
npmresolve-url0.2.1indirect
npmrestore-cursor3.1.0indirect
npmret0.1.15indirect
npmright-align0.1.3indirect
npmripemd1602.0.1indirect
npmripemd1602.0.2indirect
npmrun-async2.4.1indirect
npmrxjs7.8.1indirect
npmsafe-buffer5.1.2indirect
npmsafe-buffer5.2.1indirect
npmsafe-regex1.1.0indirect
npmsafer-buffer2.1.2indirect
npmsass1.78.0indirect
npmsass-loader7.3.1indirect
npmsax1.2.4indirect
npmscheduler0.20.2indirect
npmschema-utils0.3.0indirect
npmsemver5.7.2indirect
npmsemver6.3.1indirect
npmset-blocking2.0.0indirect
npmset-function-length1.2.2indirect
npmset-value2.0.1indirect
npmsetimmediate1.0.5indirect
npmsha.js2.4.11indirect
npmshallow-clone3.0.1indirect
npmshallow-equal1.2.1indirect
npmshebang-command1.2.0indirect
npmshebang-regex1.0.0indirect
npmside-channel1.1.0indirect
npmside-channel-list1.0.0indirect
npmside-channel-map1.0.1indirect
npmside-channel-weakmap1.0.2indirect
npmsignal-exit3.0.7indirect
npmsnapdragon0.8.2indirect
npmsnapdragon-node2.1.1indirect
npmsnapdragon-util3.0.1indirect
npmsort-keys1.1.2indirect
npmsource-list-map2.0.1indirect
npmsource-map0.5.7indirect
npmsource-map0.6.1indirect
npmsource-map-js1.2.0indirect
npmsource-map-resolve0.5.3indirect
npmsource-map-url0.4.1indirect
npmspdx-correct3.2.0indirect
npmspdx-exceptions2.5.0indirect
npmspdx-expression-parse3.0.1indirect
npmspdx-license-ids3.0.20indirect
npmsplit-on-first1.1.0indirect
npmsplit-string3.1.0indirect
npmsprintf-js1.0.3indirect
npmstatic-extend0.1.2indirect
npmstream-browserify2.0.2indirect
npmstream-http2.8.3indirect
npmstrict-uri-encode1.1.0indirect
npmstrict-uri-encode2.0.0indirect
npmstring-width1.0.2indirect
npmstring-width2.1.1indirect
npmstring-width4.2.3indirect
npmstring_decoder0.10.31indirect
npmstring_decoder1.1.1indirect
npmstring_decoder1.3.0indirect
npmstrip-ansi3.0.1indirect
npmstrip-ansi4.0.0indirect
npmstrip-ansi6.0.1indirect
npmstrip-bom3.0.0indirect
npmstrip-eof1.0.0indirect
npmstrip-json-comments1.0.4indirect
npmstyle-loader0.18.2indirect
npmsupports-color2.0.0indirect
npmsupports-color3.2.3indirect
npmsupports-color4.5.0indirect
npmsupports-color5.5.0indirect
npmsupports-color7.2.0indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmsvgo0.7.2indirect
npmtabbable5.3.3indirect
npmtapable0.2.9indirect
npmthrough2.3.8indirect
npmtimers-browserify2.0.12indirect
npmtmp0.0.33indirect
npmto-arraybuffer1.0.1indirect
npmto-buffer1.2.1indirect
npmto-object-path0.3.0indirect
npmto-regex3.0.2indirect
npmto-regex-range2.1.1indirect
npmto-regex-range5.0.1indirect
npmtslib2.7.0indirect
npmtty-browserify0.0.0indirect
npmtype2.7.3indirect
npmtype-fest0.21.3indirect
npmtyped-array-buffer1.0.3indirect
npmuglify-js2.8.29indirect
npmuglify-to-browserify1.0.2indirect
npmuglifyjs-webpack-plugin0.4.6indirect
npmuncontrollable7.2.1indirect
npmunion-value1.0.1indirect
npmuniq1.0.1indirect
npmuniqs2.0.0indirect
npmunset-value1.0.0indirect
npmupath1.2.0indirect
npmuri-js4.4.1indirect
npmurix0.1.0indirect
npmurl0.11.4indirect
npmuse3.1.1indirect
npmuse-callback-ref1.3.2indirect
npmuse-sidecar1.1.2indirect
npmutil0.10.4indirect
npmutil0.11.1indirect
npmutil-deprecate1.0.2indirect
npmuuid9.0.1indirect
npmvalidate-npm-package-license3.0.4indirect
npmvendors1.0.4indirect
npmvm-browserify1.1.2indirect
npmwarning4.0.3indirect
npmwatchpack1.7.5indirect
npmwatchpack-chokidar22.0.1indirect
npmwcwidth1.0.1indirect
npmwebpack3.12.0indirect
npmwebpack-sources1.4.3indirect
npmwhet.extend0.9.9indirect
npmwhich1.3.1indirect
npmwhich-module2.0.1indirect
npmwhich-typed-array1.1.19indirect
npmwindow-size0.1.0indirect
npmwordwrap0.0.2indirect
npmwrap-ansi2.1.0indirect
npmwrap-ansi6.2.0indirect
npmwrappy1.0.2indirect
npmxtend4.0.2indirect
npmy18n3.2.2indirect
npmyallist2.1.2indirect
npmyargs3.10.0indirect
npmyargs8.0.2indirect
npmyargs-parser7.0.0indirect
PyPIaccessible-pygments0.0.5indirect
PyPIacid-xblock0.4.1indirect
PyPIaiohappyeyeballs2.7.1indirect
PyPIaiohttp3.14.1indirect
PyPIaiosignal1.4.0indirect
PyPIalabaster1.0.0indirect
PyPIamqp5.3.1indirect
PyPIanalytics-python1.4.post1indirect
PyPIaniso860110.0.1indirect
PyPIannotated-doc0.0.4indirect
PyPIannotated-types0.7.0indirect
PyPIanyio4.14.1indirect
PyPIappdirs1.4.4indirect
PyPIasgiref3.11.1indirect
PyPIasn1crypto1.5.1indirect
PyPIastroid3.3.11indirect
PyPIattrs26.1.0indirect
PyPIbabel2.18.0indirect
PyPIbackoff1.10.0indirect
PyPIbcrypt5.0.0indirect
PyPIbeautifulsoup44.15.0indirect
PyPIbilliard4.2.4indirect
PyPIbleachindirect
PyPIbleach6.4.0indirect
PyPIboto31.43.41indirect
PyPIbotocore1.43.41indirect
PyPIbracex3.0indirect
PyPIbridgekeeper0.9indirect
PyPIbuild1.5.0indirect
PyPIcachecontrol0.14.4indirect
PyPIcachetools7.1.4indirect
PyPIcamel-converter5.1.0indirect
PyPIcasbin-django-orm-adapter1.7.0indirect
PyPIceleryindirect
PyPIcelery5.6.3indirect
PyPIcertifi2026.6.17indirect
PyPIcffi2.1.0indirect
PyPIchardet7.4.3indirect
PyPIcharset-normalizer3.4.9indirect
PyPIchem2.0.0indirect
PyPIcheroot11.1.2indirect
PyPIcherrypy18.10.0indirect
PyPIclick8.4.2indirect
PyPIclick-didyoumean0.3.1indirect
PyPIclick-log0.4.0indirect
PyPIclick-plugins1.1.1.2indirect
PyPIclick-repl0.3.0indirect
PyPIcode-annotationsindirect
PyPIcode-annotations3.0.0indirect
PyPIcodejail-includes2.0.0indirect
PyPIcolorama0.4.6indirect
PyPIcoverage7.15.2indirect
PyPIcrowdsourcehinter-xblock1.0.1indirect
PyPIcryptographyindirect
PyPIcryptography49.0.0indirect
PyPIcssutils2.15.0indirect
PyPIddt1.3.1indirect
PyPIdefusedxml0.7.1indirect
PyPIdiff-cover10.3.0indirect
PyPIdill0.4.1indirect
PyPIdistlib0.4.3indirect
PyPIdjangoindirect
PyPIdjango5.2.16indirect
PyPIdjango-appconf1.2.0indirect
PyPIdjango-autocomplete-light5.0.0indirect
PyPIdjango-cache-memoizeindirect
PyPIdjango-cache-memoize0.2.1indirect
PyPIdjango-celery-results2.6.0indirect
PyPIdjango-classy-tags4.1.0indirect
PyPIdjango-config-modelsindirect
PyPIdjango-config-models3.0.0indirect
PyPIdjango-cors-headers4.9.0indirect
PyPIdjango-countriesindirect
PyPIdjango-countries9.0.0indirect
PyPIdjango-crumindirect
PyPIdjango-crum0.7.9indirect
PyPIdjango-fernet-fields-v2indirect
PyPIdjango-fernet-fields-v20.9indirect
PyPIdjango-filterindirect
PyPIdjango-filter25.2indirect
PyPIdjango-ipwareindirect
PyPIdjango-ipware7.0.1indirect
PyPIdjango-js-asset4.0.1indirect
PyPIdjango-method-override1.0.4indirect
PyPIdjango-mock-queries2.3.0indirect
PyPIdjango-model-utilsindirect
PyPIdjango-model-utils5.0.0indirect
PyPIdjango-mptt0.18.0indirect
PyPIdjango-multi-email-fieldindirect
PyPIdjango-multi-email-field0.8.0indirect
PyPIdjango-mysql4.19.0indirect
PyPIdjango-oauth-toolkitindirect
PyPIdjango-oauth-toolkit1.7.1indirect
PyPIdjango-object-actionsindirect
PyPIdjango-object-actions5.1.2indirect
PyPIdjango-pipeline4.1.0indirect
PyPIdjango-push-notifications3.3.0indirect
PyPIdjango-ratelimit4.1.0indirect
PyPIdjango-sekizai4.1.0indirect
PyPIdjango-ses4.7.2indirect
PyPIdjango-simple-historyindirect
PyPIdjango-simple-history3.12.0indirect
PyPIdjango-statici18n2.7.1indirect
PyPIdjango-storages1.14.6indirect
PyPIdjango-user-tasks4.0.0indirect
PyPIdjango-waffleindirect
PyPIdjango-waffle5.0.0indirect
PyPIdjango-webpack-loader3.2.4indirect
PyPIdjangorestframeworkindirect
PyPIdjangorestframework3.17.1indirect
PyPIdjangorestframework-xmlindirect
PyPIdjangorestframework-xml2.0.0indirect
PyPIdnspython2.8.0indirect
PyPIdoc82.0.0indirect
PyPIdocutils0.21.2indirect
PyPIdone-xblock3.0.0indirect
PyPIdrf-jwt1.19.2indirect
PyPIdrf-spectacular0.30.0indirect
PyPIdrf-yasg1.21.15indirect
PyPIedx-ace1.15.0indirect
PyPIedx-api-doc-tools3.0.0indirect
PyPIedx-auth-backends5.0.0indirect
PyPIedx-braze-client1.1.3indirect
PyPIedx-bulk-grades2.0.0indirect
PyPIedx-ccx-keys2.0.2indirect
PyPIedx-celeryutils2.0.0indirect
PyPIedx-codejail4.1.0indirect
PyPIedx-completion5.0.0indirect
PyPIedx-django-release-util1.5.0indirect
PyPIedx-django-sites-extensions6.0.0indirect
PyPIedx-django-utilsindirect
PyPIedx-django-utils8.0.1indirect
PyPIedx-drf-extensionsindirect
PyPIedx-drf-extensions10.6.0indirect
PyPIedx-enterprise8.3.0indirect
PyPIedx-event-bus-kafka6.1.0indirect
PyPIedx-event-bus-redis1.0.0indirect
PyPIedx-i18n-tools2.0.0indirect
PyPIedx-lint6.1.0indirect
PyPIedx-milestones2.0.0indirect
PyPIedx-opaque-keysindirect
PyPIedx-opaque-keys4.0.0indirect
PyPIedx-organizations8.0.0indirect
PyPIedx-proctoring5.2.0indirect
PyPIedx-rbacindirect
PyPIedx-rbac3.0.0indirect
PyPIedx-rest-api-clientindirect
PyPIedx-rest-api-client7.0.0indirect
PyPIedx-search5.0.2indirect
PyPIedx-sga0.29.0indirect
PyPIedx-submissions4.0.0indirect
PyPIedx-tincan-py352.0.0indirect
PyPIedx-togglesindirect
PyPIedx-toggles6.0.0indirect
PyPIedx-when4.0.0indirect
PyPIedxval5.0.1indirect
PyPIelasticsearch7.9.1indirect
PyPIencutils1.0.0indirect
PyPIenmerkar0.7.1indirect
PyPIenmerkar-underscore2.4.0indirect
PyPIenterprise-integrated-channels0.1.62indirect
PyPIevent-tracking4.0.2indirect
PyPIfactory-boyindirect
PyPIfactory-boy3.3.3indirect
PyPIfaker40.31.0indirect
PyPIfastavro1.12.2indirect
PyPIfilelock3.29.6indirect
PyPIfilelock3.30.2indirect
PyPIfirebase-admin7.5.0indirect
PyPIfreezegun1.5.5indirect
PyPIfrozenlist1.8.0indirect
PyPIfs2.4.16indirect
PyPIfs-s3fs1.1.1indirect
PyPIgeoip25.2.0indirect
PyPIglob20.7indirect
PyPIgoogle-api-core2.31.0indirect
PyPIgoogle-auth2.55.1indirect
PyPIgoogle-cloud-core2.6.0indirect
PyPIgoogle-cloud-firestore2.28.0indirect
PyPIgoogle-cloud-storage3.12.0indirect
PyPIgoogle-crc32c1.8.0indirect
PyPIgoogle-resumable-media2.10.0indirect
PyPIgoogleapis-common-protos1.75.0indirect
PyPIgrpcio1.82.0indirect
PyPIgrpcio-status1.82.0indirect
PyPIgunicorn26.0.0indirect
PyPIh110.16.0indirect
PyPIh24.3.0indirect
PyPIhelp-tokens4.0.0indirect
PyPIhpack4.2.0indirect
PyPIhtml5lib1.1indirect
PyPIhttpcore1.0.9indirect
PyPIhttpx0.28.1indirect
PyPIhyperframe6.1.0indirect
PyPIicalendar7.2.0indirect
PyPIidna3.18indirect
PyPIimagesize2.0.0indirect
PyPIimportlib-metadata9.0.0indirect
PyPIinflection0.5.1indirect
PyPIiniconfig2.3.0indirect
PyPIinvoke3.0.3indirect
PyPIipaddress1.0.23indirect
PyPIisodate0.7.2indirect
PyPIisort6.1.0indirect
PyPIjaraco-classes3.4.0indirect
PyPIjaraco-collections5.2.1indirect
PyPIjaraco-context6.1.2indirect
PyPIjaraco-functools4.6.0indirect
PyPIjaraco-text4.3.0indirect
PyPIjasmine3.99.0indirect
PyPIjasmine-core3.99.0indirect
PyPIjinja22.11.3indirect
PyPIjinja23.1.6indirect
PyPIjmespath1.1.0indirect
PyPIjoblib1.5.3indirect
PyPIjsondiffindirect
PyPIjsondiff2.2.1indirect
PyPIjsonfieldindirect
PyPIjsonfield3.2.0indirect
PyPIjsonschema4.26.0indirect
PyPIjsonschema-specifications2025.9.1indirect
PyPIjwcrypto1.5.8indirect
PyPIkombu5.6.2indirect
PyPIlaboratory1.0.2indirect
PyPIlazy2.0indirect
PyPIlti-consumer-xblock11.3.1indirect
PyPIlxmlindirect
PyPIlxml5.3.2indirect
PyPIlxml-html-clean0.4.4indirect
PyPImailsnake1.6.4indirect
PyPImako1.3.12indirect
PyPImarkdown3.10.2indirect
PyPImarkdown-it-py4.2.0indirect
PyPImarkupsafe3.0.3indirect
PyPImaxminddb3.1.1indirect
PyPImccabe0.7.0indirect
PyPImdurl0.1.2indirect
PyPImeilisearch0.42.0indirect
PyPImock5.2.0indirect
PyPImodel-bakery1.24.0indirect
PyPImongoengine0.29.3indirect
PyPImonotonic1.6indirect
PyPImore-itertools11.1.0indirect
PyPImpmath1.3.0indirect
PyPImsgpack1.2.1indirect
PyPImultidict6.7.1indirect
PyPImysqlclient2.2.8indirect
PyPInh30.3.6indirect
PyPInltk3.9.4indirect
PyPInodeenv1.10.0indirect
PyPInumpy1.26.4indirect
PyPIoauthlib3.3.1indirect
PyPIolxcleaner0.3.0indirect
PyPIopenedx-atlasindirect
PyPIopenedx-atlas0.7.0indirect
PyPIopenedx-authz1.21.0indirect
PyPIopenedx-calc5.0.0indirect
PyPIopenedx-core1.1.0indirect
PyPIopenedx-django-pyfs4.0.0indirect
PyPIopenedx-django-require3.0.0indirect
PyPIopenedx-django-wiki3.1.2indirect
PyPIopenedx-eventsindirect
PyPIopenedx-events11.2.0indirect
PyPIopenedx-filtersindirect
PyPIopenedx-filters3.7.0indirect
PyPIopenedx-forum0.4.3indirect
PyPIoptimizely-sdk5.5.0indirect
PyPIora27.1.0indirect
PyPIordereddict1.1indirect
PyPIoutcome1.3.0.post0indirect
PyPIpackaging26.2indirect
PyPIparamikoindirect
PyPIparamiko5.0.0indirect
PyPIpath16.11.0indirect
PyPIpath-pyindirect
PyPIpath-py12.5.0indirect
PyPIpgpyindirect
PyPIpgpy0.6.0indirect
PyPIpiexif1.1.3indirect
PyPIpillowindirect
PyPIpillow12.3.0indirect
PyPIpip26.1.2indirect
PyPIpip-tools7.5.3indirect
PyPIpkginfo1.12.1.2indirect
PyPIplatformdirs4.10.0indirect
PyPIpluggy1.6.0indirect
PyPIpolib1.2.0indirect
PyPIportend3.2.1indirect
PyPIprompt-toolkit3.0.52indirect
PyPIpropcache0.5.2indirect
PyPIproto-plus1.28.0indirect
PyPIprotobuf7.35.1indirect
PyPIpsutil7.2.2indirect
PyPIpsycopg2-binary2.9.12indirect
PyPIpyasn10.6.3indirect
PyPIpyasn1-modules0.4.2indirect
PyPIpycasbin2.8.0indirect
PyPIpycodestyle2.14.0indirect
PyPIpycountry26.2.16indirect
PyPIpycparser3.0indirect
PyPIpycryptodomex3.23.0indirect
PyPIpydantic2.13.4indirect
PyPIpydantic-core2.46.4indirect
PyPIpydata-sphinx-theme0.16.1indirect
PyPIpydocstyle6.3.0indirect
PyPIpygments2.20.0indirect
PyPIpyjwt2.13.0indirect
PyPIpylatexenc2.10indirect
PyPIpylintindirect
PyPIpylint3.3.9indirect
PyPIpylint-celery0.3indirect
PyPIpylint-django2.8.0indirect
PyPIpylint-plugin-utils0.9.0indirect
PyPIpylti1p32.0.0indirect
PyPIpymemcache4.0.0indirect
PyPIpymongo4.4.0indirect
PyPIpynacl1.6.2indirect
PyPIpynliner0.8.0indirect
PyPIpyopenssl26.3.0indirect
PyPIpyparsing3.3.2indirect
PyPIpyproject-api1.10.1indirect
PyPIpyproject-hooks1.2.0indirect
PyPIpyrsistent0.20.0indirect
PyPIpysocks1.7.1indirect
PyPIpysrt1.1.2indirect
PyPIpytest9.1.1indirect
PyPIpytest-cov7.1.0indirect
PyPIpytest-django4.12.0indirect
PyPIpython-dateutilindirect
PyPIpython-dateutil2.9.0.post0indirect
PyPIpython-discovery1.4.4indirect
PyPIpython-ipware3.0.0indirect
PyPIpython-slugify8.0.4indirect
PyPIpython-swiftclient4.10.0indirect
PyPIpython3-openid3.2.0indirect
PyPIpython3-samlindirect
PyPIpython3-saml1.16.0indirect
PyPIpytzindirect
PyPIpytz2026.2indirect
PyPIpyuca1.2indirect
PyPIpyyaml6.0.3indirect
PyPIrandom21.0.2indirect
PyPIreadme-renderer45.0indirect
PyPIrecommender-xblock5.0.0indirect
PyPIredis8.0.1indirect
PyPIreferencing0.37.0indirect
PyPIregex2026.6.28indirect
PyPIrequestsindirect
PyPIrequests2.34.2indirect
PyPIrequests-oauthlib2.0.0indirect
PyPIrequests-toolbelt1.0.0indirect
PyPIresponses0.26.2indirect
PyPIrestructuredtext-lint2.0.2indirect
PyPIrich15.0.0indirect
PyPIroman-numerals4.1.0indirect
PyPIroman-numerals-py4.1.0indirect
PyPIrpds-py2026.6.3indirect
PyPIrulesindirect
PyPIrules3.5indirect
PyPIs3transfer0.19.0indirect
PyPIsailthru-client2.2.3indirect
PyPIscipy1.17.1indirect
PyPIselenium4.46.0indirect
PyPIsemantic-version2.10.0indirect
PyPIsetuptools83.0.0indirect
PyPIshapely2.1.2indirect
PyPIshellingham1.5.4indirect
PyPIsimpleeval1.0.7indirect
PyPIsimplejson4.1.1indirect
PyPIsix1.17.0indirect
PyPIslumberindirect
PyPIslumber0.7.1indirect
PyPIsniffio1.3.1indirect
PyPIsnowballstemmer3.1.1indirect
PyPIsnowflake-connector-python4.6.0indirect
PyPIsocial-auth-app-djangoindirect
PyPIsocial-auth-app-django5.4.1indirect
PyPIsocial-auth-core5.0.2indirect
PyPIsorl-thumbnail13.0.0indirect
PyPIsortedcontainers2.4.0indirect
PyPIsoupsieve2.8.4indirect
PyPIsphinxindirect
PyPIsphinx8.2.3indirect
PyPIsphinx-book-theme1.2.0indirect
PyPIsphinxcontrib-applehelp2.0.0indirect
PyPIsphinxcontrib-devhelp2.0.0indirect
PyPIsphinxcontrib-htmlhelp2.1.0indirect
PyPIsphinxcontrib-jsmath1.0.1indirect
PyPIsphinxcontrib-qthelp2.0.0indirect
PyPIsphinxcontrib-serializinghtml2.0.0indirect
PyPIsqlparse0.5.5indirect
PyPIstaff-graded-xblock4.0.1indirect
PyPIstevedoreindirect
PyPIstevedore5.9.0indirect
PyPIsuper-csv5.0.0indirect
PyPIsympy1.14.0indirect
PyPItempora5.12.0indirect
PyPItestfixturesindirect
PyPItestfixtures12.2.0indirect
PyPItext-unidecode1.3indirect
PyPItincanindirect
PyPItincan1.0.0indirect
PyPItinycss21.5.1indirect
PyPItomli-w1.2.0indirect
PyPItomlkit0.15.0indirect
PyPItomlkit0.15.1indirect
PyPItox4.56.4indirect
PyPItqdm4.68.4indirect
PyPItrio0.33.0indirect
PyPItrio-websocket0.12.2indirect
PyPItwine1.11.0indirect
PyPItyper0.27.0indirect
PyPItyper-slim0.24.0indirect
PyPItypesense2.0.0indirect
PyPItyping-extensions4.16.0indirect
PyPItyping-inspection0.4.2indirect
PyPItzdata2026.2indirect
PyPItzlocal5.4.4indirect
PyPIunicodecsvindirect
PyPIunicodecsv0.14.1indirect
PyPIunicodeit0.7.5indirect
PyPIuritemplate4.2.0indirect
PyPIurllib32.7.0indirect
PyPIvine5.1.0indirect
PyPIvirtualenv21.6.1indirect
PyPIvoluptuous0.16.0indirect
PyPIwalrus0.9.8indirect
PyPIwcmatch10.2.1indirect
PyPIwcwidth0.8.2indirect
PyPIwebencodings0.5.1indirect
PyPIwebob1.8.10indirect
PyPIwebsocket-client1.9.0indirect
PyPIwheel0.47.0indirect
PyPIwrapt2.2.2indirect
PyPIwsproto1.3.2indirect
PyPIxblock6.3.0indirect
PyPIxblock-drag-and-drop-v25.0.6indirect
PyPIxblock-google-drive0.8.2indirect
PyPIxblock-poll1.16.1indirect
PyPIxblocks-contrib0.17.0indirect
PyPIxmlsec1.3.14indirect
PyPIxss-utils1.0.0indirect
PyPIyarl1.24.2indirect
PyPIzc-lockfile4.0indirect
PyPIzipp4.1.0indirect
Dependency advisories 39

This repository publishes no package the index resolves, so its own dependency graph was assessed — 1,041 packages, which also include development and test pins that never ship: 39 carry known advisories, of which 0 are direct. 50 could not be assessed — no resolved version, an unsupported ecosystem, or beyond the reported package list.

PackageVersionRelationSeverityAdvisoriesFixed in
cipher-base1.0.4indirectcritical11.0.5
immutable4.3.7indirectcritical35.1.8
sha.js2.4.11indirectcritical12.4.12
brace-expansion1.1.11indirecthigh35.0.7
brace-expansion2.0.1indirecthigh35.0.7
braces2.3.2indirecthigh13.0.3
cross-spawn5.1.0indirecthigh17.0.5
elliptic6.6.1indirecthigh1
is-svg2.1.0indirecthigh24.3.0
jinja22.11.3indirecthigh83.1.6
js-yaml3.7.0indirecthigh54.3.0
json50.5.1indirecthigh12.2.2
lodash4.17.21indirecthigh34.18.0
lxml5.3.2indirecthigh26.1.0
lxml-html-clean0.4.4indirecthigh20.4.5
minimatch3.0.8indirecthigh310.2.3
minimatch3.1.2indirecthigh310.2.3
minimatch5.1.6indirecthigh310.2.3
nltk3.9.4indirecthigh33.10.0
picomatch2.3.1indirecthigh24.0.4
pyasn10.6.3indirecthigh50.6.4
tmp0.0.33indirecthigh20.2.6
uuid9.0.1indirecthigh113.0.1
@babel/runtime7.25.6indirectmoderate18.0.0-alpha.17
@babel/runtime-corejs37.25.6indirectmoderate18.0.0-alpha.17
ajv5.5.2indirectmoderate28.18.0
ajv6.12.6indirectmoderate18.18.0
bn.js4.12.0indirectmoderate15.2.3
bn.js5.2.1indirectmoderate15.2.3
color-string0.3.0indirectmoderate11.5.5
jquery2.2.4indirectmoderate44.4.0
mem1.1.0indirectmoderate14.0.0
micromatch3.1.10indirectmoderate14.0.8
postcss5.2.18indirectmoderate38.5.10
postcss6.0.23indirectmoderate38.5.10
pymongo4.4.0indirectmoderate24.6.3
qs6.14.1indirectmoderate26.15.2
social-auth-app-django5.4.1indirectmoderate25.6.0
yargs-parser7.0.0indirectmoderate118.1.1

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 16200,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "HTML": 95485,
        "SCSS": 14714,
        "Shell": 12525,
        "Python": 5906124,
        "Makefile": 10624,
        "Dockerfile": 2741,
        "JavaScript": 36447
      },
      "pushed_at": "2026-07-23T12:40:35Z",
      "created_at": "2016-10-12T13:48:42Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T17:36:44Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "AGPL-3.0",
      "default_branch": "master",
      "license_spdx_raw": "AGPL-3.0",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://openedx.org",
      "name": "Open edX",
      "type": "Organization",
      "login": "openedx",
      "company": null,
      "location": null,
      "followers": 757,
      "avatar_url": "https://avatars.githubusercontent.com/u/40179672?v=4",
      "created_at": "2018-06-11T17:46:52Z",
      "is_verified": null,
      "public_repos": 185,
      "account_age_days": 2963
    },
    "license": {
      "state": "standard",
      "spdx_id": "AGPL-3.0",
      "raw_spdx": "AGPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "8.7.1",
          "kind": "patch",
          "published_at": "2026-07-23T12:40:35Z"
        },
        {
          "tag": "8.7.0",
          "kind": "minor",
          "published_at": "2026-07-16T15:44:50Z"
        },
        {
          "tag": "8.6.0",
          "kind": "minor",
          "published_at": "2026-07-16T14:40:05Z"
        },
        {
          "tag": "8.5.0",
          "kind": "minor",
          "published_at": "2026-07-15T14:22:29Z"
        },
        {
          "tag": "8.4.0",
          "kind": "minor",
          "published_at": "2026-07-09T20:54:03Z"
        },
        {
          "tag": "8.3.0",
          "kind": "minor",
          "published_at": "2026-06-30T15:45:35Z"
        },
        {
          "tag": "v8.2.0",
          "kind": "minor",
          "published_at": "2026-06-29T13:52:16Z"
        },
        {
          "tag": "v8.1.2",
          "kind": "patch",
          "published_at": "2026-06-23T19:41:26Z"
        },
        {
          "tag": "v8.1.1",
          "kind": "patch",
          "published_at": "2026-06-22T18:55:19Z"
        },
        {
          "tag": "v8.1.0",
          "kind": "minor",
          "published_at": "2026-06-17T19:01:39Z"
        },
        {
          "tag": "8.0.19",
          "kind": "patch",
          "published_at": "2026-06-16T14:07:37Z"
        },
        {
          "tag": "8.0.18",
          "kind": "patch",
          "published_at": "2026-06-15T16:51:48Z"
        },
        {
          "tag": "8.0.17",
          "kind": "patch",
          "published_at": "2026-06-08T15:17:34Z"
        },
        {
          "tag": "8.0.16",
          "kind": "patch",
          "published_at": "2026-06-04T14:05:08Z"
        },
        {
          "tag": "v8.0.15",
          "kind": "patch",
          "published_at": "2026-05-20T21:14:35Z"
        },
        {
          "tag": "v8.0.14",
          "kind": "patch",
          "published_at": "2026-05-15T17:01:34Z"
        },
        {
          "tag": "v8.0.13",
          "kind": "patch",
          "published_at": "2026-05-14T23:09:13Z"
        },
        {
          "tag": "v8.0.12",
          "kind": "patch",
          "published_at": "2026-05-14T19:10:57Z"
        },
        {
          "tag": "8.0.10",
          "kind": "patch",
          "published_at": "2026-05-11T19:48:02Z"
        },
        {
          "tag": "8.0.9",
          "kind": "patch",
          "published_at": "2026-05-07T14:30:12Z"
        },
        {
          "tag": "v8.0.8",
          "kind": "patch",
          "published_at": "2026-05-06T21:39:00Z"
        },
        {
          "tag": "v8.0.6",
          "kind": "patch",
          "published_at": "2026-05-06T02:05:09Z"
        },
        {
          "tag": "v8.0.5",
          "kind": "patch",
          "published_at": "2026-05-05T21:35:59Z"
        },
        {
          "tag": "8.0.4",
          "kind": "patch",
          "published_at": "2026-05-05T13:38:09Z"
        },
        {
          "tag": "v8.0.3",
          "kind": "patch",
          "published_at": "2026-04-30T23:22:20Z"
        },
        {
          "tag": "v8.0.2",
          "kind": "patch",
          "published_at": "2026-04-29T16:02:37Z"
        },
        {
          "tag": "v8.0.1",
          "kind": "patch",
          "published_at": "2026-04-27T15:24:04Z"
        },
        {
          "tag": "v8.0.0",
          "kind": "major",
          "published_at": "2026-04-27T13:47:48Z"
        },
        {
          "tag": "v7.0.7",
          "kind": "patch",
          "published_at": "2026-04-24T15:44:30Z"
        },
        {
          "tag": "v7.0.6",
          "kind": "patch",
          "published_at": "2026-04-24T14:22:00Z"
        },
        {
          "tag": "v7.0.5",
          "kind": "patch",
          "published_at": "2026-04-24T14:25:22Z"
        },
        {
          "tag": "v7.0.4",
          "kind": "patch",
          "published_at": "2026-04-15T21:44:20Z"
        },
        {
          "tag": "7.0.3",
          "kind": "patch",
          "published_at": "2026-04-15T15:08:13Z"
        },
        {
          "tag": "7.0.2",
          "kind": "patch",
          "published_at": "2026-04-14T13:14:35Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2026-04-14T00:27:26Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2026-04-07T14:38:05Z"
        },
        {
          "tag": "6.8.6",
          "kind": "patch",
          "published_at": "2026-04-07T13:10:55Z"
        },
        {
          "tag": "6.8.5",
          "kind": "patch",
          "published_at": "2026-04-06T17:45:10Z"
        },
        {
          "tag": "6.8.4",
          "kind": "patch",
          "published_at": "2026-03-31T13:43:37Z"
        },
        {
          "tag": "v6.8.3",
          "kind": "patch",
          "published_at": "2026-03-27T17:18:04Z"
        },
        {
          "tag": "6.8.2",
          "kind": "patch",
          "published_at": "2026-03-27T16:35:26Z"
        },
        {
          "tag": "v6.8.1",
          "kind": "patch",
          "published_at": "2026-03-26T16:49:06Z"
        },
        {
          "tag": "v6.8.0",
          "kind": "minor",
          "published_at": "2026-03-26T00:44:58Z"
        },
        {
          "tag": "6.7.0",
          "kind": "minor",
          "published_at": "2026-03-16T13:40:39Z"
        },
        {
          "tag": "6.6.9",
          "kind": "patch",
          "published_at": "2026-03-10T15:24:01Z"
        },
        {
          "tag": "6.6.8",
          "kind": "patch",
          "published_at": "2026-03-09T20:54:59Z"
        },
        {
          "tag": "v6.6.7",
          "kind": "patch",
          "published_at": "2026-03-04T17:00:51Z"
        },
        {
          "tag": "6.6.6",
          "kind": "patch",
          "published_at": "2026-02-26T23:28:04Z"
        },
        {
          "tag": "6.6.5",
          "kind": "patch",
          "published_at": "2026-02-24T16:39:39Z"
        },
        {
          "tag": "6.6.4",
          "kind": "patch",
          "published_at": "2026-02-04T16:27:55Z"
        },
        {
          "tag": "6.6.3",
          "kind": "patch",
          "published_at": "2026-02-03T21:31:04Z"
        },
        {
          "tag": "6.6.2",
          "kind": "patch",
          "published_at": "2026-01-20T21:40:29Z"
        },
        {
          "tag": "6.6.1",
          "kind": "patch",
          "published_at": "2026-01-09T11:00:53Z"
        },
        {
          "tag": "6.6.0",
          "kind": "minor",
          "published_at": "2026-01-09T09:12:55Z"
        },
        {
          "tag": "6.5.7",
          "kind": "patch",
          "published_at": "2025-11-28T09:19:11Z"
        },
        {
          "tag": "6.5.6",
          "kind": "patch",
          "published_at": "2025-11-28T06:51:50Z"
        },
        {
          "tag": "6.5.5",
          "kind": "patch",
          "published_at": "2025-11-24T17:21:50Z"
        },
        {
          "tag": "v6.5.2",
          "kind": "patch",
          "published_at": "2025-10-21T22:25:07Z"
        },
        {
          "tag": "6.5.1",
          "kind": "patch",
          "published_at": "2025-10-17T17:25:36Z"
        },
        {
          "tag": "6.5.0",
          "kind": "minor",
          "published_at": "2025-10-10T13:17:15Z"
        },
        {
          "tag": "6.4.5",
          "kind": "patch",
          "published_at": "2025-10-03T14:26:15Z"
        },
        {
          "tag": "6.4.4",
          "kind": "patch",
          "published_at": "2025-09-26T16:31:39Z"
        },
        {
          "tag": "6.4.3",
          "kind": "patch",
          "published_at": "2025-09-19T19:05:39Z"
        },
        {
          "tag": "6.4.2",
          "kind": "patch",
          "published_at": "2025-09-17T09:13:37Z"
        },
        {
          "tag": "6.4.1",
          "kind": "patch",
          "published_at": "2025-09-15T14:45:28Z"
        },
        {
          "tag": "6.4.0",
          "kind": "minor",
          "published_at": "2025-09-11T12:35:21Z"
        },
        {
          "tag": "6.3.4",
          "kind": "patch",
          "published_at": "2025-09-10T12:42:42Z"
        },
        {
          "tag": "6.3.2",
          "kind": "patch",
          "published_at": "2025-09-02T16:01:06Z"
        },
        {
          "tag": "6.3.0",
          "kind": "minor",
          "published_at": "2025-08-22T12:53:39Z"
        },
        {
          "tag": "6.2.18",
          "kind": "patch",
          "published_at": "2025-08-17T21:06:08Z"
        },
        {
          "tag": "6.2.17",
          "kind": "patch",
          "published_at": "2025-08-11T14:29:48Z"
        },
        {
          "tag": "6.2.16",
          "kind": "patch",
          "published_at": "2025-08-11T12:54:12Z"
        },
        {
          "tag": "6.2.15",
          "kind": "patch",
          "published_at": "2025-08-08T06:51:59Z"
        },
        {
          "tag": "6.2.14",
          "kind": "patch",
          "published_at": "2025-07-29T09:09:17Z"
        },
        {
          "tag": "6.2.13",
          "kind": "patch",
          "published_at": "2025-07-22T18:50:44Z"
        },
        {
          "tag": "6.2.12",
          "kind": "patch",
          "published_at": "2025-07-22T15:23:21Z"
        },
        {
          "tag": "6.2.11",
          "kind": "patch",
          "published_at": "2025-07-17T12:46:41Z"
        },
        {
          "tag": "6.2.10",
          "kind": "patch",
          "published_at": "2025-07-14T20:42:00Z"
        },
        {
          "tag": "6.2.8",
          "kind": "patch",
          "published_at": "2025-07-03T13:31:59Z"
        },
        {
          "tag": "6.2.7",
          "kind": "patch",
          "published_at": "2025-06-18T15:25:52Z"
        },
        {
          "tag": "6.2.6",
          "kind": "patch",
          "published_at": "2025-06-18T12:15:20Z"
        },
        {
          "tag": "6.2.5",
          "kind": "patch",
          "published_at": "2025-06-16T19:04:38Z"
        },
        {
          "tag": "6.2.4",
          "kind": "patch",
          "published_at": "2025-06-12T18:42:11Z"
        },
        {
          "tag": "6.2.3",
          "kind": "patch",
          "published_at": "2025-06-12T15:03:28Z"
        },
        {
          "tag": "6.2.2",
          "kind": "patch",
          "published_at": "2025-06-12T04:08:29Z"
        },
        {
          "tag": "6.2.1",
          "kind": "patch",
          "published_at": "2025-06-09T15:38:53Z"
        },
        {
          "tag": "6.2.0",
          "kind": "minor",
          "published_at": "2025-06-09T13:29:56Z"
        },
        {
          "tag": "6.1.0",
          "kind": "minor",
          "published_at": "2025-06-03T13:36:09Z"
        },
        {
          "tag": "6.0.4",
          "kind": "patch",
          "published_at": "2025-05-30T21:10:07Z"
        },
        {
          "tag": "6.0.3",
          "kind": "patch",
          "published_at": "2025-05-28T18:07:17Z"
        },
        {
          "tag": "6.0.2",
          "kind": "patch",
          "published_at": "2025-05-22T15:37:38Z"
        },
        {
          "tag": "6.0.1",
          "kind": "patch",
          "published_at": "2025-05-21T20:15:49Z"
        },
        {
          "tag": "5.13.7",
          "kind": "patch",
          "published_at": "2025-05-13T21:16:15Z"
        },
        {
          "tag": "5.13.6",
          "kind": "patch",
          "published_at": "2025-05-13T18:34:37Z"
        },
        {
          "tag": "5.13.4",
          "kind": "patch",
          "published_at": "2025-05-07T19:49:58Z"
        },
        {
          "tag": "5.13.3",
          "kind": "patch",
          "published_at": "2025-05-06T09:36:14Z"
        },
        {
          "tag": "5.13.2",
          "kind": "patch",
          "published_at": "2025-05-05T19:33:46Z"
        },
        {
          "tag": "5.13.1",
          "kind": "patch",
          "published_at": "2025-05-05T14:48:23Z"
        },
        {
          "tag": "5.13.0",
          "kind": "minor",
          "published_at": "2025-04-30T16:47:03Z"
        },
        {
          "tag": "5.12.10",
          "kind": "patch",
          "published_at": "2025-04-29T21:19:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e0637d0e92a7316ea013fdc2ba41fc69978ee8e1",
          "body": "…m (ENT-12073) (#2660)\n\nSoft-deleted groups remained in the database and collided with the\nunique_together constraint on (name, enterprise_customer), blocking\ncustomers from reusing a deleted group's name even though the group\nwas not visible in the admin. Groups are now hard deleted, relying on\nexi\n[…]\no clears out any legacy soft-deleted row for the same\nname/customer so pre-existing zombie rows don't block re-creation.\n\nCo-authored-by: sjasti-sonata-svg <sjasti-sonata-svg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: hard delete EnterpriseGroup records instead of soft deleting the…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-07-22T17:35:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f7a843ae5d7f2cfbd890dd4ccf1f60b91cce60f",
          "body": "Updated boilerplate sections to match current conventions in\nedx/ai-devtools-internal docs/templates/.",
          "is_bot": false,
          "headline": "chore: sync AI instruction files from enterprise template",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-07-21T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a082ac9a9da28b883069ca14004921dd2671586",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2658)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-07-20T22:03:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81f138099fa8f019e50f9f6bad341129a754f670",
          "body": "…tainer-name\n\ntest: parameterize the name of the test container",
          "is_bot": false,
          "headline": "Merge pull request #2657 from openedx/pwnage101/parameterize-test-con…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e07f0fef4b9adac5c76d3f93fed02f6821b50098",
          "body": "This supports developer environments which might contain multiple clones\nof this project.  Otherwise, running tests using the test-shell\ncontainer would break on all but one clone since they would all try to\nuse the same container but a single container can only be mounted to one\nclone.\n\nThe solution is to parameterize the name of the test container so that\nit is sensitive to the absolute path of the clone.",
          "is_bot": false,
          "headline": "test: parameterize the name of the test container",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cebcb293516924de35b5c74e013a08d2115f09d5",
          "body": "…ints\n\ntest: remove common constraints from requirements",
          "is_bot": false,
          "headline": "Merge pull request #2656 from openedx/pwnage101/remove-common-constra…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8de1f8ff621bd705528173b823810a6198e2910",
          "body": "Using common constraints from edx-lint was always redundant with using a\nsnapshot of platform requirements.  It finally came to a head recently\nbecause platform diverged from common constraints, causing\nedx-enterprise requirements to start failing on conflicting package\nversions.\n\nThe solution is to simply stop using common constraints, it was never\nneeded.",
          "is_bot": false,
          "headline": "test: remove common constraints from requirements",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T18:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f67c5ba91773017a9ae89a736f5dfb8cdaab0453",
          "body": "… mode checkout (#2556)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add CalculateEnterpriseDiscountedPrice pipeline step for course…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T15:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f9c4504e29f429505a7a8d5e45c774e24bb2d9d",
          "body": "Co-authored-by: sjasti-sonata-svg <sjasti-sonata-svg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add toggle to enable people management (ENT-12049) (#2655)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-07-16T14:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b6e4ffc3bffcc7ead13763206105950c507093b",
          "body": "…kup (#2554)\n\n* feat: add pluggable override for learner home enterprise customer lookup\n\nENT-11571\n\n* chore: quality fixes\n\n* docs: OVERRIDE_LEARNER_HOME_GET_ENTERPRISE_CUSTOMER TODO\n\n* chore: bump version\n\n* docs: Add type contract for get_enterprise_customer\n\n* chore: remove prev_fn fallback\n\n* c\n[…]\nNTERPRISE_CUSTOMER in settings\n\n* test: Remove unneeded _call\n\n* test: Organize patching mocked methods\n\n* chore: fix import issues\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>, Claude",
          "is_bot": false,
          "headline": "feat: add pluggable override for learner home enterprise customer loo…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-15T14:16:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "681a2c71f9f98d8dd30613cdb597f92233e933d6",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 4.3.0 to 6.1.0.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/0057852bfaa89a56745cba8c7296529d2fc3983\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/cache from 4.3.0 to 6.1.0 (#2490)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:39:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab7f062e74d1fd12a3ff316556c4243bf342f187",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.2 to 6.4.0.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v2.5.2...48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/setup-node from 2.5.2 to 6.4.0 (#2471)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:39:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aab00b1a1adde2ce7171c269906264661b234016",
          "body": "Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.6.0 to 6.3.0.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5.6.0...ece7cb06caefa5fff74198d8649806c4678c61a1)\n\n---\nupdated-dependencies:\n- d\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/setup-python from 5.6.0 to 6.3.0 (#2455)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:38:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d27880ea4844d0f672f265052129fa9b9ea30136",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4.3.1 to 7.0.0.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4.3.1...9c091bb21b7c1c\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 4.3.1 to 7.0.0 (#2482)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T16:06:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a045f9ce4beab8a1354eaccac0d889d8e4b23239",
          "body": "…nrollmentStarted filter (#2553)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add EnterpriseEnrollmentViewProcessor pipeline step for CourseE…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-09T20:52:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ed796e7fafd486f888c015b11b12e85f4ac0537",
          "body": "Adds USE_ALGOLIA_INDEX_V2 WaffleFlag (default False) to toggles.py and\nexposes it as use_algolia_index_v2 in the enterprise_features() response.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add enterprise.use_algolia_index_v2 waffle flag",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-06-30T15:44:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1190599cdbc5b850a2c57437f944f28cec4bdd2",
          "body": "* feat: add DiscountEligibilityStep pipeline step\n\nAdds enterprise/filters/discounts.py with a DiscountEligibilityStep\nPipelineStep implementation that marks enterprise learners as ineligible\nfor LMS-controlled course discounts, using the new\nDiscountEligibilityCheckRequested openedx-filter.\n\nENT-11\n[…]\nmove unneeded mocks\n\n* chore: update openedx-filters to 3.7.0\n\n* chore: isort fix\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "feat: add DiscountEligibilityStep pipeline step (#2545)",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-26T16:07:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5790cabf9ab7e9ae19aefc095f765c5eff6b92f",
          "body": "fix: change enable_credit_and_industry_pathways default to true",
          "is_bot": false,
          "headline": "Merge pull request #2644 from ssrijaindukuri-sonata/isrija/ENT-11897-new",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-23T19:40:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "282dfe5f332dc15cc25dffa61dec0a5bd587032f",
          "body": null,
          "is_bot": false,
          "headline": "fix: change enable_credit_and_industry_pathways default to true",
          "author_name": "Srija Indukuri",
          "author_login": "ssrijaindukuri-sonata",
          "committed_at": "2026-06-23T11:09:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f23b5bdbb32441c0ed5fa11a45f483d70627ac6a",
          "body": "refactor: reorganize helper functions into model-dependent and model-independent to break an import cycle",
          "is_bot": false,
          "headline": "Merge pull request #2645 from openedx/pwnage101/ENT-11544-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-22T18:54:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a775c9a6d9676ad4628f2f25675fd4c6ec54e8e",
          "body": "…independent to break an import cycle\n\nENT-11544",
          "is_bot": false,
          "headline": "refactor: reorganize helper functions into model-dependent and model-…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-22T18:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "119af87228908a0cb029dd79babee9f9ef17379f",
          "body": "feat: add several courseware access related pipeline steps",
          "is_bot": false,
          "headline": "Merge pull request #2548 from openedx/pwnage101/ENT-11544",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-17T19:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5047687bd48aadba0c4049db70f34b187d3b6399",
          "body": "This commit replaces most enterprise-specific logic serving the purpose\nof conditionally blocking courseware access.\n\nEnterprise steps added:\n- EnterpriseStartDateAccessFailureStep supplies an enterprise-specific start-date error for enterprise learners.\n- ActiveEnterpriseCheckStep denies access whe\n[…]\nd:\n- DataSharingConsentRedirectStep supplies a redirect URL to collect data sharing consent when it is required.\n- DataSharingConsentCourseAccessStep denies access when consent is required.\n\nENT-11544",
          "is_bot": false,
          "headline": "feat: add courseware-access pipeline steps",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-17T18:45:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ecc601e1f44107de22dc09a2ece60535c2f0713",
          "body": "…omer model (#2642)",
          "is_bot": false,
          "headline": "feat: add enable_credit_and_industry_pathways field to EnterpriseCust…",
          "author_name": "Srija Indukuri",
          "author_login": "ssrijaindukuri-sonata",
          "committed_at": "2026-06-16T14:04:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38219d3c692a3692ec3cf06671e97f3b3019176f",
          "body": "…-2026-06-12\n\nchore: change the cron schedule to run on friday instead of monday",
          "is_bot": false,
          "headline": "Merge pull request #2640 from openedx/chore/patch-python-requirements…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-15T22:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2de3b5817dc61cb824efa8866a09b008f8584193",
          "body": null,
          "is_bot": false,
          "headline": "chore: change the cron schedule to run on friday instead of monday",
          "author_name": "Kira Miller",
          "author_login": "kiram15",
          "committed_at": "2026-06-15T22:53:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15fb69dd5750c58889fda5e04fd20fc5445b7e8d",
          "body": null,
          "is_bot": false,
          "headline": "fix: downgrade notification banner log level (#2639)",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-06-15T16:49:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fae82b5d498ab3e8a272ee0c578928f2e10dfe41",
          "body": "Co-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2636)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-06-11T21:29:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a32f6efeb593d1758af6473045c586807a39824",
          "body": "…ed-devstack\n\ntest: refactor the seed_enterprise_devstack_data command to be more composable",
          "is_bot": false,
          "headline": "Merge pull request #2637 from openedx/pwnage101/ENT-11544-refactor-se…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-11T00:19:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afa23d3f9ecea7e0518700b99d87d875f7d35cd2",
          "body": "…omposable\n\nThe essential logic of this old management command was migrated into a\ncentral `devstack_api.py` library, then that library used to compose two\nnew management commands:\n\n- create_enterprise_linked_learner\n- enroll_enterprise_learner\n\nIn turn, all three enterprise management commands were\n[…]\nst-ENT-11544.sh` which is the master\nprovision script for integration testing ENT-11544, but also serves as\na demonstration of the power of composing these new management commands\ntogether.\n\nENT-11544",
          "is_bot": false,
          "headline": "test: refactor the seed_enterprise_devstack_data command to be more c…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-11T00:04:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64975913b9e7aacd76f27705131c7a33a82e2d40",
          "body": "This was motivated due to a bug in an older version of\ncodecov/codecov-action which breaks GPG signature validation, but I went\nahead and just refreshed all of them for good measure.",
          "is_bot": false,
          "headline": "chore: upgrade all github actions in CI.",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-10T23:45:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1a15fbf616f94fcc9372e562528525cbcba2182",
          "body": "…mes as ISO-8601 (#2635)",
          "is_bot": false,
          "headline": "fix: format integration and SSO configuration created/modified dateti…",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-06-08T15:15:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67cbfdf47acd6a33deb400bbea1eb47812dc4f4d",
          "body": null,
          "is_bot": false,
          "headline": "feat: Removing the feature flag able to learner and admin tab",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-06-03T13:48:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0113e45b683a5c72efa2e17a482806159029b6d7",
          "body": "chore: pin GitHub Actions workflows to full commit SHAs",
          "is_bot": false,
          "headline": "Merge pull request #2621 from irfanuddinahmad/pin-actions-to-sha",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-05-31T19:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fc0e55621ccd0f23ff32a60afd3691fe67c5f81",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into pin-actions-to-sha",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-05-30T15:14:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68e111ca4e3e40dd1833bd495019973c818f3cec",
          "body": "Updated boilerplate sections to match current conventions in\nedx/ai-devtools-internal docs/templates/.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: sync AI instruction files from enterprise template",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-05-26T20:12:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "68d471e1418df71be87e7ee72735668524b917c7",
          "body": "… (#2543)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add GradeEventContextEnricher pipeline step for grade analytics…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-20T16:55:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc859ee71b76c7ee37277f8c96ba61572bd9c5fd",
          "body": null,
          "is_bot": false,
          "headline": "chore: pin GitHub Actions workflows to full commit SHAs",
          "author_name": "irfanuddinahmad",
          "author_login": "irfanuddinahmad",
          "committed_at": "2026-05-19T04:42:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2216a75a359249f51a6481ee8878c9a0f1a5acc6",
          "body": "feat: Add basic logging for all enterprise filter pipeline steps",
          "is_bot": false,
          "headline": "Merge pull request #2619 from openedx/pwnage101/ENT-11830-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-15T16:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5cc15dfde87103f31e9c7008306df8a04a49f99",
          "body": "This will help tremendously for stage/prod testing.\n\nENT-11830",
          "is_bot": false,
          "headline": "feat: Add basic logging for all enterprise filter pipeline steps",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:34:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ff87613b5478a953acabd572758ebd5e5457089",
          "body": "feat: own OPEN_EDX_FILTERS_CONFIG injection",
          "is_bot": false,
          "headline": "Merge pull request #2617 from openedx/pwnage101/ENT-11830",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:08:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1d293dea6de2a3e153d7ed8bb522f7fb8a5d6e2",
          "body": "ENT-11830",
          "is_bot": false,
          "headline": "chore: update the read_only_fields pipeline to NOT fail silently.",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce2d4d202a04f5d41b6b48dfa9ad3b9ea65a752c",
          "body": "… plugin_settings\n\nENT-11830",
          "is_bot": false,
          "headline": "feat: own OPEN_EDX_FILTERS_CONFIG injection in enterprise and consent…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:07:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f44f6614bbafeb06b0d129ebf1dacc1bc710420",
          "body": "fix: dashboard filter step now obtains the request via crum instead of filter context",
          "is_bot": false,
          "headline": "Merge pull request #2618 from openedx/pwnage101/ENT-11569-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T16:45:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cefa461e18bb8850a0973bfa796960ba22c81fe",
          "body": "…f filter context\n\nIt was always bogus to expect the request to be in the context object\nbecause it was never in there to begin with, and nothing changed to add\nit in there.  It would be weird to put the request in there anyway, so\njust use crum instead.\n\nENT-11569",
          "is_bot": false,
          "headline": "fix: dashboard filter step now obtains the request via crum instead o…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-13T23:59:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "306ca8ab665f811efa5e877891fbfcebc55e17a2",
          "body": "…file data (ENT-11811) (#2614)",
          "is_bot": false,
          "headline": "fix(admin-members): display blank name for pending invite without pro…",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-05-13T12:13:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ebd27317668a5d3ebb1815a77532787cc2c0c51",
          "body": "…ourses in admin enrollment viewset (#2608)",
          "is_bot": false,
          "headline": "feat: account for data sharing consent settings and mark unenrolled c…",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-05-11T19:41:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0132d9ab1e0d14becb9eec892214859b9d6c24cf",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2616)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-05-11T15:20:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c347e1678c590c943804ab57f2115822c450faf1",
          "body": "* chore: Upgrade Python requirements\n\n* fix: catch new UnsupportedAlgorithm exception for cryptography 47.0.0\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2607)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-05-11T13:44:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ff6cbf31708836392ce8b9c58d6a686cff0d1b2",
          "body": "Active admins now resolve name via auth_userprofile.name (the canonical\nedX full-name field) before falling back to first_name and username, so\nthe column shows a real name instead of being blank for users whose\nauth_user.first_name is empty.\n\nPending admins previously returned name=None because the\n[…]\nhe two production-only branches are\nmarked # pragma: no cover to match the codebase's convention for code\npaths that only run when student is installed.\n\nBumps version to 8.0.9 with a changelog entry.",
          "is_bot": false,
          "headline": "fix: populate name in Invite Admin list view (ENT-11811)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-07T14:17:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e26c2507fc95fdd6f532e05f41d7bf411aed2c90",
          "body": "feat: extra logging for enterprise email association pipeline step",
          "is_bot": false,
          "headline": "Merge pull request #2612 from openedx/pwnage101/ENT-11566-4",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a20f3f0cd93ecadae0806beb965fe4e95fdd109",
          "body": "ENT-11566",
          "is_bot": false,
          "headline": "feat: extra logging for enterprise email association pipeline step",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d84844fd07823559721556e091211e5ff9ec3ec7",
          "body": "…ation (#2555)\n\n* feat: add pluggable override for course home progress username obfuscation\n\nENT-11572\n\n* fix: pylint disable formatting\n\n* chore: isort fix\n\n* chore: bump version\n\n* chore: address pr comments\n\n* test: add coverage\n\n* test: bring override in line with team conventions\n\n* chore: fix pylint issues\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "feat: add pluggable override for course home progress username obfusc…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:02:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "585472a7aaf3a804d0d7dfe60d9fd0df9233e66a",
          "body": "fix: gate plugin_settings on ENABLE_ENTERPRISE_INTEGRATION",
          "is_bot": false,
          "headline": "Merge pull request #2610 from openedx/pwnage101/ENT-11566-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T02:04:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c0c0b0b05e5f5eb45e27260da105b6068e4fede",
          "body": "The main behavior change:\n- Skip social auth pipeline injection when enterprise integration\n  is disabled.\n  - This fixes a broken CMS test in the edxapp which expects NO\n    enterprise steps in the social auth pipeline.\n\nOther changes rolled into this commit to simplify testing and prep for\nmaking \n[…]\nlugins()) to prevent future duplication of test settings\n  once we migrate enterprise-specific settings into this repo.\n\nENT-11566\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: gate plugin_settings on ENABLE_ENTERPRISE_INTEGRATION",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T01:40:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d917c555ffc9e6a69e40f8a779877c9d70b73b0",
          "body": "feat: add TPA pipeline step and signal handler for enterprise",
          "is_bot": false,
          "headline": "Merge pull request #2549 from openedx/pwnage101/ENT-11566",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T21:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2201424404210c9292510385f2594e405ae11d64",
          "body": "John Nagro originally leveraged Keycloak to provide an identity provider\nfor testing SAML-based third party auth (TPA) in edx devstack, but it\nwas not broadly usable because it lacked scripts for keycloak\nprovisioning, LMS TPA provisioning, and other necessary scaffolding to\ntie it all together.\n\nENT-11566",
          "is_bot": false,
          "headline": "test: Enhance and formalize keycloak-powered local IdP capabilities",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T16:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4c066028545bf200f7ed588b25e8d85e4b8d41",
          "body": "- Add enterprise_associate_by_email pipeline step, replacing the removed pipeline step from platform.\n- Add signal handler to unlink enterprise users from an IdP (signal: SAMLAccountDisconnected)\n- Inject all enterprise-specific TPA pipeline steps via plugin_settings.\n\nENT-11566\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add TPA pipeline step and social auth disconnect handler",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T16:53:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad3528ef3e49e2b37bcbceae2883b5c0d4fc9e8d",
          "body": "Documents the operator permission expansion from the previous commit.",
          "is_bot": false,
          "headline": "chore: bump version to 8.0.4 and add changelog entry",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-05T13:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b481f82158797484375798bb89bf0501d58aaef7",
          "body": "ENT-11806: extend the MANAGE_ENTERPRISE_CUSTOMER_ADMINS_PERMISSION rule\nto also recognize the enterprise_openedx_operator system role from the\nJWT, so operators can invite and delete enterprise admins alongside the\nexisting provisioning and enterprise_admin roles.",
          "is_bot": false,
          "headline": "feat: grant enterprise_openedx_operator the manage admins permission",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-05T13:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aeb1da0197e8a242ada8259d70cb1bb942e9d175",
          "body": "* fix: remove consent_required_courses and associated code\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* chore: version bump\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: remove consent_required_courses and associated code (#2606)",
          "author_name": "Kira Miller",
          "author_login": "kiram15",
          "committed_at": "2026-04-30T23:21:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c131267a1e6d8533a60e7c0521bfb325cdc4257",
          "body": null,
          "is_bot": false,
          "headline": "feat: add ai pathways operator waffle flag (#2605)",
          "author_name": "Hamzah Ullah",
          "author_login": "brobro10000",
          "committed_at": "2026-04-29T16:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da9aa23a03d0c52ead1362bc4044fa4ef501f893",
          "body": "…d filter (#2552)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add DashboardContextEnricher pipeline step for student dashboar…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-27T15:22:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3ec86d10a8d6de171d83f5f9bf1636fb866d015",
          "body": "…nector\n\nfeat!: Drop management commands that depend on the snowflake connector",
          "is_bot": false,
          "headline": "Merge pull request #2476 from openedx/feanil/drop_python_snoflake_con…",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-27T13:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99365ea08bc594300b109c5a4007cbb99bdca10c",
          "body": null,
          "is_bot": false,
          "headline": "docs: Bump version and add CHANGELOG entry.",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "879512e8ba99406c7feb0ac2b1e90694cd531fa8",
          "body": null,
          "is_bot": false,
          "headline": "chore: Run `make upgrade`",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8fbc2004bfd3e8f80c997a74b9556be15d135c6",
          "body": null,
          "is_bot": false,
          "headline": "build: Drop the snowflake-connector-python dependency.",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19ba40a7db1191b966db95e0d0d48d0eb2a068e4",
          "body": "This work is a part of https://github.com/openedx/edx-enterprise/issues/2467\n\nBREAKING CHANGE: The monthly_impact_report and nudge_dormant_enrolled_enterprise_learners\nmanagement commands will no longer be available here. If you need these\ncommands, you can copy them to a plugin that is not required to be\ninstalled in the edx-platform",
          "is_bot": false,
          "headline": "feat!: Drop management commands that depend on the snowflake connector",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9247f0ebb6a9047c52cc8d6694629b99e417235b",
          "body": null,
          "is_bot": false,
          "headline": "fix: update social media links for email compatibility (#2602)",
          "author_name": "Hamzah Ullah",
          "author_login": "brobro10000",
          "committed_at": "2026-04-24T15:43:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "501205224e47821098c4e69e1db869a34d4aab26",
          "body": "fix: block SSRF in SAML metadata URL fetching (GHSA-64cv-vxpr-j6vc)",
          "is_bot": false,
          "headline": "Merge commit from fork",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:20:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "735668602d6da041fcdfb0db29d6eebc5120065d",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 7.0.6 and update changelog",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:19:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a22ee74e1aefc2fd403b472ab4ec5ef261edb3ab",
          "body": "Adds `validate_saml_metadata_url()` and `SAMLMetadataURLError` to\nsaml_utils.py. Enforces HTTPS and blocks loopback, link-local (including\ncloud metadata endpoints like 169.254.169.254), and reserved IP addresses.\nRFC 1918 private ranges are blocked by default and can be opted out via\n`SAML_METADATA\n[…]\natform venv and does not depend on it directly.\n\nAddresses: https://github.com/openedx/edx-enterprise/security/advisories/GHSA-64cv-vxpr-j6vc\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: block SSRF in SAML metadata URL fetching (GHSA-64cv-vxpr-j6vc)",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:18:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b422d0ff61f80f11a783adf3c02a4e4fc53fb29",
          "body": null,
          "is_bot": false,
          "headline": "fix: Rolebased access for customer admin",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-04-24T13:56:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daa14a2588777132798d8aba2e6bdaf05a850a41",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2600)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-04-20T16:19:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79fb87cf493d82a6f702a2110ad5500b55d108d4",
          "body": "fix: [SAML Views] Accept an \"enterprise_customer_uuid\" query param (instead of \"enterprise-id\")",
          "is_bot": false,
          "headline": "Merge pull request #2598 from openedx/pwnage101/ENT-11567-hotfix1",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-15T21:43:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9280147c4f904261e27c333f9a23b6ad534bc277",
          "body": "…nstead of \"enterprise-id\")\n\nSAML views should accept \"enterprise_customer_uuid\", not \"enterprise-id\".\n\nThere was a typo in the original docstring which claimed the correct\nparam name was \"enterprise-id\" which was over-indexed by Claude Code as\na source of truth, causing it to recommend a behavior c\n[…]\ning myself and over-indexed on it.\n\nThe original docstring typo: https://github.com/openedx/openedx-platform/blob/01dc3c84/common/djangoapps/third_party_auth/samlproviderconfig/views.py#L33\n\nENT-11567",
          "is_bot": false,
          "headline": "fix: [SAML Views] Accept an \"enterprise_customer_uuid\" query param (i…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-15T21:12:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e0ed1cd8ff4ec5f21668adfb417b9d09918509a",
          "body": "…220)\n\nFollow-up to #2594. The model default for enable_academies was changed\nfrom False to True in that PR, but no corresponding migration was\ngenerated. This adds the AlterField migration that Django's\nmakemigrations produces for that change.",
          "is_bot": false,
          "headline": "feat: add migration for enable_academies default value change (ENT-11…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-15T15:07:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7704577d2765dd52260928b3d8d6440687fd5aea",
          "body": null,
          "is_bot": false,
          "headline": "feat: add changelog entry",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-14T13:13:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05389de57acf3863ba75924023f670e1e333a4d5",
          "body": "…earch (ENT-11220)",
          "is_bot": false,
          "headline": "feat: enable academies by default for all enterprise customers with s…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-14T13:13:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35a295f4faaa96238e636c7ee8b8085efda53817",
          "body": "feat: add SAML provider admin viewsets to enterprise API",
          "is_bot": false,
          "headline": "Merge pull request #2550 from openedx/pwnage101/ENT-11567",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-14T00:25:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f07994413d11b294328e71150c1b558f277310ce",
          "body": "- Push provider_id filtering into database via current_set().filter()\n  instead of iterating all configs in Python.\n- Scope SAMLProviderData detail lookups by entity_id to prevent\n  cross-enterprise data access by guessing IDs.\n\nENT-11567\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use database-side filtering and enterprise-scoped detail queries",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-14T00:06:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2fd6aa8cb7bc327663cf081433419253729e7475",
          "body": "- Add SAMLProviderConfigViewSet and SAMLProviderDataViewSet to the\n  enterprise API with permission checks and comprehensive tests.\n- Add get_saml_identity_provider and get_identity_providers utility\n  views for enterprise SAML operations.\n- Migrate SAML utility functions (get_saml_provider_data_by_\n[…]\n get_saml_provider_configuration) from third_party_auth to enterprise,\n  with comprehensive tests using django-mock-queries MockSet.\n\nENT-11567\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add SAML provider admin API and migrate SAML utilities",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-08T20:58:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b9cb84090f69ffc95f6c39efc84782a4f43033fe",
          "body": "chore: drop Python 3.11 support",
          "is_bot": false,
          "headline": "Merge pull request #2561 from openedx/feanil/drop_python_3.11",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a20a0a21dd20c7234aa053a75cecb6eb1c90805",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 7.0.0",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:17:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9cc3926021e7c300f79f1bc682eea0ce5d8b4346",
          "body": null,
          "is_bot": false,
          "headline": "chore: update requirements for Python 3.12",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:16:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bd79527c56d65fd30565ccb210fc5c01ab1ab86",
          "body": "Removes Python 3.11 from CI matrix, migration check workflows, publish\nworkflow, tox envlist, and setup.py classifiers.\n\nPart of https://github.com/openedx/public-engineering/issues/499",
          "is_bot": false,
          "headline": "chore: drop Python 3.11 support",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:16:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "984cf32b7459a5d84d733b8477a5ec7e525309cd",
          "body": null,
          "is_bot": false,
          "headline": "fix: add changelog entry and update init for inactive admin user fix",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-07T13:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f8689a785ce6113423dbd6b94131e6632896a80",
          "body": "- Removed auth_user.is_active=True filter from admin listing query\n  so inactive admin users appear in the admin list\n- Added EnterpriseCustomerUser.active=True and enterprise_admin role\n  check via SystemWideEnterpriseUserRoleAssignment\n- Changed hard delete to log warning instead of returning 404 when\n  admin role assignment is missing\n- Updated tests accordingly",
          "is_bot": false,
          "headline": "fix: allow deletion of inactive admin users (ENT-11714)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-07T13:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd0c3696d0516f4b56887307a5e2418f03d4f432",
          "body": "Co-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add AccountSettingsReadOnlyFieldsStep pipeline step (#2544)",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-06T17:43:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b03a0b8b1b9d467ad349349715464be790bce6d6",
          "body": null,
          "is_bot": false,
          "headline": "chore: increment version to 6.8.4",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-03-31T13:43:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2085c62d1145935420efc241123e764dec6ba685",
          "body": "- Hard-delete EnterpriseCustomerAdmin record after removing admin role\n- Remove role-based filtering from get_existing_admin_emails()\n- Update test assertions to verify ECA record is permanently deleted",
          "is_bot": false,
          "headline": "feat: implement hard delete for enterprise customer admin (ENT-11264)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-03-31T13:37:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53755d4effb223d9c379d22374cb51273bc5ffc",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2587)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-03-30T19:07:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "369480ca7535b5a544f0d2d7e0104259b08ac9df",
          "body": "fix: Move settings reads out of AppConfig, into consumers",
          "is_bot": false,
          "headline": "Merge pull request #2586 from openedx/pwnage101/ENT-11663-3",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-27T17:16:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "120a621a84a9b059252a7a797117b34e1f66eede",
          "body": "There's a chance that the `enterprise.apps` module might be imported\nbefore `lms.envs.production`, which would result in the EnterpriseConfig\nAppConfig caching outdated settings. Mitigate this by forcing consumers\nof these cached settings to just read `djang.conf.settings` directly.\n\nENT-11663",
          "is_bot": false,
          "headline": "fix: Move settings reads out of AppConfig, into consumers",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-27T17:00:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5df55a6de743685ff0da9003d6cbae4c51ba7b4",
          "body": null,
          "is_bot": false,
          "headline": "chore: increment init.py version to 6.8.2",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-03-27T16:34:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9443dbec72774390ebefb96ee244bfb0971e5143",
          "body": "- Add reminder task with configurable delay, cadence, and max reminders\n- Add reminder_sent_at field to PendingEnterpriseCustomerAdminUser for explicit tracking\n- Add management command send_pending_admin_reminders\n- Add Braze campaign constants for reminder emails\n- Rename pending_invite to pending\n[…]\ntasks and tests\n- Consolidate tests using ddt.data parameterization\n- Fix function signature style per edx Python guidelines\n- Bump version to 6.8.1\n\nCo-authored-by: Alex Dusenbery <adusenbery@2u.com>",
          "is_bot": false,
          "headline": "feat: add admin invite reminder emails (ENT-11581) (#2573)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-03-27T15:56:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eff55b39c9c03b3456ac99c8d9a50bb2c766f497",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2583)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-03-27T02:28:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53f98ce59b389369f638a0cc964bda1f78a2b4bc",
          "body": "fix: also register enterprise and consent as CMS plugins",
          "is_bot": false,
          "headline": "Merge pull request #2579 from openedx/pwnage101/ENT-11663-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:46:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aee7170b253988acbfc46811ce717e78e07061b0",
          "body": "Somehow I missed testing with CMS on openedx-platform, and as a result\nthe CMS unit tests failed due to platform code which imports\n`enterprise.models` without having the enterprise app installed.  It's\nweird because CMS doesn't actually use anything from enterprise, but\nmakes sense because CMS and LMS share the same source code.\n\nENT-11663",
          "is_bot": false,
          "headline": "fix: also register enterprise and consent as CMS plugins",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:46:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45f60f4a7a7320a23db2d64207e26151701d6f6c",
          "body": "fix: Update outdated & broken .coveragerc syntax",
          "is_bot": false,
          "headline": "Merge pull request #2580 from openedx/pwnage101/fix-coverage-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:44:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 187,
      "latest_release_at": "2026-07-23T12:40:35Z",
      "latest_release_tag": "8.7.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 42,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": true,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "edx-enterprise",
          "exists": true,
          "license": "AGPL-3.0-or-later",
          "keywords": [
            "Django",
            "edx",
            "Development Status :: 3 - Alpha",
            "Framework :: Django",
            "Framework :: Django :: 5.2",
            "Intended Audience :: Developers",
            "Natural Language :: English",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.12"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/edx-enterprise/",
          "is_deprecated": false,
          "latest_version": "8.7.1",
          "repository_url": "https://github.com/openedx/edx-enterprise",
          "versions_count": 1461,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2016-10-24T16:01:54.192120Z",
          "latest_published_at": "2026-07-23T12:42:25.632489Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 71,
      "stars": 50,
      "watchers": 74,
      "fork_history": {
        "days": [
          {
            "date": "2016-11-09",
            "count": 1
          },
          {
            "date": "2016-11-21",
            "count": 1
          },
          {
            "date": "2017-03-16",
            "count": 1
          },
          {
            "date": "2017-04-04",
            "count": 1
          },
          {
            "date": "2017-04-29",
            "count": 1
          },
          {
            "date": "2017-06-22",
            "count": 1
          },
          {
            "date": "2017-10-01",
            "count": 1
          },
          {
            "date": "2017-11-08",
            "count": 1
          },
          {
            "date": "2018-05-02",
            "count": 1
          },
          {
            "date": "2018-06-29",
            "count": 1
          },
          {
            "date": "2018-08-09",
            "count": 1
          },
          {
            "date": "2018-08-27",
            "count": 1
          },
          {
            "date": "2018-09-01",
            "count": 1
          },
          {
            "date": "2018-12-12",
            "count": 1
          },
          {
            "date": "2019-01-28",
            "count": 1
          },
          {
            "date": "2019-02-25",
            "count": 1
          },
          {
            "date": "2019-03-11",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 1
          },
          {
            "date": "2020-05-05",
            "count": 1
          },
          {
            "date": "2020-05-21",
            "count": 1
          },
          {
            "date": "2020-05-28",
            "count": 1
          },
          {
            "date": "2020-06-09",
            "count": 1
          },
          {
            "date": "2020-09-15",
            "count": 1
          },
          {
            "date": "2020-11-23",
            "count": 1
          },
          {
            "date": "2020-12-08",
            "count": 1
          },
          {
            "date": "2021-05-26",
            "count": 1
          },
          {
            "date": "2021-06-14",
            "count": 1
          },
          {
            "date": "2021-07-04",
            "count": 1
          },
          {
            "date": "2021-12-17",
            "count": 1
          },
          {
            "date": "2022-03-01",
            "count": 1
          },
          {
            "date": "2022-04-12",
            "count": 1
          },
          {
            "date": "2022-04-27",
            "count": 1
          },
          {
            "date": "2022-09-12",
            "count": 1
          },
          {
            "date": "2023-04-29",
            "count": 2
          },
          {
            "date": "2023-06-26",
            "count": 1
          },
          {
            "date": "2023-10-20",
            "count": 1
          },
          {
            "date": "2024-01-20",
            "count": 1
          },
          {
            "date": "2024-03-20",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 1
          },
          {
            "date": "2024-06-09",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 1
          },
          {
            "date": "2024-07-02",
            "count": 1
          },
          {
            "date": "2024-08-30",
            "count": 1
          },
          {
            "date": "2024-09-03",
            "count": 1
          },
          {
            "date": "2024-11-04",
            "count": 1
          },
          {
            "date": "2024-11-20",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-03-21",
            "count": 1
          },
          {
            "date": "2025-04-03",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-06-11",
            "count": 1
          },
          {
            "date": "2025-08-19",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-08",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 71,
        "total_forks": 71
      },
      "star_history": null,
      "open_issues_and_prs": 78
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "docs/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 458598,
      "source_files_sampled": 1039,
      "oversized_source_files": 13,
      "agent_instruction_files": [
        ".github/copilot-instructions.md",
        ".ralph/AGENT.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7063
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "setup.cfg",
        "setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-cpq7-6gpm-g9rc"
            ],
            "fixed_version": "1.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 335
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "4.3.7",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-v56q-mh7h-f735",
              "GHSA-wf6x-7x77-mvgw",
              "GHSA-xvcm-6775-5m9r"
            ],
            "fixed_version": "5.1.8",
            "advisory_count": 3,
            "oldest_advisory_days": 140
          },
          {
            "name": "sha.js",
            "direct": false,
            "version": "2.4.11",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-95m3-7q98-8xr5"
            ],
            "fixed_version": "2.4.12",
            "advisory_count": 1,
            "oldest_advisory_days": 335
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 408
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 408
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-grv7-fg5c-xmjg"
            ],
            "fixed_version": "3.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 799
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "5.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3xgq-45jj-v275"
            ],
            "fixed_version": "7.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 622
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-848j-6mx2-7j84"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 195
          },
          {
            "name": "is-svg",
            "direct": false,
            "version": "2.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-7r28-3m3f-r2pr",
              "GHSA-r8j5-h5cx-65gg"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 1951
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "2.11.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.8,
            "advisory_ids": [
              "GHSA-cpwx-vrp4-4pq7",
              "GHSA-h5c8-rqwp-cp95",
              "GHSA-h75v-3vvj-5mfj",
              "GHSA-q2x7-8rv6-6q7h",
              "PYSEC-2026-1471",
              "PYSEC-2026-1473",
              "PYSEC-2026-1474",
              "PYSEC-2026-1475"
            ],
            "fixed_version": "3.1.6",
            "advisory_count": 8,
            "oldest_advisory_days": 923
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.7.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2pr6-76vf-7546",
              "GHSA-52cp-r559-cp3m",
              "GHSA-8j8c-7jfh-h6hx",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 5,
            "oldest_advisory_days": 2605
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.5.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.1,
            "advisory_ids": [
              "GHSA-9c47-m6qq-7p4h"
            ],
            "fixed_version": "2.2.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1302
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc",
              "GHSA-xxjr-mmjv-4gpg"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 3,
            "oldest_advisory_days": 182
          },
          {
            "name": "lxml",
            "direct": false,
            "version": "5.3.2",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-vfmq-68hx-4jfw",
              "PYSEC-2026-87"
            ],
            "fixed_version": "6.1.0",
            "advisory_count": 2,
            "oldest_advisory_days": 92
          },
          {
            "name": "lxml-html-clean",
            "direct": false,
            "version": "0.4.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8.2,
            "advisory_ids": [
              "GHSA-4jhm-jv67-739f",
              "PYSEC-2026-2614"
            ],
            "fixed_version": "0.4.5",
            "advisory_count": 2,
            "oldest_advisory_days": 14
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "nltk",
            "direct": false,
            "version": "3.9.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-p4gq-832x-fm9v",
              "PYSEC-2026-2078",
              "PYSEC-2026-597"
            ],
            "fixed_version": "3.10.0",
            "advisory_count": 3,
            "oldest_advisory_days": 36
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3v7f-55p6-f55p",
              "GHSA-c2c7-rcm5-vvqj"
            ],
            "fixed_version": "4.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 119
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-8ppf-4f7h-5ppj",
              "GHSA-hm4w-wwcw-mr6r",
              "PYSEC-2026-3455",
              "PYSEC-2026-3456",
              "PYSEC-2026-3457"
            ],
            "fixed_version": "0.6.4",
            "advisory_count": 5,
            "oldest_advisory_days": 8
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.0.33",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52f5-9888-hmc6",
              "GHSA-ph9p-34f9-6g65"
            ],
            "fixed_version": "0.2.6",
            "advisory_count": 2,
            "oldest_advisory_days": 350
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 91
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.25.6",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.2,
            "advisory_ids": [
              "GHSA-968p-4wvh-cqc8"
            ],
            "fixed_version": "8.0.0-alpha.17",
            "advisory_count": 1,
            "oldest_advisory_days": 498
          },
          {
            "name": "@babel/runtime-corejs3",
            "direct": false,
            "version": "7.25.6",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.2,
            "advisory_ids": [
              "GHSA-968p-4wvh-cqc8"
            ],
            "fixed_version": "8.0.0-alpha.17",
            "advisory_count": 1,
            "oldest_advisory_days": 498
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "5.5.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.6,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6",
              "GHSA-v88g-cgmw-v5xw"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 2,
            "oldest_advisory_days": 1623
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.12.6",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 161
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "0.3.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-257v-vj4p-3w2h"
            ],
            "fixed_version": "1.5.5",
            "advisory_count": 1,
            "oldest_advisory_days": 1857
          },
          {
            "name": "jquery",
            "direct": false,
            "version": "2.2.4",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.9,
            "advisory_ids": [
              "GHSA-6c3j-c64m-qhgq",
              "GHSA-gxr4-xjj5-5px2",
              "GHSA-jpcq-cgw6-v4j6",
              "GHSA-rmxg-73gg-4p98"
            ],
            "fixed_version": "4.4.0",
            "advisory_count": 4,
            "oldest_advisory_days": 3103
          },
          {
            "name": "mem",
            "direct": false,
            "version": "1.1.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.1,
            "advisory_ids": [
              "GHSA-4xcv-9jjx-gfj3"
            ],
            "fixed_version": "4.0.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2574
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-952p-6rrq-rcjv"
            ],
            "fixed_version": "4.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 799
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "5.2.18",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-566m-qj78-rww5",
              "GHSA-7fh5-64p2-3v2j",
              "GHSA-qx2v-qp2m-jg93"
            ],
            "fixed_version": "8.5.10",
            "advisory_count": 3,
            "oldest_advisory_days": 1658
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "6.0.23",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-566m-qj78-rww5",
              "GHSA-7fh5-64p2-3v2j",
              "GHSA-qx2v-qp2m-jg93"
            ],
            "fixed_version": "8.5.10",
            "advisory_count": 3,
            "oldest_advisory_days": 1658
          },
          {
            "name": "pymongo",
            "direct": false,
            "version": "4.4.0",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 4.7,
            "advisory_ids": [
              "GHSA-m87m-mmvp-v9qm",
              "PYSEC-2026-1826"
            ],
            "fixed_version": "4.6.3",
            "advisory_count": 2,
            "oldest_advisory_days": 777
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-q8mj-m7cp-5q26",
              "GHSA-w7fw-mjwx-w883"
            ],
            "fixed_version": "6.15.2",
            "advisory_count": 2,
            "oldest_advisory_days": 160
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": "5.4.1",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 4.8,
            "advisory_ids": [
              "GHSA-wv4w-6qv2-qqfg",
              "PYSEC-2026-1932"
            ],
            "fixed_version": "5.6.0",
            "advisory_count": 2,
            "oldest_advisory_days": 286
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "7.0.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-p9pc-299p-vxgp"
            ],
            "fixed_version": "18.1.1",
            "advisory_count": 1,
            "oldest_advisory_days": 2147
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 20,
          "critical": 3,
          "moderate": 16
        },
        "advisory_count": 86,
        "affected_count": 39,
        "assessed_count": 1041,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 50,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "@edx/brand",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "npm:@edx/brand-edx.org@^1.3.0"
        },
        {
          "name": "@openedx/paragon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^21.5.7"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@openedx/paragon",
            "direct": true,
            "version": "21.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.25.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime-corejs3",
            "direct": false,
            "version": "7.25.6",
            "ecosystem": "npm"
          },
          {
            "name": "@edx/brand-edx.org",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/ecma402-abstract",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/fast-memoize",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/icu-messageformat-parser",
            "direct": false,
            "version": "2.7.8",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/icu-skeleton-parser",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl",
            "direct": false,
            "version": "2.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-displaynames",
            "direct": false,
            "version": "6.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-listformat",
            "direct": false,
            "version": "7.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-localematcher",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/fontawesome-common-types",
            "direct": false,
            "version": "6.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/fontawesome-svg-core",
            "direct": false,
            "version": "6.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/react-fontawesome",
            "direct": false,
            "version": "0.1.19",
            "ecosystem": "npm"
          },
          {
            "name": "@popperjs/core",
            "direct": false,
            "version": "2.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "@restart/context",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@restart/hooks",
            "direct": false,
            "version": "0.4.16",
            "ecosystem": "npm"
          },
          {
            "name": "@types/hoist-non-react-statics",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/invariant",
            "direct": false,
            "version": "2.2.37",
            "ecosystem": "npm"
          },
          {
            "name": "@types/prop-types",
            "direct": false,
            "version": "15.7.12",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "18.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-transition-group",
            "direct": false,
            "version": "4.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/warning",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "4.0.13",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "5.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-dynamic-import",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "5.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.12.6",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "align-text",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "alphanum-sort",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "aria-hidden",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "arr-diff",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-flatten",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-union",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-unique",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "asn1.js",
            "direct": false,
            "version": "4.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert-ok",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "assign-symbols",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "2.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "async-each",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "atob",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "attr-accept",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "autoprefixer",
            "direct": false,
            "version": "6.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "available-typed-arrays",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "babel-code-frame",
            "direct": false,
            "version": "6.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "big.js",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "bindings",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "brorand",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-aes",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-cipher",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-des",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-rsa",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-sign",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-zlib",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "1.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "4.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-xor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "builtin-status-codes",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cache-base",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-api",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-db",
            "direct": false,
            "version": "1.0.30001657",
            "ecosystem": "npm"
          },
          {
            "name": "cast-array",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "center-align",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chardet",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "child_process",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "2.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clap",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "class-utils",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "classnames",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-spinners",
            "direct": false,
            "version": "2.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "cli-width",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "co",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "coa",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "code-point-at",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "collection-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "color",
            "direct": false,
            "version": "0.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "colormin",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "component-emitter",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "console-browserify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "constants-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "copy-descriptor",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "core-js-pure",
            "direct": false,
            "version": "3.38.1",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "create-ecdh",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "create-hash",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "create-hash",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-hmac",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-browserify",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-color-names",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "css-loader",
            "direct": false,
            "version": "0.28.11",
            "ecosystem": "npm"
          },
          {
            "name": "css-mediaquery",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-selector-tokenizer",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "csso",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "d",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "date-now",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "decode-uri-component",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "defaults",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-properties",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "defined",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "des.js",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-node-es",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diffie-hellman",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "dom-helpers",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "domain-browser",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "email-prop-type",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "email-validator",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emojis-list",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "3.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "errno",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es5-ext",
            "direct": false,
            "version": "0.10.64",
            "ecosystem": "npm"
          },
          {
            "name": "es6-iterator",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "es6-map",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "es6-set",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "es6-symbol",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "es6-weak-map",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escope",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "esniff",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "2.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "event-emitter",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "evp_bytestokey",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expand-brackets",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ext",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "external-editor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "extglob",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "extract-text-webpack-plugin",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fastparse",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-selector",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-uri-to-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "filter-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatten",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "focus-lock",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "font-awesome",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "for-each",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "for-in",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fragment-cache",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-nonce",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-value",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "has-ansi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-value",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "hash.js",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hmac-drbg",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hoist-non-react-statics",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "html-comment-regex",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "https-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hyphenate-style-name",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "icss-replace-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "icss-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "imask",
            "direct": false,
            "version": "7.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "4.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "indexes-of",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "inquirer",
            "direct": false,
            "version": "8.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "intl-messageformat",
            "direct": false,
            "version": "10.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "invariant",
            "direct": false,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "invert-kv",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-absolute-url",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-accessor-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-callable",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-interactive",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-svg",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-typed-array",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jasmine-ajax",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "jasmine-jquery",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jquery",
            "direct": false,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "js-base64",
            "direct": false,
            "version": "2.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jshint",
            "direct": false,
            "version": "2.13.6",
            "ecosystem": "npm"
          },
          {
            "name": "json-loader",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lazy-cache",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lcid",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "loader-utils",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniqby",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "longest",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "loose-envify",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "mailto-link",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "map-cache",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "map-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "matchmediaquery",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "math-expression-evaluator",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "md5.js",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "mem",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "memory-fs",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "miller-rabin",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-crypto-utils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "mixin-deep",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stream",
            "direct": false,
            "version": "0.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "nan",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanomatch",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "next-tick",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-libs-browser",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-range",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "num2fraction",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "number-is-nan",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-copy",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-filter",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-visit",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "object.pick",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ora",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "os-browserify",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-locale",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-tmpdir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-finally",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "parse-asn1",
            "direct": false,
            "version": "5.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pascalcase",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-dirname",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pbkdf2",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "popper.js",
            "direct": false,
            "version": "1.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "posix-character-classes",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "possible-typed-array-names",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "5.2.18",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "6.0.23",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-calc",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-colormin",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-convert-values",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-comments",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-duplicates",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-empty",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-overridden",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-unused",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-filter-plugins",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-idents",
            "direct": false,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-longhand",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-rules",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-message-helpers",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-font-values",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-gradients",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-params",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-selectors",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-extract-imports",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-local-by-default",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-scope",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-values",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-charset",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-url",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-ordered-values",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-idents",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-initial",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-transforms",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-svgo",
            "direct": false,
            "version": "2.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-unique-selectors",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-value-parser",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-zindex",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "prepend-http",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types",
            "direct": false,
            "version": "15.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types-extra",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "prr",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pseudomap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "public-encrypt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "q",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "query-string",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "query-string",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "querystring-es3",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "randomfill",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-bootstrap",
            "direct": false,
            "version": "1.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "react-clientside-effect",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "react-colorful",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-dropzone",
            "direct": false,
            "version": "14.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-fast-compare",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-focus-lock",
            "direct": false,
            "version": "2.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-focus-on",
            "direct": false,
            "version": "3.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-imask",
            "direct": false,
            "version": "7.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-intl",
            "direct": false,
            "version": "6.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "16.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-lifecycles-compat",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react-loading-skeleton",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-overlays",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-popper",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-proptype-conditional-require",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react-remove-scroll",
            "direct": false,
            "version": "2.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "react-remove-scroll-bar",
            "direct": false,
            "version": "2.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "react-responsive",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-style-singleton",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-table",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-transition-group",
            "direct": false,
            "version": "4.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "1.1.14",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "reduce-css-calc",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "reduce-function-call",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "regenerator-runtime",
            "direct": false,
            "version": "0.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "regex-not",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "remove-trailing-separator",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-element",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-string",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-main-filename",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.8",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-url",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ret",
            "direct": false,
            "version": "0.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "right-align",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ripemd160",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ripemd160",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "run-async",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "rxjs",
            "direct": false,
            "version": "7.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "1.78.0",
            "ecosystem": "npm"
          },
          {
            "name": "sass-loader",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "scheduler",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-value",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "setimmediate",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "sha.js",
            "direct": false,
            "version": "2.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-equal",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-node",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-util",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "sort-keys",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-list-map",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-resolve",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-url",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "split-on-first",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "split-string",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "static-extend",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-browserify",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-http",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "strict-uri-encode",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "strict-uri-encode",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "0.10.31",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-eof",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "style-loader",
            "direct": false,
            "version": "0.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "svgo",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "tabbable",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "0.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "through",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "timers-browserify",
            "direct": false,
            "version": "2.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.0.33",
            "ecosystem": "npm"
          },
          {
            "name": "to-arraybuffer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-buffer",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-object-path",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "tty-browserify",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "type",
            "direct": false,
            "version": "2.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-buffer",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "2.8.29",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-to-browserify",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uglifyjs-webpack-plugin",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "uncontrollable",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "union-value",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uniq",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uniqs",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unset-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "upath",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "urix",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "url",
            "direct": false,
            "version": "0.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "use",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "use-callback-ref",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "use-sidecar",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vendors",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vm-browserify",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "warning",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "1.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack-chokidar2",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "whet.extend",
            "direct": false,
            "version": "0.9.9",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-module",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-typed-array",
            "direct": false,
            "version": "1.1.19",
            "ecosystem": "npm"
          },
          {
            "name": "window-size",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xtend",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "accessible-pygments",
            "direct": false,
            "version": "0.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "acid-xblock",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohappyeyeballs",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": "3.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "alabaster",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "amqp",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "analytics-python",
            "direct": false,
            "version": "1.4.post1",
            "ecosystem": "pypi"
          },
          {
            "name": "aniso8601",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "appdirs",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "asgiref",
            "direct": false,
            "version": "3.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "asn1crypto",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "astroid",
            "direct": false,
            "version": "3.3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "26.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "backoff",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bcrypt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "billiard",
            "direct": false,
            "version": "4.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "bleach",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "bleach",
            "direct": false,
            "version": "6.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "boto3",
            "direct": false,
            "version": "1.43.41",
            "ecosystem": "pypi"
          },
          {
            "name": "botocore",
            "direct": false,
            "version": "1.43.41",
            "ecosystem": "pypi"
          },
          {
            "name": "bracex",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bridgekeeper",
            "direct": false,
            "version": "0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cachecontrol",
            "direct": false,
            "version": "0.14.4",
            "ecosystem": "pypi"
          },
          {
            "name": "cachetools",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "camel-converter",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "casbin-django-orm-adapter",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "celery",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "celery",
            "direct": false,
            "version": "5.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.6.17",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "chardet",
            "direct": false,
            "version": "7.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.9",
            "ecosystem": "pypi"
          },
          {
            "name": "chem",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cheroot",
            "direct": false,
            "version": "11.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "cherrypy",
            "direct": false,
            "version": "18.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "click-didyoumean",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "click-log",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "click-plugins",
            "direct": false,
            "version": "1.1.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "click-repl",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "code-annotations",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "code-annotations",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "codejail-includes",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.15.2",
            "ecosystem": "pypi"
          },
          {
            "name": "crowdsourcehinter-xblock",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "49.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cssutils",
            "direct": false,
            "version": "2.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ddt",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "defusedxml",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "diff-cover",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dill",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "django",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django",
            "direct": false,
            "version": "5.2.16",
            "ecosystem": "pypi"
          },
          {
            "name": "django-appconf",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-autocomplete-light",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-cache-memoize",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-cache-memoize",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-celery-results",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-classy-tags",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-config-models",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-config-models",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-cors-headers",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-countries",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-countries",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-crum",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-crum",
            "direct": false,
            "version": "0.7.9",
            "ecosystem": "pypi"
          },
          {
            "name": "django-fernet-fields-v2",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-fernet-fields-v2",
            "direct": false,
            "version": "0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "django-filter",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-filter",
            "direct": false,
            "version": "25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ipware",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-ipware",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-js-asset",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-method-override",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mock-queries",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-model-utils",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-model-utils",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mptt",
            "direct": false,
            "version": "0.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-multi-email-field",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-multi-email-field",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mysql",
            "direct": false,
            "version": "4.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-oauth-toolkit",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-oauth-toolkit",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-object-actions",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-object-actions",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-pipeline",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-push-notifications",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ratelimit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-sekizai",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ses",
            "direct": false,
            "version": "4.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-simple-history",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-simple-history",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-statici18n",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-storages",
            "direct": false,
            "version": "1.14.6",
            "ecosystem": "pypi"
          },
          {
            "name": "django-user-tasks",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-waffle",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-waffle",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-webpack-loader",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework",
            "direct": false,
            "version": "3.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework-xml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework-xml",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dnspython",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "doc8",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "docutils",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "pypi"
          },
          {
            "name": "done-xblock",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-jwt",
            "direct": false,
            "version": "1.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-spectacular",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-yasg",
            "direct": false,
            "version": "1.21.15",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-ace",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-api-doc-tools",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-auth-backends",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-braze-client",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-bulk-grades",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-ccx-keys",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-celeryutils",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-codejail",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-completion",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-release-util",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-sites-extensions",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-utils",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-utils",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-drf-extensions",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-drf-extensions",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-enterprise",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-event-bus-kafka",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-event-bus-redis",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-i18n-tools",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-lint",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-milestones",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-opaque-keys",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-opaque-keys",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-organizations",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-proctoring",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rbac",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rbac",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rest-api-client",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rest-api-client",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-search",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-sga",
            "direct": false,
            "version": "0.29.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-submissions",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-tincan-py35",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-toggles",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-toggles",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-when",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edxval",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "elasticsearch",
            "direct": false,
            "version": "7.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "encutils",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "enmerkar",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "enmerkar-underscore",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "enterprise-integrated-channels",
            "direct": false,
            "version": "0.1.62",
            "ecosystem": "pypi"
          },
          {
            "name": "event-tracking",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "factory-boy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "factory-boy",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "faker",
            "direct": false,
            "version": "40.31.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastavro",
            "direct": false,
            "version": "1.12.2",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.29.6",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.30.2",
            "ecosystem": "pypi"
          },
          {
            "name": "firebase-admin",
            "direct": false,
            "version": "7.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "freezegun",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fs",
            "direct": false,
            "version": "2.4.16",
            "ecosystem": "pypi"
          },
          {
            "name": "fs-s3fs",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "geoip2",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "glob2",
            "direct": false,
            "version": "0.7",
            "ecosystem": "pypi"
          },
          {
            "name": "google-api-core",
            "direct": false,
            "version": "2.31.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-auth",
            "direct": false,
            "version": "2.55.1",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-core",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-firestore",
            "direct": false,
            "version": "2.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-storage",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-crc32c",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-resumable-media",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "googleapis-common-protos",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio",
            "direct": false,
            "version": "1.82.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio-status",
            "direct": false,
            "version": "1.82.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gunicorn",
            "direct": false,
            "version": "26.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h2",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "help-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hpack",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "html5lib",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "hyperframe",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "icalendar",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.18",
            "ecosystem": "pypi"
          },
          {
            "name": "imagesize",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "inflection",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "invoke",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "ipaddress",
            "direct": false,
            "version": "1.0.23",
            "ecosystem": "pypi"
          },
          {
            "name": "isodate",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "isort",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-classes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-collections",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-context",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-functools",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-text",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jasmine",
            "direct": false,
            "version": "3.99.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jasmine-core",
            "direct": false,
            "version": "3.99.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "2.11.3",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jmespath",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "joblib",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "jsondiff",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsondiff",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonfield",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonfield",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jwcrypto",
            "direct": false,
            "version": "1.5.8",
            "ecosystem": "pypi"
          },
          {
            "name": "kombu",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "laboratory",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "lazy",
            "direct": false,
            "version": "2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "lti-consumer-xblock",
            "direct": false,
            "version": "11.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "lxml-html-clean",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mailsnake",
            "direct": false,
            "version": "1.6.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mako",
            "direct": false,
            "version": "1.3.12",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "maxminddb",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "meilisearch",
            "direct": false,
            "version": "0.42.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mock",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "model-bakery",
            "direct": false,
            "version": "1.24.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mongoengine",
            "direct": false,
            "version": "0.29.3",
            "ecosystem": "pypi"
          },
          {
            "name": "monotonic",
            "direct": false,
            "version": "1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "more-itertools",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mpmath",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "msgpack",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": false,
            "version": "6.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mysqlclient",
            "direct": false,
            "version": "2.2.8",
            "ecosystem": "pypi"
          },
          {
            "name": "nh3",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "pypi"
          },
          {
            "name": "nltk",
            "direct": false,
            "version": "3.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": "1.26.4",
            "ecosystem": "pypi"
          },
          {
            "name": "oauthlib",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "olxcleaner",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-atlas",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-atlas",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-authz",
            "direct": false,
            "version": "1.21.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-calc",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-core",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-pyfs",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-require",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-wiki",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-events",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-events",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-filters",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-filters",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-forum",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "optimizely-sdk",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ora2",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ordereddict",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "outcome",
            "direct": false,
            "version": "1.3.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "paramiko",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "paramiko",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "path",
            "direct": false,
            "version": "16.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "path-py",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "path-py",
            "direct": false,
            "version": "12.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pgpy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pgpy",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "piexif",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": "12.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pip-tools",
            "direct": false,
            "version": "7.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pkginfo",
            "direct": false,
            "version": "1.12.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "polib",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "portend",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "proto-plus",
            "direct": false,
            "version": "1.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "7.35.1",
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "psycopg2-binary",
            "direct": false,
            "version": "2.9.12",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1-modules",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pycasbin",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycountry",
            "direct": false,
            "version": "26.2.16",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycryptodomex",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": false,
            "version": "2.13.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.46.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydata-sphinx-theme",
            "direct": false,
            "version": "0.16.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pydocstyle",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyjwt",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylatexenc",
            "direct": false,
            "version": "2.10",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-celery",
            "direct": false,
            "version": "0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-django",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-plugin-utils",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylti1p3",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymemcache",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymongo",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pynacl",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pynliner",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyopenssl",
            "direct": false,
            "version": "26.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyparsing",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-api",
            "direct": false,
            "version": "1.10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-hooks",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyrsistent",
            "direct": false,
            "version": "0.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pysocks",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pysrt",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-django",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-discovery",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "python-ipware",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-slugify",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "python-swiftclient",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python3-openid",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python3-saml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python3-saml",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": "2026.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyuca",
            "direct": false,
            "version": "1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "random2",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "readme-renderer",
            "direct": false,
            "version": "45.0",
            "ecosystem": "pypi"
          },
          {
            "name": "recommender-xblock",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "redis",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.6.28",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.34.2",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-oauthlib",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-toolbelt",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "responses",
            "direct": false,
            "version": "0.26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "restructuredtext-lint",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "15.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "roman-numerals",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "roman-numerals-py",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "2026.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "rules",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "rules",
            "direct": false,
            "version": "3.5",
            "ecosystem": "pypi"
          },
          {
            "name": "s3transfer",
            "direct": false,
            "version": "0.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sailthru-client",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "scipy",
            "direct": false,
            "version": "1.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "selenium",
            "direct": false,
            "version": "4.46.0",
            "ecosystem": "pypi"
          },
          {
            "name": "semantic-version",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "83.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "shapely",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "shellingham",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "simpleeval",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "pypi"
          },
          {
            "name": "simplejson",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "slumber",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "slumber",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "snowballstemmer",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "snowflake-connector-python",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-core",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "sorl-thumbnail",
            "direct": false,
            "version": "13.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sortedcontainers",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.4",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx",
            "direct": false,
            "version": "8.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-book-theme",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-applehelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-devhelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-htmlhelp",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-jsmath",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-qthelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-serializinghtml",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlparse",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "staff-graded-xblock",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "stevedore",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "stevedore",
            "direct": false,
            "version": "5.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "super-csv",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sympy",
            "direct": false,
            "version": "1.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tempora",
            "direct": false,
            "version": "5.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "testfixtures",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "testfixtures",
            "direct": false,
            "version": "12.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "text-unidecode",
            "direct": false,
            "version": "1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tincan",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tincan",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tinycss2",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tomli-w",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.15.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tox",
            "direct": false,
            "version": "4.56.4",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": false,
            "version": "4.68.4",
            "ecosystem": "pypi"
          },
          {
            "name": "trio",
            "direct": false,
            "version": "0.33.0",
            "ecosystem": "pypi"
          },
          {
            "name": "trio-websocket",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "pypi"
          },
          {
            "name": "twine",
            "direct": false,
            "version": "1.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typer",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typer-slim",
            "direct": false,
            "version": "0.24.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typesense",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2026.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzlocal",
            "direct": false,
            "version": "5.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "unicodecsv",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "unicodecsv",
            "direct": false,
            "version": "0.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "unicodeit",
            "direct": false,
            "version": "0.7.5",
            "ecosystem": "pypi"
          },
          {
            "name": "uritemplate",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "vine",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "21.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "voluptuous",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "walrus",
            "direct": false,
            "version": "0.9.8",
            "ecosystem": "pypi"
          },
          {
            "name": "wcmatch",
            "direct": false,
            "version": "10.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "pypi"
          },
          {
            "name": "webencodings",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "webob",
            "direct": false,
            "version": "1.8.10",
            "ecosystem": "pypi"
          },
          {
            "name": "websocket-client",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wheel",
            "direct": false,
            "version": "0.47.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wrapt",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "wsproto",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-drag-and-drop-v2",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-google-drive",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-poll",
            "direct": false,
            "version": "1.16.1",
            "ecosystem": "pypi"
          },
          {
            "name": "xblocks-contrib",
            "direct": false,
            "version": "0.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xmlsec",
            "direct": false,
            "version": "1.3.14",
            "ecosystem": "pypi"
          },
          {
            "name": "xss-utils",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": false,
            "version": "1.24.2",
            "ecosystem": "pypi"
          },
          {
            "name": "zc-lockfile",
            "direct": false,
            "version": "4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 1091,
        "direct_count": 1,
        "indirect_count": 1090
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 69,
        "merged_prs": 1966,
        "open_issues": 9,
        "closed_ratio": 0.609,
        "closed_issues": 14,
        "closed_unmerged_prs": 576
      },
      "bus_factor": 11,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "alex-sheehan-edx",
          "commits": 357,
          "avatar_url": "https://avatars.githubusercontent.com/u/67655836?v=4"
        },
        {
          "type": "User",
          "login": "hamzawaleed01",
          "commits": 163,
          "avatar_url": "https://avatars.githubusercontent.com/u/83753341?v=4"
        },
        {
          "type": "User",
          "login": "irfanuddinahmad",
          "commits": 134,
          "avatar_url": "https://avatars.githubusercontent.com/u/34648393?v=4"
        },
        {
          "type": "User",
          "login": "pwnage101",
          "commits": 130,
          "avatar_url": "https://avatars.githubusercontent.com/u/85151?v=4"
        },
        {
          "type": "User",
          "login": "saleem-latif",
          "commits": 127,
          "avatar_url": "https://avatars.githubusercontent.com/u/7114956?v=4"
        },
        {
          "type": "User",
          "login": "muhammad-ammar",
          "commits": 124,
          "avatar_url": "https://avatars.githubusercontent.com/u/6767924?v=4"
        },
        {
          "type": "User",
          "login": "brittneyexline",
          "commits": 123,
          "avatar_url": "https://avatars.githubusercontent.com/u/524809?v=4"
        },
        {
          "type": "User",
          "login": "johnnagro",
          "commits": 100,
          "avatar_url": "https://avatars.githubusercontent.com/u/31442?v=4"
        },
        {
          "type": "User",
          "login": "sameeramin",
          "commits": 82,
          "avatar_url": "https://avatars.githubusercontent.com/u/35958006?v=4"
        },
        {
          "type": "User",
          "login": "iloveagent57",
          "commits": 80,
          "avatar_url": "https://avatars.githubusercontent.com/u/2307986?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.12
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "add-depr-ticket-to-depr-board.yml",
        "add-remove-label-on-comment.yml",
        "ci.yml",
        "commitlint.yml",
        "lockfileversion-check.yml",
        "mysql8-migrations.yml",
        "postgresql-migrations.yml",
        "publish.yml",
        "self-assign-issue.yml",
        "upgrade-python-requirements.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "tox.ini"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 21 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "46 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e0637d0e92a7316ea013fdc2ba41fc69978ee8e1",
        "ran_at": "2026-07-23T12:43:52Z",
        "aggregate_score": 6.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T12:42:30Z",
      "oldest_open_prs": [
        {
          "number": 756,
          "created_at": "2020-04-29T22:57:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1049,
          "created_at": "2020-11-20T07:35:31Z",
          "last_comment_at": "2023-02-28T15:00:48Z",
          "last_comment_author": "mattdrayer"
        },
        {
          "number": 1498,
          "created_at": "2022-03-15T20:41:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1545,
          "created_at": "2022-04-28T19:17:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1677,
          "created_at": "2022-11-18T01:23:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1678,
          "created_at": "2022-11-21T09:01:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1684,
          "created_at": "2022-12-03T01:13:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1734,
          "created_at": "2023-04-04T15:51:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1760,
          "created_at": "2023-05-24T11:26:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1776,
          "created_at": "2023-06-22T07:21:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1790,
          "created_at": "2023-07-05T13:52:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1792,
          "created_at": "2023-07-06T17:57:53Z",
          "last_comment_at": "2023-07-06T18:08:33Z",
          "last_comment_author": "alex-sheehan-edx"
        },
        {
          "number": 1797,
          "created_at": "2023-07-11T15:23:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1894,
          "created_at": "2023-10-03T16:07:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1905,
          "created_at": "2023-10-11T09:03:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1908,
          "created_at": "2023-10-11T12:23:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1928,
          "created_at": "2023-10-27T23:41:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1991,
          "created_at": "2024-01-18T20:31:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2052,
          "created_at": "2024-03-25T11:24:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2085,
          "created_at": "2024-04-25T07:50:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-22T17:35:52Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 1151,
          "created_at": "2021-02-11T08:50:50Z",
          "last_comment_at": "2021-03-03T03:18:23Z",
          "last_comment_author": "Rah1x"
        },
        {
          "number": 1570,
          "created_at": "2022-05-25T14:23:48Z",
          "last_comment_at": "2025-12-15T15:33:04Z",
          "last_comment_author": "csmith-tcs"
        },
        {
          "number": 1745,
          "created_at": "2023-05-05T12:42:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1927,
          "created_at": "2023-10-26T02:09:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2002,
          "created_at": "2024-01-28T11:21:02Z",
          "last_comment_at": "2024-01-28T11:21:31Z",
          "last_comment_author": "OmarIthawi"
        },
        {
          "number": 2291,
          "created_at": "2024-11-19T18:24:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2302,
          "created_at": "2024-12-10T20:56:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2333,
          "created_at": "2025-02-04T19:13:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2494,
          "created_at": "2025-12-18T16:08:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/openedx/edx-enterprise",
    "host": "github.com",
    "name": "edx-enterprise",
    "owner": "openedx"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 81,
      "inputs": {
        "security": 72,
        "vitality": 96,
        "community": 75,
        "governance": 86,
        "engineering": 72
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 93,
            "inputs": {
              "commits_last_year": 187,
              "human_commit_share": 0.96,
              "days_since_last_push": 0,
              "active_weeks_last_year": 42
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "42/52 weeks with commits",
                "points": 29.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 42
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "187 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 187
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "8.7.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 75,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "forks": 71,
              "stars": 50,
              "watchers": 74,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "50 stars",
                "points": 27.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "71 forks",
                "points": 15.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 71
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "74 watchers",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 74
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": true,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (AGPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "AGPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 7.2,
                "status": "met",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "excellent",
        "name": "Sustainability & Governance",
        "value": 86,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "bus_factor": 11,
              "contributors_sampled": 99,
              "top_contributor_share": 0.12
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "11 contributor(s) cover half of all commits",
                "points": 54,
                "status": "met",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 12% of commits",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 12
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 21 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 1966,
              "open_issues": 9,
              "closed_issues": 14,
              "issue_closed_ratio": 0.609,
              "closed_unmerged_prs": 576
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "61% of issues closed",
                "points": 28.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 61
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1966/2542 decided PRs merged",
                "points": 29.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1966,
                      "decided": 2542
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "followers": 757,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "openedx",
              "public_repos": 185,
              "account_age_days": 2963
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "757 followers of openedx",
                "points": 20.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 757,
                      "login": "openedx"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "185 public repos, account ~8 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 185
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "edx-enterprise"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "1461 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1461
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 72,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "tox.ini",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tox.ini"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 72,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 65,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 21 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "46 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 1041 resolved dependencies against OSV; 50 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 1041
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 50
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 86,
              "affected_packages": 39,
              "assessed_packages": 1041,
              "unassessed_packages": 50,
              "affected_by_severity": "critical 3, high 20, moderate 16",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 1041,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 78,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.979,
              "agent_instruction_files": [
                ".github/copilot-instructions.md",
                ".ralph/AGENT.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7063
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "94 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 94,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile",
                "docs/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.11,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.04
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, docs/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, docs/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "tox.ini",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tox.ini"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "11 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 11,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "4 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 458598,
              "source_files_sampled": 1039,
              "oversized_source_files": 13
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "13/1039 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1039,
                      "oversized": 13
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'edx-enterprise' from its registry",
    "deps.dev does not index pypi:edx-enterprise@8.7.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T12:44:23.448396Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/openedx/edx-enterprise.svg",
  "full_name": "openedx/edx-enterprise",
  "license_state": "standard",
  "license_spdx": "AGPL-3.0"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsPyPI.