from the Gemfile snippet in the README and add explicit `ruby` filetype", "is_bot": false, "headline": "No $ in Gemfile snippet", "author_name": "Griffin Smith", "author_login": "glittershark", "committed_at": "2014-11-13T14:39:29Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d66f6e527d46fd64cb0e3571cd9e22259f5cdef5", "body": null, "is_bot": false, "headline": "Bumped version.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-03T15:57:23Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "5e7419717c93ac9734f3fa3249392dd6be2bcefd", "body": null, "is_bot": false, "headline": "Return 0.0.0 if not installed. #21", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-03T15:55:39Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8bb3170c3fad20ce4383dd176c415ea271b5340b", "body": null, "is_bot": false, "headline": "Bumped version number.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-02T23:07:16Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "df825824f18abe2489f83e24c07cc78de900c59a", "body": "…contentImages, and we want at least the status icon. Also added Guard.icns instead of PNG.", "is_bot": false, "headline": "Switched icon and contentImage because 10.9 does not seem to support …", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-02T23:06:14Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "3eec505f470648b2547b298094b0b94930b69d0f", "body": null, "is_bot": false, "headline": "Attempt to fix issue #19 by using the binary from $PATH.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-02T20:41:32Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "31114e3ce88da2b59e68258249b47671a2f9c0b6", "body": null, "is_bot": false, "headline": "Bumped version number.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-02T20:04:18Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "27e9e08e9b01f46ebbb0f89fc8ff372e0b8137a8", "body": "add icons to the list of files", "is_bot": false, "headline": "Merge pull request #20 from sveninfo/master", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-11-02T20:02:59Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "43f2ba2f19114b52350e7c8eb9429b7319d16ee2", "body": null, "is_bot": false, "headline": "add icons to the list of files", "author_name": "Sven Krüger", "author_login": null, "committed_at": "2014-10-31T05:57:53Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "eaea4326300756ef0f6eb283e5e4d1512c6d4ea5", "body": null, "is_bot": false, "headline": "Adds test for the case described in #5", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T15:31:28Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "0f30c3adee4da8172c53980f31005956a0783eab", "body": null, "is_bot": false, "headline": "Install instructions.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T10:00:27Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d1a81ffdd4f28616f03bdbbd88920b12a628fd81", "body": null, "is_bot": false, "headline": "Fixed some links in the README.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T09:48:37Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "956587938a8e2806cdaa4782ffd2c05b37892b5a", "body": null, "is_bot": false, "headline": "Updated the Readme.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T09:38:45Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "ac6a26e1efff04539f7b14d4f230c709d4da9f00", "body": null, "is_bot": false, "headline": "Deprecation error for OSX 10.8", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T08:18:25Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8a6a04c6730c6c3e264f9560ffa7914cdd7766cb", "body": null, "is_bot": false, "headline": "Strip Rakefile of custom tasks and rely on standard bundler/gem_tasks", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T08:10:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "f9d8c62be579d9d8d4caa4e8a33a5c6b67ea515e", "body": null, "is_bot": false, "headline": "Added a nice Guard icon.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T08:08:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c44d970ba698a9c66688645926abfd019d70158e", "body": null, "is_bot": false, "headline": "Major cleanup. No longer bundling TerminalNotifiers.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-23T07:57:09Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "2f0431545636eb53d10c56bd0bc23538841f378f", "body": null, "is_bot": false, "headline": "Bumped version number to 1.6.0", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T19:10:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "7c141d11b763ec8725534f9bfb95984b9afe2260", "body": null, "is_bot": false, "headline": "Fixes after merging #8 by @jamilbk which broke the bin paths.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T19:06:38Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "aaaad02c0e9290f7fdcf26ba0418e7c852b33c2f", "body": null, "is_bot": false, "headline": "Fixes proposed in #15 for checking the OSX version by @railsme", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T19:05:49Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "682eca8c95a3b9e14e0d26a8d5a83cd7f55dcfc8", "body": null, "is_bot": false, "headline": "Fixes and contributors preparing for release.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T19:05:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d6aece8b7541951be1e7343d87c4480af104b5ad", "body": null, "is_bot": false, "headline": "Merge branch 'ranmocy-master' into mavericks-fixes", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T18:15:56Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c336149981da63a7acbe2dd754bd716dbe963778", "body": null, "is_bot": false, "headline": "Fix notifier downloads.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T18:08:42Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "b1c0659bfd02eae225ce3b8d3c367c670f1b1193", "body": null, "is_bot": false, "headline": "Meta stuff updated.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T18:08:41Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "06707183c9ce95dfd8c312f80b9e5eec59e5f837", "body": "Use terminal-notifier if it's detected via `which`", "is_bot": false, "headline": "Merge pull request #8 from elbii/check_path", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2014-10-22T17:57:46Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "ece3d852389b7c9115ca17ce380f927394958ac2", "body": "Now works as long as the version number is still /\\d+\\.\\d+/.", "is_bot": false, "headline": "Fix the available? function", "author_name": "Ranmocy Sheng", "author_login": "ranmocy", "committed_at": "2014-09-14T02:11:12Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "44e802d93745f9bad7b8e2a19ac056e6b8fed327", "body": null, "is_bot": false, "headline": "strip newline, no need to follow symlink", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T20:21:31Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "eac3d16701d809d1e802f034ab10262420d8e144", "body": null, "is_bot": false, "headline": "remove default sender option, path check works better", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T20:10:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "1c8d67599224a4b6b847c022e93fffd615ef5bfe", "body": null, "is_bot": false, "headline": "remove forced upstream debris", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T20:06:06Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "48b6d4bc39d0fed7746bb93a4e270eb0dc19ecbb", "body": null, "is_bot": false, "headline": "follow symlinks", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T20:04:43Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "0042bf1ef801a6b5c39af23dc5a08af428878ca5", "body": null, "is_bot": false, "headline": "absolute path doesn't work, trying to add sender", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T19:41:28Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "0da066ccda93606079a66de6bf154079e8d1883b", "body": null, "is_bot": false, "headline": "use terminal-notifier binary if detected via which", "author_name": "Jamil Bou Kheir", "author_login": null, "committed_at": "2013-11-16T19:23:40Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d71141e59e0b86f17e1e5ae7b4b19d94a909104e", "body": null, "is_bot": false, "headline": "Bumped version number to 1.5.0", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T12:27:49Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "e6335558224b709893ca48fab48349a383ed8b10", "body": null, "is_bot": false, "headline": "Fixed link to the download section in the Readme", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T12:17:56Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c02b1a21d77bd690d3a5eb17ff24519b71aead4c", "body": null, "is_bot": false, "headline": "Updated the Readme's", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T12:16:30Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "e39c5ef84554e7879dfab25c5c70abeba1e21d98", "body": null, "is_bot": false, "headline": "The updated Gem supporting the different notifiers and their binaries.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T12:07:04Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "35f5d2bd319e048a285f49218c78675fc075296e", "body": null, "is_bot": false, "headline": "The four notifiers with their icons.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T12:06:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "25adc675eeee7ce31b26c03613cd0899972b75c3", "body": null, "is_bot": false, "headline": "Merge branch 'master' of git://github.com/alloy/terminal-notifier", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T08:11:42Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "8c8656eff0eaa9cdc814457d967692b9d415505d", "body": null, "is_bot": false, "headline": "Changed the Code Sign Identity to Springest Corporate B.V.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T08:10:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "17e435c979c3835edf38fdf2303bb3f46d5df30e", "body": null, "is_bot": false, "headline": "Changed icon.", "author_name": "Wouter de Vos", "author_login": null, "committed_at": "2012-08-14T07:48:05Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "60bd116d63e00ba5676549071768a45c7fdde822", "body": null, "is_bot": false, "headline": "Bump to 1.4.2", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T21:26:20Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d348df5f7cada6c744b18793de1622315c036277", "body": null, "is_bot": false, "headline": "Fix IO.popen call on Ruby 1.9.x. Fixes #15.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T21:20:44Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c4a4d0aa04d8adbd540c44a4cbdfa4c53e64b73e", "body": null, "is_bot": false, "headline": "Bump to 1.4.1", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T15:38:43Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "1a9ff60bac0d52cc852bd46d25bb9ce7ba45f5d4", "body": null, "is_bot": false, "headline": "Fix docs.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T15:36:56Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "d4808c858cb04d1f7a555ced706e306910914831", "body": null, "is_bot": false, "headline": "Add example of subtitle use to Ruby README.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T15:29:23Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "4665eb950346a6dbba7fe0a4b38d54daf93a5a1f", "body": null, "is_bot": false, "headline": "Bump to 1.4.0", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T15:25:18Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "ebdeb5a93ea61057c7e913662374d0b19e0a7c2a", "body": null, "is_bot": false, "headline": "Add support for `list` and removing all notifications to Ruby lib.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T15:24:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "2b3055f7f4f31d7722f6adf9bce22c4c62e6d0e3", "body": null, "is_bot": false, "headline": "Add support for the `list` command to the Ruby lib.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T12:59:58Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "4145da704a2603b397db6c02134c37fc8e523820", "body": null, "is_bot": false, "headline": "Don’t output anything if there are no notifications to list.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T12:07:42Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "517e37ad3dc10b96e969968bbcb4baf5dc7f5084", "body": null, "is_bot": false, "headline": "Improve help banner.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-10T11:47:57Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "576ac437a69c8439a7a11e2095174fd6d11cbd18", "body": null, "is_bot": false, "headline": "Corrections for the Readme", "author_name": "Bernhard Seeger", "author_login": "frostrubin", "committed_at": "2012-08-06T22:06:38Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "5722d16f618cbd60e90352d6c52033194b2538a2", "body": "Code is far easier to read now.", "is_bot": false, "headline": "Removed all the loops for spacing. Replaced them with tab character.", "author_name": "Bernhard Seeger", "author_login": "frostrubin", "committed_at": "2012-08-06T22:03:56Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "835888974eaf4de79ebaee0b172e47de7c55d1e3", "body": null, "is_bot": false, "headline": "updated README", "author_name": "Bernhard Seeger", "author_login": "frostrubin", "committed_at": "2012-08-01T20:16:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "b911d05330ae0b6a0efd8dea4b425149dd5d6edd", "body": "…te of a specific group.\n\nIf used with the special group \"ALL\", details for all currently active groups are displayed.\n\nAlso introduced the \"ALL\" parameter to the -remove option: now you can clear all messages in one sweep.", "is_bot": false, "headline": "Introduced a new -list option that can be used to get the delivery da…", "author_name": "Bernhard Seeger", "author_login": "frostrubin", "committed_at": "2012-08-01T20:07:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "bc33b6d97864abc60122b7b37e7f47e51a846f14", "body": "Add support for NSUserNotification.subtitle", "is_bot": false, "headline": "Merge pull request #9 from henrikbrixandersen/master", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-08-01T12:02:46Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "282f4ab4b456b72c273e5a654718cee12829df4b", "body": null, "is_bot": false, "headline": "Add support for NSUserNotification.subtitle #8", "author_name": "Henrik Brix Andersen", "author_login": "henrikbrixandersen", "committed_at": "2012-08-01T10:45:45Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "dc92907d428f46a0ba3f9d6e57ac49f061020521", "body": null, "is_bot": false, "headline": "Release 1.3.0", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-30T19:41:28Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "e67024bddff8579096323ca0ad5aa328e6a4ec74", "body": null, "is_bot": false, "headline": "[Ruby] Add tests.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-30T18:52:18Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c704d56812b7205550c0c68030f81a9549ddb1d2", "body": "…e tool.", "is_bot": false, "headline": "[Ruby] Add terminal-notifier bin, which basically just forwards to th…", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-30T18:36:25Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "0edbb67eaeb75b757bdee98f7b3d0d41cbf12c3c", "body": null, "is_bot": false, "headline": "[Ruby] Add `TerminalNotifier.remove(group)`.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-30T18:27:59Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "9039a4ad17f896b9903ea5f7dcb7d57e6898a890", "body": null, "is_bot": false, "headline": "Add `-remove groupID` option which removes a notfiication. Closes #6.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-30T18:11:15Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "7f04dc6118e88fb4d7fb0384a85f091daf89033c", "body": null, "is_bot": false, "headline": "Clean.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T14:33:34Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "30eb2fb33015e1b147a77787cab4fc0bd3c5c466", "body": null, "is_bot": false, "headline": "Bump to 1.2.0", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T14:27:39Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "30c3918ef40f177022ee3c762d0f77fc1fb9b93a", "body": null, "is_bot": false, "headline": "Add link to the tool's README", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T14:25:26Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "a3c273b6c7461662be8f9fa72448594254c7f02f", "body": null, "is_bot": false, "headline": "Add Ruby bindings", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T14:22:54Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "fd71a703ed726b8ca4910ffd12522908c58276d4", "body": null, "is_bot": false, "headline": "Update README.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T12:42:03Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "38e547b682a4b820e3ac0b5443100d3dd78058af", "body": null, "is_bot": false, "headline": "No longer have a default app to activate when clicking.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T12:07:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "9c51506c743ad571dd7ed8e394e3ed608711231c", "body": null, "is_bot": false, "headline": "Update help banner.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T12:05:02Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "1f3cf6943f44892d40ee346199a33ff92219e95e", "body": null, "is_bot": false, "headline": "Log output of shell command.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T11:46:09Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "577ae29051b8602bef6e2e36b6db74da19719de7", "body": null, "is_bot": false, "headline": "Open an arbitrary URL. E.g. a HTTP location, file, etc. Closes #3.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T01:39:52Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "38983b33d161589ca073a25638e1c87d065808f2", "body": null, "is_bot": false, "headline": "Construct a dictionary of options only once.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T01:34:12Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "868fd3150f9ee8769ec790e4c5e9fd927475cc43", "body": "…ommand when clicked.", "is_bot": false, "headline": "Specify arguments with options instead and add support to execute a c…", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-28T01:20:17Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "69086dfc5dd581bd6087a9e7bf99905dfc21ba42", "body": null, "is_bot": false, "headline": "Remove TODO", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-27T07:48:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "110b488a9ed8af5b76914d47a9b97ce3f08687b9", "body": null, "is_bot": false, "headline": "Bump version to 1.1.0", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-26T18:22:41Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c89ed891328a425b50d059071b7355d6abf2d9a6", "body": null, "is_bot": false, "headline": "Remove a notification after it has been activated. Closes #2.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-26T18:22:33Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "40f94dbe314b664559fd30cd94ef59108615e3f7", "body": "…pported.", "is_bot": false, "headline": "Fix docs regarding `title` and add note about custom icons being unsu…", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-26T08:17:53Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "707c7556bed1bca76419f92f16156f986ade8d7d", "body": null, "is_bot": false, "headline": "Bump to 1.0.0", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-25T19:41:40Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "69b1dd1d3c8d7c5e259a5e4d106fa190580a7b22", "body": null, "is_bot": false, "headline": "Update README", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-25T19:33:50Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "7e7510df96db3b12ffaeceb19354dcf062fcb8de", "body": null, "is_bot": false, "headline": "Rename sender ID to group ID and sender name to title.", "author_name": "Eloy Durán", "author_login": "alloy", "committed_at": "2012-07-25T18:37:16Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "f94bac7b2e496e3804899bfc5b93bb23f0a15847", "body": null, "is_bot": false, "headline": "Add TODO.", "author_name": "Eloy Duran", "author_login": "alloy", "committed_at": "2012-07-15T17:22:32Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "c3cba7976813555fc473fc8b6d3f1090855261ec", "body": null, "is_bot": false, "headline": "Fix warning.", "author_name": "Eloy Duran", "author_login": "alloy", "committed_at": "2012-07-15T16:48:34Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "a6a93b74c05c94592e0c4ea31d121ab59f373a16", "body": null, "is_bot": false, "headline": "Clean README.", "author_name": "Eloy Duran", "author_login": "alloy", "committed_at": "2012-07-15T15:53:41Z", "body_truncated": false, "is_coding_agent": false } ], "releases_count": 15, "commits_last_year": 0, "latest_release_at": "2016-02-20T13:58:30Z", "latest_release_tag": "v1.7.0", "releases_from_tags": true, "days_since_last_push": 1482, "active_weeks_last_year": 0, "days_since_latest_release": 3811, "mean_days_between_releases": 143.2 }, "community": { "has_readme": false, "has_license": false, "has_description": false, "has_contributing": false, "health_percentage": null, "has_issue_template": false, "has_code_of_conduct": false, "has_pull_request_template": false }, "ecosystem": { "packages": [ { "name": "terminal-notifier-guard", "exists": true, "license": "MIT", "keywords": [], "ecosystem": "rubygems", "matches_repo": false, "registry_url": "https://rubygems.org/gems/terminal-notifier-guard", "is_deprecated": false, "latest_version": "1.7.0", "repository_url": "https://github.com/Springest/terminal-notifier-guard", "versions_count": 8, "total_downloads": 12182814, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": "2012-08-14T11:52:47.505000Z", "latest_published_at": "2016-02-20T13:59:16.076000Z", "latest_version_yanked": null, "days_since_latest_publish": 3811 } ] }, "popularity": { "forks": 24, "stars": 164, "watchers": 17, "fork_history": { "days": [ { "date": "2013-10-29", "count": 1 }, { "date": "2013-11-05", "count": 1 }, { "date": "2013-12-11", "count": 1 }, { "date": "2014-04-09", "count": 1 }, { "date": "2014-06-23", "count": 1 }, { "date": "2014-10-21", "count": 1 }, { "date": "2014-10-28", "count": 1 }, { "date": "2014-11-13", "count": 1 }, { "date": "2014-12-31", "count": 1 }, { "date": "2015-01-12", "count": 1 }, { "date": "2015-03-16", "count": 1 }, { "date": "2015-05-16", "count": 1 }, { "date": "2015-08-25", "count": 1 }, { "date": "2015-11-23", "count": 1 }, { "date": "2016-01-24", "count": 1 }, { "date": "2016-01-31", "count": 1 }, { "date": "2016-05-31", "count": 1 }, { "date": "2016-06-03", "count": 1 }, { "date": "2018-03-22", "count": 1 }, { "date": "2021-09-12", "count": 1 }, { "date": "2022-06-28", "count": 1 }, { "date": "2022-07-06", "count": 1 }, { "date": "2023-07-14", "count": 1 }, { "date": "2024-07-18", "count": 1 } ], "complete": true, "collected": 24, "total_forks": 24 }, "star_history": null, "open_issues_and_prs": 7 }, "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": 5743, "source_files_sampled": 2, "oversized_source_files": 0, "agent_instruction_files": [], "agent_instruction_max_bytes": null }, "dependencies": { "manifests": [ "Gemfile" ], "advisories": { "error": "No resolved dependencies to assess", "scope": "repository_graph", "source": null, "findings": [], "collected": false, "malicious": [], "truncated": false, "by_severity": {}, "advisory_count": 0, "affected_count": 0, "assessed_count": 0, "malicious_count": 0, "assessed_package": null, "unassessed_count": 0, "direct_affected_count": 0 }, "ecosystems": [ "rubygems" ], "dependencies": [], "all_dependencies": { "error": null, "source": "github-sbom", "packages": [], "collected": true, "truncated": false, "total_count": 0, "direct_count": 0, "indirect_count": 0 } }, "maintainership": { "issues": { "open_prs": 3, "merged_prs": 7, "open_issues": 4, "closed_ratio": 0.826, "closed_issues": 19, "closed_unmerged_prs": 10 }, "bus_factor": 1, "bot_contributors": 0, "top_contributors": [ { "type": "User", "login": "alloy", "commits": 54, "avatar_url": "https://avatars.githubusercontent.com/u/2320?v=4" }, { "type": "User", "login": "frostrubin", "commits": 4, "avatar_url": "https://avatars.githubusercontent.com/u/451035?v=4" }, { "type": "User", "login": "bbonamin", "commits": 2, "avatar_url": "https://avatars.githubusercontent.com/u/713787?v=4" }, { "type": "User", "login": "croeck", "commits": 2, "avatar_url": "https://avatars.githubusercontent.com/u/2677623?v=4" }, { "type": "User", "login": "goronfreeman", "commits": 2, "avatar_url": "https://avatars.githubusercontent.com/u/5210483?v=4" }, { "type": "User", "login": "glittershark", "commits": 1, "avatar_url": "https://avatars.githubusercontent.com/u/1481027?v=4" }, { "type": "User", "login": "henrikbrixandersen", "commits": 1, "avatar_url": "https://avatars.githubusercontent.com/u/1076226?v=4" }, { "type": "User", "login": "mattbrictson", "commits": 1, "avatar_url": "https://avatars.githubusercontent.com/u/189693?v=4" }, { "type": "User", "login": "ranmocy", "commits": 1, "avatar_url": "https://avatars.githubusercontent.com/u/601767?v=4" } ], "contributors_sampled": 9, "top_contributor_share": 0.794 }, "quality_signals": { "has_ci": false, "has_tests": true, "ci_workflows": [], "has_docs_dir": false, "linter_configs": [], "has_editorconfig": false, "has_linter_config": false, "has_precommit_config": false }, "security_signals": { "lockfiles": [ "Gemfile.lock" ], "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": 0, "reason": "branch protection not enabled on development/release branches", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection" }, { "name": "CI-Tests", "score": 0, "reason": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0", "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": 2, "reason": "Found 6/30 approved changesets -- score normalized to 2", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review" }, { "name": "Contributors", "score": 10, "reason": "project has 6 contributing companies or organizations", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors" }, { "name": "Dangerous-Workflow", "score": null, "reason": "no workflows found", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow" }, { "name": "Dependency-Update-Tool", "score": 0, "reason": "no 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": 9, "reason": "license file detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license" }, { "name": "Maintained", "score": 0, "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0", "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": null, "reason": "no dependencies found", "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": null, "reason": "No tokens found", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions" }, { "name": "Vulnerabilities", "score": 9, "reason": "1 existing vulnerabilities detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities" } ], "commit": "9a95bd460fe8b12053cba3b729261e08fdec1866", "ran_at": "2026-07-28T14:04:09Z", "aggregate_score": 2.9, "scorecard_version": "v5.5.0" }, "has_codeql_workflow": false, "has_security_policy": false, "has_dependabot_config": false }, "contribution_flow": { "collected": true, "ci_last_run_at": null, "oldest_open_prs": [ { "number": 35, "created_at": "2016-05-05T06:52:20Z", "last_comment_at": null, "last_comment_author": null }, { "number": 41, "created_at": "2021-09-12T03:06:11Z", "last_comment_at": "2021-09-12T13:39:40Z", "last_comment_author": "RobinDaugherty" }, { "number": 43, "created_at": "2022-07-06T16:23:14Z", "last_comment_at": null, "last_comment_author": null } ], "last_merged_pr_at": "2016-02-20T13:59:01Z", "ci_last_conclusion": null, "oldest_open_issues": [ { "number": 30, "created_at": "2015-09-24T03:10:15Z", "last_comment_at": null, "last_comment_author": null }, { "number": 36, "created_at": "2016-12-21T00:47:57Z", "last_comment_at": null, "last_comment_author": null }, { "number": 39, "created_at": "2019-01-30T03:07:39Z", "last_comment_at": null, "last_comment_author": null }, { "number": 40, "created_at": "2021-03-09T15:09:59Z", "last_comment_at": "2022-10-27T05:36:29Z", "last_comment_author": "dsnovaes" } ] } }, "config": { "disabled_metrics": [], "disabled_categories": [], "disabled_components": {} }, "source": { "url": "https://github.com/Codaisseur/terminal-notifier-guard", "host": "github.com", "name": "terminal-notifier-guard", "owner": "Codaisseur" }, "metrics": { "overall": { "key": "overall", "band": "critical", "name": "Overall health", "note": "The weighted overall 30 is calibrated to 24 on the published index scale (record calibration 2026-08-02). Abandonment Policy applies a 60% multiplier to weighted overall health and gives it a ceiling of 34.", "notes": [ { "code": "overall_calibration", "params": { "raw": 30, "calibrated": 24, "calibration": "2026-08-02" } }, { "code": "abandonment_overall_adjustment", "params": { "cap": 34, "pct": 60 } } ], "value": 14, "inputs": { "security": 29, "vitality": 13, "community": 38, "governance": 51, "calibration": "2026-08-02", "engineering": 18, "ai_readiness": 31, "abandonment_cap": 34, "abandonment_state": "likely_abandoned", "weighted_overall_raw": 30, "abandonment_multiplier": 60, "weighted_overall_before_abandonment": 24, "overall_after_abandonment_multiplier": 14 }, "components": [] }, "categories": [ { "key": "vitality", "band": "critical", "name": "Vitality", "value": 13, "weight": 0.21, "metrics": [ { "key": "development_activity", "band": "critical", "name": "Development activity", "note": null, "notes": [], "value": 1, "inputs": { "commits_last_year": 0, "human_commit_share": 1, "days_since_last_push": 1482, "active_weeks_last_year": 0 }, "components": [ { "key": "push_recency", "name": "Push recency", "detail": "last push 1482 days ago", "points": 0, "status": "missed", "details": [ { "code": "push_recency", "params": { "days": 1482 } } ], "max_points": 36 }, { "key": "commit_cadence", "name": "Commit cadence", "detail": "0/52 weeks with commits", "points": 0, "status": "missed", "details": [ { "code": "commit_cadence_weeks", "params": { "weeks": 0 } } ], "max_points": 36 }, { "key": "commit_volume", "name": "Commit volume", "detail": "0 commits in the last year", "points": 0, "status": "missed", "details": [ { "code": "commits_last_year", "params": { "count": 0 } } ], "max_points": 18 }, { "key": "openssf_scorecard_maintained", "name": "OpenSSF Scorecard: Maintained", "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0", "points": 0, "status": "missed", "details": [], "max_points": 10 } ] }, { "key": "release_discipline", "band": "at_risk", "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": 32, "inputs": { "releases_count": 15, "latest_release_tag": "v1.7.0", "releases_from_tags": true, "days_since_latest_release": 3811, "mean_days_between_releases": 143.2 }, "components": [ { "key": "ships_releases", "name": "Ships releases", "detail": "15 version tags (no GitHub releases)", "points": 16.2, "status": "partial", "details": [ { "code": "version_tags_no_releases", "params": { "count": 15 } } ], "max_points": 27 }, { "key": "release_recency", "name": "Release recency", "detail": "latest release 3811 days ago", "points": 0, "status": "missed", "details": [ { "code": "release_recency", "params": { "days": 3811 } } ], "max_points": 36 }, { "key": "release_cadence", "name": "Release cadence", "detail": "a release every ~143.2 days", "points": 12.6, "status": "partial", "details": [ { "code": "release_cadence", "params": { "gap": 143.2 } } ], "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": "moderate", "name": "Abandonment", "note": null, "notes": [], "value": 60, "inputs": { "cap": 34, "state": "likely_abandoned", "guards": [], "signals": [ "unanswered_contributions", "release_stall", "scorecard_unmaintained" ], "red_flag": true, "multiplier_pct": 60, "declared_reason": null, "unverified_reason": null, "unanswered_open_prs": 3, "unanswered_open_issues": 4, "days_since_last_merged_pr": 3818, "days_since_last_human_commit": 3744, "days_since_last_human_commit_is_floor": false }, "components": [ { "key": "project_is_still_maintained", "name": "Project is still maintained", "detail": "no human commit for 3744 days; 3 unmet obligation(s): pull requests unanswered, releases stalled, Scorecard reports it unmaintained", "points": 60, "status": "partial", "details": [ { "code": "abandonment_flagged", "params": { "days": 3744, "count": 3, "signals": "pull requests unanswered, releases stalled, Scorecard reports it unmaintained" } } ], "max_points": 100 } ] } ], "description": "Is the project alive — is code being written and are releases shipping?" }, { "key": "community", "band": "weak", "name": "Community & Adoption", "value": 38, "weight": 0.17, "metrics": [ { "key": "popularity", "band": "moderate", "name": "Popularity & adoption", "note": null, "notes": [], "value": 54, "inputs": { "forks": 24, "stars": 164, "watchers": 17, "growth_state": "unverified", "growth_factor_pct": 100, "growth_unverified_reason": "no_history" }, "components": [ { "key": "stars", "name": "Stars", "detail": "164 stars", "points": 35.9, "status": "partial", "details": [ { "code": "stars", "params": { "count": 164 } } ], "max_points": 60 }, { "key": "forks", "name": "Forks", "detail": "24 forks", "points": 11.3, "status": "partial", "details": [ { "code": "forks", "params": { "count": 24 } } ], "max_points": 25 }, { "key": "watchers", "name": "Watchers", "detail": "17 watchers", "points": 6.7, "status": "partial", "details": [ { "code": "watchers", "params": { "count": 17 } } ], "max_points": 15 } ] }, { "key": "community_health", "band": "critical", "name": "Community health", "note": null, "notes": [], "value": 19, "inputs": { "has_readme": false, "has_license": false, "readme_badges": null, "has_contributing": false, "has_issue_template": false, "has_code_of_conduct": false, "readme_badge_services": [], "has_pull_request_template": false }, "components": [ { "key": "readme", "name": "README", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 22.5 }, { "key": "license", "name": "License", "detail": "license file present, not a recognized license", "points": 16.9, "status": "partial", "details": [ { "code": "license_custom", "params": {} } ], "max_points": 22.5 }, { "key": "contributing_guide", "name": "CONTRIBUTING guide", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 18 }, { "key": "code_of_conduct", "name": "Code of conduct", "detail": null, "points": 0, "status": "missed", "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": "moderate", "name": "Sustainability & Governance", "value": 51, "weight": 0.23, "metrics": [ { "key": "maintainer_resilience", "band": "weak", "name": "Maintainer resilience (bus factor)", "note": null, "notes": [], "value": 36, "inputs": { "bus_factor": 1, "contributors_sampled": 9, "top_contributor_share": 0.794 }, "components": [ { "key": "bus_factor", "name": "Bus factor", "detail": "1 contributor(s) cover half of all commits", "points": 9, "status": "partial", "details": [ { "code": "bus_factor", "params": { "count": 1 } } ], "max_points": 54 }, { "key": "commit_distribution", "name": "Commit distribution", "detail": "top contributor authored 79% of commits", "points": 4.6, "status": "partial", "details": [ { "code": "top_contributor_share", "params": { "share": 79 } } ], "max_points": 22.5 }, { "key": "contributor_breadth", "name": "Contributor breadth", "detail": "9 contributors", "points": 12.2, "status": "partial", "details": [ { "code": "contributors_sampled", "params": { "count": 9 } } ], "max_points": 13.5 }, { "key": "openssf_scorecard_contributors", "name": "OpenSSF Scorecard: Contributors", "detail": "project has 6 contributing companies or organizations", "points": 10, "status": "met", "details": [], "max_points": 10 } ] }, { "key": "responsiveness", "band": "moderate", "name": "Issue & PR responsiveness", "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "newcomer_pr_acceptance" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 58, "inputs": { "merged_prs": 7, "open_issues": 4, "closed_issues": 19, "prs_merged_7d": null, "prs_decided_7d": null, "prs_merged_30d": null, "prs_decided_30d": null, "issue_closed_ratio": 0.826, "closed_unmerged_prs": 10, "first_time_authors_30d": null, "first_time_prs_merged_30d": null, "first_time_prs_decided_30d": null }, "components": [ { "key": "issue_resolution", "name": "Issue resolution", "detail": "83% of issues closed", "points": 34.7, "status": "partial", "details": [ { "code": "issues_closed_share", "params": { "share": 83 } } ], "max_points": 42 }, { "key": "pr_acceptance", "name": "PR acceptance", "detail": "7/17 decided PRs merged", "points": 12.4, "status": "partial", "details": [ { "code": "decided_prs_merged", "params": { "merged": 7, "decided": 17 } } ], "max_points": 30 }, { "key": "newcomer_pr_acceptance", "name": "Newcomer PR acceptance", "detail": "no first-time contributor's PR decided in 30d", "points": 0, "status": "excluded", "details": [ { "code": "no_newcomer_prs", "params": { "days": 30 } } ], "max_points": 13 }, { "key": "openssf_scorecard_code_review", "name": "OpenSSF Scorecard: Code-Review", "detail": "Found 6/30 approved changesets -- score normalized to 2", "points": 3, "status": "partial", "details": [], "max_points": 15 } ] }, { "key": "stewardship", "band": "moderate", "name": "Ownership & stewardship", "note": null, "notes": [], "value": 62, "inputs": { "followers": 9, "owner_type": "Organization", "is_verified": null, "owner_login": "Codaisseur", "public_repos": 446, "account_age_days": 4100 }, "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": "9 followers of Codaisseur", "points": 7.2, "status": "partial", "details": [ { "code": "owner_followers", "params": { "count": 9, "login": "Codaisseur" } } ], "max_points": 25 }, { "key": "track_record", "name": "Track record", "detail": "446 public repos, account ~11 yr old", "points": 25, "status": "met", "details": [ { "code": "public_repos", "params": { "count": 446 } }, { "code": "account_age_years", "params": { "years": 11 } } ], "max_points": 25 } ] } ], "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?" }, { "key": "engineering", "band": "critical", "name": "Engineering Quality", "value": 18, "weight": 0.19, "metrics": [ { "key": "engineering_practices", "band": "at_risk", "name": "Engineering practices", "note": null, "notes": [], "value": 24, "inputs": { "has_ci": false, "has_tests": true, "has_editorconfig": false, "has_linter_config": false, "has_precommit_config": false }, "components": [ { "key": "ci_workflows", "name": "CI workflows", "detail": null, "points": 0, "status": "missed", "details": [], "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": null, "points": 0, "status": "missed", "details": [], "max_points": 16 }, { "key": "pre_commit_hooks", "name": "Pre-commit hooks", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 9.6 }, { "key": "editorconfig", "name": ".editorconfig", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 6.4 }, { "key": "openssf_scorecard_ci_tests", "name": "OpenSSF Scorecard: CI-Tests", "detail": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0", "points": 0, "status": "missed", "details": [], "max_points": 20 } ] }, { "key": "documentation", "band": "critical", "name": "Documentation", "note": null, "notes": [], "value": 10, "inputs": { "topics": [], "has_wiki": true, "homepage": null, "has_readme": false, "has_docs_dir": false, "has_description": false }, "components": [ { "key": "readme", "name": "README", "detail": null, "points": 0, "status": "missed", "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": null, "points": 0, "status": "missed", "details": [], "max_points": 15 }, { "key": "repository_description", "name": "Repository description", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 10 }, { "key": "topics", "name": "Topics", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 10 }, { "key": "wiki", "name": "Wiki", "detail": null, "points": 10, "status": "met", "details": [], "max_points": 10 } ] } ], "description": "Are baseline engineering and documentation practices in place?" }, { "key": "security", "band": "at_risk", "name": "Security", "value": 29, "weight": 0.16, "metrics": [ { "key": "security_posture", "band": "at_risk", "name": "Security posture", "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "dangerous_workflow", "packaging", "pinned_dependencies", "signed_releases", "token_permissions" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 29, "inputs": { "source": "openssf_scorecard", "checks_evaluated": 13, "scorecard_version": "v5.5.0", "checks_inconclusive": 5, "scorecard_aggregate": 2.9 }, "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 not enabled on development/release branches", "points": 0, "status": "missed", "details": [], "max_points": 7.5 }, { "key": "ci_tests", "name": "CI-Tests", "detail": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0", "points": 0, "status": "missed", "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": "Found 6/30 approved changesets -- score normalized to 2", "points": 1.5, "status": "partial", "details": [], "max_points": 7.5 }, { "key": "contributors", "name": "Contributors", "detail": "project has 6 contributing companies or organizations", "points": 2.5, "status": "met", "details": [], "max_points": 2.5 }, { "key": "dangerous_workflow", "name": "Dangerous-Workflow", "detail": "no workflows found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 10 }, { "key": "dependency_update_tool", "name": "Dependency-Update-Tool", "detail": "no update tool detected", "points": 0, "status": "missed", "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.2, "status": "partial", "details": [], "max_points": 2.5 }, { "key": "maintained", "name": "Maintained", "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0", "points": 0, "status": "missed", "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": "no dependencies found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "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": "No tokens found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 7.5 }, { "key": "vulnerabilities", "name": "Vulnerabilities", "detail": "1 existing vulnerabilities detected", "points": 6.8, "status": "partial", "details": [], "max_points": 7.5 } ] }, { "key": "high_risk_jurisdiction_exposure", "band": "exceptional", "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" ], "commit_weight_rule": { "min_commits": 50, "min_commit_share": 0.1 }, "review_only_matches": 0, "below_threshold_exposures": [], "assessed_self_published_locations": 15 }, "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": 31, "weight": 0.04, "metrics": [ { "key": "ai_agent_context", "band": "critical", "name": "Agent context & guidance", "note": null, "notes": [], "value": 12, "inputs": { "has_llms_txt": false, "legible_history_share": 0.22, "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": "22 of 100 human commits state their intent (structured subject or explanatory body)", "points": 11.7, "status": "partial", "details": [ { "code": "legible_history", "params": { "legible": 22, "sampled": 100 } } ], "max_points": 40 } ] }, { "key": "ai_verify_loop", "band": "weak", "name": "Verify loop (build / test / typecheck)", "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "openssf_scorecard_pinned_dependencies" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 36, "inputs": { "has_nix": false, "has_tests": true, "lockfiles": [ "Gemfile.lock" ], "has_dockerfile": false, "typed_language": false, "bootstrap_files": [], "has_devcontainer": false, "has_linter_config": false, "typecheck_configs": [], "agent_commit_share": 0, "toolchain_manifests": [], "dependency_bot_commit_share": 0 }, "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": null, "points": 0, "status": "missed", "details": [], "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": "no automated dependency updates observed", "points": 0, "status": "missed", "details": [ { "code": "no_dependency_automation", "params": {} } ], "max_points": 8 }, { "key": "openssf_scorecard_pinned_dependencies", "name": "OpenSSF Scorecard: Pinned-Dependencies", "detail": "no dependencies found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 10 } ] }, { "key": "ai_code_legibility", "band": "moderate", "name": "Code legibility for models", "note": null, "notes": [], "value": 55, "inputs": { "primary_language": "Ruby", "largest_source_bytes": 5743, "source_files_sampled": 2, "oversized_source_files": 0 }, "components": [ { "key": "type_checkable_code", "name": "Type-checkable code", "detail": "Ruby without a type-check config", "points": 0, "status": "missed", "details": [ { "code": "no_typecheck_config_language", "params": { "language": "Ruby" } } ], "max_points": 45 }, { "key": "manageable_file_sizes", "name": "Manageable file sizes", "detail": "0/2 source files over 60KB", "points": 55, "status": "met", "details": [ { "code": "oversized_source_files", "params": { "kb": 60, "sampled": 2, "oversized": 0 } } ], "max_points": 55 } ] } ], "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)." } ], "classification": { "top": [], "labels": [], "scores": {}, "primary": null, "evidence": [], "artifacts": [], "confidence": "none", "host_extension": false, "runs_as_process": false, "consumed_by_code": false }, "metrics_version": "2.5.0" }, "warnings": [ "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token", "Community profile unavailable", "rubygems package 'terminal-notifier-guard' points at a different repository (https://github.com/Springest/terminal-notifier-guard); excluded from ecosystem scoring" ], "report_type": "repository", "generated_at": "2026-07-28T14:04:21.716425Z", "schema_version": "0.27.0", "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/Codaisseur/terminal-notifier-guard.svg", "full_name": "Codaisseur/terminal-notifier-guard", "license_state": "custom", "license_spdx": null }, "repoMeta": null, "notFound": false, "related": [ { "id": 27774, "full_name": "fluent/fluentd", "url": "https://github.com/fluent/fluentd", "description": "Fluentd: Unified Logging Layer (project under CNCF)", "ecosystem": "rubygems", "ecosystems": [ "rubygems" ], "primary_language": "Ruby", "languages": [ "Ruby" ], "topics": [ "fluentd", "logging", "data-collector", "ruby", "cncf" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 13562, "forks": 1401, "watchers": 327, "monthly_downloads": null, "latest_score": 99, "latest_band": "exceptional", "latest_scanned_at": "2026-07-20T12:01:38.293155Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" }, { "id": 48026, "full_name": "bridgecrewio/checkov", "url": "https://github.com/bridgecrewio/checkov", "description": "Prevent cloud misconfigurations and find vulnerabilities during build-time in infrastructure as code, container images and open source packages with Checkov by Bridgecrew.", "ecosystem": "pypi", "ecosystems": [ "pypi", "rubygems" ], "primary_language": "Python", "languages": [ "Python", "HCL" ], "topics": [ "terraform", "static-analysis", "aws", "gcp", "azure", "aws-security", "cloudformation", "scans", "compliance", "kubernetes", "infrastructure-as-code", "devops", "hacktoberfest" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 8899, "forks": 1376, "watchers": 57, "monthly_downloads": null, "latest_score": 98, "latest_band": "exceptional", "latest_scanned_at": "2026-07-30T22:25:33.053611Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" }, { "id": 28919, "full_name": "decidim/decidim", "url": "https://github.com/decidim/decidim", "description": "The participatory democracy framework. A generator and multiple gems made with Ruby on Rails", "ecosystem": "rubygems", "ecosystems": [ "rubygems", "npm" ], "primary_language": "Ruby", "languages": [ "Ruby", "HTML" ], "topics": [ "decidim", "democracy", "community", "government", "civic-tech", "civictech", "ideation", "collective-intelligence", "participation", "citizen-participation", "govtech", "stakeholder-engagement", "digital-public-goods", "digital-public-infrastructure", "dpg" ], "license_spdx": "AGPL-3.0", "license_state": "standard", "stars": 1791, "forks": 474, "watchers": 54, "monthly_downloads": null, "latest_score": 98, "latest_band": "exceptional", "latest_scanned_at": "2026-07-20T16:15:15.791801Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" }, { "id": 11172, "full_name": "ruby/rubygems", "url": "https://github.com/ruby/rubygems", "description": "Library packaging and distribution for Ruby.", "ecosystem": "rubygems", "ecosystems": [ "rubygems" ], "primary_language": "Ruby", "languages": [ "Ruby" ], "topics": [ "rubygems", "ruby", "package-manager" ], "license_spdx": null, "license_state": "custom", "stars": 3938, "forks": 1926, "watchers": 164, "monthly_downloads": null, "latest_score": 98, "latest_band": "exceptional", "latest_scanned_at": "2026-07-22T01:21:20.523557Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "organic", "abandonment_state": "maintained", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" }, { "id": 30176, "full_name": "buildkite/agent", "url": "https://github.com/buildkite/agent", "description": "The Buildkite Agent is an open-source toolkit written in Go for securely running build jobs on any device or network", "ecosystem": "go", "ecosystems": [ "go", "rubygems" ], "primary_language": "Go", "languages": [ "Go" ], "topics": [ "go", "docker", "continuous-integration", "continuous-deployment", "continuous-delivery", "buildkite", "llamas", "cicd" ], "license_spdx": "MIT", "license_state": "standard", "stars": 1024, "forks": 366, "watchers": 37, "monthly_downloads": null, "latest_score": 98, "latest_band": "exceptional", "latest_scanned_at": "2026-07-20T23:00:35.832025Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" }, { "id": 3970, "full_name": "stripe/stripe-react-native", "url": "https://github.com/stripe/stripe-react-native", "description": "React Native library for Stripe.", "ecosystem": "npm", "ecosystems": [ "npm", "maven", "rubygems" ], "primary_language": "TypeScript", "languages": [ "TypeScript", "Kotlin", "Swift" ], "topics": [ "payments", "react-native", "stripe" ], "license_spdx": "MIT", "license_state": "standard", "stars": 1428, "forks": 320, "watchers": 43, "monthly_downloads": 1585385, "latest_score": 98, "latest_band": "exceptional", "latest_scanned_at": "2026-07-14T12:45:18.584448Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "icon_url": "", "icon_source_type": null, "badge_url": "" } ] } }
Mac OS X User Notifications for Guard
Codaisseur/terminal-notifier-guard 的健康指数为 100 分中的 14 分,处于「危急」区间。 其得分最高的类别是Sustainability & Governance(51/100),最低的是Vitality(13/100)。 最近一次更新在 1482 天前。 近期的大部分工作由 1 位贡献者完成。
指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均,再依据公开记录的分布进行校准,使各等级具有百分位含义;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 34(存在风险)的上限。
每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。
加权总体分 30 经校准后在公布的指数量表上为 24(记录校准 2026-08-02)。
| 注册表 | 软件包 | 版本 | 月下载量 | 版本数 | 最近发布 |
|---|---|---|---|---|---|
| RubyGems | terminal-notifier-guard指向其他仓库——不计分 | 1.7.0 | - | 8 | 3811 天前 |
项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?
仅有沉默从不构成判定——一个小而完备的库可能多年无需提交。此提示需同时满足两点:长期没有人类提交,且项目明显未履行应尽的义务。自动化提交不计作维护。
弃置状态如何评估| 0/36 | 推送新近度 — 最近一次推送于 1,482 天前 |
| 0/36 | 提交节奏 — 52 周中有 0 周有提交 |
| 0/18 | 提交量 — 最近一年 0 次提交 |
| 0/10 | OpenSSF Scorecard:Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0 |
| commits_last_year | 0 |
| human_commit_share | 1 |
| days_since_last_push | 1,482 |
| active_weeks_last_year | 0 |
| 16.2/27 | 有发布版本 — 15 个版本标签(无 GitHub 发布版本) |
| 0/36 | 发布时效 — 最近一次发布版本于 3,811 天前 |
| 12.6/27 | 发布节奏 — 约每 143.2 天发布一次 |
| 0/10 | OpenSSF Scorecard:Signed-Releases — 无数据 |
| releases_count | 15 |
| latest_release_tag | v1.7.0 |
| releases_from_tags | 是 |
| days_since_latest_release | 3,811 |
| mean_days_between_releases | 143.2 |
项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?
| 35.9/60 | 星标 — 164 个星标 |
| 11.3/25 | 复刻 — 24 个复刻 |
| 6.7/15 | 关注者 — 17 位关注者 |
| forks | 24 |
| stars | 164 |
| watchers | 17 |
| growth_state | unverified |
| growth_factor_pct | 100 |
| growth_unverified_reason | no_history |
| 0/22.5 | README |
| 16.9/22.5 | 许可证 — 存在许可证文件,但不是可识别的许可证 |
| 0/18 | CONTRIBUTING 指南 |
| 0/13.5 | 行为准则 |
| 0/7.2 | 议题模板 |
| 0/6.3 | PR 模板 |
| has_readme | 否 |
| has_license | 否 |
| readme_badges | — |
| has_contributing | 否 |
| has_issue_template | 否 |
| has_code_of_conduct | 否 |
| readme_badge_services | — |
| has_pull_request_template | 否 |
项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?
| 9/54 | 巴士系数 — 1 位贡献者贡献了半数提交 |
| 4.6/22.5 | 提交分布 — 头号贡献者编写了 79% 的提交 |
| 12.2/13.5 | 贡献者广度 — 9 位贡献者 |
| 10/10 | OpenSSF Scorecard:Contributors — project has 6 contributing companies or organizations |
| bus_factor | 1 |
| contributors_sampled | 9 |
| top_contributor_share | 0.794 |
| 34.7/42 | 议题解决 — 83% 的议题已关闭 |
| 12.4/30 | PR 接受 — 已裁定的 PR 中 7/17 已合并 |
| 0/13 | Newcomer PR acceptance — 30 天内没有首次贡献者的 PR 得到裁决 |
| 3/15 | OpenSSF Scorecard:Code-Review — Found 6/30 approved changesets -- score normalized to 2 |
| merged_prs | 7 |
| open_issues | 4 |
| closed_issues | 19 |
| prs_merged_7d | — |
| prs_decided_7d | — |
| prs_merged_30d | — |
| prs_decided_30d | — |
| issue_closed_ratio | 0.826 |
| closed_unmerged_prs | 10 |
| first_time_authors_30d | — |
| first_time_prs_merged_30d | — |
| first_time_prs_decided_30d | — |
| 30/30 | 所有权背书 — 组织持有 |
| 0/20 | 已验证域名 |
| 7.2/25 | 所有者影响力 — Codaisseur 有 9 位关注者 |
| 25/25 | 既往记录 — 446 个公开仓库,账户约 11 年 |
| followers | 9 |
| owner_type | Organization |
| is_verified | — |
| owner_login | Codaisseur |
| public_repos | 446 |
| account_age_days | 4,100 |
基础的工程与文档实践是否到位?
| 0/24 | CI 工作流 |
| 24/24 | 存在测试 |
| 0/16 | Linter 配置 |
| 0/9.6 | Pre-commit 钩子 |
| 0/6.4 | .editorconfig |
| 0/20 | OpenSSF Scorecard:CI-Tests — 0 out of 6 merged PRs checked by a CI test -- score normalized to 0 |
| has_ci | 否 |
| has_tests | 是 |
| has_editorconfig | 否 |
| has_linter_config | 否 |
| has_precommit_config | 否 |
| 0/30 | README |
| 0/25 | 文档目录 |
| 0/15 | 文档 / 主页站点 |
| 0/10 | 仓库描述 |
| 0/10 | 主题标签 |
| 10/10 | Wiki |
| topics | — |
| has_wiki | 是 |
| homepage | — |
| has_readme | 否 |
| has_docs_dir | 否 |
| has_description | 否 |
可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?
| 7.5/7.5 | Binary-Artifacts — no binaries found in the repo |
| 0/7.5 | Branch-Protection — branch protection not enabled on development/release branches |
| 0/2.5 | CI-Tests — 0 out of 6 merged PRs checked by a CI test -- score normalized to 0 |
| 0/2.5 | CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected |
| 1.5/7.5 | Code-Review — Found 6/30 approved changesets -- score normalized to 2 |
| 2.5/2.5 | Contributors — project has 6 contributing companies or organizations |
| 0/10 | Dangerous-Workflow — 无数据 |
| 0/7.5 | Dependency-Update-Tool — no update tool detected |
| 0/5 | Fuzzing — project is not fuzzed |
| 2.2/2.5 | 许可证 — license file detected |
| 0/7.5 | Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0 |
| 0/5 | Packaging — 无数据 |
| 0/5 | Pinned-Dependencies — 无数据 |
| 0/5 | SAST — SAST tool is not run on all commits -- score normalized to 0 |
| 0/5 | Security-Policy — security policy file not detected |
| 0/7.5 | Signed-Releases — 无数据 |
| 0/7.5 | Token-Permissions — 无数据 |
| 6.8/7.5 | Vulnerabilities — 1 existing vulnerabilities detected |
| source | openssf_scorecard |
| checks_evaluated | 13 |
| scorecard_version | v5.5.0 |
| checks_inconclusive | 5 |
| scorecard_aggregate | 2.9 |
该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?权重刻意设小(4%):代理工具链是一项真实的维护信号,但完全不具备的仓库仍可达到 100/100。
| 0/45 | 代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则 |
| 0/15 | 机器可读文档(llms.txt) |
| 11.7/40 | 可读的提交历史 — 100 次人类提交中有 22 次说明了意图(结构化标题或解释性正文) |
| has_llms_txt | 否 |
| legible_history_share | 0.22 |
| agent_instruction_files | — |
| agent_instruction_max_bytes | — |
| 0/18 | 一条命令的引导启动 |
| 22/22 | 自动化测试 |
| 0/11 | Lint / 格式化配置 |
| 0/11 | 静态类型检查 |
| 10/10 | 可复现环境 — lockfile |
| 0/10 | 已体现的代理实践 — 最近 100 次提交中没有代理编写的提交 |
| 0/8 | 自动化维护 — 未观察到自动依赖更新 |
| 0/10 | OpenSSF Scorecard:Pinned-Dependencies — 无数据 |
| has_nix | 否 |
| has_tests | 是 |
| lockfiles | Gemfile.lock |
| has_dockerfile | 否 |
| typed_language | 否 |
| bootstrap_files | — |
| has_devcontainer | 否 |
| has_linter_config | 否 |
| typecheck_configs | — |
| agent_commit_share | 0 |
| toolchain_manifests | — |
| dependency_bot_commit_share | 0 |
| 0/45 | 可类型检查的代码 — Ruby,未配置类型检查 |
| 55/55 | 可控的文件大小 — 采样的 2 个源文件中有 0 个超过 60KB |
| primary_language | Ruby |
| largest_source_bytes | 5,743 |
| source_files_sampled | 2 |
| oversized_source_files | 0 |
每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。
每个点涵盖 10 天。
来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。
| 10 | Binary-Artifacts | no binaries found in the repo |
| 0 | Branch-Protection | branch protection not enabled on development/release branches |
| 0 | CI-Tests | 0 out of 6 merged PRs checked by a CI test -- score normalized to 0 |
| 0 | CII-Best-Practices | no effort to earn an OpenSSF best practices badge detected |
| 2 | Code-Review | Found 6/30 approved changesets -- score normalized to 2 |
| 10 | Contributors | project has 6 contributing companies or organizations |
| 不适用 | Dangerous-Workflow | no workflows found |
| 0 | Dependency-Update-Tool | no update tool detected |
| 0 | Fuzzing | project is not fuzzed |
| 9 | License | license file detected |
| 0 | Maintained | 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0 |
| 不适用 | Packaging | packaging workflow not detected |
| 不适用 | Pinned-Dependencies | no dependencies found |
| 0 | SAST | SAST tool is not run on all commits -- score normalized to 0 |
| 0 | Security-Policy | security policy file not detected |
| 不适用 | Signed-Releases | no releases found |
| 不适用 | Token-Permissions | No tokens found |
| 9 | Vulnerabilities | 1 existing vulnerabilities detected |
来自 GitHub 依赖图的完整解析依赖集合:0 个直接依赖与 0 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。
| 注册表 | 软件包 | 版本 | 关系 |
|---|
本报告未能完成公告比对:No resolved dependencies to assess
{
"data": {
"repo": {
"topics": [],
"is_fork": true,
"size_kb": 3319,
"has_wiki": true,
"homepage": null,
"languages": {
"Ruby": 12625
},
"pushed_at": "2022-07-06T16:23:15Z",
"created_at": "2012-08-14T08:11:58Z",
"owner_type": "Organization",
"updated_at": "2025-01-31T04:21:10Z",
"description": "Mac OS X User Notifications for Guard",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Ruby",
"significant_languages": [
"Ruby"
]
},
"owner": {
"blog": "https://codaisseur.com",
"name": "Codaisseur",
"type": "Organization",
"login": "Codaisseur",
"company": null,
"location": "Amsterdam",
"followers": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/12283408?v=4",
"created_at": "2015-05-06T22:41:34Z",
"is_verified": null,
"public_repos": 446,
"account_age_days": 4100
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2016-02-20T13:58:30Z"
},
{
"tag": "v1.6.4",
"kind": "patch",
"published_at": "2014-11-03T15:57:23Z"
},
{
"tag": "v1.6.3",
"kind": "patch",
"published_at": "2014-11-02T23:07:16Z"
},
{
"tag": "v1.6.2",
"kind": "patch",
"published_at": "2014-11-02T20:04:18Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2014-10-23T09:38:45Z"
},
{
"tag": "1.6.0",
"kind": "minor",
"published_at": "2014-10-22T19:10:50Z"
},
{
"tag": "1.5.2",
"kind": "patch",
"published_at": "2012-08-14T13:49:23Z"
},
{
"tag": "1.5.0",
"kind": "minor",
"published_at": "2012-08-14T12:27:49Z"
},
{
"tag": "1.4.2",
"kind": "patch",
"published_at": "2012-08-10T21:26:20Z"
},
{
"tag": "1.4.1",
"kind": "patch",
"published_at": "2012-08-10T15:38:43Z"
},
{
"tag": "1.4.0",
"kind": "minor",
"published_at": "2012-08-10T15:29:23Z"
},
{
"tag": "1.3.0",
"kind": "minor",
"published_at": "2012-07-30T19:41:28Z"
},
{
"tag": "1.2.0",
"kind": "minor",
"published_at": "2012-07-28T14:33:34Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2012-07-26T18:22:41Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2012-07-25T19:41:40Z"
}
],
"recent_commits": [
{
"oid": "9a95bd460fe8b12053cba3b729261e08fdec1866",
"body": null,
"is_bot": false,
"headline": "Doc fixes after reports in #26",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-05-04T07:15:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "094b3186a02c497e14bc0245b5b2ed08cf81500d",
"body": null,
"is_bot": false,
"headline": "Bump version to 1.7.0",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:58:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dde01e8ef02884d48c2e50d7c0144f4a6cfa6bee",
"body": null,
"is_bot": false,
"headline": "Add contributors, thanks all!",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:54:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60ba97fe1695ffa88a74981465b1f6d4b71f4433",
"body": null,
"is_bot": false,
"headline": "Merge branch 'mattbrictson-bin-env'",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:51:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "95574e4130285776c2d251ae8fb1673b49421332",
"body": null,
"is_bot": false,
"headline": "Add docs on TERMINAL_NOTIFIER_BIN env variable",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:51:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "507cebf3564a391259f2a858dfb865b15f303403",
"body": "fixes #26\n\nThanks to @tamano for pointing out that it was missing",
"is_bot": false,
"headline": "Add docs on notification setting in Guardfile",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7645eddac67906f2aeb913e61716c06f5cd0b0bc",
"body": null,
"is_bot": false,
"headline": "Update iconset to be more cohesive",
"author_name": "Hunter Braun",
"author_login": "goronfreeman",
"committed_at": "2016-02-20T13:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c5e798404ab858e05acd0793fb6edff760d9fd3",
"body": null,
"is_bot": false,
"headline": "Specify license on gemspec",
"author_name": "Bruno Bonamin",
"author_login": "bbonamin",
"committed_at": "2016-02-20T13:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5084e8302dcdf2605f16e7558cba83248157df7",
"body": null,
"is_bot": false,
"headline": "Invoke 'terminal-notifier -help' for binary detection",
"author_name": "Cedric Röck",
"author_login": "croeck",
"committed_at": "2016-02-20T13:46:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d64651cc133e602d553fa46a42432a52f5efdba",
"body": "fixes #26\n\nThanks to @tamano for pointing out that it was missing",
"is_bot": false,
"headline": "Add docs on notification setting in Guardfile",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:42:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b86c4e000e5ea795b374185424673f69fbcc9180",
"body": "Update iconset to be more cohesive",
"is_bot": false,
"headline": "Merge pull request #32 from goronfreeman/master",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-20T13:36:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "87b6d7b4ab70d1437e59043bfbd4128bf95f3892",
"body": "Invoke 'terminal-notifier -help' for binary detection",
"is_bot": false,
"headline": "Merge pull request #24 from croeck/master",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-19T13:11:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "548ed2e4881b7a762da5ab862d8221278f3dab9c",
"body": "Specify license on gemspec",
"is_bot": false,
"headline": "Merge pull request #27 from bbonamin/patch-1",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2016-02-19T13:09:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e9f55c186a1e9bff79fb0d500cd426bb85b78ee",
"body": null,
"is_bot": false,
"headline": "Update iconset to be more cohesive",
"author_name": "Hunter Braun",
"author_login": "goronfreeman",
"committed_at": "2016-01-31T20:27:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8994bb793207b8bf832ece7c9c3f2f82a45ef8ca",
"body": "This solves a problem where the default binary found by `which` is the Ruby gem\nversion of `terminal-notifier`. This version is slow, especially in a Bundler\nenvironment.\n\nIn this scenario we would much rather use the Homebrew-installed version at\n`/usr/local/bin/terminal-notifier` which is noticeable faster.\n\nThis commit allows us to set an environment variable to explicitly specify the\nbinary to use, like this:\n\nexport TERMINAL_NOTIFIER_BIN=/usr/local/bin/terminal-notifier",
"is_bot": false,
"headline": "Allow bin_path to be specified via env variable",
"author_name": "Matt Brictson",
"author_login": "mattbrictson",
"committed_at": "2016-01-24T04:49:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3d6cb7ba82c0150036471f4bd218e1c4edba11e",
"body": null,
"is_bot": false,
"headline": "Specify license on gemspec",
"author_name": "Bruno Bonamin",
"author_login": "bbonamin",
"committed_at": "2015-03-16T13:39:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "59394cdf7dbd9ff82e6fade8f586591d4b9a1069",
"body": null,
"is_bot": false,
"headline": "Invoke 'terminal-notifier -help' for binary detection",
"author_name": "Cedric Röck",
"author_login": "croeck",
"committed_at": "2015-01-12T18:12:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0bbfbca14434967abeae419460c47b7f70b5517",
"body": "No $ in Gemfile snippet",
"is_bot": false,
"headline": "Merge pull request #23 from glittershark/master",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-13T14:58:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "686275f740dde56253d2ff42803253d765c7dee3",
"body": "Remove the shell-prompt `$` from the Gemfile snippet in the README and add explicit `ruby` filetype",
"is_bot": false,
"headline": "No $ in Gemfile snippet",
"author_name": "Griffin Smith",
"author_login": "glittershark",
"committed_at": "2014-11-13T14:39:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d66f6e527d46fd64cb0e3571cd9e22259f5cdef5",
"body": null,
"is_bot": false,
"headline": "Bumped version.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-03T15:57:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e7419717c93ac9734f3fa3249392dd6be2bcefd",
"body": null,
"is_bot": false,
"headline": "Return 0.0.0 if not installed. #21",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-03T15:55:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8bb3170c3fad20ce4383dd176c415ea271b5340b",
"body": null,
"is_bot": false,
"headline": "Bumped version number.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-02T23:07:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df825824f18abe2489f83e24c07cc78de900c59a",
"body": "…contentImages, and we want at least the status icon. Also added Guard.icns instead of PNG.",
"is_bot": false,
"headline": "Switched icon and contentImage because 10.9 does not seem to support …",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-02T23:06:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3eec505f470648b2547b298094b0b94930b69d0f",
"body": null,
"is_bot": false,
"headline": "Attempt to fix issue #19 by using the binary from $PATH.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-02T20:41:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31114e3ce88da2b59e68258249b47671a2f9c0b6",
"body": null,
"is_bot": false,
"headline": "Bumped version number.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-02T20:04:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27e9e08e9b01f46ebbb0f89fc8ff372e0b8137a8",
"body": "add icons to the list of files",
"is_bot": false,
"headline": "Merge pull request #20 from sveninfo/master",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-11-02T20:02:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43f2ba2f19114b52350e7c8eb9429b7319d16ee2",
"body": null,
"is_bot": false,
"headline": "add icons to the list of files",
"author_name": "Sven Krüger",
"author_login": null,
"committed_at": "2014-10-31T05:57:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eaea4326300756ef0f6eb283e5e4d1512c6d4ea5",
"body": null,
"is_bot": false,
"headline": "Adds test for the case described in #5",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T15:31:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f30c3adee4da8172c53980f31005956a0783eab",
"body": null,
"is_bot": false,
"headline": "Install instructions.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T10:00:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1a81ffdd4f28616f03bdbbd88920b12a628fd81",
"body": null,
"is_bot": false,
"headline": "Fixed some links in the README.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T09:48:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "956587938a8e2806cdaa4782ffd2c05b37892b5a",
"body": null,
"is_bot": false,
"headline": "Updated the Readme.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T09:38:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac6a26e1efff04539f7b14d4f230c709d4da9f00",
"body": null,
"is_bot": false,
"headline": "Deprecation error for OSX 10.8",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T08:18:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a6a04c6730c6c3e264f9560ffa7914cdd7766cb",
"body": null,
"is_bot": false,
"headline": "Strip Rakefile of custom tasks and rely on standard bundler/gem_tasks",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T08:10:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9d8c62be579d9d8d4caa4e8a33a5c6b67ea515e",
"body": null,
"is_bot": false,
"headline": "Added a nice Guard icon.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T08:08:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c44d970ba698a9c66688645926abfd019d70158e",
"body": null,
"is_bot": false,
"headline": "Major cleanup. No longer bundling TerminalNotifiers.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-23T07:57:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f0431545636eb53d10c56bd0bc23538841f378f",
"body": null,
"is_bot": false,
"headline": "Bumped version number to 1.6.0",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T19:10:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c141d11b763ec8725534f9bfb95984b9afe2260",
"body": null,
"is_bot": false,
"headline": "Fixes after merging #8 by @jamilbk which broke the bin paths.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T19:06:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aaaad02c0e9290f7fdcf26ba0418e7c852b33c2f",
"body": null,
"is_bot": false,
"headline": "Fixes proposed in #15 for checking the OSX version by @railsme",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T19:05:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "682eca8c95a3b9e14e0d26a8d5a83cd7f55dcfc8",
"body": null,
"is_bot": false,
"headline": "Fixes and contributors preparing for release.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T19:05:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6aece8b7541951be1e7343d87c4480af104b5ad",
"body": null,
"is_bot": false,
"headline": "Merge branch 'ranmocy-master' into mavericks-fixes",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T18:15:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c336149981da63a7acbe2dd754bd716dbe963778",
"body": null,
"is_bot": false,
"headline": "Fix notifier downloads.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T18:08:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1c0659bfd02eae225ce3b8d3c367c670f1b1193",
"body": null,
"is_bot": false,
"headline": "Meta stuff updated.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T18:08:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06707183c9ce95dfd8c312f80b9e5eec59e5f837",
"body": "Use terminal-notifier if it's detected via `which`",
"is_bot": false,
"headline": "Merge pull request #8 from elbii/check_path",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2014-10-22T17:57:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ece3d852389b7c9115ca17ce380f927394958ac2",
"body": "Now works as long as the version number is still /\\d+\\.\\d+/.",
"is_bot": false,
"headline": "Fix the available? function",
"author_name": "Ranmocy Sheng",
"author_login": "ranmocy",
"committed_at": "2014-09-14T02:11:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44e802d93745f9bad7b8e2a19ac056e6b8fed327",
"body": null,
"is_bot": false,
"headline": "strip newline, no need to follow symlink",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T20:21:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eac3d16701d809d1e802f034ab10262420d8e144",
"body": null,
"is_bot": false,
"headline": "remove default sender option, path check works better",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T20:10:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c8d67599224a4b6b847c022e93fffd615ef5bfe",
"body": null,
"is_bot": false,
"headline": "remove forced upstream debris",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T20:06:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48b6d4bc39d0fed7746bb93a4e270eb0dc19ecbb",
"body": null,
"is_bot": false,
"headline": "follow symlinks",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T20:04:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0042bf1ef801a6b5c39af23dc5a08af428878ca5",
"body": null,
"is_bot": false,
"headline": "absolute path doesn't work, trying to add sender",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T19:41:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0da066ccda93606079a66de6bf154079e8d1883b",
"body": null,
"is_bot": false,
"headline": "use terminal-notifier binary if detected via which",
"author_name": "Jamil Bou Kheir",
"author_login": null,
"committed_at": "2013-11-16T19:23:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d71141e59e0b86f17e1e5ae7b4b19d94a909104e",
"body": null,
"is_bot": false,
"headline": "Bumped version number to 1.5.0",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T12:27:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6335558224b709893ca48fab48349a383ed8b10",
"body": null,
"is_bot": false,
"headline": "Fixed link to the download section in the Readme",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T12:17:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c02b1a21d77bd690d3a5eb17ff24519b71aead4c",
"body": null,
"is_bot": false,
"headline": "Updated the Readme's",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T12:16:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e39c5ef84554e7879dfab25c5c70abeba1e21d98",
"body": null,
"is_bot": false,
"headline": "The updated Gem supporting the different notifiers and their binaries.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T12:07:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35f5d2bd319e048a285f49218c78675fc075296e",
"body": null,
"is_bot": false,
"headline": "The four notifiers with their icons.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T12:06:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25adc675eeee7ce31b26c03613cd0899972b75c3",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' of git://github.com/alloy/terminal-notifier",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T08:11:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c8656eff0eaa9cdc814457d967692b9d415505d",
"body": null,
"is_bot": false,
"headline": "Changed the Code Sign Identity to Springest Corporate B.V.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T08:10:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17e435c979c3835edf38fdf2303bb3f46d5df30e",
"body": null,
"is_bot": false,
"headline": "Changed icon.",
"author_name": "Wouter de Vos",
"author_login": null,
"committed_at": "2012-08-14T07:48:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60bd116d63e00ba5676549071768a45c7fdde822",
"body": null,
"is_bot": false,
"headline": "Bump to 1.4.2",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T21:26:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d348df5f7cada6c744b18793de1622315c036277",
"body": null,
"is_bot": false,
"headline": "Fix IO.popen call on Ruby 1.9.x. Fixes #15.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T21:20:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4a4d0aa04d8adbd540c44a4cbdfa4c53e64b73e",
"body": null,
"is_bot": false,
"headline": "Bump to 1.4.1",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T15:38:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a9ff60bac0d52cc852bd46d25bb9ce7ba45f5d4",
"body": null,
"is_bot": false,
"headline": "Fix docs.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T15:36:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4808c858cb04d1f7a555ced706e306910914831",
"body": null,
"is_bot": false,
"headline": "Add example of subtitle use to Ruby README.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T15:29:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4665eb950346a6dbba7fe0a4b38d54daf93a5a1f",
"body": null,
"is_bot": false,
"headline": "Bump to 1.4.0",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T15:25:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ebdeb5a93ea61057c7e913662374d0b19e0a7c2a",
"body": null,
"is_bot": false,
"headline": "Add support for `list` and removing all notifications to Ruby lib.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T15:24:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b3055f7f4f31d7722f6adf9bce22c4c62e6d0e3",
"body": null,
"is_bot": false,
"headline": "Add support for the `list` command to the Ruby lib.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T12:59:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4145da704a2603b397db6c02134c37fc8e523820",
"body": null,
"is_bot": false,
"headline": "Don’t output anything if there are no notifications to list.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T12:07:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "517e37ad3dc10b96e969968bbcb4baf5dc7f5084",
"body": null,
"is_bot": false,
"headline": "Improve help banner.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-10T11:47:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "576ac437a69c8439a7a11e2095174fd6d11cbd18",
"body": null,
"is_bot": false,
"headline": "Corrections for the Readme",
"author_name": "Bernhard Seeger",
"author_login": "frostrubin",
"committed_at": "2012-08-06T22:06:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5722d16f618cbd60e90352d6c52033194b2538a2",
"body": "Code is far easier to read now.",
"is_bot": false,
"headline": "Removed all the loops for spacing. Replaced them with tab character.",
"author_name": "Bernhard Seeger",
"author_login": "frostrubin",
"committed_at": "2012-08-06T22:03:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "835888974eaf4de79ebaee0b172e47de7c55d1e3",
"body": null,
"is_bot": false,
"headline": "updated README",
"author_name": "Bernhard Seeger",
"author_login": "frostrubin",
"committed_at": "2012-08-01T20:16:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b911d05330ae0b6a0efd8dea4b425149dd5d6edd",
"body": "…te of a specific group.\n\nIf used with the special group \"ALL\", details for all currently active groups are displayed.\n\nAlso introduced the \"ALL\" parameter to the -remove option: now you can clear all messages in one sweep.",
"is_bot": false,
"headline": "Introduced a new -list option that can be used to get the delivery da…",
"author_name": "Bernhard Seeger",
"author_login": "frostrubin",
"committed_at": "2012-08-01T20:07:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc33b6d97864abc60122b7b37e7f47e51a846f14",
"body": "Add support for NSUserNotification.subtitle",
"is_bot": false,
"headline": "Merge pull request #9 from henrikbrixandersen/master",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-08-01T12:02:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "282f4ab4b456b72c273e5a654718cee12829df4b",
"body": null,
"is_bot": false,
"headline": "Add support for NSUserNotification.subtitle #8",
"author_name": "Henrik Brix Andersen",
"author_login": "henrikbrixandersen",
"committed_at": "2012-08-01T10:45:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc92907d428f46a0ba3f9d6e57ac49f061020521",
"body": null,
"is_bot": false,
"headline": "Release 1.3.0",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-30T19:41:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e67024bddff8579096323ca0ad5aa328e6a4ec74",
"body": null,
"is_bot": false,
"headline": "[Ruby] Add tests.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-30T18:52:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c704d56812b7205550c0c68030f81a9549ddb1d2",
"body": "…e tool.",
"is_bot": false,
"headline": "[Ruby] Add terminal-notifier bin, which basically just forwards to th…",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-30T18:36:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0edbb67eaeb75b757bdee98f7b3d0d41cbf12c3c",
"body": null,
"is_bot": false,
"headline": "[Ruby] Add `TerminalNotifier.remove(group)`.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-30T18:27:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9039a4ad17f896b9903ea5f7dcb7d57e6898a890",
"body": null,
"is_bot": false,
"headline": "Add `-remove groupID` option which removes a notfiication. Closes #6.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-30T18:11:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f04dc6118e88fb4d7fb0384a85f091daf89033c",
"body": null,
"is_bot": false,
"headline": "Clean.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T14:33:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30eb2fb33015e1b147a77787cab4fc0bd3c5c466",
"body": null,
"is_bot": false,
"headline": "Bump to 1.2.0",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T14:27:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30c3918ef40f177022ee3c762d0f77fc1fb9b93a",
"body": null,
"is_bot": false,
"headline": "Add link to the tool's README",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T14:25:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3c273b6c7461662be8f9fa72448594254c7f02f",
"body": null,
"is_bot": false,
"headline": "Add Ruby bindings",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T14:22:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd71a703ed726b8ca4910ffd12522908c58276d4",
"body": null,
"is_bot": false,
"headline": "Update README.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T12:42:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38e547b682a4b820e3ac0b5443100d3dd78058af",
"body": null,
"is_bot": false,
"headline": "No longer have a default app to activate when clicking.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T12:07:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c51506c743ad571dd7ed8e394e3ed608711231c",
"body": null,
"is_bot": false,
"headline": "Update help banner.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T12:05:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f3cf6943f44892d40ee346199a33ff92219e95e",
"body": null,
"is_bot": false,
"headline": "Log output of shell command.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T11:46:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "577ae29051b8602bef6e2e36b6db74da19719de7",
"body": null,
"is_bot": false,
"headline": "Open an arbitrary URL. E.g. a HTTP location, file, etc. Closes #3.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T01:39:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38983b33d161589ca073a25638e1c87d065808f2",
"body": null,
"is_bot": false,
"headline": "Construct a dictionary of options only once.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T01:34:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "868fd3150f9ee8769ec790e4c5e9fd927475cc43",
"body": "…ommand when clicked.",
"is_bot": false,
"headline": "Specify arguments with options instead and add support to execute a c…",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-28T01:20:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69086dfc5dd581bd6087a9e7bf99905dfc21ba42",
"body": null,
"is_bot": false,
"headline": "Remove TODO",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-27T07:48:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "110b488a9ed8af5b76914d47a9b97ce3f08687b9",
"body": null,
"is_bot": false,
"headline": "Bump version to 1.1.0",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-26T18:22:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c89ed891328a425b50d059071b7355d6abf2d9a6",
"body": null,
"is_bot": false,
"headline": "Remove a notification after it has been activated. Closes #2.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-26T18:22:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "40f94dbe314b664559fd30cd94ef59108615e3f7",
"body": "…pported.",
"is_bot": false,
"headline": "Fix docs regarding `title` and add note about custom icons being unsu…",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-26T08:17:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "707c7556bed1bca76419f92f16156f986ade8d7d",
"body": null,
"is_bot": false,
"headline": "Bump to 1.0.0",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-25T19:41:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69b1dd1d3c8d7c5e259a5e4d106fa190580a7b22",
"body": null,
"is_bot": false,
"headline": "Update README",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-25T19:33:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e7510df96db3b12ffaeceb19354dcf062fcb8de",
"body": null,
"is_bot": false,
"headline": "Rename sender ID to group ID and sender name to title.",
"author_name": "Eloy Durán",
"author_login": "alloy",
"committed_at": "2012-07-25T18:37:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f94bac7b2e496e3804899bfc5b93bb23f0a15847",
"body": null,
"is_bot": false,
"headline": "Add TODO.",
"author_name": "Eloy Duran",
"author_login": "alloy",
"committed_at": "2012-07-15T17:22:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3cba7976813555fc473fc8b6d3f1090855261ec",
"body": null,
"is_bot": false,
"headline": "Fix warning.",
"author_name": "Eloy Duran",
"author_login": "alloy",
"committed_at": "2012-07-15T16:48:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6a93b74c05c94592e0c4ea31d121ab59f373a16",
"body": null,
"is_bot": false,
"headline": "Clean README.",
"author_name": "Eloy Duran",
"author_login": "alloy",
"committed_at": "2012-07-15T15:53:41Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 15,
"commits_last_year": 0,
"latest_release_at": "2016-02-20T13:58:30Z",
"latest_release_tag": "v1.7.0",
"releases_from_tags": true,
"days_since_last_push": 1482,
"active_weeks_last_year": 0,
"days_since_latest_release": 3811,
"mean_days_between_releases": 143.2
},
"community": {
"has_readme": false,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": null,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "terminal-notifier-guard",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "rubygems",
"matches_repo": false,
"registry_url": "https://rubygems.org/gems/terminal-notifier-guard",
"is_deprecated": false,
"latest_version": "1.7.0",
"repository_url": "https://github.com/Springest/terminal-notifier-guard",
"versions_count": 8,
"total_downloads": 12182814,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2012-08-14T11:52:47.505000Z",
"latest_published_at": "2016-02-20T13:59:16.076000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3811
}
]
},
"popularity": {
"forks": 24,
"stars": 164,
"watchers": 17,
"fork_history": {
"days": [
{
"date": "2013-10-29",
"count": 1
},
{
"date": "2013-11-05",
"count": 1
},
{
"date": "2013-12-11",
"count": 1
},
{
"date": "2014-04-09",
"count": 1
},
{
"date": "2014-06-23",
"count": 1
},
{
"date": "2014-10-21",
"count": 1
},
{
"date": "2014-10-28",
"count": 1
},
{
"date": "2014-11-13",
"count": 1
},
{
"date": "2014-12-31",
"count": 1
},
{
"date": "2015-01-12",
"count": 1
},
{
"date": "2015-03-16",
"count": 1
},
{
"date": "2015-05-16",
"count": 1
},
{
"date": "2015-08-25",
"count": 1
},
{
"date": "2015-11-23",
"count": 1
},
{
"date": "2016-01-24",
"count": 1
},
{
"date": "2016-01-31",
"count": 1
},
{
"date": "2016-05-31",
"count": 1
},
{
"date": "2016-06-03",
"count": 1
},
{
"date": "2018-03-22",
"count": 1
},
{
"date": "2021-09-12",
"count": 1
},
{
"date": "2022-06-28",
"count": 1
},
{
"date": "2022-07-06",
"count": 1
},
{
"date": "2023-07-14",
"count": 1
},
{
"date": "2024-07-18",
"count": 1
}
],
"complete": true,
"collected": 24,
"total_forks": 24
},
"star_history": null,
"open_issues_and_prs": 7
},
"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": 5743,
"source_files_sampled": 2,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Gemfile"
],
"advisories": {
"error": "No resolved dependencies to assess",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"rubygems"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [],
"collected": true,
"truncated": false,
"total_count": 0,
"direct_count": 0,
"indirect_count": 0
}
},
"maintainership": {
"issues": {
"open_prs": 3,
"merged_prs": 7,
"open_issues": 4,
"closed_ratio": 0.826,
"closed_issues": 19,
"closed_unmerged_prs": 10
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "alloy",
"commits": 54,
"avatar_url": "https://avatars.githubusercontent.com/u/2320?v=4"
},
{
"type": "User",
"login": "frostrubin",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/451035?v=4"
},
{
"type": "User",
"login": "bbonamin",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/713787?v=4"
},
{
"type": "User",
"login": "croeck",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/2677623?v=4"
},
{
"type": "User",
"login": "goronfreeman",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/5210483?v=4"
},
{
"type": "User",
"login": "glittershark",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1481027?v=4"
},
{
"type": "User",
"login": "henrikbrixandersen",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1076226?v=4"
},
{
"type": "User",
"login": "mattbrictson",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/189693?v=4"
},
{
"type": "User",
"login": "ranmocy",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/601767?v=4"
}
],
"contributors_sampled": 9,
"top_contributor_share": 0.794
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Gemfile.lock"
],
"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": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0",
"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": 2,
"reason": "Found 6/30 approved changesets -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 6 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no 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": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"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": null,
"reason": "no dependencies found",
"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": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "9a95bd460fe8b12053cba3b729261e08fdec1866",
"ran_at": "2026-07-28T14:04:09Z",
"aggregate_score": 2.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [
{
"number": 35,
"created_at": "2016-05-05T06:52:20Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 41,
"created_at": "2021-09-12T03:06:11Z",
"last_comment_at": "2021-09-12T13:39:40Z",
"last_comment_author": "RobinDaugherty"
},
{
"number": 43,
"created_at": "2022-07-06T16:23:14Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2016-02-20T13:59:01Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 30,
"created_at": "2015-09-24T03:10:15Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 36,
"created_at": "2016-12-21T00:47:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 39,
"created_at": "2019-01-30T03:07:39Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 40,
"created_at": "2021-03-09T15:09:59Z",
"last_comment_at": "2022-10-27T05:36:29Z",
"last_comment_author": "dsnovaes"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/Codaisseur/terminal-notifier-guard",
"host": "github.com",
"name": "terminal-notifier-guard",
"owner": "Codaisseur"
},
"metrics": {
"overall": {
"key": "overall",
"band": "critical",
"name": "Overall health",
"note": "The weighted overall 30 is calibrated to 24 on the published index scale (record calibration 2026-08-02). Abandonment Policy applies a 60% multiplier to weighted overall health and gives it a ceiling of 34.",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 30,
"calibrated": 24,
"calibration": "2026-08-02"
}
},
{
"code": "abandonment_overall_adjustment",
"params": {
"cap": 34,
"pct": 60
}
}
],
"value": 14,
"inputs": {
"security": 29,
"vitality": 13,
"community": 38,
"governance": 51,
"calibration": "2026-08-02",
"engineering": 18,
"ai_readiness": 31,
"abandonment_cap": 34,
"abandonment_state": "likely_abandoned",
"weighted_overall_raw": 30,
"abandonment_multiplier": 60,
"weighted_overall_before_abandonment": 24,
"overall_after_abandonment_multiplier": 14
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "critical",
"name": "Vitality",
"value": 13,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "critical",
"name": "Development activity",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"commits_last_year": 0,
"human_commit_share": 1,
"days_since_last_push": 1482,
"active_weeks_last_year": 0
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1482 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "push_recency",
"params": {
"days": 1482
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "0/52 weeks with commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 0
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "0 commits in the last year",
"points": 0,
"status": "missed",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 0
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "at_risk",
"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": 32,
"inputs": {
"releases_count": 15,
"latest_release_tag": "v1.7.0",
"releases_from_tags": true,
"days_since_latest_release": 3811,
"mean_days_between_releases": 143.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "15 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 15
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 3811 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "release_recency",
"params": {
"days": 3811
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~143.2 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 143.2
}
}
],
"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": "moderate",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"cap": 34,
"state": "likely_abandoned",
"guards": [],
"signals": [
"unanswered_contributions",
"release_stall",
"scorecard_unmaintained"
],
"red_flag": true,
"multiplier_pct": 60,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": 3,
"unanswered_open_issues": 4,
"days_since_last_merged_pr": 3818,
"days_since_last_human_commit": 3744,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "no human commit for 3744 days; 3 unmet obligation(s): pull requests unanswered, releases stalled, Scorecard reports it unmaintained",
"points": 60,
"status": "partial",
"details": [
{
"code": "abandonment_flagged",
"params": {
"days": 3744,
"count": 3,
"signals": "pull requests unanswered, releases stalled, Scorecard reports it unmaintained"
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "weak",
"name": "Community & Adoption",
"value": 38,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"forks": 24,
"stars": 164,
"watchers": 17,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "164 stars",
"points": 35.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 164
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "24 forks",
"points": 11.3,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 24
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "17 watchers",
"points": 6.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 17
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 19,
"inputs": {
"has_readme": false,
"has_license": false,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"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": "moderate",
"name": "Sustainability & Governance",
"value": 51,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "weak",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 36,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 9,
"top_contributor_share": 0.794
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 79% of commits",
"points": 4.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 79
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "9 contributors",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 9
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 58,
"inputs": {
"merged_prs": 7,
"open_issues": 4,
"closed_issues": 19,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.826,
"closed_unmerged_prs": 10,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "83% of issues closed",
"points": 34.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 83
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "7/17 decided PRs merged",
"points": 12.4,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 7,
"decided": 17
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 6/30 approved changesets -- score normalized to 2",
"points": 3,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"followers": 9,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "Codaisseur",
"public_repos": 446,
"account_age_days": 4100
},
"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": "9 followers of Codaisseur",
"points": 7.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 9,
"login": "Codaisseur"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "446 public repos, account ~11 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 446
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "critical",
"name": "Engineering Quality",
"value": 18,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 24,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "critical",
"name": "Documentation",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": false,
"has_docs_dir": false,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 29,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 29,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 2.9
},
"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 not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 6 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"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": "Found 6/30 approved changesets -- score normalized to 2",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"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.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"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": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 15
},
"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": 31,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 12,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.22,
"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": "22 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 22,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "weak",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 36,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Gemfile.lock"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Ruby",
"largest_source_bytes": 5743,
"source_files_sampled": 2,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Ruby without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Ruby"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/2 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 2,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"top": [],
"labels": [],
"scores": {},
"primary": null,
"evidence": [],
"artifacts": [],
"confidence": "none",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": false
},
"metrics_version": "2.5.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Community profile unavailable",
"rubygems package 'terminal-notifier-guard' points at a different repository (https://github.com/Springest/terminal-notifier-guard); excluded from ecosystem scoring"
],
"report_type": "repository",
"generated_at": "2026-07-28T14:04:21.716425Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/Codaisseur/terminal-notifier-guard.svg",
"full_name": "Codaisseur/terminal-notifier-guard",
"license_state": "custom",
"license_spdx": null
}