Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"ember",
"ilios",
"javascript",
"curriculum",
"education",
"open-source",
"medical-education",
"health-professions-education",
"curriculum-management",
"curriculum-mapping",
"tlo",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 343684,
"has_wiki": true,
"homepage": "https://ilios-frontend.netlify.app",
"languages": {
"CSS": 965,
"HTML": 8564,
"SCSS": 232388,
"JavaScript": 7422451
},
"pushed_at": "2026-07-23T23:38:23Z",
"created_at": "2014-09-11T17:31:12Z",
"owner_type": "Organization",
"updated_at": "2026-07-23T23:38:28Z",
"description": "Ilios Frontend",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "JavaScript",
"significant_languages": [
"JavaScript"
]
},
"owner": {
"blog": "www.iliosproject.org",
"name": "The Ilios Project: Curriculum Management for the Health Professions",
"type": "Organization",
"login": "ilios",
"company": null,
"location": "San Francisco, CA",
"followers": 11,
"avatar_url": "https://avatars.githubusercontent.com/u/2955721?v=4",
"created_at": "2012-12-03T21:47:47Z",
"is_verified": null,
"public_repos": 23,
"account_age_days": 4982
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v46.3.0",
"kind": "minor",
"published_at": "2026-06-18T18:03:03Z"
},
{
"tag": "v46.2.0",
"kind": "minor",
"published_at": "2026-05-15T23:52:16Z"
},
{
"tag": "v46.1.0",
"kind": "minor",
"published_at": "2026-04-17T22:53:20Z"
},
{
"tag": "v46.0.0",
"kind": "major",
"published_at": "2026-03-26T22:09:15Z"
},
{
"tag": "v45.7.0",
"kind": "minor",
"published_at": "2026-03-26T18:00:54Z"
},
{
"tag": "v45.6.0",
"kind": "minor",
"published_at": "2026-03-13T22:11:08Z"
},
{
"tag": "v45.5.0",
"kind": "minor",
"published_at": "2026-02-20T21:56:57Z"
},
{
"tag": "v45.4.0",
"kind": "minor",
"published_at": "2026-02-03T19:32:29Z"
},
{
"tag": "v45.3.0",
"kind": "minor",
"published_at": "2026-01-13T22:02:06Z"
},
{
"tag": "v45.2.1",
"kind": "patch",
"published_at": "2025-12-11T00:41:54Z"
},
{
"tag": "v45.2.0",
"kind": "minor",
"published_at": "2025-12-06T00:47:31Z"
},
{
"tag": "v45.1.2",
"kind": "patch",
"published_at": "2025-11-26T00:32:04Z"
},
{
"tag": "v45.1.1",
"kind": "patch",
"published_at": "2025-11-22T00:22:26Z"
},
{
"tag": "v45.1.0",
"kind": "minor",
"published_at": "2025-11-14T22:24:11Z"
},
{
"tag": "v45.0.0",
"kind": "major",
"published_at": "2025-11-07T23:50:59Z"
},
{
"tag": "v44.4.1",
"kind": "patch",
"published_at": "2025-10-31T22:18:37Z"
},
{
"tag": "v44.4.0",
"kind": "minor",
"published_at": "2025-10-24T20:16:58Z"
},
{
"tag": "v44.3.1",
"kind": "patch",
"published_at": "2025-10-13T23:15:47Z"
},
{
"tag": "v44.3.0",
"kind": "minor",
"published_at": "2025-09-19T17:20:20Z"
},
{
"tag": "v44.2.0",
"kind": "minor",
"published_at": "2025-08-15T23:28:32Z"
},
{
"tag": "v44.1.0",
"kind": "minor",
"published_at": "2025-08-08T19:57:48Z"
},
{
"tag": "v44.0.1",
"kind": "patch",
"published_at": "2025-07-31T19:18:04Z"
},
{
"tag": "v44.0.0",
"kind": "major",
"published_at": "2025-07-17T22:49:07Z"
},
{
"tag": "v43.12.0",
"kind": "minor",
"published_at": "2025-07-15T22:51:36Z"
},
{
"tag": "v43.11.0",
"kind": "minor",
"published_at": "2025-07-14T21:38:01Z"
},
{
"tag": "v43.10.0",
"kind": "minor",
"published_at": "2025-07-03T20:43:41Z"
},
{
"tag": "v43.9.3",
"kind": "patch",
"published_at": "2025-06-20T22:34:58Z"
},
{
"tag": "v43.9.2",
"kind": "patch",
"published_at": "2025-06-13T23:21:13Z"
},
{
"tag": "v43.9.1",
"kind": "patch",
"published_at": "2025-06-06T20:30:31Z"
},
{
"tag": "v43.9.0",
"kind": "minor",
"published_at": "2025-05-30T16:14:06Z"
},
{
"tag": "v43.8.0",
"kind": "minor",
"published_at": "2025-05-09T19:58:04Z"
},
{
"tag": "v43.7.0",
"kind": "minor",
"published_at": "2025-05-02T00:25:13Z"
},
{
"tag": "v43.6.0",
"kind": "minor",
"published_at": "2025-04-25T22:20:25Z"
},
{
"tag": "v43.5.0",
"kind": "minor",
"published_at": "2025-04-25T16:34:21Z"
},
{
"tag": "v43.4.1",
"kind": "patch",
"published_at": "2025-04-17T21:40:07Z"
},
{
"tag": "v43.4.0",
"kind": "minor",
"published_at": "2025-04-02T23:45:59Z"
},
{
"tag": "v43.3.0",
"kind": "minor",
"published_at": "2025-03-20T18:47:41Z"
},
{
"tag": "v43.2.0",
"kind": "minor",
"published_at": "2025-03-13T20:05:23Z"
},
{
"tag": "v43.1.0",
"kind": "minor",
"published_at": "2025-03-04T19:07:07Z"
},
{
"tag": "v43.0.0",
"kind": "major",
"published_at": "2025-02-06T22:26:08Z"
},
{
"tag": "v42.5.2",
"kind": "patch",
"published_at": "2025-01-30T01:32:48Z"
},
{
"tag": "v42.5.1",
"kind": "patch",
"published_at": "2025-01-23T21:26:01Z"
},
{
"tag": "v42.5.0",
"kind": "minor",
"published_at": "2024-12-30T17:09:55Z"
},
{
"tag": "v42.4.1",
"kind": "patch",
"published_at": "2024-11-22T23:51:34Z"
},
{
"tag": "v42.4.0",
"kind": "minor",
"published_at": "2024-10-25T22:34:19Z"
},
{
"tag": "v42.3.1",
"kind": "patch",
"published_at": "2024-10-18T22:25:02Z"
},
{
"tag": "v42.3.0",
"kind": "minor",
"published_at": "2024-10-10T20:03:35Z"
},
{
"tag": "v42.2.0",
"kind": "minor",
"published_at": "2024-09-26T19:53:00Z"
},
{
"tag": "v42.1.1",
"kind": "patch",
"published_at": "2024-09-20T22:39:57Z"
},
{
"tag": "v42.1.0",
"kind": "minor",
"published_at": "2024-09-13T23:00:56Z"
},
{
"tag": "v42.0.1",
"kind": "patch",
"published_at": "2024-09-10T20:45:44Z"
},
{
"tag": "v42.0.0",
"kind": "major",
"published_at": "2024-08-24T00:10:49Z"
},
{
"tag": "v41.10.1",
"kind": "patch",
"published_at": "2024-08-22T19:08:57Z"
},
{
"tag": "v41.10.0",
"kind": "minor",
"published_at": "2024-08-16T23:29:53Z"
},
{
"tag": "v41.9.0",
"kind": "minor",
"published_at": "2024-08-08T23:07:07Z"
},
{
"tag": "v41.8.0",
"kind": "minor",
"published_at": "2024-08-02T20:33:42Z"
},
{
"tag": "v41.7.0",
"kind": "minor",
"published_at": "2024-07-26T22:32:07Z"
},
{
"tag": "v41.6.0",
"kind": "minor",
"published_at": "2024-07-19T22:58:30Z"
},
{
"tag": "v41.5.0",
"kind": "minor",
"published_at": "2024-06-21T20:34:41Z"
},
{
"tag": "v41.4.0",
"kind": "minor",
"published_at": "2024-06-14T00:11:09Z"
},
{
"tag": "v41.3.0",
"kind": "minor",
"published_at": "2024-06-07T19:45:39Z"
},
{
"tag": "v41.2.0",
"kind": "minor",
"published_at": "2024-05-17T20:59:01Z"
},
{
"tag": "v41.1.0",
"kind": "minor",
"published_at": "2024-04-30T22:19:42Z"
},
{
"tag": "v41.0.0",
"kind": "major",
"published_at": "2024-04-26T18:28:28Z"
},
{
"tag": "v40.1.2",
"kind": "patch",
"published_at": "2024-04-12T23:10:31Z"
},
{
"tag": "v40.1.1",
"kind": "patch",
"published_at": "2024-04-05T19:47:53Z"
},
{
"tag": "v40.1.0",
"kind": "minor",
"published_at": "2024-04-01T23:49:20Z"
},
{
"tag": "v40.0.4",
"kind": "patch",
"published_at": "2024-03-22T22:47:00Z"
},
{
"tag": "v40.0.3",
"kind": "patch",
"published_at": "2024-03-20T15:03:52Z"
},
{
"tag": "v40.0.2",
"kind": "patch",
"published_at": "2024-03-13T19:37:05Z"
},
{
"tag": "v40.0.1",
"kind": "patch",
"published_at": "2024-03-09T04:45:15Z"
},
{
"tag": "v40.0.0",
"kind": "major",
"published_at": "2024-03-01T18:34:45Z"
},
{
"tag": "v39.0.0",
"kind": "major",
"published_at": "2024-02-02T23:59:57Z"
},
{
"tag": "v38.0.0",
"kind": "major",
"published_at": "2024-01-25T21:21:22Z"
},
{
"tag": "v37.3.0",
"kind": "minor",
"published_at": "2024-01-05T20:41:53Z"
},
{
"tag": "v37.2.1",
"kind": "patch",
"published_at": "2023-11-16T22:17:05Z"
},
{
"tag": "v37.2.0",
"kind": "minor",
"published_at": "2023-11-02T22:40:17Z"
},
{
"tag": "v37.1.0",
"kind": "minor",
"published_at": "2023-10-24T18:04:40Z"
},
{
"tag": "v37.0.0",
"kind": "major",
"published_at": "2023-09-22T21:45:06Z"
},
{
"tag": "v36.0.0",
"kind": "major",
"published_at": "2023-09-19T00:03:17Z"
},
{
"tag": "v35.7.1",
"kind": "patch",
"published_at": "2023-09-13T17:45:47Z"
},
{
"tag": "v35.7.0",
"kind": "minor",
"published_at": "2023-08-29T16:19:44Z"
},
{
"tag": "v35.6.0",
"kind": "minor",
"published_at": "2023-08-10T20:26:48Z"
},
{
"tag": "v35.5.1",
"kind": "patch",
"published_at": "2023-06-26T17:16:29Z"
},
{
"tag": "v35.5.0",
"kind": "minor",
"published_at": "2023-06-09T18:36:54Z"
},
{
"tag": "v35.4.0",
"kind": "minor",
"published_at": "2023-04-27T23:21:47Z"
},
{
"tag": "v35.3.0",
"kind": "minor",
"published_at": "2023-03-24T18:04:30Z"
},
{
"tag": "v35.2.0",
"kind": "minor",
"published_at": "2023-03-17T20:13:36Z"
},
{
"tag": "v35.1.0",
"kind": "minor",
"published_at": "2023-02-17T18:39:18Z"
},
{
"tag": "v35.0.0",
"kind": "major",
"published_at": "2023-01-19T23:18:52Z"
},
{
"tag": "v34.3.0",
"kind": "minor",
"published_at": "2022-11-29T18:31:35Z"
},
{
"tag": "v34.2.0",
"kind": "minor",
"published_at": "2022-11-04T19:47:12Z"
},
{
"tag": "v34.1.5",
"kind": "patch",
"published_at": "2022-10-14T22:27:02Z"
},
{
"tag": "v34.1.4",
"kind": "patch",
"published_at": "2022-10-14T22:14:08Z"
},
{
"tag": "v34.1.3",
"kind": "patch",
"published_at": "2022-10-11T05:11:07Z"
},
{
"tag": "v34.1.2",
"kind": "patch",
"published_at": "2022-10-10T23:12:14Z"
},
{
"tag": "v34.1.1",
"kind": "patch",
"published_at": "2022-10-10T21:33:14Z"
},
{
"tag": "v34.1.0",
"kind": "minor",
"published_at": "2022-10-07T22:43:30Z"
},
{
"tag": "v34.0.0",
"kind": "major",
"published_at": "2022-09-30T22:57:45Z"
},
{
"tag": "v33.2.1",
"kind": "patch",
"published_at": "2022-09-28T21:16:38Z"
}
],
"recent_commits": [
{
"oid": "1522d2f6bc5e04db2a54cd58b00c1f3aac6c9815",
"body": "Refactor Auth to Login Form",
"is_bot": false,
"headline": "Merge pull request #9433 from jrjohnson/login-on-login-route",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-23T23:38:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0368f652ea9d5483423b84a6b244a4bd4d44f4ff",
"body": "Removing this from the authenticator makes everything there simpler and\nnow the login is next to the form.",
"is_bot": false,
"headline": "Refactor Auth to Login Form",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-23T04:48:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "785a8cc444773963d111d2a9cfe4fcec7a33f231",
"body": "Consolidate Fetching",
"is_bot": false,
"headline": "Merge pull request #9431 from jrjohnson/consolidate-fetching",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-22T23:39:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5a399e4ed8997d62007c00d189c40a5fb7bc52d",
"body": "This fetch service can handle these types of requests back to the API\nHost, which cleans up the calling places a bit and ensures we're always\ndoing everything the same way.",
"is_bot": false,
"headline": "Pass Unauthenticated Fetch Requests Through Service",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T21:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89912b8730c4bd1ccbea28da48156243dc094899",
"body": null,
"is_bot": false,
"headline": "Use Fetch Service to Search",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T21:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d477df13341e4c644eddf199236377cdfee452a",
"body": null,
"is_bot": false,
"headline": "Use Fetch Service to Get Competency Map",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T21:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b2d534bbfa49bc30bb845ca3cc5fc43cbfb5352c",
"body": "Going to hang as many fetch operations off of this service as possible\n(hopefully all of them) so we need some more structure and to expose\nsome more methods.",
"is_bot": false,
"headline": "Augment the Fetch Service",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T21:09:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3a45fcf2a59b2fab70c98ddca7cbb1cc9645a54",
"body": "Remove Unused Services in Routes",
"is_bot": false,
"headline": "Merge pull request #9432 from jrjohnson/cleanup-route-services",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-22T21:07:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ade383a2a0a7ab5db7278067f39e974f75666a97",
"body": "I was particularly interested in places where we used session, but\ndidn't need it. But I found some other stuff too.",
"is_bot": false,
"headline": "Remove Unused Services in Routes",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T19:54:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a055ed93eb2dbe47517f130ed9cf87904cf1362b",
"body": "…ents-unique-title\n\nAdded unique `<title>` to Weekly Events",
"is_bot": false,
"headline": "Merge pull request #9430 from michaelchadwick/frontend-7271-weekly-ev…",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T05:31:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8e95b7551e5bfdcc490dd1392dc02d5292c6b4c",
"body": "adds LTI login route and adds layout restrictions based on application-scope relayed in auth token",
"is_bot": false,
"headline": "Merge pull request #9380 from stopfstedt/7150_frontend_lti_v2",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-22T04:11:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f252a4ac866f06b1f0aac7abc30bb2354278851",
"body": "…ring to common set as it was finally used in a common component",
"is_bot": false,
"headline": "added unique title to weekly events; moved 'dashboard' translation st…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-21T23:43:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5fbe32c97817edad0ead1887600c75dea65d708",
"body": "grants write perms on PRs to deploy PR commenting job.",
"is_bot": false,
"headline": "Merge pull request #9428 from stopfstedt/broccolihead",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-21T21:08:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54b156c4b1580b8ebfd36950b495d923df29bf70",
"body": null,
"is_bot": false,
"headline": "grants write perms on PRs to deploy PR commenting job.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-21T20:48:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c09050791e5d5de898c1455a17356ca313b4044",
"body": "Update pnpm to v11.15.1",
"is_bot": false,
"headline": "Merge pull request #9426 from ilios/update-pnpm-version",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-20T23:22:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1adfda8a5f0f875a3cd40b3060a6b584ac6fb6e",
"body": "…wt-logout\n\nLog user out if api request returns 401",
"is_bot": false,
"headline": "Merge pull request #9418 from michaelchadwick/frontend-7113-invalid-j…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-20T23:09:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba2fdda2580dba394782e932375a301bd16e0169",
"body": null,
"is_bot": false,
"headline": "Update pnpm to v11.15.1",
"author_name": "jrjohnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-20T23:00:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6423aa1a4b49f44f42efa8023af181526fafc649",
"body": "Fix pnpm Update Node Version",
"is_bot": false,
"headline": "Merge pull request #9425 from jrjohnson/pnpm-node",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-20T22:50:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e8869f545ea75cf5d26aeab32e0806e25658faf",
"body": "This fell way behind, not sure why, syncing with all of our other node\nversions.",
"is_bot": false,
"headline": "Fix pnpm Update Node Version",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-20T22:31:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31a37b11414be2fd2fdc670bdc315231024e6f85",
"body": "…ubflow-update",
"is_bot": false,
"headline": "Merge pull request #9417 from michaelchadwick/frontend-6850-session-p…",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-20T20:10:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d3a3629e0c422efaff4245bf29b9740b8a7a47b",
"body": null,
"is_bot": false,
"headline": "fixed order of flashMessage and transition on session publish",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-20T19:03:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b02bbdf49d751a8688518bea4550a4788013ae3",
"body": "… publicationcheck page-object",
"is_bot": false,
"headline": "fixed Acceptance | Session - Publication Check after updating session…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-20T18:28:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c78e617718ece80b623e501d3d3723fb8f94931b",
"body": "…; session publication now occurs at the publicationcheck route",
"is_bot": false,
"headline": "session pub menu now incorporates 'review x items' into 'publishAsIs'…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-20T18:28:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c08e4c2bd09916b6dafa19640edbe8e977716a4a",
"body": "…-query-return\n\nDon't show any message if no global search query",
"is_bot": false,
"headline": "Merge pull request #9422 from michaelchadwick/frontend-6601-no-search…",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-17T19:07:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9578f00fcb98485d6017d073bad23d340e670a59",
"body": null,
"is_bot": false,
"headline": "switched out takeScreenshot for takeComponentScreenshot",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-17T18:18:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4184f85c19e53d6fe495100380653cbd47bf88a2",
"body": "…ery and has screenshots",
"is_bot": false,
"headline": "global search integration test now properly checks for no query vs qu…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-17T16:32:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "133121ceb029cd53cc42a55bd35bcf4b750da87a",
"body": "… services",
"is_bot": false,
"headline": "normalize JSONApiAdapter to only invalidate session on 401 like other…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T23:44:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa9e4ebb3b04d344ac6117f27a8db5e4d96c33bc",
"body": null,
"is_bot": false,
"headline": "added 401 protection to both graphql and fetch services",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T23:43:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed83514fa2fb3a7781101166b75dfbdfe89c4986",
"body": "…n and now transitions to login)",
"is_bot": false,
"headline": "if 401, create flashMessage, send to logout (which invalidates sessio…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T23:06:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efe853772b8060ea8679bbdccfa212bc6a99f514",
"body": "…esponse to app adaptor to do the same thing",
"is_bot": false,
"headline": "instead of checking config in the main route, added a generic handleR…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T21:09:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c625de2778063cf69a8f3e66e9fe584e3738e326",
"body": "…order to safeguard against a 401 return; application route now also checks for valid config before loading schools",
"is_bot": false,
"headline": "added some try/catch logic to both iliosConfig and fetch services in …",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T21:09:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74be03abc7753a51919bc22791a32176a9af35e6",
"body": "…ting additions",
"is_bot": false,
"headline": "move search query check logic around entire <ul>; remove unneeded tes…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T20:05:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "285def584211c1aedaddcf81ef6e22bfaa51e8aa",
"body": "…mpliant",
"is_bot": false,
"headline": "added an empty <li> item when no query to test against and be a11y co…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T19:04:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5290e6ac539a59188913fee541feb68c644b384",
"body": null,
"is_bot": false,
"headline": "don't show any message if no global search query",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-16T19:04:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbf60aefb60a92f9bdd50711e6148a77e581f08e",
"body": "Use pnpm to Update Itself",
"is_bot": false,
"headline": "Merge pull request #9421 from jrjohnson/pnpm-update-better",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-16T17:47:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c6ee378248289ec608dede8628186a92b95b7eb",
"body": "…/setup-node-7\n\nBump actions/setup-node from 6 to 7",
"is_bot": false,
"headline": "Merge pull request #9423 from ilios/dependabot/github_actions/actions…",
"author_name": "Jon Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-16T17:25:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32c30a4f6781d3436261be05e5603ec26b74417f",
"body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n dependency-version: '7'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump actions/setup-node from 6 to 7",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-16T12:12:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d671df102230d267f1a3bf30ddb9da9f7f1cfad",
"body": "In pnpm v11 the self-update command was added and we can now use it\ninstead of fancy tricks to update our version. This will also update the\nlockfile appropriately.",
"is_bot": false,
"headline": "Use pnpm to Update Itself",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-14T21:19:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68f0d5e4206661edca772891c6ce97ed728bf878",
"body": "Update Transitive Dependencies",
"is_bot": false,
"headline": "Merge pull request #9420 from ilios/auto-update-dependencies",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-14T20:52:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98ea19993601c999f3f01c25ba2140db55bf3e87",
"body": null,
"is_bot": false,
"headline": "Update Transitive Dependencies",
"author_name": "jrjohnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-14T20:35:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7bc76383ba62ac18622e087a38f2f851e5f0b22",
"body": "Update PNPM to v11.13.0",
"is_bot": false,
"headline": "Merge pull request #9419 from ilios/update-pnpm-version",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-14T13:51:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a27272cadb77a6586f762e93a3c21597564aaec9",
"body": null,
"is_bot": false,
"headline": "Update PNPM to v11.13.0",
"author_name": "michaelchadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-14T13:33:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbbdce7150e4d1260740df3e54fdcb1472fb8f28",
"body": null,
"is_bot": false,
"headline": "rename method for the better.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-14T00:23:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3fd991010e14c6da68d345eb37fa9e32b85a9dd3",
"body": null,
"is_bot": false,
"headline": "rm obsolete class var.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-14T00:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4feadb8f23582f5b7e89962734903cd7de9a1ff8",
"body": null,
"is_bot": false,
"headline": "don't export unused method from module.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-14T00:20:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38e8478e35ce78a878142b1e9232941c1c6d5420",
"body": null,
"is_bot": false,
"headline": "wip: adds LTI login route to frontend.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T23:15:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe677c9c062f17f69d2a1057ff7eb4addd1a3267",
"body": "Use new devEngines Property",
"is_bot": false,
"headline": "Merge pull request #9415 from jrjohnson/dev-engines",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T22:07:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45b71adc9e9a89dc84820d1905dd437b6b89b3d3",
"body": "this has the added benefit of fixing as leaky abstraction in the\ncurrent-user service.",
"is_bot": false,
"headline": "refactor lti application scopes check out for later reuse.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27de357f92a0f7d716ed2ee78f2c1ccaab9e57b7",
"body": null,
"is_bot": false,
"headline": "refactor audience claims extractions out for reuse.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6611849683ff940e2b5e891f87d8a330f8452582",
"body": null,
"is_bot": false,
"headline": "improve code legibility by inversing negative conditionals.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae18b105f92c6a9c4807cfe25d4f51ffa7749c33",
"body": null,
"is_bot": false,
"headline": "be more explicit about application scopes.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c4140a038a906fed5e1fe2f653072d6405e14da",
"body": "…based on application scopes.\n\nLTI users only get to say the main content area.",
"is_bot": false,
"headline": "control visibility of header, primary nav, and footer of page layout …",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63de33c0ef533d9e9953848a384003384b02e5c0",
"body": "…ion.",
"is_bot": false,
"headline": "adds getter to retrieve application scopes from the current user sess…",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c358847c3f352738c73d9c3255709b431c02dfe",
"body": null,
"is_bot": false,
"headline": "make jwt decoding its own things so it can be reused.",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T21:45:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d3fcaa12e910f881239c1fa7331e36ca0d3f5dc",
"body": "Update Transitive Dependencies",
"is_bot": false,
"headline": "Merge pull request #9416 from ilios/auto-update-dependencies",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-13T16:45:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f211688de5c39f9439daf33070eb3dbc7171a82",
"body": null,
"is_bot": false,
"headline": "Update Transitive Dependencies",
"author_name": "stopfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-13T16:12:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da39e1bf74f6f9385091068ac65b6d6af202df5c",
"body": "Declare our pnpm version using devEngines instead of the now-deprecated\ncorepack packageManager property.",
"is_bot": false,
"headline": "Use new devEngines Property",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-13T04:13:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1799f0a4f21afff3058e0b53c806c78bd9653b36",
"body": "…ew-user-password-validation\n\nNew User form now uses same validation and password strength meter as Edit User",
"is_bot": false,
"headline": "Merge pull request #8565 from michaelchadwick/frontend-4303-improve-n…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-09T19:25:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a84c91887c56f9f121d614f6678981e5780cb784",
"body": "…rriculum-report-flow\n\nMake Curriculum Reports dominant report type and improve course selection/report run flow",
"is_bot": false,
"headline": "Merge pull request #9405 from michaelchadwick/frontend-7220-better-cu…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-07T19:35:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c26c43576edacb00e56b2debf51ac90e323e6f4",
"body": "…lector",
"is_bot": false,
"headline": "update curriculum run report test to check for visibility of reportSe…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-07T19:13:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4e54885ba832d4282f422d28e3641a4f1f3e1049",
"body": "…the summary/results",
"is_bot": false,
"headline": "only show the Curriculum Report Type selector if page is not showing …",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-07T18:58:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d92471469433a75cc05f9199619646b30238be54",
"body": "Make Loading Less Random in Tests",
"is_bot": false,
"headline": "Merge pull request #9413 from jrjohnson/nothing-truly-random",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-07T15:03:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e84b0d11ba7aa074757ef5b77054f8c36e43e16",
"body": "Update PNPM to v11.10.0",
"is_bot": false,
"headline": "Merge pull request #9414 from ilios/update-pnpm-version",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-07T15:03:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "538eccc5faf7d10c2e9c996724d266ff65d61a4f",
"body": null,
"is_bot": false,
"headline": "Update PNPM to v11.10.0",
"author_name": "michaelchadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-07T13:43:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de3e38c3ea2738a027cb69635b05e01caaca7250",
"body": "We'd already locked down the number of rows, but sometimes the random\ncharacters wrap onto a new line making these screenshots unstable.",
"is_bot": false,
"headline": "Make Loading Less Random in Tests",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-07T04:22:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32364ce2920ca15b31cea4cb6978133417c2d267",
"body": "Update Transitive Dependencies",
"is_bot": false,
"headline": "Merge pull request #9412 from ilios/auto-update-dependencies",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-07T04:04:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c79cf42b61994bd4630fa652d2b3420acc5dd69",
"body": null,
"is_bot": false,
"headline": "changed ridiculous negative logic into simpler negative logic",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:59:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e22647589b19e4550dabc1b837e4d07a37d95211",
"body": null,
"is_bot": false,
"headline": "added in needed graphql mocking for curriculum reports performance test",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:57:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7f173d6cefa6a72571aeb44b1573048f780a969",
"body": null,
"is_bot": false,
"headline": "fixed curriculum report header integration test",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:57:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fea97ab6b5656362dca1be10f06ef7a8153da7bf",
"body": "…extraneous labels to some tests to make updating easier",
"is_bot": false,
"headline": "re-oriented report tests for new curriculum-first directive; removed …",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:57:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e023e59a740702911caa8738b5e8999b74b8eef",
"body": "…se a curriculum report type and at least one course before report can be run",
"is_bot": false,
"headline": "curriculum report no longer has default type; force user to both choo…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:57:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f52166f5212bb868c65d14d4cafa306fd8723fdd",
"body": null,
"is_bot": false,
"headline": "/reports now default route to curriculum",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:57:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2214f10ae289173edaf79948e17b5b5170cb80b",
"body": "…less of viewport size",
"is_bot": false,
"headline": "remove right alignment for strength text so it lines up better regard…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:50:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93d223f60878518ac6c060b8b27370edbf86e889",
"body": "…stronger validation schema to NewUserComponent as well as the password strength meter",
"is_bot": false,
"headline": "due to no shortage of issues with new component, decided to just add …",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T23:33:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a67361588f7f157f93ddafc8eae738c9991e4b0",
"body": null,
"is_bot": false,
"headline": "Update Transitive Dependencies",
"author_name": "jrjohnson",
"author_login": "jrjohnson",
"committed_at": "2026-07-06T23:07:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35e4a87a162b87351e768a1983c6c66afffdb18c",
"body": "…ders\n\nRemove all Overview headers",
"is_bot": false,
"headline": "Merge pull request #9410 from michaelchadwick/remove-all-overview-hea…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-06T21:35:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e38291ac5529320ebe9bc5a88cf7e0b5956c20c",
"body": null,
"is_bot": false,
"headline": "NewUser component now using PasswordValidator component",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T18:41:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e25fc0e5195c819c16bf60d8decdb7c89cbb76e7",
"body": null,
"is_bot": false,
"headline": "added PasswordValidator integration test and page-object",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T18:41:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8757289ecb7bf25fb38e94cc320a6c593bc6c03",
"body": null,
"is_bot": false,
"headline": "added new PasswordValidator component",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T18:41:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d550b3b16104965ed82546acff780850b53a66be",
"body": null,
"is_bot": false,
"headline": "fixed some tests",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T18:18:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "251ec00414404324710e203da11dce074f3c2e75",
"body": null,
"is_bot": false,
"headline": "all Overview headers removed and spacing decreased if possible",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-06T16:50:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57aeced2f67fc1984a55af7ad71dcb32d7170cfc",
"body": "…rs-alignment\n\nBetter vertically align Calendar active filters",
"is_bot": false,
"headline": "Merge pull request #9404 from michaelchadwick/frontend-7223-cal-filte…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-02T23:28:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cdd0f030676da47bd11ba5ec0fb3fe4aa1b76a5b",
"body": "…bflow-update\n\nCourse Publication workflow improvement",
"is_bot": false,
"headline": "Merge pull request #9400 from michaelchadwick/frontend-6848-course-pu…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-07-02T19:45:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "037d90a97c8c4d22d12c16964483e0a96759d458",
"body": "Restrict Token Creation to 90 Days",
"is_bot": false,
"headline": "Merge pull request #9409 from jrjohnson/90d-ttl",
"author_name": "Stefan Topfstedt",
"author_login": "stopfstedt",
"committed_at": "2026-07-02T00:42:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9ffde0211d6635ea2b7f467a3ed8b175ce4d402",
"body": "… goes away on course pubcheck",
"is_bot": false,
"headline": "add acceptance check if collapseControl properly exists on course but…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-01T22:46:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9551657e93d342427fcf6013a44c6b2bae99b59",
"body": null,
"is_bot": false,
"headline": "fixed integration test",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-01T22:22:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d6b2095ea139575da96478f553d60cbd2d1e00c",
"body": "…ptance test",
"is_bot": false,
"headline": "added button to course publication check page-object and updated acce…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-07-01T18:43:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db291f2e27c5c18b1f00270b3b86c1863cc69164",
"body": "Update PNPM to v11.9.0",
"is_bot": false,
"headline": "Merge pull request #9408 from ilios/update-pnpm-version",
"author_name": "Zorgbort",
"author_login": "zorgbort",
"committed_at": "2026-07-01T18:04:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17163961648e8b1d6ccdc22afc6d0a12ba971c12",
"body": null,
"is_bot": false,
"headline": "add delay to publicationcheck scroll so it goes all the way to bottom",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T23:10:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99df6739730ef65807d94b385609d112dd3db8c0",
"body": "This matches our upcoming change to the maximum TTL on the API and\nensures users can't create tokens in the UI that are longer than allowed\nby the backend.",
"is_bot": false,
"headline": "Restrict Token Creation to 90 Days",
"author_name": "Jonathan Johnson",
"author_login": "jrjohnson",
"committed_at": "2026-06-30T22:54:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4d74510641c91b4b6f12379a0a079360431ecb8",
"body": "…st-icon-alignment\n\nNormalize lock/unlock icon width in Course/Program Year lists",
"is_bot": false,
"headline": "Merge pull request #9407 from michaelchadwick/frontend-7231-course-li…",
"author_name": "Dave Leonard",
"author_login": "dartajax",
"committed_at": "2026-06-30T21:44:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2612549285c8db776a40e7605358d5c9473e5e50",
"body": null,
"is_bot": false,
"headline": "dont show Publish As-is unless there is at least one cohort",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T21:15:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d90cdf90e4a41f833dc9641258101acd86006e6",
"body": "…seControl",
"is_bot": false,
"headline": "make sure going from courses->course re-initializes the detailsCollap…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T21:04:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1702b06f72821117e01009d2a36916ec120eb695",
"body": null,
"is_bot": false,
"headline": "fixed integration test",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T17:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5cee00d34e79108d763e2538064be4fb80246cd",
"body": "…lapse control so they matched better",
"is_bot": false,
"headline": "changed class name and translation keys for course details expand/col…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T17:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "620d3556d71dbe65ac25d8766e29a747db5c9402",
"body": "… course details are always shown and collapse control is hidden",
"is_bot": false,
"headline": "when going to publicationcheck route from publication-menu component,…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T17:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c46d9d1dc168c0f535f886afc2ce543c9a93b0c",
"body": "… course publication now occurs at the publicationcheck route",
"is_bot": false,
"headline": "course pub menu now incorporates 'review x items' into 'publishAsIs';…",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T17:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9968be55ab7a2cde5ee190ce58fc5cbdc660218f",
"body": null,
"is_bot": false,
"headline": "switched to better long-term @fixedWidth option",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T15:20:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d0be73d0b21852354bb1b91dafff228d5992a3d",
"body": null,
"is_bot": false,
"headline": "Update PNPM to v11.9.0",
"author_name": "michaelchadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-30T13:37:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b90cdd596007c8ade55259561d4ea8dfb69faac9",
"body": null,
"is_bot": false,
"headline": "kludge to fix 'Clear Filters' button lost styling",
"author_name": "Michael Chadwick",
"author_login": "michaelchadwick",
"committed_at": "2026-06-29T23:41:27Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 2464,
"latest_release_at": "2026-06-18T18:03:03Z",
"latest_release_tag": "v46.3.0",
"releases_from_tags": false,
"days_since_last_push": 2,
"active_weeks_last_year": 52,
"days_since_latest_release": 37,
"mean_days_between_releases": 21.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "ilios-common",
"exists": true,
"license": "MIT",
"keywords": [
"ember-addon"
],
"ecosystem": "npm",
"matches_repo": false,
"registry_url": "https://www.npmjs.com/package/ilios-common",
"is_deprecated": false,
"latest_version": "87.1.0",
"repository_url": "https://github.com/ilios/common",
"versions_count": 320,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 5,
"monthly_downloads": 1461,
"first_published_at": "2017-05-16T20:17:48.387000Z",
"latest_published_at": "2024-02-01T21:23:25.877000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 905
}
]
},
"popularity": {
"forks": 27,
"stars": 31,
"watchers": 9,
"fork_history": {
"days": [
{
"date": "2014-09-11",
"count": 1
},
{
"date": "2015-01-09",
"count": 1
},
{
"date": "2015-02-03",
"count": 1
},
{
"date": "2015-02-09",
"count": 1
},
{
"date": "2015-02-26",
"count": 1
},
{
"date": "2015-05-05",
"count": 1
},
{
"date": "2015-07-13",
"count": 1
},
{
"date": "2015-11-13",
"count": 1
},
{
"date": "2016-01-13",
"count": 1
},
{
"date": "2016-01-26",
"count": 1
},
{
"date": "2016-03-01",
"count": 1
},
{
"date": "2016-12-23",
"count": 1
},
{
"date": "2017-01-23",
"count": 1
},
{
"date": "2017-03-09",
"count": 1
},
{
"date": "2017-04-13",
"count": 1
},
{
"date": "2017-04-18",
"count": 1
},
{
"date": "2018-06-21",
"count": 3
},
{
"date": "2018-10-09",
"count": 1
},
{
"date": "2018-12-09",
"count": 1
},
{
"date": "2019-09-26",
"count": 1
},
{
"date": "2020-08-22",
"count": 1
},
{
"date": "2021-06-11",
"count": 1
},
{
"date": "2021-10-01",
"count": 1
},
{
"date": "2024-04-23",
"count": 1
},
{
"date": "2024-09-18",
"count": 1
}
],
"complete": true,
"collected": 27,
"total_forks": 27
},
"star_history": null,
"open_issues_and_prs": 16
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 56044,
"source_files_sampled": 1654,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [
{
"name": "babel-traverse",
"direct": false,
"version": "6.26.0",
"severity": "critical",
"ecosystem": "npm",
"cvss_score": 9.3,
"advisory_ids": [
"GHSA-67hx-6x53-jw92"
],
"fixed_version": "8.0.0-alpha.4",
"advisory_count": 1,
"oldest_advisory_days": 1013
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.16",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"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": 802
},
{
"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": 198
},
{
"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": 1305
},
{
"name": "serialize-javascript",
"direct": false,
"version": "4.0.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.1,
"advisory_ids": [
"GHSA-5c6j-r48x-rmvq"
],
"fixed_version": "7.0.3",
"advisory_count": 1,
"oldest_advisory_days": 148
},
{
"name": "tmp",
"direct": false,
"version": "0.0.28",
"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": 353
},
{
"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": 353
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.12.18",
"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": 501
},
{
"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": 802
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 8,
"critical": 1,
"moderate": 2
},
"advisory_count": 13,
"affected_count": 11,
"assessed_count": 1028,
"malicious_count": 0,
"assessed_package": "npm:ilios-common@87.1.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "ember-auto-import",
"manifest": "packages/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^2.12.0"
},
{
"name": "@babel/core",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^7.28.6"
},
{
"name": "@ember/string",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.1"
},
{
"name": "@ember/test-waiters",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.0"
},
{
"name": "@embroider/macros",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.19.6"
},
{
"name": "@embroider/util",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.13.0"
},
{
"name": "@fontsource-variable/nunito",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.2.7"
},
{
"name": "@fortawesome/ember-fontawesome",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^3.1.0"
},
{
"name": "@fortawesome/fontawesome-svg-core",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "6.7.2"
},
{
"name": "@fortawesome/free-brands-svg-icons",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "6.7.2"
},
{
"name": "@fortawesome/free-solid-svg-icons",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "6.7.2"
},
{
"name": "@glimmer/component",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "@glimmer/tracking",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.2"
},
{
"name": "@msw/data",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.6"
},
{
"name": "@popperjs/core",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 2.1.0"
},
{
"name": "@zumer/snapdom",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "2.0.2"
},
{
"name": "broccoli-file-creator",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.1.1"
},
{
"name": "broccoli-funnel",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.0"
},
{
"name": "broccoli-merge-trees",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.0"
},
{
"name": "color",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.0"
},
{
"name": "ember-async-data",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "ember-auto-import",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.12.0"
},
{
"name": "ember-cli-babel",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^8.2.0"
},
{
"name": "ember-cli-flash",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.0"
},
{
"name": "ember-cli-htmlbars",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^6.3.0"
},
{
"name": "ember-cli-page-object",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.3.0"
},
{
"name": "ember-click-outside",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^6.0.0"
},
{
"name": "ember-concurrency",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.0"
},
{
"name": "ember-file-upload",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^10.0.0"
},
{
"name": "ember-focus-trap",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "ember-in-element-polyfill",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.0.0"
},
{
"name": "ember-in-viewport",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.0"
},
{
"name": "ember-inflector",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.2"
},
{
"name": "ember-intl",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^8.2.1"
},
{
"name": "ember-keyboard",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^9.0.4"
},
{
"name": "ember-math-helpers",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.0"
},
{
"name": "ember-modifier",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.0"
},
{
"name": "ember-popper-modifier",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.1.0"
},
{
"name": "ember-primitives",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^0.59.1"
},
{
"name": "ember-set-helper",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^3.1.0"
},
{
"name": "ember-simple-auth",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^8.0.0"
},
{
"name": "ember-simple-charts",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^12.2.2"
},
{
"name": "ember-template-imports",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.0"
},
{
"name": "ember-test-selectors",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.0"
},
{
"name": "ember-truth-helpers",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.0"
},
{
"name": "flatpickr",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 4.0.0"
},
{
"name": "luxon",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 3.6.1"
},
{
"name": "mockdate",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 3.0.0"
},
{
"name": "msw",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.14.6"
},
{
"name": "normalize.css",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^8.0.1"
},
{
"name": "query-string",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 9.1.0"
},
{
"name": "quill",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.3"
},
{
"name": "sanitize-html",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^2.17.3"
},
{
"name": "striptags",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 3.2.0"
},
{
"name": "validator",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": ">= 13.12.0"
},
{
"name": "yup",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.0"
},
{
"name": "zod",
"manifest": "packages/ilios-common/package.json",
"ecosystem": "npm",
"version_constraint": "^4.1.13"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@babel/core",
"direct": true,
"version": "^7.28.6",
"ecosystem": "npm"
},
{
"name": "@ember/string",
"direct": true,
"version": "^4.0.1",
"ecosystem": "npm"
},
{
"name": "@ember/test-waiters",
"direct": true,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "@embroider/macros",
"direct": true,
"version": "^1.19.6",
"ecosystem": "npm"
},
{
"name": "@embroider/util",
"direct": true,
"version": "^1.13.0",
"ecosystem": "npm"
},
{
"name": "@fontsource-variable/nunito",
"direct": true,
"version": "^5.2.7",
"ecosystem": "npm"
},
{
"name": "@fortawesome/ember-fontawesome",
"direct": true,
"version": "^3.1.0",
"ecosystem": "npm"
},
{
"name": "@fortawesome/fontawesome-svg-core",
"direct": true,
"version": "6.7.2",
"ecosystem": "npm"
},
{
"name": "@fortawesome/free-brands-svg-icons",
"direct": true,
"version": "6.7.2",
"ecosystem": "npm"
},
{
"name": "@fortawesome/free-solid-svg-icons",
"direct": true,
"version": "6.7.2",
"ecosystem": "npm"
},
{
"name": "@glimmer/component",
"direct": true,
"version": "^2.0.0",
"ecosystem": "npm"
},
{
"name": "@glimmer/tracking",
"direct": true,
"version": "^1.1.2",
"ecosystem": "npm"
},
{
"name": "@msw/data",
"direct": true,
"version": "^1.1.2",
"ecosystem": "npm"
},
{
"name": "@msw/data",
"direct": true,
"version": "^1.1.6",
"ecosystem": "npm"
},
{
"name": "@popperjs/core",
"direct": true,
"version": ">= 2.1.0",
"ecosystem": "npm"
},
{
"name": "@zumer/snapdom",
"direct": true,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "broccoli-file-creator",
"direct": true,
"version": "^2.1.1",
"ecosystem": "npm"
},
{
"name": "broccoli-funnel",
"direct": true,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "broccoli-merge-trees",
"direct": true,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "broccoli-merge-trees",
"direct": true,
"version": "^4.2.0",
"ecosystem": "npm"
},
{
"name": "color",
"direct": true,
"version": "^5.0.0",
"ecosystem": "npm"
},
{
"name": "ember-async-data",
"direct": true,
"version": "^2.0.0",
"ecosystem": "npm"
},
{
"name": "ember-auto-import",
"direct": true,
"version": "^2.12.0",
"ecosystem": "npm"
},
{
"name": "ember-auto-import",
"direct": true,
"version": "^2.4.3",
"ecosystem": "npm"
},
{
"name": "ember-cli-babel",
"direct": true,
"version": "^8.2.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-flash",
"direct": true,
"version": "^7.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-htmlbars",
"direct": true,
"version": "^6.3.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-page-object",
"direct": true,
"version": "^2.3.0",
"ecosystem": "npm"
},
{
"name": "ember-click-outside",
"direct": true,
"version": "^6.0.0",
"ecosystem": "npm"
},
{
"name": "ember-concurrency",
"direct": true,
"version": "^5.1.0",
"ecosystem": "npm"
},
{
"name": "ember-file-upload",
"direct": true,
"version": "^10.0.0",
"ecosystem": "npm"
},
{
"name": "ember-focus-trap",
"direct": true,
"version": "^2.0.0",
"ecosystem": "npm"
},
{
"name": "ember-in-element-polyfill",
"direct": true,
"version": "^1.0.0",
"ecosystem": "npm"
},
{
"name": "ember-in-viewport",
"direct": true,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "ember-inflector",
"direct": true,
"version": "^5.0.2",
"ecosystem": "npm"
},
{
"name": "ember-intl",
"direct": true,
"version": "^8.2.1",
"ecosystem": "npm"
},
{
"name": "ember-keyboard",
"direct": true,
"version": "^9.0.4",
"ecosystem": "npm"
},
{
"name": "ember-math-helpers",
"direct": true,
"version": "^5.0.0",
"ecosystem": "npm"
},
{
"name": "ember-modifier",
"direct": true,
"version": "4.2.2",
"ecosystem": "npm"
},
{
"name": "ember-modifier",
"direct": true,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "ember-popper-modifier",
"direct": true,
"version": "^4.1.0",
"ecosystem": "npm"
},
{
"name": "ember-primitives",
"direct": true,
"version": "^0.59.1",
"ecosystem": "npm"
},
{
"name": "ember-set-helper",
"direct": true,
"version": "^3.1.0",
"ecosystem": "npm"
},
{
"name": "ember-simple-auth",
"direct": true,
"version": "^8.0.0",
"ecosystem": "npm"
},
{
"name": "ember-simple-charts",
"direct": true,
"version": "^12.2.2",
"ecosystem": "npm"
},
{
"name": "ember-template-imports",
"direct": true,
"version": "^4.4.0",
"ecosystem": "npm"
},
{
"name": "ember-test-selectors",
"direct": true,
"version": "^7.0.0",
"ecosystem": "npm"
},
{
"name": "ember-truth-helpers",
"direct": true,
"version": "^5.0.0",
"ecosystem": "npm"
},
{
"name": "flatpickr",
"direct": true,
"version": ">= 4.0.0",
"ecosystem": "npm"
},
{
"name": "luxon",
"direct": true,
"version": ">= 3.6.1",
"ecosystem": "npm"
},
{
"name": "luxon",
"direct": true,
"version": "^3.6.1",
"ecosystem": "npm"
},
{
"name": "mockdate",
"direct": true,
"version": ">= 3.0.0",
"ecosystem": "npm"
},
{
"name": "mockdate",
"direct": true,
"version": "^3.0.5",
"ecosystem": "npm"
},
{
"name": "msw",
"direct": true,
"version": "^2.14.6",
"ecosystem": "npm"
},
{
"name": "normalize.css",
"direct": true,
"version": "^8.0.1",
"ecosystem": "npm"
},
{
"name": "query-string",
"direct": true,
"version": ">= 9.1.0",
"ecosystem": "npm"
},
{
"name": "query-string",
"direct": true,
"version": "^9.1.0",
"ecosystem": "npm"
},
{
"name": "quill",
"direct": true,
"version": "^2.0.3",
"ecosystem": "npm"
},
{
"name": "sanitize-html",
"direct": true,
"version": "^2.17.3",
"ecosystem": "npm"
},
{
"name": "striptags",
"direct": true,
"version": ">= 3.2.0",
"ecosystem": "npm"
},
{
"name": "striptags",
"direct": true,
"version": "^3.2.0",
"ecosystem": "npm"
},
{
"name": "validator",
"direct": true,
"version": ">= 13.12.0",
"ecosystem": "npm"
},
{
"name": "validator",
"direct": true,
"version": "^13.12.0",
"ecosystem": "npm"
},
{
"name": "yup",
"direct": true,
"version": "^1.4.0",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": true,
"version": "^4.1.13",
"ecosystem": "npm"
},
{
"name": "@babel/eslint-parser",
"direct": false,
"version": "^7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-decorators",
"direct": false,
"version": "^7.28.6",
"ecosystem": "npm"
},
{
"name": "@ember-data/adapter",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/json-api",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/legacy-compat",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/model",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/request",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/request-utils",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/serializer",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-data/store",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@ember-intl/lint",
"direct": false,
"version": "^1.0.0",
"ecosystem": "npm"
},
{
"name": "@ember-intl/v1-compat",
"direct": false,
"version": "^1.0.5",
"ecosystem": "npm"
},
{
"name": "@ember/optional-features",
"direct": false,
"version": "^2.3.0",
"ecosystem": "npm"
},
{
"name": "@ember/test-helpers",
"direct": false,
"version": "^5.4.1",
"ecosystem": "npm"
},
{
"name": "@embroider/compat",
"direct": false,
"version": "^3.8.0",
"ecosystem": "npm"
},
{
"name": "@embroider/compat",
"direct": false,
"version": "~3.8.0",
"ecosystem": "npm"
},
{
"name": "@embroider/core",
"direct": false,
"version": "~3.5.0",
"ecosystem": "npm"
},
{
"name": "@embroider/test-setup",
"direct": false,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "@embroider/webpack",
"direct": false,
"version": "~4.1.0",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "^9.39.2",
"ecosystem": "npm"
},
{
"name": "@pnpm/exe",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/linux-arm64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/linux-x64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/linuxstatic-arm64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/linuxstatic-x64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/macos-arm64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/win-arm64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@pnpm/win-x64",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-darwin-arm64",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-darwin-x64",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-linux-arm64-gnu",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-linux-arm64-musl",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-linux-x64-gnu",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-linux-x64-musl",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-win32-arm64-msvc",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@reflink/reflink-win32-x64-msvc",
"direct": false,
"version": "0.1.19",
"ecosystem": "npm"
},
{
"name": "@sentry/ember",
"direct": false,
"version": "^10.56.0",
"ecosystem": "npm"
},
{
"name": "@warp-drive/build-config",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@warp-drive/core-types",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "@warp-drive/ember",
"direct": false,
"version": "~5.8.1",
"ecosystem": "npm"
},
{
"name": "axe-core",
"direct": false,
"version": "^4.12.0",
"ecosystem": "npm"
},
{
"name": "broccoli-asset-rev",
"direct": false,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "^4.26.3",
"ecosystem": "npm"
},
{
"name": "caniuse-db",
"direct": false,
"version": "^1.0.30001793",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "ember-a11y-refocus",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "ember-a11y-testing",
"direct": false,
"version": "^8.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli",
"direct": false,
"version": "~6.10.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-app-version",
"direct": false,
"version": "^7.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-bundle-analyzer",
"direct": false,
"version": "^1.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-dependency-checker",
"direct": false,
"version": "^3.3.3",
"ecosystem": "npm"
},
{
"name": "ember-cli-dependency-lint",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy",
"direct": false,
"version": "^2.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-archive",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-aws-pack",
"direct": false,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-brotli",
"direct": false,
"version": "^0.5.1",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-build",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-cloudfront",
"direct": false,
"version": "^6.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-display-revisions",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-gzip",
"direct": false,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-json-config",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-revision-data",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-deploy-s3-index",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "ember-cli-deprecation-workflow",
"direct": false,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-inject-live-reload",
"direct": false,
"version": "^2.1.0",
"ecosystem": "npm"
},
{
"name": "ember-cli-sass",
"direct": false,
"version": "11.0.1",
"ecosystem": "npm"
},
{
"name": "ember-cli-sass",
"direct": false,
"version": "^11.0.1",
"ecosystem": "npm"
},
{
"name": "ember-cli-terser",
"direct": false,
"version": "^4.0.2",
"ecosystem": "npm"
},
{
"name": "ember-exam",
"direct": false,
"version": "^10.0.0",
"ecosystem": "npm"
},
{
"name": "ember-load-initializers",
"direct": false,
"version": "^3.0.1",
"ecosystem": "npm"
},
{
"name": "ember-noscript",
"direct": false,
"version": "^4.1.0",
"ecosystem": "npm"
},
{
"name": "ember-page-title",
"direct": false,
"version": "^9.0.3",
"ecosystem": "npm"
},
{
"name": "ember-qunit",
"direct": false,
"version": "^9.0.4",
"ecosystem": "npm"
},
{
"name": "ember-resolver",
"direct": false,
"version": "^13.1.1",
"ecosystem": "npm"
},
{
"name": "ember-source",
"direct": false,
"version": "~6.10.0",
"ecosystem": "npm"
},
{
"name": "ember-template-lint",
"direct": false,
"version": "^6.1.0",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "^9.39.2",
"ecosystem": "npm"
},
{
"name": "eslint-config-prettier",
"direct": false,
"version": "^9.1.2",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-ember",
"direct": false,
"version": "^12.7.5",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-n",
"direct": false,
"version": "^17.23.2",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-qunit",
"direct": false,
"version": "^8.2.5",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-yml",
"direct": false,
"version": "^3.1.2",
"ecosystem": "npm"
},
{
"name": "file-saver",
"direct": false,
"version": "^2.0.5",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "^15.15.0",
"ecosystem": "npm"
},
{
"name": "loader.js",
"direct": false,
"version": "^4.7.0",
"ecosystem": "npm"
},
{
"name": "pad",
"direct": false,
"version": "^3.2.0",
"ecosystem": "npm"
},
{
"name": "papaparse",
"direct": false,
"version": "^5.5.2",
"ecosystem": "npm"
},
{
"name": "pnpm",
"direct": false,
"version": "11.15.1",
"ecosystem": "npm"
},
{
"name": "postcss-scss",
"direct": false,
"version": "^4.0.9",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "^3.8.1",
"ecosystem": "npm"
},
{
"name": "prettier-plugin-ember-template-tag",
"direct": false,
"version": "^2.1.2",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "^6.15.2",
"ecosystem": "npm"
},
{
"name": "qunit",
"direct": false,
"version": "^2.25.0",
"ecosystem": "npm"
},
{
"name": "qunit-dom",
"direct": false,
"version": "^3.5.0",
"ecosystem": "npm"
},
{
"name": "sass",
"direct": false,
"version": "^1.97.2",
"ecosystem": "npm"
},
{
"name": "stylelint",
"direct": false,
"version": "^16.26.1",
"ecosystem": "npm"
},
{
"name": "stylelint-config-recommended-scss",
"direct": false,
"version": "^17.0.1",
"ecosystem": "npm"
},
{
"name": "stylelint-config-standard",
"direct": false,
"version": "^36.0.1",
"ecosystem": "npm"
},
{
"name": "stylelint-scales",
"direct": false,
"version": "^5.0.0",
"ecosystem": "npm"
},
{
"name": "stylelint-scss",
"direct": false,
"version": "^7.2.0",
"ecosystem": "npm"
},
{
"name": "terser-webpack-plugin",
"direct": false,
"version": "^5.3.14",
"ecosystem": "npm"
},
{
"name": "testem-failure-only-reporter",
"direct": false,
"version": "^1.0.0",
"ecosystem": "npm"
},
{
"name": "tracked-built-ins",
"direct": false,
"version": "^3.1.1",
"ecosystem": "npm"
},
{
"name": "tracked-built-ins",
"direct": false,
"version": "^3.4.0",
"ecosystem": "npm"
},
{
"name": "webpack",
"direct": false,
"version": "^5.104.1",
"ecosystem": "npm"
},
{
"name": "webpack-bundle-analyzer",
"direct": false,
"version": "^5.1.1",
"ecosystem": "npm"
},
{
"name": "webpack-retry-chunk-load-plugin",
"direct": false,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "zxcvbn",
"direct": false,
"version": "^4.4.2",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 175,
"direct_count": 65,
"indirect_count": 110
}
},
"maintainership": {
"issues": {
"open_prs": 16,
"merged_prs": 6442,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 773
},
"bus_factor": 2,
"bot_contributors": 4,
"top_contributors": [
{
"type": "User",
"login": "stopfstedt",
"commits": 8652,
"avatar_url": "https://avatars.githubusercontent.com/u/1410427?v=4"
},
{
"type": "User",
"login": "jrjohnson",
"commits": 8316,
"avatar_url": "https://avatars.githubusercontent.com/u/349624?v=4"
},
{
"type": "User",
"login": "dartajax",
"commits": 2542,
"avatar_url": "https://avatars.githubusercontent.com/u/7493331?v=4"
},
{
"type": "User",
"login": "michaelchadwick",
"commits": 1771,
"avatar_url": "https://avatars.githubusercontent.com/u/2374391?v=4"
},
{
"type": "User",
"login": "zorgbort",
"commits": 1059,
"avatar_url": "https://avatars.githubusercontent.com/u/26294820?v=4"
},
{
"type": "User",
"login": "greenkeeperio-bot",
"commits": 638,
"avatar_url": "https://avatars.githubusercontent.com/u/14790466?v=4"
},
{
"type": "User",
"login": "thecoolestguy",
"commits": 486,
"avatar_url": "https://avatars.githubusercontent.com/u/248570?v=4"
},
{
"type": "User",
"login": "dependabot-support",
"commits": 321,
"avatar_url": "https://avatars.githubusercontent.com/u/112581971?v=4"
},
{
"type": "User",
"login": "djvoa12",
"commits": 247,
"avatar_url": "https://avatars.githubusercontent.com/u/7553764?v=4"
},
{
"type": "User",
"login": "saschaben",
"commits": 182,
"avatar_url": "https://avatars.githubusercontent.com/u/1753431?v=4"
}
],
"contributors_sampled": 21,
"top_contributor_share": 0.353
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"create_release.yaml",
"deploy-pr.yml",
"deploy-production.yml",
"deploy-staging.yml",
"required-labels.yml",
"tag_version.yaml",
"ui.yml",
"update-pnpm-version.yml",
"update-transitive-dependencies.yaml",
"visual_diff.yml",
"visual_diff_results.yml"
],
"has_docs_dir": false,
"linter_configs": [
"eslint.config.mjs"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"pnpm-lock.yaml"
],
"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": 4,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "11 out of 11 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 18 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 0,
"reason": "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": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"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": 0,
"reason": "security policy file not 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": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "1522d2f6bc5e04db2a54cd58b00c1f3aac6c9815",
"ran_at": "2026-07-26T09:12:30Z",
"aggregate_score": 6,
"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-25T05:36:33Z",
"oldest_open_prs": [
{
"number": 8462,
"created_at": "2025-03-21T18:05:34Z",
"last_comment_at": "2025-04-04T17:30:22Z",
"last_comment_author": "dartajax"
},
{
"number": 8505,
"created_at": "2025-04-10T04:28:10Z",
"last_comment_at": "2025-04-11T18:10:25Z",
"last_comment_author": "jrjohnson"
},
{
"number": 8763,
"created_at": "2025-08-11T22:06:01Z",
"last_comment_at": "2025-08-11T22:08:00Z",
"last_comment_author": "netlify"
},
{
"number": 9128,
"created_at": "2026-02-06T18:05:37Z",
"last_comment_at": "2026-02-17T20:36:21Z",
"last_comment_author": "dartajax"
},
{
"number": 9175,
"created_at": "2026-02-24T05:37:35Z",
"last_comment_at": "2026-04-28T17:41:03Z",
"last_comment_author": "stopfstedt"
},
{
"number": 9194,
"created_at": "2026-02-28T05:44:02Z",
"last_comment_at": "2026-03-05T16:10:52Z",
"last_comment_author": "dartajax"
},
{
"number": 9250,
"created_at": "2026-03-30T21:01:29Z",
"last_comment_at": "2026-03-30T21:03:00Z",
"last_comment_author": "netlify"
},
{
"number": 9297,
"created_at": "2026-04-21T20:57:36Z",
"last_comment_at": "2026-04-21T20:59:08Z",
"last_comment_author": "netlify"
},
{
"number": 9382,
"created_at": "2026-06-10T12:16:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9401,
"created_at": "2026-06-24T21:31:39Z",
"last_comment_at": "2026-06-25T18:03:22Z",
"last_comment_author": "michaelchadwick"
},
{
"number": 9424,
"created_at": "2026-07-20T15:56:27Z",
"last_comment_at": "2026-07-20T16:12:05Z",
"last_comment_author": "github-actions"
},
{
"number": 9427,
"created_at": "2026-07-20T23:48:22Z",
"last_comment_at": "2026-07-21T00:03:06Z",
"last_comment_author": "github-actions"
},
{
"number": 9429,
"created_at": "2026-07-21T23:04:09Z",
"last_comment_at": "2026-07-21T23:18:46Z",
"last_comment_author": "github-actions"
},
{
"number": 9434,
"created_at": "2026-07-23T23:14:42Z",
"last_comment_at": "2026-07-24T17:01:59Z",
"last_comment_author": "github-actions"
},
{
"number": 9435,
"created_at": "2026-07-24T00:22:43Z",
"last_comment_at": "2026-07-24T00:36:36Z",
"last_comment_author": "github-actions"
},
{
"number": 9436,
"created_at": "2026-07-24T16:57:37Z",
"last_comment_at": "2026-07-24T17:12:18Z",
"last_comment_author": "github-actions"
}
],
"last_merged_pr_at": "2026-07-23T23:38:24Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/ilios/frontend",
"host": "github.com",
"name": "frontend",
"owner": "ilios"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"security": 58,
"vitality": 100,
"community": 62,
"governance": 71,
"engineering": 84
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 100,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 2464,
"human_commit_share": 0.99,
"days_since_last_push": 2,
"active_weeks_last_year": 52
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "2464 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 2464
}
}
],
"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": "v46.3.0",
"releases_from_tags": false,
"days_since_latest_release": 37,
"mean_days_between_releases": 21.1
},
"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 37 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 37
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~21.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 21.1
}
}
],
"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": 2,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 2 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 2
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 62,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 41,
"inputs": {
"forks": 27,
"stars": 31,
"watchers": 9,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "31 stars",
"points": 24,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 31
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "27 forks",
"points": 11.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 27
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "9 watchers",
"points": 5,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 9
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 71,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 21,
"top_contributor_share": 0.353
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 35% of commits",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 35
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "21 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 21
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 18 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 92,
"inputs": {
"merged_prs": 6442,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 773
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "6442/7215 decided PRs merged",
"points": 34.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 6442,
"decided": 7215
}
}
],
"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": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"followers": 11,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "ilios",
"public_repos": 23,
"account_age_days": 4982
},
"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": "11 followers of ilios",
"points": 7.8,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 11,
"login": "ilios"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "23 public repos, account ~13 yr old",
"points": 22.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 23
}
},
{
"code": "account_age_years",
"params": {
"years": 13
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 84,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "12 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 12
}
}
],
"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": "eslint.config.mjs",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.mjs"
}
}
],
"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": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"ember",
"ilios",
"javascript",
"curriculum",
"education",
"open-source",
"medical-education",
"health-professions-education",
"curriculum-management",
"curriculum-mapping",
"tlo",
"hacktoberfest"
],
"has_wiki": true,
"homepage": "https://ilios-frontend.netlify.app",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://ilios-frontend.netlify.app",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "12 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 12
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 58,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 6
},
"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": "branch protection is not maximal on development and all release branches",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "11 out of 11 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 18 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "dangerous workflow patterns detected",
"points": 0,
"status": "missed",
"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 not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"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 not detected",
"points": 0,
"status": "missed",
"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": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "moderate",
"name": "Dependency advisories",
"note": "Matched the npm:ilios-common@87.1.0 runtime dependency closure — what installing the published package pulls in — 1028 packages. Reachability is not analyzed.",
"notes": [
{
"code": "advisories_scope_published",
"params": {
"package": "npm:ilios-common@87.1.0",
"assessed": 1028
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 52,
"inputs": {
"source": "osv",
"advisories": 13,
"affected_packages": 11,
"assessed_packages": 1028,
"unassessed_packages": 0,
"affected_by_severity": "critical 1, high 8, moderate 2",
"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": "11 affected: babel-traverse 6.26.0 (critical 9.3), brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), +8 more",
"points": 2.3,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 11,
"packages": "babel-traverse 6.26.0 (critical 9.3), brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5)"
}
},
{
"code": "advisories_affected_more",
"params": {
"count": 8
}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "9 advisory-carrying package(s) unaddressed past 90 days; oldest published 1305 days ago",
"points": 15.1,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 9,
"oldest": 1305
}
}
],
"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": 1028,
"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": 19
},
"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": "at_risk",
"name": "AI Readiness",
"value": 41,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 22,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.414,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"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": "41 of 99 human commits state their intent (structured subject or explanatory body)",
"points": 22.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 41,
"sampled": 99
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"pnpm-lock.yaml"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.01
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "eslint.config.mjs",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.mjs"
}
}
],
"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": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "1 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 1,
"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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "JavaScript",
"largest_source_bytes": 56044,
"source_files_sampled": 1654,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "JavaScript without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "JavaScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/1654 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1654,
"oversized": 0
}
}
],
"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",
"npm package 'ilios-common' points at a different repository (https://github.com/ilios/common); excluded from ecosystem scoring"
],
"report_type": "repository",
"generated_at": "2026-07-26T09:12:56.070942Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/ilios/frontend.svg",
"full_name": "ilios/frontend",
"license_state": "standard",
"license_spdx": "MIT"
}