JSON-Rohbericht maschinenlesbar
{
"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"
}